Module:Template Repeat
跳到导航
跳到搜索
- 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))
- end
- return p