

<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fa">
	<id>https://fa.imamatpedia.com/w/index.php?action=history&amp;feed=atom&amp;title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86%3AFormatTemplate</id>
	<title>پودمان:FormatTemplate - تاریخچهٔ نسخه‌ها</title>
	<link rel="self" type="application/atom+xml" href="https://fa.imamatpedia.com/w/index.php?action=history&amp;feed=atom&amp;title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86%3AFormatTemplate"/>
	<link rel="alternate" type="text/html" href="https://fa.imamatpedia.com/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:FormatTemplate&amp;action=history"/>
	<updated>2026-04-20T07:40:12Z</updated>
	<subtitle>تاریخچهٔ نسخه‌ها برای این صفحه در ویکی</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://fa.imamatpedia.com/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:FormatTemplate&amp;diff=526441&amp;oldid=prev</id>
		<title>Heydari: ۱ نسخه واردشده</title>
		<link rel="alternate" type="text/html" href="https://fa.imamatpedia.com/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:FormatTemplate&amp;diff=526441&amp;oldid=prev"/>
		<updated>2021-09-01T10:49:13Z</updated>

		<summary type="html">&lt;p&gt;۱ نسخه واردشده&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;fa&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;نسخهٔ ‏۱ سپتامبر ۲۰۲۱، ساعت ۱۴:۱۹&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;fa&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>Heydari</name></author>
	</entry>
	<entry>
		<id>https://fa.imamatpedia.com/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:FormatTemplate&amp;diff=526440&amp;oldid=prev</id>
		<title>fa&gt;علیرضا: بروزرسانی به آخرین نسخه پودمان از ویکی انگلیسی</title>
		<link rel="alternate" type="text/html" href="https://fa.imamatpedia.com/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:FormatTemplate&amp;diff=526440&amp;oldid=prev"/>
		<updated>2014-05-21T07:29:43Z</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;---- This module is intended to format templates to make them readable.&lt;br /&gt;
