<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://www.wikiw.cn/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3ATemplateParameters</id>
	<title>模块:TemplateParameters - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://www.wikiw.cn/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3ATemplateParameters"/>
	<link rel="alternate" type="text/html" href="https://www.wikiw.cn/index.php?title=%E6%A8%A1%E5%9D%97:TemplateParameters&amp;action=history"/>
	<updated>2026-04-08T17:02:22Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://www.wikiw.cn/index.php?title=%E6%A8%A1%E5%9D%97:TemplateParameters&amp;diff=2159&amp;oldid=prev</id>
		<title>imported&gt;Xiplus：​已保护“模块:TemplateParameters”：高風險模板：23520引用（[编辑=仅管理员]（无限期）[移动=仅管理员]（无限期））</title>
		<link rel="alternate" type="text/html" href="https://www.wikiw.cn/index.php?title=%E6%A8%A1%E5%9D%97:TemplateParameters&amp;diff=2159&amp;oldid=prev"/>
		<updated>2020-03-09T11:44:20Z</updated>

		<summary type="html">&lt;p&gt;已保护“&lt;a href=&quot;/index.php?title=%E6%A8%A1%E5%9D%97:TemplateParameters&quot; title=&quot;模块:TemplateParameters&quot;&gt;模块:TemplateParameters&lt;/a&gt;”：高風險模板：23520引用（[编辑=仅管理员]（无限期）[移动=仅管理员]（无限期））&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local lib_arg = {}&lt;br /&gt;
