<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://130.wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AVar</id>
	<title>Module:Var - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://130.wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AVar"/>
	<link rel="alternate" type="text/html" href="https://130.wiki/index.php?title=Module:Var&amp;action=history"/>
	<updated>2026-10-13T20:29:07Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://130.wiki/index.php?title=Module:Var&amp;diff=3884&amp;oldid=prev</id>
		<title>IdleTap-bot：​导入自求闻百科</title>
		<link rel="alternate" type="text/html" href="https://130.wiki/index.php?title=Module:Var&amp;diff=3884&amp;oldid=prev"/>
		<updated>2026-08-03T14:43:38Z</updated>

		<summary type="html">&lt;p&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 lib_str=mw.ustring&lt;br /&gt;
local main_template_name = &amp;quot;變數&amp;quot;&lt;br /&gt;
local module_call =&amp;quot;#invoke:Var&amp;quot;&lt;br /&gt;
local soft_subst_main = &amp;quot;Softsubst&amp;quot;&lt;br /&gt;
local messages,_L,lib_es,lib_tc,command_list = {&lt;br /&gt;
	magic_space = &amp;#039;\127&amp;#039;..string.char( 0xC2, 0xA0 ),&lt;br /&gt;
	strip_mark = &amp;quot;\127&amp;#039;\&amp;quot;`UNIQ--%s-%s-QINU`\&amp;quot;&amp;#039;\127&amp;quot;,&lt;br /&gt;
	strip_mark_pattern = &amp;quot;\127&amp;#039;\&amp;quot;`UNIQ%%-%%-%s%%-%s%%-QINU`\&amp;quot;&amp;#039;\127&amp;quot;,&lt;br /&gt;
	arg_global = &amp;#039;_arg_process&amp;#039;,&lt;br /&gt;
	cant_subst = &amp;#039;替換引用階段無法存取變數&amp;#039;,&lt;br /&gt;
	cat_subst_not_done = &amp;quot;未完成替換引用的頁面&amp;quot;,&lt;br /&gt;
	not_support_strip_warning_cmt = &amp;quot;&amp;lt;!--可能需要手動調整的擴展標籤--&amp;gt;&amp;quot;,&lt;br /&gt;
	not_support_strip_warning = &amp;quot;[[Template:softsubst]]警告：欲顯示替換引用原碼的模板中包含了擴展標籤，可能導致結果不準確，或替換引用失敗。&amp;quot;,&lt;br /&gt;
	do_subst = &amp;#039;&amp;lt;p class=&amp;quot;notice metadata&amp;quot; style=&amp;quot;font-size: small&amp;quot;&amp;gt;以下内容為[[WP:Subst|替換引用]]後的預期內容，請自行拷貝原始碼完成替換引用。&amp;lt;/p&amp;gt;&amp;lt;div style=&amp;quot;clear: both; overflow: auto; border: 1px solid #cccccc; padding: 4px; text-align: left; background: transparency;&amp;quot;&amp;gt;&amp;#039;,&lt;br /&gt;
	remove_hide_strip_mark = &amp;quot;&amp;lt;span%s+style%s*=%s*[\&amp;quot;\&amp;#039;]%s*display%s*:%s*none%s*;?%s*[\&amp;quot;\&amp;#039;]%s*&amp;gt;[^&amp;lt;]+UNIQ%-%-nowiki[^&amp;lt;]+&amp;lt;%s*/%s*span%s*&amp;gt;&amp;quot;,&lt;br /&gt;
	var_undefine = &amp;#039;變數 &amp;quot;%s&amp;quot; 未定義。&amp;#039;,&lt;br /&gt;
	NullPointerException = &amp;#039;[[NullPointerException|空指標]]錯誤&amp;#039;},{p=p},require(&amp;quot;Module:EditState&amp;quot;),&lt;br /&gt;
	require(&amp;quot;Module:TrackingCategory&amp;quot;),{&amp;#039;none&amp;#039;,&lt;br /&gt;
	set = {&amp;#039;set&amp;#039;, &amp;#039;設定&amp;#039;, &amp;#039;設置&amp;#039;},&lt;br /&gt;
	get = {&amp;#039;get&amp;#039;, &amp;#039;取值&amp;#039;,&amp;#039;取&amp;#039;, &amp;#039;取得&amp;#039;},&lt;br /&gt;
	getconst = {&amp;#039;getconst&amp;#039;},&lt;br /&gt;
	ref = {&amp;#039;ref&amp;#039;, &amp;#039;取址&amp;#039;},&lt;br /&gt;
	refget = {&amp;#039;refget&amp;#039;, &amp;#039;refgetname&amp;#039;},&lt;br /&gt;
	hide = {&amp;#039;hide&amp;#039;, &amp;#039;隱藏&amp;#039;},&lt;br /&gt;
	subst = {&amp;#039;subst&amp;#039;},&lt;br /&gt;
	call = {&amp;#039;call&amp;#039;, &amp;#039;callconst&amp;#039;, &amp;#039;呼叫&amp;#039;, &amp;#039;執行&amp;#039;, &amp;#039;運行&amp;#039;},&lt;br /&gt;
	hist = {&amp;#039;hist&amp;#039;, &amp;#039;歷史&amp;#039;},&lt;br /&gt;
	delete = {&amp;#039;del&amp;#039;, &amp;#039;delete&amp;#039;, &amp;#039;刪除&amp;#039;},&lt;br /&gt;
	new = {&amp;#039;new&amp;#039;},&lt;br /&gt;
};&lt;br /&gt;
local notsupport_strip = false&lt;br /&gt;
local no_color = false&lt;br /&gt;
local printf = lib_str.format&lt;br /&gt;
local sub = lib_str.sub&lt;br /&gt;
local gsub = lib_str.gsub&lt;br /&gt;
local trim = mw.text.trim&lt;br /&gt;
local split = mw.text.split&lt;br /&gt;
local function _test_cmd(cmd_names, test)&lt;br /&gt;
	local result, trim_test = false, trim(lib_str.lower(test))&lt;br /&gt;
	for i=1,#cmd_names do result = result or (trim_test == cmd_names[i]) end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
local function addWarning(msg)&lt;br /&gt;
	return mw.addWarning(require(&amp;#039;Module:Error&amp;#039;).error{[1] = msg})&lt;br /&gt;
end&lt;br /&gt;
local function codeNowikiWithColor(frame, code_lang, text)&lt;br /&gt;
	if no_color then return frame:extensionTag(&amp;#039;nowiki&amp;#039;,text) end&lt;br /&gt;
	return frame:extensionTag(&amp;#039;syntaxhighlight&amp;#039;,text, {enclose=&amp;#039;none&amp;#039;, lang=code_lang})&lt;br /&gt;
end&lt;br /&gt;
local strip_code_color_map = {}&lt;br /&gt;
local ignore_strip_code = {&lt;br /&gt;
	indicator = true, &lt;br /&gt;
	h=true,&lt;br /&gt;
	item=true&lt;br /&gt;
}&lt;br /&gt;
local function strip_code_color(frame, strip_code)&lt;br /&gt;
	local strip_type = strip_code:lower()&lt;br /&gt;
	if ignore_strip_code[strip_type] == true then return {&amp;#039;&amp;#039;,&amp;#039;&amp;#039;} end&lt;br /&gt;
	if no_color then return {messages.not_support_strip_warning_cmt .. &amp;#039;&amp;lt;&amp;#039; .. strip_type .. &amp;#039;&amp;gt;&amp;#039;, &amp;#039;&amp;lt;/&amp;#039; .. strip_type .. &amp;#039;&amp;gt;&amp;#039;} end&lt;br /&gt;
	local result = strip_code_color_map[strip_type]&lt;br /&gt;
	if result then return result else&lt;br /&gt;
		strip_code_color_map[strip_type] = {&lt;br /&gt;
			codeNowikiWithColor(frame, &amp;#039;xml&amp;#039;, messages.not_support_strip_warning_cmt .. &amp;#039;&amp;lt;&amp;#039; .. strip_type .. &amp;#039;&amp;gt;&amp;#039;),&lt;br /&gt;
			codeNowikiWithColor(frame, &amp;#039;xml&amp;#039;, &amp;#039;&amp;lt;/&amp;#039; .. strip_type .. &amp;#039;&amp;gt;&amp;#039;)&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	return strip_code_color_map[strip_type]&lt;br /&gt;
end&lt;br /&gt;
local function no_color_check(frame, text)&lt;br /&gt;
	if no_color then return frame:extensionTag(&amp;#039;pre&amp;#039;,text) end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
local function out_new_line()&lt;br /&gt;
	if no_color then return &amp;#039;\n&amp;#039; end&lt;br /&gt;
	return tostring(mw.html.create( &amp;#039;br&amp;#039; ))&lt;br /&gt;
end&lt;br /&gt;
local subst_pattern = &amp;quot;%s*[Ss][Uu][Bb][Ss][Tt]%s*:%s*&amp;quot;&lt;br /&gt;
local safesubst_pattern = &amp;quot;%s*[Ss][Aa][Ff][Ee][Ss][Uu][Bb][Ss][Tt]%s*:%s*&amp;quot;&lt;br /&gt;
local msg_pattern = &amp;quot;%s*[Mm][Ss][Gg]%s*:%s*&amp;quot;&lt;br /&gt;
local msgnw_pattern = &amp;quot;%s*[Mm][Ss][Gg][Nn][Ww]%s*:%s*&amp;quot;&lt;br /&gt;
--區域變數結尾&lt;br /&gt;
local _jsonEncode =require(&amp;#039;Module:EncoderUtil&amp;#039;)._jsonEncode&lt;br /&gt;
&lt;br /&gt;
--函數本體&lt;br /&gt;
function p.Varfunc(frame, from_meta_table)&lt;br /&gt;
	local args, working_frame = p._arg_process(frame)&lt;br /&gt;
	if mw.isSubsting() then return &lt;br /&gt;
		require(&amp;#039;Module:Template invocation&amp;#039;).invocation(string.format(&amp;quot;%s|%s&amp;quot;,module_call,&amp;#039;softSubst_msg&amp;#039;), args)&lt;br /&gt;
	end&lt;br /&gt;
	local command = args[&amp;#039;1&amp;#039;] or args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
	if _test_cmd(command_list.set, command) or _test_cmd(command_list.new, command) or _test_cmd(command_list.delete, command) then&lt;br /&gt;
		local m_mode = &amp;#039;VAR&amp;#039;&lt;br /&gt;
		if _test_cmd(command_list.delete, command) then m_mode = &amp;#039;DELETE&amp;#039; &lt;br /&gt;
		elseif _test_cmd(command_list.new, command) then m_mode = &amp;#039;NEW&amp;#039; end&lt;br /&gt;
	   	local call_args = {}&lt;br /&gt;
	    for key,val in pairs(args) do&lt;br /&gt;
	    	local checker = tonumber(key)&lt;br /&gt;
	    	if checker ~= 1 then call_args[key] = val end&lt;br /&gt;
	    end&lt;br /&gt;
	    return p.makeVar(call_args, m_mode, from_meta_table)&lt;br /&gt;
	elseif _test_cmd(command_list.get, command) then&lt;br /&gt;
	   	return p.getVar({args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039;}, &amp;#039;value&amp;#039;, false ,from_meta_table)&lt;br /&gt;
	elseif _test_cmd(command_list.ref, command) then&lt;br /&gt;
	   	return p.getVar({args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039;}, &amp;#039;addr&amp;#039;, false ,from_meta_table)&lt;br /&gt;
	elseif _test_cmd(command_list.getconst, command) then&lt;br /&gt;
	   	return p.getVar({args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039;}, &amp;#039;value&amp;#039;, true, from_meta_table)&lt;br /&gt;
	elseif _test_cmd(command_list.refget, command) then&lt;br /&gt;
	   	local addr = args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039;&lt;br /&gt;
	   	local result = p._getRefVarObj(&amp;#039;VAR&amp;#039;, addr)&lt;br /&gt;
	   	local remappingTable = {refget = &amp;#039;value&amp;#039;, refgetname = &amp;#039;name&amp;#039;}&lt;br /&gt;
	   	if result then&lt;br /&gt;
	   		if result[remappingTable[command]] then return result[remappingTable[command]] end&lt;br /&gt;
	   	end&lt;br /&gt;
	   	return mw.getCurrentFrame():expandTemplate{ title = &amp;#039;Error&amp;#039;, args = { messages.NullPointerException } }&lt;br /&gt;
	elseif _test_cmd(command_list.hide, command) then&lt;br /&gt;
	   	if trim(args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039;)~= &amp;#039;&amp;#039; then&lt;br /&gt;
			working_frame:extensionTag(&amp;#039;ref&amp;#039;, args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039;, {group = &amp;#039;UINQ-VARDEF-BLOCK-QINU&amp;#039;})&lt;br /&gt;
			working_frame:extensionTag(&amp;#039;references&amp;#039;, &amp;#039;&amp;#039;, {group = &amp;#039;UINQ-VARDEF-BLOCK-QINU&amp;#039;})&lt;br /&gt;
		end&lt;br /&gt;
	   	return &amp;#039;&amp;#039;&lt;br /&gt;
	elseif _test_cmd(command_list.subst, command) then&lt;br /&gt;
	   	return p._softSubst({args[&amp;#039;2&amp;#039;] or args[2] or &amp;#039;&amp;#039;})&lt;br /&gt;
	elseif _test_cmd(command_list.call, command) then&lt;br /&gt;
	    return p.callVar(p._seek_arg(args, 1), command == &amp;#039;callconst&amp;#039;)&lt;br /&gt;
	elseif _test_cmd(command_list.hist, command) then&lt;br /&gt;
	    return p.getVarHist(p._seek_arg(args, 1), from_meta_table)&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.Var={&lt;br /&gt;
	set=function(i)local j=p._seek_arg(i,-1,true);for k,l in pairs(i)do j[k]=j[k]or l end j[1]=&amp;#039;set&amp;#039;;return p.Varfunc(j,true)end,&lt;br /&gt;
	new=function(i)local j=p._seek_arg(i,-1,true);for k,l in pairs(i)do j[k]=j[k]or l end j[1]=&amp;#039;new&amp;#039;;return p.Varfunc(j,true)end,&lt;br /&gt;
	delete=function(i)local j=p._seek_arg(i,-1,true);for k,l in pairs(i)do j[k]=j[k]or l end j[1]=&amp;#039;delete&amp;#039;;return p.Varfunc(j,true)end,&lt;br /&gt;
	get=function(i)local j=p._seek_arg(i,-1,true);j[1]=&amp;#039;get&amp;#039;;return p.Varfunc(j,true)end,&lt;br /&gt;
	getconst=function(i)local j=p._seek_arg(i,-1,true);j[1]=&amp;#039;getconst&amp;#039;;return p.Varfunc(j,true)end,&lt;br /&gt;
	hist=function(i)local j=p._seek_arg(i,-1,true);j[1]=&amp;#039;hist&amp;#039;;return p.Varfunc(j,true)end,&lt;br /&gt;
	call=function(i)local j=p._seek_arg(i,-1,true);j[1]=&amp;#039;call&amp;#039;;return p.Varfunc(j,true)end,&lt;br /&gt;
	refget=function(i)local j=p._seek_arg(i,-1,true);j[1]=&amp;#039;refget&amp;#039;;return p.Varfunc(j,true)end,&lt;br /&gt;
	refgetname=function(i)local j=p._seek_arg(i,-1,true);j[1]=&amp;#039;refgetname&amp;#039;;return p.Varfunc(j,true)end,&lt;br /&gt;
	ref=function(i)local j=p._seek_arg(i,-1,true);j[1]=&amp;#039;ref&amp;#039;;return p.Varfunc(j,true)end,&lt;br /&gt;
	vars=function(const)&lt;br /&gt;
		local arg_table = p._getVars(&amp;quot;VAR&amp;quot;, const)&lt;br /&gt;
		local restlt = {}&lt;br /&gt;
		for key,val in pairs(arg_table) do&lt;br /&gt;
			local get_result, check_json = mw.ustring.gsub(arg_table[key].value, &amp;quot;^%$JSON%$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	    	if check_json &amp;gt; 0 then&lt;br /&gt;
	    		restlt[key] = mw.text.jsonDecode(get_result)&lt;br /&gt;
	    	else&lt;br /&gt;
	    		restlt[key] = get_result&lt;br /&gt;
	    	end&lt;br /&gt;
		end&lt;br /&gt;
		return restlt&lt;br /&gt;
	end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p.Var=setmetatable(p.Var, {&lt;br /&gt;
	__index = function(t, k) return t.get({k})end,&lt;br /&gt;
	__newindex = function(t, k, v)&lt;br /&gt;
		local stored = t.set({[k]=v})&lt;br /&gt;
		p.Varfunc({&amp;#039;hide&amp;#039;,stored})&lt;br /&gt;
	end&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
function p.makeVar(frame, mode, from_meta_table)&lt;br /&gt;
	local varMode = mode or &amp;#039;VAR&amp;#039;&lt;br /&gt;
	if varMode == &amp;#039;NEW&amp;#039; then varMode = &amp;#039;VAR&amp;#039; end&lt;br /&gt;
	if trim(varMode) == &amp;#039;&amp;#039; then varMode = &amp;#039;VAR&amp;#039; end&lt;br /&gt;
	local args, working_frame = p._arg_process(frame)&lt;br /&gt;
    local out_text = function(out_mode,name,value)&lt;br /&gt;
    	return printf(messages.magic_space .. &amp;quot;$%s_DEF %s=%s&amp;quot; .. messages.magic_space, out_mode, name, value)&lt;br /&gt;
    end&lt;br /&gt;
    local body = &amp;#039;&amp;#039;&lt;br /&gt;
    local new_body = &amp;#039;&amp;#039;&lt;br /&gt;
    for key,val in pairs(args) do&lt;br /&gt;
    	local store_value = val&lt;br /&gt;
    	if from_meta_table == true then &lt;br /&gt;
    		if type(store_value)~=type(&amp;#039;string&amp;#039;)then store_value=&amp;quot;$JSON$&amp;quot;.._jsonEncode(store_value)end &lt;br /&gt;
    	end&lt;br /&gt;
    	if mode == &amp;#039;DELETE&amp;#039; then body = body..out_text(varMode,store_value,store_value)..&amp;#039;;&amp;#039;&lt;br /&gt;
    	else&lt;br /&gt;
    		if mode == &amp;#039;NEW&amp;#039; then new_body = new_body..out_text(&amp;#039;DELETE&amp;#039;,key,key)..&amp;#039;;&amp;#039; end&lt;br /&gt;
    		body = body..out_text(varMode,key,store_value)..&amp;#039;;&amp;#039; &lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    if mode == &amp;#039;NEW&amp;#039; then new_body = working_frame:extensionTag(&amp;#039;nowiki&amp;#039;, new_body) end&lt;br /&gt;
    body = new_body .. working_frame:extensionTag(&amp;#039;nowiki&amp;#039;, body)&lt;br /&gt;
	return mw.text.tag( &amp;#039;span&amp;#039;, {style=&amp;quot;display:none;&amp;quot;}, body )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.softSubst(frame)&lt;br /&gt;
	local args, working_frame = p._arg_process(frame)&lt;br /&gt;
	if mw.isSubsting() then return require(&amp;#039;Module:Template invocation&amp;#039;).invocation(soft_subst_main, args)end&lt;br /&gt;
	local template_title = trim(args[&amp;#039;1&amp;#039;] or args[&amp;#039;1&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
	if template_title == &amp;#039;&amp;#039; then return &amp;#039;&amp;#039; end&lt;br /&gt;
	return p.softSubst_msg(p._seek_arg(args, 1), template_title)&lt;br /&gt;
end&lt;br /&gt;
local function check_is_main_doc(working_frame)&lt;br /&gt;
	local checker = mw.ustring.lower(working_frame:preprocess( &amp;quot;{{BASEPAGENAME}}&amp;quot; ))&lt;br /&gt;
	if	checker == mw.ustring.lower(main_template_name) or &lt;br /&gt;
		checker == mw.ustring.lower(soft_subst_main) or checker == &amp;#039;var&amp;#039; then return true end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
function p.softSubst_msg(frame, template_title)&lt;br /&gt;
	local template_dis = template_title or main_template_name&lt;br /&gt;
	local args, working_frame = p._arg_process(frame)&lt;br /&gt;
	if mw.isSubsting() then return require(&amp;#039;Module:Template invocation&amp;#039;).invocation(string.format(&amp;quot;%s|%s&amp;quot;,module_call,&amp;#039;softSubst_msg&amp;#039;), args)end&lt;br /&gt;
	local result = require(&amp;#039;Module:Template invocation&amp;#039;).invocation(template_dis, args)&lt;br /&gt;
	if lib_es.isPreview() then &lt;br /&gt;
		local pre_result  = working_frame:preprocess(result)&lt;br /&gt;
		if #(split(gsub(pre_result,&amp;#039;\r\n&amp;#039;,&amp;#039;\n&amp;#039;),&amp;#039;\n&amp;#039;)) &amp;gt; 50 then no_color = true end&lt;br /&gt;
		result = p._softSubst({working_frame:preprocess(result)})&lt;br /&gt;
		if template_title == nil then &lt;br /&gt;
			result = working_frame:expandTemplate{ title = &amp;#039;Error&amp;#039;, args = { messages.cant_subst } } .. result&lt;br /&gt;
		end&lt;br /&gt;
		if notsupport_strip==true then result = &amp;#039;&amp;lt;p&amp;gt;{{Error|&amp;#039; .. messages.not_support_strip_warning .. &amp;#039;}}&amp;lt;/p&amp;gt;&amp;#039; .. result end&lt;br /&gt;
	else&lt;br /&gt;
		if check_is_main_doc(working_frame) == false then lib_tc.append(messages.cat_subst_not_done) end&lt;br /&gt;
	end&lt;br /&gt;
	if notsupport_strip==true then addWarning( messages.not_support_strip_warning ) end&lt;br /&gt;
	return working_frame:preprocess(result)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._softSubst(frame)&lt;br /&gt;
	local softSubst_data, softSubst_warp = &amp;#039;arg_global&amp;#039;, string.char(0x70)&lt;br /&gt;
	if type(softSubst_data) ~= type({&amp;#039;table&amp;#039;}) then&lt;br /&gt;
		--find method between global scope or local scope&lt;br /&gt;
		softSubst_data = {(_G[softSubst_warp] or _L[softSubst_warp])[messages[softSubst_data]](frame)}&lt;br /&gt;
	end&lt;br /&gt;
	--decode method&lt;br /&gt;
	local first_data, second_data, third_data = softSubst_data[&amp;#039;1&amp;#039;] or softSubst_data[1], softSubst_data[&amp;#039;2&amp;#039;] or softSubst_data[2], (_G[softSubst_warp] or _L[softSubst_warp])[&amp;quot;_code_getter_wiki&amp;quot;]&lt;br /&gt;
	--2nd layer decode&lt;br /&gt;
	first_data = first_data[&amp;#039;1&amp;#039;] or first_data[1] or &amp;#039;&amp;#039;&lt;br /&gt;
	--second_data = second_data[&amp;#039;2&amp;#039;] or second_data[2] or &amp;#039;&amp;#039;&lt;br /&gt;
	--third_data = third_data[&amp;#039;3&amp;#039;] or third_data[3] or &amp;#039;&amp;#039;&lt;br /&gt;
	if lib_es.isPreview() ~= true then &lt;br /&gt;
		if check_is_main_doc(second_data) == false then lib_tc.append(messages.cat_subst_not_done) end&lt;br /&gt;
	end&lt;br /&gt;
	local fourth_data = function(msg_data)&lt;br /&gt;
		local msg_data_list, result_code = split(msg_data, &amp;#039;\n&amp;#039;), &amp;#039;&amp;#039;&lt;br /&gt;
		for i=1,#msg_data_list do result_code = result_code .. third_data(second_data, msg_data_list[i]) end&lt;br /&gt;
		if no_color then result_code = no_color_check(second_data, result_code) end&lt;br /&gt;
		return result_code&lt;br /&gt;
	end&lt;br /&gt;
	--foreach method do&lt;br /&gt;
   	if trim(first_data)~= &amp;#039;&amp;#039; then return&lt;br /&gt;
   		mw.clone(messages.do_subst) .. fourth_data(gsub(&lt;br /&gt;
			gsub(first_data, messages.remove_hide_strip_mark, &amp;#039;&amp;#039;)&lt;br /&gt;
		, &amp;#039;\r\n&amp;#039;, &amp;#039;\n&amp;#039;)) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
   	return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.callVar(frame, const)&lt;br /&gt;
	local args, working_frame = p._arg_process(frame)&lt;br /&gt;
    local vars = p._getVars(&amp;#039;VAR&amp;#039;, const)&lt;br /&gt;
    local var_name = args[1]or args[&amp;#039;1&amp;#039;]or&amp;#039;&amp;#039;&lt;br /&gt;
    local get_value = vars[var_name]&lt;br /&gt;
    if tonumber(var_name) and not get_value then get_value = vars[tonumber(var_name)] end&lt;br /&gt;
    if get_value then &lt;br /&gt;
    	local func_name = trim(mw.clone(get_value.value),&amp;quot;|\t\r\n\f &amp;quot;)&lt;br /&gt;
    	func_name = gsub(func_name,subst_pattern,&amp;#039;&amp;#039;)&lt;br /&gt;
    	func_name = gsub(func_name,safesubst_pattern,&amp;#039;&amp;#039;)&lt;br /&gt;
    	func_name = gsub(func_name,msg_pattern,&amp;#039;&amp;#039;)&lt;br /&gt;
    	func_name = gsub(func_name,msgnw_pattern,&amp;#039;&amp;#039;)&lt;br /&gt;
    	&lt;br /&gt;
    	local tail_index = (lib_str.find(func_name,&amp;#039;|&amp;#039;)or(lib_str.len(func_name)+1))-1&lt;br /&gt;
    	command_tail = sub(func_name,tail_index + 1,-1)&lt;br /&gt;
    	func_name = sub(func_name,1,tail_index)&lt;br /&gt;
&lt;br /&gt;
    	local final_func_name = &amp;#039;&amp;#039;&lt;br /&gt;
    	&lt;br /&gt;
		--template:&lt;br /&gt;
		local template_name = mw.title.new( func_name, &amp;#039;Template&amp;#039; )&lt;br /&gt;
		if template_name and template_name.exists then &lt;br /&gt;
			final_func_name = template_name.fullText &lt;br /&gt;
			if template_name.namespace == 0 then final_func_name = &amp;#039;:&amp;#039; .. final_func_name end&lt;br /&gt;
		end &lt;br /&gt;
&lt;br /&gt;
		--int:&lt;br /&gt;
		local template_split = split(func_name, &amp;#039;:&amp;#039;) or {func_name}&lt;br /&gt;
		if final_func_name==&amp;#039;&amp;#039; then&lt;br /&gt;
			local check_mw = func_name&lt;br /&gt;
			if #template_split &amp;gt; 1 and (sub(template_split[1],1,3) == &amp;#039;int&amp;#039; or &lt;br /&gt;
					(lib_str.find(template_split[1],&amp;quot;[Mm]edia[Ww]iki&amp;quot;))) then&lt;br /&gt;
				check_mw = table.concat( template_split, &amp;#039;:&amp;#039;, 2, #template_split )&lt;br /&gt;
			end&lt;br /&gt;
			if mw.message.new(check_mw):exists() then&lt;br /&gt;
				final_func_name = &amp;#039;int:&amp;#039; .. check_mw&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		--#...:&lt;br /&gt;
		local fix_cs = false&lt;br /&gt;
		if final_func_name==&amp;#039;&amp;#039; then&lt;br /&gt;
			if xpcall(function()mw.getCurrentFrame():callParserFunction( func_name, func_name )end, function()end) &lt;br /&gt;
					== true then&lt;br /&gt;
				final_func_name = func_name&lt;br /&gt;
				fix_cs = true&lt;br /&gt;
				local parser_tail_check = sub(trim(final_func_name),-1)&lt;br /&gt;
				if parser_tail_check ~= &amp;#039;:&amp;#039; and parser_tail_check ~= &amp;#039;|&amp;#039; then final_func_name = final_func_name .. &amp;#039;:&amp;#039; end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		--may be magic word&lt;br /&gt;
		if final_func_name==&amp;#039;&amp;#039; then&lt;br /&gt;
			local checker, check_text = xpcall(function()&lt;br /&gt;
				return mw.getCurrentFrame():preprocess( printf(&amp;quot;{{%s}}&amp;quot;, func_name) )&lt;br /&gt;
			end, function()end)&lt;br /&gt;
			local test_name = (template_name or { prefixedText = func_name }).prefixedText&lt;br /&gt;
			if		not lib_str.find(check_text or &amp;#039;&amp;#039;, printf(&amp;quot;^{{%s}}$&amp;quot;, test_name) ) and&lt;br /&gt;
					not lib_str.find(check_text or &amp;#039;&amp;#039;, printf(&amp;quot;^%%[%%[:%s%%]%%]$&amp;quot;, test_name) ) then&lt;br /&gt;
				final_func_name = func_name&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if trim(final_func_name) ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		    local num_args = p._seek_arg(args, 1)&lt;br /&gt;
&lt;br /&gt;
			local str_args = require(&amp;#039;Module:Template invocation&amp;#039;).invocation(final_func_name..command_tail, num_args)&lt;br /&gt;
			if fix_cs == true and trim(command_tail) == &amp;#039;&amp;#039; and &lt;br /&gt;
					sub(trim(final_func_name),-1) == &amp;#039;:&amp;#039; then &lt;br /&gt;
				str_args = gsub(str_args, &amp;quot;^({{)%s*(&amp;quot; .. final_func_name .. &amp;quot;)|&amp;quot;, &amp;quot;%1%2&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			return working_frame:preprocess(str_args)&lt;br /&gt;
		end&lt;br /&gt;
		local max_arg = 0 &lt;br /&gt;
    	local num_args = {}&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 call_args = {}&lt;br /&gt;
		local get_obj = function(obj)return mw.text.jsonDecode(obj)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;
		local func_path = 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 lib_str.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 _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 func_name&lt;br /&gt;
    end&lt;br /&gt;
    if trim(var_name) ~= &amp;#039;&amp;#039; then&lt;br /&gt;
    	return working_frame:expandTemplate{ title = &amp;#039;Error&amp;#039;, args = { printf(messages.var_undefine, var_name) } }&lt;br /&gt;
    end&lt;br /&gt;
	return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
function p._arg_process(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;
    return args, working_frame&lt;br /&gt;
end&lt;br /&gt;
function p.getVar(frame, get_mode, const, from_meta_table)&lt;br /&gt;
	local to_get_mode = get_mode or &amp;#039;value&amp;#039;&lt;br /&gt;
	local args, working_frame = p._arg_process(frame)&lt;br /&gt;
	local vars = p._getVars(&amp;#039;VAR&amp;#039;, const)&lt;br /&gt;
    local var_name = args[1]or args[&amp;#039;1&amp;#039;]or&amp;#039;&amp;#039;&lt;br /&gt;
    local get_value = vars[var_name]&lt;br /&gt;
    if tonumber(var_name) and not get_value then get_value = vars[tonumber(var_name)] end&lt;br /&gt;
    if get_value then &lt;br /&gt;
    	local get_result, check_json = mw.ustring.gsub(get_value[to_get_mode], &amp;quot;^%$JSON%$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
    	if check_json &amp;gt; 0 and from_meta_table == true then&lt;br /&gt;
    		return mw.text.jsonDecode(get_result)&lt;br /&gt;
    	end&lt;br /&gt;
    	return get_result&lt;br /&gt;
    end&lt;br /&gt;
    if trim(var_name) ~= &amp;#039;&amp;#039; then&lt;br /&gt;
    	if from_meta_table == true then return error(printf(messages.var_undefine, var_name)) end&lt;br /&gt;
    	return working_frame:expandTemplate{ title = &amp;#039;Error&amp;#039;, args = { printf(messages.var_undefine, var_name) } }&lt;br /&gt;
    end&lt;br /&gt;
	return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getVarHist(frame, from_meta_table)&lt;br /&gt;
	local args, working_frame = p._arg_process(frame)&lt;br /&gt;
    local vars = p._getVars(&amp;#039;VAR&amp;#039;) &lt;br /&gt;
    local var_name = args[1]or args[&amp;#039;1&amp;#039;]or&amp;#039;&amp;#039;&lt;br /&gt;
    local get_value = vars[var_name]&lt;br /&gt;
    if tonumber(var_name) and not get_value then get_value = vars[tonumber(var_name)] end&lt;br /&gt;
    if get_value then &lt;br /&gt;
    	local formats = args[2]or args[&amp;#039;2&amp;#039;]or&amp;#039;$&amp;#039;&lt;br /&gt;
    	local seps = args[3]or args[&amp;#039;3&amp;#039;]or&amp;#039;, &amp;#039;&lt;br /&gt;
    	local hists = split(get_value.hist,&amp;#039;$\127;\127^&amp;#039;)&lt;br /&gt;
    	local body = &amp;#039;&amp;#039;&lt;br /&gt;
    	if from_meta_table == true then &lt;br /&gt;
    		local get_result, check_json = {}, -1&lt;br /&gt;
    		for i=1,#hists do&lt;br /&gt;
    			get_result[i], check_json = mw.ustring.gsub(hists[i], &amp;quot;^%$JSON%$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
		    	if check_json &amp;gt; 0 then&lt;br /&gt;
		    		get_result[i] = mw.text.jsonDecode(get_result[i])&lt;br /&gt;
		    	end&lt;br /&gt;
    		end&lt;br /&gt;
    		return get_result &lt;br /&gt;
    	end&lt;br /&gt;
    	for i=1,#hists do&lt;br /&gt;
    		if i&amp;gt;1 then body = body .. seps end&lt;br /&gt;
    		body = body .. gsub(formats, &amp;#039;%$&amp;#039;, hists[i])&lt;br /&gt;
    	end&lt;br /&gt;
    	return body&lt;br /&gt;
    end&lt;br /&gt;
    if trim(var_name) ~= &amp;#039;&amp;#039; then&lt;br /&gt;
    	if from_meta_table == true then return error(printf(messages.var_undefine, var_name)) end&lt;br /&gt;
    	return working_frame:expandTemplate{ title = &amp;#039;Error&amp;#039;, args = { printf(messages.var_undefine, var_name) } }&lt;br /&gt;
    end&lt;br /&gt;
	return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._getRefVarObj(VarMode, addr)&lt;br /&gt;
	local addr_path = split(addr,&amp;#039;:&amp;#039;)&lt;br /&gt;
	if #addr_path == 2 then&lt;br /&gt;
		local strip_id, addr_loc = addr_path[1], addr_path[2]&lt;br /&gt;
		strip_id = tonumber(strip_id)&lt;br /&gt;
		addr_loc = tonumber(addr_loc)&lt;br /&gt;
		if strip_id and addr_loc then&lt;br /&gt;
			local try_get = mw.text.unstripNoWiki( p._stripMark(&amp;#039;nowiki&amp;#039;, string.format( &amp;quot;%08X&amp;quot;, strip_id )) )&lt;br /&gt;
			local in_index, arg_data = 1, nil&lt;br /&gt;
			gsub(try_get, messages.magic_space .. &amp;quot;%$&amp;quot; .. VarMode .. &amp;quot;_DEF%s+([^=]+)=([^&amp;quot; .. messages.magic_space .. &amp;#039;]*)&amp;#039;, &lt;br /&gt;
			function(f_key, f_value)&lt;br /&gt;
				local key, value = f_key, f_value&lt;br /&gt;
				key = trim(key)&lt;br /&gt;
				if in_index == addr_loc then &lt;br /&gt;
					arg_data = {&lt;br /&gt;
						name=key,&lt;br /&gt;
						value=value,&lt;br /&gt;
						addr=string.format( &amp;quot;%d:%d&amp;quot;, strip_id, in_index )&lt;br /&gt;
					} end&lt;br /&gt;
				in_index = in_index + 1&lt;br /&gt;
			end)&lt;br /&gt;
			return arg_data&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
function p._seek_arg(input_args_list, offset, enable_minus)&lt;br /&gt;
    local num_args = {}&lt;br /&gt;
    if enable_minus~=true and offset &amp;lt;= 1 then offset = 1 end&lt;br /&gt;
	for key,value in pairs(input_args_list) do&lt;br /&gt;
		local num = tonumber(key) or 0&lt;br /&gt;
		local stored = false&lt;br /&gt;
		if num then&lt;br /&gt;
			if num &amp;gt; offset then&lt;br /&gt;
				num_args[num - offset] = value&lt;br /&gt;
				stored = true&lt;br /&gt;
			end&lt;br /&gt;
			if num &amp;gt;= 1 and num &amp;lt;= offset then stored = true end&lt;br /&gt;
		end&lt;br /&gt;
		if stored ~= true then num_args[key] = value end&lt;br /&gt;
	end&lt;br /&gt;
	return num_args&lt;br /&gt;
end&lt;br /&gt;
function p._code_getter_wiki(working_frame, input_code)&lt;br /&gt;
	local current_text, code_lang = input_code, &amp;quot;moin&amp;quot;&lt;br /&gt;
	local flag1 = lib_str.find(current_text, &amp;quot;&amp;lt;%s*/?%s*[A-Za-z]&amp;quot;)&lt;br /&gt;
	local flag2 = lib_str.find(current_text, &amp;quot;[A-Za-z\&amp;quot;&amp;#039;]%s*/?%s*&amp;gt;&amp;quot;)&lt;br /&gt;
	if flag1 or flag2 then code_lang = &amp;quot;html&amp;quot; end&lt;br /&gt;
	local body = &amp;#039;&amp;#039;&lt;br /&gt;
	local strip_to_remove = split(current_text,&amp;#039;\127&amp;#039;)&lt;br /&gt;
	for i=1,#strip_to_remove do&lt;br /&gt;
		local current_strip = strip_to_remove[i]&lt;br /&gt;
		if lib_str.find(current_strip,&amp;quot;&amp;#039;\&amp;quot;`UNIQ%-%-&amp;quot;) then&lt;br /&gt;
			if lib_str.find(current_strip, &amp;quot;nowiki&amp;quot;) then &lt;br /&gt;
				local try_unstrip = &amp;#039;\127&amp;#039; .. current_strip .. &amp;#039;\127&amp;#039;&lt;br /&gt;
				try_unstrip = mw.text.unstripNoWiki( try_unstrip )&lt;br /&gt;
				if lib_str.find(try_unstrip,&amp;quot;&amp;#039;\&amp;quot;`UNIQ%-%-&amp;quot;) then&lt;br /&gt;
					--不存在的strip entity&lt;br /&gt;
					body = body .. &amp;#039;\127&amp;#039; .. current_strip .. &amp;#039;\127&amp;#039;&lt;br /&gt;
				else&lt;br /&gt;
					try_unstrip = mw.text.decode(try_unstrip)&lt;br /&gt;
					try_unstrip = printf(&amp;quot;&amp;lt;nowiki&amp;gt;%s&amp;lt;/nowiki&amp;gt;&amp;quot;,table.concat( split(try_unstrip,&amp;quot;nowiki&amp;quot;),&amp;#039;&amp;lt;/nowiki&amp;gt;nowiki&amp;lt;nowiki&amp;gt;&amp;#039;))&lt;br /&gt;
					body = body .. codeNowikiWithColor(working_frame, &amp;#039;xml&amp;#039;, try_unstrip)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				--保留原始strip符號令解析器自動替換&lt;br /&gt;
				local strip_type = &amp;#039;&amp;#039;&lt;br /&gt;
				gsub(current_strip, &amp;quot;UNIQ%-%-([%dA-Za-z]+)%-&amp;quot;, function(in_str)strip_type=in_str end)&lt;br /&gt;
				local out_strip_text = &amp;#039;\127&amp;#039; .. current_strip .. &amp;#039;\127&amp;#039;&lt;br /&gt;
				if strip_type ~= &amp;#039;&amp;#039; then &lt;br /&gt;
					local strip_code_color_data = strip_code_color(working_frame, strip_type)&lt;br /&gt;
					out_strip_text = strip_code_color_data[1] .. out_strip_text ..strip_code_color_data[2]&lt;br /&gt;
				end&lt;br /&gt;
				body = body .. out_strip_text&lt;br /&gt;
				notsupport_strip = true&lt;br /&gt;
			end&lt;br /&gt;
		elseif trim(current_strip) ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			local avoid_t = split(current_strip, &amp;#039;%-{&amp;#039;) or {avoid_t}&lt;br /&gt;
			for a_i = 1,#avoid_t do&lt;br /&gt;
				local a_ic = avoid_t[a_i]&lt;br /&gt;
				if a_i ~= 1 then a_ic = &amp;#039;{&amp;#039; .. a_ic end&lt;br /&gt;
				if a_i ~= #avoid_t then a_ic = a_ic .. &amp;#039;-&amp;#039; end&lt;br /&gt;
				body = body .. codeNowikiWithColor(working_frame, code_lang, a_ic)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return body .. out_new_line()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._getVars(VarMode, const)&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
    local mark_get_mark, max_id = frame:extensionTag( &amp;#039;nowiki&amp;#039;, &amp;#039;nowiki&amp;#039; ), &amp;#039;&amp;#039;&lt;br /&gt;
	gsub(mark_get_mark, &amp;#039;nowiki%-([0-9A-Za-z]+)%-&amp;#039;, function(id)max_id = id end)&lt;br /&gt;
	local max_id_num, body = tonumber(max_id, 16), &amp;#039;&amp;#039;&lt;br /&gt;
	local symbol_table = {}&lt;br /&gt;
	for i=1,max_id_num do&lt;br /&gt;
		local try_get = mw.text.unstripNoWiki( p._stripMark(&amp;#039;nowiki&amp;#039;, string.format( &amp;quot;%08X&amp;quot;, i-1 )) )&lt;br /&gt;
		local in_index = 1&lt;br /&gt;
		gsub(try_get, messages.magic_space .. &amp;quot;%$([A-Z]+)_DEF%s+([^=]+)=([^&amp;quot; .. messages.magic_space .. &amp;#039;]*)&amp;#039;, &lt;br /&gt;
		function(sub_mode, f_key, f_value)--VarMode&lt;br /&gt;
			local key, value = f_key, f_value&lt;br /&gt;
			key = trim(key)&lt;br /&gt;
			if key ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				local it if const == true then it = symbol_table[key] end&lt;br /&gt;
				local old = symbol_table[key]&lt;br /&gt;
				if sub_mode == &amp;#039;DELETE&amp;#039; then symbol_table[key] = nil&lt;br /&gt;
				elseif sub_mode == VarMode then&lt;br /&gt;
				symbol_table[key] = it or {&lt;br /&gt;
					name=key,&lt;br /&gt;
					value=value,&lt;br /&gt;
					hist=((old or {}).hist and ( (old or {}).hist .. &amp;#039;$\127;\127^&amp;#039; ) or &amp;#039;&amp;#039;) .. value,&lt;br /&gt;
					addr=string.format( &amp;quot;%d:%d&amp;quot;, (i-1), in_index )&lt;br /&gt;
				}end&lt;br /&gt;
			end&lt;br /&gt;
			in_index = in_index + 1&lt;br /&gt;
		end)&lt;br /&gt;
	end&lt;br /&gt;
	return symbol_table&lt;br /&gt;
end&lt;br /&gt;
function p._stripMark(mark_name, mark_id)&lt;br /&gt;
	return printf(messages.strip_mark, mark_name, mark_id)&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>IdleTap-bot</name></author>
	</entry>
</feed>