模組:Vgr
外观
require("strict")
local chinese_date = require("Module:Date_Convert")._ChineseDate
local getArgs = require("Module:Arguments").getArgs
local list = require("Module:List").unbulleted
local yesno = require("Module:Yesno")
local region_data = mw.loadData("Module:Vgr/regions")
local ITEMS_LIMIT = 42
local DEFAULT_PLAIN_MODE = false
--- Get a label from its corresponding code.
--- If the label is found in the `code_mapping`, return the mapped value.
--- If not, return the input string as-is.
--- @param str string @The region code or name to be looked up.
--- @return string @The corresponding label or the input string if no match is found.
local function get_name(str)
return region_data[str] or str
end
--- Split label by common delimiters (comma, semicolon, slash, etc.)
--- @param str string @The string to split.
--- @return string[] @A table of split strings.
local function split_codes(str)
local ptn = "[,;/、,;/]%s-"
local result = mw.text.split(str, ptn, false)
return result
end
--- Build the label part from an argument.
--- @param val string @The given argument.
--- @return string @The casted label name.
local function build_label(val)
local codes = split_codes(val)
local names = {}
for _, code in ipairs(codes) do
local name = get_name(code)
table.insert(names, name)
end
local result = table.concat(names, "、")
return result
end
--- Build the data part from an argument.
--- @param val string @The given argument.
--- @param plain boolean @Whether to keep the direct input.
--- @return string @The handled data value.
local function build_data(val, plain)
if yesno(plain) then
return val
end
return chinese_date {val, error = "ignore", suf = "yes"}
end
--- Build an item.
--- @param val1 string @The label argument.
--- @param val2 string @The data argument.
--- @param plain boolean @Whether to keep the direct input.
--- @return string @The formatted item string.
local function build_item(val1, val2, plain)
local result = build_label(val1) .. ":" .. build_data(val2, plain)
return result
end
--- Parse the arguments to generate a list of items.
--- @param args table @The arguments table.
--- @return table @A list of item strings.
local function get_items(args)
local plain = args.plain or DEFAULT_PLAIN_MODE
-- E.g., {{vgr|2025年2月3日}} → 2025年2月3日 for implicit worldwide releases.
if args[1] and (args[2] == nil) then
local item = build_data(args[1], plain)
return {item}
end
-- E.g., {{vgr||2025年2月3日}} → 2025年2月3日 for implicit worldwide releases.
if args[2] and (args[1] == nil) then
local item = build_data(args[2], plain)
return {item}
end
-- Common usage.
local result = {}
for i = 1, ITEMS_LIMIT * 2, 2 do
local label = args[i]
if (label == "") or (label == nil) then
break
end
local data = args[i + 1] or ""
local item = build_item(label, data, plain)
table.insert(result, item)
end
return result
end
--- Main logic to generate the list.
--- @param args table @The arguments table.
--- @return string @The resulting HTML string.
local function main(args)
local result = list(get_items(args))
return result
end
local p = {}
--- Module entry point for internal calls.
--- @param args table @The arguments table.
--- @return string @The resulting HTML string.
function p._main(args)
return main(args)
end
--- Module entry point for template calls.
--- @param frame table @The frame object.
--- @return string @The resulting HTML string.
function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end
return p