local yesno = {}&lt;br /&gt;
local lib_editstate={};&lt;br /&gt;
function p.containsNumber(frame)&lt;br /&gt;
	-- For calling from #invoke.&lt;br /&gt;
    local args&lt;br /&gt;
    local can_call_parse = false&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        -- We&amp;#039;re being called via #invoke. The args are passed through to the module&lt;br /&gt;
        -- from the template page, so use the args that were passed into the template.&lt;br /&gt;
        args = frame.args&lt;br /&gt;
        can_call_parse = true&lt;br /&gt;
    else&lt;br /&gt;
        -- We&amp;#039;re being called from another module or from the debug console, so assume&lt;br /&gt;
        -- the args are passed in directly.&lt;br /&gt;
        args = frame&lt;br /&gt;
        if type(args) ~= type({}) then args = {frame} end&lt;br /&gt;
    end&lt;br /&gt;
    local input_str=mw.ustring.gsub(args[1] or args[&amp;#039;1&amp;#039;],&amp;#039;,&amp;#039;,&amp;#039;&amp;#039;)&lt;br /&gt;
    local g0=mw.ustring.gmatch(input_str,&amp;quot;[%+%-]?[0-9%.]+e[%+%-]?[0-9%.]+&amp;quot;)&lt;br /&gt;
    local out_str = nil&lt;br /&gt;
    if g0 then out_str = g0() end&lt;br /&gt;
    if (out_str or &amp;#039;&amp;#039;) == &amp;#039;&amp;#039; then &lt;br /&gt;
    	g0=mw.ustring.gmatch(input_str,&amp;quot;[%+%-]?[0-9%.]+&amp;quot;) &lt;br /&gt;
    else&lt;br /&gt;
    	return &amp;#039;1&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    if g0() then return &amp;#039;1&amp;#039; end&lt;br /&gt;
    return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getNumberValue(frame)&lt;br /&gt;
	-- For calling from #invoke.&lt;br /&gt;
    local args&lt;br /&gt;
    local can_call_parse = false&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        -- We&amp;#039;re being called via #invoke. The args are passed through to the module&lt;br /&gt;
        -- from the template page, so use the args that were passed into the template.&lt;br /&gt;
        args = frame.args&lt;br /&gt;
        can_call_parse = true&lt;br /&gt;
    else&lt;br /&gt;
        -- We&amp;#039;re being called from another module or from the debug console, so assume&lt;br /&gt;
        -- the args are passed in directly.&lt;br /&gt;
        args = frame&lt;br /&gt;
        if type(args) ~= type({}) then args = {frame} end&lt;br /&gt;
    end&lt;br /&gt;
    local input_str=mw.ustring.gsub(args[1] or args[&amp;#039;1&amp;#039;],&amp;#039;,&amp;#039;,&amp;#039;&amp;#039;)&lt;br /&gt;
    local g0=mw.ustring.gmatch(input_str,&amp;quot;[%+%-]?[0-9%.]+e[%+%-]?[0-9%.]+&amp;quot;)&lt;br /&gt;
    local out_str = nil&lt;br /&gt;
    if g0 then out_str = g0() end&lt;br /&gt;
    if (out_str or &amp;#039;&amp;#039;) == &amp;#039;&amp;#039; then &lt;br /&gt;
    	g0=mw.ustring.gmatch(input_str,&amp;quot;[%+%-]?[0-9%.]+&amp;quot;) &lt;br /&gt;
    else&lt;br /&gt;
    	return out_str&lt;br /&gt;
    end&lt;br /&gt;
    return g0() or &amp;#039;0&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.argTrim(frame)&lt;br /&gt;
	-- For calling from #invoke.&lt;br /&gt;
    local args&lt;br /&gt;
    local can_call_parse = false&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        -- We&amp;#039;re being called via #invoke. The args are passed through to the module&lt;br /&gt;
        -- from the template page, so use the args that were passed into the template.&lt;br /&gt;
        args = frame.args&lt;br /&gt;
        can_call_parse = true&lt;br /&gt;
    else&lt;br /&gt;
        -- We&amp;#039;re being called from another module or from the debug console, so assume&lt;br /&gt;
        -- the args are passed in directly.&lt;br /&gt;
        args = frame&lt;br /&gt;
        if type(args) ~= type({}) then args = {frame} end&lt;br /&gt;
    end&lt;br /&gt;
    local arg_counts = 1&lt;br /&gt;
    local input_str = &amp;#039;&amp;#039;&lt;br /&gt;
    local first_str = &amp;#039;&amp;#039;&lt;br /&gt;
    local one_str = mw.text.trim(args[&amp;#039;1&amp;#039;] or args[1] or &amp;#039;&amp;#039;)&lt;br /&gt;
    local count = 0&lt;br /&gt;
    local pipe_to_magic_word = false&lt;br /&gt;
    if (args[&amp;quot;pipe&amp;quot;] or &amp;#039;&amp;#039;) ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		if type(yesno) ~= type(tonumber) then yesno = require(&amp;#039;Module:Yesno&amp;#039;) end&lt;br /&gt;
		pipe_to_magic_word = yesno(args[&amp;quot;pipe&amp;quot;] or &amp;#039;no&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local num_arg_count = 0&lt;br /&gt;
	local first_arg = true&lt;br /&gt;
	for id,_ in pairs(args) do if (tonumber(id) or 0) &amp;gt; num_arg_count then num_arg_count = tonumber(id) or 0 end end&lt;br /&gt;
	for id=1,num_arg_count do &lt;br /&gt;
    	local it_str = mw.text.trim(args[tostring(id)] or args[id] or &amp;#039;&amp;#039;)&lt;br /&gt;
    	if pipe_to_magic_word then it_str = mw.ustring.gsub(it_str,&amp;quot;%|&amp;quot;, &amp;quot;{{!}}&amp;quot;) end&lt;br /&gt;
    	if not first_arg then input_str = input_str .. &amp;#039;|&amp;#039; else first_arg = false end&lt;br /&gt;
    	input_str = input_str .. it_str&lt;br /&gt;
    	if first_str == &amp;#039;&amp;#039; then first_str = it_str end&lt;br /&gt;
    	if it_str~=&amp;#039;&amp;#039; then count = count+1 end&lt;br /&gt;
	end&lt;br /&gt;
    for key,val in pairs(args) do&lt;br /&gt;
    	local it_str = mw.text.trim(val)&lt;br /&gt;
    	if pipe_to_magic_word then it_str = mw.ustring.gsub(it_str,&amp;quot;%|&amp;quot;, &amp;quot;{{!}}&amp;quot;) end&lt;br /&gt;
    	if (tonumber(key) or 0) &amp;lt; 1 and it_str~=&amp;#039;&amp;#039; and mw.text.trim(tostring(key)) ~= &amp;#039;pipe&amp;#039; then &lt;br /&gt;
    		if input_str ~= &amp;#039;&amp;#039; then input_str = input_str .. &amp;#039;|&amp;#039; end&lt;br /&gt;
    		input_str = input_str .. mw.text.trim(tostring(key)) .. &amp;#039;=&amp;#039; .. it_str&lt;br /&gt;
    		if first_str == &amp;#039;&amp;#039; then first_str = it_str end&lt;br /&gt;
    		count = count+1&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    if count &amp;gt; 1 then return mw.text.trim(input_str)&lt;br /&gt;
    else &lt;br /&gt;
    	if one_str~=&amp;#039;&amp;#039; then return first_str&lt;br /&gt;
    	else return mw.text.trim(input_str) end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.listArguments(frame)&lt;br /&gt;
	local body = &amp;#039;&amp;#039;&lt;br /&gt;
	function print_args(farg, str)&lt;br /&gt;
		local body = &amp;#039;&amp;#039;&lt;br /&gt;
		local flag = false&lt;br /&gt;
		if farg.args then&lt;br /&gt;
			body = body .. &amp;#039;*&amp;#039; .. &amp;quot;{{&amp;quot; .. (str or farg:getTitle())  .. &amp;quot;}}呼叫參數:&amp;quot; .. &amp;#039;\n&amp;#039;&lt;br /&gt;
			for k,v in pairs(farg.args) do&lt;br /&gt;
				if(type(v) ~= type(tonumber) and type(v) ~= type({}))then&lt;br /&gt;
					flag = true&lt;br /&gt;
					body = body .. &amp;#039;*:&amp;#039; .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. k .. &amp;quot;&amp;#039;&amp;#039;&amp;#039; : &amp;quot; .. tostring(v) .. &amp;#039;\n&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if flag then return body else return &amp;#039;&amp;#039; end&lt;br /&gt;
	end&lt;br /&gt;
	if frame ~= mw.getCurrentFrame() and type(frame) == type({}) then&lt;br /&gt;
		body = body .. &amp;#039;*&amp;#039; .. &amp;quot;函數呼叫參數:&amp;quot; .. &amp;#039;\n&amp;#039;&lt;br /&gt;
		for k,v in pairs(frame) do&lt;br /&gt;
			body = body .. &amp;#039;*:&amp;#039; .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. k .. &amp;quot;&amp;#039;&amp;#039;&amp;#039; : &amp;quot; .. v .. &amp;#039;\n&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local this_arg = frame.args&lt;br /&gt;
	if type(this_arg) == type({}) then body = body .. print_args(frame, &amp;quot;#invoke:&amp;quot;) end&lt;br /&gt;
	local iter = mw.getCurrentFrame()&lt;br /&gt;
	if iter == frame then iter = mw.getCurrentFrame():getParent() end&lt;br /&gt;
	while iter do&lt;br /&gt;
		body = body .. print_args(iter)&lt;br /&gt;
		iter = iter:getParent()&lt;br /&gt;
	end&lt;br /&gt;
	return body&lt;br /&gt;
end&lt;br /&gt;
local argument_check = false&lt;br /&gt;
function p.checkArgument(frame)&lt;br /&gt;
	argument_check = true&lt;br /&gt;
	return p.getParentArgument(frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeTemplateParameter(frame)  --產生模板參數字串&lt;br /&gt;
	local args, working_frame&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        -- We&amp;#039;re being called via #invoke. The args are passed through to the module&lt;br /&gt;
        -- from the template page, so use the args that were passed into the template.&lt;br /&gt;
        args = {}&lt;br /&gt;
        for key,value in frame:argumentPairs() do&lt;br /&gt;
        	args[key] = value or &amp;#039;&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
        local Parent = frame:getParent();&lt;br /&gt;
        if Parent then for key,value in Parent:argumentPairs() do&lt;br /&gt;
        	args[key] = args[key] or value or &amp;#039;&amp;#039;end &lt;br /&gt;
    	end&lt;br /&gt;
        working_frame = frame&lt;br /&gt;
    else&lt;br /&gt;
        -- We&amp;#039;re being called from another module or from the debug console, so assume&lt;br /&gt;
        -- the args are passed in directly.&lt;br /&gt;
        args = frame&lt;br /&gt;
        working_frame = mw.getCurrentFrame()&lt;br /&gt;
        if type(args) ~= type({}) then args = {frame} end&lt;br /&gt;
    end&lt;br /&gt;
    local argname = args[1] or args[&amp;#039;1&amp;#039;] or args[&amp;#039;name&amp;#039;]&lt;br /&gt;
    local argDefault = args[2] or args[&amp;#039;2&amp;#039;] or args[&amp;#039;default&amp;#039;]&lt;br /&gt;
    local default_text = &amp;#039;&amp;#039;&lt;br /&gt;
    if argname then&lt;br /&gt;
    	argname = mw.text.trim(argname or &amp;#039;&amp;#039;)&lt;br /&gt;
    	if argDefault then&lt;br /&gt;
    		default_text = &amp;#039;|&amp;#039; .. mw.text.trim(argDefault or &amp;#039;&amp;#039;)&lt;br /&gt;
    	end&lt;br /&gt;
    else&lt;br /&gt;
    	argname, default_text = &amp;#039;&amp;#039;, &amp;#039;|&amp;#039; .. mw.text.trim(argDefault or &amp;#039;&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    if mw.text.trim(argname .. default_text) == &amp;#039;&amp;#039; then return &amp;#039;&amp;#039; end&lt;br /&gt;
    local result = &amp;#039;{{{&amp;#039; .. argname .. default_text .. &amp;#039;}}}&amp;#039;&lt;br /&gt;
    if args[4] or args[&amp;#039;4&amp;#039;] then return result end&lt;br /&gt;
    if type(lib_editstate.isPreview) ~= type(tonumber) then lib_editstate = require(&amp;#039;Module:EditState&amp;#039;) end&lt;br /&gt;
    if ((mw.isSubsting() or lib_editstate.isPreview()) and (args[3] or args[&amp;#039;3&amp;#039;])) then&lt;br /&gt;
    	if working_frame:getParent() then return working_frame:getParent():preprocess(result) end&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.call(frame) --轉換模板參數為lua參數&lt;br /&gt;
	local args, working_frame&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        -- We&amp;#039;re being called via #invoke. The args are passed through to the module&lt;br /&gt;
        -- from the template page, so use the args that were passed into the template.&lt;br /&gt;
        if lib_arg.getArgs == nil then lib_arg = require(&amp;#039;Module:Arguments&amp;#039;) end&lt;br /&gt;
        args = lib_arg.getArgs(frame, {parentFirst=true})&lt;br /&gt;
        working_frame = frame&lt;br /&gt;
    else&lt;br /&gt;
        -- We&amp;#039;re being called from another module or from the debug console, so assume&lt;br /&gt;
        -- the args are passed in directly.&lt;br /&gt;
        args = frame&lt;br /&gt;
        working_frame = mw.getCurrentFrame()&lt;br /&gt;
        if type(args) ~= type({}) then args = {frame} end&lt;br /&gt;
    end&lt;br /&gt;
    local max_arg = 0 &lt;br /&gt;
    local num_args = {}&lt;br /&gt;
    local isJSON = false&lt;br /&gt;
    if args.isJSON then&lt;br /&gt;
    	if type(yesno) ~= type(tonumber) then yesno = require(&amp;#039;Module:Yesno&amp;#039;) end&lt;br /&gt;
    	if yesno(args.isJSON or &amp;#039;no&amp;#039;) then --local delnowiki=require(&amp;#039;Module:Delcat&amp;#039;).delnowiki --備用&lt;br /&gt;
			isJSON = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for key,value in pairs( args ) do&lt;br /&gt;
		local arg_id = tonumber(key or &amp;#039;&amp;#039;)&lt;br /&gt;
		if arg_id then&lt;br /&gt;
			if arg_id &amp;gt; max_arg then max_arg = arg_id end&lt;br /&gt;
			num_args[arg_id] = value&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local func_name = num_args[1]&lt;br /&gt;
	if mw.text.trim(func_name or &amp;#039;&amp;#039;) == &amp;#039;&amp;#039; then return &amp;#039;&amp;#039; end&lt;br /&gt;
	local call_args = {}&lt;br /&gt;
	local get_obj = function(obj)return obj end&lt;br /&gt;
	if isJSON then get_obj = function(obj)return mw.text.jsonDecode(obj)end end&lt;br /&gt;
	if max_arg &amp;gt; 1 then&lt;br /&gt;
		for i = 2,max_arg do&lt;br /&gt;
			if num_args[i] then &lt;br /&gt;
				local try_to_get_obj = mw.clone(num_args[i])&lt;br /&gt;
				if not xpcall( function() --try&lt;br /&gt;
					try_to_get_obj = get_obj(num_args[i])&lt;br /&gt;
				end, function(msg)return msg end ) then --catch&lt;br /&gt;
					call_args[i-1] = num_args[i]&lt;br /&gt;
				else --finally&lt;br /&gt;
					call_args[i-1] = try_to_get_obj&lt;br /&gt;
				end&lt;br /&gt;
			else call_args[i-1] = &amp;#039;&amp;#039; end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local func_path = mw.text.split(func_name,&amp;#039;%.&amp;#039;) or { [1]=func_name }&lt;br /&gt;
	local func_body = mw[func_path[1]] or p[func_path[1]] or _G[func_path[1]]&lt;br /&gt;
	if mw.ustring.find(func_path[1],&amp;#039;:&amp;#039;) then&lt;br /&gt;
		func_body = require(func_path[1]) or func_body&lt;br /&gt;
	end&lt;br /&gt;
	if func_body then&lt;br /&gt;
		local old_obj = func_body&lt;br /&gt;
		for i=2,#func_path do&lt;br /&gt;
			func_body = func_body[func_path[i]]&lt;br /&gt;
			if func_body then&lt;br /&gt;
				old_obj = func_body&lt;br /&gt;
			else&lt;br /&gt;
				return &amp;#039;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local func_type = type( func_body )&lt;br /&gt;
		local times = 10&lt;br /&gt;
		for ti = 1,times do&lt;br /&gt;
			if func_type == type(nil) then&lt;br /&gt;
				return &amp;#039;&amp;#039;&lt;br /&gt;
			elseif func_type == type(0) then&lt;br /&gt;
				return &amp;#039;&amp;#039; .. func_body&lt;br /&gt;
			elseif func_type == type(true) then&lt;br /&gt;
				if func_body then return &amp;#039;1&amp;#039; end&lt;br /&gt;
				return &amp;#039;&amp;#039;&lt;br /&gt;
			elseif func_type == type(type) then&lt;br /&gt;
				if max_arg &amp;gt; 1 then &lt;br /&gt;
					func_body = func_body(unpack(call_args))&lt;br /&gt;
					if func_body == nil then func_body = call_args[1] end&lt;br /&gt;
				else func_body = func_body() end&lt;br /&gt;
			elseif func_type == type(&amp;quot;string&amp;quot;) then&lt;br /&gt;
				return func_body&lt;br /&gt;
			elseif func_type == type({}) then&lt;br /&gt;
				return mw.text.jsonEncode(func_body)&lt;br /&gt;
			end&lt;br /&gt;
			func_type = type( func_body )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getParentArgument(frame)&lt;br /&gt;
	local this_arg = frame.args&lt;br /&gt;
	local check_if = this_arg[&amp;#039;if&amp;#039;] or this_arg[&amp;#039;if value&amp;#039;] or this_arg.if_value or &amp;#039;&amp;#039;&lt;br /&gt;
	if mw.ustring.find(check_if,&amp;#039;%[%[&amp;#039;) then check_if=require(&amp;#039;Module:Delcat&amp;#039;).delete_category(check_if, {}) end&lt;br /&gt;
	if mw.text.trim(check_if) ~= &amp;#039;&amp;#039; then return check_if end&lt;br /&gt;
	local out_arg = mw.getCurrentFrame():getParent().args&lt;br /&gt;
	if tonumber(this_arg.out or 1) &amp;gt; 1 then&lt;br /&gt;
		local iter = mw.getCurrentFrame()&lt;br /&gt;
		for i=1,tonumber(this_arg.out) do&lt;br /&gt;
			if iter:getParent() then&lt;br /&gt;
				iter = iter:getParent()&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if iter.args then out_arg=iter.args end&lt;br /&gt;
	end&lt;br /&gt;
	local result = &amp;#039;&amp;#039;&lt;br /&gt;
	local is_used = false&lt;br /&gt;
	if this_arg.name and out_arg then&lt;br /&gt;
		if out_arg[this_arg.name] then &lt;br /&gt;
			if result ~= &amp;#039;&amp;#039; and result ~= out_arg[this_arg.name] then is_used =true end&lt;br /&gt;
			result = out_arg[this_arg.name] &lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if out_arg then&lt;br /&gt;
		for k,v in ipairs(this_arg) do&lt;br /&gt;
			if out_arg[v] then &lt;br /&gt;
				if result ~= &amp;#039;&amp;#039; and result ~= out_arg[v] then is_used =true end&lt;br /&gt;
				result = out_arg[v] &lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if mw.getCurrentFrame():getParent() then&lt;br /&gt;
		if argument_check then argument_check = false else&lt;br /&gt;
			if is_used then mw.addWarning( mw.getCurrentFrame():getParent():getTitle() .. &amp;quot;中，參數 \&amp;quot;&amp;quot;&lt;br /&gt;
				.. (this_arg.name or this_arg[1]) ..  &amp;quot;\&amp;quot; 被用不同的內容定義了多次。&amp;quot;  ) end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if result == &amp;#039;&amp;#039; then return this_arg.value or this_arg[&amp;#039;if value&amp;#039;] or this_arg.if_value or &amp;#039;&amp;#039; end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getMaxArgCount(out_args, max_count, prefixs)&lt;br /&gt;
	for index, arg_val in pairs(out_args) do &lt;br /&gt;
		local start_id, end_id = mw.ustring.find(index,&amp;#039;%d+$&amp;#039;)&lt;br /&gt;
		if start_id then&lt;br /&gt;
			local index_name = mw.text.trim(mw.ustring.sub(index, 1, start_id-1))&lt;br /&gt;
			local index_num = mw.ustring.sub(index, start_id, end_id)&lt;br /&gt;
			for ____,prefix in pairs(prefixs) do &lt;br /&gt;
				if mw.text.trim(prefix) == index_name then&lt;br /&gt;
					if (tonumber(index_num) or 0) &amp;gt; max_count then &lt;br /&gt;
						max_count = (tonumber(index_num) or 0) &lt;br /&gt;
					end&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return max_count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--外部讀取不定參數&lt;br /&gt;
function p.FormatingArguments(frame)&lt;br /&gt;
	-- For calling from #invoke.&lt;br /&gt;
    local args&lt;br /&gt;
    --是否存在有效的frame可供呼叫&lt;br /&gt;
    local can_call_parse = false&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        -- We&amp;#039;re being called via #invoke. The args are passed through to the module&lt;br /&gt;
        -- from the template page, so use the args that were passed into the template.&lt;br /&gt;
        args = frame.args&lt;br /&gt;
        can_call_parse = true&lt;br /&gt;
    else&lt;br /&gt;
        -- We&amp;#039;re being called from another module or from the debug console, so assume&lt;br /&gt;
        -- the args are passed in directly.&lt;br /&gt;
        args = frame&lt;br /&gt;
    end&lt;br /&gt;
    local input_str = &amp;#039;&amp;#039; --輸入的格式化字串&lt;br /&gt;
    local count = 1 --預設參數數量為1個一組&lt;br /&gt;
    if args[&amp;quot;format&amp;quot;] or args[&amp;quot;Format&amp;quot;] or args[&amp;quot;格式&amp;quot;] then input_str = args[&amp;quot;format&amp;quot;] or args[&amp;quot;Format&amp;quot;] or args[&amp;quot;格式&amp;quot;] or &amp;#039;&amp;#039; end&lt;br /&gt;
    if args[&amp;quot;count&amp;quot;] then count = tonumber(args[&amp;quot;count&amp;quot;] or 1) or 1 end&lt;br /&gt;
    local display_all = false --是否顯示跳過的參數 (如輸入1,2,5參數，決定是否輸出3,4參數)&lt;br /&gt;
    local delnowiki = false --是否從nowiki中解除包裝&lt;br /&gt;
    local hasPrefixArg = false &lt;br /&gt;
    local arrPrefixArg = {}&lt;br /&gt;
    local allexpr = false --是否每組參數全部都呼叫一次帶參數的新解析器 (高開銷，最多100次)&lt;br /&gt;
    local allexpr_count = 1 --紀錄呼叫帶參數的新解析器次數，以免超過100次lua停止運作&lt;br /&gt;
    if args[&amp;quot;displayAll&amp;quot;] then&lt;br /&gt;
    	if type(yesno) ~= type(tonumber) then yesno = require(&amp;#039;Module:Yesno&amp;#039;) end&lt;br /&gt;
		display_all = yesno(args[&amp;quot;displayAll&amp;quot;] or &amp;#039;no&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
    if args[&amp;quot;PrefixArgs&amp;quot;] then&lt;br /&gt;
	    if args[&amp;quot;hasPrefixArg&amp;quot;] then&lt;br /&gt;
	    	if type(yesno) ~= type(tonumber) then yesno = require(&amp;#039;Module:Yesno&amp;#039;) end&lt;br /&gt;
			hasPrefixArg = yesno(args[&amp;quot;hasPrefixArg&amp;quot;] or &amp;#039;no&amp;#039;)&lt;br /&gt;
			arrPrefixArg = mw.text.split(args[&amp;quot;PrefixArgs&amp;quot;] or &amp;#039;&amp;#039;,&amp;#039;,&amp;#039;);&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    if args[&amp;quot;delnowiki&amp;quot;] then&lt;br /&gt;
    	if type(yesno) ~= type(tonumber) then yesno = require(&amp;#039;Module:Yesno&amp;#039;) end&lt;br /&gt;
    	if yesno(args[&amp;quot;delnowiki&amp;quot;] or &amp;#039;no&amp;#039;) then --local delnowiki=require(&amp;#039;Module:Delcat&amp;#039;).delnowiki --備用&lt;br /&gt;
			input_str = mw.text.unstripNoWiki( input_str )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if args[&amp;quot;delmsgnw&amp;quot;] then&lt;br /&gt;
    	if type(yesno) ~= type(tonumber) then yesno = require(&amp;#039;Module:Yesno&amp;#039;) end&lt;br /&gt;
    	if yesno(args[&amp;quot;delmsgnw&amp;quot;] or &amp;#039;no&amp;#039;) then &lt;br /&gt;
			input_str = mw.text.decode( input_str )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
    if args[&amp;quot;allexpr&amp;quot;] then --較耗費資源&lt;br /&gt;
    	if type(yesno) ~= type(tonumber) then yesno = require(&amp;#039;Module:Yesno&amp;#039;) end&lt;br /&gt;
		allexpr = yesno(args[&amp;quot;allexpr&amp;quot;] or &amp;#039;no&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
    count = math.floor(count) --不處理小數&lt;br /&gt;
    if count &amp;lt; 1 then count = 1 end --非正整數當作1&lt;br /&gt;
    &lt;br /&gt;
    local other_num_args = {} --紀錄範圍外參數&lt;br /&gt;
    if args[&amp;quot;checkMoreArg&amp;quot;] then --處理範圍外參數 (如已定義每組3參數，但想用{{{4}}}存取下一組的第一參數)&lt;br /&gt;
    	if type(yesno) ~= type(tonumber) then yesno = require(&amp;#039;Module:Yesno&amp;#039;) end&lt;br /&gt;
    	if yesno(args[&amp;quot;checkMoreArg&amp;quot;] or &amp;#039;no&amp;#039;) then --較耗費資源&lt;br /&gt;
			local allnumarg_checker = mw.ustring.gmatch(input_str,&amp;quot;%{%{%{[^%{%}%|]+[%}%|]&amp;quot;)&lt;br /&gt;
			local pre_arg_str = allnumarg_checker() --匹配模板參數&lt;br /&gt;
			local find_num_args = {}&lt;br /&gt;
			while(pre_arg_str) do&lt;br /&gt;
				local arg_name_str = mw.ustring.gsub(pre_arg_str,&amp;quot;[^%d%l%u%+%-%.]&amp;quot;,&amp;#039;&amp;#039;)&lt;br /&gt;
				local arg_name_num = tonumber(arg_name_str)&lt;br /&gt;
				if arg_name_num then&lt;br /&gt;
					find_num_args[arg_name_num] = true&lt;br /&gt;
				end&lt;br /&gt;
				pre_arg_str = allnumarg_checker()&lt;br /&gt;
			end&lt;br /&gt;
			for check_is_other_num_args, _ in pairs(find_num_args) do --紀錄範圍外參數&lt;br /&gt;
				if check_is_other_num_args &amp;gt; count or check_is_other_num_args &amp;lt; 1 then&lt;br /&gt;
					other_num_args[#other_num_args + 1] = check_is_other_num_args&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    local usingConditionalExpressions = false --是否額外再呼叫解析器函數&lt;br /&gt;
    if args.usingConditionalExpressions then&lt;br /&gt;
    	if type(yesno) ~= type(tonumber) then yesno = require(&amp;#039;Module:Yesno&amp;#039;) end&lt;br /&gt;
    	if yesno(args.usingConditionalExpressions) == true and can_call_parse then&lt;br /&gt;
    		usingConditionalExpressions = true&lt;br /&gt;
    		input_str = p._get_escape(input_str)&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    local out_frame = mw.getCurrentFrame():getParent() --模板外層&lt;br /&gt;
    local out_args = {} --紀錄來自模板外層提供的參數&lt;br /&gt;
    local body = &amp;#039;&amp;#039;&lt;br /&gt;
    if out_frame then out_args = out_frame.args or out_args end&lt;br /&gt;
    &lt;br /&gt;
	local valueTable = {} --紀錄可用值 (參數) 提供填入參數之用&lt;br /&gt;
    local max_count, i, j = 1, 0, 0 for index, arg_val in pairs(out_args) do if (tonumber(index) or 0) &amp;gt; max_count then max_count = (tonumber(index) or 0) end valueTable[#valueTable + 1] = arg_val end&lt;br /&gt;
    max_count = math.ceil(max_count / count); --獲輸入參數之最大數量 (以組為單位)&lt;br /&gt;
    &lt;br /&gt;
    if hasPrefixArg then max_count = getMaxArgCount(out_args, max_count, arrPrefixArg) end&lt;br /&gt;
&lt;br /&gt;
    local last_one = false&lt;br /&gt;
    for i = 1, max_count do&lt;br /&gt;
    	local local_arg = {} --紀錄本組的參數&lt;br /&gt;
    	local_arg.isLast, local_arg[&amp;quot;isFirst&amp;quot;]= &amp;#039;&amp;#039;, &amp;#039;&amp;#039; --提供判斷的魔術參數&lt;br /&gt;
    	local_arg.count=tostring(max_count)&lt;br /&gt;
    	local_arg.argGroupID = tostring(i)&lt;br /&gt;
    	local_arg.last = out_args[tostring(i * count)] or out_args[i * count] or args[tostring(count)] or args[count]&lt;br /&gt;
    	if local_arg.last == nil and not allexpr then local_arg.last=(&amp;#039;{{{&amp;#039; .. tostring(count) .. &amp;#039;}}}&amp;#039;) end&lt;br /&gt;
    	if i == max_count then local_arg[&amp;quot;isLast&amp;quot;] = &amp;#039;1&amp;#039; end&lt;br /&gt;
    	if i == 1 then local_arg[&amp;quot;isFirst&amp;quot;] = &amp;#039;1&amp;#039; end&lt;br /&gt;
		if allexpr and allexpr_count &amp;gt; 99 then&lt;br /&gt;
		 	allexpr = false  --紀錄呼叫帶參數的新解析器次數，超過100次停止運作，改用純字串替換完成輸出&lt;br /&gt;
		    mw.addWarning( &amp;quot;指定 \&amp;quot;allexpr\&amp;quot; 參數全部展開已超過展開上限，後面的參數將使用低消耗函式填入數值。&amp;quot; )&lt;br /&gt;
		end&lt;br /&gt;
    	if(#valueTable &amp;gt; 1) then --提供部分須輪播展示的參數組&lt;br /&gt;
			local_arg.allRandom = valueTable[math.random( 1, #valueTable )]&lt;br /&gt;
			local rand_local = math.random(1, count)&lt;br /&gt;
			local rand_it = (i-1) * count + rand_local --查無參數則從外層抓&lt;br /&gt;
	   		local_arg.random = out_args[tostring(rand_it)] or out_args[rand_it] or args[tostring(rand_local)] or args[rand_local]&lt;br /&gt;
	    		if local_arg.random == nil and not allexpr then local_arg.random=(&amp;#039;{{{&amp;#039; .. tostring(rand_local) .. &amp;#039;}}}&amp;#039;) end&lt;br /&gt;
    	end&lt;br /&gt;
    	local is_ready = false --本組參數是否有值&lt;br /&gt;
    	for j = 1, count do&lt;br /&gt;
    		local it = (i-1) * count + j&lt;br /&gt;
    		local_arg.ArgID = tostring(it)&lt;br /&gt;
    		local_arg[j] = out_args[tostring(it)] or out_args[it] or args[tostring(j)] or args[j]&lt;br /&gt;
    		if local_arg[j] == nil and not allexpr then local_arg[j]=(&amp;#039;{{{&amp;#039; .. tostring(j) .. &amp;#039;}}}&amp;#039;) end&lt;br /&gt;
    		--找到本組參數的其中一個值&lt;br /&gt;
    		if out_args[tostring(it)] or out_args[it] then is_ready = true end&lt;br /&gt;
    	end&lt;br /&gt;
    	&lt;br /&gt;
    	if hasPrefixArg then local_arg, is_ready = addPrefixArgToArgList(out_args, args, local_arg, tostring(i), arrPrefixArg, allexpr, is_ready) end&lt;br /&gt;
    	&lt;br /&gt;
    	for _, other_arg_it in ipairs(other_num_args) do --處理範圍外參數&lt;br /&gt;
    		local it = (i-1) * count + other_arg_it&lt;br /&gt;
    		local_arg[other_arg_it] = out_args[tostring(it)] or out_args[it] or args[tostring(other_arg_it)] or args[other_arg_it]&lt;br /&gt;
    		if local_arg[other_arg_it] == nil and not allexpr then local_arg[other_arg_it]=(&amp;#039;{{{&amp;#039; .. tostring(other_arg_it) .. &amp;#039;}}}&amp;#039;) end&lt;br /&gt;
    	end&lt;br /&gt;
	    if is_ready or display_all then --本組參數有值存在才輸出; 如果設定全部顯示也顯示&lt;br /&gt;
		    local output_str = tostring(input_str)&lt;br /&gt;
		    if allexpr then &lt;br /&gt;
				for org_arg, org_arg_val in pairs(args) do&lt;br /&gt;
					if (local_arg[org_arg] or &amp;#039;&amp;#039;) == &amp;#039;&amp;#039; then local_arg[org_arg] = org_arg_val end&lt;br /&gt;
				end&lt;br /&gt;
		    	local working_frame = frame:newChild{ title = frame:getTitle(), args = local_arg }&lt;br /&gt;
		    	body=body..working_frame:preprocess( output_str ) --呼叫帶參數的新解析器&lt;br /&gt;
		    	allexpr_count=allexpr_count+1&lt;br /&gt;
			else&lt;br /&gt;
				body=body..p._getFormatingStringByArgument(output_str, local_arg) --使用一般字串取代填入參數&lt;br /&gt;
		    end&lt;br /&gt;
		    &lt;br /&gt;
	   	end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if usingConditionalExpressions and can_call_parse then&lt;br /&gt;
    	body = frame:preprocess( body )&lt;br /&gt;
    end&lt;br /&gt;
    return body&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--內部讀取確定參數&lt;br /&gt;
function p.getFormatingStringByArgument(frame)&lt;br /&gt;
	-- For calling from #invoke.&lt;br /&gt;
    local args&lt;br /&gt;
    local can_call_parse = false&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        -- We&amp;#039;re being called via #invoke. The args are passed through to the module&lt;br /&gt;
        -- from the template page, so use the args that were passed into the template.&lt;br /&gt;
        if lib_arg.getArgs == nil then lib_arg = require(&amp;#039;Module:Arguments&amp;#039;) end&lt;br /&gt;
        args = lib_arg.getArgs(frame) --frame.args&lt;br /&gt;
        can_call_parse = true&lt;br /&gt;
    else&lt;br /&gt;
        -- We&amp;#039;re being called from another module or from the debug console, so assume&lt;br /&gt;
        -- the args are passed in directly.&lt;br /&gt;
        args = frame&lt;br /&gt;
    end&lt;br /&gt;
    local targs = {}&lt;br /&gt;
    for arg, val in pairs(args) do&lt;br /&gt;
    	if tonumber(arg) ~= 1 then&lt;br /&gt;
    		targs[arg] = val&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    local input_str = args[1] or args[&amp;#039;1&amp;#039;]&lt;br /&gt;
    local usingConditionalExpressions = false&lt;br /&gt;
    if args.usingConditionalExpressions then&lt;br /&gt;
    	if type(yesno) ~= type(tonumber) then yesno = require(&amp;#039;Module:Yesno&amp;#039;) end&lt;br /&gt;
    	if yesno(args.usingConditionalExpressions) == true and can_call_parse then&lt;br /&gt;
    		usingConditionalExpressions = true&lt;br /&gt;
    		input_str = p._get_escape(input_str)&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    local output_str = p._getFormatingStringByArgument(input_str, targs)&lt;br /&gt;
    if usingConditionalExpressions and can_call_parse then&lt;br /&gt;
    	output_str = frame:preprocess( output_str )&lt;br /&gt;
    end&lt;br /&gt;
    return output_str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._findNullArgument(str, args)&lt;br /&gt;
	local result = str or &amp;quot;*{{{1}}}\n&amp;quot;&lt;br /&gt;
	local emptylist = {}&lt;br /&gt;
	for k,v in pairs(args) do&lt;br /&gt;
		local ke = p._getEscapeString(k)&lt;br /&gt;
		local pattern = &amp;quot;%{%{%{%s*&amp;quot;.. ke .. &amp;quot;%s*%}%}%}&amp;quot;&lt;br /&gt;
		if mw.ustring.find(result, pattern) then&lt;br /&gt;
			if string.gsub(string.gsub(v or &amp;#039;&amp;#039; , &amp;#039; &amp;#039;, &amp;quot;&amp;quot;) , &amp;quot;%s$&amp;quot;, &amp;quot;&amp;quot;) == &amp;#039;&amp;#039; then emptylist[k] = true end&lt;br /&gt;
		else emptylist[k] = true end&lt;br /&gt;
		result = mw.ustring.gsub(result, pattern, tostring(args[k]) )&lt;br /&gt;
	end&lt;br /&gt;
	return emptylist&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--格式化字串的處理，會將特殊的 {{{}}} 轉換&lt;br /&gt;
function p._getEscapeString(str) str = mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(str, &amp;quot;%%&amp;quot;, &amp;quot;%%%%&amp;quot;), &amp;quot;%]&amp;quot;, &amp;quot;%]&amp;quot;), &amp;quot;%{&amp;quot;, &amp;quot;%{&amp;quot;), &amp;quot;%}&amp;quot;, &amp;quot;%}&amp;quot;), &amp;quot;%[&amp;quot;, &amp;quot;%[&amp;quot;), &amp;quot;%)&amp;quot;, &amp;quot;%)&amp;quot;), &amp;quot;%-&amp;quot;, &amp;quot;%-&amp;quot;), &amp;quot;%^&amp;quot;, &amp;quot;%^&amp;quot;), &amp;quot;%$&amp;quot;, &amp;quot;%$&amp;quot;), &amp;quot;%(&amp;quot;, &amp;quot;%(&amp;quot;), &amp;quot;%.&amp;quot;, &amp;quot;%.&amp;quot;), &amp;quot;%*&amp;quot;, &amp;quot;%*&amp;quot;), &amp;quot;%+&amp;quot;, &amp;quot;%+&amp;quot;), &amp;quot;%|&amp;quot;, &amp;quot;%|&amp;quot;); return str; end function p._getFormatingStringByArgument(str, args)&lt;br /&gt;
	local result = str or &amp;quot;*{{{1}}}\n&amp;quot;&lt;br /&gt;
	for k,v in pairs(args) do&lt;br /&gt;
		local ke = p._getEscapeString(k)&lt;br /&gt;
		result = mw.ustring.gsub(result, &amp;quot;%{%{%{%s*&amp;quot;.. ke .. &amp;quot;%s*%}%}%}&amp;quot;, tostring(args[k]) )&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._get_escape(str)&lt;br /&gt;
 	local escapestrs = mw.text.split( str, &amp;#039;\\\\&amp;#039;)&lt;br /&gt;
 	local escapechars = {{&amp;quot;\\n&amp;quot;, &amp;quot;\n&amp;quot;},{&amp;quot;\\r&amp;quot;, &amp;quot;\r&amp;quot;},{&amp;quot;\\t&amp;quot;, &amp;quot;\t&amp;quot;},{&amp;quot;\\b&amp;quot;, &amp;quot;\b&amp;quot;},{&amp;quot;\\f&amp;quot;, &amp;quot;\f&amp;quot;},{&amp;quot;\\v&amp;quot;, &amp;quot;\v&amp;quot;},{&amp;quot;\\&amp;quot;, &amp;quot;&amp;quot;},}&lt;br /&gt;
 	for i,text in pairs(escapestrs) do &lt;br /&gt;
 		for _, escape_result in ipairs(escapechars) do&lt;br /&gt;
 			escapestrs[i] = mw.ustring.gsub(escapestrs[i], escape_result[1], escape_result[2])&lt;br /&gt;
 		end&lt;br /&gt;
 	end&lt;br /&gt;
 	return table.concat(escapestrs, &amp;#039;\\&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.arg_to_spstr(frame)&lt;br /&gt;
	-- For calling from #invoke.&lt;br /&gt;
    local args&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        -- We&amp;#039;re being called via #invoke. The args are passed through to the module&lt;br /&gt;
        -- from the template page, so use the args that were passed into the template.&lt;br /&gt;
        if lib_arg.getArgs == nil then lib_arg = require(&amp;#039;Module:Arguments&amp;#039;) end&lt;br /&gt;
        args = lib_arg.getArgs(frame)&lt;br /&gt;
    else&lt;br /&gt;
        -- We&amp;#039;re being called from another module or from the debug console, so assume&lt;br /&gt;
        -- the args are passed in directly.&lt;br /&gt;
        args = frame&lt;br /&gt;
        if type(frame) ~= type({}) then args = {frame} end&lt;br /&gt;
    end&lt;br /&gt;
    body=&amp;#039;&amp;#039;&lt;br /&gt;
    for k,v in pairs(args) do&lt;br /&gt;
		body = body .. &amp;quot;&amp;lt;參數分隔/&amp;gt;&amp;quot; .. k .. &amp;quot;&amp;lt;參數值/&amp;gt;&amp;quot; .. v&lt;br /&gt;
	end&lt;br /&gt;
	return body&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.pass_spstr(frame)&lt;br /&gt;
	-- For calling from #invoke.&lt;br /&gt;
    local args&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        -- We&amp;#039;re being called via #invoke. The args are passed through to the module&lt;br /&gt;
        -- from the template page, so use the args that were passed into the template.&lt;br /&gt;
        if lib_arg.getArgs == nil then lib_arg = require(&amp;#039;Module:Arguments&amp;#039;) end&lt;br /&gt;
        args = lib_arg.getArgs(frame) --frame.args&lt;br /&gt;
    else&lt;br /&gt;
        -- We&amp;#039;re being called from another module or from the debug console, so assume&lt;br /&gt;
        -- the args are passed in directly.&lt;br /&gt;
        if type(frame) ~= type({}) then args = {frame}&lt;br /&gt;
        else args = frame end&lt;br /&gt;
    end&lt;br /&gt;
    local input_text = args[&amp;#039;code&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    if args[&amp;quot;delnowiki&amp;quot;] then&lt;br /&gt;
    	if type(yesno) ~= type(tonumber) then yesno = require(&amp;#039;Module:Yesno&amp;#039;) end&lt;br /&gt;
    	if yesno(args[&amp;quot;delnowiki&amp;quot;] or &amp;#039;no&amp;#039;) then --local delnowiki=require(&amp;#039;Module:Delcat&amp;#039;).delnowiki --備用&lt;br /&gt;
			input_text = mw.text.unstripNoWiki( input_text )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if args[&amp;quot;delmsgnw&amp;quot;] then&lt;br /&gt;
    	if type(yesno) ~= type(tonumber) then yesno = require(&amp;#039;Module:Yesno&amp;#039;) end&lt;br /&gt;
    	if yesno(args[&amp;quot;delmsgnw&amp;quot;] or &amp;#039;no&amp;#039;) then &lt;br /&gt;
			input_text = mw.text.decode( input_text )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
    local input_text = p._get_escape(input_text)&lt;br /&gt;
    local input_args = { text = input_text }&lt;br /&gt;
    local input_title = args[&amp;#039;TemplateTitle&amp;#039;]&lt;br /&gt;
    local spilt_args = mw.text.split( args[&amp;#039;args&amp;#039;] or &amp;#039;&amp;#039;, &amp;#039;&amp;lt;參數分隔/&amp;gt;&amp;#039;)&lt;br /&gt;
    local working_frame = frame&lt;br /&gt;
	if type(yesno) ~= type(tonumber) then yesno = require(&amp;#039;Module:Yesno&amp;#039;) end&lt;br /&gt;
	local child_args = {}&lt;br /&gt;
	for aname, aval in pairs(args) do child_args[aname] = aval end&lt;br /&gt;
    if yesno(args.useParent or &amp;#039;no&amp;#039;) == true then &lt;br /&gt;
    	working_frame = frame:getParent() or frame &lt;br /&gt;
    	for aname, aval in pairs(working_frame.args) do child_args[aname] = aval end&lt;br /&gt;
    end&lt;br /&gt;
    for _,v in ipairs(spilt_args) do&lt;br /&gt;
    	local text = mw.text.trim(v)&lt;br /&gt;
    	if text ~= &amp;#039;&amp;#039; then&lt;br /&gt;
    		local spilt_kv = mw.text.split( text, &amp;#039;&amp;lt;參數值/&amp;gt;&amp;#039;)&lt;br /&gt;
    		local key = mw.text.trim(spilt_kv[1])&lt;br /&gt;
    		local nkey = tonumber(key)&lt;br /&gt;
    		if key ~= &amp;#039;&amp;#039; then input_args[key],child_args[key] = spilt_kv[2],spilt_kv[2] end&lt;br /&gt;
    		--if nkey ~= nil then input_args[nkey],child_args[nkey] = spilt_kv[2],spilt_kv[2] end&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    working_frame = working_frame:newChild{ title = input_title or working_frame:getTitle(), args = child_args }&lt;br /&gt;
	return working_frame:preprocess(input_args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function addPrefixArgToArgList(in_arg1, in_arg2, out_args, item_id, prefixs, allexpr, is_ready)&lt;br /&gt;
	for ____,prefix in pairs(prefixs) do &lt;br /&gt;
		local argName = prefix .. item_id&lt;br /&gt;
		out_args[prefix] = in_arg1[argName] or in_arg2[argName]&lt;br /&gt;
		if out_args[prefix] then is_ready = true end&lt;br /&gt;
		if out_args[prefix] == nil and not allexpr then out_args[prefix]=(&amp;#039;{{{&amp;#039; .. prefix .. &amp;#039;}}}&amp;#039;) end&lt;br /&gt;
	end&lt;br /&gt;
	return out_args, is_ready&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.templateArgWarp(frame, warpargs)&lt;br /&gt;
	local args, new_name&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        -- We&amp;#039;re being called via #invoke. The args are passed through to the module&lt;br /&gt;
        -- from the template page, so use the args that were passed into the template.&lt;br /&gt;
        new_name = frame.args[&amp;#039;1&amp;#039;] or frame.args[1] or frame.args.name or frame.args.Name&lt;br /&gt;
        local parent = frame:getParent() or {[&amp;#039;args&amp;#039;]={}}&lt;br /&gt;
        args = parent.args&lt;br /&gt;
    else&lt;br /&gt;
        -- We&amp;#039;re being called from another module or from the debug console, so assume&lt;br /&gt;
        -- the args are passed in directly.&lt;br /&gt;
        if type(frame) == type(&amp;#039;string&amp;#039;) then new_name = frame&lt;br /&gt;
        elseif type(frame) == type({}) then new_name = frame[&amp;#039;1&amp;#039;] or frame[1] or frame.name or frame.Name&lt;br /&gt;
        end&lt;br /&gt;
        args = warpargs or mw.getCurrentFrame().args&lt;br /&gt;
    end&lt;br /&gt;
    local result = require(&amp;#039;Module:Template invocation&amp;#039;).invocation(new_name, args)&lt;br /&gt;
    local args_other = mw.getCurrentFrame().args.args&lt;br /&gt;
    if args_other then result = mw.ustring.gsub(mw.text.trim(result),&amp;quot;}}$&amp;quot;,&amp;#039;&amp;#039;) .. &amp;#039;|&amp;#039; .. args_other .. &amp;quot;}}&amp;quot; end&lt;br /&gt;
    if mw.getCurrentFrame().args[&amp;quot;preprocess&amp;quot;] then&lt;br /&gt;
    	if type(yesno) ~= type(tonumber) then yesno = require(&amp;#039;Module:Yesno&amp;#039;) end&lt;br /&gt;
    	if yesno(mw.getCurrentFrame().args[&amp;quot;preprocess&amp;quot;] or &amp;#039;no&amp;#039;) then&lt;br /&gt;
			return mw.getCurrentFrame():preprocess(result)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Xiplus</name></author>
	</entry>
</feed>