---- It should work by recognizing every beginning that &amp;#039;&amp;#039;should&amp;#039;&amp;#039; not be intermingled: [[, {{, {{#, {{{&lt;br /&gt;
---- It will count how many levels deep you&amp;#039;ve gone.&lt;br /&gt;
---- It will add 4 times that many spaces before each pipe | in a non-[[ element, removing any now present&lt;br /&gt;
---- It will label the beginning and end with a color specific to the type of element even when it can&amp;#039;t indent&lt;br /&gt;
---- It will return everything in a nowiki wrapper (excluding the color formatting)&lt;br /&gt;
&lt;br /&gt;
local p={}&lt;br /&gt;
&lt;br /&gt;
local MAXPOSN = 30000 -- usually 50000 was 3 seconds .. not right now though ..&lt;br /&gt;
local HOLDABLE = {[&amp;quot;{&amp;quot;] = true, [&amp;quot;[&amp;quot;] = true, [&amp;quot;}&amp;quot;] = true, [&amp;quot;]&amp;quot;] = true}&lt;br /&gt;
local ACTABLE = {[&amp;quot;{&amp;quot;] = true, [&amp;quot;[&amp;quot;] = true, [&amp;quot;}&amp;quot;] = true, [&amp;quot;]&amp;quot;] = true, [&amp;quot;|&amp;quot;] = true, [&amp;quot;:&amp;quot;] = true}&lt;br /&gt;
local MARKER = {[&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;}&lt;br /&gt;
local MATCH = {[&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;}&lt;br /&gt;
local RENDER = {[&amp;#039;{{{&amp;#039;] = { -- these are replaced by variables in module&lt;br /&gt;
    [&amp;#039;{{{&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:orange;&amp;quot;&amp;gt;{{{&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;,&lt;br /&gt;
    [&amp;#039;}}}&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:orange;&amp;quot;&amp;gt;}}}&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;,&lt;br /&gt;
    [&amp;#039;}}&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:orange;&amp;quot;&amp;gt;}}&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;,&lt;br /&gt;
    [&amp;#039;]]&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:orange;&amp;quot;&amp;gt;]]&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;&lt;br /&gt;
               }, [&amp;#039;{{#&amp;#039;] = { -- these will receive many different specific translations in module&lt;br /&gt;
    [&amp;#039;{{#&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;{{#&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;,&lt;br /&gt;
    [&amp;#039;}}}&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;}}}&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;,&lt;br /&gt;
    [&amp;#039;}}&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;}}&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;,&lt;br /&gt;
    [&amp;#039;]]&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;]]&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;&lt;br /&gt;
               }, [&amp;#039;{{&amp;#039;] = { -- these might eventually be expanded by the module, but not in the first versions (scotty, try and increase the power!)&lt;br /&gt;
    [&amp;#039;{{&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;{{&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;,&lt;br /&gt;
    [&amp;#039;}}}&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;}}}&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;,&lt;br /&gt;
    [&amp;#039;}}&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;}}&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;,&lt;br /&gt;
    [&amp;#039;]]&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;]]&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;&lt;br /&gt;
               }, [&amp;#039;[[&amp;#039;] = { -- these can be left untouched, I think&lt;br /&gt;
    [&amp;#039;[[&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;[[&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;,&lt;br /&gt;
    [&amp;#039;}}}&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;}}}&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;,&lt;br /&gt;
    [&amp;#039;}}&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;}}&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;,&lt;br /&gt;
    [&amp;#039;]]&amp;#039;] = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;]]&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039;&lt;br /&gt;
               }}&lt;br /&gt;
&lt;br /&gt;
local debuglog = &amp;quot;&amp;quot;&lt;br /&gt;
local text&lt;br /&gt;
local getletter -- this module is designed around reading ONCE, tracking state; getletter() gets each letter in text once&lt;br /&gt;
local out = &amp;quot;&amp;quot;&lt;br /&gt;
local flag = false -- true marks the end of the getletter() stream&lt;br /&gt;
&lt;br /&gt;
function getContent(template)&lt;br /&gt;
    local title -- holds the result of the mw.title.xxx call&lt;br /&gt;
    if not(template) then&lt;br /&gt;
        title=mw.title.getCurrentTitle()&lt;br /&gt;
        if not(title) then return &amp;quot;error: failed to getCurrentTitle()&amp;quot; end&lt;br /&gt;
        local tdedoc=mw.ustring.match(title.fullText,&amp;quot;Template:(.-)/doc&amp;quot;)&lt;br /&gt;
        if tdedoc then title=mw.title.new(&amp;quot;Template:&amp;quot;..tdedoc) end -- SPECIAL CASE: Invoke in the template documentation processes the template instead&lt;br /&gt;
    else title=mw.title.new(page)&lt;br /&gt;
         if not (title) then return &amp;quot;error: failed to mw.title.new(&amp;quot; .. template .. &amp;quot;)&amp;quot; end&lt;br /&gt;
    end -- if not(template)&lt;br /&gt;
    return title.getContent(title) or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function scanabort()&lt;br /&gt;
	flag = true&lt;br /&gt;
	return &amp;quot;:&amp;quot; -- an &amp;quot;actable&amp;quot; to prevent looping&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function formatTemplate(text,importstack,posn,template) -- note template is just for the error message&lt;br /&gt;
    local debug=&amp;quot;&amp;quot;&lt;br /&gt;
    local letter=&amp;quot;&amp;quot;&lt;br /&gt;
    local output=&amp;quot;&amp;quot;&lt;br /&gt;
    local outputtable={}&lt;br /&gt;
    posn=tonumber(posn) or 0&lt;br /&gt;
    if posn&amp;gt;0 then text=string.sub(text,posn,-1) end --- need to chop off the preceding text so it doesn&amp;#039;t gmatch to it&lt;br /&gt;
    local stopposn = (string.find(text, &amp;quot;[^{}%[%]|:]&amp;quot;, MAXPOSN))&lt;br /&gt;
    if stopposn then text= string.sub(text, 1, stopposn) end&lt;br /&gt;
    stack = {top = #importstack}&lt;br /&gt;
    for i = 0, stack.top do&lt;br /&gt;
        stack[i] = {}&lt;br /&gt;
        stack[i].feature = importstack[i]&lt;br /&gt;
    	stack[i].text = {}&lt;br /&gt;
    	stack[i].seg = 1 -- this is NOT ACCURATE, would need to be saved in the transition&lt;br /&gt;
    end&lt;br /&gt;
    stack.push = function(feature)&lt;br /&gt;
    	table.insert(stack[stack.top].text, out)&lt;br /&gt;
        stack.top = stack.top + 1&lt;br /&gt;
        stack[stack.top] = {}&lt;br /&gt;
        stack[stack.top].text = {RENDER[feature][feature]}&lt;br /&gt;
        stack[stack.top].seg = 1&lt;br /&gt;
        stack[stack.top].feature = feature&lt;br /&gt;
        out = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    stack.pop = function(feature)&lt;br /&gt;
        local spillover = &amp;quot;&amp;quot;&lt;br /&gt;
        local pop = stack[stack.top].feature&lt;br /&gt;
        if (MATCH[pop] ~= feature and feature == &amp;quot;}}}&amp;quot;) then&lt;br /&gt;
            feature = &amp;quot;}}&amp;quot;&lt;br /&gt;
            spillover = &amp;quot;}&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        out = out .. RENDER[pop][feature]&lt;br /&gt;
        if (MATCH[pop] ~= feature) then&lt;br /&gt;
            out = out .. &amp;quot;&amp;lt;--- error? &amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(stack[stack.top].text, out)&lt;br /&gt;
        table.insert(stack[stack.top - 1].text, table.concat(stack[stack.top].text))&lt;br /&gt;
        stack[stack.top] = nil&lt;br /&gt;
        stack.top = stack.top - 1&lt;br /&gt;
        out = &amp;quot;&amp;quot;&lt;br /&gt;
        return spillover&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    stack.field = function (letter)&lt;br /&gt;
        local ss = stack[stack.top].feature&lt;br /&gt;
        if (stack[stack.top].seg == 1 and letter == MARKER[ss]) then&lt;br /&gt;
            out = &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;lt;span style = &amp;quot;color:gray;&amp;quot;&amp;gt;&amp;#039; .. out .. &amp;#039;&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;&amp;#039; .. letter&lt;br /&gt;
            stack[stack.top].seg = 2&lt;br /&gt;
        elseif (ss ~= &amp;quot;[[&amp;quot; and letter==&amp;quot;|&amp;quot;) then&lt;br /&gt;
            out = out .. &amp;quot;&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;..string.rep(&amp;quot;&amp;amp;nbsp;&amp;quot;,4*stack.top)..&amp;quot;|&amp;quot;&lt;br /&gt;
            table.insert(stack[stack.top].text, out)&lt;br /&gt;
            stack[stack.top].seg = stack[stack.top].seg + 1&lt;br /&gt;
            out = &amp;quot;&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            out = out .. letter&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    stack.write = function() -- out is a simple global variable for repeated concatenations; can&amp;#039;t get too big though&lt;br /&gt;
        table.insert(stack[stack.top].text, out)&lt;br /&gt;
        out = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    template=template or &amp;quot;&amp;quot;&lt;br /&gt;
    getletter = string.gmatch(text,&amp;quot;.&amp;quot;)&lt;br /&gt;
    out=&amp;quot;&amp;quot;&lt;br /&gt;
    repeat&lt;br /&gt;
        local holding = &amp;quot;&amp;quot;&lt;br /&gt;
        repeat&lt;br /&gt;
        	letter = letter or &amp;quot;&amp;quot; -- bug that dumps nil letters comes up in the out = out ..letter, NOT while not ACTABLE[letter] ... why?&lt;br /&gt;
            while not ACTABLE[letter] do&lt;br /&gt;
    	        out = out .. letter&lt;br /&gt;
    	        letter = getletter() or scanabort()&lt;br /&gt;
            end&lt;br /&gt;
            if HOLDABLE[letter] then&lt;br /&gt;
                holding = letter&lt;br /&gt;
            else&lt;br /&gt;
                stack.field(letter)&lt;br /&gt;
            end&lt;br /&gt;
            letter = &amp;quot;&amp;quot;&lt;br /&gt;
        until holding ~= &amp;quot;&amp;quot; or flag&lt;br /&gt;
        if #out&amp;gt;20 then&lt;br /&gt;
            stack.write()&lt;br /&gt;
        end&lt;br /&gt;
        letter=getletter() or scanabort()&lt;br /&gt;
         -- add the letter to the next feature being parsed if possible&lt;br /&gt;
        if (holding == &amp;quot;[&amp;quot;) then -- either [[ or just ignore&lt;br /&gt;
             -- cases based on the next letter after &amp;quot;[&amp;quot;&lt;br /&gt;
            if (letter == &amp;quot;[&amp;quot;) then&lt;br /&gt;
            	stack.push(&amp;quot;[[&amp;quot;)&lt;br /&gt;
                letter = &amp;quot;&amp;quot;&lt;br /&gt;
            else &lt;br /&gt;
                out = out .. holding -- single [, treat normally&lt;br /&gt;
            end&lt;br /&gt;
        elseif (holding == &amp;quot;{&amp;quot;) then&lt;br /&gt;
             -- cases based on the next letter after &amp;quot;{&amp;quot;&lt;br /&gt;
            if (letter == &amp;quot;{&amp;quot;) then&lt;br /&gt;
                letter = getletter() or scanabort()&lt;br /&gt;
               if (letter == &amp;quot;#&amp;quot;) then&lt;br /&gt;
             	 stack.push(&amp;quot;{{#&amp;quot;)&lt;br /&gt;
                 letter = &amp;quot;&amp;quot;&lt;br /&gt;
               elseif (letter == &amp;quot;{&amp;quot;) then&lt;br /&gt;
             	 stack.push(&amp;quot;{{{&amp;quot;)&lt;br /&gt;
             	 letter = &amp;quot;&amp;quot;&lt;br /&gt;
               else&lt;br /&gt;
             	 stack.push(&amp;quot;{{&amp;quot;)&lt;br /&gt;
               end&lt;br /&gt;
            end&lt;br /&gt;
        elseif (holding == &amp;quot;]&amp;quot;) then&lt;br /&gt;
            if (letter == &amp;quot;]&amp;quot;) then -- we have a ]]&lt;br /&gt;
                stack.pop(&amp;quot;]]&amp;quot;)&lt;br /&gt;
                letter = &amp;quot;&amp;quot;&lt;br /&gt;
            else out = out .. holding&lt;br /&gt;
            end&lt;br /&gt;
        elseif (holding == &amp;quot;}&amp;quot;) then&lt;br /&gt;
            if (letter == &amp;quot;}&amp;quot;) then&lt;br /&gt;
                letter = getletter()&lt;br /&gt;
                if letter == &amp;quot;}&amp;quot; then&lt;br /&gt;
                    letter = stack.pop(&amp;quot;}}}&amp;quot;)&lt;br /&gt;
                else &lt;br /&gt;
                    stack.pop(&amp;quot;}}&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            else out = out .. holding -- lone } is nothing&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    until flag&lt;br /&gt;
    if stack.top&amp;gt;0 then&lt;br /&gt;
        out = string.sub(out, 1, -2) .. &amp;quot;&amp;lt;--- end of run ---&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;#039;&amp;#039;&amp;#039;run incomplete.&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
        stack.write()&lt;br /&gt;
        local stackcrypt = &amp;quot;&amp;quot;&lt;br /&gt;
        for i = stack.top, 1, -1 do&lt;br /&gt;
        	table.insert(stack[i-1].text, table.concat(stack[i].text))&lt;br /&gt;
                stackcrypt = stackcrypt .. stack[i].feature&lt;br /&gt;
        end&lt;br /&gt;
        stackcrypt=string.gsub(stackcrypt,&amp;quot;{&amp;quot;,&amp;quot;&amp;lt;&amp;quot;)&lt;br /&gt;
        stackcrypt=string.gsub(stackcrypt,&amp;quot;%[&amp;quot;,&amp;quot;(&amp;quot;)&lt;br /&gt;
        stackcrypt=string.gsub(stackcrypt,&amp;quot;}&amp;quot;,&amp;quot;&amp;gt;&amp;quot;)&lt;br /&gt;
        stackcrypt=string.gsub(stackcrypt,&amp;quot;%]&amp;quot;,&amp;quot;)&amp;quot;)&lt;br /&gt;
        if string.len(text) &amp;gt;= MAXPOSN then&lt;br /&gt;
            out = out .. &amp;quot;&amp;lt;br /&amp;gt;&amp;#039;&amp;#039;Note: due to restrictions on Lua time usage, runs are truncated at MAXPOSN characters&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
            out = out .. &amp;quot;&amp;lt;br /&amp;gt;&amp;#039;&amp;#039;To continue this run, preview or enter &amp;lt;nowiki&amp;gt;{{#invoke:FormatTemplate|format|page=&amp;quot;..template..&amp;quot;|stack=&amp;quot;..stackcrypt..&amp;quot;|position=&amp;quot;..#text..&amp;quot;}}&amp;quot;&lt;br /&gt;
        else out = out .. &amp;quot;&amp;lt;br /&amp;gt;&amp;#039;&amp;#039;If you have an additional segment of template to process, preview or enter &amp;lt;nowiki&amp;gt;{{#invoke:FormatTemplate|format|page=&amp;quot;..template..&amp;quot;|stack=&amp;quot;..stackcrypt..&amp;quot;|position=0}}&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    output=table.concat(stack[0].text) .. out&lt;br /&gt;
    return output&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame,fcn)&lt;br /&gt;
    local args=frame.args&lt;br /&gt;
    local parent=frame.getParent(frame)&lt;br /&gt;
    if parent then pargs=parent.args else pargs={} end&lt;br /&gt;
    page=args.page or pargs.page&lt;br /&gt;
    text = getContent(page)&lt;br /&gt;
    local stackcrypt=args.stack or pargs.stack or &amp;quot;&amp;quot;&lt;br /&gt;
    stackcrypt=mw.ustring.gsub(stackcrypt,&amp;quot;&amp;lt;&amp;quot;,&amp;quot;{&amp;quot;)&lt;br /&gt;
    stackcrypt=mw.ustring.gsub(stackcrypt,&amp;quot;%(&amp;quot;,&amp;quot;[&amp;quot;)&lt;br /&gt;
    stackcrypt=mw.ustring.gsub(stackcrypt,&amp;quot;&amp;gt;&amp;quot;,&amp;quot;}&amp;quot;)&lt;br /&gt;
    stackcrypt=mw.ustring.gsub(stackcrypt,&amp;quot;%)&amp;quot;,&amp;quot;]&amp;quot;)&lt;br /&gt;
    local stack={}&lt;br /&gt;
    local posn=args.position or pargs.position or 0&lt;br /&gt;
    local prowl=mw.ustring.gmatch(stackcrypt,&amp;quot;[^,%s]+&amp;quot;)&lt;br /&gt;
    repeat&lt;br /&gt;
        local x=prowl()&lt;br /&gt;
        if x then table.insert(stack,x) end&lt;br /&gt;
    until not x&lt;br /&gt;
    fcn=fcn or args[&amp;quot;function&amp;quot;] or pargs[&amp;quot;function&amp;quot;] or &amp;quot;&amp;quot;&lt;br /&gt;
    fcn=mw.ustring.match(fcn,&amp;quot;%S+&amp;quot;)&lt;br /&gt;
   -- text=text or args.text or pargs.text or args[1] or pargs[1] or &amp;quot;&amp;quot; -- doesn&amp;#039;t work - gets interpreted or passed as &amp;quot;UNIQ..QINU&amp;quot;, either way unusuable!&lt;br /&gt;
    local nowikisafehouse={}&lt;br /&gt;
    local nowikielementnumber=0&lt;br /&gt;
    local prowl=mw.ustring.gmatch(text,&amp;quot;&amp;lt;nowiki&amp;gt;(.-)&amp;lt;/nowiki&amp;gt;&amp;quot;)&lt;br /&gt;
    repeat&lt;br /&gt;
        local nowikimatch=prowl()&lt;br /&gt;
        if not(nowikimatch) then break end&lt;br /&gt;
        nowikielementnumber=nowikielementnumber+1&lt;br /&gt;
        table.insert(nowikisafehouse,nowikimatch)&lt;br /&gt;
    until false&lt;br /&gt;
    text=mw.ustring.gsub(text,&amp;quot;&amp;lt;nowiki&amp;gt;(.-)&amp;lt;/nowiki&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Module:FormatTemplate internal nowiki token&amp;gt;&amp;quot;)&lt;br /&gt;
     -- this is the meat of the formatting&lt;br /&gt;
    if fcn==&amp;quot;format&amp;quot; then text=formatTemplate(text,stack,posn,page) end&lt;br /&gt;
     -- unprotect the nowikis from the template itself - but inactivate them on first display!&lt;br /&gt;
    for nw = 1,nowikielementnumber do&lt;br /&gt;
        text=mw.ustring.gsub(text,&amp;quot;&amp;lt;Module:FormatTemplate internal nowiki token&amp;gt;&amp;quot;,&amp;quot;&amp;lt;nowiki&amp;gt;&amp;quot;..nowikisafehouse[nw]..&amp;quot;&amp;lt;/now&amp;lt;/nowiki&amp;gt;iki&amp;gt;&amp;quot;,1)&lt;br /&gt;
    end&lt;br /&gt;
     -- preprocess as nowiki-bounded text&lt;br /&gt;
    return frame:preprocess(&amp;quot;&amp;lt;nowiki&amp;gt;&amp;quot;..text..&amp;quot;&amp;lt;/nowiki&amp;gt;&amp;quot; .. &amp;quot;\n&amp;quot; .. debuglog)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.format(frame)&lt;br /&gt;
    return p.main(frame,&amp;quot;format&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>fa&gt;علیرضا</name></author>
	</entry>
</feed>