local p = {}
local getArgs = require('Module:Arguments').getArgs
function parse_arg(arg)
if arg == nil or arg == '' then
return nil
end
arg = mw.text.unstripNoWiki(arg)
arg = mw.text.decode(arg)
return arg
end
function p._main(frame, args)
local args_list = {}
local tl = parse_arg(args['template'] or args['tl'] or '')
for k, v in pairs(args) do
local split_pos = string.find(k, "-")
if split_pos then
local arg_group = tonumber(string.sub(k, 1, split_pos - 1))
if arg_group ~= nil then
local arg_key = string.sub(k, split_pos + 1)
if args_list[arg_group] == nil then
args_list[arg_group] = {}
end
args_list[arg_group][arg_key] = v
end
end
end
local arg_groups = {}
for arg_group, _ in pairs(args_list) do
table.insert(arg_groups, arg_group)
end
table.sort(arg_groups)
local output = {}
local separator_default = parse_arg(args['separator'] or '') or ''
for i, arg_group in ipairs(arg_groups) do
args_sub = args_list[arg_group]
local frame_child = frame:newChild({args = args_sub})
local separator = ''
if i < #arg_groups then
separator = parse_arg(args['separator-' .. arg_group] or '') or separator_default
end
table.insert(output, frame_child:preprocess(tl .. separator))
end
return table.concat(output, '')
end
function p.main(frame)
return p._main(frame, getArgs(frame, { removeBlanks = false }))
end
return p