七日内新公告:全站维护公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Module:Template Repeat

贴贴♀百科,万娘皆可贴的百科全书!转载请标注来源页面的网页链接,并声明引自贴贴百科。内容不可商用。
跳到导航 跳到搜索
Template-info.svg 模块文档  [创建] [刷新]
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