跳转到内容

模組:Forward parameters to template call

维基百科,自由的百科全书

这是Module:Forward parameters to template call当前版本,由Xiplus留言 | 贡献编辑于2022年2月10日 (四) 13:32 (Copied content from w:en:Module:Forward parameters to template call; see that page's history for attribution; via importer.js。这个网址是本页该版本的固定链接。

(差异) ←上一修订 | 最后版本 (差异) | 下一修订→ (差异)
local p = {}
local getArgs = require('Module:Arguments').getArgs
local sparseIpairs = require('Module:TableTools').sparseIpairs

function p.main(frame)
	local args = getArgs(frame)
	return p._main(args)
end

function convert(args)
	local filter = {}
	local newParams = {}
	for arg, val in pairs(args) do
		if arg == tostring(arg) then
			if arg:match("^_convert_prefix") then
				filter[val] = {}
			else
				if arg:match("^_forward_name") then
					newParams[val] = args[val]
	end end end end
	for arg, val in pairs(args) do
		if arg == tonumber(arg) then
			newParams[#newParams + 1] = val
		else
			for prefix, _ in pairs(filter) do
				if arg:match("^" .. prefix) then
					if arg == prefix then
						filter[prefix][0] = val
					else
						local prefixnum = arg:match("^" .. prefix .. "(%d)")
						if prefixnum then
							filter[prefix][tonumber(prefixnum)] = val
	end end end end end end
	for _, values in pairs(filter) do
		for _, val in sparseIpairs(values) do
			newParams[#newParams + 1] = val
	end end
	return newParams
end
	
function p._main(args)
	local markup = "{{" .. args._template
	local convertedArgs = convert(args)
	for i, val in ipairs(convertedArgs) do
		markup = markup .. "|" .. i .. "=" .. val
	end
	for param, val in pairs(convertedArgs) do
		if param == tostring(param) and not param:match("^_") then
			markup = markup .. "|" .. param .. "=" .. val
	end end
	return markup .. "}}"
end

return p