<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>http://wiki.kyoshihira.uk/index.php?action=history&amp;feed=atom&amp;title=Module%3AIfUtil</id>
	<title>Module:IfUtil - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.kyoshihira.uk/index.php?action=history&amp;feed=atom&amp;title=Module%3AIfUtil"/>
	<link rel="alternate" type="text/html" href="http://wiki.kyoshihira.uk/index.php?title=Module:IfUtil&amp;action=history"/>
	<updated>2026-10-25T12:09:24Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://wiki.kyoshihira.uk/index.php?title=Module:IfUtil&amp;diff=1819&amp;oldid=prev</id>
		<title>Lhscogs：​导入1个版本</title>
		<link rel="alternate" type="text/html" href="http://wiki.kyoshihira.uk/index.php?title=Module:IfUtil&amp;diff=1819&amp;oldid=prev"/>
		<updated>2025-06-28T17:07:55Z</updated>

		<summary type="html">&lt;p&gt;导入1个版本&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2025年6月28日 (六) 17:07的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;zh&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;（没有差异）&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Lhscogs</name></author>
	</entry>
	<entry>
		<id>http://wiki.kyoshihira.uk/index.php?title=Module:IfUtil&amp;diff=1818&amp;oldid=prev</id>
		<title>wikipedia&gt;Shizhao：​自Module:IfUtil/sandbox合并A2569875的版本80251733</title>
		<link rel="alternate" type="text/html" href="http://wiki.kyoshihira.uk/index.php?title=Module:IfUtil&amp;diff=1818&amp;oldid=prev"/>
		<updated>2024-01-22T12:31:10Z</updated>

		<summary type="html">&lt;p&gt;自&lt;a href=&quot;/index.php?title=Module:IfUtil/sandbox&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Module:IfUtil/sandbox（页面不存在）&quot;&gt;Module:IfUtil/sandbox&lt;/a&gt;合并&lt;a href=&quot;/index.php/Special:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/A2569875&quot; title=&quot;Special:用户贡献/A2569875&quot;&gt;A2569875&lt;/a&gt;的&lt;a href=&quot;/index.php/Special:%E5%9B%BA%E5%AE%9A%E9%93%BE%E6%8E%A5/80251733&quot; title=&quot;Special:固定链接/80251733&quot;&gt;版本80251733&lt;/a&gt;&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 = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p.noTrim(frame)--{{#invoke:IfUtil|noTrim|expr|5&amp;gt;3|Yes|No}}&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, {&lt;br /&gt;
        	parentFirst=true,&lt;br /&gt;
        	trim = false,&lt;br /&gt;
			removeBlanks = false&lt;br /&gt;
        })&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 command = mw.ustring.lower(mw.text.trim(args[&amp;#039;1&amp;#039;] or args[1] or &amp;#039;&amp;#039;))&lt;br /&gt;
    local if_table = require(&amp;#039;Module:Var&amp;#039;)._seek_arg(args,1)&lt;br /&gt;
    if command == &amp;#039;if&amp;#039; or command == &amp;#039;&amp;#039; or command == &amp;#039;#if&amp;#039; then&lt;br /&gt;
    	return p.ifnoTrim(if_table)&lt;br /&gt;
    elseif command == &amp;#039;ifexpr&amp;#039; or command == &amp;#039;expr&amp;#039; or command == &amp;#039;#ifexpr&amp;#039; then&lt;br /&gt;
    	return p.ifexprnoTrim(if_table)&lt;br /&gt;
    elseif command == &amp;#039;ifeq&amp;#039; or command == &amp;#039;eq&amp;#039; or command == &amp;#039;#ifeq&amp;#039; then&lt;br /&gt;
    	local strcmpi, unstrip, preprocess = yesno(mw.text.trim(args.i or &amp;#039;no&amp;#039;)), yesno(mw.text.trim(args.unstrip or &amp;#039;no&amp;#039;)), yesno(mw.text.trim(args.preprocess or &amp;#039;no&amp;#039;))&lt;br /&gt;
    	local pre_str = function(in_str)&lt;br /&gt;
    		local result = in_str&lt;br /&gt;
    		if preprocess == true then result = working_frame:preprocess(result) end&lt;br /&gt;
    		if unstrip == true then result = mw.text.unstrip(result) end&lt;br /&gt;
    		if strcmpi == true then result = mw.ustring.lower(result) end&lt;br /&gt;
    		return result &lt;br /&gt;
    	end&lt;br /&gt;
    	if yesno(mw.text.trim(args.trim or &amp;#039;yes&amp;#039;)) then&lt;br /&gt;
    		if mw.text.trim(pre_str(args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039;)) == mw.text.trim(pre_str(args[&amp;#039;3&amp;#039;] or args[3] or &amp;#039;&amp;#039;)) then return args[&amp;#039;4&amp;#039;] or args[4] or &amp;#039;&amp;#039;&lt;br /&gt;
    		else return args[&amp;#039;5&amp;#039;] or args[5] or &amp;#039;&amp;#039; end&lt;br /&gt;
    	else&lt;br /&gt;
    		if pre_str(args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039;) == pre_str(args[&amp;#039;3&amp;#039;] or args[3] or &amp;#039;&amp;#039;) then return args[&amp;#039;4&amp;#039;] or args[4] or &amp;#039;&amp;#039;&lt;br /&gt;
    		else return args[&amp;#039;5&amp;#039;] or args[5] or &amp;#039;&amp;#039; end&lt;br /&gt;
    	end&lt;br /&gt;
    elseif command == &amp;#039;iferror&amp;#039; or command == &amp;#039;error&amp;#039; or command == &amp;#039;#iferror&amp;#039; then&lt;br /&gt;
	    local output_error = args[&amp;#039;3&amp;#039;] or args[3] or &amp;#039;&amp;#039;&lt;br /&gt;
	    local output_success = args[&amp;#039;4&amp;#039;] or args[4]&lt;br /&gt;
    	if not output_success then output_success = args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039; end&lt;br /&gt;
    	local result = working_frame:callParserFunction{ name = &amp;#039;#iferror:&amp;#039; .. mw.text.trim(args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039;), args = {&amp;#039;error&amp;#039;, &amp;#039;success&amp;#039;} }&lt;br /&gt;
    	result = mw.ustring.lower(result)&lt;br /&gt;
    	if result == &amp;#039;success&amp;#039; then return output_success end&lt;br /&gt;
    	return output_error&lt;br /&gt;
    elseif command == &amp;#039;ifexist&amp;#039; or command == &amp;#039;exist&amp;#039; or command == &amp;#039;#ifexist&amp;#039; then&lt;br /&gt;
	    local output_exist = args[&amp;#039;3&amp;#039;] or args[3]&lt;br /&gt;
	    local output_no = args[&amp;#039;4&amp;#039;] or args[4] or &amp;#039;&amp;#039;&lt;br /&gt;
    	if not output_exist then output_exist = args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039; end&lt;br /&gt;
    	local result = working_frame:callParserFunction{ name = &amp;#039;#ifexist:&amp;#039; .. mw.text.trim(args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039;), args = {&amp;#039;1&amp;#039;, &amp;#039;0&amp;#039;} }&lt;br /&gt;
    	result = mw.ustring.lower(result)&lt;br /&gt;
    	if result == &amp;#039;1&amp;#039; then return output_exist end&lt;br /&gt;
    	return output_no&lt;br /&gt;
    elseif command == &amp;#039;yesno&amp;#039; then&lt;br /&gt;
    	--1=yesno | 2=test | 3=yes | 4=no | 5=blank | 6=def | 7=¬&lt;br /&gt;
    	local checker = mw.ustring.lower(mw.text.trim(args[&amp;#039;2&amp;#039;] or args[2]or&amp;#039;&amp;#039;))&lt;br /&gt;
    	if (not (args[&amp;#039;2&amp;#039;] or args[2])) or checker == &amp;#039;¬&amp;#039; then return args[&amp;#039;¬&amp;#039;] or args[&amp;#039;7&amp;#039;] or args[7] or &amp;#039;&amp;#039;end&lt;br /&gt;
    	if checker==&amp;#039;&amp;#039; then return (args.blank or args[&amp;#039;5&amp;#039;] or args[5]) or (args.no or args[&amp;#039;4&amp;#039;] or args[4]) or &amp;#039;&amp;#039; end&lt;br /&gt;
		checker = yesno(checker)&lt;br /&gt;
    	if checker == true then&lt;br /&gt;
    		return args.yes or args[&amp;#039;3&amp;#039;] or args[3] or &amp;#039;yes&amp;#039;&lt;br /&gt;
    	elseif checker == false then&lt;br /&gt;
    		return args.no or args[&amp;#039;4&amp;#039;] or args[4] or &amp;#039;&amp;#039;&lt;br /&gt;
    	end&lt;br /&gt;
    	return args.def or args[&amp;#039;6&amp;#039;] or args[6] or &amp;#039;&amp;#039;&lt;br /&gt;
    else &lt;br /&gt;
    	local yes_arg, no_arg = args[&amp;#039;yes arg&amp;#039;] or args.yes_arg or &amp;#039;2&amp;#039;, args[&amp;#039;no arg&amp;#039;] or args.no_arg or &amp;#039;3&amp;#039;&lt;br /&gt;
    	local if_check_table_input = require(&amp;#039;Module:Var&amp;#039;)._seek_arg(args,1)&lt;br /&gt;
    	if_check_table_input[yes_arg], if_check_table_input.yes = &amp;quot;yes&amp;quot;, &amp;quot;yes&amp;quot;&lt;br /&gt;
    	if_check_table_input[no_arg], if_check_table_input.no = &amp;quot;no&amp;quot;, &amp;quot;no&amp;quot;&lt;br /&gt;
    	local if_check_table = {}&lt;br /&gt;
    	for key, value in pairs(if_check_table_input) do&lt;br /&gt;
    		local num_key = tonumber(key)&lt;br /&gt;
    		if type(num_key) ~= type(nil) then --是數字參數 (匿名參數)&lt;br /&gt;
    			if_check_table[num_key] = value --避免數字參數重複以清理[[:Category:调用重复模板参数的页面]]&lt;br /&gt;
    		else&lt;br /&gt;
    			if_check_table[key] = value&lt;br /&gt;
    		end&lt;br /&gt;
    	end&lt;br /&gt;
    	local tester = mw.ustring.gsub(mw.text.unstrip(mw.ustring.lower(mw.text.trim(working_frame:preprocess(require(&amp;#039;Module:Template invocation&amp;#039;).invocation( &amp;#039;safesubst:&amp;#039; .. (args[&amp;#039;1&amp;#039;] or args[1] or &amp;#039;void&amp;#039;), if_check_table))))), &amp;quot;&amp;lt;[^&amp;gt;]+&amp;gt;&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
    	local checker = yesno(mw.ustring.sub(tester, mw.ustring.find(tester,&amp;#039;%a+&amp;#039;)))&lt;br /&gt;
    	if checker == true then return args[&amp;#039;3&amp;#039;] or args[3] or &amp;#039;&amp;#039;&lt;br /&gt;
    	elseif checker == false then return args[&amp;#039;4&amp;#039;] or args[4] or &amp;#039;&amp;#039;end&lt;br /&gt;
    	return working_frame:preprocess(require(&amp;#039;Module:Template invocation&amp;#039;).invocation( &amp;#039;safesubst:&amp;#039; .. (args[&amp;#039;1&amp;#039;] or args[1] or &amp;#039;void&amp;#039;), if_table))&lt;br /&gt;
    end&lt;br /&gt;
    return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.ifexprnoTrim(frame)--{{#invoke:IfUtil|ifexprnoTrim|5&amp;gt;3|Yes|No}}&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, {&lt;br /&gt;
        	parentFirst=true,&lt;br /&gt;
        	trim = false,&lt;br /&gt;
			removeBlanks = false&lt;br /&gt;
        })&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 input_str = args[&amp;#039;1&amp;#039;] or args[1] or &amp;#039;0&amp;#039;&lt;br /&gt;
    local output_if = args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039;&lt;br /&gt;
    local check_max_arg = 2&lt;br /&gt;
    local ifexpr_table = {}&lt;br /&gt;
    for k,v in pairs(args) do&lt;br /&gt;
    	local check_num = tonumber(mw.text.trim(k))&lt;br /&gt;
    	if check_num and check_num &amp;gt; check_max_arg then&lt;br /&gt;
    		check_max_arg = check_num&lt;br /&gt;
    	end&lt;br /&gt;
    	ifexpr_table[k] = v&lt;br /&gt;
    end&lt;br /&gt;
    ifexpr_table[&amp;#039;1&amp;#039;] = input_str&lt;br /&gt;
    ifexpr_table[&amp;#039;2&amp;#039;] = output_if&lt;br /&gt;
    local tail = check_max_arg - check_max_arg % 2&lt;br /&gt;
    local output_else = (check_max_arg % 2 == 1) and (args[tostring(check_max_arg)] or args[check_max_arg]) or &amp;#039;&amp;#039;&lt;br /&gt;
    for i=1,tail,2 do&lt;br /&gt;
    	local expr = ifexpr_table[tostring(i)] or ifexpr_table[i] or &amp;#039;0&amp;#039;&lt;br /&gt;
    	local true_result = args[tostring(i+1)] or args[i+1] or &amp;#039;&amp;#039;&lt;br /&gt;
    	local flag,ifexpr = xpcall(function() return mw.ext.ParserFunctions.expr(expr)end,function()end)&lt;br /&gt;
    	--use original #ifexpr: to print original error&lt;br /&gt;
    	if flag~=true then return working_frame:preprocess(&amp;quot;{{safesubst:#ifexpr:&amp;quot; .. expr .. &amp;#039;|&amp;#039; .. true_result .. &amp;#039;|&amp;#039; .. output_else ..&amp;quot;}}&amp;quot;) end&lt;br /&gt;
    	if (tonumber(ifexpr or&amp;#039;0&amp;#039;) or 0) ~= 0 then return true_result end&lt;br /&gt;
    end&lt;br /&gt;
    return output_else&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.ifnoTrim(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;
        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;
        	parentFirst=true,&lt;br /&gt;
        	trim = false,&lt;br /&gt;
			removeBlanks = false&lt;br /&gt;
        })&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 input_str = args[&amp;#039;1&amp;#039;] or args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
    local output_if = args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039;&lt;br /&gt;
    local output_else = args[&amp;#039;3&amp;#039;] or args[3] or &amp;#039;&amp;#039;&lt;br /&gt;
    if mw.text.trim(input_str) ~= &amp;#039;&amp;#039; then&lt;br /&gt;
    	return output_if&lt;br /&gt;
    end&lt;br /&gt;
    return output_else&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.ifnewhtmlline(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;
        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;
        	parentFirst=true,&lt;br /&gt;
        	trim = false,&lt;br /&gt;
			removeBlanks = false&lt;br /&gt;
        })&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 input_str = args[&amp;#039;1&amp;#039;] or args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
    local output_if = args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039;&lt;br /&gt;
    local output_else = args[&amp;#039;3&amp;#039;] or args[3] or &amp;#039;&amp;#039;&lt;br /&gt;
    if mw.ustring.find(input_str, &amp;#039;&amp;lt;%s*/?%s*[Bb][Rr]%s*/?%s*&amp;gt;&amp;#039;) then&lt;br /&gt;
    	return output_if&lt;br /&gt;
    end&lt;br /&gt;
    return output_else&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.ifnoAddTail(frame) --{{#invoke:IfUtil|ifnoAddTail|text|unit|pattern}}&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, {&lt;br /&gt;
        	trim = false,&lt;br /&gt;
			removeBlanks = false&lt;br /&gt;
        })&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 input_str = args[&amp;#039;1&amp;#039;] or args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
    local uint = args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039;&lt;br /&gt;
	local uint_pattern = args[&amp;#039;3&amp;#039;] or args[3] or &amp;#039;&amp;#039;&lt;br /&gt;
	if mw.text.trim(uint_pattern) == &amp;#039;&amp;#039; then uint_pattern = mw.ustring.gsub(mw.text.trim(uint), &amp;#039;([%\\%^%$%(%)%%%.%{%}%[%]%*%+%-%?])&amp;#039;,&amp;#039;%%%1&amp;#039;)end&lt;br /&gt;
    if mw.ustring.find(input_str, uint_pattern) then&lt;br /&gt;
    	return input_str&lt;br /&gt;
    end&lt;br /&gt;
    return input_str .. uint&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.if2number(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;
        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;
        	parentFirst=true,&lt;br /&gt;
        	trim = false,&lt;br /&gt;
			removeBlanks = false&lt;br /&gt;
        })&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 input_str = args[&amp;#039;1&amp;#039;] or args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
    local output_hasTwo = args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;1&amp;#039;&lt;br /&gt;
    local output_otherwise = args[&amp;#039;3&amp;#039;] or args[3] or &amp;#039;&amp;#039;&lt;br /&gt;
    local check_split = args[&amp;#039;4&amp;#039;] or args[4] or &amp;#039;~&amp;#039;&lt;br /&gt;
    local local_check = mw.text.trim(require(&amp;#039;Module:TemplateParameters&amp;#039;).containsNumber({input_str}))&lt;br /&gt;
    if local_check ~= &amp;#039;&amp;#039; then&lt;br /&gt;
    	local split_end, split2_first = mw.ustring.find(input_str,check_split)&lt;br /&gt;
    	local first_num_str, second_num_str = &amp;#039;&amp;#039;, &amp;#039;&amp;#039;&lt;br /&gt;
    	if split_end then first_num_str = mw.ustring.sub(input_str,1,split_end-1) end&lt;br /&gt;
    	if split2_first then second_num_str = mw.ustring.sub(input_str,split2_first+1,-1) end&lt;br /&gt;
    	local first_num_check, second_num_check = mw.text.trim(require(&amp;#039;Module:TemplateParameters&amp;#039;).containsNumber({first_num_str})),&lt;br /&gt;
    		mw.text.trim(require(&amp;#039;Module:TemplateParameters&amp;#039;).containsNumber({second_num_str}))&lt;br /&gt;
    	if first_num_check ~= &amp;#039;&amp;#039; and second_num_check ~= &amp;#039;&amp;#039; then&lt;br /&gt;
    		first_num_check, second_num_check = require(&amp;#039;Module:TemplateParameters&amp;#039;).getNumberValue({first_num_str}),&lt;br /&gt;
    			require(&amp;#039;Module:TemplateParameters&amp;#039;).getNumberValue({second_num_str})&lt;br /&gt;
    		local first_num, second_num = tonumber(first_num_check), tonumber(second_num_check)&lt;br /&gt;
    		if first_num and second_num then&lt;br /&gt;
    			if first_num ~= second_num then&lt;br /&gt;
    				return output_hasTwo&lt;br /&gt;
				else return output_otherwise end&lt;br /&gt;
			else return output_otherwise end&lt;br /&gt;
    	else return output_otherwise end&lt;br /&gt;
    else return output_otherwise end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.findArgs(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 out_frame = mw.getCurrentFrame():getParent() --模板外層&lt;br /&gt;
    local out_args = {} --紀錄來自模板外層提供的參數&lt;br /&gt;
    local body = &amp;#039;&amp;#039;&lt;br /&gt;
    local to_find={}&lt;br /&gt;
    local default=&amp;#039;&amp;#039;&lt;br /&gt;
    &lt;br /&gt;
    if out_frame then out_args = out_frame.args or out_args end&lt;br /&gt;
    for key,val in pairs(args) do&lt;br /&gt;
    	local parse_name=tonumber(key)&lt;br /&gt;
    	if parse_name then to_find[#to_find+1]=val end&lt;br /&gt;
    end&lt;br /&gt;
    default = args.default or default&lt;br /&gt;
    local find_result={}&lt;br /&gt;
    local is_find=false&lt;br /&gt;
    for key,val in pairs(out_args) do&lt;br /&gt;
    	for i=1,#to_find do&lt;br /&gt;
	    	if mw.ustring.lower(mw.text.trim(val)) == mw.ustring.lower(mw.text.trim(to_find[i])) then&lt;br /&gt;
	    		is_find=true&lt;br /&gt;
	    		find_result[mw.text.trim(key)]=is_find;&lt;br /&gt;
	    	end&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    if is_find then&lt;br /&gt;
    	local body = &amp;#039;&amp;#039;&lt;br /&gt;
    	for key,val in pairs(find_result) do &lt;br /&gt;
    		if body~=&amp;#039;&amp;#039; then body=body..&amp;#039;,&amp;#039;end&lt;br /&gt;
    		body=body..key&lt;br /&gt;
    	end&lt;br /&gt;
    	return body&lt;br /&gt;
    else&lt;br /&gt;
    	return default&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>wikipedia&gt;Shizhao</name></author>
	</entry>
</feed>