• Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

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, { removeBlanks = false }))
end

return p