<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fa">
	<id>https://fa.farahowzeh.ir/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Esfandiari</id>
	<title>فراحوزه - مشارکت‌های کاربر [fa]</title>
	<link rel="self" type="application/atom+xml" href="https://fa.farahowzeh.ir/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Esfandiari"/>
	<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/wiki/%D9%88%DB%8C%DA%98%D9%87:%D9%85%D8%B4%D8%A7%D8%B1%DA%A9%D8%AA%E2%80%8C%D9%87%D8%A7/Esfandiari"/>
	<updated>2026-06-26T03:13:19Z</updated>
	<subtitle>مشارکت‌های کاربر</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D8%A7%D9%84%DA%AF%D9%88:%DA%86%D9%BE&amp;diff=2096</id>
		<title>الگو:چپ</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D8%A7%D9%84%DA%AF%D9%88:%DA%86%D9%BE&amp;diff=2096"/>
		<updated>2026-06-25T10:02:20Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۱ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;direction: ltr; text-align: left&amp;quot;&amp;gt;{{{1|}}}&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D8%A7%D9%84%DA%AF%D9%88:%D9%BE%D8%A7%DB%8C%D8%A7%D9%86&amp;diff=2094</id>
		<title>الگو:پایان</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D8%A7%D9%84%DA%AF%D9%88:%D9%BE%D8%A7%DB%8C%D8%A7%D9%86&amp;diff=2094"/>
		<updated>2026-06-25T10:02:20Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۱ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {},&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;پایان چند ستونه و می تواند پایان چیزهای دیگر هم باشد&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D8%A7%D9%84%DA%AF%D9%88:%D8%B5%D9%81%D8%AD%D9%87_%D8%A7%D8%B5%D9%84%DB%8C/%D9%82%D8%A7%D8%A8&amp;diff=2092</id>
		<title>الگو:صفحه اصلی/قاب</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D8%A7%D9%84%DA%AF%D9%88:%D8%B5%D9%81%D8%AD%D9%87_%D8%A7%D8%B5%D9%84%DB%8C/%D9%82%D8%A7%D8%A8&amp;diff=2092"/>
		<updated>2026-06-25T10:02:20Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۱ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;{{{class|}}}&amp;quot; style=&amp;quot;box-shadow: 2px 4px 11px 0px #becbd5; border-radius: 10px; overflow: hidden; {{{style|}}};&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;heading&amp;quot; style=&amp;quot;overflow: hidden; background-color: #d9ecff; border-top-left-radius: 8px; border-top-right-radius: 8px; {{{heading style|}}}&amp;quot;&amp;gt;&lt;br /&gt;
        {{#if: {{{تصویر|}}}|&amp;lt;div style=&amp;quot;float: right; padding: 5px&amp;quot;&amp;gt;[[image: {{{تصویر}}}|30px|link=|alt=]]&amp;lt;/div&amp;gt;}}&lt;br /&gt;
        &amp;lt;h3 style=&amp;quot;font-size: 130%; font-weight: bold; line-height: 40px; float: right; margin: 0; padding: 0px 20px; border: none; {{{heading text style|}}}&amp;quot;&amp;gt;{{{عنوان}}}&amp;lt;/h3&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;content {{{content class|}}}&amp;quot; style=&amp;quot;padding: 10px; vertical-align: top; {{{content style|}}}&amp;quot;&amp;gt;&lt;br /&gt;
{{{محتوا}}}{{#if: {{{پیوند|}}}|&lt;br /&gt;
        &amp;lt;div style=&amp;quot;text-align: right&amp;quot;&amp;gt;{{{پیوند}}}&amp;lt;/div&amp;gt;}}&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D8%A7%D9%84%DA%AF%D9%88:%D8%B3%D8%AA%D9%88%D9%86_%D8%B4%D8%B1%D9%88%D8%B9&amp;diff=2090</id>
		<title>الگو:ستون شروع</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D8%A7%D9%84%DA%AF%D9%88:%D8%B3%D8%AA%D9%88%D9%86_%D8%B4%D8%B1%D9%88%D8%B9&amp;diff=2090"/>
		<updated>2026-06-25T10:02:20Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۱ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#تغییر_مسیر [[الگو:ستون-شروع]]&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D8%A7%D9%84%DA%AF%D9%88:%D8%B3%D8%AA%D9%88%D9%86-%D8%B4%D8%B1%D9%88%D8%B9&amp;diff=2088</id>
		<title>الگو:ستون-شروع</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D8%A7%D9%84%DA%AF%D9%88:%D8%B3%D8%AA%D9%88%D9%86-%D8%B4%D8%B1%D9%88%D8%B9&amp;diff=2088"/>
		<updated>2026-06-25T10:02:20Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۱ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div style=&amp;quot;{{#if:{{{عرض|}}}|{{colwidth|{{{عرض}}}}}|{{column-count|{{{1|}}}}} {{column-gap|{{#invoke:Numeral converter|convert_template|en|{{{فاصله|}}}}}}} {{column-rule|{{#invoke:Numeral converter|convert_template|en|{{{جداساز|}}}}}|outset|#eee}} }} {{#ifeq:{{lc:{{{small|}}}}}|yes|font-size:100%;}};  background-color:{{{رنگ|}}};&amp;quot;&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:%D8%A7%D9%84%DA%AF%D9%88%DB%8C_%DB%8C%DA%A9%D8%B3%D8%A7%D9%86_%D8%A8%D9%87_%D8%B2%D8%A8%D8%A7%D9%86_%D8%AF%DB%8C%DA%AF%D8%B1&amp;diff=2086</id>
		<title>پودمان:الگوی یکسان به زبان دیگر</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:%D8%A7%D9%84%DA%AF%D9%88%DB%8C_%DB%8C%DA%A9%D8%B3%D8%A7%D9%86_%D8%A8%D9%87_%D8%B2%D8%A8%D8%A7%D9%86_%D8%AF%DB%8C%DA%AF%D8%B1&amp;diff=2086"/>
		<updated>2026-06-25T09:35:17Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- این پودمان برای [[الگو:جعبه پیام الگوی یکسان انگلیسی و فارسی]] است.&lt;br /&gt;
local messageBox = require(&amp;quot;Module:Message box&amp;quot;).main&lt;br /&gt;
local getArgs = require(&amp;quot;Module:Arguments&amp;quot;).getArgs&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
  main = function(frame)&lt;br /&gt;
    local currentTitle, args&lt;br /&gt;
&lt;br /&gt;
    currentTitle = mw.title.getCurrentTitle()&lt;br /&gt;
    args = getArgs(&lt;br /&gt;
    	frame, &lt;br /&gt;
    	{&lt;br /&gt;
    		trim = true, &lt;br /&gt;
    		removeBlanks = true,&lt;br /&gt;
    		parentOnly = true,&lt;br /&gt;
    		wrappers = &amp;quot;الگو:الگوی یکسان به زبان دیگر&amp;quot;,&lt;br /&gt;
    		noOverwrite = true,&lt;br /&gt;
    		valueFunc = function(_, value)&lt;br /&gt;
    			return mw.ustring.gsub(value, &amp;quot;الگو:&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		}&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
    -- 10 is template namespace&lt;br /&gt;
    if currentTitle:inNamespace(10) then&lt;br /&gt;
      if type(args[1]) ~= &amp;quot;nil&amp;quot; and mw.title.new(args[1], 10).exists then&lt;br /&gt;
        local text, templateIs, templateIn&lt;br /&gt;
&lt;br /&gt;
        text = &amp;quot;این الگوی &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        if mw.ustring.match(currentTitle.text, &amp;quot;[a-zA-Z]&amp;quot;) then&lt;br /&gt;
          templateIs = &amp;quot;انگلیسی&amp;quot;&lt;br /&gt;
          templateIn = &amp;quot;فارسی&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
          templateIs = &amp;quot;فارسی&amp;quot;&lt;br /&gt;
          templateIn = &amp;quot;انگلیسی&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        text = text .. templateIs .. &amp;quot; [[الگو:&amp;quot; .. args[1] .. &amp;quot;|نمونهٔ &amp;quot; .. templateIn ..&amp;quot;]] دارد که همه پارامترهایش &amp;quot; .. templateIn .. &amp;quot; است.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        if templateIn == &amp;quot;فارسی&amp;quot; then&lt;br /&gt;
          text = text .. &amp;quot; توصیه می‌کنیم از الگوی فارسی استفاده کنید.&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        -- Add category into persian templates have similar template in English.&lt;br /&gt;
        if templateIs == &amp;quot;فارسی&amp;quot; then&lt;br /&gt;
          text = text .. &amp;quot;[[رده:دارای الگوی یکسان به زبان دیگر]]&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        return messageBox(&amp;quot;ombox&amp;quot;, {text=text})&lt;br /&gt;
      else&lt;br /&gt;
        error(&amp;quot;الگوی مقصد یا مشخص نشده‌است یا در فضای نام الگو قرار ندارد&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      error(&amp;quot;الگوی {{الگوی|الگوی یکسان به زبان دیگر}} فقط در فضای نام الگو استفاده می‌شود&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Yesno&amp;diff=2083</id>
		<title>پودمان:Yesno</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Yesno&amp;diff=2083"/>
		<updated>2026-06-25T09:35:17Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Function allowing for consistent treatment of boolean-like wikitext input.&lt;br /&gt;
-- It works similarly to the template {{yesno}}.&lt;br /&gt;
&lt;br /&gt;
return function (val, default)&lt;br /&gt;
	-- If your wiki uses non-ascii characters for any of &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc., you&lt;br /&gt;
	-- should replace &amp;quot;val:lower()&amp;quot; with &amp;quot;mw.ustring.lower(val)&amp;quot; in the&lt;br /&gt;
	-- following line.&lt;br /&gt;
	val = type(val) == &#039;string&#039; and mw.ustring.lower(val) or val&lt;br /&gt;
	if val == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif val == true &lt;br /&gt;
		or val == &#039;yes&#039;&lt;br /&gt;
		or val == &#039;y&#039;&lt;br /&gt;
		or val == &#039;true&#039;&lt;br /&gt;
		or val == &#039;t&#039;&lt;br /&gt;
		or val == &#039;on&#039;&lt;br /&gt;
		or val == &#039;بله&#039;&lt;br /&gt;
		or val == &#039;آره&#039;&lt;br /&gt;
		or val == &#039;درست&#039;&lt;br /&gt;
		or val == &#039;صحیح&#039;&lt;br /&gt;
		or val == &#039;روشن&#039;&lt;br /&gt;
		or tonumber(val) == 1&lt;br /&gt;
	then&lt;br /&gt;
		return true&lt;br /&gt;
	elseif val == false&lt;br /&gt;
		or val == &#039;no&#039;&lt;br /&gt;
		or val == &#039;n&#039;&lt;br /&gt;
		or val == &#039;false&#039;&lt;br /&gt;
		or val == &#039;f&#039;&lt;br /&gt;
		or val == &#039;off&#039;&lt;br /&gt;
		or val == &#039;خیر&#039;&lt;br /&gt;
		or val == &#039;نه&#039;&lt;br /&gt;
		or val == &#039;غلط&#039;&lt;br /&gt;
		or val == &#039;اشتباه&#039;&lt;br /&gt;
		or val == &#039;خاموش&#039;&lt;br /&gt;
		or tonumber(val) == 0&lt;br /&gt;
	then&lt;br /&gt;
		return false&lt;br /&gt;
	else&lt;br /&gt;
		return default&lt;br /&gt;
	end&lt;br /&gt;
end&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Unsubst&amp;diff=2080</id>
		<title>پودمان:Unsubst</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Unsubst&amp;diff=2080"/>
		<updated>2026-06-25T09:35:16Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local checkType = require(&#039;libraryUtil&#039;).checkType&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local BODY_PARAM = &#039;$B&#039;&lt;br /&gt;
&lt;br /&gt;
local specialParams = {&lt;br /&gt;
	[&#039;$params&#039;] = &#039;parameter list&#039;,&lt;br /&gt;
	[&#039;$aliases&#039;] = &#039;parameter aliases&#039;,&lt;br /&gt;
	[&#039;$flags&#039;] = &#039;flags&#039;,&lt;br /&gt;
	[&#039;$B&#039;] = &#039;template content&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame, body)&lt;br /&gt;
	-- If we are substing, this function returns a template invocation, and if&lt;br /&gt;
	-- not, it returns the template body. The template body can be specified in&lt;br /&gt;
	-- the body parameter, or in the template parameter defined in the&lt;br /&gt;
	-- BODY_PARAM variable. This function can be called from Lua or from&lt;br /&gt;
	-- #invoke.&lt;br /&gt;
&lt;br /&gt;
	-- Return the template body if we aren&#039;t substing.&lt;br /&gt;
	if not mw.isSubsting() then&lt;br /&gt;
		if body ~= nil then&lt;br /&gt;
			return body&lt;br /&gt;
		elseif frame.args[BODY_PARAM] ~= nil then&lt;br /&gt;
			return frame.args[BODY_PARAM]&lt;br /&gt;
		else&lt;br /&gt;
			error(string.format(&lt;br /&gt;
				&amp;quot;no template content specified (use parameter &#039;%s&#039; from #invoke)&amp;quot;,&lt;br /&gt;
				BODY_PARAM&lt;br /&gt;
			), 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Sanity check for the frame object.&lt;br /&gt;
	if type(frame) ~= &#039;table&#039;&lt;br /&gt;
		or type(frame.getParent) ~= &#039;function&#039;&lt;br /&gt;
		or not frame:getParent()&lt;br /&gt;
	then&lt;br /&gt;
		error(&lt;br /&gt;
			&amp;quot;argument #1 to &#039;main&#039; must be a frame object with a parent &amp;quot; ..&lt;br /&gt;
			&amp;quot;frame available&amp;quot;,&lt;br /&gt;
			2&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Find the invocation name.&lt;br /&gt;
	local mTemplateInvocation = require(&#039;Module:Template invocation&#039;)&lt;br /&gt;
	local name = mTemplateInvocation.name(frame:getParent():getTitle())&lt;br /&gt;
&lt;br /&gt;
	-- Combine passed args with passed defaults&lt;br /&gt;
	local args = {}&lt;br /&gt;
	if string.find( &#039;,&#039;..(frame.args[&#039;$flags&#039;] or &#039;&#039;)..&#039;,&#039;, &#039;,%s*override%s*,&#039; ) then&lt;br /&gt;
		for k, v in pairs( frame:getParent().args ) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in pairs( frame.args ) do&lt;br /&gt;
			if not specialParams[k] then&lt;br /&gt;
				if v == &#039;__DATE__&#039; then&lt;br /&gt;
					v = mw.getContentLanguage():formatDate( &#039;F Y&#039; )&lt;br /&gt;
				end&lt;br /&gt;
				args[k] = v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		for k, v in pairs( frame.args ) do&lt;br /&gt;
			if not specialParams[k] then&lt;br /&gt;
				if v == &#039;__DATE__&#039; then&lt;br /&gt;
					v = mw.getContentLanguage():formatDate( &#039;F Y&#039; )&lt;br /&gt;
				end&lt;br /&gt;
				args[k] = v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in pairs( frame:getParent().args ) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Trim parameters, if not specified otherwise&lt;br /&gt;
	if not string.find( &#039;,&#039;..(frame.args[&#039;$flags&#039;] or &#039;&#039;)..&#039;,&#039;, &#039;,%s*keep%-whitespace%s*,&#039; ) then&lt;br /&gt;
		for k, v in pairs( args ) do args[k] = mw.ustring.match(v, &#039;^%s*(.*)%s*$&#039;) or &#039;&#039; end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Pull information from parameter aliases&lt;br /&gt;
	local aliases = {}&lt;br /&gt;
	if frame.args[&#039;$aliases&#039;] then&lt;br /&gt;
		local list = mw.text.split( frame.args[&#039;$aliases&#039;], &#039;%s*,%s*&#039; )&lt;br /&gt;
		for k, v in ipairs( list ) do&lt;br /&gt;
			local tmp = mw.text.split( v, &#039;%s*&amp;gt;%s*&#039; )&lt;br /&gt;
			aliases[tonumber(mw.ustring.match(tmp[1], &#039;^[1-9][0-9]*$&#039;)) or tmp[1]] = ((tonumber(mw.ustring.match(tmp[2], &#039;^[1-9][0-9]*$&#039;))) or tmp[2])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs( aliases ) do&lt;br /&gt;
		if args[k] and ( not args[v] or args[v] == &#039;&#039; ) then&lt;br /&gt;
			args[v] = args[k]&lt;br /&gt;
		end&lt;br /&gt;
		args[k] = nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Remove empty parameters, if specified&lt;br /&gt;
	if string.find( &#039;,&#039;..(frame.args[&#039;$flags&#039;] or &#039;&#039;)..&#039;,&#039;, &#039;,%s*remove%-empty%s*,&#039; ) then&lt;br /&gt;
		local tmp = 0&lt;br /&gt;
		for k, v in ipairs( args ) do&lt;br /&gt;
			if v ~= &#039;&#039; or ( args[k+1] and args[k+1] ~= &#039;&#039; ) or ( args[k+2] and args[k+2] ~= &#039;&#039; ) then&lt;br /&gt;
				tmp = k&lt;br /&gt;
			else&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in pairs( args ) do&lt;br /&gt;
			if v == &#039;&#039; then&lt;br /&gt;
				if not (type(k) == &#039;number&#039; and k &amp;lt; tmp) then args[k] = nil end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Order parameters&lt;br /&gt;
	if frame.args[&#039;$params&#039;] then&lt;br /&gt;
		local params, tmp = mw.text.split( frame.args[&#039;$params&#039;], &#039;%s*,%s*&#039; ), {}&lt;br /&gt;
		for k, v in ipairs(params) do&lt;br /&gt;
			v = tonumber(mw.ustring.match(v, &#039;^[1-9][0-9]*$&#039;)) or v&lt;br /&gt;
			if args[v] then tmp[v], args[v] = args[v], nil end&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in pairs(args) do tmp[k], args[k] = args[k], nil end&lt;br /&gt;
		args = tmp&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mTemplateInvocation.invocation(name, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p[&#039;&#039;] = p.main -- For backwards compatibility&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:TreeChart/data&amp;diff=2077</id>
		<title>پودمان:TreeChart/data</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:TreeChart/data&amp;diff=2077"/>
		<updated>2026-06-25T09:35:16Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local SLD = &#039;1px solid black&#039;&lt;br /&gt;
local DSH = &#039;1px dashed black&#039;&lt;br /&gt;
local DOT = &#039;1px dotted black&#039;&lt;br /&gt;
&lt;br /&gt;
local data = {&lt;br /&gt;
	[&#039;!&#039;] = {&lt;br /&gt;
		t = { { attr = { rowspan = &#039;2&#039; }, style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;2em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;%&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&amp;quot;&#039;&amp;quot;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;(&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;)&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { rowspan = &#039;2&#039; }, style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;2em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;*&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;+&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;,&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;-&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { colspan = &#039;2&#039; }, style = { [&#039;border-bottom&#039;] = SLD, width = &#039;2em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;.&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;7&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;:&#039;] = {&lt;br /&gt;
		t = { { attr = { rowspan = &#039;2&#039; }, style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;2em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;A&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;C&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;D&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { rowspan = &#039;2&#039; }, style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;2em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;F&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;G&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DOT, [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;G2&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;H&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { rowspan = &#039;2&#039; }, style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;2em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;J&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;K&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;L&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;M&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { colspan = &#039;2&#039; }, style = { [&#039;border-bottom&#039;] = DOT, width = &#039;2em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;P&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { colspan = &#039;2&#039; }, style = { [&#039;border-bottom&#039;] = DOT, width = &#039;2em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;Q&#039;] = {&lt;br /&gt;
		t = { { attr = { rowspan = &#039;2&#039; }, style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;2em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;R&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DOT, [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;S&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;T3&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;T2&#039;] = {&lt;br /&gt;
		b = { { style ={ [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style =  { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = {  [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;T&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;U&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;V&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { colspan = &#039;2&#039; }, style = { [&#039;border-bottom&#039;] = DSH, width = &#039;2em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;W&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DOT, [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;X&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;Y&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;Z&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DOT, [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;^&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;$&#039;] = {&lt;br /&gt;
		t = { { attr = { colspan = &#039;2&#039;, rowspan = &#039;2&#039;}, style = { width = &#039;2em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;`&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;a2&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DOT, [&#039;border-bottom&#039;] = &#039;1px dashed #000001&#039;, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;a&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DOT, [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;b2&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, [&#039;border-bottom&#039;] = &#039;1px dotted #000001&#039;, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;b3&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;b&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;c&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;d&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { rowspan = &#039;2&#039; }, style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;2em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;di&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;dj&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;e&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;f&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { rowspan = &#039;2&#039; }, style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;2em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;fh&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] =DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;fy&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;h&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;he&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;i&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;ic&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;j&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { colspan = &#039;2&#039; }, style = { [&#039;border-bottom&#039;] = SLD, width = &#039;2em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;jc&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;k2&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { rowspan = &#039;2&#039; }, style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;2em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;k3&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;k&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { rowspan = &#039;2&#039; }, style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;2em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;kq&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;kr&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;kq2&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;kr2&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
&lt;br /&gt;
	[&#039;l2&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DOT, [&#039;border-bottom&#039;] = &#039;1px dashed #000001&#039;, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;l3&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;l4&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;l&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DOT, [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;m2&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { colspan = &#039;2&#039; }, style = { [&#039;border-bottom&#039;] = DOT, width = &#039;2em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;m&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { colspan = &#039;2&#039; }, style = { [&#039;border-bottom&#039;] = DOT, width = &#039;2em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;mp&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;mp2&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;n2&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, [&#039;border-bottom&#039;] = &#039;1px dotted #000001&#039;, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;n&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;np&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;np2&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;o2&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { rowspan = &#039;2&#039; }, style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;2em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;o&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { rowspan = &#039;2&#039; }, style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;2em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;om&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;om2&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;on&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;on2&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;p2&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DSH, [&#039;border-bottom&#039;] = &#039;1px dotted #000001&#039;, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;p&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, [&#039;border-bottom&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;q2&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DOT, [&#039;border-bottom&#039;] = &#039;1px dashed #000001&#039;, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;q&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DOT, [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;ql&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DOT, [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;ql2&#039;] = {&lt;br /&gt;
		b = { { style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = DOT, [&#039;border-bottom&#039;] =DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;r2&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { colspan = &#039;2&#039; }, style = { [&#039;border-bottom&#039;] = DSH, width = &#039;2em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;r&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { colspan = &#039;2&#039; }, style = { [&#039;border-bottom&#039;] = SLD, width = &#039;2em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;rl&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-bottom&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;rl2&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = DOT, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;t&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-right&#039;] = SLD, [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;v&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { colspan = &#039;2&#039; }, style = { [&#039;border-bottom&#039;] = SLD, width = &#039;2em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;x&#039;] = {},&lt;br /&gt;
	[&#039;y&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ style = { width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { colspan = &#039;2&#039; }, style = { [&#039;border-bottom&#039;] = DSH, width = &#039;2em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;ye&#039;] = {&lt;br /&gt;
		b = { { style = { [&#039;border-right&#039;] = SLD, width = &#039;1em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { style = { [&#039;border-bottom&#039;] = DSH, width = &#039;1em&#039;, height = &#039;1em&#039; } },&lt;br /&gt;
			{ attr = { rowspan = &#039;2&#039; }, style = { width = &#039;1em&#039;, height = &#039;2em&#039; } } }&lt;br /&gt;
			},&lt;br /&gt;
	[&#039;~&#039;] = {&lt;br /&gt;
		b = { { attr = { colspan = &#039;2&#039; }, style = { width = &#039;2em&#039;, height = &#039;1em&#039; } } },&lt;br /&gt;
		t = { { attr = { colspan = &#039;2&#039; }, style = { [&#039;border-bottom&#039;] = DSH, width = &#039;2em&#039;, height = &#039;1em&#039; } } }&lt;br /&gt;
			}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local retval = {}&lt;br /&gt;
&lt;br /&gt;
for k,v in pairs(data) do&lt;br /&gt;
	retval[k] = {}&lt;br /&gt;
	for k2,v2 in pairs(v) do&lt;br /&gt;
		local renderedCells = mw.html.create()&lt;br /&gt;
		for k3,v3 in ipairs(v2) do&lt;br /&gt;
			renderedCells:tag(&#039;td&#039;):css(v3.style or {}):attr(v3.attr or {})&lt;br /&gt;
		end&lt;br /&gt;
		retval[k][k2] = tostring(renderedCells)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return retval&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:TreeChart&amp;diff=2074</id>
		<title>پودمان:TreeChart</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:TreeChart&amp;diff=2074"/>
		<updated>2026-06-25T09:35:15Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&#039;Module:No globals&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local cells = mw.loadData(&#039;Module:TreeChart/data&#039;)&lt;br /&gt;
&lt;br /&gt;
function p._main(cell_args)&lt;br /&gt;
	local ret = mw.html.create()&lt;br /&gt;
	local top = ret:tag(&#039;tr&#039;)&lt;br /&gt;
						:css{ height = &#039;1px&#039;,&lt;br /&gt;
								[&#039;text-align&#039;] = &#039;center&#039; }&lt;br /&gt;
	local bottom = ret:tag(&#039;tr&#039;)&lt;br /&gt;
						:css{ height = &#039;1px&#039;,&lt;br /&gt;
								[&#039;text-align&#039;] = &#039;center&#039; }&lt;br /&gt;
	for _, v in ipairs(cell_args) do&lt;br /&gt;
		if type(v) == &#039;string&#039; then&lt;br /&gt;
			top:wikitext(cells[v].t)&lt;br /&gt;
			bottom:wikitext(cells[v].b)&lt;br /&gt;
		else&lt;br /&gt;
			top:tag(&#039;td&#039;)&lt;br /&gt;
				:attr{ colspan = v.colspan or cell_args.colspan or 6,&lt;br /&gt;
						rowspan = v.rowspan or cell_args.rowspan or 2 }&lt;br /&gt;
				:css{ padding = &#039;0.2em&#039;,&lt;br /&gt;
						border = (v.border or cell_args.border or &#039;2&#039;) .. &#039;px solid black&#039; }&lt;br /&gt;
				:cssText(v.boxstyle or cell_args.boxstyle)&lt;br /&gt;
				:wikitext(v.text)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {wrappers = &#039;Template:Tree chart&#039;, trim = false, removeBlanks = false})&lt;br /&gt;
	local cell_args = {&lt;br /&gt;
		colspan = args.colspan,&lt;br /&gt;
		rowspan = args.rowspan,&lt;br /&gt;
		border = args.border,&lt;br /&gt;
		boxstyle = args.boxstyle&lt;br /&gt;
	}&lt;br /&gt;
	for _, val in ipairs(args) do&lt;br /&gt;
		local trimmedVal = val:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
		if trimmedVal == &#039;&#039; then&lt;br /&gt;
			trimmedVal = &#039;$&#039;&lt;br /&gt;
		end&lt;br /&gt;
		if cells[trimmedVal] then&lt;br /&gt;
			table.insert(cell_args, trimmedVal)&lt;br /&gt;
		else&lt;br /&gt;
			-- Unnamed params behave weirdly&lt;br /&gt;
			-- white space at the front counts for param_{{{1}}}, but not whitespace at the end, so remove it&lt;br /&gt;
			local leftTrimmedVal = val:gsub(&#039;%s+$&#039;,&#039;&#039;)&lt;br /&gt;
			table.insert(cell_args, {&lt;br /&gt;
				text = args[trimmedVal] or (&#039;{{{&#039;..trimmedVal..&#039;}}}&#039;),&lt;br /&gt;
				colspan = args[&#039;colspan_&#039;..leftTrimmedVal],&lt;br /&gt;
				rowspan = args[&#039;rowspan_&#039;..leftTrimmedVal],&lt;br /&gt;
				border = args[&#039;border_&#039;..leftTrimmedVal],&lt;br /&gt;
				boxstyle = args[&#039;boxstyle_&#039;..leftTrimmedVal]&lt;br /&gt;
			})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p._main(cell_args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Transclusion_count/data/T&amp;diff=2071</id>
		<title>پودمان:Transclusion count/data/T</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Transclusion_count/data/T&amp;diff=2071"/>
		<updated>2026-06-25T09:35:14Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
[&amp;quot;T&amp;quot;] = 270000,&lt;br /&gt;
[&amp;quot;T1&amp;quot;] = 7900,&lt;br /&gt;
[&amp;quot;T:TDYK&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;TAFI/Picture_box&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;TAFI/Picture_box/show_picture&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;TBA&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;TCH&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;TCMDb_name&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;TCMDb_title&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;TDMCA&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;TFAFULL&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;TFAIMAGE&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;TFAfooter&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;TFArecentlist&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;THA&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;TOC_bottom&amp;quot;] = 69000,&lt;br /&gt;
[&amp;quot;TOC_left&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;TOC_left/styles.css&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;TOC_limit&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;TOC_limit/styles.css&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;TOC_right&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;TOC_right/styles.css&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;TOC_top&amp;quot;] = 69000,&lt;br /&gt;
[&amp;quot;TOClimit&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;TOCright&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;TUR&amp;quot;] = 7600,&lt;br /&gt;
[&amp;quot;TV.com_episode&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;TV.com_show&amp;quot;] = 6500,&lt;br /&gt;
[&amp;quot;TVDebutsEndingsAntonym&amp;quot;] = 6200,&lt;br /&gt;
[&amp;quot;TVQ&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;TWA/Logo/3&amp;quot;] = 54000,&lt;br /&gt;
[&amp;quot;TWA/Navigation2&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;TWA_nav_inner_black&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;TWP&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;Tab&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Tag&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;Talk&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Talk_archive&amp;quot;] = 28000,&lt;br /&gt;
[&amp;quot;Talk_archive_navigation&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Talk_header&amp;quot;] = 538000,&lt;br /&gt;
[&amp;quot;Talk_other&amp;quot;] = 162000,&lt;br /&gt;
[&amp;quot;Talk_page&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;Talk_page_header&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Talk_page_of_redirect&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Talk_page_stalker&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Talk_page_watcher&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Talk_quote_block&amp;quot;] = 8700,&lt;br /&gt;
[&amp;quot;Talk_quote_block/styles.css&amp;quot;] = 8700,&lt;br /&gt;
[&amp;quot;Talk_quote_inline&amp;quot;] = 64000,&lt;br /&gt;
[&amp;quot;Talk_quote_inline/styles.css&amp;quot;] = 64000,&lt;br /&gt;
[&amp;quot;Talkarchive&amp;quot;] = 98000,&lt;br /&gt;
[&amp;quot;Talkarchivenav&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Talkback&amp;quot;] = 69000,&lt;br /&gt;
[&amp;quot;Talkheader&amp;quot;] = 134000,&lt;br /&gt;
[&amp;quot;Talkpage&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Talkquote&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Talkspace_detect&amp;quot;] = 371000,&lt;br /&gt;
[&amp;quot;Tan&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Tasks&amp;quot;] = 665000,&lt;br /&gt;
[&amp;quot;Taxobox&amp;quot;] = 181000,&lt;br /&gt;
[&amp;quot;Taxobox/Error_colour&amp;quot;] = 442000,&lt;br /&gt;
[&amp;quot;Taxobox/core&amp;quot;] = 442000,&lt;br /&gt;
[&amp;quot;Taxobox/species&amp;quot;] = 62000,&lt;br /&gt;
[&amp;quot;Taxobox_colour&amp;quot;] = 514000,&lt;br /&gt;
[&amp;quot;Taxobox_name&amp;quot;] = 121000,&lt;br /&gt;
[&amp;quot;Taxon_info&amp;quot;] = 285000,&lt;br /&gt;
[&amp;quot;Taxon_italics&amp;quot;] = 212000,&lt;br /&gt;
[&amp;quot;Taxonbar&amp;quot;] = 434000,&lt;br /&gt;
[&amp;quot;Taxonbar/candidate&amp;quot;] = 409000,&lt;br /&gt;
[&amp;quot;Taxonomy&amp;quot;] = 395000,&lt;br /&gt;
[&amp;quot;Taxonomy/Acanthomorpha&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Taxonomy/Acanthopterygii&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Taxonomy/Acari&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Actinopteri&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;Taxonomy/Actinopterygii&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;Taxonomy/Aculeata&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Taxonomy/Adephaga&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;Taxonomy/Afrophidia&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Taxonomy/Alethinophidia&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Taxonomy/Amniota&amp;quot;] = 34000,&lt;br /&gt;
[&amp;quot;Taxonomy/Amphibia&amp;quot;] = 7900,&lt;br /&gt;
[&amp;quot;Taxonomy/Amphiesmenoptera&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;Taxonomy/Anartioptera&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Taxonomy/Angiosperms&amp;quot;] = 89000,&lt;br /&gt;
[&amp;quot;Taxonomy/Animalia&amp;quot;] = 225000,&lt;br /&gt;
[&amp;quot;Taxonomy/Anthophila&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Taxonomy/Antliophora&amp;quot;] = 9300,&lt;br /&gt;
[&amp;quot;Taxonomy/Anura&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;Taxonomy/Apocrita&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;Taxonomy/Apoditrysia&amp;quot;] = 36000,&lt;br /&gt;
[&amp;quot;Taxonomy/Apoidea&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Taxonomy/Arachnida&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Taxonomy/Arachnomorpha&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Taxonomy/Araneae&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Taxonomy/Araneoidea&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Araneomorphae&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Taxonomy/Archaeplastida&amp;quot;] = 95000,&lt;br /&gt;
[&amp;quot;Taxonomy/Archosauria&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;Taxonomy/Archosauria/skip&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Taxonomy/Arctiinae&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Taxonomy/Arctiini&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Taxonomy/Arthropoda&amp;quot;] = 113000,&lt;br /&gt;
[&amp;quot;Taxonomy/Artiodactyla&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Taxonomy/Ascomycota&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Taxonomy/Asilomorpha&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Taxonomy/Asparagales&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Taxonomy/Asteraceae&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Taxonomy/Asterales&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Taxonomy/Asterids&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;Taxonomy/Asteroideae&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Taxonomy/Australaves&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Taxonomy/Avemetatarsalia&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Taxonomy/Aves&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Taxonomy/Aves/skip&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Taxonomy/Batrachia&amp;quot;] = 7700,&lt;br /&gt;
[&amp;quot;Taxonomy/Batrachomorpha&amp;quot;] = 8500,&lt;br /&gt;
[&amp;quot;Taxonomy/Bilateria&amp;quot;] = 221000,&lt;br /&gt;
[&amp;quot;Taxonomy/Bivalvia&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Taxonomy/Bombycoidea&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Taxonomy/Boreoeutheria&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Taxonomy/Brachycera&amp;quot;] = 7900,&lt;br /&gt;
[&amp;quot;Taxonomy/Bulbophyllum&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Taxonomy/Caenogastropoda&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Taxonomy/Caenophidia&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Taxonomy/Calyptratae&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Taxonomy/Campanulids&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;Taxonomy/Carabidae&amp;quot;] = 6900,&lt;br /&gt;
[&amp;quot;Taxonomy/Caraboidea&amp;quot;] = 6900,&lt;br /&gt;
[&amp;quot;Taxonomy/Caryophyllales&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Taxonomy/Cephalopoda&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Cerambycidae&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Taxonomy/Chelicerata&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Taxonomy/Chordata&amp;quot;] = 82000,&lt;br /&gt;
[&amp;quot;Taxonomy/Chrysomelidae&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Taxonomy/Chrysomeloidea&amp;quot;] = 5500,&lt;br /&gt;
[&amp;quot;Taxonomy/Cladotheria&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Taxonomy/Cnidaria&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Taxonomy/Coelolepida&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;Taxonomy/Coleoptera&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;Taxonomy/Colubroides&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Taxonomy/Commelinids&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Taxonomy/Condylognatha&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Taxonomy/Conoidea&amp;quot;] = 6200,&lt;br /&gt;
[&amp;quot;Taxonomy/Core_eudicots&amp;quot;] = 56000,&lt;br /&gt;
[&amp;quot;Taxonomy/Crambidae&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Cucujiformia&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Taxonomy/Curculionoidea&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Taxonomy/Cyclorrhapha&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Taxonomy/Cyperaceae&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Taxonomy/Cyprinidae&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Taxonomy/Cypriniformes&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;Taxonomy/Cypriniphysae&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;Taxonomy/Cyprinoidea&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Taxonomy/Dendrobieae&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Taxonomy/Deuterostomia&amp;quot;] = 83000,&lt;br /&gt;
[&amp;quot;Taxonomy/Diaphoretickes&amp;quot;] = 97000,&lt;br /&gt;
[&amp;quot;Taxonomy/Diapsida&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Taxonomy/Dicondylia&amp;quot;] = 93000,&lt;br /&gt;
[&amp;quot;Taxonomy/Dikarya&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Taxonomy/Dinosauria&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Taxonomy/Dinosauriformes&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Taxonomy/Dinosauromorpha&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Taxonomy/Diptera&amp;quot;] = 9100,&lt;br /&gt;
[&amp;quot;Taxonomy/Ditrysia&amp;quot;] = 39000,&lt;br /&gt;
[&amp;quot;Taxonomy/Dracohors&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Taxonomy/Ecdysozoa&amp;quot;] = 114000,&lt;br /&gt;
[&amp;quot;Taxonomy/Elpistostegalia&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Taxonomy/Embryophytes&amp;quot;] = 94000,&lt;br /&gt;
[&amp;quot;Taxonomy/Embryophytes/Plantae&amp;quot;] = 94000,&lt;br /&gt;
[&amp;quot;Taxonomy/Endopterygota&amp;quot;] = 81000,&lt;br /&gt;
[&amp;quot;Taxonomy/Entelegynae&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Taxonomy/Eotetrapodiformes&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Taxonomy/Epidendroideae&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Taxonomy/Erebidae&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;Taxonomy/Eremoneura&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Taxonomy/Ericales&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Taxonomy/Euarchontoglires&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;Taxonomy/Eudicots&amp;quot;] = 59000,&lt;br /&gt;
[&amp;quot;Taxonomy/Eufalconimorphae&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Taxonomy/Eugnathostomata&amp;quot;] = 65000,&lt;br /&gt;
[&amp;quot;Taxonomy/Eukaryota&amp;quot;] = 326000,&lt;br /&gt;
[&amp;quot;Taxonomy/Eukaryota/displayed&amp;quot;] = 324000,&lt;br /&gt;
[&amp;quot;Taxonomy/Eulepidoptera&amp;quot;] = 39000,&lt;br /&gt;
[&amp;quot;Taxonomy/Eumetabola&amp;quot;] = 87000,&lt;br /&gt;
[&amp;quot;Taxonomy/Eumetazoa&amp;quot;] = 224000,&lt;br /&gt;
[&amp;quot;Taxonomy/Euphorbia&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Euphorbiaceae&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Taxonomy/Euphorbieae&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Euphorbiinae&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Euphorbioideae&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Taxonomy/Eureptilia&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Taxonomy/Euteleostomi&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Taxonomy/Eutheria&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Taxonomy/Euthyneura&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Taxonomy/Fabaceae&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Taxonomy/Fabales&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;Taxonomy/Fabids&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Taxonomy/Ferungulata&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Taxonomy/Filozoa&amp;quot;] = 225000,&lt;br /&gt;
[&amp;quot;Taxonomy/Fungi&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Taxonomy/Gastropoda&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Taxonomy/Geadephaga&amp;quot;] = 6900,&lt;br /&gt;
[&amp;quot;Taxonomy/Gekkota&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Taxonomy/Gelechioidea&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Taxonomy/Gentianales&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Taxonomy/Geometridae&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Taxonomy/Geometroidea&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;Taxonomy/Glires&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Taxonomy/Glossata&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;Taxonomy/Gnathostomata&amp;quot;] = 65000,&lt;br /&gt;
[&amp;quot;Taxonomy/Graminid_clade&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Taxonomy/Hemiptera&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Taxonomy/Heterobranchia&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Taxonomy/Heteroneura&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;Taxonomy/Heteroptera&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Taxonomy/Hexapoda&amp;quot;] = 95000,&lt;br /&gt;
[&amp;quot;Taxonomy/Holomycota&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Taxonomy/Holotheria&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Taxonomy/Holozoa&amp;quot;] = 225000,&lt;br /&gt;
[&amp;quot;Taxonomy/Hyloidea&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Taxonomy/Hymenoptera&amp;quot;] = 7700,&lt;br /&gt;
[&amp;quot;Taxonomy/Hymenopterida&amp;quot;] = 7700,&lt;br /&gt;
[&amp;quot;Taxonomy/Inopinaves&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Taxonomy/Insecta&amp;quot;] = 94000,&lt;br /&gt;
[&amp;quot;Taxonomy/Lamiaceae&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Taxonomy/Lamiales&amp;quot;] = 6200,&lt;br /&gt;
[&amp;quot;Taxonomy/Lamiids&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Taxonomy/Lamiinae&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Larentiinae&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Laurasiatheria&amp;quot;] = 6500,&lt;br /&gt;
[&amp;quot;Taxonomy/Leotiomyceta&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Lepidoptera&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;Taxonomy/Lepidosauria&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Taxonomy/Lepidosauromorpha&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Taxonomy/Life&amp;quot;] = 330000,&lt;br /&gt;
[&amp;quot;Taxonomy/Lissamphibia&amp;quot;] = 7900,&lt;br /&gt;
[&amp;quot;Taxonomy/Lophotrochozoa&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;Taxonomy/Macroheterocera&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Taxonomy/Magnoliids&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;Taxonomy/Malpighiales&amp;quot;] = 7000,&lt;br /&gt;
[&amp;quot;Taxonomy/Malvids&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Taxonomy/Mammalia&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Taxonomy/Mammaliaformes&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Taxonomy/Mammaliaformes/skip&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Taxonomy/Metapterygota&amp;quot;] = 91000,&lt;br /&gt;
[&amp;quot;Taxonomy/Mollusca&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Taxonomy/Monocots&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Taxonomy/Muroidea&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Taxonomy/Muscomorpha&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;Taxonomy/Myoglossata&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;Taxonomy/Myomorpha&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Myrtaceae&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Taxonomy/Myrtales&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Taxonomy/Myrtoideae&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Taxonomy/Neoaves&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Taxonomy/Neobatrachia&amp;quot;] = 6200,&lt;br /&gt;
[&amp;quot;Taxonomy/Neodiapsida&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Taxonomy/Neogastropoda&amp;quot;] = 8600,&lt;br /&gt;
[&amp;quot;Taxonomy/Neognathae&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Taxonomy/Neolepidoptera&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;Taxonomy/Neoptera&amp;quot;] = 91000,&lt;br /&gt;
[&amp;quot;Taxonomy/Neopterygii&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;Taxonomy/Nephrozoa&amp;quot;] = 220000,&lt;br /&gt;
[&amp;quot;Taxonomy/Noctuidae&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Noctuoidea&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Taxonomy/Obazoa&amp;quot;] = 229000,&lt;br /&gt;
[&amp;quot;Taxonomy/Obtectomera&amp;quot;] = 28000,&lt;br /&gt;
[&amp;quot;Taxonomy/Oestroidea&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Olfactores&amp;quot;] = 65000,&lt;br /&gt;
[&amp;quot;Taxonomy/Ophidia&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Taxonomy/Opisthokonta&amp;quot;] = 229000,&lt;br /&gt;
[&amp;quot;Taxonomy/Opisthothelae&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Taxonomy/Orchidaceae&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;Taxonomy/Orchidoideae&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Taxonomy/Ornithodira&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Taxonomy/Orthoptera&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Taxonomy/Orthopterida&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Taxonomy/Ostariophysi&amp;quot;] = 7400,&lt;br /&gt;
[&amp;quot;Taxonomy/Osteichthyes&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;Taxonomy/Otophysi&amp;quot;] = 7300,&lt;br /&gt;
[&amp;quot;Taxonomy/Ovalentaria&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Taxonomy/Palaeoptera&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Taxonomy/Panarthropoda&amp;quot;] = 113000,&lt;br /&gt;
[&amp;quot;Taxonomy/Pancrustacea&amp;quot;] = 97000,&lt;br /&gt;
[&amp;quot;Taxonomy/Panorpida&amp;quot;] = 50000,&lt;br /&gt;
[&amp;quot;Taxonomy/Panorthoptera&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Taxonomy/Papilionoidea&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Taxonomy/ParaHoxozoa&amp;quot;] = 223000,&lt;br /&gt;
[&amp;quot;Taxonomy/Paraneoptera&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;Taxonomy/Passeri&amp;quot;] = 7300,&lt;br /&gt;
[&amp;quot;Taxonomy/Passerida&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Taxonomy/Passeriformes&amp;quot;] = 9300,&lt;br /&gt;
[&amp;quot;Taxonomy/Passeroidea&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Percomorpha&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;Taxonomy/Pezizomycotina&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Taxonomy/Phytophaga&amp;quot;] = 7800,&lt;br /&gt;
[&amp;quot;Taxonomy/Piperaceae&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Taxonomy/Piperales&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Taxonomy/Piperoideae&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Taxonomy/Placentalia&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Taxonomy/Plantae&amp;quot;] = 94000,&lt;br /&gt;
[&amp;quot;Taxonomy/Poaceae&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Taxonomy/Poales&amp;quot;] = 8500,&lt;br /&gt;
[&amp;quot;Taxonomy/Polyneoptera&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Taxonomy/Polyorthoptera&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Taxonomy/Polyphaga&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Taxonomy/Polysporangiophytes&amp;quot;] = 93000,&lt;br /&gt;
[&amp;quot;Taxonomy/Polysporangiophytes/Plantae&amp;quot;] = 93000,&lt;br /&gt;
[&amp;quot;Taxonomy/Protostomia&amp;quot;] = 138000,&lt;br /&gt;
[&amp;quot;Taxonomy/Psittacopasserae&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Taxonomy/Pterygota&amp;quot;] = 93000,&lt;br /&gt;
[&amp;quot;Taxonomy/Pyraloidea&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Taxonomy/Ranoidea&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Taxonomy/Reptilia&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Taxonomy/Reptiliomorpha&amp;quot;] = 34000,&lt;br /&gt;
[&amp;quot;Taxonomy/Rhipidistia&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Taxonomy/Rodentia&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Taxonomy/Romeriida&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Taxonomy/Rosales&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Taxonomy/Rosids&amp;quot;] = 28000,&lt;br /&gt;
[&amp;quot;Taxonomy/Rubiaceae&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;Taxonomy/Rubioideae&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Taxonomy/Saccharomyceta&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Taxonomy/Salientia&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;Taxonomy/Salticidae&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Taxonomy/Salticinae&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Taxonomy/Sapindales&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Taxonomy/Sarcopterygii&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Taxonomy/Sauria&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Taxonomy/Saurischia&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Sauropsida&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Taxonomy/Schizophora&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Taxonomy/Scrotifera&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Taxonomy/Serpentes&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Taxonomy/Siluriformes&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Taxonomy/Spermatophyta&amp;quot;] = 91000,&lt;br /&gt;
[&amp;quot;Taxonomy/Spermatophytes/Plantae&amp;quot;] = 91000,&lt;br /&gt;
[&amp;quot;Taxonomy/Spiralia&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;Taxonomy/Squamata&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Taxonomy/Stegocephalia&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Taxonomy/Superasterids&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Taxonomy/Superrosids&amp;quot;] = 29000,&lt;br /&gt;
[&amp;quot;Taxonomy/Synapsida&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Taxonomy/Tachinidae&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Taxonomy/Tactopoda&amp;quot;] = 113000,&lt;br /&gt;
[&amp;quot;Taxonomy/Teleostei&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;Taxonomy/Teleostomi&amp;quot;] = 63000,&lt;br /&gt;
[&amp;quot;Taxonomy/Telluraves&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Taxonomy/Tetrapoda&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Taxonomy/Tetrapodomorpha&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Taxonomy/Theria&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Taxonomy/Tortricidae&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Tortricoidea&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Taxonomy/Toxicofera&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Taxonomy/Tracheophyta&amp;quot;] = 93000,&lt;br /&gt;
[&amp;quot;Taxonomy/Tracheophytes/Plantae&amp;quot;] = 93000,&lt;br /&gt;
[&amp;quot;Taxonomy/Trechnotheria&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Taxonomy/Tribosphenida&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Taxonomy/Trochida&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Taxonomy/Trochoidea&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Taxonomy/Ungulata&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Taxonomy/Unicalcarida&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;Taxonomy/Unikonta&amp;quot;] = 229000,&lt;br /&gt;
[&amp;quot;Taxonomy/Vertebrata&amp;quot;] = 65000,&lt;br /&gt;
[&amp;quot;Taxonomy/Vetigastropoda&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Taxonomy/Virus&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Taxonomy/Zatheria&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Taxonomy/Zoosporia&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Taxonomy/nobreak&amp;quot;] = 395000,&lt;br /&gt;
[&amp;quot;Taxonomy_key&amp;quot;] = 72000,&lt;br /&gt;
[&amp;quot;Taxonomy_preload&amp;quot;] = 74000,&lt;br /&gt;
[&amp;quot;Tb&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Tcmdb_title&amp;quot;] = 8700,&lt;br /&gt;
[&amp;quot;Team_appearances_list&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Team_roster_navbox&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;Technical&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;TelevisionWikiProject&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;Television_episode_redirect_handler&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Television_episode_short_description&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Template&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Template-Class&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;TemplateData_header&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Template_category&amp;quot;] = 26000,&lt;br /&gt;
[&amp;quot;Template_for_discussion/dated&amp;quot;] = 337000,&lt;br /&gt;
[&amp;quot;Template_link_with_link_off&amp;quot;] = 9300,&lt;br /&gt;
[&amp;quot;Template_link_with_linked_braces&amp;quot;] = 9900,&lt;br /&gt;
[&amp;quot;Template_link_with_parameters&amp;quot;] = 71000,&lt;br /&gt;
[&amp;quot;Template_link_with_subst&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Template_link_with_subst_and_parameters&amp;quot;] = 7000,&lt;br /&gt;
[&amp;quot;Template_other&amp;quot;] = 4540000,&lt;br /&gt;
[&amp;quot;Template_parameter_usage&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Template_parameter_value&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;Template_reference_list&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;Template_shortcut&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;TennisEventInfo&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Tennis_events&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Tennis_icon&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Tennis_icon2&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Testcases_notice&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Tfd_links&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;Tfm/dated&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;Thank_you&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;The_Africa_Destubathon_banner&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;The_edit-summary_field&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Their&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;They_have&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Thin_space&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Thinsp&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Third-party&amp;quot;] = 7900,&lt;br /&gt;
[&amp;quot;This_is_a_new_user&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;Thoroughbred_racing&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;Thursday&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Tick&amp;quot;] = 69000,&lt;br /&gt;
[&amp;quot;Time/JST_offset&amp;quot;] = 96000,&lt;br /&gt;
[&amp;quot;Time_ago&amp;quot;] = 146000,&lt;br /&gt;
[&amp;quot;Title_case&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;Title_decade&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Title_disambig_text&amp;quot;] = 208000,&lt;br /&gt;
[&amp;quot;Title_without_disambig&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Title_year&amp;quot;] = 160000,&lt;br /&gt;
[&amp;quot;Tl&amp;quot;] = 5130000,&lt;br /&gt;
[&amp;quot;Tl2&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Tlc&amp;quot;] = 772000,&lt;br /&gt;
[&amp;quot;Tld&amp;quot;] = 125000,&lt;br /&gt;
[&amp;quot;Tlf&amp;quot;] = 9300,&lt;br /&gt;
[&amp;quot;Tlg&amp;quot;] = 51000,&lt;br /&gt;
[&amp;quot;Tlp&amp;quot;] = 71000,&lt;br /&gt;
[&amp;quot;Tls&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;Tlsp&amp;quot;] = 7100,&lt;br /&gt;
[&amp;quot;Tlu&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Tlx&amp;quot;] = 2650000,&lt;br /&gt;
[&amp;quot;Tlxs&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Tmbox&amp;quot;] = 2750000,&lt;br /&gt;
[&amp;quot;Tn&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Tnull&amp;quot;] = 7000,&lt;br /&gt;
[&amp;quot;To_do&amp;quot;] = 8000,&lt;br /&gt;
[&amp;quot;Tocright&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Todo&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Tomorrow&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Tone&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;Tone-cmn&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Toolbar&amp;quot;] = 302000,&lt;br /&gt;
[&amp;quot;Tooltip&amp;quot;] = 34000,&lt;br /&gt;
[&amp;quot;Top-Class&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Top-importance&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Top_icon&amp;quot;] = 62000,&lt;br /&gt;
[&amp;quot;Totd&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Totd_nav&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Tp&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Tpr&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Tps&amp;quot;] = 9500,&lt;br /&gt;
[&amp;quot;Tpw&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Tq&amp;quot;] = 62000,&lt;br /&gt;
[&amp;quot;Track_gauge&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Track_listing&amp;quot;] = 93000,&lt;br /&gt;
[&amp;quot;Tracking_category&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Tracklist&amp;quot;] = 37000,&lt;br /&gt;
[&amp;quot;Trademark&amp;quot;] = 7700,&lt;br /&gt;
[&amp;quot;Trademarked&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;TrainsWikiProject&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;Trans&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Transclude&amp;quot;] = 26000,&lt;br /&gt;
[&amp;quot;Transclude_lead_excerpt&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Transl&amp;quot;] = 38000,&lt;br /&gt;
[&amp;quot;Translated&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Translated_page&amp;quot;] = 68000,&lt;br /&gt;
[&amp;quot;Translation&amp;quot;] = 7600,&lt;br /&gt;
[&amp;quot;Translation/Base&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Translation/Information&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Translation/Summary&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Tree_chart&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;Tree_chart/end&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;Tree_chart/start&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;Trim&amp;quot;] = 1520000,&lt;br /&gt;
[&amp;quot;Trim_brackets&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Trim_quotes&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Trunc&amp;quot;] = 6700,&lt;br /&gt;
[&amp;quot;Tuesday&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Tv.com_episode&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Tv.com_show&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;Twitter&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;TwoLegResult&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;TwoLegStart&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;TwoLeg_start&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Two_digit_year&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Module:TNT&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Module:TableTools&amp;quot;] = 4540000,&lt;br /&gt;
[&amp;quot;Module:Table_empty_cell&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Module:TaxonItalics&amp;quot;] = 514000,&lt;br /&gt;
[&amp;quot;Module:TaxonList&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Module:Taxonbar&amp;quot;] = 434000,&lt;br /&gt;
[&amp;quot;Module:Taxonbar/candidate&amp;quot;] = 409000,&lt;br /&gt;
[&amp;quot;Module:Taxonbar/conf&amp;quot;] = 434000,&lt;br /&gt;
[&amp;quot;Module:Taxonbar/exists&amp;quot;] = 409000,&lt;br /&gt;
[&amp;quot;Module:TeamBracket&amp;quot;] = 9300,&lt;br /&gt;
[&amp;quot;Module:TeamBracket-Tennis&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Module:Team_appearances_list&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Module:Team_appearances_list/data&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Module:Team_bracket_tracking&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Module:Team_roster_navbox&amp;quot;] = 31000,&lt;br /&gt;
[&amp;quot;Module:Television_episode_redirect_handler&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Module:Television_episode_short_description&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Module:Television_infoboxes_disambiguation_check&amp;quot;] = 56000,&lt;br /&gt;
[&amp;quot;Module:TemplatePar&amp;quot;] = 48000,&lt;br /&gt;
[&amp;quot;Module:Template_parameter_value&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;Module:Template_wrapper&amp;quot;] = 175000,&lt;br /&gt;
[&amp;quot;Module:Tennis_events_nav&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Module:Tfd_links&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;Module:Time_ago&amp;quot;] = 146000,&lt;br /&gt;
[&amp;quot;Module:Tlg&amp;quot;] = 51000,&lt;br /&gt;
[&amp;quot;Module:Toolbar&amp;quot;] = 1140000,&lt;br /&gt;
[&amp;quot;Module:Track_gauge&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Module:Track_gauge/data&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Module:Track_listing&amp;quot;] = 93000,&lt;br /&gt;
[&amp;quot;Module:Transclusion_count&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Module:Tree_chart&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;Module:Tree_chart/data&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;Module:Trim_quotes&amp;quot;] = 34000,&lt;br /&gt;
[&amp;quot;Module:Type_in_location&amp;quot;] = 89000,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Transclusion_count/data/S&amp;diff=2068</id>
		<title>پودمان:Transclusion count/data/S</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Transclusion_count/data/S&amp;diff=2068"/>
		<updated>2026-06-25T09:35:14Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {}&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Transclusion_count/data/R&amp;diff=2065</id>
		<title>پودمان:Transclusion count/data/R</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Transclusion_count/data/R&amp;diff=2065"/>
		<updated>2026-06-25T09:35:14Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
[&amp;quot;R&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;R/ref&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;RA&amp;quot;] = 7800,&lt;br /&gt;
[&amp;quot;REVISIONUSER2&amp;quot;] = 61000,&lt;br /&gt;
[&amp;quot;RMS&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;RMnac&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;ROM&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;ROU&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;RPGproject&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;RSA&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;RSS-Atom_feed_notice&amp;quot;] = 241000,&lt;br /&gt;
[&amp;quot;RUS&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;R_ambig&amp;quot;] = 7000,&lt;br /&gt;
[&amp;quot;R_avoided_double_redirect&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;R_for_convenience&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;R_from_ATC_code&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;R_from_ATCvet_code&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;R_from_DOI_prefix&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;R_from_IMO_number&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;R_from_ISO_4&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;R_from_ISO_4_abbreviation&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;R_from_ISO_639&amp;quot;] = 8700,&lt;br /&gt;
[&amp;quot;R_from_ISO_639_code&amp;quot;] = 8700,&lt;br /&gt;
[&amp;quot;R_from_NLM&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;R_from_NLM_abbreviation&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;R_from_UN/LOCODE&amp;quot;] = 7100,&lt;br /&gt;
[&amp;quot;R_from_US_postal_abbreviation&amp;quot;] = 42000,&lt;br /&gt;
[&amp;quot;R_from_Unicode&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;R_from_Unicode_character&amp;quot;] = 28000,&lt;br /&gt;
[&amp;quot;R_from_abbreviation&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;R_from_adjective&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;R_from_airport_code&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;R_from_album&amp;quot;] = 6400,&lt;br /&gt;
[&amp;quot;R_from_alternate_name&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;R_from_alternate_spelling&amp;quot;] = 6700,&lt;br /&gt;
[&amp;quot;R_from_alternative_capitalization&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;R_from_alternative_disambiguation&amp;quot;] = 5500,&lt;br /&gt;
[&amp;quot;R_from_alternative_language&amp;quot;] = 56000,&lt;br /&gt;
[&amp;quot;R_from_alternative_name&amp;quot;] = 132000,&lt;br /&gt;
[&amp;quot;R_from_alternative_punctuation&amp;quot;] = 26000,&lt;br /&gt;
[&amp;quot;R_from_alternative_scientific_name&amp;quot;] = 94000,&lt;br /&gt;
[&amp;quot;R_from_alternative_spelling&amp;quot;] = 92000,&lt;br /&gt;
[&amp;quot;R_from_alternative_title&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;R_from_ambiguous&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;R_from_ambiguous_page&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;R_from_ambiguous_sort_name&amp;quot;] = 31000,&lt;br /&gt;
[&amp;quot;R_from_ambiguous_term&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;R_from_birth_name&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;R_from_case_citation&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;R_from_diacritic&amp;quot;] = 8500,&lt;br /&gt;
[&amp;quot;R_from_domain_name&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;R_from_drug_trade_name&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;R_from_fictional_character&amp;quot;] = 38000,&lt;br /&gt;
[&amp;quot;R_from_fictional_element&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;R_from_former_name&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;R_from_full_name&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;R_from_gene_symbol&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;R_from_historic_name&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;R_from_incomplete_disambiguation&amp;quot;] = 36000,&lt;br /&gt;
[&amp;quot;R_from_incorrect_disambiguation&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;R_from_incorrect_name&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;R_from_initialism&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;R_from_list_topic&amp;quot;] = 5600,&lt;br /&gt;
[&amp;quot;R_from_long_name&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;R_from_member&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;R_from_merge&amp;quot;] = 50000,&lt;br /&gt;
[&amp;quot;R_from_miscapitalisation&amp;quot;] = 8100,&lt;br /&gt;
[&amp;quot;R_from_misspelling&amp;quot;] = 39000,&lt;br /&gt;
[&amp;quot;R_from_modification&amp;quot;] = 472000,&lt;br /&gt;
[&amp;quot;R_from_molecular_formula&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;R_from_monotypic_taxon&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;R_from_more_specific_name&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;R_from_move&amp;quot;] = 1640000,&lt;br /&gt;
[&amp;quot;R_from_move/except&amp;quot;] = 1640000,&lt;br /&gt;
[&amp;quot;R_from_name_with_title&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;R_from_other_capitalisation&amp;quot;] = 403000,&lt;br /&gt;
[&amp;quot;R_from_other_capitalization&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;R_from_other_disambiguation&amp;quot;] = 9400,&lt;br /&gt;
[&amp;quot;R_from_other_name&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;R_from_plural&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;R_from_related_topic&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;R_from_related_word&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;R_from_remote_page&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;R_from_remote_talk_page&amp;quot;] = 6900,&lt;br /&gt;
[&amp;quot;R_from_school&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;R_from_scientific_name&amp;quot;] = 28000,&lt;br /&gt;
[&amp;quot;R_from_short_name&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;R_from_shortcut&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;R_from_song&amp;quot;] = 31000,&lt;br /&gt;
[&amp;quot;R_from_sort_name&amp;quot;] = 104000,&lt;br /&gt;
[&amp;quot;R_from_subpage&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;R_from_subtopic&amp;quot;] = 39000,&lt;br /&gt;
[&amp;quot;R_from_surname&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;R_from_synonym&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;R_from_television_episode&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;R_from_template_shortcut&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;R_from_title_with_diacritics&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;R_from_title_without_diacritics&amp;quot;] = 404000,&lt;br /&gt;
[&amp;quot;R_from_trade_name&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;R_from_typo&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;R_from_unnecessary_disambiguation&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;R_from_year&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;R_printworthy&amp;quot;] = 31000,&lt;br /&gt;
[&amp;quot;R_shell&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;R_to_Swiss_municipality_(,_Switzerland)&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;R_to_Swiss_municipality_(canton)&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;R_to_Swiss_municipality_2L&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;R_to_TV_episode_list_entry&amp;quot;] = 8600,&lt;br /&gt;
[&amp;quot;R_to_anchor&amp;quot;] = 48000,&lt;br /&gt;
[&amp;quot;R_to_century&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;R_to_diacritic&amp;quot;] = 409000,&lt;br /&gt;
[&amp;quot;R_to_diacritics&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;R_to_disambiguation&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;R_to_disambiguation_page&amp;quot;] = 221000,&lt;br /&gt;
[&amp;quot;R_to_list&amp;quot;] = 34000,&lt;br /&gt;
[&amp;quot;R_to_list_entry&amp;quot;] = 51000,&lt;br /&gt;
[&amp;quot;R_to_monotypic_taxon&amp;quot;] = 9800,&lt;br /&gt;
[&amp;quot;R_to_project_namespace&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;R_to_redirect_template&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;R_to_related_topic&amp;quot;] = 37000,&lt;br /&gt;
[&amp;quot;R_to_scientific_name&amp;quot;] = 83000,&lt;br /&gt;
[&amp;quot;R_to_section&amp;quot;] = 225000,&lt;br /&gt;
[&amp;quot;R_to_short_name&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;R_to_subpage&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;R_unprintworthy&amp;quot;] = 63000,&lt;br /&gt;
[&amp;quot;R_with_history&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;R_with_possibilities&amp;quot;] = 64000,&lt;br /&gt;
[&amp;quot;RadioStationsProject&amp;quot;] = 9200,&lt;br /&gt;
[&amp;quot;Radio_formats&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Rail-interchange&amp;quot;] = 29000,&lt;br /&gt;
[&amp;quot;RailGauge&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Rail_color&amp;quot;] = 7400,&lt;br /&gt;
[&amp;quot;Rail_color_box&amp;quot;] = 9000,&lt;br /&gt;
[&amp;quot;Rail_line&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Rail_navbox_titlestyle&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Rail_pass_box&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Rail_start&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Raise&amp;quot;] = 7000,&lt;br /&gt;
[&amp;quot;Rand&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;Random_number&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Random_page_in_category&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Random_subpage&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;Rating&amp;quot;] = 94000,&lt;br /&gt;
[&amp;quot;Rating-Christgau&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Rayment&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Rayment-bt&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Rayment-hc&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Rcat_shell&amp;quot;] = 86000,&lt;br /&gt;
[&amp;quot;Rcb&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Rcr&amp;quot;] = 6200,&lt;br /&gt;
[&amp;quot;Re&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Recent_AfDs&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Recent_AfDs/core&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Red&amp;quot;] = 275000,&lt;br /&gt;
[&amp;quot;Redir_from_US_postal_ab&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;Redirect&amp;quot;] = 42000,&lt;br /&gt;
[&amp;quot;Redirect-Class&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Redirect-distinguish&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Redirect_category&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Redirect_category_shell&amp;quot;] = 1180000,&lt;br /&gt;
[&amp;quot;Redirect_from_modification&amp;quot;] = 115000,&lt;br /&gt;
[&amp;quot;Redirect_from_move&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Redirect_shell&amp;quot;] = 248000,&lt;br /&gt;
[&amp;quot;Redirect_template&amp;quot;] = 4730000,&lt;br /&gt;
[&amp;quot;Redirect_to_section&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Redr&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;Ref&amp;quot;] = 26000,&lt;br /&gt;
[&amp;quot;Ref_begin&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Ref_end&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Ref_improve&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Ref_label&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Refbegin&amp;quot;] = 166000,&lt;br /&gt;
[&amp;quot;Refbegin/styles.css&amp;quot;] = 166000,&lt;br /&gt;
[&amp;quot;Refend&amp;quot;] = 164000,&lt;br /&gt;
[&amp;quot;Refideas&amp;quot;] = 8300,&lt;br /&gt;
[&amp;quot;Refimprove&amp;quot;] = 146000,&lt;br /&gt;
[&amp;quot;Refimprove_section&amp;quot;] = 5300,&lt;br /&gt;
[&amp;quot;Reflist&amp;quot;] = 5190000,&lt;br /&gt;
[&amp;quot;Reflist-talk&amp;quot;] = 59000,&lt;br /&gt;
[&amp;quot;Reflist_talk&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Refn&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Region_history_sidebar_title&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;Regional_notice_board_box&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Registered_Historic_Places&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;ReleaseVersionParameters&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Reliable_sources_for_medical_articles&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Remove_file_prefix&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Remove_first_word&amp;quot;] = 109000,&lt;br /&gt;
[&amp;quot;Repeat_vandal&amp;quot;] = 6200,&lt;br /&gt;
[&amp;quot;Repeated_IP_abuse&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Repeatvandal&amp;quot;] = 7000,&lt;br /&gt;
[&amp;quot;Replace&amp;quot;] = 1020000,&lt;br /&gt;
[&amp;quot;Reply&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Reply_to&amp;quot;] = 206000,&lt;br /&gt;
[&amp;quot;Replyto&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Republican_Party_(US)/meta/color&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Republican_Party_(US)/meta/shading&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;Republican_Party_(US)/meta/shortname&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Republican_Party_(United_States)/meta/color&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Republican_Party_(United_States)/meta/shortname&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Reqmapin&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Reqphoto&amp;quot;] = 80000,&lt;br /&gt;
[&amp;quot;Request_edit&amp;quot;] = 5300,&lt;br /&gt;
[&amp;quot;Request_edit/answered&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Request_edit/declined&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Resize&amp;quot;] = 206000,&lt;br /&gt;
[&amp;quot;Resolved&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Respell&amp;quot;] = 9000,&lt;br /&gt;
[&amp;quot;Retired&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Retrieved&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Reverse_date&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;Reviewer_topicon&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;RfA_watchlist_notice&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;Rfd_log_header&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;Ribbon_devices&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Ribbon_devices/alt&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Ribbon_devices/device&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Ribbon_devices/device_layout&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Right&amp;quot;] = 6700,&lt;br /&gt;
[&amp;quot;Rint&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;River&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Rlp&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;Rlp/Positions&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;Rmri&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Rnd&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Rollback_topicon&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Roman&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Romania_metadata_Wikidata&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;RomanianSoccer&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Rotten-tomatoes&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Rotten_Tomatoes&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Round&amp;quot;] = 284000,&lt;br /&gt;
[&amp;quot;Round4-with_third&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Round_corners&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;RouteBox&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;Routemap&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Routemap/styles.css&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;RoutemapRouteIcon&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Rp&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;Rshell&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Rtl-lang&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Rto&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Ru&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Ru-census&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Ru-census2002&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Ru-census2010&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Ru-pop-ref&amp;quot;] = 5600,&lt;br /&gt;
[&amp;quot;Rubiaceae-stub&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Rugby_league_squad2_coach&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Rugbybox&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;RussiaAdmMunRef&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;Russia_Time_Zone_Wikidata&amp;quot;] = 5500,&lt;br /&gt;
[&amp;quot;Russia_Time_Zone_Wikidata/getQID&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;Rut&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Rwd&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Rws&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Module:R_avoided_double_redirect&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Module:Rail-interchange_multi&amp;quot;] = 8700,&lt;br /&gt;
[&amp;quot;Module:Random&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;Module:Redirect&amp;quot;] = 5380000,&lt;br /&gt;
[&amp;quot;Module:Redirect-distinguish&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Module:Redirect_hatnote&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Module:Redirect_template&amp;quot;] = 4730000,&lt;br /&gt;
[&amp;quot;Module:Redirect_template_handler&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Module:Reply_to&amp;quot;] = 206000,&lt;br /&gt;
[&amp;quot;Module:ResolveEntityId&amp;quot;] = 1820000,&lt;br /&gt;
[&amp;quot;Module:Respell&amp;quot;] = 9000,&lt;br /&gt;
[&amp;quot;Module:Road_data&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Module:Road_data/RJL_types&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Module:Road_data/browse&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Module:Road_data/countrymask&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;Module:Road_data/parser&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;Module:Road_data/parser/hooks&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Module:Road_data/parser/sandbox&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Module:Road_data/strings/JPN&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Module:Road_data/strings/USA&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Module:Road_data/strings/USA/regional/GRR&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Module:Road_data/strings/USA/regional/NER&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Module:Road_data/strings/USA/regional/Tour&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Module:Road_data/util&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Module:Roman&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;Module:RoundN&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;Module:Routemap&amp;quot;] = 18000,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Transclusion_count/data/N&amp;diff=2062</id>
		<title>پودمان:Transclusion count/data/N</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Transclusion_count/data/N&amp;diff=2062"/>
		<updated>2026-06-25T09:35:13Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
[&amp;quot;N&amp;quot;] = 6200,&lt;br /&gt;
[&amp;quot;N/A&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;N/a&amp;quot;] = 37000,&lt;br /&gt;
[&amp;quot;NA-Class&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;NASTRO_comment&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;NBA_Draft_template_list&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;NBA_Year&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;NBA_color&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;NBA_color_cell&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;NBA_color_cell2&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;NBA_player_statistics_legend&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;NBA_player_statistics_start&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;NBbox&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;NBbox/1&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;NCAA_color_cell&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;NCAA_secondary_color_cell&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;NED&amp;quot;] = 8600,&lt;br /&gt;
[&amp;quot;NFLAltPrimaryColor&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;NFLAltPrimaryStyle&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;NFLAltSecondaryColor&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;NFLPrimaryColor&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;NFLPrimaryStyle&amp;quot;] = 26000,&lt;br /&gt;
[&amp;quot;NFLSecondaryColor&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;NFL_Roster_navbox_template_list&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;NFL_Year&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;NFL_predraft&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;NFL_predraft/check&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;NFL_predraft/ftin&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;NFT&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;NFT_player&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;NGA&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;NHLE&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;NHLS_url&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;NLD&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;NLM_content&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;NOINDEX&amp;quot;] = 367000,&lt;br /&gt;
[&amp;quot;NOR&amp;quot;] = 8100,&lt;br /&gt;
[&amp;quot;NRDB_species&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;NRHP-PA&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;NRHPGoogleMapFootnote&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;NRHP_Focus&amp;quot;] = 73000,&lt;br /&gt;
[&amp;quot;NRHP_color&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;NRHP_date_for_lists&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;NRHP_date_for_lists/dates&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;NRHP_header&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;NRHP_navigation_box&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;NRHP_row&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;NRHP_style&amp;quot;] = 68000,&lt;br /&gt;
[&amp;quot;NRHP_url&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;NRHP_url/core&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;NRISref&amp;quot;] = 71000,&lt;br /&gt;
[&amp;quot;NSWcity&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;NSWcity/core&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;NUMBEROFSECTIONS&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;NYCS_br&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;NYCS_time_2&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;NZL&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;NZ_electorate_link&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Namespace_detect&amp;quot;] = 304000,&lt;br /&gt;
[&amp;quot;Namespace_detect_showall&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Narrow_no-break_space&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Nastaliq&amp;quot;] = 8500,&lt;br /&gt;
[&amp;quot;Nat_fs_end&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;National_Heritage_List_for_England&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;National_Rail_style&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;National_Register_of_Historic_Places&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;National_Register_of_Historic_Places_in_Massachusetts&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;National_Register_of_Historic_Places_in_New_York&amp;quot;] = 5500,&lt;br /&gt;
[&amp;quot;National_Register_of_Historic_Places_in_North_Carolina&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;National_Register_of_Historic_Places_in_Pennsylvania&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;National_Register_of_Historic_Places_in_Virginia&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;National_basketball_squad&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;National_field_hockey_squad&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;National_football_squad_end&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;National_football_squad_start/styles.css&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;National_squad&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;National_squad_no_numbers&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Native_name&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Navbar&amp;quot;] = 9150000,&lt;br /&gt;
[&amp;quot;Navbar-collapsible&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Navbar-header&amp;quot;] = 58000,&lt;br /&gt;
[&amp;quot;Navbox&amp;quot;] = 2790000,&lt;br /&gt;
[&amp;quot;Navbox_Canada&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Navbox_Canada/styles.css&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Navbox_GR_munic&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Navbox_Musical_artist&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Navbox_decade_list&amp;quot;] = 9800,&lt;br /&gt;
[&amp;quot;Navbox_musical_artist&amp;quot;] = 205000,&lt;br /&gt;
[&amp;quot;Navbox_musical_artist/color&amp;quot;] = 205000,&lt;br /&gt;
[&amp;quot;Navbox_rugby_league_squad&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Navbox_season_by_team&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Navbox_with_collapsible_groups&amp;quot;] = 118000,&lt;br /&gt;
[&amp;quot;Navbox_with_collapsible_sections&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Navbox_with_columns&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Navboxes&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Navboxes_colour&amp;quot;] = 9300,&lt;br /&gt;
[&amp;quot;Navseasoncats&amp;quot;] = 378000,&lt;br /&gt;
[&amp;quot;Navseasoncats_with_centuries_below_decade&amp;quot;] = 31000,&lt;br /&gt;
[&amp;quot;Navseasoncats_with_decades_below_year&amp;quot;] = 219000,&lt;br /&gt;
[&amp;quot;Navsource&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Navy&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Navy/core&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Nay&amp;quot;] = 8600,&lt;br /&gt;
[&amp;quot;Nbay&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;Nbsp&amp;quot;] = 416000,&lt;br /&gt;
[&amp;quot;Nbsp_to_space&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Ndash&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Nee&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;NeilBrownPlayers&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;New_York_Stock_Exchange&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;New_user_bar&amp;quot;] = 57000,&lt;br /&gt;
[&amp;quot;Newbot&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Next_period&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Nihongo&amp;quot;] = 94000,&lt;br /&gt;
[&amp;quot;Nihongo2&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Nnbsp&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;No&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;No.&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;No2&amp;quot;] = 7400,&lt;br /&gt;
[&amp;quot;NoSpam&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;NoSpamEmail&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;No_footnotes&amp;quot;] = 54000,&lt;br /&gt;
[&amp;quot;No_ping&amp;quot;] = 364000,&lt;br /&gt;
[&amp;quot;No_plot&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;No_redirect&amp;quot;] = 452000,&lt;br /&gt;
[&amp;quot;No_spam&amp;quot;] = 225000,&lt;br /&gt;
[&amp;quot;No_wrap&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Nobold&amp;quot;] = 148000,&lt;br /&gt;
[&amp;quot;Nobold/styles.css&amp;quot;] = 148000,&lt;br /&gt;
[&amp;quot;Nobr&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Nobreak&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Nochange&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Nofootnotes&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Noindex&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;Noitalic&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Noitalic/styles.css&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Nom&amp;quot;] = 28000,&lt;br /&gt;
[&amp;quot;Nominated&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;Non-diffusing_subcategory&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Non-free_2D_art&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Non-free_album_cover&amp;quot;] = 186000,&lt;br /&gt;
[&amp;quot;Non-free_audio_sample&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;Non-free_biog-pic&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Non-free_book_cover&amp;quot;] = 46000,&lt;br /&gt;
[&amp;quot;Non-free_comic&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Non-free_fair_use&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Non-free_fair_use_in&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Non-free_film_screenshot&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;Non-free_game_cover&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Non-free_game_screenshot&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Non-free_historic_image&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Non-free_image_data&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;Non-free_image_rationale&amp;quot;] = 9500,&lt;br /&gt;
[&amp;quot;Non-free_in_US&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Non-free_logo&amp;quot;] = 153000,&lt;br /&gt;
[&amp;quot;Non-free_magazine_cover&amp;quot;] = 7100,&lt;br /&gt;
[&amp;quot;Non-free_media&amp;quot;] = 661000,&lt;br /&gt;
[&amp;quot;Non-free_media_data&amp;quot;] = 9600,&lt;br /&gt;
[&amp;quot;Non-free_media_rationale&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Non-free_movie_poster&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Non-free_poster&amp;quot;] = 90000,&lt;br /&gt;
[&amp;quot;Non-free_promotional&amp;quot;] = 9400,&lt;br /&gt;
[&amp;quot;Non-free_reduce&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Non-free_school_logo&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Non-free_seal&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Non-free_symbol&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;Non-free_television_screenshot&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Non-free_title-card&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Non-free_use_rationale&amp;quot;] = 436000,&lt;br /&gt;
[&amp;quot;Non-free_use_rationale_2&amp;quot;] = 164000,&lt;br /&gt;
[&amp;quot;Non-free_use_rationale_album_cover&amp;quot;] = 124000,&lt;br /&gt;
[&amp;quot;Non-free_use_rationale_book_cover&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Non-free_use_rationale_logo&amp;quot;] = 96000,&lt;br /&gt;
[&amp;quot;Non-free_use_rationale_poster&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Non-free_use_rationale_video_cover&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Non-free_use_rationale_video_game_cover&amp;quot;] = 7400,&lt;br /&gt;
[&amp;quot;Non-free_video_cover&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Non-free_video_game_cover&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Non-free_video_game_cover/platform&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Non-free_video_game_screenshot&amp;quot;] = 9000,&lt;br /&gt;
[&amp;quot;Non-free_video_game_screenshot/platform&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;Non-free_with_permission&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Noping&amp;quot;] = 297000,&lt;br /&gt;
[&amp;quot;Noprint&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Noredirect&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;Normalwraplink&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;NorthAmNative&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;North_America_topic&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Northern_Ireland_tasks&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Nospam&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Not-PD-US-expired-min-year&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Not_a_ballot&amp;quot;] = 7000,&lt;br /&gt;
[&amp;quot;Not_a_forum&amp;quot;] = 6400,&lt;br /&gt;
[&amp;quot;Not_a_typo&amp;quot;] = 6200,&lt;br /&gt;
[&amp;quot;Not_around&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Not_done&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Notability&amp;quot;] = 63000,&lt;br /&gt;
[&amp;quot;Notdone&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Note&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;Note_label&amp;quot;] = 9000,&lt;br /&gt;
[&amp;quot;Notelist&amp;quot;] = 98000,&lt;br /&gt;
[&amp;quot;Notelist-lr&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Notelist-ua&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Notes&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Notice&amp;quot;] = 105000,&lt;br /&gt;
[&amp;quot;NovelsWikiProject&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;Nowiki_=&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Nowrap&amp;quot;] = 1130000,&lt;br /&gt;
[&amp;quot;Nq&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Nrut&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Ns0&amp;quot;] = 259000,&lt;br /&gt;
[&amp;quot;Ns_has_subpages&amp;quot;] = 1670000,&lt;br /&gt;
[&amp;quot;Nts&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Ntsh&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Number_of_defined_parameters&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Number_table_sorting&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;Number_table_sorting_hidden&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Number_to_word&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Numismaticnotice&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Nutshell&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Nw=&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Module:NUMBEROFSECTIONS&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Module:Namespace_detect&amp;quot;] = 11700000,&lt;br /&gt;
[&amp;quot;Module:Namespace_detect/config&amp;quot;] = 13600000,&lt;br /&gt;
[&amp;quot;Module:Namespace_detect/data&amp;quot;] = 13600000,&lt;br /&gt;
[&amp;quot;Module:National_squad&amp;quot;] = 36000,&lt;br /&gt;
[&amp;quot;Module:Navbar&amp;quot;] = 14900000,&lt;br /&gt;
[&amp;quot;Module:Navbox&amp;quot;] = 4160000,&lt;br /&gt;
[&amp;quot;Module:Navbox_Canada&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Module:Navbox_with_collapsible_groups&amp;quot;] = 120000,&lt;br /&gt;
[&amp;quot;Module:Navboxes&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Module:Navseasoncats&amp;quot;] = 384000,&lt;br /&gt;
[&amp;quot;Module:Navseasoncats/navyear&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;Module:Navseasoncats_with_centuries_below_decade&amp;quot;] = 31000,&lt;br /&gt;
[&amp;quot;Module:Navseasoncats_with_year_navigation&amp;quot;] = 219000,&lt;br /&gt;
[&amp;quot;Module:Nihongo&amp;quot;] = 95000,&lt;br /&gt;
[&amp;quot;Module:No_globals&amp;quot;] = 15300000,&lt;br /&gt;
[&amp;quot;Module:No_ping&amp;quot;] = 364000,&lt;br /&gt;
[&amp;quot;Module:Noinclude&amp;quot;] = 89000,&lt;br /&gt;
[&amp;quot;Module:Ns_has_subpages&amp;quot;] = 1670000,&lt;br /&gt;
[&amp;quot;Module:Number_table_sorting&amp;quot;] = 26000,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Transclusion_count/data/I&amp;diff=2059</id>
		<title>پودمان:Transclusion count/data/I</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Transclusion_count/data/I&amp;diff=2059"/>
		<updated>2026-06-25T09:35:13Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
[&amp;quot;IAAF_name&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;IAST&amp;quot;] = 5600,&lt;br /&gt;
[&amp;quot;IBDB_name&amp;quot;] = 8500,&lt;br /&gt;
[&amp;quot;ICD10&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;ICD9&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;ICS&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;IDN&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;IMDB_name&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;IMDB_title&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;IMDb_episode&amp;quot;] = 8100,&lt;br /&gt;
[&amp;quot;IMDb_name&amp;quot;] = 138000,&lt;br /&gt;
[&amp;quot;IMDb_title&amp;quot;] = 171000,&lt;br /&gt;
[&amp;quot;IMO_Number&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;IMSLP&amp;quot;] = 7100,&lt;br /&gt;
[&amp;quot;IMSLP2&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;IND&amp;quot;] = 7000,&lt;br /&gt;
[&amp;quot;INR&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;INRConvert&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;INRConvert/CurrentRate&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;INRConvert/USD&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;INRConvert/out&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;IOC_profile&amp;quot;] = 8000,&lt;br /&gt;
[&amp;quot;IP&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;IPA&amp;quot;] = 92000,&lt;br /&gt;
[&amp;quot;IPA-all&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;IPA-de&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;IPA-es&amp;quot;] = 7300,&lt;br /&gt;
[&amp;quot;IPA-fr&amp;quot;] = 9500,&lt;br /&gt;
[&amp;quot;IPA-it&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;IPA-nl&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;IPA-pl&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;IPA-pt&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;IPA-ru&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;IPA-sh&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;IPA-sl&amp;quot;] = 6700,&lt;br /&gt;
[&amp;quot;IPA-th&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;IPA_audio_link&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;IPAc-cmn&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;IPAc-en&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;IPAc-pl&amp;quot;] = 53000,&lt;br /&gt;
[&amp;quot;IPSummary&amp;quot;] = 72000,&lt;br /&gt;
[&amp;quot;IP_summary&amp;quot;] = 72000,&lt;br /&gt;
[&amp;quot;IPsock&amp;quot;] = 31000,&lt;br /&gt;
[&amp;quot;IPtalk&amp;quot;] = 26000,&lt;br /&gt;
[&amp;quot;IPuser&amp;quot;] = 6500,&lt;br /&gt;
[&amp;quot;IPvandal&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;IRC&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;IRL&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;IRN&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;ISBN&amp;quot;] = 445000,&lt;br /&gt;
[&amp;quot;ISBNT&amp;quot;] = 33000,&lt;br /&gt;
[&amp;quot;ISO_15924/script-example-character&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;ISO_15924/wp-name&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;ISO_15924/wp-name/label&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;ISO_15924_code&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;ISO_3166_code&amp;quot;] = 133000,&lt;br /&gt;
[&amp;quot;ISO_3166_name&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;ISO_639_name&amp;quot;] = 5300,&lt;br /&gt;
[&amp;quot;ISP&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;ISP_test&amp;quot;] = 5600,&lt;br /&gt;
[&amp;quot;ISR&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;ISSN&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;ISSN_link&amp;quot;] = 28000,&lt;br /&gt;
[&amp;quot;ISTAT&amp;quot;] = 8100,&lt;br /&gt;
[&amp;quot;ISU_figure_skater&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;ITA&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;ITF&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;ITF_profile&amp;quot;] = 6900,&lt;br /&gt;
[&amp;quot;ITIS&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;ITN_talk&amp;quot;] = 6900,&lt;br /&gt;
[&amp;quot;ITN_talk/date&amp;quot;] = 6900,&lt;br /&gt;
[&amp;quot;IUCN_banner&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;I_sup&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Iaaf_name&amp;quot;] = 8300,&lt;br /&gt;
[&amp;quot;Ice_hockey&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Ice_hockey_stats&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Icehockeystats&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Icon&amp;quot;] = 490000,&lt;br /&gt;
[&amp;quot;If&amp;quot;] = 121000,&lt;br /&gt;
[&amp;quot;If_between&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;If_both&amp;quot;] = 46000,&lt;br /&gt;
[&amp;quot;If_either&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;If_empty&amp;quot;] = 2600000,&lt;br /&gt;
[&amp;quot;If_first_display_both&amp;quot;] = 56000,&lt;br /&gt;
[&amp;quot;If_in_page&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;If_last_display_both&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;If_preview&amp;quot;] = 54000,&lt;br /&gt;
[&amp;quot;If_then_show&amp;quot;] = 210000,&lt;br /&gt;
[&amp;quot;Ifempty&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Ifexist_not_redirect&amp;quot;] = 418000,&lt;br /&gt;
[&amp;quot;Ifnotempty&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Ifnumber&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;Ifsubst&amp;quot;] = 67000,&lt;br /&gt;
[&amp;quot;Ih&amp;quot;] = 7000,&lt;br /&gt;
[&amp;quot;Ill&amp;quot;] = 50000,&lt;br /&gt;
[&amp;quot;Illm&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Image_frame&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Image_label&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Image_label_begin&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Image_label_end&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Image_label_small&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Image_needed&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Image_other&amp;quot;] = 331000,&lt;br /&gt;
[&amp;quot;Image_requested&amp;quot;] = 171000,&lt;br /&gt;
[&amp;quot;Image_requested/Category_helper&amp;quot;] = 167000,&lt;br /&gt;
[&amp;quot;Imbox&amp;quot;] = 900000,&lt;br /&gt;
[&amp;quot;Imdb_episode&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Imdb_name&amp;quot;] = 7300,&lt;br /&gt;
[&amp;quot;Imdb_title&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Importance&amp;quot;] = 5120000,&lt;br /&gt;
[&amp;quot;Importance/colour&amp;quot;] = 5130000,&lt;br /&gt;
[&amp;quot;Importance_mask&amp;quot;] = 7860000,&lt;br /&gt;
[&amp;quot;Improve_categories&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;In_class&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;In_lang&amp;quot;] = 329000,&lt;br /&gt;
[&amp;quot;In_string&amp;quot;] = 46000,&lt;br /&gt;
[&amp;quot;In_title&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Inactive_WikiProject_banner&amp;quot;] = 148000,&lt;br /&gt;
[&amp;quot;Inactive_userpage_blanked&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Include-USGov&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;Incomplete_list&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Increase&amp;quot;] = 34000,&lt;br /&gt;
[&amp;quot;Incumbent_pope&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Independent/meta/color&amp;quot;] = 5600,&lt;br /&gt;
[&amp;quot;Independent_(US)/meta/color&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Independent_(politician)/meta/color&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Independent_(politician)/meta/shortname&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Independent_politician/meta/color&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Independent_politician/meta/shortname&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;IndexFungorum&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Indian_English&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Indian_National_Congress/meta/color&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Indian_National_Congress/meta/shortname&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Indian_Railways_color&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Indian_Railways_style&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Indian_Rupee&amp;quot;] = 8500,&lt;br /&gt;
[&amp;quot;Indian_railway_code&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Inflation&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Inflation-fn&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;Inflation-year&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Inflation/IN/startyear&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;Inflation/UK&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Inflation/UK/dataset&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Inflation/UK/startyear&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Inflation/US&amp;quot;] = 8100,&lt;br /&gt;
[&amp;quot;Inflation/US/dataset&amp;quot;] = 8100,&lt;br /&gt;
[&amp;quot;Inflation/US/startyear&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Inflation/fn&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Inflation/year&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Info&amp;quot;] = 7700,&lt;br /&gt;
[&amp;quot;Infobox&amp;quot;] = 3460000,&lt;br /&gt;
[&amp;quot;Infobox3cols&amp;quot;] = 260000,&lt;br /&gt;
[&amp;quot;Infobox_AFL_biography&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Infobox_Aircraft_Begin&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;Infobox_Aircraft_Type&amp;quot;] = 8000,&lt;br /&gt;
[&amp;quot;Infobox_Athletics_Championships&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Infobox_Australian_place&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Infobox_CFL_biography&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;Infobox_CFL_biography/position&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;Infobox_Canada_electoral_district&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Infobox_Chinese&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Infobox_Chinese/Footer&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;Infobox_Chinese/Header&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;Infobox_Chinese/Korean&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Infobox_Christian_leader&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Infobox_Company&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Infobox_Congressman&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Infobox_Election&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Infobox_French_commune&amp;quot;] = 37000,&lt;br /&gt;
[&amp;quot;Infobox_GAA_player&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Infobox_Gaelic_Athletic_Association_player&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;Infobox_German_location&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Infobox_German_place&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Infobox_Greece_place&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Infobox_Greek_Dimos&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Infobox_Indian_politician&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Infobox_Italian_comune&amp;quot;] = 8100,&lt;br /&gt;
[&amp;quot;Infobox_Korean_name&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Infobox_Korean_name/categories&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Infobox_MLB_yearly&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Infobox_NCAA_team_season&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Infobox_NFL_biography&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;Infobox_NFL_player&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Infobox_NFL_season&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Infobox_NFL_team_season&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Infobox_NRHP&amp;quot;] = 70000,&lt;br /&gt;
[&amp;quot;Infobox_NRHP/conv&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Infobox_NRHP/locmapin2region&amp;quot;] = 64000,&lt;br /&gt;
[&amp;quot;Infobox_Newspaper&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Infobox_Officeholder&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Infobox_Olympic_event&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Infobox_Olympic_event/games_text&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Infobox_Organization&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Infobox_Paralympic_event&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Infobox_Paralympic_event/games_text&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Infobox_Person&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Infobox_Politician&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;Infobox_Romania_place&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Infobox_Romanian_subdivision&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Infobox_Russian_district&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Infobox_Russian_inhabited_locality&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Infobox_SCOTUS_case&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Infobox_SCOTUS_case/courts&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Infobox_SSSI&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Infobox_School&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Infobox_Site_of_Special_Scientific_Interest&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Infobox_Software&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Infobox_State_Representative&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Infobox_Swiss_town&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Infobox_Switzerland_municipality&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Infobox_U.S._county&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Infobox_U.S._county/district&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Infobox_UK_place&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Infobox_UK_place/NoDialCode&amp;quot;] = 7600,&lt;br /&gt;
[&amp;quot;Infobox_UK_place/NoPostCode&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Infobox_UK_place/area&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Infobox_UK_place/dist&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Infobox_UK_place/local&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Infobox_UN_resolution&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Infobox_University&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Infobox_Wikipedia_user&amp;quot;] = 7600,&lt;br /&gt;
[&amp;quot;Infobox_academic&amp;quot;] = 7300,&lt;br /&gt;
[&amp;quot;Infobox_aircraft_begin&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Infobox_aircraft_type&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Infobox_airline&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Infobox_airport&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Infobox_airport/datatable&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Infobox_album&amp;quot;] = 157000,&lt;br /&gt;
[&amp;quot;Infobox_album/color&amp;quot;] = 179000,&lt;br /&gt;
[&amp;quot;Infobox_album/link&amp;quot;] = 157000,&lt;br /&gt;
[&amp;quot;Infobox_anatomy&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Infobox_ancient_site&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Infobox_animanga/Footer&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Infobox_animanga/Header&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Infobox_animanga/Print&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Infobox_animanga/Video&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Infobox_architect&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Infobox_artist&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;Infobox_artist_discography&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;Infobox_artwork&amp;quot;] = 9100,&lt;br /&gt;
[&amp;quot;Infobox_athlete&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Infobox_attraction/status&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Infobox_automobile&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;Infobox_award&amp;quot;] = 7900,&lt;br /&gt;
[&amp;quot;Infobox_badminton_player&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Infobox_baseball_biography&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Infobox_baseball_biography/style&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Infobox_basketball_biography&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Infobox_basketball_biography/style&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Infobox_basketball_club&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Infobox_bilateral_relations&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Infobox_body_of_water&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Infobox_book&amp;quot;] = 46000,&lt;br /&gt;
[&amp;quot;Infobox_boxer&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;Infobox_bridge&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;Infobox_building&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Infobox_character&amp;quot;] = 7300,&lt;br /&gt;
[&amp;quot;Infobox_chess_biography&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Infobox_chess_player&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Infobox_church&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Infobox_church/denomination&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Infobox_church/font_color&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Infobox_civilian_attack&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Infobox_college_coach&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Infobox_college_sports_team_season&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;Infobox_college_sports_team_season/link&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;Infobox_college_sports_team_season/name&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;Infobox_college_sports_team_season/succession&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;Infobox_college_sports_team_season/team&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;Infobox_comic_book_title&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Infobox_comics_character&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Infobox_comics_creator&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Infobox_company&amp;quot;] = 77000,&lt;br /&gt;
[&amp;quot;Infobox_concert&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Infobox_constituency&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Infobox_country&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;Infobox_country/formernext&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;Infobox_country/imagetable&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;Infobox_country/multirow&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;Infobox_country/status_text&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Infobox_country_at_games&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Infobox_country_at_games/core&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Infobox_court_case&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Infobox_court_case/images&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Infobox_cricketer&amp;quot;] = 29000,&lt;br /&gt;
[&amp;quot;Infobox_cricketer/career&amp;quot;] = 29000,&lt;br /&gt;
[&amp;quot;Infobox_cricketer/national_side&amp;quot;] = 7100,&lt;br /&gt;
[&amp;quot;Infobox_criminal&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Infobox_cultivar&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Infobox_curler&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Infobox_cycling_race_report&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Infobox_cyclist&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Infobox_dam&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Infobox_designation_list&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Infobox_designation_list/entry&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Infobox_dim&amp;quot;] = 5600,&lt;br /&gt;
[&amp;quot;Infobox_dim/core&amp;quot;] = 5600,&lt;br /&gt;
[&amp;quot;Infobox_diocese&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Infobox_drug&amp;quot;] = 8100,&lt;br /&gt;
[&amp;quot;Infobox_drug/chemical_formula&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/formatATC&amp;quot;] = 8000,&lt;br /&gt;
[&amp;quot;Infobox_drug/formatCASnumber&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/formatChEBI&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/formatChEMBL&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/formatChemDBNIAID&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/formatChemSpider&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/formatCompTox&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/formatDrugBank&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/formatIUPHARBPS&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/formatJmol&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/formatKEGG&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/formatPDBligand&amp;quot;] = 7700,&lt;br /&gt;
[&amp;quot;Infobox_drug/formatPubChemCID&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/formatPubChemSID&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/formatUNII&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/legal_status&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/licence&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/maintenance_categories&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/pregnancy_category&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_drug/title&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Infobox_election&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Infobox_election/row&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Infobox_election/shortname&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;Infobox_enzyme&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;Infobox_ethnic_group&amp;quot;] = 6500,&lt;br /&gt;
[&amp;quot;Infobox_event&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Infobox_figure_skater&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Infobox_film&amp;quot;] = 143000,&lt;br /&gt;
[&amp;quot;Infobox_film_awards&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Infobox_film_awards/link&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Infobox_film_awards/style&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Infobox_food&amp;quot;] = 6200,&lt;br /&gt;
[&amp;quot;Infobox_football_biography&amp;quot;] = 182000,&lt;br /&gt;
[&amp;quot;Infobox_football_club&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;Infobox_football_club_season&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Infobox_football_league&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Infobox_football_league_season&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Infobox_football_match&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Infobox_football_tournament_season&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Infobox_former_subdivision&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Infobox_game_score&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Infobox_gene&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Infobox_given_name&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Infobox_golfer&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Infobox_golfer/highest_ranking&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Infobox_government_agency&amp;quot;] = 8600,&lt;br /&gt;
[&amp;quot;Infobox_gridiron_football_person&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Infobox_gridiron_football_person/position&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;Infobox_gymnast&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Infobox_handball_biography&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Infobox_historic_site&amp;quot;] = 9000,&lt;br /&gt;
[&amp;quot;Infobox_horseraces&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Infobox_hospital&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Infobox_hospital/care_system&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Infobox_hospital/lists&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Infobox_ice_hockey_player&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Infobox_international_football_competition&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Infobox_islands&amp;quot;] = 7900,&lt;br /&gt;
[&amp;quot;Infobox_islands/area&amp;quot;] = 8300,&lt;br /&gt;
[&amp;quot;Infobox_islands/density&amp;quot;] = 8300,&lt;br /&gt;
[&amp;quot;Infobox_islands/length&amp;quot;] = 7900,&lt;br /&gt;
[&amp;quot;Infobox_journal&amp;quot;] = 9000,&lt;br /&gt;
[&amp;quot;Infobox_journal/Abbreviation_search&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;Infobox_journal/Bluebook_check&amp;quot;] = 8700,&lt;br /&gt;
[&amp;quot;Infobox_journal/Former_check&amp;quot;] = 8700,&lt;br /&gt;
[&amp;quot;Infobox_journal/ISO_4_check&amp;quot;] = 8700,&lt;br /&gt;
[&amp;quot;Infobox_journal/ISSN-eISSN&amp;quot;] = 8700,&lt;br /&gt;
[&amp;quot;Infobox_journal/Indexing_search&amp;quot;] = 8800,&lt;br /&gt;
[&amp;quot;Infobox_journal/MathSciNet_check&amp;quot;] = 8700,&lt;br /&gt;
[&amp;quot;Infobox_journal/NLM_check&amp;quot;] = 8700,&lt;br /&gt;
[&amp;quot;Infobox_journal/frequency&amp;quot;] = 8000,&lt;br /&gt;
[&amp;quot;Infobox_judge&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Infobox_lake&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Infobox_language&amp;quot;] = 9000,&lt;br /&gt;
[&amp;quot;Infobox_language/family-color&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Infobox_language/genetic&amp;quot;] = 6200,&lt;br /&gt;
[&amp;quot;Infobox_language/linguistlist&amp;quot;] = 9000,&lt;br /&gt;
[&amp;quot;Infobox_language/ref&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;Infobox_legislature&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Infobox_lighthouse&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Infobox_locomotive&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Infobox_magazine&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Infobox_manner_of_address&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Infobox_mapframe&amp;quot;] = 83000,&lt;br /&gt;
[&amp;quot;Infobox_martial_artist&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;Infobox_martial_artist/record&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;Infobox_medal_templates&amp;quot;] = 373000,&lt;br /&gt;
[&amp;quot;Infobox_medical_condition&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;Infobox_medical_condition_(new)&amp;quot;] = 7900,&lt;br /&gt;
[&amp;quot;Infobox_military_award&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Infobox_military_conflict&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Infobox_military_installation&amp;quot;] = 8600,&lt;br /&gt;
[&amp;quot;Infobox_military_person&amp;quot;] = 38000,&lt;br /&gt;
[&amp;quot;Infobox_military_structure&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Infobox_military_unit&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;Infobox_model&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Infobox_monarch&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Infobox_mountain&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Infobox_museum&amp;quot;] = 8600,&lt;br /&gt;
[&amp;quot;Infobox_musical_artist&amp;quot;] = 114000,&lt;br /&gt;
[&amp;quot;Infobox_musical_artist/color&amp;quot;] = 114000,&lt;br /&gt;
[&amp;quot;Infobox_musical_artist/hCard_class&amp;quot;] = 290000,&lt;br /&gt;
[&amp;quot;Infobox_musical_artist/tracking&amp;quot;] = 101000,&lt;br /&gt;
[&amp;quot;Infobox_name&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Infobox_name_module&amp;quot;] = 7600,&lt;br /&gt;
[&amp;quot;Infobox_newspaper&amp;quot;] = 8700,&lt;br /&gt;
[&amp;quot;Infobox_nobility&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Infobox_noble&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;Infobox_officeholder&amp;quot;] = 169000,&lt;br /&gt;
[&amp;quot;Infobox_officeholder/office&amp;quot;] = 173000,&lt;br /&gt;
[&amp;quot;Infobox_official_post&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;Infobox_organization&amp;quot;] = 29000,&lt;br /&gt;
[&amp;quot;Infobox_pageant_titleholder&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Infobox_park&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;Infobox_person&amp;quot;] = 389000,&lt;br /&gt;
[&amp;quot;Infobox_person/Wikidata&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Infobox_person/height&amp;quot;] = 225000,&lt;br /&gt;
[&amp;quot;Infobox_person/length&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Infobox_person/weight&amp;quot;] = 71000,&lt;br /&gt;
[&amp;quot;Infobox_philosopher&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Infobox_planet&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;Infobox_play&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Infobox_political_party&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Infobox_politician&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Infobox_power_station&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Infobox_prepared_food&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Infobox_professional_wrestler&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Infobox_professional_wrestling_event&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Infobox_protected_area&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Infobox_protein_family&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Infobox_publisher&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Infobox_racehorse&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;Infobox_racing_driver&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Infobox_radio_station&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Infobox_rail&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Infobox_rail_line&amp;quot;] = 6400,&lt;br /&gt;
[&amp;quot;Infobox_rail_line/tracking&amp;quot;] = 6400,&lt;br /&gt;
[&amp;quot;Infobox_rail_service&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Infobox_reality_competition_season&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Infobox_record_label&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Infobox_recurring_event&amp;quot;] = 5500,&lt;br /&gt;
[&amp;quot;Infobox_religious_biography&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Infobox_religious_building&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Infobox_religious_building/color&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Infobox_requested&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Infobox_river&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Infobox_river/calcunit&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Infobox_river/discharge&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Infobox_river/row-style&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Infobox_river/source&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Infobox_road&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;Infobox_road/banner&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Infobox_road/browselinks/USA&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Infobox_road/hide/cities&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Infobox_road/maint/USA&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Infobox_road/meta/colors&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Infobox_road/meta/errors&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;Infobox_road/meta/mask/category&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;Infobox_road/meta/mask/country&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;Infobox_road/meta/mask/subtype1&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Infobox_road/meta/mask/subtype2&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Infobox_road/name/USA&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Infobox_road/name/USA/StateName&amp;quot;] = 6500,&lt;br /&gt;
[&amp;quot;Infobox_road/shield/USA&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Infobox_road/shieldmain/USA&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Infobox_road_small&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Infobox_rockunit&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;Infobox_royalty&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Infobox_royalty/short_description&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Infobox_rugby_biography&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Infobox_rugby_biography/correct_date&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Infobox_rugby_biography/depcheck&amp;quot;] = 6500,&lt;br /&gt;
[&amp;quot;Infobox_rugby_league_biography&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;Infobox_rugby_league_biography/PLAYER&amp;quot;] = 8800,&lt;br /&gt;
[&amp;quot;Infobox_rugby_team&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Infobox_saint&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;Infobox_school&amp;quot;] = 38000,&lt;br /&gt;
[&amp;quot;Infobox_school/short_description&amp;quot;] = 38000,&lt;br /&gt;
[&amp;quot;Infobox_school_district&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Infobox_scientist&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;Infobox_service_record&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Infobox_settlement&amp;quot;] = 534000,&lt;br /&gt;
[&amp;quot;Infobox_settlement/areadisp&amp;quot;] = 210000,&lt;br /&gt;
[&amp;quot;Infobox_settlement/columns&amp;quot;] = 84000,&lt;br /&gt;
[&amp;quot;Infobox_settlement/densdisp&amp;quot;] = 399000,&lt;br /&gt;
[&amp;quot;Infobox_settlement/impus&amp;quot;] = 76000,&lt;br /&gt;
[&amp;quot;Infobox_settlement/lengthdisp&amp;quot;] = 155000,&lt;br /&gt;
[&amp;quot;Infobox_settlement/link&amp;quot;] = 84000,&lt;br /&gt;
[&amp;quot;Infobox_settlement/metric&amp;quot;] = 188000,&lt;br /&gt;
[&amp;quot;Infobox_settlement/pref&amp;quot;] = 264000,&lt;br /&gt;
[&amp;quot;Infobox_ship_begin&amp;quot;] = 37000,&lt;br /&gt;
[&amp;quot;Infobox_ship_career&amp;quot;] = 34000,&lt;br /&gt;
[&amp;quot;Infobox_ship_characteristics&amp;quot;] = 37000,&lt;br /&gt;
[&amp;quot;Infobox_ship_class_overview&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Infobox_ship_image&amp;quot;] = 36000,&lt;br /&gt;
[&amp;quot;Infobox_shopping_mall&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Infobox_skier&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Infobox_soap_character&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Infobox_software&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Infobox_software/simple&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Infobox_song&amp;quot;] = 69000,&lt;br /&gt;
[&amp;quot;Infobox_song/color&amp;quot;] = 69000,&lt;br /&gt;
[&amp;quot;Infobox_song/link&amp;quot;] = 69000,&lt;br /&gt;
[&amp;quot;Infobox_spaceflight&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Infobox_speed_skater&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Infobox_sports_competition_event&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Infobox_sports_competition_event/medalrow&amp;quot;] = 8000,&lt;br /&gt;
[&amp;quot;Infobox_sports_league&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Infobox_sports_season&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Infobox_sportsperson&amp;quot;] = 96000,&lt;br /&gt;
[&amp;quot;Infobox_stadium&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;Infobox_state_representative&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Infobox_station&amp;quot;] = 49000,&lt;br /&gt;
[&amp;quot;Infobox_station/styles.css&amp;quot;] = 49000,&lt;br /&gt;
[&amp;quot;Infobox_street&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Infobox_swimmer&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;Infobox_television&amp;quot;] = 51000,&lt;br /&gt;
[&amp;quot;Infobox_television_channel&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Infobox_television_episode&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Infobox_television_season&amp;quot;] = 8000,&lt;br /&gt;
[&amp;quot;Infobox_television_station&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Infobox_tennis_biography&amp;quot;] = 7900,&lt;br /&gt;
[&amp;quot;Infobox_tennis_tournament_event&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Infobox_tennis_tournament_year&amp;quot;] = 7800,&lt;br /&gt;
[&amp;quot;Infobox_tennis_tournament_year/color&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;Infobox_tennis_tournament_year/footer&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;Infobox_train&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Infobox_tropical_cyclone&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Infobox_union&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Infobox_university&amp;quot;] = 26000,&lt;br /&gt;
[&amp;quot;Infobox_user&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Infobox_venue&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Infobox_video_game&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Infobox_volleyball_biography&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Infobox_weapon&amp;quot;] = 6700,&lt;br /&gt;
[&amp;quot;Infobox_website&amp;quot;] = 7300,&lt;br /&gt;
[&amp;quot;Infobox_writer&amp;quot;] = 33000,&lt;br /&gt;
[&amp;quot;Information&amp;quot;] = 133000,&lt;br /&gt;
[&amp;quot;Inline&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Input_link&amp;quot;] = 33000,&lt;br /&gt;
[&amp;quot;Inputbox&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Instagram&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;Interlanguage_link&amp;quot;] = 82000,&lt;br /&gt;
[&amp;quot;Interlanguage_link_multi&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Internet_Archive_author&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Internet_Archive_film&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Intitle&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;Invalid_SVG&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;Ipsock&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Iptalk&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;IranCensus2006&amp;quot;] = 63000,&lt;br /&gt;
[&amp;quot;IranNCSGN&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Iran_Census_2006&amp;quot;] = 63000,&lt;br /&gt;
[&amp;quot;Irish_place_name&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;IsValidPageName&amp;quot;] = 104000,&lt;br /&gt;
[&amp;quot;Is_article&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Is_country_in_Central_America&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Is_country_in_the_Caribbean&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Is_empty&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Is_interwiki_link&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Is_italic_taxon&amp;quot;] = 331000,&lt;br /&gt;
[&amp;quot;Isbn&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Isfdb_name&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Isfdb_title&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Isnumeric&amp;quot;] = 168000,&lt;br /&gt;
[&amp;quot;Iso2continent&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Iso2country&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;Iso2country/article&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;Iso2country/data&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;Issubst&amp;quot;] = 77000,&lt;br /&gt;
[&amp;quot;Isu_name&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Italic_title&amp;quot;] = 777000,&lt;br /&gt;
[&amp;quot;Italic_title_prefixed&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Italics_after&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Italics_colon&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Italictitle&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;Ivm&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Ivm/styles.css&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Ivmbox&amp;quot;] = 107000,&lt;br /&gt;
[&amp;quot;Ivory_messagebox&amp;quot;] = 107000,&lt;br /&gt;
[&amp;quot;Module:I18n/complex_date&amp;quot;] = 57000,&lt;br /&gt;
[&amp;quot;Module:IPA_symbol&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Module:IPA_symbol/data&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Module:IPAc-en&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;Module:IPAc-en/data&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;Module:IPAc-en/phonemes&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;Module:IPAc-en/pronunciation&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;Module:IPAddress&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;Module:ISO_3166&amp;quot;] = 597000,&lt;br /&gt;
[&amp;quot;Module:ISO_3166/data/AT&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Module:ISO_3166/data/BA&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Module:ISO_3166/data/CA&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Module:ISO_3166/data/DE&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Module:ISO_3166/data/ES&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Module:ISO_3166/data/FR&amp;quot;] = 38000,&lt;br /&gt;
[&amp;quot;Module:ISO_3166/data/GB&amp;quot;] = 5300,&lt;br /&gt;
[&amp;quot;Module:ISO_3166/data/GR&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Module:ISO_3166/data/IN&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Module:ISO_3166/data/National&amp;quot;] = 597000,&lt;br /&gt;
[&amp;quot;Module:ISO_3166/data/RS&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Module:ISO_3166/data/RU&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;Module:ISO_3166/data/US&amp;quot;] = 80000,&lt;br /&gt;
[&amp;quot;Module:ISO_639_name&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Module:ISOdate&amp;quot;] = 57000,&lt;br /&gt;
[&amp;quot;Module:Icon&amp;quot;] = 490000,&lt;br /&gt;
[&amp;quot;Module:Icon/data&amp;quot;] = 490000,&lt;br /&gt;
[&amp;quot;Module:If_empty&amp;quot;] = 2600000,&lt;br /&gt;
[&amp;quot;Module:If_in_page&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;Module:If_preview&amp;quot;] = 54000,&lt;br /&gt;
[&amp;quot;Module:In_lang&amp;quot;] = 329000,&lt;br /&gt;
[&amp;quot;Module:Infobox&amp;quot;] = 3620000,&lt;br /&gt;
[&amp;quot;Module:Infobox/dates&amp;quot;] = 59000,&lt;br /&gt;
[&amp;quot;Module:Infobox3cols&amp;quot;] = 273000,&lt;br /&gt;
[&amp;quot;Module:InfoboxImage&amp;quot;] = 3850000,&lt;br /&gt;
[&amp;quot;Module:Infobox_body_of_water_tracking&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Module:Infobox_cyclist_tracking&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Module:Infobox_gene&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Module:Infobox_mapframe&amp;quot;] = 326000,&lt;br /&gt;
[&amp;quot;Module:Infobox_military_conflict&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Module:Infobox_military_conflict/styles.css&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Module:Infobox_multi-lingual_name&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Module:Infobox_multi-lingual_name/data&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Module:Infobox_power_station&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Module:Infobox_road&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;Module:Infobox_road/color&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;Module:Infobox_road/length&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;Module:Infobox_road/locations&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;Module:Infobox_road/map&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;Module:Infobox_road/meta/mask/country&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Module:Infobox_television_disambiguation_check&amp;quot;] = 56000,&lt;br /&gt;
[&amp;quot;Module:Infobox_television_season_disambiguation_check&amp;quot;] = 7600,&lt;br /&gt;
[&amp;quot;Module:Infobox_television_season_name&amp;quot;] = 8000,&lt;br /&gt;
[&amp;quot;Module:Internet_Archive&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Module:IrelandByCountyCatNav&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Module:Is_infobox_in_lead&amp;quot;] = 213000,&lt;br /&gt;
[&amp;quot;Module:Italic_title&amp;quot;] = 1020000,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Transclusion_count/data/D&amp;diff=2056</id>
		<title>پودمان:Transclusion count/data/D</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Transclusion_count/data/D&amp;diff=2056"/>
		<updated>2026-06-25T09:35:13Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
[&amp;quot;D&amp;amp;D&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;D&amp;amp;D_to-do&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;D-da&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;DANFS&amp;quot;] = 8800,&lt;br /&gt;
[&amp;quot;DC-Comics-trademark-copyright&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;DDR&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;DEC&amp;quot;] = 7800,&lt;br /&gt;
[&amp;quot;DECADE&amp;quot;] = 224000,&lt;br /&gt;
[&amp;quot;DEN&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;DEU&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;DMC&amp;quot;] = 64000,&lt;br /&gt;
[&amp;quot;DMCA&amp;quot;] = 1540000,&lt;br /&gt;
[&amp;quot;DNB&amp;quot;] = 8500,&lt;br /&gt;
[&amp;quot;DNB_portal&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;DNK&amp;quot;] = 7000,&lt;br /&gt;
[&amp;quot;DNZB&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;DOI&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;DOWs&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;DPP&amp;quot;] = 77000,&lt;br /&gt;
[&amp;quot;DPP/logo&amp;quot;] = 77000,&lt;br /&gt;
[&amp;quot;DRV_links&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;DWT&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;DYKC&amp;quot;] = 6700,&lt;br /&gt;
[&amp;quot;DYKF&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;DYK_blue&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;DYK_checklist&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;DYK_conditions&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;DYK_files&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;DYK_header&amp;quot;] = 8500,&lt;br /&gt;
[&amp;quot;DYK_nompage_links&amp;quot;] = 53000,&lt;br /&gt;
[&amp;quot;DYK_talk&amp;quot;] = 93000,&lt;br /&gt;
[&amp;quot;DYK_talk/date&amp;quot;] = 93000,&lt;br /&gt;
[&amp;quot;DYK_tools&amp;quot;] = 38000,&lt;br /&gt;
[&amp;quot;DYKfile&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;DZA&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Dab&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Dablink&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Dagger&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Dashboard.wikiedu.org_assignment&amp;quot;] = 31000,&lt;br /&gt;
[&amp;quot;Dashboard.wikiedu.org_course_header&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Dashboard.wikiedu.org_course_header/edit-note&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Dashboard.wikiedu.org_sandbox&amp;quot;] = 58000,&lt;br /&gt;
[&amp;quot;Dashboard.wikiedu.org_student_editor&amp;quot;] = 44000,&lt;br /&gt;
[&amp;quot;Dashboard.wikiedu.org_student_program_sandbox&amp;quot;] = 58000,&lt;br /&gt;
[&amp;quot;Dashboard.wikiedu.org_talk_course_link&amp;quot;] = 46000,&lt;br /&gt;
[&amp;quot;Dashboard.wikiedu.org_user_talk&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Date&amp;quot;] = 49000,&lt;br /&gt;
[&amp;quot;Date-mf&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;Date_table_sorting&amp;quot;] = 32000,&lt;br /&gt;
[&amp;quot;Dated_maintenance_category&amp;quot;] = 1640000,&lt;br /&gt;
[&amp;quot;Day+1&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;Day-1&amp;quot;] = 7700,&lt;br /&gt;
[&amp;quot;Dbox&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Dc&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Dda&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Dead_link&amp;quot;] = 257000,&lt;br /&gt;
[&amp;quot;Death-date&amp;quot;] = 9100,&lt;br /&gt;
[&amp;quot;Death-date_and_age&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;Death_date&amp;quot;] = 8800,&lt;br /&gt;
[&amp;quot;Death_date_and_age&amp;quot;] = 298000,&lt;br /&gt;
[&amp;quot;Death_year_and_age&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Death_year_category_header&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Decade_link&amp;quot;] = 28000,&lt;br /&gt;
[&amp;quot;Decline&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Declined&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Decrease&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Define&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Deg2DMS&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Deletion_review_log_header&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;Deletion_review_log_header/Core&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;Delink&amp;quot;] = 1480000,&lt;br /&gt;
[&amp;quot;Delink_question_hyphen-minus&amp;quot;] = 255000,&lt;br /&gt;
[&amp;quot;Delrevxfd&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Democratic_Party_(US)/meta/color&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Democratic_Party_(US)/meta/shading&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Democratic_Party_(US)/meta/shortname&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Democratic_Party_(United_States)/meta/color&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Democratic_Party_(United_States)/meta/shortname&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Demography&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Deprecated_code&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Description_missing&amp;quot;] = 9600,&lt;br /&gt;
[&amp;quot;Designation/abbreviation&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;Designation/color&amp;quot;] = 74000,&lt;br /&gt;
[&amp;quot;Designation/colour&amp;quot;] = 76000,&lt;br /&gt;
[&amp;quot;Designation/colour2&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Designation/divbox&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;Designation/text&amp;quot;] = 37000,&lt;br /&gt;
[&amp;quot;Designation_list&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;Details&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;DetailsLink&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;Detect_singular&amp;quot;] = 531000,&lt;br /&gt;
[&amp;quot;Deutsche_Bahn_station_codes&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;DfE_performance_tables&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Diff&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Diff2&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;Digits&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Directories_box&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Disamb&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Disambig&amp;quot;] = 65000,&lt;br /&gt;
[&amp;quot;Disambig-Class&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;DisambigProj&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;DisambigProject&amp;quot;] = 152000,&lt;br /&gt;
[&amp;quot;Disambigproject&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;Disambiguation&amp;quot;] = 195000,&lt;br /&gt;
[&amp;quot;Disambiguation/cat&amp;quot;] = 195000,&lt;br /&gt;
[&amp;quot;Disambiguation_needed&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;Disambiguation_page_short_description&amp;quot;] = 316000,&lt;br /&gt;
[&amp;quot;Discogs_artist&amp;quot;] = 9100,&lt;br /&gt;
[&amp;quot;Discogs_master&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;Discogs_release&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Discussion_bottom&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Discussion_top&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;DisestcatCountry&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;DisestcatCountry/core&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;DisestcatCountryDecade&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;DisestcatUSstate&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;DisestcatUSstate/core&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Disputed&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Distinguish&amp;quot;] = 71000,&lt;br /&gt;
[&amp;quot;Disused_Rail_Start&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Disused_rail_start&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Disused_style&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Div_col&amp;quot;] = 313000,&lt;br /&gt;
[&amp;quot;Div_col_end&amp;quot;] = 235000,&lt;br /&gt;
[&amp;quot;Divbox&amp;quot;] = 219000,&lt;br /&gt;
[&amp;quot;Divbox/styles.css&amp;quot;] = 244000,&lt;br /&gt;
[&amp;quot;Dmbox&amp;quot;] = 408000,&lt;br /&gt;
[&amp;quot;Dmbox/styles.css&amp;quot;] = 407000,&lt;br /&gt;
[&amp;quot;Dmoz&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Dn&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Do_not_move_to_Commons&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Doc&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Documentation&amp;quot;] = 76000,&lt;br /&gt;
[&amp;quot;Documentation_subpage&amp;quot;] = 81000,&lt;br /&gt;
[&amp;quot;Dog_opentask&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Doi&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Doing&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Don&#039;t_edit_this_line&amp;quot;] = 71000,&lt;br /&gt;
[&amp;quot;Don&#039;t_edit_this_line_always_display&amp;quot;] = 327000,&lt;br /&gt;
[&amp;quot;Don&#039;t_edit_this_line_extinct&amp;quot;] = 327000,&lt;br /&gt;
[&amp;quot;Don&#039;t_edit_this_line_link_target&amp;quot;] = 327000,&lt;br /&gt;
[&amp;quot;Don&#039;t_edit_this_line_link_text&amp;quot;] = 327000,&lt;br /&gt;
[&amp;quot;Don&#039;t_edit_this_line_parent&amp;quot;] = 327000,&lt;br /&gt;
[&amp;quot;Don&#039;t_edit_this_line_rank&amp;quot;] = 327000,&lt;br /&gt;
[&amp;quot;Don&#039;t_edit_this_line_refs&amp;quot;] = 71000,&lt;br /&gt;
[&amp;quot;Don&#039;t_edit_this_line_same_as&amp;quot;] = 327000,&lt;br /&gt;
[&amp;quot;Done&amp;quot;] = 83000,&lt;br /&gt;
[&amp;quot;Done-t&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Doppelganger&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Dot&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Double-dagger&amp;quot;] = 9800,&lt;br /&gt;
[&amp;quot;Dr&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Dr-logno&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Dr-make&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Dr-yr&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Draft_article&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Draft_article_check&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Draft_other&amp;quot;] = 115000,&lt;br /&gt;
[&amp;quot;Draw&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Draw_key&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Drep&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Drugbankcite&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;Drugbox&amp;quot;] = 7400,&lt;br /&gt;
[&amp;quot;Drugs.com&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Ds/editnotice&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Ds/talk_notice&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Ds/topics&amp;quot;] = 6200,&lt;br /&gt;
[&amp;quot;Dsindex&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Dts&amp;quot;] = 32000,&lt;br /&gt;
[&amp;quot;Dubious&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;Duck&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Dummytab&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Duration&amp;quot;] = 35000,&lt;br /&gt;
[&amp;quot;Dyktalk&amp;quot;] = 44000,&lt;br /&gt;
[&amp;quot;Dynamic_IP&amp;quot;] = 5600,&lt;br /&gt;
[&amp;quot;Dynamic_list&amp;quot;] = 7000,&lt;br /&gt;
[&amp;quot;Module:DYK_checklist&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Module:DYK_checklist/data&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Module:DYK_nompage_links&amp;quot;] = 53000,&lt;br /&gt;
[&amp;quot;Module:Data&amp;quot;] = 135000,&lt;br /&gt;
[&amp;quot;Module:Date&amp;quot;] = 1110000,&lt;br /&gt;
[&amp;quot;Module:DateI18n&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Module:Date_table_sorting&amp;quot;] = 32000,&lt;br /&gt;
[&amp;quot;Module:Delink&amp;quot;] = 1510000,&lt;br /&gt;
[&amp;quot;Module:Demography&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Module:Distinguish&amp;quot;] = 71000,&lt;br /&gt;
[&amp;quot;Module:Documentation&amp;quot;] = 113000,&lt;br /&gt;
[&amp;quot;Module:Documentation/config&amp;quot;] = 113000,&lt;br /&gt;
[&amp;quot;Module:Duration&amp;quot;] = 226000,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Transclusion_count&amp;diff=2053</id>
		<title>پودمان:Transclusion count</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Transclusion_count&amp;diff=2053"/>
		<updated>2026-06-25T09:35:12Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.fetch(frame)&lt;br /&gt;
	local template = nil&lt;br /&gt;
	local return_value = nil&lt;br /&gt;
&lt;br /&gt;
	-- Use demo parameter if it exists, otherswise use current template name&lt;br /&gt;
	local namespace = mw.title.getCurrentTitle().namespace&lt;br /&gt;
	if frame.args[&amp;quot;demo&amp;quot;] and frame.args[&amp;quot;demo&amp;quot;] ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		template = frame.args[&amp;quot;demo&amp;quot;]&lt;br /&gt;
	elseif namespace == 10 then -- Template namespace&lt;br /&gt;
		template = mw.title.getCurrentTitle().text&lt;br /&gt;
	elseif namespace == 828 then -- Module namespace&lt;br /&gt;
		template = (mw.site.namespaces[828].name .. &amp;quot;:&amp;quot; .. mw.title.getCurrentTitle().text)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- If in template or module namespace, look up count in /data&lt;br /&gt;
	if template ~= nil then&lt;br /&gt;
		namespace = mw.title.new(template, &amp;quot;Template&amp;quot;).namespace&lt;br /&gt;
		if namespace == 10 or namespace == 828 then&lt;br /&gt;
			template =  mw.ustring.gsub(template, &amp;quot;/doc$&amp;quot;, &amp;quot;&amp;quot;) -- strip /doc from end&lt;br /&gt;
			template =  mw.ustring.gsub(template, &amp;quot;/توضیحات$&amp;quot;, &amp;quot;&amp;quot;) -- strip /توضیحات from end&lt;br /&gt;
			local index = mw.ustring.sub(mw.title.new(template).text,1,1)&lt;br /&gt;
			local subpage_title = &#039;Transclusion_count/data/&#039; .. (index or &amp;quot;other&amp;quot;)&lt;br /&gt;
			local subpage = mw.title.makeTitle(828, subpage_title)&lt;br /&gt;
			if subpage.exists then&lt;br /&gt;
				local data = mw.loadData(&#039;Module:&#039; .. subpage_title)&lt;br /&gt;
				return_value = tonumber(data[mw.ustring.gsub(template, &amp;quot; &amp;quot;, &amp;quot;_&amp;quot;)])&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- If database value doesn&#039;t exist, use value passed to template&lt;br /&gt;
	if return_value == nil and frame.args[1] ~= nil then&lt;br /&gt;
		local arg1=mw.ustring.match(frame.args[1], &#039;[%d,]+&#039;)&lt;br /&gt;
		if arg1 and arg1 ~= &#039;&#039; then&lt;br /&gt;
			return_value = tonumber(frame:callParserFunction(&#039;formatnum&#039;, arg1, &#039;R&#039;))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return return_value	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Tlg&amp;diff=2050</id>
		<title>پودمان:Tlg</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Tlg&amp;diff=2050"/>
		<updated>2026-06-25T09:35:12Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This implements Template:Tlg&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Is a string non-empty?&lt;br /&gt;
local function _ne(s) &lt;br /&gt;
	return s ~= nil and s ~= &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local nw = mw.text.nowiki&lt;br /&gt;
&lt;br /&gt;
local function addTemplate(s)&lt;br /&gt;
	local i, _ = s:find(&#039;:&#039;, 1, true)&lt;br /&gt;
	if i == nil then&lt;br /&gt;
		return &#039;Template:&#039; .. s&lt;br /&gt;
	end&lt;br /&gt;
	local ns = s:sub(1, i - 1)&lt;br /&gt;
	if ns == &#039;&#039; or mw.site.namespaces[ns] then&lt;br /&gt;
		return s&lt;br /&gt;
	else&lt;br /&gt;
		return &#039;Template:&#039; .. s&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function trimTemplate(s)&lt;br /&gt;
	local needle = &#039;template:&#039;&lt;br /&gt;
	if s:sub(1, needle:len()):lower() == needle then&lt;br /&gt;
		return s:sub(needle:len() + 1)	&lt;br /&gt;
	else&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function linkTitle(args)&lt;br /&gt;
	if _ne(args.nolink) then&lt;br /&gt;
		return args[&#039;1&#039;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local titleObj&lt;br /&gt;
	local titlePart = &#039;[[&#039;&lt;br /&gt;
	if args[&#039;1&#039;] then&lt;br /&gt;
		-- This handles :Page and other NS&lt;br /&gt;
		titleObj = mw.title.new(args[&#039;1&#039;], &#039;Template&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		titleObj = mw.title.getCurrentTitle()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	titlePart = titlePart .. (titleObj ~= nil and titleObj.fullText or&lt;br /&gt;
				addTemplate(args[&#039;1&#039;]))&lt;br /&gt;
	&lt;br /&gt;
	local textPart = args.alttext&lt;br /&gt;
	if not _ne(textPart) then&lt;br /&gt;
		if titleObj ~= nil then&lt;br /&gt;
			textPart = titleObj:inNamespace(&amp;quot;Template&amp;quot;) and args[&#039;1&#039;] or titleObj.fullText&lt;br /&gt;
		else&lt;br /&gt;
			-- redlink&lt;br /&gt;
			textPart = args[&#039;1&#039;]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if _ne(args.subst) then&lt;br /&gt;
		-- HACK: the ns thing above is probably broken&lt;br /&gt;
		textPart = &#039;subst:&#039; .. textPart&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if _ne(args.brace) then&lt;br /&gt;
		textPart = nw(&#039;{{&#039;) .. textPart .. nw(&#039;}}&#039;)&lt;br /&gt;
	elseif _ne(args.braceinside) then&lt;br /&gt;
		textPart = nw(&#039;{&#039;) .. textPart .. nw(&#039;}&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	titlePart = titlePart .. &#039;|&#039; .. textPart .. &#039;]]&#039;&lt;br /&gt;
	if _ne(args.braceinside) then&lt;br /&gt;
		titlePart = nw(&#039;{&#039;) .. titlePart .. nw(&#039;}&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return titlePart&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame, {&lt;br /&gt;
		trim = true,&lt;br /&gt;
		removeBlanks = false&lt;br /&gt;
	})&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local bold = _ne(args.bold) or _ne(args.boldlink) or _ne(args.boldname)&lt;br /&gt;
	local italic = _ne(args.italic) or _ne(args.italics)&lt;br /&gt;
	local dontBrace = _ne(args.brace) or _ne(args.braceinside)&lt;br /&gt;
	local code = _ne(args.code) or _ne(args.tt)&lt;br /&gt;
	&lt;br /&gt;
	-- Build the link part&lt;br /&gt;
	local titlePart = linkTitle(args)&lt;br /&gt;
	if bold then titlePart = &amp;quot;&#039;&#039;&#039;&amp;quot; .. titlePart .. &amp;quot;&#039;&#039;&#039;&amp;quot; end&lt;br /&gt;
	if _ne(args.nowrapname) then titlePart = &#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&#039; .. titlePart .. &#039;&amp;lt;/span&amp;gt;&#039; end&lt;br /&gt;
	&lt;br /&gt;
	-- Build the arguments&lt;br /&gt;
	local textPart = &amp;quot;&amp;quot;&lt;br /&gt;
	for i = 2, 11 do&lt;br /&gt;
		local ii = tostring(i)&lt;br /&gt;
		local val = args[ii]&lt;br /&gt;
		if val ~= nil then val = mw.text.unstripNoWiki(val) else break end&lt;br /&gt;
		if _ne(args.nowiki) then val = nw(val) end&lt;br /&gt;
		if italic then val = &#039;&amp;lt;span style=&amp;quot;font-style:italic;&amp;quot;&amp;gt;&#039; .. val .. &#039;&amp;lt;/span&amp;gt;&#039; end&lt;br /&gt;
		textPart = textPart .. &#039;&amp;amp;#124;&#039; .. val&lt;br /&gt;
	end&lt;br /&gt;
	if _ne(args[&#039;12&#039;]) then textPart = textPart .. &#039;&amp;amp;#124;…&#039; end&lt;br /&gt;
	&lt;br /&gt;
	-- final wrap&lt;br /&gt;
	local ret = titlePart .. textPart&lt;br /&gt;
	if not dontBrace then ret = nw(&#039;{{&#039;) .. ret .. nw(&#039;}}&#039;) end&lt;br /&gt;
	if _ne(args.a) then ret = nw(&#039;*&#039;) .. &#039;&amp;amp;nbsp;&#039; .. ret end&lt;br /&gt;
	if _ne(args.kbd) then ret = &#039;&amp;lt;kbd&amp;gt;&#039; .. ret .. &#039;&amp;lt;/kbd&amp;gt;&#039; end&lt;br /&gt;
	if code then&lt;br /&gt;
		ret = &#039;&amp;lt;code&amp;gt;&#039; .. ret .. &#039;&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
	elseif _ne(args.plaincode) then&lt;br /&gt;
		ret = &#039;&amp;lt;code style=&amp;quot;border:none;background:transparent;&amp;quot;&amp;gt;&#039; .. ret .. &#039;&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if _ne(args.nowrap) then ret = &#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&#039; .. ret .. &#039;&amp;lt;/span&amp;gt;&#039; end&lt;br /&gt;
	&lt;br /&gt;
	--[[ Wrap as html?? &lt;br /&gt;
	local span = mw.html.create(&#039;span&#039;)&lt;br /&gt;
	span:wikitext(ret)&lt;br /&gt;
	--]]&lt;br /&gt;
	if _ne(args.debug) then ret = ret .. &#039;\n&amp;lt;pre&amp;gt;&#039; .. mw.text.encode(mw.dumpObject(args)) .. &#039;&amp;lt;/pre&amp;gt;&#039; end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Template_wrapper&amp;diff=2047</id>
		<title>پودمان:Template wrapper</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Template_wrapper&amp;diff=2047"/>
		<updated>2026-06-25T09:35:12Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&#039;Module:No globals&#039;);&lt;br /&gt;
&lt;br /&gt;
local error_msg = &#039;&amp;lt;span style=\&amp;quot;font-size:100%\&amp;quot; class=\&amp;quot;error\&amp;quot;&amp;gt;پارامتر &amp;lt;code style=\&amp;quot;color:inherit; border:inherit; padding:inherit;\&amp;quot;&amp;gt;&amp;amp;#124;_template=&amp;lt;/code&amp;gt; ناموجود یا خالی&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S _ I N _ T A B L E &amp;gt;--------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
scan through tbl looking for value; return true if found, false else&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function is_in_table (tbl, value)&lt;br /&gt;
    for k, v in pairs (tbl) do&lt;br /&gt;
        if v == value then return true end&lt;br /&gt;
    end&lt;br /&gt;
    return false;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; A D D _ P A R A M E T E R &amp;gt;----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
adds parameter name and its value to args table according to the state of boolean list argument; kv pair for&lt;br /&gt;
template execution; k=v string for template listing.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function add_parameter (k, v, args, list)&lt;br /&gt;
	if list then&lt;br /&gt;
		table.insert( args, table.concat ({k, &#039;=&#039;, v}));						-- write parameter names and values to args table as string&lt;br /&gt;
	else&lt;br /&gt;
		args[k] = v;															-- copy parameters to args table&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; A L I A S _ M A P _ G E T &amp;gt;----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
returns a table of local template (parent frame) parameter names and the target template names that match where&lt;br /&gt;
in [key]=&amp;lt;value&amp;gt; pairs where:&lt;br /&gt;
	[key] is local template parameter name (an alias)&lt;br /&gt;
	&amp;lt;value&amp;gt; is target template parameter name (the canonical parameter name used in the working template)&lt;br /&gt;
&lt;br /&gt;
The parameter |_alias-map= has the form:&lt;br /&gt;
	|_alias-map=&amp;lt;list&amp;gt;&lt;br /&gt;
where &amp;lt;list&amp;gt; is a comma-separated list of alias / canonical parameter name pairs in the form&lt;br /&gt;
	&amp;lt;from&amp;gt; : &amp;lt;to&amp;gt;&lt;br /&gt;
where:&lt;br /&gt;
	&amp;lt;from&amp;gt; is the local template&#039;s parameter name (alias)&lt;br /&gt;
	&amp;lt;to&amp;gt; is the target template&#039;s parameter name (canonical)&lt;br /&gt;
	for enumerated parameters place an octothorp (#) where the enumerator digits are placed in the parameter names:&lt;br /&gt;
		&amp;lt;from#&amp;gt; : &amp;lt;to#&amp;gt;&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function alias_map_get (_alias_map)&lt;br /&gt;
	local T = mw.text.split (_alias_map, &#039;%s*,%s*&#039;);							-- convert the comma-separated list into a table of alias pairs&lt;br /&gt;
	local mapped_aliases = {};													-- mapped aliases will go here&lt;br /&gt;
	local l_name, t_name;														-- parameter names&lt;br /&gt;
	&lt;br /&gt;
	for _, alias_pair in ipairs (T) do											-- loop through the table of alias pairs&lt;br /&gt;
		l_name, t_name = mw.ustring.match (alias_pair, &#039;(.-)%s*:%s*(.+)&#039;);		-- from each pair, get local and target parameter names&lt;br /&gt;
		if l_name and t_name then												-- if both are set&lt;br /&gt;
			if mw.getContentLanguage():parseFormattedNumber(l_name) then&lt;br /&gt;
				l_name = mw.getContentLanguage():parseFormattedNumber(l_name);	-- convert number-as-text to a number&lt;br /&gt;
			end&lt;br /&gt;
			mapped_aliases[l_name] = t_name;									-- add them to the map table&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mapped_aliases;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; F R A M E _ A R G S _ G E T &amp;gt;--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Fetch the wrapper template&#039;s &#039;default&#039; and control parameters; adds default parameters to args&lt;br /&gt;
&lt;br /&gt;
returns content of |_template= parameter (name of the working template); nil else&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function frame_args_get (frame_args, args, list)&lt;br /&gt;
	local template;&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs (frame_args) do											-- here we get the wrapper template&#039;s &#039;default&#039; parameters&lt;br /&gt;
		if &#039;string&#039; == type (k) and (v and (&#039;&#039; ~= v)) then						-- do not pass along positional or empty parameters&lt;br /&gt;
			if &#039;_template&#039; == k then&lt;br /&gt;
				template = v;													-- save the name of template that we are wrapping&lt;br /&gt;
			elseif &#039;_exclude&#039; ~= k and &#039;_reuse&#039; ~= k and &#039;_include-positional&#039; ~= k  and &#039;_alias-map&#039; ~= k then	-- these already handled so ignore here; &lt;br /&gt;
				add_parameter (k, v, args, list);								-- add all other parameters to args in the style dictated by list&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return template;															-- return contents of |_template= parameter&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[=[--------------------------&amp;lt; P F R A M E _ A R G S _ G E T &amp;gt;------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Fetches the wrapper template&#039;s &#039;live&#039; parameters; adds live parameters that aren&#039;t members of the exclude table to&lt;br /&gt;
args table; positional parameters may not be excluded&lt;br /&gt;
&lt;br /&gt;
no return value&lt;br /&gt;
&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
local function pframe_args_get (pframe_args, args, exclude, _include_positional, list)&lt;br /&gt;
	for k, v in pairs (pframe_args) do&lt;br /&gt;
		if &#039;string&#039; == type (k) and not is_in_table (exclude, k) then			-- do not pass along excluded parameters&lt;br /&gt;
			if v and (&#039;&#039; ~= v) then												-- pass along only those parameters that have assigned values&lt;br /&gt;
				if &#039;unset&#039; == v:lower() then									-- special keyword to unset &#039;default&#039; parameters set in the wrapper template&lt;br /&gt;
					v = &#039;&#039;;														-- unset the value in the args table&lt;br /&gt;
				end&lt;br /&gt;
				add_parameter (k, v, args, list)								-- add all other parameters to args in the style dictated by list; alias map only supported for local-template parameters&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if _include_positional then&lt;br /&gt;
		for i, v in ipairs (pframe_args) do										-- pass along positional parameters&lt;br /&gt;
			if &#039;unset&#039; == v:lower() then										-- special keyword to unset &#039;default&#039; parameters set in the wrapper template&lt;br /&gt;
				v = &#039;&#039;;															-- unset the value in the args table&lt;br /&gt;
			end&lt;br /&gt;
			add_parameter (i, v, args, list);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; _ M A I N &amp;gt;--------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Collect the various default and live parameters into args styled according to boolean list.&lt;br /&gt;
&lt;br /&gt;
returns name of the working or listed template or nil for an error message&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function _main (frame, args, list)&lt;br /&gt;
	local template;&lt;br /&gt;
	local exclude = {};															-- table of parameter names for parameters that are not passed to the working template&lt;br /&gt;
	local reuse_list = {};														-- table of pframe parameter names whose values are modified before they are passed to the working template as the same name&lt;br /&gt;
	local alias_map = {};														-- table that maps parameter aliases to working template canonical parameter names&lt;br /&gt;
	local _include_positional;&lt;br /&gt;
	&lt;br /&gt;
	if frame.args._exclude and (&#039;&#039; ~= frame.args._exclude) then					-- if there is |_exclude= and it&#039;s not empty&lt;br /&gt;
		exclude = mw.text.split (frame.args._exclude, &amp;quot;%s*,%s*&amp;quot;);				-- make a table from its contents&lt;br /&gt;
	end&lt;br /&gt;
																				-- TODO: |_reuse= needs a better name (|_reuse=)&lt;br /&gt;
	if frame.args._reuse and (&#039;&#039; ~= frame.args._reuse) then					-- if there is |_reuse= and it&#039;s not empty&lt;br /&gt;
		reuse_list = mw.text.split (frame.args._reuse, &amp;quot;%s*,%s*&amp;quot;);				-- make a table from its contents&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if frame.args[&#039;_alias-map&#039;] and (&#039;&#039; ~= frame.args[&#039;_alias-map&#039;]) then		-- if there is |_alias-map= and it&#039;s not empty&lt;br /&gt;
		alias_map = alias_map_get (frame.args[&#039;_alias-map&#039;]);					-- make a table from its contents&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	template = frame_args_get (frame.args, args, list);							-- get parameters provided in the {{#invoke:template wrapper|...|...}}&lt;br /&gt;
	if nil == template or &#039;&#039; == template then									-- this is the one parameter that is required by this module&lt;br /&gt;
		return nil;																-- not present, tell calling function to emit an error message&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	_include_positional = &#039;yes&#039; == frame.args[&#039;_include-positional&#039;];			-- when true pass all positional parameters along with non-excluded named parameters to ...&lt;br /&gt;
																				-- ... the working template; positional parameters are not excludable&lt;br /&gt;
																				&lt;br /&gt;
	local _pframe_args = frame:getParent().args;								-- here we get the wrapper template&#039;s &#039;live&#039; parameters from pframe.args&lt;br /&gt;
	local pframe_args = {};														-- a local table that we can modify&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs (_pframe_args) do											-- make a copy that we can modify&lt;br /&gt;
		pframe_args[k] = v;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
-- here we look for pframe parameters that are aliases of canonical parameter names; when found&lt;br /&gt;
-- we replace the alias with the canonical.  We do this here because the reuse_list works on&lt;br /&gt;
-- canonical parameter names so first we convert alias parameter names to canonical names and then&lt;br /&gt;
-- we remove those canonical names from the pframe table that are reused (provided to the working&lt;br /&gt;
-- template through the frame args table)&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs (alias_map) do											-- k is alias name, v is canonical name&lt;br /&gt;
		if pframe_args[k] then													-- if pframe_args has parameter with alias name&lt;br /&gt;
			pframe_args[v] = _pframe_args[k];									-- create new canonical name with alias&#039; value&lt;br /&gt;
			pframe_args[k] = nil;												-- unset the alias&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs (pframe_args) do											-- do enumerated parameter alias -&amp;gt; canonical translation&lt;br /&gt;
		if &#039;string&#039; == type (k) then											-- only named parameters can be enumerated&lt;br /&gt;
			if alias_map[k..&#039;#&#039;] then											-- non-enumerated alias matches enumerated parameter pattern? enumerator at end only&lt;br /&gt;
				pframe_args[mw.ustring.gsub(alias_map[k..&#039;#&#039;], &#039;#&#039;, &#039;&#039;)] = v;				-- remove &#039;#&#039; and copy parameter to pframe_args table&lt;br /&gt;
				pframe_args[k] = nil;											-- unset the alias&lt;br /&gt;
			elseif mw.ustring.match (k, &#039;%d+&#039;) then											-- if this parameter name contains digits&lt;br /&gt;
				local temp = mw.ustring.gsub (k, &#039;%d+&#039;, &#039;#&#039;);								-- make a copy; digits replaced with single &#039;#&#039;&lt;br /&gt;
				local enum = mw.ustring.match (k, &#039;%d+&#039;);									-- get the enumerator&lt;br /&gt;
				&lt;br /&gt;
				if alias_map[temp] then											-- if this parameter is a recognized enumerated alias&lt;br /&gt;
					pframe_args[mw.ustring.gsub(alias_map[temp], &#039;#&#039;, enum)] = v;			-- use canonical name and replace &#039;#&#039; with enumerator and add to pframe_args&lt;br /&gt;
					pframe_args[k] = nil;										-- unset the alias&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
-- pframe parameters that are _reused are &#039;reused&#039; have the form something like this:&lt;br /&gt;
--	|chapter=[[wikisource:{{{chapter}}}|{{{chapter}}}]]&lt;br /&gt;
-- where a parameter in the wrapping template is modified and then passed to the working template&lt;br /&gt;
-- using the same parameter name (in this example |chapter=)&lt;br /&gt;
&lt;br /&gt;
																				-- remove parameters that will be reused&lt;br /&gt;
	for k, v in ipairs (reuse_list) do											-- k is numerical index, v is canonical parameter name to ignore&lt;br /&gt;
		if pframe_args[v] then													-- if pframe_args has parameter that should be ignored&lt;br /&gt;
			pframe_args[v] = nil;												-- unset the ignored parameter&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	pframe_args_get (pframe_args, args, exclude, _include_positional, list);	-- add parameters and values to args that are not listed in the exclude table&lt;br /&gt;
&lt;br /&gt;
	return template;															-- args now has all default and live parameters, return working template name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; W R A P &amp;gt;----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Template entry point.  Call this function to &#039;execute&#039; the working template&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function wrap (frame)&lt;br /&gt;
	local args = {};															-- table of default and live parameters and their values to be passed to the wrapped template&lt;br /&gt;
	local template;																-- the name of the working template&lt;br /&gt;
&lt;br /&gt;
	template = _main (frame, args, false);										-- get default and live parameters and the name of the working template&lt;br /&gt;
	if not template then														-- template name is required&lt;br /&gt;
		return error_msg;														-- emit error message and abandon if template name not present&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return frame:expandTemplate {title=template, args=args};					-- render the working template&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; L I S T &amp;gt;----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Template entry point.  Call this function to &#039;display&#039; the source for the working template.  This function added&lt;br /&gt;
as a result of a TfD here: Wikipedia:Templates_for_discussion/Log/2018_April_28#Module:PassArguments&lt;br /&gt;
&lt;br /&gt;
This function replaces a similarly named function which was used in {{cite compare}} and {{cite compare2}}&lt;br /&gt;
&lt;br /&gt;
Values in the args table are numerically indexed strings in the form &#039;name=value&#039;&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function list(frame, do_link)&lt;br /&gt;
	local args = {};						-- table of default and live parameters and their values to be passed to the listed template&lt;br /&gt;
	local template;							-- the name of the listed template&lt;br /&gt;
&lt;br /&gt;
	template = _main (frame, args, true);	-- get default and live parameters and the name of the listed template&lt;br /&gt;
	if not template then					-- template name is required&lt;br /&gt;
		return error_msg;					-- emit error message and abandon if template name not present&lt;br /&gt;
	end&lt;br /&gt;
	if do_link then&lt;br /&gt;
		template = mw.ustring.format((&#039;[[%s|%s]]&#039;), frame:expandTemplate{ title=&#039;Transclude&#039;, args = {template} }, template)&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(args)&lt;br /&gt;
	for i = 1, #args do&lt;br /&gt;
		local stripped = mw.ustring.match(args[i], &#039;^&#039; .. i .. &#039;=([^=]*)$&#039;)&lt;br /&gt;
		if stripped then args[i] = stripped else break end&lt;br /&gt;
	end&lt;br /&gt;
	return frame:preprocess(table.concat({&lt;br /&gt;
		&#039;&amp;lt;code style=&amp;quot;color:inherit; background:inherit; border:none;&amp;quot;&amp;gt;&amp;amp;#123;&amp;amp;#123;&#039;,&lt;br /&gt;
		template,&lt;br /&gt;
		(&#039;&amp;lt;wbr&amp;gt;&amp;lt;nowiki&amp;gt;|%s&amp;lt;/nowiki&amp;gt;&#039;):rep(#args):format(unpack(args)), &#039;&amp;amp;#125;&amp;amp;#125;&amp;lt;/code&amp;gt;&#039;}));	-- render the template&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function link (frame)&lt;br /&gt;
	return list(frame, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; E X P O R T E D   F U N C T I O N S &amp;gt;------------------------------------------&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	link = link,&lt;br /&gt;
	list = list,&lt;br /&gt;
	wrap = wrap,&lt;br /&gt;
	};&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Template_link_general/doc&amp;diff=2044</id>
		<title>پودمان:Template link general/doc</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Template_link_general/doc&amp;diff=2044"/>
		<updated>2026-06-25T09:35:11Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{used in system}}&lt;br /&gt;
{{High risk}}&lt;br /&gt;
Implements {{Tl|Template link general}} and other templates in its family&lt;br /&gt;
&lt;br /&gt;
==Basic usage==&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:template link general|main}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
This module is used by {{t|template link general}} and related templates to display links to templates. It is similar to {{t|tl}} but with additional formatting options and the ability to include parameters in the display. See {{slink|Template:Template_link_general#Parameters}} for the full list, which can be enabled by passing any value to them (such as &amp;quot;on&amp;quot;, &amp;quot;yes&amp;quot;, etc).&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Template_link_general&amp;diff=2041</id>
		<title>پودمان:Template link general</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Template_link_general&amp;diff=2041"/>
		<updated>2026-06-25T09:35:11Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This implements Template:Tlg&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Is a string non-empty?&lt;br /&gt;
local function _ne(s) &lt;br /&gt;
	return s ~= nil and s ~= &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local nw = mw.text.nowiki&lt;br /&gt;
&lt;br /&gt;
local function addTemplate(s)&lt;br /&gt;
	local i, _ = s:find(&#039;:&#039;, 1, true)&lt;br /&gt;
	if i == nil then&lt;br /&gt;
		return &#039;Template:&#039; .. s&lt;br /&gt;
	end&lt;br /&gt;
	local ns = s:sub(1, i - 1)&lt;br /&gt;
	if ns == &#039;&#039; or mw.site.namespaces[ns] then&lt;br /&gt;
		return s&lt;br /&gt;
	else&lt;br /&gt;
		return &#039;Template:&#039; .. s&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function trimTemplate(s)&lt;br /&gt;
	local needle = &#039;template:&#039;&lt;br /&gt;
	if s:sub(1, needle:len()):lower() == needle then&lt;br /&gt;
		return s:sub(needle:len() + 1)	&lt;br /&gt;
	else&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function linkTitle(args)&lt;br /&gt;
	if _ne(args.nolink) then&lt;br /&gt;
		return args[&#039;1&#039;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local titleObj&lt;br /&gt;
	local titlePart = &#039;[[&#039;&lt;br /&gt;
	if args[&#039;1&#039;] then&lt;br /&gt;
		-- This handles :Page and other NS&lt;br /&gt;
		titleObj = mw.title.new(args[&#039;1&#039;], &#039;Template&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		titleObj = mw.title.getCurrentTitle()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	titlePart = titlePart .. (titleObj ~= nil and titleObj.fullText or&lt;br /&gt;
				addTemplate(args[&#039;1&#039;]))&lt;br /&gt;
	&lt;br /&gt;
	local textPart = args.alttext&lt;br /&gt;
	if not _ne(textPart) then&lt;br /&gt;
		if titleObj ~= nil then&lt;br /&gt;
			textPart = titleObj:inNamespace(&amp;quot;Template&amp;quot;) and args[&#039;1&#039;] or titleObj.fullText&lt;br /&gt;
		else&lt;br /&gt;
			-- redlink&lt;br /&gt;
			textPart = args[&#039;1&#039;]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if _ne(args.subst) then&lt;br /&gt;
		-- HACK: the ns thing above is probably broken&lt;br /&gt;
		textPart = &#039;subst:&#039; .. textPart&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if _ne(args.brace) then&lt;br /&gt;
		textPart = nw(&#039;{{&#039;) .. textPart .. nw(&#039;}}&#039;)&lt;br /&gt;
	elseif _ne(args.braceinside) then&lt;br /&gt;
		textPart = nw(&#039;{&#039;) .. textPart .. nw(&#039;}&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	titlePart = titlePart .. &#039;|&#039; .. textPart .. &#039;]]&#039;&lt;br /&gt;
	if _ne(args.braceinside) then&lt;br /&gt;
		titlePart = nw(&#039;{&#039;) .. titlePart .. nw(&#039;}&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return titlePart&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame, {&lt;br /&gt;
		trim = true,&lt;br /&gt;
		removeBlanks = false&lt;br /&gt;
	})&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local bold = _ne(args.bold) or _ne(args.boldlink) or _ne(args.boldname)&lt;br /&gt;
	local italic = _ne(args.italic) or _ne(args.italics)&lt;br /&gt;
	local dontBrace = _ne(args.brace) or _ne(args.braceinside)&lt;br /&gt;
	local code = _ne(args.code) or _ne(args.tt)&lt;br /&gt;
	&lt;br /&gt;
	-- Build the link part&lt;br /&gt;
	local titlePart = linkTitle(args)&lt;br /&gt;
	if bold then titlePart = &amp;quot;&#039;&#039;&#039;&amp;quot; .. titlePart .. &amp;quot;&#039;&#039;&#039;&amp;quot; end&lt;br /&gt;
	if _ne(args.nowrapname) then titlePart = &#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&#039; .. titlePart .. &#039;&amp;lt;/span&amp;gt;&#039; end&lt;br /&gt;
	&lt;br /&gt;
	-- Build the arguments&lt;br /&gt;
	local textPart = &amp;quot;&amp;quot;&lt;br /&gt;
	for i = 2, 11 do&lt;br /&gt;
		local ii = tostring(i)&lt;br /&gt;
		local val = args[ii]&lt;br /&gt;
		if val ~= nil then val = mw.text.unstripNoWiki(val) else break end&lt;br /&gt;
		if _ne(args.nowiki) then val = nw(val) end&lt;br /&gt;
		if italic then val = &#039;&amp;lt;span style=&amp;quot;font-style:italic;&amp;quot;&amp;gt;&#039; .. val .. &#039;&amp;lt;/span&amp;gt;&#039; end&lt;br /&gt;
		textPart = textPart .. &#039;&amp;amp;#124;&#039; .. val&lt;br /&gt;
	end&lt;br /&gt;
	if _ne(args[&#039;12&#039;]) then textPart = textPart .. &#039;&amp;amp;#124;…&#039; end&lt;br /&gt;
	&lt;br /&gt;
	-- final wrap&lt;br /&gt;
	local ret = titlePart .. textPart&lt;br /&gt;
	if not dontBrace then ret = nw(&#039;{{&#039;) .. ret .. nw(&#039;}}&#039;) end&lt;br /&gt;
	if _ne(args.a) then ret = nw(&#039;*&#039;) .. &#039;&amp;amp;nbsp;&#039; .. ret end&lt;br /&gt;
	if _ne(args.kbd) then ret = &#039;&amp;lt;kbd&amp;gt;&#039; .. ret .. &#039;&amp;lt;/kbd&amp;gt;&#039; end&lt;br /&gt;
	if code then&lt;br /&gt;
		ret = &#039;&amp;lt;code&amp;gt;&#039; .. ret .. &#039;&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
	elseif _ne(args.plaincode) then&lt;br /&gt;
		ret = &#039;&amp;lt;code style=&amp;quot;border:none;background:transparent;&amp;quot;&amp;gt;&#039; .. ret .. &#039;&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if _ne(args.nowrap) then ret = &#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&#039; .. ret .. &#039;&amp;lt;/span&amp;gt;&#039; end&lt;br /&gt;
	&lt;br /&gt;
	--[[ Wrap as html?? &lt;br /&gt;
	local span = mw.html.create(&#039;span&#039;)&lt;br /&gt;
	span:wikitext(ret)&lt;br /&gt;
	--]]&lt;br /&gt;
	if _ne(args.debug) then ret = ret .. &#039;\n&amp;lt;pre&amp;gt;&#039; .. mw.text.encode(mw.dumpObject(args)) .. &#039;&amp;lt;/pre&amp;gt;&#039; end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:TableTools&amp;diff=2038</id>
		<title>پودمان:TableTools</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:TableTools&amp;diff=2038"/>
		<updated>2026-06-25T09:35:11Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--                               TableTools                                       --&lt;br /&gt;
--                                                                                --&lt;br /&gt;
-- This module includes a number of functions for dealing with Lua tables.        --&lt;br /&gt;
-- It is a meta-module, meant to be called from other Lua modules, and should     --&lt;br /&gt;
-- not be called directly from #invoke.                                           --&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Define often-used variables and functions.&lt;br /&gt;
local floor = math.floor&lt;br /&gt;
local infinity = math.huge&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local checkTypeMulti = libraryUtil.checkTypeMulti&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isPositiveInteger&lt;br /&gt;
--&lt;br /&gt;
-- This function returns true if the given value is a positive integer, and false&lt;br /&gt;
-- if not. Although it doesn&#039;t operate on tables, it is included here as it is&lt;br /&gt;
-- useful for determining whether a given table key is in the array part or the&lt;br /&gt;
-- hash part of a table.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.isPositiveInteger(v)&lt;br /&gt;
	return type(v) == &#039;number&#039; and v &amp;gt;= 1 and floor(v) == v and v &amp;lt; infinity&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isNan&lt;br /&gt;
--&lt;br /&gt;
-- This function returns true if the given number is a NaN value, and false&lt;br /&gt;
-- if not. Although it doesn&#039;t operate on tables, it is included here as it is&lt;br /&gt;
-- useful for determining whether a value can be a valid table key. Lua will&lt;br /&gt;
-- generate an error if a NaN is used as a table key.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.isNan(v)&lt;br /&gt;
	return type(v) == &#039;number&#039; and tostring(v) == &#039;-nan&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- shallowClone&lt;br /&gt;
--&lt;br /&gt;
-- This returns a clone of a table. The value returned is a new table, but all&lt;br /&gt;
-- subtables and functions are shared. Metamethods are respected, but the returned&lt;br /&gt;
-- table will have no metatable of its own.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.shallowClone(t)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		ret[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- removeDuplicates&lt;br /&gt;
--&lt;br /&gt;
-- This removes duplicate values from an array. Non-positive-integer keys are&lt;br /&gt;
-- ignored. The earliest value is kept, and all subsequent duplicate values are&lt;br /&gt;
-- removed, but otherwise the array order is unchanged.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.removeDuplicates(t)&lt;br /&gt;
	checkType(&#039;removeDuplicates&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local isNan = p.isNan&lt;br /&gt;
	local ret, exists = {}, {}&lt;br /&gt;
	for i, v in ipairs(t) do&lt;br /&gt;
		if isNan(v) then&lt;br /&gt;
			-- NaNs can&#039;t be table keys, and they are also unique, so we don&#039;t need to check existence.&lt;br /&gt;
			ret[#ret + 1] = v&lt;br /&gt;
		else&lt;br /&gt;
			if not exists[v] then&lt;br /&gt;
				ret[#ret + 1] = v&lt;br /&gt;
				exists[v] = true&lt;br /&gt;
			end&lt;br /&gt;
		end	&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end			&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- numKeys&lt;br /&gt;
--&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of any numerical&lt;br /&gt;
-- keys that have non-nil values, sorted in numerical order.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.numKeys(t)&lt;br /&gt;
	checkType(&#039;numKeys&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local isPositiveInteger = p.isPositiveInteger&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		if isPositiveInteger(k) then&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- affixNums&lt;br /&gt;
--&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of keys with the&lt;br /&gt;
-- specified prefix and suffix. For example, for the table&lt;br /&gt;
-- {a1 = &#039;foo&#039;, a3 = &#039;bar&#039;, a6 = &#039;baz&#039;} and the prefix &amp;quot;a&amp;quot;, affixNums will&lt;br /&gt;
-- return {1, 3, 6}.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.affixNums(t, prefix, suffix)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 2, prefix, &#039;string&#039;, true)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 3, suffix, &#039;string&#039;, true)&lt;br /&gt;
&lt;br /&gt;
	local function cleanPattern(s)&lt;br /&gt;
		-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.&lt;br /&gt;
		return s:gsub(&#039;([%(%)%%%.%[%]%*%+%-%?%^%$])&#039;, &#039;%%%1&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	prefix = prefix or &#039;&#039;&lt;br /&gt;
	suffix = suffix or &#039;&#039;&lt;br /&gt;
	prefix = cleanPattern(prefix)&lt;br /&gt;
	suffix = cleanPattern(suffix)&lt;br /&gt;
	local pattern = &#039;^&#039; .. prefix .. &#039;([1-9]%d*)&#039; .. suffix .. &#039;$&#039;&lt;br /&gt;
&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		if type(k) == &#039;string&#039; then			&lt;br /&gt;
			local num = mw.ustring.match(k, pattern)&lt;br /&gt;
			if num then&lt;br /&gt;
				nums[#nums + 1] = tonumber(num)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- numData&lt;br /&gt;
--&lt;br /&gt;
-- Given a table with keys like (&amp;quot;foo1&amp;quot;, &amp;quot;bar1&amp;quot;, &amp;quot;foo2&amp;quot;, &amp;quot;baz2&amp;quot;), returns a table&lt;br /&gt;
-- of subtables in the format &lt;br /&gt;
-- { [1] = {foo = &#039;text&#039;, bar = &#039;text&#039;}, [2] = {foo = &#039;text&#039;, baz = &#039;text&#039;} }&lt;br /&gt;
-- Keys that don&#039;t end with an integer are stored in a subtable named &amp;quot;other&amp;quot;.&lt;br /&gt;
-- The compress option compresses the table so that it can be iterated over with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.numData(t, compress)&lt;br /&gt;
	checkType(&#039;numData&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;numData&#039;, 2, compress, &#039;boolean&#039;, true)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		local prefix, num = mw.ustring.match(tostring(k), &#039;^([^0-9]*)([1-9][0-9]*)$&#039;)&lt;br /&gt;
		if num then&lt;br /&gt;
			num = tonumber(num)&lt;br /&gt;
			local subtable = ret[num] or {}&lt;br /&gt;
			if prefix == &#039;&#039; then&lt;br /&gt;
				-- Positional parameters match the blank string; put them at the start of the subtable instead.&lt;br /&gt;
				prefix = 1&lt;br /&gt;
			end&lt;br /&gt;
			subtable[prefix] = v&lt;br /&gt;
			ret[num] = subtable&lt;br /&gt;
		else&lt;br /&gt;
			local subtable = ret.other or {}&lt;br /&gt;
			subtable[k] = v&lt;br /&gt;
			ret.other = subtable&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if compress then&lt;br /&gt;
		local other = ret.other&lt;br /&gt;
		ret = p.compressSparseArray(ret)&lt;br /&gt;
		ret.other = other&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- compressSparseArray&lt;br /&gt;
--&lt;br /&gt;
-- This takes an array with one or more nil values, and removes the nil values&lt;br /&gt;
-- while preserving the order, so that the array can be safely traversed with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.compressSparseArray(t)&lt;br /&gt;
	checkType(&#039;compressSparseArray&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nums = p.numKeys(t)&lt;br /&gt;
	for _, num in ipairs(nums) do&lt;br /&gt;
		ret[#ret + 1] = t[num]&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- sparseIpairs&lt;br /&gt;
--&lt;br /&gt;
-- This is an iterator for sparse arrays. It can be used like ipairs, but can&lt;br /&gt;
-- handle nil values.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.sparseIpairs(t)&lt;br /&gt;
	checkType(&#039;sparseIpairs&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local nums = p.numKeys(t)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	local lim = #nums&lt;br /&gt;
	return function ()&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if i &amp;lt;= lim then&lt;br /&gt;
			local key = nums[i]&lt;br /&gt;
			return key, t[key]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- size&lt;br /&gt;
--&lt;br /&gt;
-- This returns the size of a key/value pair table. It will also work on arrays,&lt;br /&gt;
-- but for arrays it is more efficient to use the # operator.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
function p.size(t)&lt;br /&gt;
	checkType(&#039;size&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for k in pairs(t) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return i&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function defaultKeySort(item1, item2)&lt;br /&gt;
	-- &amp;quot;number&amp;quot; &amp;lt; &amp;quot;string&amp;quot;, so numbers will be sorted before strings.&lt;br /&gt;
	local type1, type2 = type(item1), type(item2)&lt;br /&gt;
	if type1 ~= type2 then&lt;br /&gt;
		return type1 &amp;lt; type2&lt;br /&gt;
	else -- This will fail with table, boolean, function.&lt;br /&gt;
		return item1 &amp;lt; item2&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Returns a list of the keys in a table, sorted using either a default&lt;br /&gt;
	comparison function or a custom keySort function.&lt;br /&gt;
]]&lt;br /&gt;
function p.keysToList(t, keySort, checked)&lt;br /&gt;
	if not checked then&lt;br /&gt;
		checkType(&#039;keysToList&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
		checkTypeMulti(&#039;keysToList&#039;, 2, keySort, { &#039;function&#039;, &#039;boolean&#039;, &#039;nil&#039; })&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local list = {}&lt;br /&gt;
	local index = 1&lt;br /&gt;
	for key, value in pairs(t) do&lt;br /&gt;
		list[index] = key&lt;br /&gt;
		index = index + 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if keySort ~= false then&lt;br /&gt;
		keySort = type(keySort) == &#039;function&#039; and keySort or defaultKeySort&lt;br /&gt;
		&lt;br /&gt;
		table.sort(list, keySort)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return list&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Iterates through a table, with the keys sorted using the keysToList function.&lt;br /&gt;
	If there are only numerical keys, sparseIpairs is probably more efficient.&lt;br /&gt;
]]&lt;br /&gt;
function p.sortedPairs(t, keySort)&lt;br /&gt;
	checkType(&#039;sortedPairs&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;sortedPairs&#039;, 2, keySort, &#039;function&#039;, true)&lt;br /&gt;
	&lt;br /&gt;
	local list = p.keysToList(t, keySort, true)&lt;br /&gt;
	&lt;br /&gt;
	local i = 0&lt;br /&gt;
	return function()&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		local key = list[i]&lt;br /&gt;
		if key ~= nil then&lt;br /&gt;
			return key, t[key]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Returns true if all keys in the table are consecutive integers starting at 1.&lt;br /&gt;
--]]&lt;br /&gt;
function p.isArray(t)&lt;br /&gt;
	checkType(&amp;quot;isArray&amp;quot;, 1, t, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if t[i] == nil then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- { &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot; } -&amp;gt; { a = 1, b = 2, c = 3 }&lt;br /&gt;
function p.invert(array)&lt;br /&gt;
	checkType(&amp;quot;invert&amp;quot;, 1, array, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local map = {}&lt;br /&gt;
	for i, v in ipairs(array) do&lt;br /&gt;
		map[v] = i&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return map&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	{ &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot; } -&amp;gt; { [&amp;quot;a&amp;quot;] = true, [&amp;quot;b&amp;quot;] = true, [&amp;quot;c&amp;quot;] = true }&lt;br /&gt;
--]]&lt;br /&gt;
function p.listToSet(t)&lt;br /&gt;
	checkType(&amp;quot;listToSet&amp;quot;, 1, t, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local set = {}&lt;br /&gt;
	for _, item in ipairs(t) do&lt;br /&gt;
		set[item] = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return set&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Recursive deep copy function.&lt;br /&gt;
	Preserves identities of subtables.&lt;br /&gt;
	&lt;br /&gt;
]]&lt;br /&gt;
local function _deepCopy(orig, includeMetatable, already_seen)&lt;br /&gt;
	-- Stores copies of tables indexed by the original table.&lt;br /&gt;
	already_seen = already_seen or {}&lt;br /&gt;
	&lt;br /&gt;
	local copy = already_seen[orig]&lt;br /&gt;
	if copy ~= nil then&lt;br /&gt;
		return copy&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if type(orig) == &#039;table&#039; then&lt;br /&gt;
		copy = {}&lt;br /&gt;
		for orig_key, orig_value in pairs(orig) do&lt;br /&gt;
			copy[deepcopy(orig_key, includeMetatable, already_seen)] = deepcopy(orig_value, includeMetatable, already_seen)&lt;br /&gt;
		end&lt;br /&gt;
		already_seen[orig] = copy&lt;br /&gt;
		&lt;br /&gt;
		if includeMetatable then&lt;br /&gt;
			local mt = getmetatable(orig)&lt;br /&gt;
			if mt ~= nil then&lt;br /&gt;
				local mt_copy = deepcopy(mt, includeMetatable, already_seen)&lt;br /&gt;
				setmetatable(copy, mt_copy)&lt;br /&gt;
				already_seen[mt] = mt_copy&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else -- number, string, boolean, etc&lt;br /&gt;
		copy = orig&lt;br /&gt;
	end&lt;br /&gt;
	return copy&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.deepCopy(orig, noMetatable, already_seen)&lt;br /&gt;
	checkType(&amp;quot;deepCopy&amp;quot;, 3, already_seen, &amp;quot;table&amp;quot;, true)&lt;br /&gt;
	&lt;br /&gt;
	return _deepCopy(orig, not noMetatable, already_seen)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Concatenates all values in the table that are indexed by a number, in order.&lt;br /&gt;
	sparseConcat{ a, nil, c, d }  =&amp;gt;  &amp;quot;acd&amp;quot;&lt;br /&gt;
	sparseConcat{ nil, b, c, d }  =&amp;gt;  &amp;quot;bcd&amp;quot;&lt;br /&gt;
]]&lt;br /&gt;
function p.sparseConcat(t, sep, i, j)&lt;br /&gt;
	local list = {}&lt;br /&gt;
	&lt;br /&gt;
	local list_i = 0&lt;br /&gt;
	for _, v in p.sparseIpairs(t) do&lt;br /&gt;
		list_i = list_i + 1&lt;br /&gt;
		list[list_i] = v&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(list, sep, i, j)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- Finds the length of an array, or of a quasi-array with keys such&lt;br /&gt;
-- as &amp;quot;data1&amp;quot;, &amp;quot;data2&amp;quot;, etc., using an exponential search algorithm. &lt;br /&gt;
-- It is similar to the operator #, but may return&lt;br /&gt;
-- a different value when there are gaps in the array portion of the table.&lt;br /&gt;
-- Intended to be used on data loaded with mw.loadData. For other tables, use #.&lt;br /&gt;
-- Note: #frame.args in frame object always be set to 0, regardless of &lt;br /&gt;
-- the number of unnamed template parameters, so use this function for&lt;br /&gt;
-- frame.args.&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
function p.length(t, prefix)&lt;br /&gt;
	-- requiring module inline so that [[Module:Exponential search]]&lt;br /&gt;
	-- which is only needed by this one function&lt;br /&gt;
	-- doesn&#039;t get millions of transclusions&lt;br /&gt;
	local expSearch = require(&amp;quot;Module:Exponential search&amp;quot;)&lt;br /&gt;
	checkType(&#039;length&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;length&#039;, 2, prefix, &#039;string&#039;, true)&lt;br /&gt;
	return expSearch(function(i)&lt;br /&gt;
		local key&lt;br /&gt;
		if prefix then&lt;br /&gt;
			key = prefix .. tostring(i)&lt;br /&gt;
		else&lt;br /&gt;
			key = i&lt;br /&gt;
		end&lt;br /&gt;
		return t[key] ~= nil&lt;br /&gt;
	end) or 0&lt;br /&gt;
end&lt;br /&gt;
function p.inArray(arr, valueToFind)&lt;br /&gt;
	checkType(&amp;quot;inArray&amp;quot;, 1, arr, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	-- if valueToFind is nil, error?&lt;br /&gt;
	&lt;br /&gt;
	for _, v in ipairs(arr) do&lt;br /&gt;
		if v == valueToFind then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:String&amp;diff=2035</id>
		<title>پودمان:String</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:String&amp;diff=2035"/>
		<updated>2026-06-25T09:35:10Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[&lt;br /&gt;
&lt;br /&gt;
This module is intended to provide access to basic string functions.&lt;br /&gt;
&lt;br /&gt;
Most of the functions provided here can be invoked with named parameters,&lt;br /&gt;
unnamed parameters, or a mixture.  If named parameters are used, Mediawiki will&lt;br /&gt;
automatically remove any leading or trailing whitespace from the parameter.&lt;br /&gt;
Depending on the intended use, it may be advantageous to either preserve or&lt;br /&gt;
remove such whitespace.&lt;br /&gt;
&lt;br /&gt;
Global options&lt;br /&gt;
    ignore_errors: If set to &#039;true&#039; or 1, any error condition will result in&lt;br /&gt;
        an empty string being returned rather than an error message.&lt;br /&gt;
&lt;br /&gt;
    error_category: If an error occurs, specifies the name of a category to&lt;br /&gt;
        include with the error message.  The default category is&lt;br /&gt;
        [Category:Errors reported by Module String].&lt;br /&gt;
&lt;br /&gt;
    no_category: If set to &#039;true&#039; or 1, no category will be added if an error&lt;br /&gt;
        is generated.&lt;br /&gt;
&lt;br /&gt;
Unit tests for this module are available at Module:String/tests.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local str = {}&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
len&lt;br /&gt;
&lt;br /&gt;
This function returns the length of the target string.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|len|target_string|}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|len|s=target_string}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    s: The string whose length to report&lt;br /&gt;
&lt;br /&gt;
If invoked using named parameters, Mediawiki will automatically remove any leading or&lt;br /&gt;
trailing whitespace from the target string.&lt;br /&gt;
]]&lt;br /&gt;
function str.len( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {&#039;s&#039;} )&lt;br /&gt;
	local s = new_args[&#039;s&#039;] or &#039;&#039;&lt;br /&gt;
	return mw.ustring.len( s )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
sub&lt;br /&gt;
&lt;br /&gt;
This function returns a substring of the target string at specified indices.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|sub|target_string|start_index|end_index}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|sub|s=target_string|i=start_index|j=end_index}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    s: The string to return a subset of&lt;br /&gt;
    i: The fist index of the substring to return, defaults to 1.&lt;br /&gt;
    j: The last index of the string to return, defaults to the last character.&lt;br /&gt;
&lt;br /&gt;
The first character of the string is assigned an index of 1.  If either i or j&lt;br /&gt;
is a negative value, it is interpreted the same as selecting a character by&lt;br /&gt;
counting from the end of the string.  Hence, a value of -1 is the same as&lt;br /&gt;
selecting the last character of the string.&lt;br /&gt;
&lt;br /&gt;
If the requested indices are out of range for the given string, an error is&lt;br /&gt;
reported.&lt;br /&gt;
]]&lt;br /&gt;
function str.sub( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, { &#039;s&#039;, &#039;i&#039;, &#039;j&#039; } )&lt;br /&gt;
	local s = new_args[&#039;s&#039;] or &#039;&#039;&lt;br /&gt;
	local i = tonumber( new_args[&#039;i&#039;] ) or 1&lt;br /&gt;
	local j = tonumber( new_args[&#039;j&#039;] ) or -1&lt;br /&gt;
&lt;br /&gt;
	local len = mw.ustring.len( s )&lt;br /&gt;
&lt;br /&gt;
	-- Convert negatives for range checking&lt;br /&gt;
	if i &amp;lt; 0 then&lt;br /&gt;
		i = len + i + 1&lt;br /&gt;
	end&lt;br /&gt;
	if j &amp;lt; 0 then&lt;br /&gt;
		j = len + j + 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if i &amp;gt; len or j &amp;gt; len or i &amp;lt; 1 or j &amp;lt; 1 then&lt;br /&gt;
		return str._error( &#039;String subset index out of range&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if j &amp;lt; i then&lt;br /&gt;
		return str._error( &#039;String subset indices out of order&#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mw.ustring.sub( s, i, j )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
This function implements that features of {{str sub old}} and is kept in order&lt;br /&gt;
to maintain these older templates.&lt;br /&gt;
]]&lt;br /&gt;
function str.sublength( frame )&lt;br /&gt;
	local i = tonumber( frame.args.i ) or 0&lt;br /&gt;
	local len = tonumber( frame.args.len )&lt;br /&gt;
	return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
_match&lt;br /&gt;
&lt;br /&gt;
This function returns a substring from the source string that matches a&lt;br /&gt;
specified pattern. It is exported for use in other modules&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
strmatch = require(&amp;quot;Module:String&amp;quot;)._match&lt;br /&gt;
sresult = strmatch( s, pattern, start, match, plain, nomatch )&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    s: The string to search&lt;br /&gt;
    pattern: The pattern or string to find within the string&lt;br /&gt;
    start: The index within the source string to start the search.  The first&lt;br /&gt;
        character of the string has index 1.  Defaults to 1.&lt;br /&gt;
    match: In some cases it may be possible to make multiple matches on a single&lt;br /&gt;
        string.  This specifies which match to return, where the first match is&lt;br /&gt;
        match= 1.  If a negative number is specified then a match is returned&lt;br /&gt;
        counting from the last match.  Hence match = -1 is the same as requesting&lt;br /&gt;
        the last match.  Defaults to 1.&lt;br /&gt;
    plain: A flag indicating that the pattern should be understood as plain&lt;br /&gt;
        text.  Defaults to false.&lt;br /&gt;
    nomatch: If no match is found, output the &amp;quot;nomatch&amp;quot; value rather than an error.&lt;br /&gt;
&lt;br /&gt;
For information on constructing Lua patterns, a form of [regular expression], see:&lt;br /&gt;
&lt;br /&gt;
* http://www.lua.org/manual/5.1/manual.html#5.4.1&lt;br /&gt;
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns&lt;br /&gt;
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
-- This sub-routine is exported for use in other modules&lt;br /&gt;
function str._match( s, pattern, start, match_index, plain_flag, nomatch )&lt;br /&gt;
	if s == &#039;&#039; then&lt;br /&gt;
		return str._error( &#039;Target string is empty&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if pattern == &#039;&#039; then&lt;br /&gt;
		return str._error( &#039;Pattern string is empty&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	start = tonumber(start) or 1&lt;br /&gt;
	if math.abs(start) &amp;lt; 1 or math.abs(start) &amp;gt; mw.ustring.len( s ) then&lt;br /&gt;
		return str._error( &#039;Requested start is out of range&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if match_index == 0 then&lt;br /&gt;
		return str._error( &#039;Match index is out of range&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if plain_flag then&lt;br /&gt;
		pattern = str._escapePattern( pattern )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local result&lt;br /&gt;
	if match_index == 1 then&lt;br /&gt;
		-- Find first match is simple case&lt;br /&gt;
		result = mw.ustring.match( s, pattern, start )&lt;br /&gt;
	else&lt;br /&gt;
		if start &amp;gt; 1 then&lt;br /&gt;
			s = mw.ustring.sub( s, start )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local iterator = mw.ustring.gmatch(s, pattern)&lt;br /&gt;
		if match_index &amp;gt; 0 then&lt;br /&gt;
			-- Forward search&lt;br /&gt;
			for w in iterator do&lt;br /&gt;
				match_index = match_index - 1&lt;br /&gt;
				if match_index == 0 then&lt;br /&gt;
					result = w&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- Reverse search&lt;br /&gt;
			local result_table = {}&lt;br /&gt;
			local count = 1&lt;br /&gt;
			for w in iterator do&lt;br /&gt;
				result_table[count] = w&lt;br /&gt;
				count = count + 1&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			result = result_table[ count + match_index ]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if result == nil then&lt;br /&gt;
		if nomatch == nil then&lt;br /&gt;
			return str._error( &#039;Match not found&#039; )&lt;br /&gt;
		else&lt;br /&gt;
			return nomatch&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return result&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
match&lt;br /&gt;
&lt;br /&gt;
This function returns a substring from the source string that matches a&lt;br /&gt;
specified pattern.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index&lt;br /&gt;
    |match=match_number|plain=plain_flag|nomatch=nomatch_output}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    s: The string to search&lt;br /&gt;
    pattern: The pattern or string to find within the string&lt;br /&gt;
    start: The index within the source string to start the search.  The first&lt;br /&gt;
        character of the string has index 1.  Defaults to 1.&lt;br /&gt;
    match: In some cases it may be possible to make multiple matches on a single&lt;br /&gt;
        string.  This specifies which match to return, where the first match is&lt;br /&gt;
        match= 1.  If a negative number is specified then a match is returned&lt;br /&gt;
        counting from the last match.  Hence match = -1 is the same as requesting&lt;br /&gt;
        the last match.  Defaults to 1.&lt;br /&gt;
    plain: A flag indicating that the pattern should be understood as plain&lt;br /&gt;
        text.  Defaults to false.&lt;br /&gt;
    nomatch: If no match is found, output the &amp;quot;nomatch&amp;quot; value rather than an error.&lt;br /&gt;
&lt;br /&gt;
If invoked using named parameters, Mediawiki will automatically remove any leading or&lt;br /&gt;
trailing whitespace from each string.  In some circumstances this is desirable, in&lt;br /&gt;
other cases one may want to preserve the whitespace.&lt;br /&gt;
&lt;br /&gt;
If the match_number or start_index are out of range for the string being queried, then&lt;br /&gt;
this function generates an error.  An error is also generated if no match is found.&lt;br /&gt;
If one adds the parameter ignore_errors=true, then the error will be suppressed and&lt;br /&gt;
an empty string will be returned on any failure.&lt;br /&gt;
&lt;br /&gt;
For information on constructing Lua patterns, a form of [regular expression], see:&lt;br /&gt;
&lt;br /&gt;
* http://www.lua.org/manual/5.1/manual.html#5.4.1&lt;br /&gt;
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns&lt;br /&gt;
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
-- This is the entry point for #invoke:String|match&lt;br /&gt;
function str.match( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {&#039;s&#039;, &#039;pattern&#039;, &#039;start&#039;, &#039;match&#039;, &#039;plain&#039;, &#039;nomatch&#039;} )&lt;br /&gt;
	local s = new_args[&#039;s&#039;] or &#039;&#039;&lt;br /&gt;
	local start = tonumber( new_args[&#039;start&#039;] ) or 1&lt;br /&gt;
	local plain_flag = str._getBoolean( new_args[&#039;plain&#039;] or false )&lt;br /&gt;
	local pattern = new_args[&#039;pattern&#039;] or &#039;&#039;&lt;br /&gt;
	local match_index = math.floor( tonumber(new_args[&#039;match&#039;]) or 1 )&lt;br /&gt;
	local nomatch = new_args[&#039;nomatch&#039;]&lt;br /&gt;
&lt;br /&gt;
	return str._match( s, pattern, start, match_index, plain_flag, nomatch )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
pos&lt;br /&gt;
&lt;br /&gt;
This function returns a single character from the target string at position pos.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|pos|target_string|index_value}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|pos|target=target_string|pos=index_value}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    target: The string to search&lt;br /&gt;
    pos: The index for the character to return&lt;br /&gt;
&lt;br /&gt;
If invoked using named parameters, Mediawiki will automatically remove any leading or&lt;br /&gt;
trailing whitespace from the target string.  In some circumstances this is desirable, in&lt;br /&gt;
other cases one may want to preserve the whitespace.&lt;br /&gt;
&lt;br /&gt;
The first character has an index value of 1.&lt;br /&gt;
&lt;br /&gt;
If one requests a negative value, this function will select a character by counting backwards&lt;br /&gt;
from the end of the string.  In other words pos = -1 is the same as asking for the last character.&lt;br /&gt;
&lt;br /&gt;
A requested value of zero, or a value greater than the length of the string returns an error.&lt;br /&gt;
]]&lt;br /&gt;
function str.pos( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {&#039;target&#039;, &#039;pos&#039;} )&lt;br /&gt;
	local target_str = new_args[&#039;target&#039;] or &#039;&#039;&lt;br /&gt;
	local pos = tonumber( new_args[&#039;pos&#039;] ) or 0&lt;br /&gt;
&lt;br /&gt;
	if pos == 0 or math.abs(pos) &amp;gt; mw.ustring.len( target_str ) then&lt;br /&gt;
		return str._error( &#039;String index out of range&#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mw.ustring.sub( target_str, pos, pos )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
str_find&lt;br /&gt;
&lt;br /&gt;
This function duplicates the behavior of {{str_find}}, including all of its quirks.&lt;br /&gt;
This is provided in order to support existing templates, but is NOT RECOMMENDED for&lt;br /&gt;
new code and templates.  New code is recommended to use the &amp;quot;find&amp;quot; function instead.&lt;br /&gt;
&lt;br /&gt;
Returns the first index in &amp;quot;source&amp;quot; that is a match to &amp;quot;target&amp;quot;.  Indexing is 1-based,&lt;br /&gt;
and the function returns -1 if the &amp;quot;target&amp;quot; string is not present in &amp;quot;source&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Important Note: If the &amp;quot;target&amp;quot; string is empty / missing, this function returns a&lt;br /&gt;
value of &amp;quot;1&amp;quot;, which is generally unexpected behavior, and must be accounted for&lt;br /&gt;
separatetly.&lt;br /&gt;
]]&lt;br /&gt;
function str.str_find( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {&#039;source&#039;, &#039;target&#039;} )&lt;br /&gt;
	local source_str = new_args[&#039;source&#039;] or &#039;&#039;&lt;br /&gt;
	local target_str = new_args[&#039;target&#039;] or &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
	if target_str == &#039;&#039; then&lt;br /&gt;
		return 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local start = mw.ustring.find( source_str, target_str, 1, true )&lt;br /&gt;
	if start == nil then&lt;br /&gt;
		start = -1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return start&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
find&lt;br /&gt;
&lt;br /&gt;
This function allows one to search for a target string or pattern within another&lt;br /&gt;
string.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|find|source_str|target_string|start_index|plain_flag}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    source: The string to search&lt;br /&gt;
    target: The string or pattern to find within source&lt;br /&gt;
    start: The index within the source string to start the search, defaults to 1&lt;br /&gt;
    plain: Boolean flag indicating that target should be understood as plain&lt;br /&gt;
        text and not as a Lua style regular expression, defaults to true&lt;br /&gt;
&lt;br /&gt;
If invoked using named parameters, Mediawiki will automatically remove any leading or&lt;br /&gt;
trailing whitespace from the parameter.  In some circumstances this is desirable, in&lt;br /&gt;
other cases one may want to preserve the whitespace.&lt;br /&gt;
&lt;br /&gt;
This function returns the first index &amp;gt;= &amp;quot;start&amp;quot; where &amp;quot;target&amp;quot; can be found&lt;br /&gt;
within &amp;quot;source&amp;quot;.  Indices are 1-based.  If &amp;quot;target&amp;quot; is not found, then this&lt;br /&gt;
function returns 0.  If either &amp;quot;source&amp;quot; or &amp;quot;target&amp;quot; are missing / empty, this&lt;br /&gt;
function also returns 0.&lt;br /&gt;
&lt;br /&gt;
This function should be safe for UTF-8 strings.&lt;br /&gt;
]]&lt;br /&gt;
function str.find( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {&#039;source&#039;, &#039;target&#039;, &#039;start&#039;, &#039;plain&#039; } )&lt;br /&gt;
	local source_str = new_args[&#039;source&#039;] or &#039;&#039;&lt;br /&gt;
	local pattern = new_args[&#039;target&#039;] or &#039;&#039;&lt;br /&gt;
	local start_pos = tonumber(new_args[&#039;start&#039;]) or 1&lt;br /&gt;
	local plain = new_args[&#039;plain&#039;] or true&lt;br /&gt;
&lt;br /&gt;
	if source_str == &#039;&#039; or pattern == &#039;&#039; then&lt;br /&gt;
		return 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	plain = str._getBoolean( plain )&lt;br /&gt;
&lt;br /&gt;
	local start = mw.ustring.find( source_str, pattern, start_pos, plain )&lt;br /&gt;
	if start == nil then&lt;br /&gt;
		start = 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return start&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
replace&lt;br /&gt;
&lt;br /&gt;
This function allows one to replace a target string or pattern within another&lt;br /&gt;
string.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string|&lt;br /&gt;
   count=replacement_count|plain=plain_flag}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    source: The string to search&lt;br /&gt;
    pattern: The string or pattern to find within source&lt;br /&gt;
    replace: The replacement text&lt;br /&gt;
    count: The number of occurences to replace, defaults to all.&lt;br /&gt;
    plain: Boolean flag indicating that pattern should be understood as plain&lt;br /&gt;
        text and not as a Lua style regular expression, defaults to true&lt;br /&gt;
]]&lt;br /&gt;
function str.replace( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {&#039;source&#039;, &#039;pattern&#039;, &#039;replace&#039;, &#039;count&#039;, &#039;plain&#039; } )&lt;br /&gt;
	local source_str = new_args[&#039;source&#039;] or &#039;&#039;&lt;br /&gt;
	local pattern = new_args[&#039;pattern&#039;] or &#039;&#039;&lt;br /&gt;
	local replace = new_args[&#039;replace&#039;] or &#039;&#039;&lt;br /&gt;
	local count = tonumber( new_args[&#039;count&#039;] )&lt;br /&gt;
	local plain = new_args[&#039;plain&#039;] or true&lt;br /&gt;
&lt;br /&gt;
	if source_str == &#039;&#039; or pattern == &#039;&#039; then&lt;br /&gt;
		return source_str&lt;br /&gt;
	end&lt;br /&gt;
	plain = str._getBoolean( plain )&lt;br /&gt;
&lt;br /&gt;
	if plain then&lt;br /&gt;
		pattern = str._escapePattern( pattern )&lt;br /&gt;
		replace = mw.ustring.gsub( replace, &amp;quot;%%&amp;quot;, &amp;quot;%%%%&amp;quot; ) --Only need to escape replacement sequences.&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local result&lt;br /&gt;
&lt;br /&gt;
	if count ~= nil then&lt;br /&gt;
		result = mw.ustring.gsub( source_str, pattern, replace, count )&lt;br /&gt;
	else&lt;br /&gt;
		result = mw.ustring.gsub( source_str, pattern, replace )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
    simple function to pipe string.rep to templates.&lt;br /&gt;
]]&lt;br /&gt;
function str.rep( frame )&lt;br /&gt;
	local repetitions = tonumber( frame.args[2] )&lt;br /&gt;
	if not repetitions then&lt;br /&gt;
		return str._error( &#039;function rep expects a number as second parameter, received &amp;quot;&#039; .. ( frame.args[2] or &#039;&#039; ) .. &#039;&amp;quot;&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	return string.rep( frame.args[1] or &#039;&#039;, repetitions )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
escapePattern&lt;br /&gt;
&lt;br /&gt;
This function escapes special characters from a Lua string pattern. See [1]&lt;br /&gt;
for details on how patterns work.&lt;br /&gt;
&lt;br /&gt;
[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|escapePattern|pattern_string}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    pattern_string: The pattern string to escape.&lt;br /&gt;
]]&lt;br /&gt;
function str.escapePattern( frame )&lt;br /&gt;
	local pattern_str = frame.args[1]&lt;br /&gt;
	if not pattern_str then&lt;br /&gt;
		return str._error( &#039;No pattern string specified&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	local result = str._escapePattern( pattern_str )&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
count&lt;br /&gt;
This function counts the number of occurrences of one string in another.&lt;br /&gt;
]]&lt;br /&gt;
function str.count(frame)&lt;br /&gt;
	local args = str._getParameters(frame.args, {&#039;source&#039;, &#039;pattern&#039;, &#039;plain&#039;})&lt;br /&gt;
	local source = args.source or &#039;&#039;&lt;br /&gt;
	local pattern = args.pattern or &#039;&#039;&lt;br /&gt;
	local plain = str._getBoolean(args.plain or true)&lt;br /&gt;
	if plain then&lt;br /&gt;
		pattern = str._escapePattern(pattern)&lt;br /&gt;
	end&lt;br /&gt;
	local _, count = mw.ustring.gsub(source, pattern, &#039;&#039;)&lt;br /&gt;
	return count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
endswith&lt;br /&gt;
This function determines whether a string ends with another string.&lt;br /&gt;
]]&lt;br /&gt;
function str.endswith(frame)&lt;br /&gt;
	local args = str._getParameters(frame.args, {&#039;source&#039;, &#039;pattern&#039;})&lt;br /&gt;
	local source = args.source or &#039;&#039;&lt;br /&gt;
	local pattern = args.pattern or &#039;&#039;&lt;br /&gt;
	if pattern == &#039;&#039; then&lt;br /&gt;
		-- All strings end with the empty string.&lt;br /&gt;
		return &amp;quot;yes&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then&lt;br /&gt;
		return &amp;quot;yes&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
join&lt;br /&gt;
&lt;br /&gt;
Join all non empty arguments together; the first argument is the separator.&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|join|sep|one|two|three}}&lt;br /&gt;
]]&lt;br /&gt;
function str.join(frame)&lt;br /&gt;
	local args = {}&lt;br /&gt;
	local sep&lt;br /&gt;
	for _, v in ipairs( frame.args ) do&lt;br /&gt;
		if sep then&lt;br /&gt;
			if v ~= &#039;&#039; then&lt;br /&gt;
				table.insert(args, v)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			sep = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat( args, sep or &#039;&#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Helper function that populates the argument list given that user may need to use a mix of&lt;br /&gt;
named and unnamed parameters.  This is relevant because named parameters are not&lt;br /&gt;
identical to unnamed parameters due to string trimming, and when dealing with strings&lt;br /&gt;
we sometimes want to either preserve or remove that whitespace depending on the application.&lt;br /&gt;
]]&lt;br /&gt;
function str._getParameters( frame_args, arg_list )&lt;br /&gt;
	local new_args = {}&lt;br /&gt;
	local index = 1&lt;br /&gt;
	local value&lt;br /&gt;
&lt;br /&gt;
	for _, arg in ipairs( arg_list ) do&lt;br /&gt;
		value = frame_args[arg]&lt;br /&gt;
		if value == nil then&lt;br /&gt;
			value = frame_args[index]&lt;br /&gt;
			index = index + 1&lt;br /&gt;
		end&lt;br /&gt;
		new_args[arg] = value&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return new_args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Helper function to handle error messages.&lt;br /&gt;
]]&lt;br /&gt;
function str._error( error_str )&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local error_category = frame.args.error_category or &#039;Errors reported by Module String&#039;&lt;br /&gt;
	local ignore_errors = frame.args.ignore_errors or false&lt;br /&gt;
	local no_category = frame.args.no_category or false&lt;br /&gt;
&lt;br /&gt;
	if str._getBoolean(ignore_errors) then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local error_str = &#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;String Module Error: &#039; .. error_str .. &#039;&amp;lt;/strong&amp;gt;&#039;&lt;br /&gt;
	if error_category ~= &#039;&#039; and not str._getBoolean( no_category ) then&lt;br /&gt;
		error_str = &#039;[[Category:&#039; .. error_category .. &#039;]]&#039; .. error_str&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return error_str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Helper Function to interpret boolean strings&lt;br /&gt;
]]&lt;br /&gt;
function str._getBoolean( boolean_str )&lt;br /&gt;
	local boolean_value&lt;br /&gt;
&lt;br /&gt;
	if type( boolean_str ) == &#039;string&#039; then&lt;br /&gt;
		boolean_str = boolean_str:lower()&lt;br /&gt;
		if boolean_str == &#039;false&#039; or boolean_str == &#039;no&#039; or boolean_str == &#039;0&#039;&lt;br /&gt;
				or boolean_str == &#039;&#039; then&lt;br /&gt;
			boolean_value = false&lt;br /&gt;
		else&lt;br /&gt;
			boolean_value = true&lt;br /&gt;
		end&lt;br /&gt;
	elseif type( boolean_str ) == &#039;boolean&#039; then&lt;br /&gt;
		boolean_value = boolean_str&lt;br /&gt;
	else&lt;br /&gt;
		error( &#039;No boolean value found&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	return boolean_value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Helper function that escapes all pattern characters so that they will be treated&lt;br /&gt;
as plain text.&lt;br /&gt;
]]&lt;br /&gt;
function str._escapePattern( pattern_str )&lt;br /&gt;
	return mw.ustring.gsub( pattern_str, &amp;quot;([%(%)%.%%%+%-%*%?%[%^%$%]])&amp;quot;, &amp;quot;%%%1&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return str&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Sidebar/styles.css&amp;diff=2032</id>
		<title>پودمان:Sidebar/styles.css</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Sidebar/styles.css&amp;diff=2032"/>
		<updated>2026-06-25T09:35:10Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp-template}} */&lt;br /&gt;
/* TODO: Invert width design to be &amp;quot;mobile first&amp;quot; */&lt;br /&gt;
.sidebar {&lt;br /&gt;
	/* TODO: Ask if we should have max-width 22em instead */&lt;br /&gt;
	width: 22em;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	float: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	clear: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	margin: 0.5em 1em 1em 0;&lt;br /&gt;
	background: #f8f9fa;&lt;br /&gt;
	border: 1px solid #aaa;&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
	border-spacing: 0.4em 0;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	line-height: 1.4em;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	/* Timeless has display: none on .nomobile at mobile resolutions, so we&lt;br /&gt;
	 * unhide it with display: table and let precedence and proximity win.&lt;br /&gt;
	 */&lt;br /&gt;
	display: table; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Unfortunately, so does Minerva desktop, except Minerva drops an&lt;br /&gt;
 * !important on the declaration. So we have to be mean for Minerva users.&lt;br /&gt;
 * Mobile removes the element entirely with `wgMFRemovableClasses` in &lt;br /&gt;
 * https://github.com/wikimedia/operations-mediawiki-config/blob/master/&lt;br /&gt;
 wmf-config/InitialiseSettings.php#L16992&lt;br /&gt;
 * which is why displaying it categorically with display: table works.&lt;br /&gt;
 * We don&#039;t really want to expose the generic user in the wild on mobile to have&lt;br /&gt;
 * to deal with sidebars. (Maybe the ones with collapsible lists, so that&lt;br /&gt;
 * might be an improvement. That is blocked on [[:phab:T111565]].)&lt;br /&gt;
 */&lt;br /&gt;
body.skin-minerva .sidebar {&lt;br /&gt;
	display: table !important;&lt;br /&gt;
	/* also, minerva is way too aggressive about other stylings on tables.&lt;br /&gt;
	 * TODO remove when this template gets moved to a div. plans on talk page.&lt;br /&gt;
	 * We always float right on Minerva because that&#039;s a lot of extra CSS&lt;br /&gt;
	 * otherwise. */&lt;br /&gt;
    float: left !important;&lt;br /&gt;
    margin: 0.5em 0 1em 1em !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar a {&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-wraplinks a {&lt;br /&gt;
	white-space: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-subgroup {&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	border-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* TODO: Investigate whether -left and -none are used. */&lt;br /&gt;
.sidebar-left {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	float: right;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	clear: right;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	margin: 0.5em 1em 1em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-none {&lt;br /&gt;
	float: none;&lt;br /&gt;
	clear: both;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	margin: 0.5em 1em 1em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-outer-title {&lt;br /&gt;
	padding-bottom: 0.2em;&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	line-height: 1.2em;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-top-image {&lt;br /&gt;
	padding: 0.4em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-top-caption,&lt;br /&gt;
.sidebar-pretitle-with-top-image,&lt;br /&gt;
.sidebar-caption {&lt;br /&gt;
	padding-top: 0.2em;&lt;br /&gt;
	line-height: 1.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-pretitle {&lt;br /&gt;
	padding-top: 0.4em;&lt;br /&gt;
	line-height: 1.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-title,&lt;br /&gt;
.sidebar-title-with-pretitle {&lt;br /&gt;
	padding: 0.2em 0.4em;&lt;br /&gt;
	font-size: 145%;&lt;br /&gt;
	line-height: 1.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-title-with-pretitle {&lt;br /&gt;
	padding-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-image {&lt;br /&gt;
	padding: 0.2em 0 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-heading {&lt;br /&gt;
	padding: 0.1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-content {&lt;br /&gt;
	padding: 0 0.1em 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-content-with-subgroup {&lt;br /&gt;
	padding: 0.1em 0 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-above,&lt;br /&gt;
.sidebar-below {&lt;br /&gt;
	padding: 0.3em 0.4em;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-collapse .sidebar-above,&lt;br /&gt;
.sidebar-collapse .sidebar-below {&lt;br /&gt;
	border-top: 1px solid #aaa;&lt;br /&gt;
	border-bottom: 1px solid #aaa;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-navbar {&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	font-size: 115%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-collapse .sidebar-navbar {&lt;br /&gt;
	padding-top: 0.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-collapse .mw-collapsible-toggle {&lt;br /&gt;
	margin-top: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-list-title {&lt;br /&gt;
	text-align: right;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	line-height: 1.6em;&lt;br /&gt;
	font-size: 105%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
	/* users have wide latitude to set arbitrary width and margin :(&lt;br /&gt;
	   &amp;quot;Super-specific&amp;quot; selector to prevent overriding this appearance by&lt;br /&gt;
	   lower level sidebars too */&lt;br /&gt;
	body.mediawiki .sidebar {&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		float: none !important; /* Remove when we div based; Minerva is dumb */&lt;br /&gt;
		margin-left: 0 !important;&lt;br /&gt;
		margin-right: 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	/* TODO: We might consider making all links wrap at small resolutions and then&lt;br /&gt;
	 * only introduce nowrap at higher resolutions. Do when we invert the media&lt;br /&gt;
	 * query.&lt;br /&gt;
	 */&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Sidebar/configuration&amp;diff=2029</id>
		<title>پودمان:Sidebar/configuration</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Sidebar/configuration&amp;diff=2029"/>
		<updated>2026-06-25T09:35:09Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	i18n = {&lt;br /&gt;
		child_yes = &#039;yes&#039;,&lt;br /&gt;
		float_none = &#039;none&#039;,&lt;br /&gt;
		float_left = &#039;right&#039;,&lt;br /&gt;
		wrap_true = &#039;true&#039;,&lt;br /&gt;
		navbar_none = &#039;none&#039;,&lt;br /&gt;
		navbar_off = &#039;off&#039;,&lt;br /&gt;
		default_list_title = &#039;فهرست&#039;,&lt;br /&gt;
		title_not_to_add_navbar = &#039;Template:Sidebar&#039;,&lt;br /&gt;
		collapse_title_not_to_add_navbar = &#039;Template:Sidebar with collapsible lists&#039;,&lt;br /&gt;
		templatestyles = &#039;Module:Sidebar/styles.css&#039;,&lt;br /&gt;
		category = {&lt;br /&gt;
			child = &#039;[[رده:صفحه‌هایی که از نوار کناری با پارامتر فرزند استفاده می‌کنند]]&#039;,&lt;br /&gt;
			conversion = &#039;[[رده:نوارهای کناری با سبک نیازمند تبدیل]]&#039;&lt;br /&gt;
		},&lt;br /&gt;
		pattern = {&lt;br /&gt;
			collapse_sandbox = &#039;/صفحه تمرین&#039;,&lt;br /&gt;
			sandbox = &#039;/صفحه تمرین&#039;,&lt;br /&gt;
			subgroup = &#039;sidebar%-subgroup&#039;,&lt;br /&gt;
			style_conversion = &#039;style$&#039;,&lt;br /&gt;
			uncategorized_conversion_titles = {&lt;br /&gt;
				&#039;/[Ss]andbox&#039;,&lt;br /&gt;
				&#039;/[Tt]estcases&#039;,&lt;br /&gt;
				&#039;/[Dd]oc$&#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		class = {&lt;br /&gt;
			sidebar = &#039;sidebar&#039;,&lt;br /&gt;
			subgroup = &#039;sidebar-subgroup&#039;,&lt;br /&gt;
			collapse = &#039;sidebar-collapse&#039;,&lt;br /&gt;
			float_none = &#039;sidebar-none&#039;,&lt;br /&gt;
			float_left = &#039;sidebar-left&#039;,&lt;br /&gt;
			wraplinks = &#039;sidebar-wraplinks&#039;,&lt;br /&gt;
			outer_title = &#039;sidebar-outer-title&#039;,&lt;br /&gt;
			top_image = &#039;sidebar-top-image&#039;,&lt;br /&gt;
			top_caption = &#039;sidebar-top-caption&#039;,&lt;br /&gt;
			pretitle = &#039;sidebar-pretitle&#039;,&lt;br /&gt;
			pretitle_with_top_image = &#039;sidebar-pretitle-with-top-image&#039;,&lt;br /&gt;
			title = &#039;sidebar-title&#039;,&lt;br /&gt;
			title_with_pretitle = &#039;sidebar-title-with-pretitle&#039;,&lt;br /&gt;
			image = &#039;sidebar-image&#039;,&lt;br /&gt;
			caption = &#039;sidebar-caption&#039;,&lt;br /&gt;
			above = &#039;sidebar-above&#039;,&lt;br /&gt;
			heading = &#039;sidebar-heading&#039;,&lt;br /&gt;
			content = &#039;sidebar-content&#039;,&lt;br /&gt;
			content_with_subgroup = &#039;sidebar-content-with-subgroup&#039;,&lt;br /&gt;
			below = &#039;sidebar-below&#039;,&lt;br /&gt;
			navbar = &#039;sidebar-navbar&#039;,&lt;br /&gt;
			list = &#039;sidebar-list&#039;,&lt;br /&gt;
			list_title = &#039;sidebar-list-title&#039;,&lt;br /&gt;
			list_content = &#039;sidebar-list-content&#039;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Sidebar&amp;diff=2026</id>
		<title>پودمان:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Sidebar&amp;diff=2026"/>
		<updated>2026-06-25T09:35:09Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Sidebar}}&lt;br /&gt;
--&lt;br /&gt;
require(&#039;Module:No globals&#039;)&lt;br /&gt;
local cfg = mw.loadData(&#039;Module:Sidebar/configuration&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Categorizes calling templates and modules with a &#039;style&#039; parameter of any sort&lt;br /&gt;
for tracking to convert to TemplateStyles.&lt;br /&gt;
&lt;br /&gt;
TODO after a long cleanup: Catch sidebars in other namespaces than Template and Module.&lt;br /&gt;
TODO would probably want to remove /log and /archive as CS1 does&lt;br /&gt;
]]&lt;br /&gt;
local function categorizeTemplatesWithInlineStyles(args)&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	if title.namespace ~= 10 and title.namespace ~= 828 then return &#039;&#039; end&lt;br /&gt;
	for _, pattern in ipairs (cfg.i18n.pattern.uncategorized_conversion_titles) do&lt;br /&gt;
		if title.text:match(pattern) then return &#039;&#039; end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for key, _ in pairs(args) do&lt;br /&gt;
		if mw.ustring.find(key, cfg.i18n.pattern.style_conversion) or key == &#039;width&#039; then&lt;br /&gt;
			return cfg.i18n.category.conversion&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
For compatibility with the original {{sidebar with collapsible lists}}&lt;br /&gt;
implementation, which passed some parameters through {{#if}} to trim their&lt;br /&gt;
whitespace. This also triggered the automatic newline behavior.&lt;br /&gt;
]]&lt;br /&gt;
-- See ([[meta:Help:Newlines and spaces#Automatic newline]])&lt;br /&gt;
local function trimAndAddAutomaticNewline(s)&lt;br /&gt;
	s = mw.ustring.gsub(s, &amp;quot;^%s*(.-)%s*$&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
	if mw.ustring.find(s, &#039;^[#*:;]&#039;) or mw.ustring.find(s, &#039;^{|&#039;) then&lt;br /&gt;
		return &#039;\n&#039; .. s&lt;br /&gt;
	else&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Finds whether a sidebar has a subgroup sidebar.&lt;br /&gt;
]]&lt;br /&gt;
local function hasSubgroup(s)&lt;br /&gt;
	if mw.ustring.find(s, cfg.i18n.pattern.subgroup) then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Main sidebar function. Takes the frame, args, and an optional collapsibleClass.&lt;br /&gt;
The collapsibleClass is and should be used only for sidebars with collapsible&lt;br /&gt;
lists, as in p.collapsible.&lt;br /&gt;
]]&lt;br /&gt;
function p.sidebar(frame, args, collapsibleClass)&lt;br /&gt;
	if not args then&lt;br /&gt;
		args = getArgs(frame)&lt;br /&gt;
	end&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	local child = args.child and mw.text.trim(args.child) == cfg.i18n.child_yes&lt;br /&gt;
&lt;br /&gt;
	root = root:tag(&#039;table&#039;)&lt;br /&gt;
	if not child then&lt;br /&gt;
		root &lt;br /&gt;
			:addClass(cfg.i18n.class.sidebar)&lt;br /&gt;
			-- force collapsibleclass to be sidebar-collapse otherwise output nothing&lt;br /&gt;
			:addClass(collapsibleClass == cfg.i18n.class.collapse and cfg.i18n.class.collapse or nil)&lt;br /&gt;
			:addClass(&#039;nomobile&#039;)&lt;br /&gt;
			:addClass(args.float == cfg.i18n.float_none and cfg.i18n.class.float_none or nil)&lt;br /&gt;
			:addClass(args.float == cfg.i18n.float_left and cfg.i18n.class.float_left or nil)&lt;br /&gt;
			:addClass(args.wraplinks == cfg.i18n.wrap_true and cfg.i18n.class.wraplinks or nil)&lt;br /&gt;
			:addClass(args.bodyclass or args.class)&lt;br /&gt;
			:css(&#039;width&#039;, args.width or nil)&lt;br /&gt;
			:cssText(args.bodystyle or args.style)&lt;br /&gt;
&lt;br /&gt;
		if args.outertitle then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;caption&#039;)&lt;br /&gt;
					:addClass(cfg.i18n.class.outer_title)&lt;br /&gt;
					:addClass(args.outertitleclass)&lt;br /&gt;
					:cssText(args.outertitlestyle)&lt;br /&gt;
					:wikitext(args.outertitle)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.topimage then&lt;br /&gt;
			local imageCell = root:tag(&#039;tr&#039;):tag(&#039;td&#039;)&lt;br /&gt;
&lt;br /&gt;
			imageCell&lt;br /&gt;
				:addClass(cfg.i18n.class.top_image)&lt;br /&gt;
				:addClass(args.topimageclass)&lt;br /&gt;
				:cssText(args.topimagestyle)&lt;br /&gt;
				:wikitext(args.topimage)&lt;br /&gt;
&lt;br /&gt;
			if args.topcaption then&lt;br /&gt;
				imageCell&lt;br /&gt;
					:tag(&#039;div&#039;)&lt;br /&gt;
						:addClass(cfg.i18n.class.top_caption)&lt;br /&gt;
						:cssText(args.topcaptionstyle)&lt;br /&gt;
						:wikitext(args.topcaption)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.pretitle then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;)&lt;br /&gt;
						:addClass(args.topimage and cfg.i18n.class.pretitle_with_top_image&lt;br /&gt;
							or cfg.i18n.class.pretitle)&lt;br /&gt;
						:addClass(args.pretitleclass)&lt;br /&gt;
						:cssText(args.basestyle)&lt;br /&gt;
						:cssText(args.pretitlestyle)&lt;br /&gt;
						:wikitext(args.pretitle)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		root&lt;br /&gt;
			:addClass(cfg.i18n.class.subgroup)&lt;br /&gt;
			:addClass(args.bodyclass or args.class)&lt;br /&gt;
			:cssText(args.bodystyle or args.style)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.title then&lt;br /&gt;
		if child then&lt;br /&gt;
			root&lt;br /&gt;
				:wikitext(args.title)&lt;br /&gt;
		else&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;th&#039;)&lt;br /&gt;
						:addClass(args.pretitle and cfg.i18n.class.title_with_pretitle&lt;br /&gt;
							or cfg.i18n.class.title)&lt;br /&gt;
						:addClass(args.titleclass)&lt;br /&gt;
						:cssText(args.basestyle)&lt;br /&gt;
						:cssText(args.titlestyle)&lt;br /&gt;
						:wikitext(args.title)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.image then&lt;br /&gt;
		local imageCell = root:tag(&#039;tr&#039;):tag(&#039;td&#039;)&lt;br /&gt;
&lt;br /&gt;
		imageCell&lt;br /&gt;
			:addClass(cfg.i18n.class.image)&lt;br /&gt;
			:addClass(args.imageclass)&lt;br /&gt;
			:cssText(args.imagestyle)&lt;br /&gt;
			:wikitext(args.image)&lt;br /&gt;
&lt;br /&gt;
		if args.caption then&lt;br /&gt;
			imageCell&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:addClass(cfg.i18n.class.caption)&lt;br /&gt;
					:cssText(args.captionstyle)&lt;br /&gt;
					:wikitext(args.caption)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.above then&lt;br /&gt;
		root&lt;br /&gt;
			:tag(&#039;tr&#039;)&lt;br /&gt;
				:tag(&#039;td&#039;)&lt;br /&gt;
					:addClass(cfg.i18n.class.above)&lt;br /&gt;
					:addClass(args.aboveclass)&lt;br /&gt;
					:cssText(args.abovestyle)&lt;br /&gt;
					:newline() -- newline required for bullet-points to work&lt;br /&gt;
					:wikitext(args.above)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local rowNums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = &#039;&#039; .. k&lt;br /&gt;
		local num = k:match(&#039;^heading(%d+)$&#039;) or k:match(&#039;^content(%d+)$&#039;)&lt;br /&gt;
		if num then table.insert(rowNums, tonumber(num)) end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(rowNums)&lt;br /&gt;
	-- remove duplicates from the list (e.g. 3 will be duplicated if both heading3&lt;br /&gt;
	-- and content3 are specified)&lt;br /&gt;
	for i = #rowNums, 1, -1 do&lt;br /&gt;
		if rowNums[i] == rowNums[i - 1] then&lt;br /&gt;
			table.remove(rowNums, i)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for i, num in ipairs(rowNums) do&lt;br /&gt;
		local heading = args[&#039;heading&#039; .. num]&lt;br /&gt;
		if heading then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;th&#039;)&lt;br /&gt;
						:addClass(cfg.i18n.class.heading)&lt;br /&gt;
						:addClass(args.headingclass)&lt;br /&gt;
						:addClass(args[&#039;heading&#039; .. num .. &#039;class&#039;])&lt;br /&gt;
						:cssText(args.basestyle)&lt;br /&gt;
						:cssText(args.headingstyle)&lt;br /&gt;
						:cssText(args[&#039;heading&#039; .. num .. &#039;style&#039;])&lt;br /&gt;
						:newline()&lt;br /&gt;
						:wikitext(heading)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local content = args[&#039;content&#039; .. num]&lt;br /&gt;
		if content then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;)&lt;br /&gt;
						:addClass(hasSubgroup(content) and cfg.i18n.class.content_with_subgroup&lt;br /&gt;
							or cfg.i18n.class.content)&lt;br /&gt;
						:addClass(args.contentclass)&lt;br /&gt;
						:addClass(args[&#039;content&#039; .. num .. &#039;class&#039;])&lt;br /&gt;
						:cssText(args.contentstyle)&lt;br /&gt;
						:cssText(args[&#039;content&#039; .. num .. &#039;style&#039;])&lt;br /&gt;
						:newline()&lt;br /&gt;
						:wikitext(content)&lt;br /&gt;
						:done()&lt;br /&gt;
					 -- Without a linebreak after the &amp;lt;/td&amp;gt;, a nested list like&lt;br /&gt;
					 -- &amp;quot;* {{hlist| ...}}&amp;quot; doesn&#039;t parse correctly.&lt;br /&gt;
					:newline()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.below then&lt;br /&gt;
		root&lt;br /&gt;
			:tag(&#039;tr&#039;)&lt;br /&gt;
				:tag(&#039;td&#039;)&lt;br /&gt;
					:addClass(cfg.i18n.class.below)&lt;br /&gt;
					:addClass(args.belowclass)&lt;br /&gt;
					:cssText(args.belowstyle)&lt;br /&gt;
					:newline()&lt;br /&gt;
					:wikitext(args.below)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not child then&lt;br /&gt;
		if args.navbar ~= cfg.i18n.navbar_none and args.navbar ~= cfg.i18n.navbar_off and&lt;br /&gt;
			(args.name or frame:getParent():getTitle():gsub(cfg.i18n.pattern.sandbox, &#039;&#039;) ~=&lt;br /&gt;
			cfg.i18n.title_not_to_add_navbar) then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;)&lt;br /&gt;
						:addClass(cfg.i18n.class.navbar)&lt;br /&gt;
						:cssText(args.navbarstyle)&lt;br /&gt;
						:wikitext(require(&#039;Module:Navbar&#039;)._navbar{&lt;br /&gt;
							args.name,&lt;br /&gt;
							mini = 1,&lt;br /&gt;
							fontstyle = args.navbarfontstyle&lt;br /&gt;
						})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local base_templatestyles = frame:extensionTag{&lt;br /&gt;
		name = &#039;templatestyles&#039;, args = { src = cfg.i18n.templatestyles }&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local templatestyles = &#039;&#039;&lt;br /&gt;
	if args[&#039;templatestyles&#039;] and args[&#039;templatestyles&#039;] ~= &#039;&#039; then&lt;br /&gt;
		templatestyles = frame:extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = args[&#039;templatestyles&#039;] }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local child_templatestyles = &#039;&#039;&lt;br /&gt;
	if args[&#039;child templatestyles&#039;] and args[&#039;child templatestyles&#039;] ~= &#039;&#039; then&lt;br /&gt;
		child_templatestyles = frame:extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = args[&#039;child templatestyles&#039;] }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local grandchild_templatestyles = &#039;&#039;&lt;br /&gt;
	if args[&#039;grandchild templatestyles&#039;] and args[&#039;grandchild templatestyles&#039;] ~= &#039;&#039; then&lt;br /&gt;
		grandchild_templatestyles = frame:extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = args[&#039;grandchild templatestyles&#039;] }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat({&lt;br /&gt;
		base_templatestyles,&lt;br /&gt;
		templatestyles,&lt;br /&gt;
		child_templatestyles,&lt;br /&gt;
		grandchild_templatestyles,&lt;br /&gt;
		tostring(root),&lt;br /&gt;
		(child and cfg.i18n.category.child or &#039;&#039;),&lt;br /&gt;
		categorizeTemplatesWithInlineStyles(args)&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Main entry point for sidebar with collapsible lists.&lt;br /&gt;
Does the work of creating the collapsible lists themselves and including them&lt;br /&gt;
into the args.&lt;br /&gt;
]]&lt;br /&gt;
function p.collapsible(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	if not args.name and&lt;br /&gt;
		frame:getParent():getTitle():gsub(cfg.i18n.pattern.collapse_sandbox, &#039;&#039;) ==&lt;br /&gt;
		cfg.i18n.collapse_title_not_to_add_navbar then&lt;br /&gt;
		args.navbar = cfg.i18n.navbar_none&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local contentArgs = {}&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = string.match(k, &#039;^list(%d+)$&#039;)&lt;br /&gt;
		if num then&lt;br /&gt;
			local expand = args.expanded and&lt;br /&gt;
				(args.expanded == &#039;all&#039; or args.expanded == args[&#039;list&#039; .. num .. &#039;name&#039;])&lt;br /&gt;
			local row = mw.html.create(&#039;div&#039;)&lt;br /&gt;
			row&lt;br /&gt;
				:addClass(cfg.i18n.class.list)&lt;br /&gt;
				:addClass(&#039;mw-collapsible&#039;)&lt;br /&gt;
				:addClass((not expand) and &#039;mw-collapsed&#039; or nil)&lt;br /&gt;
				:addClass(args[&#039;list&#039; .. num .. &#039;class&#039;])&lt;br /&gt;
				:cssText(args.listframestyle)&lt;br /&gt;
				:cssText(args[&#039;list&#039; .. num .. &#039;framestyle&#039;])&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:addClass(cfg.i18n.class.list_title)&lt;br /&gt;
					-- don&#039;t /need/ a listnumtitleclass because you can do&lt;br /&gt;
					-- .templateclass .listnumclass .sidebar-list-title&lt;br /&gt;
					:addClass(args.listtitleclass)&lt;br /&gt;
					:cssText(args.basestyle)&lt;br /&gt;
					:cssText(args.listtitlestyle)&lt;br /&gt;
					:cssText(args[&#039;list&#039; .. num .. &#039;titlestyle&#039;])&lt;br /&gt;
					:wikitext(trimAndAddAutomaticNewline(args[&#039;list&#039; .. num .. &#039;title&#039;]&lt;br /&gt;
						or cfg.i18n.default_list_title))&lt;br /&gt;
					:done()&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:addClass(cfg.i18n.class.list_content)&lt;br /&gt;
					:addClass(&#039;mw-collapsible-content&#039;)&lt;br /&gt;
					-- don&#039;t /need/ a listnumstyleclass because you can do&lt;br /&gt;
					-- .templatename .listnumclass .sidebar-list&lt;br /&gt;
					:addClass(args.listclass)&lt;br /&gt;
					:cssText(args.liststyle)&lt;br /&gt;
					:cssText(args[&#039;list&#039; .. num .. &#039;style&#039;])&lt;br /&gt;
					:wikitext(trimAndAddAutomaticNewline(args[&#039;list&#039; .. num]))&lt;br /&gt;
&lt;br /&gt;
			contentArgs[&#039;content&#039; .. num] = tostring(row)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(contentArgs) do&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return p.sidebar(frame, args, cfg.i18n.class.collapse)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Shortcut/config&amp;diff=2023</id>
		<title>پودمان:Shortcut/config</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Shortcut/config&amp;diff=2023"/>
		<updated>2026-06-25T09:35:09Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module holds configuration data for [[Module:Shortcut]].&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
&lt;br /&gt;
-- The heading at the top of the shortcut box. It accepts the following parameter:&lt;br /&gt;
-- $1 - the total number of shortcuts. (required)&lt;br /&gt;
[&#039;shortcut-heading&#039;] = &#039;[[ویکی‌پدیا:میانبر|{{PLURAL:$1|میانبر|میانبرها}}]]:&#039;,&lt;br /&gt;
&lt;br /&gt;
-- The heading when |redirect=yes is given. It accepts the following parameter:&lt;br /&gt;
-- $1 - the total number of shortcuts. (required)&lt;br /&gt;
[&#039;redirect-heading&#039;] = &#039;[[ویکی‌پدیا:تغییرمسیر|{{PLURAL:$1|تغییرمسیر|تغییرمسیرها}}]]&#039;,&lt;br /&gt;
&lt;br /&gt;
-- The error message to display when a shortcut is invalid (is not a string, or&lt;br /&gt;
-- is the blank string). It accepts the following parameter:&lt;br /&gt;
-- $1 - the number of the shortcut in the argument list. (required)&lt;br /&gt;
[&#039;invalid-shortcut-error&#039;] = &#039;میانبر #$1 نامعتبر است (میانبرها باید &#039; ..&lt;br /&gt;
	&#039;رشته‌هایی از دست کم یک نویسه باشند)&#039;,&lt;br /&gt;
&lt;br /&gt;
-- The error message to display when no shortcuts or other displayable content&lt;br /&gt;
-- were specified. (required)&lt;br /&gt;
[&#039;no-content-error&#039;] = &#039;خطا: میانبری مشخص نشده‌است و پارامتر &#039; ..&lt;br /&gt;
	mw.text.nowiki(&#039;|msg=&#039;) ..&lt;br /&gt;
	&#039; تنظیم نشده‌است.&#039;,&lt;br /&gt;
&lt;br /&gt;
-- A category to add when the no-content-error message is displayed. (optional)&lt;br /&gt;
[&#039;no-content-error-category&#039;] = &#039;الگو:میانبر بدون پارامتر&#039;,&lt;br /&gt;
&lt;br /&gt;
-- The error category to add if the shortcut listed in the first parameter&lt;br /&gt;
-- doesn&#039;t exist. (optional)&lt;br /&gt;
[&#039;first-parameter-error-category&#039;] = &#039;پارامتر نخست نیازمند اصلاح جعبه میانبر ویکی‌پدیا&#039;,&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Shortcut&amp;diff=2020</id>
		<title>پودمان:Shortcut</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Shortcut&amp;diff=2020"/>
		<updated>2026-06-25T09:35:08Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{shortcut}}.&lt;br /&gt;
&lt;br /&gt;
-- Set constants&lt;br /&gt;
local CONFIG_MODULE = &#039;Module:Shortcut/config&#039;&lt;br /&gt;
&lt;br /&gt;
-- Load required modules&lt;br /&gt;
local checkType = require(&#039;libraryUtil&#039;).checkType&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function message(msg, ...)&lt;br /&gt;
	return mw.message.newRawMessage(msg, ...):plain()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeCategoryLink(cat)&lt;br /&gt;
	return mw.ustring.format(&#039;[[%s:%s]]&#039;, mw.site.namespaces[14].name, cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(shortcuts, options, frame, cfg)&lt;br /&gt;
	checkType(&#039;_main&#039;, 1, shortcuts, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;_main&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	cfg = cfg or mw.loadData(CONFIG_MODULE)&lt;br /&gt;
	local templateMode = (options.template or options[&#039;الگو&#039;]) and (yesno(options.template) or yesno(options[&#039;الگو&#039;]))&lt;br /&gt;
	local redirectMode = (options.redirect or options[&#039;تغییرمسیر&#039;]) and (yesno(options.redirect) or yesno(options[&#039;تغییرمسیر&#039;]))&lt;br /&gt;
	local isCategorized = (not options.category) or (not options[&#039;رده&#039;]) or (yesno(options.category) ~= false) or (yesno(options[&#039;رده&#039;]) ~= false)&lt;br /&gt;
&lt;br /&gt;
	-- Validate shortcuts&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		if type(shortcut) ~= &#039;string&#039; or #shortcut &amp;lt; 1 then&lt;br /&gt;
			error(message(cfg[&#039;invalid-shortcut-error&#039;], i), 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Make the list items. These are the shortcuts plus any extra lines such&lt;br /&gt;
	-- as options.msg.&lt;br /&gt;
	local listItems = {}&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		local templatePath, prefix&lt;br /&gt;
		if templateMode then&lt;br /&gt;
			-- Namespace detection&lt;br /&gt;
			local titleObj = mw.title.new(shortcut, 10)&lt;br /&gt;
			if titleObj.namespace == 10 then&lt;br /&gt;
				templatePath = titleObj.fullText&lt;br /&gt;
			else&lt;br /&gt;
				templatePath = shortcut&lt;br /&gt;
			end&lt;br /&gt;
			prefix = options[&#039;pre&#039; .. i] or options.pre or options[&#039;پیشوند&#039;] or &#039;&#039;&lt;br /&gt;
		end&lt;br /&gt;
		if (options.target or options[&#039;مقصد&#039;]) and (yesno(options.target) or yesno(options[&#039;مقصد&#039;])) then&lt;br /&gt;
			listItems[i] = templateMode&lt;br /&gt;
				and mw.ustring.format(&amp;quot;&amp;amp;#123;&amp;amp;#123;%s[[%s|%s]]&amp;amp;#125;&amp;amp;#125;&amp;quot;, prefix, templatePath, shortcut)&lt;br /&gt;
				or mw.ustring.format(&amp;quot;[[%s]]&amp;quot;, shortcut)&lt;br /&gt;
		else&lt;br /&gt;
			listItems[i] = frame:expandTemplate{&lt;br /&gt;
				title = &#039;تغییرمسیر ممنوع&#039;,&lt;br /&gt;
				args = templateMode and {templatePath, shortcut} or {shortcut, shortcut}&lt;br /&gt;
			}&lt;br /&gt;
			if templateMode then&lt;br /&gt;
				listItems[i] = mw.ustring.format(&amp;quot;&amp;amp;#123;&amp;amp;#123;%s%s&amp;amp;#125;&amp;amp;#125;&amp;quot;, prefix, listItems[i])&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(listItems, (options.msg or options[&#039;پیام&#039;]))&lt;br /&gt;
&lt;br /&gt;
	-- Return an error if we have nothing to display&lt;br /&gt;
	if #listItems &amp;lt; 1 then&lt;br /&gt;
		local msg = cfg[&#039;no-content-error&#039;]&lt;br /&gt;
		msg = mw.ustring.format(&#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/strong&amp;gt;&#039;, msg)&lt;br /&gt;
		if isCategorized and cfg[&#039;no-content-error-category&#039;] then&lt;br /&gt;
			msg = msg .. makeCategoryLink(cfg[&#039;no-content-error-category&#039;])&lt;br /&gt;
		end&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	root:wikitext(frame:extensionTag{ name = &#039;templatestyles&#039;, args = { src = &#039;میانبر/styles.css&#039;} })&lt;br /&gt;
	-- Anchors&lt;br /&gt;
	local anchorDiv = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutanchordiv&#039;)&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		local anchor = mw.uri.anchorEncode(shortcut)&lt;br /&gt;
		anchorDiv:tag(&#039;span&#039;):attr(&#039;id&#039;, anchor)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut heading&lt;br /&gt;
	local shortcutHeading&lt;br /&gt;
	do&lt;br /&gt;
		local nShortcuts = #shortcuts&lt;br /&gt;
		if nShortcuts &amp;gt; 0 then&lt;br /&gt;
			local headingMsg = options[&#039;shortcut-heading&#039;] or&lt;br /&gt;
				redirectMode and cfg[&#039;redirect-heading&#039;] or&lt;br /&gt;
				cfg[&#039;shortcut-heading&#039;]&lt;br /&gt;
			shortcutHeading = message(headingMsg, nShortcuts)&lt;br /&gt;
			shortcutHeading = frame:preprocess(shortcutHeading)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Shortcut box&lt;br /&gt;
	local shortcutList = root&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;module-shortcutboxplain plainlist noprint&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;note&#039;)&lt;br /&gt;
	if (options.float and (options.float:lower() == &#039;right&#039; or options.float == &#039;راست&#039;)) or (options[&#039;شناور&#039;] and (options[&#039;شناور&#039;]:lower() == &#039;right&#039; or options[&#039;شناور&#039;] == &#039;راست&#039;)) then&lt;br /&gt;
		shortcutList:addClass(&#039;module-shortcutboxright&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if (options.clear and options.clear ~= &#039;&#039;) or (options[&#039;پاک‌کن&#039;] and options[&#039;پاک‌کن&#039;] ~= &#039;&#039;) then&lt;br /&gt;
		shortcutList:css(&#039;clear&#039;, (options.clear or options[&#039;پاک‌کن&#039;]))&lt;br /&gt;
	end&lt;br /&gt;
	if shortcutHeading then&lt;br /&gt;
		shortcutList&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				:addClass(&#039;module-shortcutlist&#039;)&lt;br /&gt;
				:wikitext(shortcutHeading)&lt;br /&gt;
	end&lt;br /&gt;
	local list = shortcutList:tag(&#039;ul&#039;)&lt;br /&gt;
	for i, item in ipairs(listItems) do&lt;br /&gt;
		list:tag(&#039;li&#039;):wikitext(item)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame)&lt;br /&gt;
&lt;br /&gt;
	-- Separate shortcuts from options&lt;br /&gt;
	local shortcuts, options = {}, {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			shortcuts[k] = v&lt;br /&gt;
		else&lt;br /&gt;
			options[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compress the shortcut array, which may contain nils.&lt;br /&gt;
	local function compressArray(t)&lt;br /&gt;
		local nums, ret = {}, {}&lt;br /&gt;
		for k in pairs(t) do&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(nums)&lt;br /&gt;
		for i, num in ipairs(nums) do&lt;br /&gt;
			ret[i] = t[num]&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
	shortcuts = compressArray(shortcuts)&lt;br /&gt;
&lt;br /&gt;
	return p._main(shortcuts, options, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Set_local_argument_names&amp;diff=2017</id>
		<title>پودمان:Set local argument names</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Set_local_argument_names&amp;diff=2017"/>
		<updated>2026-06-25T09:35:08Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Intended to set local arguments in args table&lt;br /&gt;
-- Useful for localizing modules and defining args in local language&lt;br /&gt;
&lt;br /&gt;
return function(args_table, args)&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if args_table[v] then args_table[k] = args_table[v] end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:See_also&amp;diff=2014</id>
		<title>پودمان:See also</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:See_also&amp;diff=2014"/>
		<updated>2026-06-25T09:35:08Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[&lt;br /&gt;
-- This module produces a &amp;quot;See also: a, b and c&amp;quot; link. It implements the&lt;br /&gt;
-- template {{see also}}.&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
local mHatnote = require(&#039;Module:Hatnote&#039;)&lt;br /&gt;
local mTableTools -- lazily initialise&lt;br /&gt;
local mArguments -- lazily initialise&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.seealso(frame)&lt;br /&gt;
	mTableTools = require(&#039;Module:TableTools&#039;)&lt;br /&gt;
	mArguments = require(&#039;Module:Arguments&#039;)&lt;br /&gt;
	local args = mArguments.getArgs(frame, {parentOnly = true})&lt;br /&gt;
	local pages = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			local numstring = tostring(k)&lt;br /&gt;
			local display = args[&#039;label &#039; .. numstring]&lt;br /&gt;
				or args[&#039;l&#039; .. numstring]&lt;br /&gt;
			local page = {v, display}&lt;br /&gt;
			pages[k] = page&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	pages = mTableTools.compressSparseArray(pages)&lt;br /&gt;
	if not pages[1] then&lt;br /&gt;
		return mHatnote.makeWikitextError(&lt;br /&gt;
			&#039;نام هیچ صفحه‌ای مشخص نشده‌است&#039;,&lt;br /&gt;
			&#039;الگو:همچنین ببینید#خطاها&#039;,&lt;br /&gt;
			args.category&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	local options = {&lt;br /&gt;
		altphrase = args.altphrase,&lt;br /&gt;
		selfref = args.selfref&lt;br /&gt;
	}&lt;br /&gt;
	return p._seealso(options, unpack(pages))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._seealso(options, ...)&lt;br /&gt;
	local altphrase = options and options.altphrase or &#039;همچنین ببینید&#039;&lt;br /&gt;
	local links = mHatnote.formatPageTables(...)&lt;br /&gt;
	links = mw.text.listToText(links)&lt;br /&gt;
	local text = altphrase .. &#039;: &#039; .. links&lt;br /&gt;
&lt;br /&gt;
	-- Pass options through.&lt;br /&gt;
	local hnOptions = {}&lt;br /&gt;
	hnOptions.selfref = options.selfref&lt;br /&gt;
	hnOptions.extraclasses = &#039;boilerplate seealso&#039;&lt;br /&gt;
&lt;br /&gt;
	return mHatnote._hatnote(text, hnOptions)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Section_link&amp;diff=2011</id>
		<title>پودمان:Section link</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Section_link&amp;diff=2011"/>
		<updated>2026-06-25T09:35:07Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{section link}}.&lt;br /&gt;
require(&#039;Module:No globals&#039;);&lt;br /&gt;
&lt;br /&gt;
local checkType = require(&#039;libraryUtil&#039;).checkType&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function makeSectionLink(page, section, display)&lt;br /&gt;
	display = display or section&lt;br /&gt;
	page = page or &#039;&#039;&lt;br /&gt;
	-- MediaWiki doesn&#039;t allow these in `page`, so only need to do for `section`&lt;br /&gt;
	if type(section) == &#039;string&#039; then&lt;br /&gt;
		section = string.gsub(section, &amp;quot;{&amp;quot;, &amp;quot;&amp;amp;#x7B;&amp;quot;)&lt;br /&gt;
		section = string.gsub(section, &amp;quot;}&amp;quot;, &amp;quot;&amp;amp;#x7D;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	return string.format(&#039;[[%s#%s|%s]]&#039;, page, section, display)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function normalizeTitle(title)&lt;br /&gt;
	title = mw.ustring.gsub(mw.ustring.gsub(title, &amp;quot;&#039;&amp;quot;, &amp;quot;&amp;quot;), &#039;&amp;quot;&#039;, &#039;&#039;)&lt;br /&gt;
	title = mw.ustring.gsub(title, &amp;quot;%b&amp;lt;&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	return mw.title.new(title).prefixedText&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(page, sections, options, title)&lt;br /&gt;
	-- Validate input.&lt;br /&gt;
	checkType(&#039;_main&#039;, 1, page, &#039;string&#039;, true)&lt;br /&gt;
	checkType(&#039;_main&#039;, 3, options, &#039;table&#039;, true)&lt;br /&gt;
	if sections == nil then&lt;br /&gt;
		sections = {}&lt;br /&gt;
	elseif type(sections) == &#039;string&#039; then&lt;br /&gt;
		sections = {sections}&lt;br /&gt;
	elseif type(sections) ~= &#039;table&#039; then&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;quot;type error in argument #2 to &#039;_main&#039; &amp;quot; ..&lt;br /&gt;
			&amp;quot;(string, table or nil expected, got %s)&amp;quot;,&lt;br /&gt;
			type(sections)&lt;br /&gt;
		), 2)&lt;br /&gt;
	end&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	title = title or mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
	-- Deal with blank page names elegantly&lt;br /&gt;
	if page and not page:find(&#039;%S&#039;) then&lt;br /&gt;
		page = nil&lt;br /&gt;
		options.nopage = true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Make the link(s).&lt;br /&gt;
	local isShowingPage = not options.nopage&lt;br /&gt;
	if #sections &amp;lt;= 1 then&lt;br /&gt;
		local linkPage = page or &#039;&#039;&lt;br /&gt;
		local section = sections[1] or &#039;Notes&#039;&lt;br /&gt;
		local display = &#039;§&amp;amp;nbsp;&#039; .. section&lt;br /&gt;
		if isShowingPage then&lt;br /&gt;
			page = page or title.prefixedText&lt;br /&gt;
			if options.display and options.display ~= &#039;&#039; then&lt;br /&gt;
				if normalizeTitle(options.display) == normalizeTitle(page) then&lt;br /&gt;
					display = options.display .. &#039; &#039; .. display&lt;br /&gt;
				else&lt;br /&gt;
					error(string.format(&lt;br /&gt;
						&#039;Display title &amp;quot;%s&amp;quot; was ignored since it is &#039; ..&lt;br /&gt;
						&amp;quot;not equivalent to the page&#039;s actual title&amp;quot;,&lt;br /&gt;
						options.display&lt;br /&gt;
					), 0)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				display = page .. &#039; &#039; .. display&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return makeSectionLink(linkPage, section, display)&lt;br /&gt;
	else&lt;br /&gt;
		-- Multiple sections. First, make a list of the links to display.&lt;br /&gt;
		local ret = {}&lt;br /&gt;
		for i, section in ipairs(sections) do&lt;br /&gt;
			ret[i] = makeSectionLink(page, section)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Assemble the list of links into a string with mw.text.listToText.&lt;br /&gt;
		-- We use the default separator for mw.text.listToText, but a custom&lt;br /&gt;
		-- conjunction. There is also a special case conjunction if we only&lt;br /&gt;
		-- have two links.&lt;br /&gt;
		local conjunction&lt;br /&gt;
		if #sections == 2 then&lt;br /&gt;
			conjunction = &#039;&amp;amp;#8203; and &#039;&lt;br /&gt;
		else&lt;br /&gt;
			conjunction = &#039;, and &#039;&lt;br /&gt;
		end&lt;br /&gt;
		ret = mw.text.listToText(ret, nil, conjunction)&lt;br /&gt;
&lt;br /&gt;
		-- Add the intro text.&lt;br /&gt;
		local intro = &#039;§§&amp;amp;nbsp;&#039;&lt;br /&gt;
		if isShowingPage then&lt;br /&gt;
			intro = (page or title.prefixedText) .. &#039; &#039; .. intro&lt;br /&gt;
		end&lt;br /&gt;
		ret = intro .. ret&lt;br /&gt;
&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {&lt;br /&gt;
		wrappers = &#039;Template:Section link&#039;,&lt;br /&gt;
		valueFunc = function (key, value)&lt;br /&gt;
			value = value:match(&#039;^%s*(.-)%s*$&#039;) -- Trim whitespace&lt;br /&gt;
			-- Allow blank first parameters, as the wikitext template does this.&lt;br /&gt;
			if value ~= &#039;&#039; or key == 1 then&lt;br /&gt;
				return value&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(args) do													-- replace underscores in the positional parameter values&lt;br /&gt;
		if &#039;number&#039; == type(k) then&lt;br /&gt;
			if not yesno (args[&#039;keep-underscores&#039;]) then						-- unless |keep-underscores=yes&lt;br /&gt;
				args[k] = mw.uri.decode (v, &#039;WIKI&#039;);							-- percent-decode; replace underscores with space characters&lt;br /&gt;
			else&lt;br /&gt;
				args[k] = mw.uri.decode (v, &#039;PATH&#039;);							-- percent-decode; retain underscores&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Sort the arguments.&lt;br /&gt;
	local page&lt;br /&gt;
	local sections, options = {}, {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if k == 1 then&lt;br /&gt;
			-- Doing this in the loop because of a bug in [[Module:Arguments]]&lt;br /&gt;
			-- when using pairs with deleted arguments.&lt;br /&gt;
			page = mw.text.decode(v, true)&lt;br /&gt;
		elseif type(k) == &#039;number&#039; then&lt;br /&gt;
			sections[k] = v&lt;br /&gt;
		else&lt;br /&gt;
			options[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	options.nopage = yesno (options.nopage);									-- make boolean&lt;br /&gt;
	&lt;br /&gt;
	-- Extract section from page, if present&lt;br /&gt;
	if page then&lt;br /&gt;
		local p, s = page:match(&#039;^(.-)#(.*)$&#039;)&lt;br /&gt;
		if p then page, sections[1] = p, s end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compress the sections array.&lt;br /&gt;
	local function compressArray(t)&lt;br /&gt;
		local nums, ret = {}, {}&lt;br /&gt;
		for num in pairs(t) do&lt;br /&gt;
			nums[#nums + 1] = num&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(nums)&lt;br /&gt;
		for i, num in ipairs(nums) do&lt;br /&gt;
			ret[i] = t[num]&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
	sections = compressArray(sections)&lt;br /&gt;
&lt;br /&gt;
	return p._main(page, sections, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Reply_to&amp;diff=2008</id>
		<title>پودمان:Reply to</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Reply_to&amp;diff=2008"/>
		<updated>2026-06-25T09:35:07Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.replyto(frame)&lt;br /&gt;
	local origArgs = frame:getParent().args&lt;br /&gt;
	local args = {}&lt;br /&gt;
	local maxArg = 1&lt;br /&gt;
	local usernames = 0&lt;br /&gt;
	for k, v in pairs(origArgs) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			if mw.ustring.match(v,&#039;%S&#039;) then&lt;br /&gt;
				if k &amp;gt; maxArg then maxArg = k end&lt;br /&gt;
				usernames = usernames + 1&lt;br /&gt;
				local title = mw.title.new(v)&lt;br /&gt;
				if not title then return &#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;خطا در [[الگو:پاسخ به]]: ورودی دارای نویسه‌های ممنوعه است.&amp;lt;/strong&amp;gt;&#039; end&lt;br /&gt;
				args[k] = title.rootText&lt;br /&gt;
			end&lt;br /&gt;
		elseif v == &#039;&#039; and k:sub(0,5) == &#039;label&#039; then&lt;br /&gt;
			args[k] = &#039;&amp;amp;#x200B;&#039;&lt;br /&gt;
		else&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if usernames &amp;gt; (tonumber(frame.args.max) or 50) then&lt;br /&gt;
		return string.format(&lt;br /&gt;
			&#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;خطا در [[الگو:پاسخ به]]: بیش از %s نام تعریف شده‌است.&amp;lt;/strong&amp;gt;&#039;,&lt;br /&gt;
			tostring(frame.args.max or 50)&lt;br /&gt;
		)&lt;br /&gt;
	else&lt;br /&gt;
		if usernames &amp;lt; 1 then&lt;br /&gt;
			if frame.args.example then args[1] = frame.args.example else return &#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;خطا در [[الگو:پاسخ به]]: نام کاربری داده نشده‌است.&amp;lt;/strong&amp;gt;&#039; end&lt;br /&gt;
		end&lt;br /&gt;
		local isfirst = true&lt;br /&gt;
		local outStr = &#039;&#039;&lt;br /&gt;
		for i = 1, maxArg do&lt;br /&gt;
			if args[i] then&lt;br /&gt;
				if isfirst then&lt;br /&gt;
					outStr = string.format(&lt;br /&gt;
						&#039;&amp;lt;span class=&amp;quot;template-ping&amp;quot;&amp;gt;%s[[کاربر:%s|%s]]&#039;,&lt;br /&gt;
						args[&#039;prefix&#039;] or &#039;@&#039;,&lt;br /&gt;
						args[i],&lt;br /&gt;
						(args[&#039;label1&#039;] or args[&#039;label&#039;]) or args[i]&lt;br /&gt;
					)&lt;br /&gt;
 					isfirst = false&lt;br /&gt;
				else&lt;br /&gt;
					if ( i &amp;lt; usernames and (usernames &amp;gt; 2) or ((usernames == 2) and (args[&#039;c&#039;] == &#039;&#039;)) ) then outStr = outStr..&#039;،&amp;amp;rlm;&#039; end&lt;br /&gt;
					if i == maxArg then outStr = outStr..&#039; &#039;..(args[&#039;c&#039;] or &#039;و&#039;) end&lt;br /&gt;
					outStr = string.format(&lt;br /&gt;
						&#039;%s [[کاربر:%s|%s]]&#039;,&lt;br /&gt;
						outStr,&lt;br /&gt;
						args[i],&lt;br /&gt;
						args[&#039;label&#039;..tostring(i)] or args[i]&lt;br /&gt;
					)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outStr = outStr..(args[&#039;p&#039;] or &#039;: &#039;)..&#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
		return outStr&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Redirect_template&amp;diff=2005</id>
		<title>پودمان:Redirect template</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Redirect_template&amp;diff=2005"/>
		<updated>2026-06-25T09:35:07Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&#039;Module:No globals&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- key is beginning of arg name. value is table with namespace number and link&lt;br /&gt;
-- alternatively, a function taking the namespace number and returning a validity&lt;br /&gt;
-- can be used&lt;br /&gt;
local namespaceCategories = {&lt;br /&gt;
	all = { function() return true end },&lt;br /&gt;
	main = { 0, &#039;[[wp:mainspace|main]]&#039; },&lt;br /&gt;
	help = { 12, &#039;[[wp:help namespace|help]]&#039; },&lt;br /&gt;
	portal = { 100, &#039;[[wp:portal|portal]]&#039; },&lt;br /&gt;
	talk = { function(n) return n &amp;gt; 0 and n%2 == 1 end, &#039;[[Help:Using talk pages|talk]]&#039; },&lt;br /&gt;
	template = { 10, &#039;[[wp:template namespace|template]]&#039; },&lt;br /&gt;
	wikipedia = { 4, &#039;[[wp:project namespace|Wikipedia project]]&#039; },&lt;br /&gt;
	category = { 14, &#039;[[wp:categorization|category]]&#039; },&lt;br /&gt;
	user = { 2, &#039;[[wp:user pages|user]]&#039; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- remove whitespaces from beginning and end of args&lt;br /&gt;
local function valueFunc(key, val)&lt;br /&gt;
	if type(val) == &#039;string&#039; then&lt;br /&gt;
		val = val:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
		if val == &#039;&#039; then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getPrettyName(args)&lt;br /&gt;
	for k in pairs(namespaceCategories) do&lt;br /&gt;
		if args[k .. &#039; category&#039;] then&lt;br /&gt;
			return string.format(&amp;quot;&#039;&#039;&#039;[[:Category:%s|%s]]&#039;&#039;&#039;: &amp;quot;, args[k .. &#039; category&#039;], args.name)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return string.format(&amp;quot;&#039;&#039;&#039;%s&#039;&#039;&#039;: &amp;quot;, args.name)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {wrappers = &#039;Template:Redirect template&#039;, valueFunc = valueFunc})&lt;br /&gt;
	local namespace = mw.title.getCurrentTitle().namespace&lt;br /&gt;
&lt;br /&gt;
	--- XXX: this is a HORRIBLE HACK. kill it with fire as soon as https://bugzilla.wikimedia.org/show_bug.cgi?id=12974 is fixed&lt;br /&gt;
	local beCompatibleWithBug12974 = args.info and (args.info:find(&#039;^[:;#*]&#039;, 1) == 1 or args.info:find(&#039;{|&#039;, 1, true) == 1) and &#039;\n&#039; or &#039; &#039;&lt;br /&gt;
	&lt;br /&gt;
	local content = string.format(&#039;\n&amp;lt;div class=&amp;quot;rcat %s&amp;quot;&amp;gt;\n*%sThis is a redirect%s%s.%s%s\n&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
		args.id and (&#039;rcat-&#039; .. string.gsub(args.id, &#039; &#039;, &#039;_&#039;)) or &#039;&#039;,&lt;br /&gt;
		args.name and getPrettyName(args) or &#039;&#039;,&lt;br /&gt;
		args.from and (&#039; from &#039; .. args.from) or &#039;&#039;,&lt;br /&gt;
		args.to and (&#039; to &#039; .. args.to) or &#039;&#039;,&lt;br /&gt;
		args.info and beCompatibleWithBug12974 or &#039;&#039;,&lt;br /&gt;
		args.info or &#039;&#039;&lt;br /&gt;
	)&lt;br /&gt;
	&lt;br /&gt;
	for k,v in pairs(namespaceCategories) do&lt;br /&gt;
		if args[k .. &#039; category&#039;] then&lt;br /&gt;
			if type(v[1]) == &#039;function&#039; and v[1](namespace) or v[1] == namespace then&lt;br /&gt;
				content = content .. string.format(&#039;[[Category:%s]]&#039;, args[k .. &#039; category&#039;])&lt;br /&gt;
			elseif args[&#039;other category&#039;] then&lt;br /&gt;
				content = content .. string.format(&#039;[[Category:%s]]&#039;, args[&#039;other category&#039;])&lt;br /&gt;
			else&lt;br /&gt;
				content = content .. frame:expandTemplate{title = &#039;Incorrect redirect template&#039;, args = {v[2]}}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if namespace == 0 then&lt;br /&gt;
		local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
		if yesno(args.printworthy) == true then&lt;br /&gt;
			return content .. &#039;[[Category:Printworthy redirects]]&#039;&lt;br /&gt;
		elseif yesno(args.printworthy) == false then&lt;br /&gt;
			return content .. &#039;[[Category:Unprintworthy redirects]]&#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return content&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Redirect_hatnote&amp;diff=2002</id>
		<title>پودمان:Redirect hatnote</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Redirect_hatnote&amp;diff=2002"/>
		<updated>2026-06-25T09:35:06Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[&lt;br /&gt;
-- This module produces a &amp;quot;redirect&amp;quot; hatnote. It looks like this:&lt;br /&gt;
-- &#039;&amp;quot;X&amp;quot; redirects here. For other uses, see Y.&#039;&lt;br /&gt;
-- It implements the {{redirect}} template.&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
local mHatnote = require(&#039;Module:Hatnote&#039;)&lt;br /&gt;
local mHatList = require(&#039;Module:Hatnote list&#039;)&lt;br /&gt;
local mArguments --lazily initialize&lt;br /&gt;
local libraryUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local checkTypeMulti = libraryUtil.checkTypeMulti&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function getTitle(...)&lt;br /&gt;
	local success, titleObj = pcall(mw.title.new, ...)&lt;br /&gt;
	if success then&lt;br /&gt;
		return titleObj&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.redirect(frame)&lt;br /&gt;
	mArguments = require(&#039;Module:Arguments&#039;)&lt;br /&gt;
	local args = mArguments.getArgs(frame, {parentOnly=true})&lt;br /&gt;
	--Get number of redirects&lt;br /&gt;
	local numRedirects = tonumber(frame.args[1]) or 1&lt;br /&gt;
	-- Create the options table.&lt;br /&gt;
	local options = {}&lt;br /&gt;
	options.selfref = args.selfref&lt;br /&gt;
	return p._redirect(args, numRedirects, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._redirect(args, numRedirects, options, currentTitle, redirectTitle, targetTitle)&lt;br /&gt;
	-- Validate the input. Don&#039;t bother checking currentTitle, redirectTitle or&lt;br /&gt;
	-- targetTitle, as they are only used in testing.&lt;br /&gt;
	checkType(&#039;_redirect&#039;, 1, args, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;_redirect&#039;, 2, numRedirects, &#039;number&#039;, true)&lt;br /&gt;
	numRedirects = numRedirects or 1&lt;br /&gt;
	checkType(&#039;_redirect&#039;, 3, options, &#039;table&#039;, true)&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	currentTitle = currentTitle or mw.title.getCurrentTitle()&lt;br /&gt;
	-- Get the table of redirects&lt;br /&gt;
	local redirect = {}&lt;br /&gt;
	for i = 1, numRedirects do&lt;br /&gt;
		-- Return an error if a redirect parameter is missing.&lt;br /&gt;
		if not args[i] then&lt;br /&gt;
			return mHatnote.makeWikitextError(&lt;br /&gt;
				&#039;missing redirect parameter&#039;,&lt;br /&gt;
				&#039;Template:Redirect#Errors&#039;,&lt;br /&gt;
				args.category&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
		redirect[i] = args[i]&lt;br /&gt;
	end&lt;br /&gt;
	-- Generate the text.&lt;br /&gt;
	local formattedRedirect = {}&lt;br /&gt;
	for k,v in pairs(redirect) do&lt;br /&gt;
		formattedRedirect[k] = &#039;«&#039; .. v .. &#039;»&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local text = {&lt;br /&gt;
		 mHatList.andList(formattedRedirect) .. &#039; &#039; .. (#redirect == 1 and &#039;به اینجا تغییرمسیر دارد.&#039; or &#039;به اینجا تغییرمسیر دارند.&#039;),&lt;br /&gt;
		mHatList._forSee(args, #redirect + 1, {title = redirect[1]})&lt;br /&gt;
	}&lt;br /&gt;
	text = table.concat(text, &#039; &#039;)&lt;br /&gt;
	-- Functionality for adding categories	&lt;br /&gt;
	local categoryTable = {}&lt;br /&gt;
	function addCategory(cat)&lt;br /&gt;
		if cat and cat ~= &#039;&#039; then&lt;br /&gt;
			-- Add by index to avoid duplicates&lt;br /&gt;
			categoryTable[string.format(&#039;[[رده:%s]]&#039;, cat)] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	--Generate tracking categories&lt;br /&gt;
	local mhOptions = {}&lt;br /&gt;
	for k,v in pairs(redirect) do&lt;br /&gt;
		-- We don&#039;t need a tracking category if the template invocation has been&lt;br /&gt;
		-- copied directly from the docs, or if we aren&#039;t in main- or category-space.&lt;br /&gt;
		if not v:find(&#039;^(REDIRECT|تغییر_?مسیر)%d*$&#039;) and v ~= &#039;TERM&#039; -- &lt;br /&gt;
			and currentTitle.namespace == 0 or currentTitle.namespace == 14&lt;br /&gt;
		then&lt;br /&gt;
			redirectTitle = redirectTitle or getTitle(v)&lt;br /&gt;
			if not redirectTitle or not redirectTitle.exists then&lt;br /&gt;
				addCategory(&#039;Missing redirects&#039;)&lt;br /&gt;
			elseif not redirectTitle.isRedirect then&lt;br /&gt;
				addCategory(&#039;تغییرمسیرهای گم‌شده&#039;)&lt;br /&gt;
			else&lt;br /&gt;
				local mRedirect = require(&#039;Module:Redirect&#039;)&lt;br /&gt;
				local target = mRedirect.getTarget(redirectTitle)&lt;br /&gt;
				targetTitle = targetTitle or target and getTitle(target)&lt;br /&gt;
				if targetTitle and targetTitle ~= currentTitle then&lt;br /&gt;
					addCategory(&#039;تغییرمسیرهای گم‌شده&#039;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Generate the options to pass to [[Module:Hatnote]].&lt;br /&gt;
		if currentTitle.namespace == 0 and not mhOptions.selfref&lt;br /&gt;
			and redirectTitle and redirectTitle.namespace ~= 0&lt;br /&gt;
		then&lt;br /&gt;
			-- We are on a mainspace page, and the hatnote starts with something&lt;br /&gt;
			-- like &amp;quot;Wikipedia:Foo redirects here&amp;quot;, so automatically label it as&lt;br /&gt;
			-- a self-reference.&lt;br /&gt;
			mhOptions.selfref = true&lt;br /&gt;
		else&lt;br /&gt;
			mhOptions.selfref = options.selfref&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	--concatenate all the categories&lt;br /&gt;
	local category = &#039;&#039;&lt;br /&gt;
	for k,v in pairs(categoryTable) do&lt;br /&gt;
		category = category .. k&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mHatnote._hatnote(text, mhOptions) .. category&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Redirect&amp;diff=1999</id>
		<title>پودمان:Redirect</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Redirect&amp;diff=1999"/>
		<updated>2026-06-25T09:35:06Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module provides functions for getting the target of a redirect page.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Gets a mw.title object, using pcall to avoid generating script errors if we&lt;br /&gt;
-- are over the expensive function count limit (among other possible causes).&lt;br /&gt;
local function getTitle(...)&lt;br /&gt;
	local success, titleObj = pcall(mw.title.new, ...)&lt;br /&gt;
	if success then&lt;br /&gt;
		return titleObj&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Gets the name of a page that a redirect leads to, or nil if it isn&#039;t a&lt;br /&gt;
-- redirect.&lt;br /&gt;
function p.getTargetFromText(text)&lt;br /&gt;
	return string.match(&lt;br /&gt;
		text,&lt;br /&gt;
		&amp;quot;^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)%]%]&amp;quot;&lt;br /&gt;
	) or string.match(&lt;br /&gt;
		text,&lt;br /&gt;
		&amp;quot;^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]&amp;quot;&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Gets the target of a redirect. If the page specified is not a redirect,&lt;br /&gt;
-- returns nil.&lt;br /&gt;
function p.getTarget(page, fulltext)&lt;br /&gt;
	-- Get the title object. Both page names and title objects are allowed&lt;br /&gt;
	-- as input.&lt;br /&gt;
	local titleObj&lt;br /&gt;
	if type(page) == &#039;string&#039; or type(page) == &#039;number&#039; then&lt;br /&gt;
		titleObj = getTitle(page)&lt;br /&gt;
	elseif type(page) == &#039;table&#039; and type(page.getContent) == &#039;function&#039; then&lt;br /&gt;
		titleObj = page&lt;br /&gt;
	else&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;quot;bad argument #1 to &#039;getTarget&#039;&amp;quot;&lt;br /&gt;
				.. &amp;quot; (string, number, or title object expected, got %s)&amp;quot;,&lt;br /&gt;
			type(page)&lt;br /&gt;
		), 2)&lt;br /&gt;
	end&lt;br /&gt;
	if not titleObj or not titleObj.isRedirect then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Find the target by using string matching on the page content.&lt;br /&gt;
	local target = p.getTargetFromText(titleObj:getContent() or &amp;quot;&amp;quot;)&lt;br /&gt;
	if target then&lt;br /&gt;
		local targetTitle = getTitle(target)&lt;br /&gt;
		if targetTitle then&lt;br /&gt;
			if fulltext then&lt;br /&gt;
				return targetTitle.fullText&lt;br /&gt;
			else&lt;br /&gt;
				return targetTitle.prefixedText&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- The page is a redirect, but matching failed. This indicates a bug in&lt;br /&gt;
		-- the redirect matching pattern, so throw an error.&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&#039;could not parse redirect on page &amp;quot;%s&amp;quot;&#039;,&lt;br /&gt;
			fulltext and titleObj.fullText or titleObj.prefixedText&lt;br /&gt;
		))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- Given a single page name determines what page it redirects to and returns the&lt;br /&gt;
-- target page name, or the passed page name when not a redirect. The passed&lt;br /&gt;
-- page name can be given as plain text or as a page link.&lt;br /&gt;
-- &lt;br /&gt;
-- Returns page name as plain text, or when the bracket parameter is given, as a&lt;br /&gt;
-- page link. Returns an error message when page does not exist or the redirect&lt;br /&gt;
-- target cannot be determined for some reason.&lt;br /&gt;
--]]&lt;br /&gt;
function p.luaMain(rname, bracket, fulltext)&lt;br /&gt;
	if type(rname) ~= &amp;quot;string&amp;quot; or not rname:find(&amp;quot;%S&amp;quot;) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	bracket = bracket and &amp;quot;[[%s]]&amp;quot; or &amp;quot;%s&amp;quot;&lt;br /&gt;
	rname = rname:match(&amp;quot;%[%[(.+)%]%]&amp;quot;) or rname&lt;br /&gt;
	local target = p.getTarget(rname, fulltext)&lt;br /&gt;
	local ret = target or rname&lt;br /&gt;
	ret = getTitle(ret)&lt;br /&gt;
	if ret then&lt;br /&gt;
		if fulltext then&lt;br /&gt;
			ret = ret.fullText&lt;br /&gt;
		else&lt;br /&gt;
			ret = ret.prefixedText&lt;br /&gt;
		end&lt;br /&gt;
		return bracket:format(ret)&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Provides access to the luaMain function from wikitext.&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {frameOnly = true})&lt;br /&gt;
	return p.luaMain(args[1], args.bracket, args.fulltext) or &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Returns true if the specified page is a redirect, and false otherwise.&lt;br /&gt;
function p.luaIsRedirect(page)&lt;br /&gt;
	local titleObj = getTitle(page)&lt;br /&gt;
	if not titleObj then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	if titleObj.isRedirect then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Provides access to the luaIsRedirect function from wikitext, returning &#039;yes&#039;&lt;br /&gt;
-- if the specified page is a redirect, and the blank string otherwise.&lt;br /&gt;
function p.isRedirect(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {frameOnly = true})&lt;br /&gt;
	if p.luaIsRedirect(args[1]) then&lt;br /&gt;
		return &#039;yes&#039;&lt;br /&gt;
	else&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Protection_banner/config&amp;diff=1996</id>
		<title>پودمان:Protection banner/config</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Protection_banner/config&amp;diff=1996"/>
		<updated>2026-06-25T09:35:06Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module provides configuration data for [[Module:Protection banner]].&lt;br /&gt;
-- این پودمان بسیار حساس است به‌دقت بومی‌سازی شده‌است. هنگام به‌روزرسانی دقت کنید.&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--&lt;br /&gt;
--                                BANNER DATA&lt;br /&gt;
--&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- Banner data consists of six fields:&lt;br /&gt;
-- * text - the main protection text that appears at the top of protection&lt;br /&gt;
--   banners.&lt;br /&gt;
-- * explanation - the text that appears below the main protection text, used&lt;br /&gt;
--   to explain the details of the protection.&lt;br /&gt;
-- * tooltip - the tooltip text you see when you move the mouse over a small&lt;br /&gt;
--   padlock icon.&lt;br /&gt;
-- * link - the page that the small padlock icon links to.&lt;br /&gt;
-- * alt - the alt text for the small padlock icon. This is also used as tooltip&lt;br /&gt;
--   text for the large protection banners.&lt;br /&gt;
-- * image - the padlock image used in both protection banners and small padlock&lt;br /&gt;
--   icons.&lt;br /&gt;
--&lt;br /&gt;
-- The module checks in three separate tables to find a value for each field.&lt;br /&gt;
-- First it checks the banners table, which has values specific to the reason&lt;br /&gt;
-- for the page being protected. Then the module checks the defaultBanners&lt;br /&gt;
-- table, which has values specific to each protection level. Finally, the&lt;br /&gt;
-- module checks the masterBanner table, which holds data for protection&lt;br /&gt;
-- templates to use if no data has been found in the previous two tables.&lt;br /&gt;
--&lt;br /&gt;
-- The values in the banner data can take parameters. These are specified&lt;br /&gt;
-- using ${TEXTLIKETHIS} (a dollar sign preceding a parameter name&lt;br /&gt;
-- enclosed in curly braces).&lt;br /&gt;
--&lt;br /&gt;
--                          Available parameters:&lt;br /&gt;
--&lt;br /&gt;
-- ${CURRENTVERSION} - a link to the page history or the move log, with the&lt;br /&gt;
-- display message &amp;quot;current-version-edit-display&amp;quot; or&lt;br /&gt;
-- &amp;quot;current-version-move-display&amp;quot;.&lt;br /&gt;
--&lt;br /&gt;
-- ${EDITREQUEST} - a link to create an edit request for the current page.&lt;br /&gt;
--&lt;br /&gt;
-- ${EXPLANATIONBLURB} - an explanation blurb, e.g. &amp;quot;Please discuss any changes&lt;br /&gt;
-- on the talk page; you may submit a request to ask an administrator to make&lt;br /&gt;
-- an edit if it is minor or supported by consensus.&amp;quot;&lt;br /&gt;
--&lt;br /&gt;
-- ${IMAGELINK} - a link to set the image to, depending on the protection&lt;br /&gt;
-- action and protection level.&lt;br /&gt;
--&lt;br /&gt;
-- ${INTROBLURB} - the PROTECTIONBLURB parameter, plus the expiry if an expiry&lt;br /&gt;
-- is set. E.g. &amp;quot;Editing of this page by new or unregistered users is currently &lt;br /&gt;
-- disabled until dd Month YYYY.&amp;quot;&lt;br /&gt;
--&lt;br /&gt;
-- ${INTROFRAGMENT} - the same as ${INTROBLURB}, but without final punctuation&lt;br /&gt;
-- so that it can be used in run-on sentences.&lt;br /&gt;
--&lt;br /&gt;
-- ${PAGETYPE} - the type of the page, e.g. &amp;quot;article&amp;quot; or &amp;quot;template&amp;quot;.&lt;br /&gt;
-- Defined in the cfg.pagetypes table.&lt;br /&gt;
--&lt;br /&gt;
-- ${PROTECTIONBLURB} - a blurb explaining the protection level of the page, e.g.&lt;br /&gt;
-- &amp;quot;Editing of this page by new or unregistered users is currently disabled&amp;quot;&lt;br /&gt;
--&lt;br /&gt;
-- ${PROTECTIONDATE} - the protection date, if it has been supplied to the&lt;br /&gt;
-- template.&lt;br /&gt;
--&lt;br /&gt;
-- ${PROTECTIONLEVEL} - the protection level, e.g. &amp;quot;fully protected&amp;quot; or&lt;br /&gt;
-- &amp;quot;semi-protected&amp;quot;.&lt;br /&gt;
--&lt;br /&gt;
-- ${PROTECTIONLOG} - a link to the protection log or the pending changes log,&lt;br /&gt;
-- depending on the protection action.&lt;br /&gt;
--&lt;br /&gt;
-- ${TALKPAGE} - a link to the talk page. If a section is specified, links&lt;br /&gt;
-- straight to that talk page section.&lt;br /&gt;
--&lt;br /&gt;
-- ${TOOLTIPBLURB} - uses the PAGETYPE, PROTECTIONTYPE and EXPIRY parameters to&lt;br /&gt;
-- create a blurb like &amp;quot;This template is semi-protected&amp;quot;, or &amp;quot;This article is&lt;br /&gt;
-- move-protected until DD Month YYYY&amp;quot;.&lt;br /&gt;
--&lt;br /&gt;
-- ${VANDAL} - links for the specified username (or the root page name)&lt;br /&gt;
-- using Module:Vandal-m.&lt;br /&gt;
--&lt;br /&gt;
--                                 Functions&lt;br /&gt;
--&lt;br /&gt;
-- For advanced users, it is possible to use Lua functions instead of strings&lt;br /&gt;
-- in the banner config tables. Using functions gives flexibility that is not&lt;br /&gt;
-- possible just by using parameters. Functions take two arguments, the&lt;br /&gt;
-- protection object and the template arguments, and they must output a string.&lt;br /&gt;
--&lt;br /&gt;
-- For example:&lt;br /&gt;
--&lt;br /&gt;
-- text = function (protectionObj, args)&lt;br /&gt;
--     if protectionObj.level == &#039;autoconfirmed&#039; then&lt;br /&gt;
--         return &#039;foo&#039;&lt;br /&gt;
--     else&lt;br /&gt;
--         return &#039;bar&#039;&lt;br /&gt;
--     end&lt;br /&gt;
-- end&lt;br /&gt;
--&lt;br /&gt;
-- Some protection object properties and methods that may be useful:&lt;br /&gt;
-- protectionObj.action - the protection action&lt;br /&gt;
-- protectionObj.level - the protection level&lt;br /&gt;
-- protectionObj.reason - the protection reason&lt;br /&gt;
-- protectionObj.expiry - the expiry. Nil if unset, the string &amp;quot;indef&amp;quot; if set&lt;br /&gt;
--     to indefinite, and the protection time in unix time if temporary.&lt;br /&gt;
-- protectionObj.protectionDate - the protection date in unix time, or nil if&lt;br /&gt;
--     unspecified.&lt;br /&gt;
-- protectionObj.bannerConfig - the banner config found by the module. Beware&lt;br /&gt;
--     of editing the config field used by the function, as it could create an&lt;br /&gt;
--     infinite loop.&lt;br /&gt;
-- protectionObj:isProtected - returns a boolean showing whether the page is&lt;br /&gt;
--     protected.&lt;br /&gt;
-- protectionObj:isTemporary - returns a boolean showing whether the expiry is&lt;br /&gt;
--     temporary.&lt;br /&gt;
-- protectionObj:isIncorrect - returns a boolean showing whether the protection&lt;br /&gt;
--     template is incorrect.&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
-- The master banner data, used if no values have been found in banners or&lt;br /&gt;
-- defaultBanners.&lt;br /&gt;
masterBanner = {&lt;br /&gt;
	text = &#039;${INTROBLURB}&#039;,&lt;br /&gt;
	explanation = &#039;${EXPLANATIONBLURB}&#039;,&lt;br /&gt;
	tooltip = &#039;${TOOLTIPBLURB}&#039;,&lt;br /&gt;
	link = &#039;${IMAGELINK}&#039;,&lt;br /&gt;
	alt = &#039;صفحه ${PROTECTIONLEVEL}&#039;&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
-- The default banner data. This holds banner data for different protection&lt;br /&gt;
-- levels.&lt;br /&gt;
-- *required* - this table needs edit, move, autoreview and upload subtables.&lt;br /&gt;
defaultBanners = {&lt;br /&gt;
	edit = {},&lt;br /&gt;
	move = {},&lt;br /&gt;
	autoreview = {&lt;br /&gt;
		autoconfirmed = {&lt;br /&gt;
			alt = &#039;صفحه با تغییرات در انتظار سطح ۱ حفاظت شده‌است&#039;,&lt;br /&gt;
			tooltip = &#039;همه ویرایش‌های کاربران ثبت‌نام‌نکرده و کاربران تازه‌کار در حال انتظار برای بررسی هستند&#039;,&lt;br /&gt;
			image = &#039;Pending-protection-shackle-double-ticks.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		default = {&lt;br /&gt;
			alt = &#039;صفحه با تغییرات در انتظار سطح ۲ حفاظت شده‌است&#039;,&lt;br /&gt;
			tooltip = &#039;همه ویرایش‌های کاربرانی که بازبین یا مدیر نیستند&#039;&lt;br /&gt;
				.. &#039; در حال انتظار برای بررسی هستند&#039;,&lt;br /&gt;
			image = &#039;Padlock-orange.svg&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	upload = {}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
-- The banner data. This holds banner data for different protection reasons.&lt;br /&gt;
-- In fact, the reasons specified in this table control which reasons are&lt;br /&gt;
-- valid inputs to the first positional parameter.&lt;br /&gt;
--&lt;br /&gt;
-- There is also a non-standard &amp;quot;description&amp;quot; field that can be used for items&lt;br /&gt;
-- in this table. This is a description of the protection reason for use in the&lt;br /&gt;
-- module documentation.&lt;br /&gt;
--&lt;br /&gt;
-- *required* - this table needs edit, move, autoreview and upload subtables.&lt;br /&gt;
banners = {&lt;br /&gt;
	edit = {&lt;br /&gt;
		blp = {&lt;br /&gt;
			description = &#039;برای صفحاتی که جهت ترویج رعایت&#039;&lt;br /&gt;
				.. &#039; سیاست [[ویکی‌پدیا:زندگی‌نامه زندگان&#039;&lt;br /&gt;
				.. &#039;|زندگی‌نامه زندگان]] حفاظت شده‌اند.&#039;,&lt;br /&gt;
			text = &#039;${INTROFRAGMENT} برای ترویج رعایت&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:زندگی‌نامه زندگان&#039;&lt;br /&gt;
				.. &amp;quot;|سیاست ویکی‌پدیا برای&amp;quot;&lt;br /&gt;
				.. &#039; زندگی‌نامه زندگان]].&#039;,&lt;br /&gt;
			tooltip = &#039;${TOOLTIPFRAGMENT} برای ترویج رعایت سیاست&#039;&lt;br /&gt;
				.. &#039; زندگی‌نامه زندگان&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		dmca = {&lt;br /&gt;
			description = &#039;برای صفحاتی که توسط بنیاد ویکی‌مدیا به دلیل&#039;&lt;br /&gt;
				.. &#039; حذف درخواست‌های قانون حق تکثیر ملینیوم دیجیتال حفاظت شده‌اند.&#039;,&lt;br /&gt;
			explanation = function (protectionObj, args)&lt;br /&gt;
				local ret = &#039;به دنبال اطلاع صاحب حقوق تحت&#039;&lt;br /&gt;
					.. &#039; قانون حق تکثیر ملینیوم (DMCA) در مورد برخی محتوا&#039;&lt;br /&gt;
					.. &#039; در این مقاله، بنیاد ویکی‌مدیا تحت قانون اجرایی&#039;&lt;br /&gt;
					.. &#039; و برچیدن و محتوای محدود‌شده مشکوک&#039;&lt;br /&gt;
					.. &#039; عمل کرده‌است.&#039;&lt;br /&gt;
				if args.notice then&lt;br /&gt;
					ret = ret .. &#039; یک نگارش از اخطار دریافت‌شده اینجا یافت می‌شود: &#039;&lt;br /&gt;
						.. args.notice .. &#039;.&#039;&lt;br /&gt;
				end&lt;br /&gt;
				ret = ret .. &#039; برای کسب اطلاعات بیشتر، از جمله وبگاه‌هایی که بر سر&#039;&lt;br /&gt;
					.. &#039; چگونگی بایگانی‌کردن یک دفاعیه در برابر اخطار بحث می‌کنند، لطفاً&#039;&lt;br /&gt;
					.. &amp;quot; [[:en:Wikipedia:Office actions]] و ${TALKPAGE} مقاله را ببینید.&amp;quot;&lt;br /&gt;
					.. &amp;quot;&#039;&#039;&#039;این الگو را از مقاله تا وقتی که&amp;quot;&lt;br /&gt;
					.. &amp;quot; از محدودیت‌ها صرف نظر نشده‌است حذف نکنید&#039;&#039;&#039;.&amp;quot;&lt;br /&gt;
				return ret&lt;br /&gt;
			end,&lt;br /&gt;
			image = &#039;Office-protection-shackle-WMFlogo.svg&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		dispute = {&lt;br /&gt;
			description = &#039;برای صفحاتی که به دلیل اختلافات ویرایشی حفاظت شده‌اند.&#039;,&lt;br /&gt;
			text = function (protectionObj, args)&lt;br /&gt;
				-- Find the value of &amp;quot;disputes&amp;quot;.&lt;br /&gt;
				local display = &#039;اختلافات&#039;&lt;br /&gt;
				local disputes&lt;br /&gt;
				if args.section then&lt;br /&gt;
					disputes = string.format(&lt;br /&gt;
						&#039;[[%s:%s#%s|%s]]&#039;,&lt;br /&gt;
						mw.site.namespaces[protectionObj.title.namespace].talk.name,&lt;br /&gt;
						protectionObj.title.text,&lt;br /&gt;
						args.section,&lt;br /&gt;
						display&lt;br /&gt;
					)&lt;br /&gt;
				else&lt;br /&gt;
					disputes = display&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				-- Make the blurb, depending on the expiry.&lt;br /&gt;
				local msg&lt;br /&gt;
				if type(protectionObj.expiry) == &#039;number&#039; then&lt;br /&gt;
					msg = &#039;${INTROFRAGMENT} یا تا ویرایش %s حل شده باشد.&#039;&lt;br /&gt;
				else&lt;br /&gt;
					msg = &#039;${INTROFRAGMENT} تا ویرایش %s حل شده باشد.&#039;&lt;br /&gt;
				end&lt;br /&gt;
				return string.format(msg, disputes)&lt;br /&gt;
			end,&lt;br /&gt;
			explanation = &amp;quot;این حفاظت تأیید بر ${CURRENTVERSION}&amp;quot;&lt;br /&gt;
				.. &amp;quot; &#039;&#039;&#039;نمی‌باشد&#039;&#039;&#039;. ${EXPLANATIONBLURB}&amp;quot;,&lt;br /&gt;
			tooltip = &#039;${TOOLTIPFRAGMENT} به دلیل اختلافات ویرایشی&#039;,&lt;br /&gt;
			},&lt;br /&gt;
			ecp = {&lt;br /&gt;
				description = &#039;برای مقالاتی در زمینه‌های موضوعی تصویب‌شده توسط&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:هیئت داوری|هیئت داوری]] یا&#039;&lt;br /&gt;
				.. &#039; برخورداری از معیارهای کاربرد جامعه&#039;,&lt;br /&gt;
				tooltip = &#039;این ${PAGETYPE} تأییدشدهٔ پایدار حفاظت شده‌است&#039;,&lt;br /&gt;
				alt = &#039;${PAGETYPE} حفاظت‌شده&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		mainpage = {&lt;br /&gt;
			description = &#039;برای صفحاتی که از نشان داده‌شدن در [[صفحهٔ اصلی]] حفاظت شده‌است.&#039;,&lt;br /&gt;
			text = &#039;این پرونده هم اکنون&#039;&lt;br /&gt;
				.. &#039; در برابر ویرایش‌شدن به دلیل هم اکنون نمایش یافتن یا به زودی نمایش داده‌شدن&#039;&lt;br /&gt;
				.. &#039; در [[صفحهٔ اصلی]]&#039;&lt;br /&gt;
				.. &#039; [[راهنما:حفاظت|حفاظت]] شده‌است.&#039;,&lt;br /&gt;
			explanation = &#039;تصاویر در صفحهٔ اصلی به دلیل دید بالا حفاظت شده‌اند.&#039;&lt;br /&gt;
				.. &#039; لطفاً دربارهٔ هر تغییر لازم در ${TALKPAGE} گفتگو کنید.&#039;&lt;br /&gt;
				.. &#039;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size:90%;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
				.. &amp;quot;&#039;&#039;&#039;مدیران:&#039;&#039;&#039; هنگامی که این تصویر مطمئن هستید خارج از صفحهٔ اصلی است،&amp;quot;&lt;br /&gt;
				.. &#039; لطفاً آن را از حفاظت در آورید، یا به نیمه‌حفاظت‌شده کاهش دهید،&#039;&lt;br /&gt;
				.. &#039; اگر مناسب است.&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		office = {&lt;br /&gt;
			description = &#039;برای صفحاتی که توسط بنیاد ویکی‌مدیا حفاظت شده‌است.&#039;,&lt;br /&gt;
			text = function (protectionObj, args)&lt;br /&gt;
				local ret = &#039;این ${PAGETYPE} هم اکنون تحت&#039;&lt;br /&gt;
					.. &#039; بررسی&#039;&lt;br /&gt;
					.. &#039; [[:en:Wikipedia:Office actions|اداره بنیاد ویکی‌مدیا]] است&#039;&lt;br /&gt;
					.. &#039; و حفاظت می‌شود.&#039;&lt;br /&gt;
				if protectionObj.protectionDate then&lt;br /&gt;
					ret = ret .. &#039; این صفحه از ${PROTECTIONDATE} حفاظت می‌شود.&#039;&lt;br /&gt;
				end&lt;br /&gt;
				return ret&lt;br /&gt;
			end,&lt;br /&gt;
			explanation = &amp;quot;اگر شما می‌توانید این صفحه را ویرایش کنید، لطفاً نخست دربارهٔ همه تغییرات&amp;quot;&lt;br /&gt;
				.. &amp;quot; و اضافه بر آن در ${TALKPAGE} گفتگو کنید. &#039;&#039;&#039;حفاظت را از این صفحه&amp;quot;&lt;br /&gt;
				.. &amp;quot; حذف نکنید مگر توسط بنیاد ویکی‌مدیا برای این کار مجاز دانسته&amp;quot;&lt;br /&gt;
				.. &amp;quot; شده‌اید.&#039;&#039;&#039;&amp;quot;,&lt;br /&gt;
			image = &#039;Office-protection-shackle-WMFlogo.svg&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		reset = {&lt;br /&gt;
			description = &#039;برای صفحاتی که توسط بنیاد ویکی‌مدیا محافظت می‌شود و&#039;&lt;br /&gt;
				.. &#039; به نسخه‌ای کاهش‌یافته «بازنشانده شده‌است».&#039;,&lt;br /&gt;
 			text = &#039;این ${PAGETYPE} هم اکنون تحت&#039;&lt;br /&gt;
					.. &#039; بررسی دقیق&#039;&lt;br /&gt;
					.. &#039; [[:en:Wikipedia:Office actions|اداره بنیاد ویکی‌مدیا]]&#039;&lt;br /&gt;
					.. &#039; بوده و محافظت می‌شود.&#039;,&lt;br /&gt;
			explanation = function (protectionObj, args)&lt;br /&gt;
				local ret = &#039;&#039;&lt;br /&gt;
				if protectionObj.protectionDate then&lt;br /&gt;
					ret = ret .. &#039;در ${PROTECTIONDATE} این ${PAGETYPE}&#039;&lt;br /&gt;
				else&lt;br /&gt;
					ret = ret .. &#039;این ${PAGETYPE}&#039;&lt;br /&gt;
				end&lt;br /&gt;
				ret = ret .. &#039; به یک نسخهٔ&#039;&lt;br /&gt;
				.. &#039; ساده و «فقط شامل پایه و عناصر ضروری» کاهش یافته‌است که ممکن است برای&#039;&lt;br /&gt;
				.. &#039; اطمینان از تطابق با سیاست‌های [[وپ:بی‌طرف|دیدگاه بی‌طرف]] و&#039;&lt;br /&gt;
				.. &#039; [[وپ:تأیید|تأییدپذیری]] کاملاً بازنویسی شده‌باشد.&#039;&lt;br /&gt;
				.. &#039; سیاست‌های استاندارد ویکی‌پدیا به بازنویسی خودش اعمال می‌شود—که&#039;&lt;br /&gt;
				.. &#039; در نهایت برای همهٔ ویراستاران باز خواهد بود—و به شدت اجرا&#039;&lt;br /&gt;
				.. &#039; خواهد شد. این ${PAGETYPE} هنگام بازسازی&#039;&lt;br /&gt;
				.. &#039; ${PROTECTIONLEVEL} شده‌است.\n\n&#039;&lt;br /&gt;
				.. &#039;درج مستقیم هر چیز از&#039;&lt;br /&gt;
				.. &#039; بازبینی‌های پیش از حفاظت از این ${PAGETYPE} حذف خواهد شد،&#039;&lt;br /&gt;
				.. &#039; همینطور هر ماده افزوده‌شده به این ${PAGETYPE} که به درستی به منبع ارجاع نشده‌است.&#039;&lt;br /&gt;
				.. &#039; صفحه(های) بحث مرتبط هم در همان تاریخ&#039;&lt;br /&gt;
				.. &amp;quot; حذف می‌شود.\n\n&amp;quot;&lt;br /&gt;
				.. &amp;quot;اگر شما می‌توانید این صفحه را ویرایش کنید، لطفاً نخست دربارهٔ همه تغییرات و&amp;quot;&lt;br /&gt;
				.. &amp;quot; اضافه بر آن در ${TALKPAGE} بحث کنید. &#039;&#039;&#039;این کار را نادیده نگیرید،&amp;quot;&lt;br /&gt;
				.. &amp;quot; و حفاظت را از این صفحه حذف نکنید،&amp;quot;&lt;br /&gt;
				.. &amp;quot; مگر برای انجامش توسط بنیاد ویکی‌مدیا مجاز دانسته شده‌اید.&amp;quot;&lt;br /&gt;
				.. &amp;quot; هیچ ویراستاری این اطلاعیه را حذف نکند.&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
				return ret&lt;br /&gt;
			end,&lt;br /&gt;
			image = &#039;Office-protection-shackle-WMFlogo.svg&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		sock = {&lt;br /&gt;
			description = &#039;برای صفحاتی که به دلیل&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:حساب زاپاس|حساب زاپاس] حفاظت شده‌است.&#039;,&lt;br /&gt;
			text = &#039;${INTROFRAGMENT} برای جلوگیری از [[ویکی‌پدیا:قطع دسترسی|قطع دسترسی]]&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:حساب زاپاس|حساب‌های زاپاس]] یا&#039;&lt;br /&gt;
				.. &#039; جلوگیری از ویرایش آن توسط&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:سیاست تحریم|کاربران مسدودشده]].&#039;,&lt;br /&gt;
			tooltip = &#039;${TOOLTIPFRAGMENT} برای جلوگیری از قطع دسترسی حساب‌های زاپاس یا جلوگیری از&#039;&lt;br /&gt;
				.. &#039; ویرایش آن توسط کاربران مسدودشده&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		template = {&lt;br /&gt;
			description = &#039;برای الگوهای [[ویکی‌پدیا:الگوهای حساس|حساس]]&#039;&lt;br /&gt;
				.. &#039; و پودمان‌های لوآ.&#039;,&lt;br /&gt;
			text = &#039;این ${PAGETYPE} به دلیل [[ویکی‌پدیا:الگوهای حساس|حساسیت]]،&#039;&lt;br /&gt;
				.. &#039; به طور دائم [[راهنما:حفاظت|حفاظت‌شده]] است.&#039;,&lt;br /&gt;
			explanation = &#039;لطفاً دربارهٔ هر تغییر در ${TALKPAGE} گفتگو کنید؛ شما می‌توانید&#039;&lt;br /&gt;
				.. &#039; از یک [[ویکی‌پدیا:مدیران|مدیر]] یا&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:ویرایشگر الگو|ویراستار الگو]] بخواهید&#039;&lt;br /&gt;
				.. &#039; ${EDITREQUEST} یک ویرایش انجام دهد اگر&#039;&lt;br /&gt;
				.. &#039; آن ویرایش یک ویرایش [[راهنما:ویرایش جزئی#چه هنگامی ویرایش جزئی است؟|غیر جنجالی]]&#039;&lt;br /&gt;
				.. &#039; است یا توسط&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:اجماع|اجماع]] حمایت می‌شود. شما همچنین می‌توانید&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:درخواست محافظت صفحه|درخواست کنید]] که آن&#039;&lt;br /&gt;
				.. &#039; صفحه از حفاظت خارج شود.&#039;,&lt;br /&gt;
			tooltip = &#039;این ${PAGETYPE} حساس به دلیل جلوگیری&#039;&lt;br /&gt;
				.. &#039; از خرابکاری به طور دائم ${PROTECTIONLEVEL} است&#039;,&lt;br /&gt;
			alt = &#039;${PAGETYPE} به طور دائم حفاظت‌شده است&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		usertalk = {&lt;br /&gt;
			description = &#039;برای صفحات حفاظت‌شده در برابر ویرایش‌های مخرب توسط یک&#039;&lt;br /&gt;
				.. &#039; کاربر ویژه.&#039;,&lt;br /&gt;
			text = &#039;${INTROFRAGMENT} برای جلوگیری از ${VANDAL} در برابر استفاده از آن برای انجام ویرایش‌های مخرب،&#039;&lt;br /&gt;
				.. &#039; چون سوء استفاده&#039;&lt;br /&gt;
				.. &#039; از الگوی &amp;amp;#123;&amp;amp;#123;[[الگو:بازکردن|بازکردن]]&amp;amp;#125;&amp;amp;#125;.&#039;,&lt;br /&gt;
			explanation = &#039;اگر نمی‌توانید این صفحهٔ بحث کاربر را ویرایش کنید و باید&#039;&lt;br /&gt;
				.. &#039; یک تغییر ایجاد کنید یا پیامی بگذارید، می‌توانید&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:درخواست محافظت صفحه&#039;&lt;br /&gt;
				.. &#039;#درخواست‌های خروج از محافظت&#039;&lt;br /&gt;
				.. &#039;|درخواست ویرایش کنید]]،&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:درخواست محافظت صفحه&#039;&lt;br /&gt;
				.. &#039;#درخواست‌های خروج از محافظت&#039;&lt;br /&gt;
				.. &#039;|درخواست عدم حفاظت کنید.]]،&#039;&lt;br /&gt;
				.. &#039; [[Special:Userlogin|وارد شوید]]،&#039;&lt;br /&gt;
				.. &#039; یا [[Special:UserLogin/signup|یک حساب کاربری بسازید]].&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		vandalism = {&lt;br /&gt;
			description = &#039;برای صفحاتی که در مقابل&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:خرابکاری|خرابکاری]] محافت شده‌است.&#039;,&lt;br /&gt;
			text = &#039;${INTROFRAGMENT} به دلیل [[ویکی‌پدیا:خرابکاری|خرابکاری]].&#039;,&lt;br /&gt;
			explanation = function (protectionObj, args)&lt;br /&gt;
				local ret = &#039;&#039;&lt;br /&gt;
				if protectionObj.level == &#039;sysop&#039; then&lt;br /&gt;
					ret = ret .. &amp;quot;این حفاظت تأیید بر ${CURRENTVERSION}&amp;quot;&lt;br /&gt;
						.. &amp;quot; &#039;&#039;&#039;نمی‌باشد&#039;&#039;&#039;. &amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
				return ret .. &#039;${EXPLANATIONBLURB}&#039;&lt;br /&gt;
			end,&lt;br /&gt;
			tooltip = &#039;${TOOLTIPFRAGMENT} به دلیل خرابکاری&#039;,&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	move = {&lt;br /&gt;
		dispute = {&lt;br /&gt;
			description = &#039;برای صفحاتی که در برابر انتقال صفحه‌ها به دلیل&#039;&lt;br /&gt;
				.. &#039; اختلاف بر سر عنوان صفحه حفاظت شده‌است.&#039;,&lt;br /&gt;
			explanation = &amp;quot;این حفاظت تأیید بر ${CURRENTVERSION}&amp;quot;&lt;br /&gt;
				.. &amp;quot;&#039;&#039;&#039;نمی‌باشد&#039;&#039;&#039;. ${EXPLANATIONBLURB}&amp;quot;,&lt;br /&gt;
			image = &#039;Move-protection-shackle.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		vandalism = {&lt;br /&gt;
			description = &#039;برای صفحاتی که در مقابل&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:خرابکاری#خرابکاری انتقال صفحه&#039;&lt;br /&gt;
				.. &#039; |خرابکاری انتقال صفحه]] محافظت شده‌است.&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	autoreview = {},&lt;br /&gt;
	upload = {}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--&lt;br /&gt;
--                            GENERAL DATA TABLES&lt;br /&gt;
--&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Protection blurbs&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table produces the protection blurbs available with the&lt;br /&gt;
-- ${PROTECTIONBLURB} parameter. It is sorted by protection action and&lt;br /&gt;
-- protection level, and is checked by the module in the following order:&lt;br /&gt;
-- 1. page&#039;s protection action, page&#039;s protection level&lt;br /&gt;
-- 2. page&#039;s protection action, default protection level&lt;br /&gt;
-- 3. &amp;quot;edit&amp;quot; protection action, default protection level&lt;br /&gt;
--&lt;br /&gt;
-- It is possible to use banner parameters inside this table.&lt;br /&gt;
-- *required* - this table needs edit, move, autoreview and upload subtables.&lt;br /&gt;
protectionBlurbs = {&lt;br /&gt;
	edit = {&lt;br /&gt;
		default = &#039;این ${PAGETYPE} در برابر&#039;&lt;br /&gt;
			.. &#039; ویرایش [[راهنما:حفاظت|حفاظت]] شده‌است&#039;,&lt;br /&gt;
		autoconfirmed = &#039;ویرایش این ${PAGETYPE} برای کاربران [[ویکی‌پدیا:اختیارات گروه‌های&#039;&lt;br /&gt;
			.. &#039; کاربری#کاربران جدید|تازه]] یا [[ویکی‌پدیا:اختیارات گروه‌های کاربری#کاربران گمنام&#039;&lt;br /&gt;
			.. &#039;|ثبت‌نام‌نکرده]] [[راهنما:حفاظت|غیر فعال]] است&#039;,&lt;br /&gt;
		extendedconfirmed = &#039;این ${PAGETYPE} در برابر ویرایش کاربران&#039;&lt;br /&gt;
			.. &#039; ${PROTECTIONLEVEL} است&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	move = {&lt;br /&gt;
		default = &#039;این ${PAGETYPE} در برابر [[ویکی‌پدیا:انتقال صفحه‌ها|انتقال صفحه‌ها]]&#039;&lt;br /&gt;
			.. &#039; [[راهنما:حفاظت|حفاظت]] شده‌است&#039;&lt;br /&gt;
	},&lt;br /&gt;
	autoreview = {&lt;br /&gt;
		autoconfirmed = &#039;همه ویرایش‌های صورت‌گرفته در این ${PAGETYPE} توسط کاربران&#039;&lt;br /&gt;
			.. &#039; [[ویکی‌پدیا:اختیارات گروه‌های کاربری#کاربران جدید|تازه]] یا&#039;&lt;br /&gt;
			.. &#039; [[[[ویکی‌پدیا:اختیارات گروه‌های کاربری#کاربران گمنام|ثبت‌نام‌نکرده]]&#039;&lt;br /&gt;
			.. &#039; [[ویکی‌پدیا:تغییرات در حال انتظار|در حال انتظار برای بررسی]] هستند&#039;,&lt;br /&gt;
		default = &#039;همه ویرایش‌های صورت‌گرفته در این ${PAGETYPE} توسط کاربرانی که&#039;&lt;br /&gt;
			.. &#039; [[:en:Wikipedia:Reviewing|بازبین]] یا&#039;&lt;br /&gt;
			.. &#039; [[ویکی‌پدیا:مدیران|مدیر]] نیستند&#039;&lt;br /&gt;
			.. &#039; [[ویکی‌پدیا:تغییرات در حال انتظار|در حال انتظار برای بررسی]] هستند&#039;&lt;br /&gt;
	},&lt;br /&gt;
	upload = {&lt;br /&gt;
		default = &#039;بارگذاری نگارش‌های تازه از این ${PAGETYPE} غیرفعال است&#039;&lt;br /&gt;
	}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Explanation blurbs&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table produces the explanation blurbs available with the&lt;br /&gt;
-- ${EXPLANATIONBLURB} parameter. It is sorted by protection action,&lt;br /&gt;
-- protection level, and whether the page is a talk page or not. If the page is&lt;br /&gt;
-- a talk page it will have a talk key of &amp;quot;talk&amp;quot;; otherwise it will have a talk&lt;br /&gt;
-- key of &amp;quot;subject&amp;quot;. The table is checked in the following order:&lt;br /&gt;
-- 1. page&#039;s protection action, page&#039;s protection level, page&#039;s talk key&lt;br /&gt;
-- 2. page&#039;s protection action, page&#039;s protection level, default talk key&lt;br /&gt;
-- 3. page&#039;s protection action, default protection level, page&#039;s talk key&lt;br /&gt;
-- 4. page&#039;s protection action, default protection level, default talk key&lt;br /&gt;
--&lt;br /&gt;
-- It is possible to use banner parameters inside this table.&lt;br /&gt;
-- *required* - this table needs edit, move, autoreview and upload subtables.&lt;br /&gt;
explanationBlurbs = {&lt;br /&gt;
	edit = {&lt;br /&gt;
		autoconfirmed = {&lt;br /&gt;
			subject = &#039;[[ویکی‌پدیا:سیاست حفاظت از صفحه‌ها|سیاست حفاظت]]&#039;&lt;br /&gt;
				.. &#039; و ${PROTECTIONLOG} را برای جزئیات بیشتر ببینید. اگر نمی‌توانید&#039;&lt;br /&gt;
				.. &#039; این ${PAGETYPE} را ویرایش کنید و می‌خواهید تغییری ایجاد کنید، می‌توانید&#039;&lt;br /&gt;
				.. &#039; ${EDITREQUEST}، دربارهٔ تغییرها در ${TALKPAGE} گفتگو کنید،&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:درخواست محافظت صفحه&#039;&lt;br /&gt;
				.. &#039;#درخواست‌های خروج از محافظت&#039;&lt;br /&gt;
				.. &#039;|درخواست عدم حفاظت کنید]]، [[Special:Userlogin|وارد شوید]]، یا&#039;&lt;br /&gt;
				.. &#039; [[Special:UserLogin/signup|حساب کاربری بسازید]].&#039;,&lt;br /&gt;
			default = &#039;[[ویکی‌پدیا:سیاست حفاظت از صفحه‌ها|سیاست حفاظت]]&#039;&lt;br /&gt;
				.. &#039; و ${PROTECTIONLOG} را برای جزئیات بیشتر ببینید. اگر نمی‌توانید&#039;&lt;br /&gt;
				.. &#039; این ${PAGETYPE} را ویرایش کنید و می‌خواهید تغییری ایجاد کنید، می‌توانید&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:درخواست محافظت صفحه&#039;&lt;br /&gt;
				.. &#039;#درخواست‌های خروج از محافظت&#039;&lt;br /&gt;
				.. &#039;|درخواست عدم حفاظت کنید]]، [[Special:Userlogin|وارد شوید]]، یا&#039;&lt;br /&gt;
				.. &#039; [[Special:UserLogin/signup|حساب کاربری بسازید]].&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		extendedconfirmed = {&lt;br /&gt;
			default = &#039;حفاظت تأییدشدهٔ پایدار از ویرایش‌های ویراستاران آی‌پی&#039;&lt;br /&gt;
				.. &#039; و کاربران ثبت‌نام‌کرده با کمتر از ۳۰ روز عمر و ۵۰۰ ویرایش جلوگیری می‌کند.&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:سیاست حفاظت از صفحه‌ها#تأییدشدهٔ پایدار|سیاست در استفاده از جامعه]]&#039;&lt;br /&gt;
				.. &#039; تعیین می‌کند که حفاظت تأییدشدهٔ پایدار قابل بکارگیری برای اختلال در مبارزه است،&#039;&lt;br /&gt;
				.. &#039; باتوجه به اینکه نیمه‌حفاظت بی‌اثر ثابت شده‌است.&#039;&lt;br /&gt;
				.. &#039; خواهشمند است برای هر تغییری در ${TALKPAGE} گفتگو کنید؛ شما می‌توانید&#039;&lt;br /&gt;
				.. &#039; برای تغییرات غیرمتعارف و در راستای [[ویکی‌پدیا:اجماع|اجماع]]&#039;&lt;br /&gt;
				.. &#039; ${EDITREQUEST}.&#039;&lt;br /&gt;
		},&lt;br /&gt;
		default = {&lt;br /&gt;
			subject = &#039;[[ویکی‌پدیا:سیاست حفاظت از صفحه‌ها|سیاست حفاظت]]&#039;&lt;br /&gt;
				.. &#039; و ${PROTECTIONLOG} را برای جزئیات بیشتر ببینید.&#039;&lt;br /&gt;
				.. &#039; لطفاً دربارهٔ هر تغییر در ${TALKPAGE} گفتگو کنید؛ شما&#039;&lt;br /&gt;
				.. &#039; می‌توانید از&#039;&lt;br /&gt;
				.. &#039; یک [[ویکی‌پدیا:مدیران|مدیر]] ${EDITREQUEST} تا یک ویرایش انجام دهد اگر آن ویرایش&#039;&lt;br /&gt;
				.. &#039; [[راهنما:ویرایش جزئی#چه هنگامی ویرایش جزئی است؟|غیر جنجالی]] است یا توسط&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:اجماع|اجماع]] حمایت می‌شود.&#039;&lt;br /&gt;
				.. &#039; شما همچنین می‌توانید [[ویکی‌پدیا:درخواست محافظت&#039;&lt;br /&gt;
				.. &#039; صفحه#درخواست‌های خروج از محافظت&#039;&lt;br /&gt;
				.. &#039;|درخواست کنید]] که این صفحه از حفاظت خارج شود.&#039;,&lt;br /&gt;
			default = &#039;[[ویکی‌پدیا:سیاست حفاظت از صفحه‌ها|سیاست حفاظت]]&#039;&lt;br /&gt;
				.. &#039; و ${PROTECTIONLOG} را برای جزئیات بیشتر ببینید.&#039;&lt;br /&gt;
				.. &#039; شما می‌توانید برای این صفحه [[ویکی‌پدیا:درخواست محافظت&#039;&lt;br /&gt;
				.. &#039; صفحه|درخواست&#039;&lt;br /&gt;
				.. &#039; ویرایش کنید]]، یا [[ویکی‌پدیا:درخواست محافظت&#039;&lt;br /&gt;
				.. &#039; صفحه#درخواست‌های خروج از محافظت&#039;&lt;br /&gt;
				.. &#039;|بخواهید]] از حفاظت خارج شود.&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	move = {&lt;br /&gt;
		default = {&lt;br /&gt;
			subject = &#039;[[ویکی‌پدیا:سیاست حفاظت از صفحه‌ها|سیاست حفاظت]]&#039;&lt;br /&gt;
				.. &#039; و ${PROTECTIONLOG} را برای جزئیات بیشتر ببینید.&#039;&lt;br /&gt;
				.. &#039; این صفحه هنوز می‌تواند ویرایش شود اما نمی‌تواند منتقل شود&#039;&lt;br /&gt;
				.. &#039; تا هنگامی که محافظت نمی‌شود. لطفاً دربارهٔ هر انتقال پیشنهادی در&#039;&lt;br /&gt;
				.. &#039; ${TALKPAGE} یا در [[ویکی‌پدیا:تابلوی اعلانات مدیران/درخواست انتقال و ادغام تاریخچه]] گفتگو کنید. شما همچنین می‌توانید&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:درخواست محافظت صفحه|درخواست دهید]] که این صفحه&#039;&lt;br /&gt;
				.. &#039; از محافظت خارج شود.&#039;,&lt;br /&gt;
			default = &#039;[[ویکی‌پدیا:سیاست حفاظت از صفحه‌ها|سیاست حفاظت]]&#039;&lt;br /&gt;
				.. &#039; و ${PROTECTIONLOG} را برای جزئیات بیشتر ببینید.&#039;&lt;br /&gt;
				.. &#039; این صفحه هنوز می‌تواند ویرایش شود اما نمی‌تواند منتقل شود&#039;&lt;br /&gt;
				.. &#039; تا هنگامی که محافظت نمی‌شود. لطفاً دربارهٔ هر انتقال پیشنهادی در&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:تابلوی اعلانات مدیران/درخواست انتقال و ادغام تاریخچه]] گفتگو کنید. شما همچنین می‌توانید&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:درخواست محافظت صفحه|درخواست دهید]] که این صفحه&#039;&lt;br /&gt;
				.. &#039; از محافظت خارج شود.&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	autoreview = {&lt;br /&gt;
		default = {&lt;br /&gt;
			reviewer = &#039;[[ویکی‌پدیا:سیاست حفاظت از صفحه‌ها|سیاست حفاظت]]&#039;&lt;br /&gt;
				.. &#039; و ${PROTECTIONLOG} را برای جزئیات بیشتر ببینید.&#039;&lt;br /&gt;
				.. &#039; ویرایش در این ${PAGETYPE} برای خوانندگان قابل مشاهده نیست&#039;&lt;br /&gt;
				.. &#039; تا هنگامی که توسط یک بازبین یا یک مدیر پذیرفته شود.&#039;&lt;br /&gt;
				.. &#039; برای جلوگیری از نیاز بازبینی ویرایش‌هایتان، می‌توانید&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:درخواست محافظت صفحه&#039;&lt;br /&gt;
				.. &#039;#درخواست‌های خروج از محافظت&#039;&lt;br /&gt;
				.. &#039;|درخواست عدم حفاظت کنید]]. ویراستاران با تجربه همچنین می‌توانند&#039;&lt;br /&gt;
				.. &#039; درخواست [[:en:Wikipedia:Reviewing|سطح دسترسی بازبین]] کنند.&#039;,&lt;br /&gt;
			default = &#039;[[ویکی‌پدیا:سیاست حفاظت از صفحه‌ها|سیاست حفاظت]]&#039;&lt;br /&gt;
				.. &#039; و ${PROTECTIONLOG} را برای جزئیات بیشتر ببینید.&#039;&lt;br /&gt;
				.. &#039; ویرایش در این ${PAGETYPE} توسط کاربران تازه‌کار و ثبت‌نام‌نکرده&#039;&lt;br /&gt;
				.. &#039; برای خوانندگان قابل مشاهده نیست تا هنگامی که توسط&#039;&lt;br /&gt;
				.. &#039; یک بازبین پذیرفته شود. برای جلوگیری از نیاز بازبینی ویرایش‌هایتان،&#039;&lt;br /&gt;
				.. &#039; می‌توانید&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:درخواست محافظت صفحه&#039;&lt;br /&gt;
				.. &#039;#درخواست‌های خروج از محافظت&#039;&lt;br /&gt;
				.. &#039;|درخواست عدم حفاظت کنید]]، [[Special:Userlogin|وارد شوید]]، یا&#039;&lt;br /&gt;
				.. &#039; [[Special:UserLogin/signup|حساب کاربری بسازید]].&#039;&lt;br /&gt;
		},&lt;br /&gt;
		},&lt;br /&gt;
	upload = {&lt;br /&gt;
		default = {&lt;br /&gt;
			default = &#039;برای اطلاعات بیشتر [[ویکی‌پدیا:سیاست حفاظت از صفحه‌ها|&#039;&lt;br /&gt;
				.. &#039;سیاست حفاظت از صفحه‌ها]] و ${PROTECTIONLOG} را ببینید.&#039;&lt;br /&gt;
				.. &#039; این صفحه را هنوز می‌توان ویرایش کرد اما نسخه‌های تازه پرونده&#039;&lt;br /&gt;
				.. &#039; ممکن نیست بارگذاری شود تا زمانی که از حفاظت خارج شود. شما می‌توانید&#039;&lt;br /&gt;
				.. &#039; بارگذاری نسخه تازه را با&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:درخواست‌های ویرایش|درخواست ویرایش حفاظت‌شده]] درخواست کنید، یا&#039;&lt;br /&gt;
				.. &#039; می‌توانید از حفاظت‌شده خارج‌کردن آن را&#039;&lt;br /&gt;
				.. &#039; [[ویکی‌پدیا:درخواست محافظت صفحه|درخواست کنید]].&#039;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Protection levels&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table provides the data for the ${PROTECTIONLEVEL} parameter, which&lt;br /&gt;
-- produces a short label for different protection levels. It is sorted by&lt;br /&gt;
-- protection action and protection level, and is checked in the following&lt;br /&gt;
-- order:&lt;br /&gt;
-- 1. page&#039;s protection action, page&#039;s protection level&lt;br /&gt;
-- 2. page&#039;s protection action, default protection level&lt;br /&gt;
-- 3. &amp;quot;edit&amp;quot; protection action, default protection level&lt;br /&gt;
--&lt;br /&gt;
-- It is possible to use banner parameters inside this table.&lt;br /&gt;
-- *required* - this table needs edit, move, autoreview and upload subtables.&lt;br /&gt;
protectionLevels = {&lt;br /&gt;
	edit = {&lt;br /&gt;
		default = &#039;حفاظت‌شده&#039;,&lt;br /&gt;
		templateeditor = &#039;الگوحفاظت‌شده&#039;,&lt;br /&gt;
		extendedconfirmed = &#039;حفاظت‌شده&#039;,&lt;br /&gt;
		autoconfirmed = &#039;نیمه‌حفاظت‌شده&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	move = {&lt;br /&gt;
		default = &#039;انتقال‌حفاظت‌شده&#039;&lt;br /&gt;
	},&lt;br /&gt;
	autoreview = {&lt;br /&gt;
	},&lt;br /&gt;
	upload = {&lt;br /&gt;
		default = &#039;بارگذاری‌حفاظت‌شده&#039;&lt;br /&gt;
	}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Images&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table lists different padlock images for each protection action and&lt;br /&gt;
-- protection level. It is used if an image is not specified in any of the&lt;br /&gt;
-- banner data tables, and if the page does not satisfy the conditions for using&lt;br /&gt;
-- the [&#039;image-filename-indef&#039;] image. It is checked in the following order:&lt;br /&gt;
-- 1. page&#039;s protection action, page&#039;s protection level&lt;br /&gt;
-- 2. page&#039;s protection action, default protection level&lt;br /&gt;
images = {&lt;br /&gt;
	edit = {&lt;br /&gt;
		default = &#039;Full-protection-shackle-block.svg&#039;,&lt;br /&gt;
		templateeditor = &#039;Template-protection-shackle-brackets.svg&#039;,&lt;br /&gt;
		extendedconfirmed = &#039;Extended-protection-shackle-check-mark.svg&#039;,&lt;br /&gt;
		autoconfirmed = &#039;Semi-protection-shackle.svg&#039;&lt;br /&gt;
	},&lt;br /&gt;
	move = {&lt;br /&gt;
		default = &#039;Move-protection-shackle.svg&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	autoreview = {&lt;br /&gt;
		autoconfirmed = &#039;Pending-protection-shackle-double-ticks.svg&#039;,&lt;br /&gt;
		default = &#039;Padlock-orange.svg&#039;&lt;br /&gt;
	},&lt;br /&gt;
	upload = {&lt;br /&gt;
		default = &#039;Upload-protection-shackle.svg&#039;&lt;br /&gt;
	}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
-- Pages with a reason specified in this table will show the special &amp;quot;indef&amp;quot;&lt;br /&gt;
-- padlock, defined in the &#039;image-filename-indef&#039; message, if no expiry is set.&lt;br /&gt;
indefImageReasons = {&lt;br /&gt;
	template = true&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Image links&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table provides the data for the ${IMAGELINK} parameter, which gets&lt;br /&gt;
-- the image link for small padlock icons based on the page&#039;s protection action&lt;br /&gt;
-- and protection level. It is checked in the following order:&lt;br /&gt;
-- 1. page&#039;s protection action, page&#039;s protection level&lt;br /&gt;
-- 2. page&#039;s protection action, default protection level&lt;br /&gt;
-- 3. &amp;quot;edit&amp;quot; protection action, default protection level&lt;br /&gt;
--&lt;br /&gt;
-- It is possible to use banner parameters inside this table.&lt;br /&gt;
-- *required* - this table needs edit, move, autoreview and upload subtables.&lt;br /&gt;
imageLinks = {&lt;br /&gt;
	edit = {&lt;br /&gt;
		default = &#039;ویکی‌پدیا:سیاست حفاظت از صفحه‌ها#کاملاً&#039;,&lt;br /&gt;
		templateeditor = &#039;ویکی‌پدیا:سیاست حفاظت از صفحه‌ها#الگو&#039;,&lt;br /&gt;
		extendedconfirmed = &#039;ویکی‌پدیا:سیاست حفاظت از صفحه‌ها#تأییدشدهٔ پایدار&#039;,&lt;br /&gt;
		autoconfirmed = &#039;ویکی‌پدیا:سیاست حفاظت از صفحه‌ها#نیمه&#039;&lt;br /&gt;
	},&lt;br /&gt;
	move = {&lt;br /&gt;
		default = &#039;ویکی‌پدیا:سیاست حفاظت از صفحه‌ها#انتقال&#039;&lt;br /&gt;
	},&lt;br /&gt;
	autoreview = {&lt;br /&gt;
		autoconfirmed = &#039;ویکی‌پدیا:سیاست حفاظت از صفحه‌ها#تا۱&#039;,&lt;br /&gt;
		reviewer = &#039;ویکی‌پدیا:سیاست حفاظت از صفحه‌ها#تا۲&#039;&lt;br /&gt;
	},&lt;br /&gt;
	upload = {&lt;br /&gt;
		default = &#039;ویکی‌پدیا:سیاست حفاظت از صفحه‌ها#بارگذاری&#039;&lt;br /&gt;
	}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Padlock indicator names&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table provides the &amp;quot;name&amp;quot; attribute for the &amp;lt;indicator&amp;gt; extension tag&lt;br /&gt;
-- with which small padlock icons are generated. All indicator tags on a page&lt;br /&gt;
-- are displayed in alphabetical order based on this attribute, and with&lt;br /&gt;
-- indicator tags with duplicate names, the last tag on the page wins.&lt;br /&gt;
-- The attribute is chosen based on the protection action; table keys must be a&lt;br /&gt;
-- protection action name or the string &amp;quot;default&amp;quot;.&lt;br /&gt;
padlockIndicatorNames = {&lt;br /&gt;
	autoreview = &#039;pp-autoreview&#039;,&lt;br /&gt;
	default = &#039;pp-default&#039;&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Protection categories&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- The protection categories are stored in the protectionCategories table.&lt;br /&gt;
-- Keys to this table are made up of the following strings:&lt;br /&gt;
--&lt;br /&gt;
-- 1. the expiry date&lt;br /&gt;
-- 2. the namespace&lt;br /&gt;
-- 3. the protection reason (e.g. &amp;quot;dispute&amp;quot; or &amp;quot;vandalism&amp;quot;)&lt;br /&gt;
-- 4. the protection level (e.g. &amp;quot;sysop&amp;quot; or &amp;quot;autoconfirmed&amp;quot;)&lt;br /&gt;
-- 5. the action (e.g. &amp;quot;edit&amp;quot; or &amp;quot;move&amp;quot;)&lt;br /&gt;
-- &lt;br /&gt;
-- When the module looks up a category in the table, first it will will check to&lt;br /&gt;
-- see a key exists that corresponds to all five parameters. For example, a&lt;br /&gt;
-- user page semi-protected from vandalism for two weeks would have the key&lt;br /&gt;
-- &amp;quot;temp-user-vandalism-autoconfirmed-edit&amp;quot;. If no match is found, the module&lt;br /&gt;
-- changes the first part of the key to &amp;quot;all&amp;quot; and checks the table again. It&lt;br /&gt;
-- keeps checking increasingly generic key combinations until it finds the&lt;br /&gt;
-- field, or until it reaches the key &amp;quot;all-all-all-all-all&amp;quot;.&lt;br /&gt;
--&lt;br /&gt;
-- The module uses a binary matrix to determine the order in which to search.&lt;br /&gt;
-- This is best demonstrated by a table. In this table, the &amp;quot;0&amp;quot; values&lt;br /&gt;
-- represent &amp;quot;all&amp;quot;, and the &amp;quot;1&amp;quot; values represent the original data (e.g.&lt;br /&gt;
-- &amp;quot;indef&amp;quot; or &amp;quot;file&amp;quot; or &amp;quot;vandalism&amp;quot;).&lt;br /&gt;
--&lt;br /&gt;
--        expiry    namespace reason   level     action&lt;br /&gt;
-- order&lt;br /&gt;
-- 1      1         1         1        1         1&lt;br /&gt;
-- 2      0         1         1        1         1&lt;br /&gt;
-- 3      1         0         1        1         1&lt;br /&gt;
-- 4      0         0         1        1         1&lt;br /&gt;
-- 5      1         1         0        1         1&lt;br /&gt;
-- 6      0         1         0        1         1&lt;br /&gt;
-- 7      1         0         0        1         1&lt;br /&gt;
-- 8      0         0         0        1         1&lt;br /&gt;
-- 9      1         1         1        0         1&lt;br /&gt;
-- 10     0         1         1        0         1&lt;br /&gt;
-- 11     1         0         1        0         1&lt;br /&gt;
-- 12     0         0         1        0         1&lt;br /&gt;
-- 13     1         1         0        0         1&lt;br /&gt;
-- 14     0         1         0        0         1&lt;br /&gt;
-- 15     1         0         0        0         1&lt;br /&gt;
-- 16     0         0         0        0         1&lt;br /&gt;
-- 17     1         1         1        1         0&lt;br /&gt;
-- 18     0         1         1        1         0&lt;br /&gt;
-- 19     1         0         1        1         0&lt;br /&gt;
-- 20     0         0         1        1         0&lt;br /&gt;
-- 21     1         1         0        1         0&lt;br /&gt;
-- 22     0         1         0        1         0&lt;br /&gt;
-- 23     1         0         0        1         0&lt;br /&gt;
-- 24     0         0         0        1         0&lt;br /&gt;
-- 25     1         1         1        0         0&lt;br /&gt;
-- 26     0         1         1        0         0&lt;br /&gt;
-- 27     1         0         1        0         0&lt;br /&gt;
-- 28     0         0         1        0         0&lt;br /&gt;
-- 29     1         1         0        0         0&lt;br /&gt;
-- 30     0         1         0        0         0&lt;br /&gt;
-- 31     1         0         0        0         0&lt;br /&gt;
-- 32     0         0         0        0         0&lt;br /&gt;
--&lt;br /&gt;
-- In this scheme the action has the highest priority, as it is the last&lt;br /&gt;
-- to change, and the expiry has the least priority, as it changes the most.&lt;br /&gt;
-- The priorities of the expiry, the protection level and the action are&lt;br /&gt;
-- fixed, but the priorities of the reason and the namespace can be swapped&lt;br /&gt;
-- through the use of the cfg.bannerDataNamespaceHasPriority table.&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
-- If the reason specified to the template is listed in this table,&lt;br /&gt;
-- namespace data will take priority over reason data in the protectionCategories&lt;br /&gt;
-- table.&lt;br /&gt;
reasonsWithNamespacePriority = {&lt;br /&gt;
	vandalism = true,&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
-- The string to use as a namespace key for the protectionCategories table for each&lt;br /&gt;
-- namespace number.&lt;br /&gt;
categoryNamespaceKeys = {&lt;br /&gt;
	[  2] = &#039;user&#039;,&lt;br /&gt;
	[  3] = &#039;user&#039;,&lt;br /&gt;
	[  4] = &#039;project&#039;,&lt;br /&gt;
	[  6] = &#039;file&#039;,&lt;br /&gt;
	[  8] = &#039;mediawiki&#039;,&lt;br /&gt;
	[ 10] = &#039;template&#039;,&lt;br /&gt;
	[ 12] = &#039;project&#039;,&lt;br /&gt;
	[ 14] = &#039;category&#039;,&lt;br /&gt;
	[100] = &#039;portal&#039;,&lt;br /&gt;
	[828] = &#039;module&#039;,&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
protectionCategories = {&lt;br /&gt;
	[&#039;all|all|all|all|all&#039;]                  = &#039;صفحات حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|all|office|all|all&#039;]               = &#039;صفحات اداره‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|all|reset|all|all&#039;]                = &#039;صفحات اداره‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|all|dmca|all|all&#039;]                 = &#039;صفحات اداره‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|all|mainpage|all|all&#039;]             = &#039;پرونده‌های کامل‌حفاظت‌شده صفحه اصلی ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|all|all|extendedconfirmed|all&#039;]    = &#039;صفحات ویکی‌پدیا با محدودیت ویرایش کمتر از ۳۰-۵۰۰&#039;,&lt;br /&gt;
	[&#039;all|all|ecp|extendedconfirmed|all&#039;]    = &#039;صفحات ویکی‌پدیا با محدودیت ویرایش کمتر از ۳۰-۵۰۰&#039;,&lt;br /&gt;
	[&#039;all|template|all|all|edit&#039;]            = &#039;الگوهای کامل‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|all|all|autoconfirmed|edit&#039;]       = &#039;صفحات نیمه‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;indef|all|all|autoconfirmed|edit&#039;]     = &#039;صفحات نیمه‌حفاظت‌شده بی‌پایان ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|all|blp|autoconfirmed|edit&#039;]       = &#039;زندگی‌نامه زندگان نیمه‌حفاظت‌شده بی‌پایان ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;temp|all|blp|autoconfirmed|edit&#039;]      = &#039;زندگی‌نامه زندگان نیمه‌حفاظت‌شده موقت ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|all|dispute|autoconfirmed|edit&#039;]   = &#039;صفحات نیمه‌حفاظت‌شده ویکی‌پدیا به‌دلیل اختلاف&#039;,&lt;br /&gt;
	[&#039;all|all|sock|autoconfirmed|edit&#039;]      = &#039;صفحات نیمه‌حفاظت‌شده ویکی‌پدیا در برابر کاربران محروم&#039;,&lt;br /&gt;
	[&#039;all|all|vandalism|autoconfirmed|edit&#039;] = &#039;صفحات نیمه‌حفاظت‌شده ویکی‌پدیا در برابر خرابکاری&#039;,&lt;br /&gt;
	[&#039;all|category|all|autoconfirmed|edit&#039;]  = &#039;رده‌های نیمه‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|file|all|autoconfirmed|edit&#039;]      = &#039;پرونده‌های نیمه‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|portal|all|autoconfirmed|edit&#039;]    = &#039;درگاه‌های نیمه‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|project|all|autoconfirmed|edit&#039;]   = &#039;صفحه‌های پروژه نیمه‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|talk|all|autoconfirmed|edit&#039;]      = &#039;صفحات بحث نیمه‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|template|all|autoconfirmed|edit&#039;]  = &#039;الگوهای نیمه‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|user|all|autoconfirmed|edit&#039;]      = &#039;صفحات کاربری و بحث کاربر نیمه‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|template|all|templateeditor|edit&#039;] = &#039;الگوهای الگوحفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|all|blp|sysop|edit&#039;]               = &#039;زندگی‌نامه زندگان حفاظت‌شده بی‌پایان ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;temp|all|blp|sysop|edit&#039;]              = &#039;زندگی‌نامه زندگان حفاظت‌شده موقت ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|all|dispute|sysop|edit&#039;]           = &#039;صفحات حفاظت‌شده ویکی‌پدیا به‌دلیل اختلاف&#039;,&lt;br /&gt;
	[&#039;all|all|sock|sysop|edit&#039;]              = &#039;صفحات حفاظت‌شده ویکی‌پدیا در برابر کاربران محروم&#039;,&lt;br /&gt;
	[&#039;all|all|vandalism|sysop|edit&#039;]         = &#039;صفحات حفاظت‌شده ویکی‌پدیا در برابر خرابکاری&#039;,&lt;br /&gt;
	[&#039;all|category|all|sysop|edit&#039;]          = &#039;رده‌های حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|file|all|sysop|edit&#039;]              = &#039;پرونده‌های کامل‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|project|all|sysop|edit&#039;]           = &#039;صفحات پروژه حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|talk|all|sysop|edit&#039;]              = &#039;صفحات بحث کامل‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|template|all|sysop|edit&#039;]          = &#039;الگوهای کامل‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|user|all|sysop|edit&#039;]              = &#039;صفحات کاربری و بحث کاربر حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|module|all|all|edit&#039;]              = &#039;پودمان‌های کامل‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|module|all|templateeditor|edit&#039;]   = &#039;پودمان‌های الگوحفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|module|all|autoconfirmed|edit&#039;]    = &#039;پودمان‌های نیمه‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|all|all|sysop|move&#039;]               = &#039;صفحات انتقال‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;indef|all|all|sysop|move&#039;]             = &#039;صفحات انتقال‌حفاظت‌شده بی‌پایان ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|all|dispute|sysop|move&#039;]           = &#039;صفحات انتقال‌حفاظت‌شده ویکی‌پدیا در برابر اختلاف&#039;,&lt;br /&gt;
	[&#039;all|all|vandalism|sysop|move&#039;]         = &#039;صفحات انتقال‌حفاظت‌شده ویکی‌پدیا به دلیل خرابکاری&#039;,&lt;br /&gt;
	[&#039;all|portal|all|sysop|move&#039;]            = &#039;درگاه‌های انتقال‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|portal|all|sysop|move&#039;]            = &#039;درگاه‌های انتقال‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|project|all|sysop|move&#039;]           = &#039;صفحات پروژه انتقال‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|talk|all|sysop|move&#039;]              = &#039;صفحات بحث انتقال‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|template|all|sysop|move&#039;]          = &#039;الگوهای انتقال‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|user|all|sysop|move&#039;]              = &#039;صفحات کاربری و بحث کاربر انتقال‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
	[&#039;all|all|all|autoconfirmed|autoreview&#039;] = &#039;صفحات حفاظت‌شده ویکی‌پدیا در حد بازبینی ویرایش&#039;,&lt;br /&gt;
	[&#039;all|all|all|reviewer|autoreview&#039;]      = &#039;صفحات ویکی‌پدیا حفاظت‌شده در برابر تغییرات در انتظار (سطح ۲)&#039;,&lt;br /&gt;
	[&#039;all|file|all|all|upload&#039;]              = &#039;پرونده‌های بارگذاری‌حفاظت‌شده ویکی‌پدیا&#039;,&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Expiry category config&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table configures the expiry category behaviour for each protection&lt;br /&gt;
-- action.&lt;br /&gt;
-- * If set to true, setting that action will always categorise the page if&lt;br /&gt;
--   an expiry parameter is not set.&lt;br /&gt;
-- * If set to false, setting that action will never categorise the page.&lt;br /&gt;
-- * If set to nil, the module will categorise the page if:&lt;br /&gt;
--   1) an expiry parameter is not set, and&lt;br /&gt;
--   2) a reason is provided, and&lt;br /&gt;
--   3) the specified reason is not blacklisted in the reasonsWithoutExpiryCheck&lt;br /&gt;
--      table.&lt;br /&gt;
&lt;br /&gt;
expiryCheckActions = {&lt;br /&gt;
	edit = nil,&lt;br /&gt;
	move = false,&lt;br /&gt;
	autoreview = true,&lt;br /&gt;
	upload = false&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
reasonsWithoutExpiryCheck = {&lt;br /&gt;
	blp = true,&lt;br /&gt;
	template = true,&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Pagetypes&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table produces the page types available with the ${PAGETYPE} parameter.&lt;br /&gt;
-- Keys are namespace numbers, or the string &amp;quot;default&amp;quot; for the default value.&lt;br /&gt;
pagetypes = {&lt;br /&gt;
	[0] = &#039;مقاله&#039;,&lt;br /&gt;
	[6] = &#039;پرونده&#039;,&lt;br /&gt;
	[10] = &#039;الگو&#039;,&lt;br /&gt;
	[14] = &#039;رده&#039;,&lt;br /&gt;
	[828] = &#039;پودمان&#039;,&lt;br /&gt;
	default = &#039;صفحه&#039;&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Strings marking indefinite protection&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table contains values passed to the expiry parameter that mean the page&lt;br /&gt;
-- is protected indefinitely.&lt;br /&gt;
indefStrings = {&lt;br /&gt;
	[&#039;indef&#039;] = true,&lt;br /&gt;
	[&#039;indefinite&#039;] = true,&lt;br /&gt;
	[&#039;indefinitely&#039;] = true,&lt;br /&gt;
	[&#039;infinite&#039;] = true,&lt;br /&gt;
	[&#039;بی‌پایان&#039;] = true,&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Group hierarchy&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table maps each group to all groups that have a superset of the original&lt;br /&gt;
-- group&#039;s page editing permissions.&lt;br /&gt;
hierarchy = {&lt;br /&gt;
	sysop = {},&lt;br /&gt;
	reviewer = {&#039;sysop&#039;},&lt;br /&gt;
	filemover = {&#039;sysop&#039;},&lt;br /&gt;
	templateeditor = {&#039;sysop&#039;},&lt;br /&gt;
	extendedconfirmed = {&#039;sysop&#039;},&lt;br /&gt;
	accountcreator = {&#039;templateeditor&#039;},&lt;br /&gt;
	autoconfirmed = {&#039;reviewer&#039;, &#039;filemover&#039;, &#039;templateeditor&#039;, &#039;extendedconfirmed&#039;},&lt;br /&gt;
	user = {&#039;autoconfirmed&#039;},&lt;br /&gt;
	[&#039;*&#039;] = {&#039;user&#039;}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Wrapper templates and their default arguments&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table contains wrapper templates used with the module, and their&lt;br /&gt;
-- default arguments. Templates specified in this table should contain the&lt;br /&gt;
-- following invocation, and no other template content:&lt;br /&gt;
--&lt;br /&gt;
-- {{#invoke:Protection banner|main}}&lt;br /&gt;
--&lt;br /&gt;
-- If other content is desired, it can be added between&lt;br /&gt;
-- &amp;lt;noinclude&amp;gt;...&amp;lt;/noinclude&amp;gt; tags.&lt;br /&gt;
--&lt;br /&gt;
-- When a user calls one of these wrapper templates, they will use the&lt;br /&gt;
-- default arguments automatically. However, users can override any of the&lt;br /&gt;
-- arguments.&lt;br /&gt;
wrappers = {&lt;br /&gt;
	[&#039;الگو:Pp-pc2&#039;]                     = {action = &#039;autoreview&#039;, small = true},&lt;br /&gt;
	[&#039;الگو:حص&#039;]                         = {},&lt;br /&gt;
	[&#039;الگو:حص-۳۰-۵۰۰&#039;]                  = {&#039;ecp&#039;},&lt;br /&gt;
	[&#039;الگو:حص-الگو&#039;]                = {&#039;template&#039;, small = true},&lt;br /&gt;
	[&#039;الگو:حص-انتقال&#039;]                    = {action = &#039;move&#039;},&lt;br /&gt;
	[&#039;الگو:حص-انتقال-خرابکاری&#039;]          = {&#039;vandalism&#039;, action = &#039;move&#039;},&lt;br /&gt;
	[&#039;الگو:حص-انتقال-مناقشه&#039;]            = {&#039;dispute&#039;, action = &#039;move&#039;},&lt;br /&gt;
	[&#039;الگو:حص-بارگذاری&#039;]                  = {action = &#039;upload&#039;},&lt;br /&gt;
	[&#039;الگو:حص-بازنشانی&#039;]                   = {&#039;reset&#039;},&lt;br /&gt;
	[&#039;الگو:حص-بحث کاربر&#039;]                = {&#039;usertalk&#039;},&lt;br /&gt;
	[&#039;الگو:حص-حنب&#039;]                     = {action = &#039;autoreview&#039;, small = true},&lt;br /&gt;
	[&#039;الگو:حص-خرابکاری&#039;]               = {&#039;vandalism&#039;},&lt;br /&gt;
	[&#039;الگو:حص-دفتری&#039;]                  = {&#039;office&#039;},&lt;br /&gt;
	[&#039;الگو:حص-دفتری-دی‌ام‌سی‌ای&#039;]             = {&#039;dmca&#039;},&lt;br /&gt;
	[&#039;الگو:حص-زاپاس&#039;]                    = {&#039;sock&#039;},&lt;br /&gt;
	[&#039;الگو:حص-زنده&#039;]                     = {&#039;blp&#039;},&lt;br /&gt;
	[&#039;الگو:حص-صفحه-اصلی&#039;]               = {&#039;mainpage&#039;},&lt;br /&gt;
	[&#039;الگو:حص-مناقشه&#039;]                 = {&#039;dispute&#039;},&lt;br /&gt;
	[&#039;الگو:حص-نیمه-بی‌پایان&#039;]              = {small = true},&lt;br /&gt;
	-- we don&#039;t need Template:Pp-create&lt;br /&gt;
	-- we don&#039;t need Template:Pp-move-indef&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- &lt;br /&gt;
--                                 MESSAGES&lt;br /&gt;
-- &lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
msg = {&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Intro blurb and intro fragment&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- These messages specify what is produced by the ${INTROBLURB} and&lt;br /&gt;
-- ${INTROFRAGMENT} parameters. If the protection is temporary they use the&lt;br /&gt;
-- intro-blurb-expiry or intro-fragment-expiry, and if not they use&lt;br /&gt;
-- intro-blurb-noexpiry or intro-fragment-noexpiry.&lt;br /&gt;
-- It is possible to use banner parameters in these messages.&lt;br /&gt;
[&#039;intro-blurb-expiry&#039;] = &#039;تا ${EXPIRY} ${PROTECTIONBLURB}.&#039;,&lt;br /&gt;
[&#039;intro-blurb-noexpiry&#039;] = &#039;${PROTECTIONBLURB}.&#039;,&lt;br /&gt;
[&#039;intro-fragment-expiry&#039;] = &#039;تا ${EXPIRY} ${PROTECTIONBLURB}،&#039;,&lt;br /&gt;
[&#039;intro-fragment-noexpiry&#039;] = &#039;${PROTECTIONBLURB}&#039;,&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Tooltip blurb&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- These messages specify what is produced by the ${TOOLTIPBLURB} parameter.&lt;br /&gt;
-- If the protection is temporary the tooltip-blurb-expiry message is used, and&lt;br /&gt;
-- if not the tooltip-blurb-noexpiry message is used.&lt;br /&gt;
-- It is possible to use banner parameters in these messages.&lt;br /&gt;
[&#039;tooltip-blurb-expiry&#039;] = &#039;این ${PAGETYPE} تا ${EXPIRY} ${PROTECTIONLEVEL} شده‌است&#039;,&lt;br /&gt;
[&#039;tooltip-blurb-noexpiry&#039;] = &#039;این ${PAGETYPE} ${PROTECTIONLEVEL} شده‌است&#039;,&lt;br /&gt;
[&#039;tooltip-fragment-expiry&#039;] = &#039;این ${PAGETYPE} تا ${EXPIRY} ${PROTECTIONLEVEL} شده‌است&#039;,&lt;br /&gt;
[&#039;tooltip-fragment-noexpiry&#039;] = &#039;این ${PAGETYPE} ${PROTECTIONLEVEL} شده‌است&#039;,&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Special explanation blurb&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- An explanation blurb for pages that cannot be unprotected, e.g. for pages&lt;br /&gt;
-- in the MediaWiki namespace.&lt;br /&gt;
-- It is possible to use banner parameters in this message.&lt;br /&gt;
[&#039;explanation-blurb-nounprotect&#039;] = &#039;[[ویکی‌پدیا:سیاست حفاظت از صفحه‌ها|سیاست حفاظت]]&#039;&lt;br /&gt;
	.. &#039; و ${PROTECTIONLOG} را برای جزئیات بیشتر ببینید.&#039;&lt;br /&gt;
	.. &#039; لطفاً دربارهٔ هر تغییر در ${TALKPAGE} بحث کنید؛&#039;&lt;br /&gt;
	.. &#039; می‌توانید ${EDITREQUEST} برای درخواست از یک&#039;&lt;br /&gt;
	.. &#039; [[ویکی‌پدیا:مدیران|مدیر]] برای اعمال ویرایش اگر درخواست&#039;&lt;br /&gt;
	.. &#039; [[راهنما:ویرایش جزئی#چه هنگامی ویرایش جزئی است؟&#039;&lt;br /&gt;
	.. &#039;|غیر جنجالی]] باشد یا توسط [[ویکی‌پدیا:اجماع|اجماع]]&#039;&lt;br /&gt;
	.. &#039; حمایت شود.&#039;,&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Protection log display values&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- These messages determine the display values for the protection log link&lt;br /&gt;
-- or the pending changes log link produced by the ${PROTECTIONLOG} parameter.&lt;br /&gt;
-- It is possible to use banner parameters in these messages.&lt;br /&gt;
[&#039;protection-log-display&#039;] = &#039;سیاههٔ حفاظت&#039;,&lt;br /&gt;
[&#039;pc-log-display&#039;] = &#039;سیاههٔ تغییرات در انتظار&#039;,&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Current version display values&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- These messages determine the display values for the page history link&lt;br /&gt;
-- or the move log link produced by the ${CURRENTVERSION} parameter.&lt;br /&gt;
-- It is possible to use banner parameters in these messages.&lt;br /&gt;
[&#039;current-version-move-display&#039;] = &#039;عنوان کنونی&#039;,&lt;br /&gt;
[&#039;current-version-edit-display&#039;] = &#039;نگارش کنونی&#039;,&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Talk page&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This message determines the display value of the talk page link produced&lt;br /&gt;
-- with the ${TALKPAGE} parameter.&lt;br /&gt;
-- It is possible to use banner parameters in this message.&lt;br /&gt;
[&#039;talk-page-link-display&#039;] = &#039;صفحه بحث&#039;,&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Edit requests&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This message determines the display value of the edit request link produced&lt;br /&gt;
-- with the ${EDITREQUEST} parameter.&lt;br /&gt;
-- It is possible to use banner parameters in this message.&lt;br /&gt;
[&#039;edit-request-display&#039;] = &#039;درخواست ویرایش کنید&#039;,&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Expiry date format&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This is the format for the blurb expiry date. It should be valid input for&lt;br /&gt;
-- the first parameter of the #time parser function.&lt;br /&gt;
[&#039;expiry-date-format&#039;] = &#039;xij xiF xiY&#039;,&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Tracking categories&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- These messages determine which tracking categories the module outputs.&lt;br /&gt;
[&#039;tracking-category-incorrect&#039;] = &#039;صفحات ویکی‌پدیا با الگوهای محافظت نادرست&#039;,&lt;br /&gt;
[&#039;tracking-category-template&#039;] = &#039;صفحات الگوحفاظت‌شده ویکی‌پدیا غیر از الگوها و پودمان‌ها&#039;,&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Images&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- These are images that are not defined by their protection action and protection level.&lt;br /&gt;
[&#039;image-filename-indef&#039;] = &#039;Full-protection-shackle-block.svg&#039;,&lt;br /&gt;
[&#039;image-filename-default&#039;] = &#039;Transparent.gif&#039;,&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- End messages&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- End configuration&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Protection_banner&amp;diff=1993</id>
		<title>پودمان:Protection banner</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Protection_banner&amp;diff=1993"/>
		<updated>2026-06-25T09:35:05Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{pp-meta}} and its daughter templates such as&lt;br /&gt;
-- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}.&lt;br /&gt;
-- بخش‌هایی از این پودمان برای فارسی‌سازی بهتر تغییریافته است. لطفاً هنگام به‌روزرسانی دقت کنید.&lt;br /&gt;
&lt;br /&gt;
-- Initialise necessary modules.&lt;br /&gt;
require(&#039;Module:No globals&#039;)&lt;br /&gt;
local converter = require(&amp;quot;Module:Numeral converter&amp;quot;).convert&lt;br /&gt;
local makeFileLink = require(&#039;Module:File link&#039;)._main&lt;br /&gt;
local effectiveProtectionLevel = require(&#039;Module:Effective protection level&#039;)._main&lt;br /&gt;
local effectiveProtectionExpiry = require(&#039;Module:Effective protection expiry&#039;)._main&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
&lt;br /&gt;
-- Lazily initialise modules and objects we don&#039;t always need.&lt;br /&gt;
local getArgs, makeMessageBox, lang&lt;br /&gt;
&lt;br /&gt;
-- Set constants.&lt;br /&gt;
local CONFIG_MODULE = &#039;Module:Protection banner/config&#039;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- چون ممکنه نام ماه میلادی رو به فارسی کاربران بنویسند من این تابع رو تعریف کردم که به انگلیسی برگرداند تا خطای تاریخ نامعتبر ندهد.&lt;br /&gt;
local function replacePersianGreMonthName(frame)&lt;br /&gt;
	getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	local greMonth = {&#039;January&#039;, &#039;February&#039;, &#039;March&#039;, &#039;April&#039;, &#039;May&#039;, &#039;June&#039;, &#039;July&#039;, &#039;August&#039;, &#039;September&#039;, &#039;October&#039;, &#039;November&#039;, &#039;December&#039;}&lt;br /&gt;
	local perGreMonth = {&#039;ژانویه&#039;, &#039;فوریه&#039;, &#039;مارس&#039;, &#039;آوریل&#039;, &#039;مه&#039;, &#039;ژوئن&#039;, &#039;ژوئیه&#039;, &#039;اوت&#039;, &#039;سپتامبر&#039;, &#039;اکتبر&#039;, &#039;نوامبر&#039;, &#039;دسامبر&#039;}&lt;br /&gt;
	for k, v in ipairs(perGreMonth) do&lt;br /&gt;
		args[1] = mw.ustring.gsub(args[1], v, greMonth[k])&lt;br /&gt;
	end&lt;br /&gt;
	return converter(&amp;quot;en&amp;quot;, args[1])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- از آنجا که تاریخ‌ها به صورت انگلیسی به پودمان داده می‌شوند، از mw.getLanguage(&#039;en&#039;) استفاده شده‌است&lt;br /&gt;
-- و خروجی formatDate() از آبجکت زبان مربوطه با فرمت xi انگلیسی است.&lt;br /&gt;
-- برای تبدیل نام انگلیسی ماه‌های فارسی به نوشتهٔ فارسی از این تابع استفاده می‌شود.&lt;br /&gt;
local function replacePersianMonthName(str)&lt;br /&gt;
	local engMonth = {&#039;Farvardin&#039;, &#039;Ordibehesht&#039;, &#039;Khordad&#039;, &#039;Tir&#039;, &#039;Mordad&#039;, &#039;Shahrivar&#039;, &#039;Mehr&#039;, &#039;Aban&#039;, &#039;Azar&#039;, &#039;Dey&#039;, &#039;Bahman&#039;, &#039;Esfand&#039;}&lt;br /&gt;
	local faMonth = {&#039;فروردین&#039;, &#039;اردیبهشت&#039;, &#039;خرداد&#039;, &#039;تیر&#039;, &#039;مرداد&#039;, &#039;شهریور&#039;, &#039;مهر&#039;, &#039;آبان&#039;, &#039;آذر&#039;, &#039;دی&#039;, &#039;بهمن&#039;, &#039;اسفند&#039;}&lt;br /&gt;
	for k, v in ipairs(engMonth) do&lt;br /&gt;
		str = mw.ustring.gsub(str, v, faMonth[k])&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeCategoryLink(cat, sort)&lt;br /&gt;
	if cat then&lt;br /&gt;
		return mw.ustring.format(&lt;br /&gt;
			&#039;[[%s:%s|%s]]&#039;,&lt;br /&gt;
			mw.site.namespaces[14].name,&lt;br /&gt;
			cat,&lt;br /&gt;
			sort&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Validation function for the expiry and the protection date&lt;br /&gt;
local function validateDate(dateString, dateType)&lt;br /&gt;
	if not lang then&lt;br /&gt;
		-- در خط زیر جای mw.language.getContentLanguage() از mw.getLanguage(&#039;en&#039;) استفاده کردم.&lt;br /&gt;
		lang = mw.getLanguage(&#039;en&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local success, result = pcall(lang.formatDate, lang, &#039;U&#039;, converter(&#039;en&#039;, dateString))&lt;br /&gt;
	if success then&lt;br /&gt;
		result = tonumber(result)&lt;br /&gt;
		if result then&lt;br /&gt;
			return result&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	error(mw.ustring.format(&lt;br /&gt;
		&#039;%s نامعتبر: %s&#039;,&lt;br /&gt;
		dateType,&lt;br /&gt;
		tostring(dateString)&lt;br /&gt;
	), 4)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFullUrl(page, query, display)&lt;br /&gt;
	return mw.ustring.format(&lt;br /&gt;
		&#039;[%s %s]&#039;,&lt;br /&gt;
		tostring(mw.uri.fullUrl(page, query)),&lt;br /&gt;
		display&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Given a directed graph formatted as node -&amp;gt; table of direct successors,&lt;br /&gt;
-- get a table of all nodes reachable from a given node (though always&lt;br /&gt;
-- including the given node).&lt;br /&gt;
local function getReachableNodes(graph, start)&lt;br /&gt;
	local toWalk, retval = {[start] = true}, {}&lt;br /&gt;
	while true do&lt;br /&gt;
		-- Can&#039;t use pairs() since we&#039;re adding and removing things as we&#039;re iterating&lt;br /&gt;
		local k = next(toWalk) -- This always gets the &amp;quot;first&amp;quot; key&lt;br /&gt;
		if k == nil then&lt;br /&gt;
			return retval&lt;br /&gt;
		end&lt;br /&gt;
		toWalk[k] = nil&lt;br /&gt;
		retval[k] = true&lt;br /&gt;
		for _,v in ipairs(graph[k]) do&lt;br /&gt;
			if not retval[v] then&lt;br /&gt;
				toWalk[v] = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Protection class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local Protection = {}&lt;br /&gt;
Protection.__index = Protection&lt;br /&gt;
&lt;br /&gt;
Protection.supportedActions = {&lt;br /&gt;
	edit = true,&lt;br /&gt;
	move = true,&lt;br /&gt;
	autoreview = true,&lt;br /&gt;
	upload = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Protection.bannerConfigFields = {&lt;br /&gt;
	&#039;text&#039;,&lt;br /&gt;
	&#039;explanation&#039;,&lt;br /&gt;
	&#039;tooltip&#039;,&lt;br /&gt;
	&#039;alt&#039;,&lt;br /&gt;
	&#039;link&#039;,&lt;br /&gt;
	&#039;image&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Protection.new(args, cfg, title)&lt;br /&gt;
	local obj = {}&lt;br /&gt;
	obj._cfg = cfg&lt;br /&gt;
	obj.title = title or mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
	-- Set action&lt;br /&gt;
	if not args.action then&lt;br /&gt;
		obj.action = &#039;edit&#039;&lt;br /&gt;
	elseif Protection.supportedActions[args.action] then&lt;br /&gt;
		obj.action = args.action&lt;br /&gt;
	else&lt;br /&gt;
		error(mw.ustring.format(&lt;br /&gt;
			&#039;اقدام نامعتبر: %s&#039;,&lt;br /&gt;
			tostring(args.action)&lt;br /&gt;
		), 3)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set level&lt;br /&gt;
	obj.level = args.demolevel or effectiveProtectionLevel(obj.action, obj.title)&lt;br /&gt;
	if not obj.level or (obj.action == &#039;move&#039; and obj.level == &#039;autoconfirmed&#039;) then&lt;br /&gt;
		-- Users need to be autoconfirmed to move pages anyway, so treat&lt;br /&gt;
		-- semi-move-protected pages as unprotected.&lt;br /&gt;
		obj.level = &#039;*&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set expiry&lt;br /&gt;
	local effectiveExpiry = effectiveProtectionExpiry(obj.action, obj.title)&lt;br /&gt;
	if effectiveExpiry == &#039;infinity&#039; then&lt;br /&gt;
		obj.expiry = &#039;indef&#039;&lt;br /&gt;
	elseif effectiveExpiry ~= &#039;unknown&#039; then&lt;br /&gt;
		obj.expiry = validateDate(effectiveExpiry, &#039;تاریخ انقضا&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set reason&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		obj.reason = mw.ustring.lower(args[1])&lt;br /&gt;
		if obj.reason:find(&#039;|&#039;) then&lt;br /&gt;
			error(&#039;دلایل نمی‌تواند شامل نویسه خط عمودی («|») باشد&#039;, 3)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set protection date&lt;br /&gt;
	if args.date then&lt;br /&gt;
		obj.protectionDate = validateDate(args.date, &#039;تاریخ حفاظت&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Set banner config&lt;br /&gt;
	do&lt;br /&gt;
		obj.bannerConfig = {}&lt;br /&gt;
		local configTables = {}&lt;br /&gt;
		if cfg.banners[obj.action] then&lt;br /&gt;
			configTables[#configTables + 1] = cfg.banners[obj.action][obj.reason]&lt;br /&gt;
		end&lt;br /&gt;
		if cfg.defaultBanners[obj.action] then&lt;br /&gt;
			configTables[#configTables + 1] = cfg.defaultBanners[obj.action][obj.level]&lt;br /&gt;
			configTables[#configTables + 1] = cfg.defaultBanners[obj.action].default&lt;br /&gt;
		end&lt;br /&gt;
		configTables[#configTables + 1] = cfg.masterBanner&lt;br /&gt;
		for i, field in ipairs(Protection.bannerConfigFields) do&lt;br /&gt;
			for j, t in ipairs(configTables) do&lt;br /&gt;
				if t[field] then&lt;br /&gt;
					obj.bannerConfig[field] = t[field]&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return setmetatable(obj, Protection)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:isProtected()&lt;br /&gt;
	return self.level ~= &#039;*&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:isTemporary()&lt;br /&gt;
	return type(self.expiry) == &#039;number&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:makeProtectionCategory()&lt;br /&gt;
	local cfg = self._cfg&lt;br /&gt;
	local title = self.title&lt;br /&gt;
	&lt;br /&gt;
	-- Exit if the page is not protected.&lt;br /&gt;
	if not self:isProtected() then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Get the expiry key fragment.&lt;br /&gt;
	local expiryFragment&lt;br /&gt;
	if self.expiry == &#039;indef&#039; then&lt;br /&gt;
		expiryFragment = self.expiry&lt;br /&gt;
	elseif type(self.expiry) == &#039;number&#039; then&lt;br /&gt;
		expiryFragment = &#039;temp&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get the namespace key fragment.&lt;br /&gt;
	local namespaceFragment = cfg.categoryNamespaceKeys[title.namespace]&lt;br /&gt;
	if not namespaceFragment and title.namespace % 2 == 1 then&lt;br /&gt;
			namespaceFragment = &#039;talk&#039;&lt;br /&gt;
	end&lt;br /&gt;
 &lt;br /&gt;
	-- Define the order that key fragments are tested in. This is done with an&lt;br /&gt;
	-- array of tables containing the value to be tested, along with its&lt;br /&gt;
	-- position in the cfg.protectionCategories table.&lt;br /&gt;
	local order = {&lt;br /&gt;
		{val = expiryFragment,    keypos = 1},&lt;br /&gt;
		{val = namespaceFragment, keypos = 2},&lt;br /&gt;
		{val = self.reason,       keypos = 3},&lt;br /&gt;
		{val = self.level,        keypos = 4},&lt;br /&gt;
		{val = self.action,       keypos = 5}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- The old protection templates used an ad-hoc protection category system,&lt;br /&gt;
	-- with some templates prioritising namespaces in their categories, and&lt;br /&gt;
	-- others prioritising the protection reason. To emulate this in this module&lt;br /&gt;
	-- we use the config table cfg.reasonsWithNamespacePriority to set the&lt;br /&gt;
	-- reasons for which namespaces have priority over protection reason.&lt;br /&gt;
	-- If we are dealing with one of those reasons, move the namespace table to&lt;br /&gt;
	-- the end of the order table, i.e. give it highest priority. If not, the&lt;br /&gt;
	-- reason should have highest priority, so move that to the end of the table&lt;br /&gt;
	-- instead.&lt;br /&gt;
	--]]&lt;br /&gt;
	table.insert(order, table.remove(order, self.reason and cfg.reasonsWithNamespacePriority[self.reason] and 2 or 3))&lt;br /&gt;
 &lt;br /&gt;
	--[[&lt;br /&gt;
	-- Define the attempt order. Inactive subtables (subtables with nil &amp;quot;value&amp;quot;&lt;br /&gt;
	-- fields) are moved to the end, where they will later be given the key&lt;br /&gt;
	-- &amp;quot;all&amp;quot;. This is to cut down on the number of table lookups in&lt;br /&gt;
	-- cfg.protectionCategories, which grows exponentially with the number of&lt;br /&gt;
	-- non-nil keys. We keep track of the number of active subtables with the&lt;br /&gt;
	-- noActive parameter.&lt;br /&gt;
	--]]&lt;br /&gt;
	local noActive, attemptOrder&lt;br /&gt;
	do&lt;br /&gt;
		local active, inactive = {}, {}&lt;br /&gt;
		for i, t in ipairs(order) do&lt;br /&gt;
			if t.val then&lt;br /&gt;
				active[#active + 1] = t&lt;br /&gt;
			else&lt;br /&gt;
				inactive[#inactive + 1] = t&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		noActive = #active&lt;br /&gt;
		attemptOrder = active&lt;br /&gt;
		for i, t in ipairs(inactive) do&lt;br /&gt;
			attemptOrder[#attemptOrder + 1] = t&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
 &lt;br /&gt;
	--[[&lt;br /&gt;
	-- Check increasingly generic key combinations until we find a match. If a&lt;br /&gt;
	-- specific category exists for the combination of key fragments we are&lt;br /&gt;
	-- given, that match will be found first. If not, we keep trying different&lt;br /&gt;
	-- key fragment combinations until we match using the key&lt;br /&gt;
	-- &amp;quot;all-all-all-all-all&amp;quot;.&lt;br /&gt;
	--&lt;br /&gt;
	-- To generate the keys, we index the key subtables using a binary matrix&lt;br /&gt;
	-- with indexes i and j. j is only calculated up to the number of active&lt;br /&gt;
	-- subtables. For example, if there were three active subtables, the matrix&lt;br /&gt;
	-- would look like this, with 0 corresponding to the key fragment &amp;quot;all&amp;quot;, and&lt;br /&gt;
	-- 1 corresponding to other key fragments.&lt;br /&gt;
	-- &lt;br /&gt;
	--   j 1  2  3&lt;br /&gt;
	-- i  &lt;br /&gt;
	-- 1   1  1  1&lt;br /&gt;
	-- 2   0  1  1&lt;br /&gt;
	-- 3   1  0  1&lt;br /&gt;
	-- 4   0  0  1&lt;br /&gt;
	-- 5   1  1  0&lt;br /&gt;
	-- 6   0  1  0&lt;br /&gt;
	-- 7   1  0  0&lt;br /&gt;
	-- 8   0  0  0&lt;br /&gt;
	-- &lt;br /&gt;
	-- Values of j higher than the number of active subtables are set&lt;br /&gt;
	-- to the string &amp;quot;all&amp;quot;.&lt;br /&gt;
	--&lt;br /&gt;
	-- A key for cfg.protectionCategories is constructed for each value of i.&lt;br /&gt;
	-- The position of the value in the key is determined by the keypos field in&lt;br /&gt;
	-- each subtable.&lt;br /&gt;
	--]]&lt;br /&gt;
	local cats = cfg.protectionCategories&lt;br /&gt;
	for i = 1, 2^noActive do&lt;br /&gt;
		local key = {}&lt;br /&gt;
		for j, t in ipairs(attemptOrder) do&lt;br /&gt;
			if j &amp;gt; noActive then&lt;br /&gt;
				key[t.keypos] = &#039;all&#039;&lt;br /&gt;
			else&lt;br /&gt;
				local quotient = i / 2 ^ (j - 1)&lt;br /&gt;
				quotient = math.ceil(quotient)&lt;br /&gt;
				if quotient % 2 == 1 then&lt;br /&gt;
					key[t.keypos] = t.val&lt;br /&gt;
				else&lt;br /&gt;
					key[t.keypos] = &#039;all&#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		key = table.concat(key, &#039;|&#039;)&lt;br /&gt;
		local attempt = cats[key]&lt;br /&gt;
		if attempt then&lt;br /&gt;
			return makeCategoryLink(attempt, title.text)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:isIncorrect()&lt;br /&gt;
	local expiry = self.expiry&lt;br /&gt;
	return not self:isProtected()&lt;br /&gt;
		or type(expiry) == &#039;number&#039; and expiry &amp;lt; os.time()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:isTemplateProtectedNonTemplate()&lt;br /&gt;
	local action, namespace = self.action, self.title.namespace&lt;br /&gt;
	return self.level == &#039;templateeditor&#039;&lt;br /&gt;
		and (&lt;br /&gt;
			(action ~= &#039;edit&#039; and action ~= &#039;move&#039;)&lt;br /&gt;
			or (namespace ~= 10 and namespace ~= 828)&lt;br /&gt;
		)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:makeCategoryLinks()&lt;br /&gt;
	local msg = self._cfg.msg&lt;br /&gt;
	local ret = { self:makeProtectionCategory() }&lt;br /&gt;
	if self:isIncorrect() then&lt;br /&gt;
		ret[#ret + 1] = makeCategoryLink(&lt;br /&gt;
			msg[&#039;tracking-category-incorrect&#039;],&lt;br /&gt;
			self.title.text&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	if self:isTemplateProtectedNonTemplate() then&lt;br /&gt;
		ret[#ret + 1] = makeCategoryLink(&lt;br /&gt;
			msg[&#039;tracking-category-template&#039;],&lt;br /&gt;
			self.title.text&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Blurb class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local Blurb = {}&lt;br /&gt;
Blurb.__index = Blurb&lt;br /&gt;
&lt;br /&gt;
Blurb.bannerTextFields = {&lt;br /&gt;
	text = true,&lt;br /&gt;
	explanation = true,&lt;br /&gt;
	tooltip = true,&lt;br /&gt;
	alt = true,&lt;br /&gt;
	link = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Blurb.new(protectionObj, args, cfg)&lt;br /&gt;
	return setmetatable({&lt;br /&gt;
		_cfg = cfg,&lt;br /&gt;
		_protectionObj = protectionObj,&lt;br /&gt;
		_args = args&lt;br /&gt;
	}, Blurb)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Private methods --&lt;br /&gt;
&lt;br /&gt;
function Blurb:_formatDate(num)&lt;br /&gt;
	-- Formats a Unix timestamp into dd Month, YYYY format.&lt;br /&gt;
	-- در خط زیر جای mw.language.getContentLanguage() از mw.getLanguage(&#039;en&#039;) استفاده کردم.&lt;br /&gt;
	lang = lang or mw.getLanguage(&#039;en&#039;)&lt;br /&gt;
	local success, date = pcall(&lt;br /&gt;
		lang.formatDate,&lt;br /&gt;
		lang,&lt;br /&gt;
		self._cfg.msg[&#039;expiry-date-format&#039;] or &#039;xij xiF xiY&#039;, -- The &#039;xi&#039; prefix is the prefix for displaying Iranian time&lt;br /&gt;
		&#039;@&#039; .. replacePersianGreMonthName{converter(&#039;en&#039;, tostring(num))}&lt;br /&gt;
	)&lt;br /&gt;
	if success then&lt;br /&gt;
		return date&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_getExpandedMessage(msgKey)&lt;br /&gt;
	return self:_substituteParameters(self._cfg.msg[msgKey])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_substituteParameters(msg)&lt;br /&gt;
	if not self._params then&lt;br /&gt;
		local parameterFuncs = {}&lt;br /&gt;
&lt;br /&gt;
		parameterFuncs.CURRENTVERSION     = self._makeCurrentVersionParameter&lt;br /&gt;
		parameterFuncs.EDITREQUEST        = self._makeEditRequestParameter&lt;br /&gt;
		parameterFuncs.EXPIRY             = self._makeExpiryParameter&lt;br /&gt;
		parameterFuncs.EXPLANATIONBLURB   = self._makeExplanationBlurbParameter&lt;br /&gt;
		parameterFuncs.IMAGELINK          = self._makeImageLinkParameter&lt;br /&gt;
		parameterFuncs.INTROBLURB         = self._makeIntroBlurbParameter&lt;br /&gt;
		parameterFuncs.INTROFRAGMENT      = self._makeIntroFragmentParameter&lt;br /&gt;
		parameterFuncs.PAGETYPE           = self._makePagetypeParameter&lt;br /&gt;
		parameterFuncs.PROTECTIONBLURB    = self._makeProtectionBlurbParameter&lt;br /&gt;
		parameterFuncs.PROTECTIONDATE     = self._makeProtectionDateParameter&lt;br /&gt;
		parameterFuncs.PROTECTIONLEVEL    = self._makeProtectionLevelParameter&lt;br /&gt;
		parameterFuncs.PROTECTIONLOG      = self._makeProtectionLogParameter&lt;br /&gt;
		parameterFuncs.TALKPAGE           = self._makeTalkPageParameter&lt;br /&gt;
		parameterFuncs.TOOLTIPBLURB       = self._makeTooltipBlurbParameter&lt;br /&gt;
		parameterFuncs.TOOLTIPFRAGMENT    = self._makeTooltipFragmentParameter&lt;br /&gt;
		parameterFuncs.VANDAL             = self._makeVandalTemplateParameter&lt;br /&gt;
		&lt;br /&gt;
		self._params = setmetatable({}, {&lt;br /&gt;
			__index = function (t, k)&lt;br /&gt;
				local param&lt;br /&gt;
				if parameterFuncs[k] then&lt;br /&gt;
					param = parameterFuncs[k](self)&lt;br /&gt;
				end&lt;br /&gt;
				param = param or &#039;&#039;&lt;br /&gt;
				t[k] = param&lt;br /&gt;
				return param&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	msg = msg:gsub(&#039;${(%u+)}&#039;, self._params)&lt;br /&gt;
	return msg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeCurrentVersionParameter()&lt;br /&gt;
	-- A link to the page history or the move log, depending on the kind of&lt;br /&gt;
	-- protection.&lt;br /&gt;
	local pagename = self._protectionObj.title.prefixedText&lt;br /&gt;
	if self._protectionObj.action == &#039;move&#039; then&lt;br /&gt;
		-- We need the move log link.&lt;br /&gt;
		return makeFullUrl(&lt;br /&gt;
			&#039;ویژه:سیاهه‌ها&#039;,&lt;br /&gt;
			{type = &#039;move&#039;, page = pagename},&lt;br /&gt;
			self:_getExpandedMessage(&#039;current-version-move-display&#039;)&lt;br /&gt;
		)&lt;br /&gt;
	else&lt;br /&gt;
		-- We need the history link.&lt;br /&gt;
		return makeFullUrl(&lt;br /&gt;
			pagename,&lt;br /&gt;
			{action = &#039;history&#039;},&lt;br /&gt;
			self:_getExpandedMessage(&#039;current-version-edit-display&#039;)&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeEditRequestParameter()&lt;br /&gt;
	local mEditRequest = require(&#039;Module:Submit an edit request&#039;)&lt;br /&gt;
	local action = self._protectionObj.action&lt;br /&gt;
	local level = self._protectionObj.level&lt;br /&gt;
	&lt;br /&gt;
	-- Get the edit request type.&lt;br /&gt;
	local requestType&lt;br /&gt;
	if action == &#039;edit&#039; then&lt;br /&gt;
		if level == &#039;autoconfirmed&#039; then&lt;br /&gt;
			requestType = &#039;semi&#039;&lt;br /&gt;
		elseif level == &#039;extendedconfirmed&#039; then&lt;br /&gt;
			requestType = &#039;extended&#039;&lt;br /&gt;
		elseif level == &#039;templateeditor&#039; then&lt;br /&gt;
			requestType = &#039;template&#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	requestType = requestType or &#039;full&#039;&lt;br /&gt;
	&lt;br /&gt;
	-- Get the display value.&lt;br /&gt;
	local display = self:_getExpandedMessage(&#039;edit-request-display&#039;)&lt;br /&gt;
&lt;br /&gt;
	return mEditRequest._link{type = requestType, display = display}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeExpiryParameter()&lt;br /&gt;
	local expiry = self._protectionObj.expiry&lt;br /&gt;
	if type(expiry) == &#039;number&#039; then&lt;br /&gt;
		return self:_formatDate(expiry)&lt;br /&gt;
	else&lt;br /&gt;
		return expiry&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeExplanationBlurbParameter()&lt;br /&gt;
	-- Cover special cases first.&lt;br /&gt;
	if self._protectionObj.title.namespace == 8 then&lt;br /&gt;
		-- MediaWiki namespace&lt;br /&gt;
		return self:_getExpandedMessage(&#039;explanation-blurb-nounprotect&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get explanation blurb table keys&lt;br /&gt;
	local action = self._protectionObj.action&lt;br /&gt;
	local level = self._protectionObj.level&lt;br /&gt;
	local talkKey = self._protectionObj.title.isTalkPage and &#039;talk&#039; or &#039;subject&#039;&lt;br /&gt;
&lt;br /&gt;
	-- Find the message in the explanation blurb table and substitute any&lt;br /&gt;
	-- parameters.&lt;br /&gt;
	local explanations = self._cfg.explanationBlurbs&lt;br /&gt;
	local msg&lt;br /&gt;
	if explanations[action][level] and explanations[action][level][talkKey] then&lt;br /&gt;
		msg = explanations[action][level][talkKey]&lt;br /&gt;
	elseif explanations[action][level] and explanations[action][level].default then&lt;br /&gt;
		msg = explanations[action][level].default&lt;br /&gt;
	elseif explanations[action].default and explanations[action].default[talkKey] then&lt;br /&gt;
		msg = explanations[action].default[talkKey]&lt;br /&gt;
	elseif explanations[action].default and explanations[action].default.default then&lt;br /&gt;
		msg = explanations[action].default.default&lt;br /&gt;
	else&lt;br /&gt;
		error(mw.ustring.format(&lt;br /&gt;
			&#039;نمی‌توان explanation blurb را برای عمل «%s»، سطح «%s» و کلید بحث «%s» پیدا کرد&#039;,&lt;br /&gt;
			action,&lt;br /&gt;
			level,&lt;br /&gt;
			talkKey&lt;br /&gt;
		), 8)&lt;br /&gt;
	end&lt;br /&gt;
	return self:_substituteParameters(msg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeImageLinkParameter()&lt;br /&gt;
	local imageLinks = self._cfg.imageLinks&lt;br /&gt;
	local action = self._protectionObj.action&lt;br /&gt;
	local level = self._protectionObj.level&lt;br /&gt;
	local msg&lt;br /&gt;
	if imageLinks[action][level] then&lt;br /&gt;
		msg = imageLinks[action][level]&lt;br /&gt;
	elseif imageLinks[action].default then&lt;br /&gt;
		msg = imageLinks[action].default&lt;br /&gt;
	else&lt;br /&gt;
		msg = imageLinks.edit.default&lt;br /&gt;
	end&lt;br /&gt;
	return self:_substituteParameters(msg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeIntroBlurbParameter()&lt;br /&gt;
	if self._protectionObj:isTemporary() then&lt;br /&gt;
		return converter(&#039;fa&#039;, replacePersianMonthName(self:_getExpandedMessage(&#039;intro-blurb-expiry&#039;)))&lt;br /&gt;
	else&lt;br /&gt;
		return self:_getExpandedMessage(&#039;intro-blurb-noexpiry&#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeIntroFragmentParameter()&lt;br /&gt;
	if self._protectionObj:isTemporary() then&lt;br /&gt;
		return converter(&#039;fa&#039;, replacePersianMonthName(self:_getExpandedMessage(&#039;intro-fragment-expiry&#039;)))&lt;br /&gt;
	else&lt;br /&gt;
		return self:_getExpandedMessage(&#039;intro-fragment-noexpiry&#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makePagetypeParameter()&lt;br /&gt;
	local pagetypes = self._cfg.pagetypes&lt;br /&gt;
	return pagetypes[self._protectionObj.title.namespace]&lt;br /&gt;
		or pagetypes.default&lt;br /&gt;
		or error(&#039;هیچ نوع صفحه پیش‌فرضی تعریف نشده‌است&#039;, 8)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeProtectionBlurbParameter()&lt;br /&gt;
	local protectionBlurbs = self._cfg.protectionBlurbs&lt;br /&gt;
	local action = self._protectionObj.action&lt;br /&gt;
	local level = self._protectionObj.level&lt;br /&gt;
	local msg&lt;br /&gt;
	if protectionBlurbs[action][level] then&lt;br /&gt;
		msg = protectionBlurbs[action][level]&lt;br /&gt;
	elseif protectionBlurbs[action].default then&lt;br /&gt;
		msg = protectionBlurbs[action].default&lt;br /&gt;
	elseif protectionBlurbs.edit.default then&lt;br /&gt;
		msg = protectionBlurbs.edit.default&lt;br /&gt;
	else&lt;br /&gt;
		error(&#039;هیچ blurb حفاظتی برای protectionBlurbs.edit.default تعریف نشده‌است&#039;, 8)&lt;br /&gt;
	end&lt;br /&gt;
	return self:_substituteParameters(msg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeProtectionDateParameter()&lt;br /&gt;
	local protectionDate = self._protectionObj.protectionDate&lt;br /&gt;
	if type(protectionDate) == &#039;number&#039; then&lt;br /&gt;
		return self:_formatDate(protectionDate)&lt;br /&gt;
	else&lt;br /&gt;
		return protectionDate&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeProtectionLevelParameter()&lt;br /&gt;
	local protectionLevels = self._cfg.protectionLevels&lt;br /&gt;
	local action = self._protectionObj.action&lt;br /&gt;
	local level = self._protectionObj.level&lt;br /&gt;
	local msg&lt;br /&gt;
	if protectionLevels[action][level] then&lt;br /&gt;
		msg = protectionLevels[action][level]&lt;br /&gt;
	elseif protectionLevels[action].default then&lt;br /&gt;
		msg = protectionLevels[action].default&lt;br /&gt;
	elseif protectionLevels.edit.default then&lt;br /&gt;
		msg = protectionLevels.edit.default&lt;br /&gt;
	else&lt;br /&gt;
		error(&#039;هیچ سطح حفاظتی برای protectionLevels.edit.default تعریف نشده‌است&#039;, 8)&lt;br /&gt;
	end&lt;br /&gt;
	return self:_substituteParameters(msg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeProtectionLogParameter()&lt;br /&gt;
	local pagename = self._protectionObj.title.prefixedText&lt;br /&gt;
	if self._protectionObj.action == &#039;autoreview&#039; then&lt;br /&gt;
		-- We need the pending changes log.&lt;br /&gt;
		return makeFullUrl(&lt;br /&gt;
			&#039;ویژه:سیاهه‌ها&#039;,&lt;br /&gt;
			{type = &#039;stable&#039;, page = pagename},&lt;br /&gt;
			self:_getExpandedMessage(&#039;pc-log-display&#039;)&lt;br /&gt;
		)&lt;br /&gt;
	else&lt;br /&gt;
		-- We need the protection log.&lt;br /&gt;
		return makeFullUrl(&lt;br /&gt;
			&#039;ویژه:سیاهه‌ها&#039;,&lt;br /&gt;
			{type = &#039;protect&#039;, page = pagename},&lt;br /&gt;
			self:_getExpandedMessage(&#039;protection-log-display&#039;)&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeTalkPageParameter()&lt;br /&gt;
	return mw.ustring.format(&lt;br /&gt;
		&#039;[[%s:%s#%s|%s]]&#039;,&lt;br /&gt;
		mw.site.namespaces[self._protectionObj.title.namespace].talk.name,&lt;br /&gt;
		self._protectionObj.title.text,&lt;br /&gt;
		self._args.section or &#039;top&#039;,&lt;br /&gt;
		self:_getExpandedMessage(&#039;talk-page-link-display&#039;)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeTooltipBlurbParameter()&lt;br /&gt;
	if self._protectionObj:isTemporary() then&lt;br /&gt;
		return converter(&#039;fa&#039;, replacePersianMonthName(self:_getExpandedMessage(&#039;tooltip-blurb-expiry&#039;)))&lt;br /&gt;
	else&lt;br /&gt;
		return self:_getExpandedMessage(&#039;tooltip-blurb-noexpiry&#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeTooltipFragmentParameter()&lt;br /&gt;
	if self._protectionObj:isTemporary() then&lt;br /&gt;
		return converter(&#039;fa&#039;, replacePersianMonthName(self:_getExpandedMessage(&#039;tooltip-fragment-expiry&#039;)))&lt;br /&gt;
	else&lt;br /&gt;
		return self:_getExpandedMessage(&#039;tooltip-fragment-noexpiry&#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeVandalTemplateParameter()&lt;br /&gt;
	return require(&#039;Module:Vandal-m&#039;)._main{&lt;br /&gt;
		self._args.user or self._protectionObj.title.baseText&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Public methods --&lt;br /&gt;
&lt;br /&gt;
function Blurb:makeBannerText(key)&lt;br /&gt;
	-- Validate input.&lt;br /&gt;
	if not key or not Blurb.bannerTextFields[key] then&lt;br /&gt;
		error(mw.ustring.format(&lt;br /&gt;
			&#039;«%s» زمینه پیکربندی بنر معتبری نیست&#039;,&lt;br /&gt;
			tostring(key)&lt;br /&gt;
		), 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Generate the text.&lt;br /&gt;
	local msg = self._protectionObj.bannerConfig[key]&lt;br /&gt;
	if type(msg) == &#039;string&#039; then&lt;br /&gt;
		return self:_substituteParameters(msg)&lt;br /&gt;
	elseif type(msg) == &#039;function&#039; then&lt;br /&gt;
		msg = msg(self._protectionObj, self._args)&lt;br /&gt;
		if type(msg) ~= &#039;string&#039; then&lt;br /&gt;
			error(mw.ustring.format(&lt;br /&gt;
				&#039;خروجی نامناسب از تابع پیکربندی بنر همراه کلید &amp;quot;%s&amp;quot;&#039;&lt;br /&gt;
					.. &#039; (رشته انتظار می‌رود، %s داده شده‌است)&#039;,&lt;br /&gt;
				tostring(key),&lt;br /&gt;
				type(msg)&lt;br /&gt;
			), 4)&lt;br /&gt;
		end&lt;br /&gt;
		return self:_substituteParameters(msg)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- BannerTemplate class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local BannerTemplate = {}&lt;br /&gt;
BannerTemplate.__index = BannerTemplate&lt;br /&gt;
&lt;br /&gt;
function BannerTemplate.new(protectionObj, cfg)&lt;br /&gt;
	local obj = {}&lt;br /&gt;
	obj._cfg = cfg&lt;br /&gt;
&lt;br /&gt;
	-- Set the image filename.&lt;br /&gt;
	local imageFilename = protectionObj.bannerConfig.image&lt;br /&gt;
	if imageFilename then&lt;br /&gt;
		obj._imageFilename = imageFilename&lt;br /&gt;
	else&lt;br /&gt;
		-- If an image filename isn&#039;t specified explicitly in the banner config,&lt;br /&gt;
		-- generate it from the protection status and the namespace.&lt;br /&gt;
		local action = protectionObj.action&lt;br /&gt;
		local level = protectionObj.level&lt;br /&gt;
		local namespace = protectionObj.title.namespace&lt;br /&gt;
		local reason = protectionObj.reason&lt;br /&gt;
		&lt;br /&gt;
		-- Deal with special cases first.&lt;br /&gt;
		if (&lt;br /&gt;
			namespace == 10&lt;br /&gt;
			or namespace == 828&lt;br /&gt;
			or reason and obj._cfg.indefImageReasons[reason]&lt;br /&gt;
			)&lt;br /&gt;
			and action == &#039;edit&#039;&lt;br /&gt;
			and level == &#039;sysop&#039;&lt;br /&gt;
			and not protectionObj:isTemporary()&lt;br /&gt;
		then&lt;br /&gt;
			-- Fully protected modules and templates get the special red &amp;quot;indef&amp;quot;&lt;br /&gt;
			-- padlock.&lt;br /&gt;
			obj._imageFilename = obj._cfg.msg[&#039;image-filename-indef&#039;]&lt;br /&gt;
		else&lt;br /&gt;
			-- Deal with regular protection types.&lt;br /&gt;
			local images = obj._cfg.images&lt;br /&gt;
			if images[action] then&lt;br /&gt;
				if images[action][level] then&lt;br /&gt;
					obj._imageFilename = images[action][level]&lt;br /&gt;
				elseif images[action].default then&lt;br /&gt;
					obj._imageFilename = images[action].default&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return setmetatable(obj, BannerTemplate)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BannerTemplate:renderImage()&lt;br /&gt;
	local filename = self._imageFilename&lt;br /&gt;
		or self._cfg.msg[&#039;image-filename-default&#039;]&lt;br /&gt;
		or &#039;Transparent.gif&#039;&lt;br /&gt;
	return makeFileLink{&lt;br /&gt;
		file = filename,&lt;br /&gt;
		size = (self.imageWidth or 20) .. &#039;px&#039;,&lt;br /&gt;
		alt = self._imageAlt,&lt;br /&gt;
		link = self._imageLink,&lt;br /&gt;
		caption = self.imageCaption&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Banner class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local Banner = setmetatable({}, BannerTemplate)&lt;br /&gt;
Banner.__index = Banner&lt;br /&gt;
&lt;br /&gt;
function Banner.new(protectionObj, blurbObj, cfg)&lt;br /&gt;
	local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn&#039;t need the blurb.&lt;br /&gt;
	obj.imageWidth = 40&lt;br /&gt;
	obj.imageCaption = blurbObj:makeBannerText(&#039;alt&#039;) -- Large banners use the alt text for the tooltip.&lt;br /&gt;
	obj._reasonText = blurbObj:makeBannerText(&#039;text&#039;)&lt;br /&gt;
	obj._explanationText = blurbObj:makeBannerText(&#039;explanation&#039;)&lt;br /&gt;
	obj._page = protectionObj.title.prefixedText -- Only makes a difference in testing.&lt;br /&gt;
	return setmetatable(obj, Banner)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Banner:__tostring()&lt;br /&gt;
	-- Renders the banner.&lt;br /&gt;
	makeMessageBox = makeMessageBox or require(&#039;Module:Message box&#039;).main&lt;br /&gt;
	local reasonText = self._reasonText or error(&#039;هیچ متن دلیلی تعیین نشده‌است&#039;, 2)&lt;br /&gt;
	local explanationText = self._explanationText&lt;br /&gt;
	local mbargs = {&lt;br /&gt;
		page = self._page,&lt;br /&gt;
		type = &#039;protection&#039;,&lt;br /&gt;
		image = self:renderImage(),&lt;br /&gt;
		text = mw.ustring.format(&lt;br /&gt;
			&amp;quot;&#039;&#039;&#039;%s&#039;&#039;&#039;%s&amp;quot;,&lt;br /&gt;
			reasonText,&lt;br /&gt;
			explanationText and &#039;&amp;lt;br /&amp;gt;&#039; .. explanationText or &#039;&#039;&lt;br /&gt;
		)&lt;br /&gt;
	}&lt;br /&gt;
	return makeMessageBox(&#039;mbox&#039;, mbargs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Padlock class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local Padlock = setmetatable({}, BannerTemplate)&lt;br /&gt;
Padlock.__index = Padlock&lt;br /&gt;
&lt;br /&gt;
function Padlock.new(protectionObj, blurbObj, cfg)&lt;br /&gt;
	local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn&#039;t need the blurb.&lt;br /&gt;
	obj.imageWidth = 20&lt;br /&gt;
	obj.imageCaption = blurbObj:makeBannerText(&#039;tooltip&#039;)&lt;br /&gt;
	obj._imageAlt = blurbObj:makeBannerText(&#039;alt&#039;)&lt;br /&gt;
	obj._imageLink = blurbObj:makeBannerText(&#039;link&#039;)&lt;br /&gt;
	obj._indicatorName = cfg.padlockIndicatorNames[protectionObj.action]&lt;br /&gt;
		or cfg.padlockIndicatorNames.default&lt;br /&gt;
		or &#039;pp-default&#039;&lt;br /&gt;
	return setmetatable(obj, Padlock)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Padlock:__tostring()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- The nowiki tag helps prevent whitespace at the top of articles.&lt;br /&gt;
	return frame:extensionTag{name = &#039;nowiki&#039;} .. frame:extensionTag{&lt;br /&gt;
		name = &#039;indicator&#039;,&lt;br /&gt;
		args = {name = self._indicatorName},&lt;br /&gt;
		content = self:renderImage()&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Exports&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p._exportClasses()&lt;br /&gt;
	-- This is used for testing purposes.&lt;br /&gt;
	return {&lt;br /&gt;
		Protection = Protection,&lt;br /&gt;
		Blurb = Blurb,&lt;br /&gt;
		BannerTemplate = BannerTemplate,&lt;br /&gt;
		Banner = Banner,&lt;br /&gt;
		Padlock = Padlock,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args, cfg, title)&lt;br /&gt;
	args = args or {}&lt;br /&gt;
	&lt;br /&gt;
	-- local args&lt;br /&gt;
	if args[&#039;کوچک&#039;] then args.small = args[&#039;کوچک&#039;] end&lt;br /&gt;
	if args[&#039;عمل&#039;] then args.action = args[&#039;عمل&#039;] end&lt;br /&gt;
	if args[&#039;تاریخ&#039;] then args.date = args[&#039;تاریخ&#039;] end&lt;br /&gt;
	if args[&#039;کاربر&#039;] then args.user = args[&#039;کاربر&#039;] end&lt;br /&gt;
	if args[&#039;بخش&#039;] then args.section = args[&#039;بخش&#039;] end&lt;br /&gt;
	if args[&#039;رده&#039;] then args.category = args[&#039;رده&#039;] end&lt;br /&gt;
	if args[&#039;فقط رده&#039;] then args.catonly = args[&#039;فقط رده&#039;] end&lt;br /&gt;
	&lt;br /&gt;
	cfg = cfg or require(CONFIG_MODULE)&lt;br /&gt;
&lt;br /&gt;
	local protectionObj = Protection.new(args, cfg, title)&lt;br /&gt;
&lt;br /&gt;
	local ret = {}&lt;br /&gt;
&lt;br /&gt;
	-- If a page&#039;s edit protection is equally or more restrictive than its&lt;br /&gt;
	-- protection from some other action, then don&#039;t bother displaying anything&lt;br /&gt;
	-- for the other action (except categories).&lt;br /&gt;
	if protectionObj.action == &#039;edit&#039; or&lt;br /&gt;
		args.demolevel or&lt;br /&gt;
		not getReachableNodes(&lt;br /&gt;
			cfg.hierarchy,&lt;br /&gt;
			protectionObj.level&lt;br /&gt;
		)[effectiveProtectionLevel(&#039;edit&#039;, protectionObj.title)]&lt;br /&gt;
	then&lt;br /&gt;
		-- Initialise the blurb object&lt;br /&gt;
		local blurbObj = Blurb.new(protectionObj, args, cfg)&lt;br /&gt;
	&lt;br /&gt;
		-- Render the banner&lt;br /&gt;
		if protectionObj:isProtected() then&lt;br /&gt;
			ret[#ret + 1] = tostring(&lt;br /&gt;
				(yesno(args.small) and Padlock or Banner)&lt;br /&gt;
				.new(protectionObj, blurbObj, cfg)&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the categories&lt;br /&gt;
	if yesno(args.category) ~= false then&lt;br /&gt;
		ret[#ret + 1] = protectionObj:makeCategoryLinks()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(ret)	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame, cfg)&lt;br /&gt;
	cfg = cfg or require(CONFIG_MODULE)&lt;br /&gt;
&lt;br /&gt;
	-- Find default args, if any.&lt;br /&gt;
	local parent = frame.getParent and frame:getParent()&lt;br /&gt;
	local defaultArgs = parent and cfg.wrappers[mw.ustring.gsub(parent:getTitle(), &#039;/تمرین$&#039;, &#039;&#039;)]&lt;br /&gt;
&lt;br /&gt;
	-- Find user args, and use the parent frame if we are being called from a&lt;br /&gt;
	-- wrapper template.&lt;br /&gt;
	getArgs = getArgs or require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
	local userArgs = getArgs(frame, {&lt;br /&gt;
		parentOnly = defaultArgs,&lt;br /&gt;
		frameOnly = not defaultArgs&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	-- Build the args table. User-specified args overwrite default args.&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(defaultArgs or {}) do&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs(userArgs) do&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return p._main(args, cfg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Parameter_names_example&amp;diff=1990</id>
		<title>پودمان:Parameter names example</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Parameter_names_example&amp;diff=1990"/>
		<updated>2026-06-25T09:35:05Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{parameter names example}}.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function makeParam(s)&lt;br /&gt;
	local lb = &#039;&amp;amp;#123;&#039;&lt;br /&gt;
	local rb = &#039;&amp;amp;#125;&#039;&lt;br /&gt;
	return lb:rep(3) .. s .. rb:rep(3)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function italicize(s)&lt;br /&gt;
	return &amp;quot;&#039;&#039;&amp;quot; .. s .. &amp;quot;&#039;&#039;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function plain(s)&lt;br /&gt;
	return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args, frame)&lt;br /&gt;
	-- Find how we want to format the arguments to the template.&lt;br /&gt;
	local formatFunc&lt;br /&gt;
	if args._display == &#039;italics&#039; or args._display == &#039;italic&#039; then&lt;br /&gt;
		formatFunc = italicize&lt;br /&gt;
	elseif args._display == &#039;plain&#039; then&lt;br /&gt;
		formatFunc = plain&lt;br /&gt;
	else&lt;br /&gt;
		formatFunc = makeParam&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Build the table of template arguments.&lt;br /&gt;
	local targs = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			targs[v] = formatFunc(v)&lt;br /&gt;
		elseif not k:find(&#039;^_&#039;) then&lt;br /&gt;
			targs[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	targs[&#039;nocat&#039;] = &#039;yes&#039;;&lt;br /&gt;
	targs[&#039;categories&#039;] = &#039;no&#039;;&lt;br /&gt;
	targs[&#039;demo&#039;] = &#039;yes&#039;;&lt;br /&gt;
&lt;br /&gt;
	-- Find the template name.&lt;br /&gt;
	local template&lt;br /&gt;
	if args._template then&lt;br /&gt;
		template = args._template&lt;br /&gt;
	else&lt;br /&gt;
		local currentTitle = mw.title.getCurrentTitle()&lt;br /&gt;
		if currentTitle.prefixedText:find(&#039;/sandbox$&#039;) then&lt;br /&gt;
			template = currentTitle.prefixedText&lt;br /&gt;
		else&lt;br /&gt;
			template = currentTitle.basePageTitle.prefixedText&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Call the template with the arguments.&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	local success, result = pcall(&lt;br /&gt;
		frame.expandTemplate,&lt;br /&gt;
		frame,&lt;br /&gt;
		{title = template, args = targs}&lt;br /&gt;
	)&lt;br /&gt;
	if success then&lt;br /&gt;
		return result&lt;br /&gt;
	else&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {&lt;br /&gt;
		wrappers = &#039;Template:Parameter names example&#039;&lt;br /&gt;
	})&lt;br /&gt;
	return p._main(args, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Pagetype/config&amp;diff=1987</id>
		<title>پودمان:Pagetype/config</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Pagetype/config&amp;diff=1987"/>
		<updated>2026-06-25T09:35:04Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                  Module:Pagetype configuration data                        --&lt;br /&gt;
-- This page holds localisation and configuration data for Module:Pagetype.   --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local cfg = {} -- Don&#039;t edit this line.&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                        Start configuration data                            --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table holds the values to use for &amp;quot;main=true&amp;quot;, &amp;quot;user=true&amp;quot;, etc. Keys to&lt;br /&gt;
-- this table should be namespace parameters that can be used with&lt;br /&gt;
-- [[Module:Namespace detect]]. &lt;br /&gt;
cfg.pagetypes = {&lt;br /&gt;
	[&#039;main&#039;]              = &#039;مقاله&#039;,&lt;br /&gt;
	[&#039;user&#039;]              = &#039;صفحه کاربر&#039;,&lt;br /&gt;
	[&#039;project&#039;]           = &#039;صفحه پروژه&#039;,&lt;br /&gt;
	[&#039;wikipedia&#039;]         = &#039;صفحه پروژه&#039;,&lt;br /&gt;
	[&#039;wp&#039;]                = &#039;صفحه پروژه&#039;,&lt;br /&gt;
	[&#039;file&#039;]              = &#039;پرونده&#039;,&lt;br /&gt;
	[&#039;image&#039;]             = &#039;پرونده&#039;,&lt;br /&gt;
	[&#039;mediawiki&#039;]         = &#039;صفحه رابط&#039;,&lt;br /&gt;
	[&#039;template&#039;]          = &#039;الگو&#039;,&lt;br /&gt;
	[&#039;help&#039;]              = &#039;صفحه راهنما&#039;,&lt;br /&gt;
	[&#039;category&#039;]          = &#039;رده&#039;,&lt;br /&gt;
	[&#039;portal&#039;]            = &#039;درگاه&#039;,&lt;br /&gt;
	[&#039;book&#039;]              = &#039;کتاب&#039;,&lt;br /&gt;
	[&#039;draft&#039;]             = &#039;پیش‌نویس&#039;,&lt;br /&gt;
	[&#039;education program&#039;] = &#039;صفحه برنامه آموزش&#039;,&lt;br /&gt;
	[&#039;timedtext&#039;]         = &#039;صفحه متن زمان‌دار&#039;,&lt;br /&gt;
	[&#039;module&#039;]            = &#039;پودمان&#039;,&lt;br /&gt;
	[&#039;topic&#039;]             = &#039;مبحث&#039;,&lt;br /&gt;
	[&#039;gadget&#039;]            = &#039;ابزار&#039;,&lt;br /&gt;
	[&#039;gadget definition&#039;] = &#039;تعریف ابزار&#039;,&lt;br /&gt;
	[&#039;talk&#039;]              = &#039;صفحه بحث&#039;,&lt;br /&gt;
	[&#039;special&#039;]           = &#039;صفحه ویژه&#039;,&lt;br /&gt;
	[&#039;media&#039;]             = &#039;پرونده&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- This table holds the names of the namespaces to be looked up from&lt;br /&gt;
-- cfg.pagetypes by default.&lt;br /&gt;
cfg.defaultNamespaces = {&lt;br /&gt;
	&#039;main&#039;,&lt;br /&gt;
	&#039;file&#039;,&lt;br /&gt;
	&#039;template&#039;,&lt;br /&gt;
	&#039;category&#039;,&lt;br /&gt;
	&#039;module&#039;,&lt;br /&gt;
	&#039;book&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- This table holds the names of the namespaces to be looked up from&lt;br /&gt;
-- cfg.pagetypes if cfg.defaultnsExtended is set.&lt;br /&gt;
cfg.extendedNamespaces = {&lt;br /&gt;
	&#039;main&#039;,&lt;br /&gt;
	&#039;user&#039;,&lt;br /&gt;
	&#039;project&#039;,&lt;br /&gt;
	&#039;file&#039;,&lt;br /&gt;
	&#039;mediawiki&#039;,&lt;br /&gt;
	&#039;template&#039;,&lt;br /&gt;
	&#039;category&#039;,&lt;br /&gt;
	&#039;help&#039;,&lt;br /&gt;
	&#039;portal&#039;,&lt;br /&gt;
	&#039;module&#039;,&lt;br /&gt;
	&#039;book&#039;,&lt;br /&gt;
	&#039;draft&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- The parameter name to set which default namespace values to be looked up from&lt;br /&gt;
-- cfg.pagetypes.&lt;br /&gt;
cfg.defaultns = &#039;defaultns&#039;&lt;br /&gt;
&lt;br /&gt;
-- The value of cfg.defaultns to set all namespaces, including talk.&lt;br /&gt;
cfg.defaultnsAll = &#039;همه&#039;&lt;br /&gt;
&lt;br /&gt;
-- The value of cfg.defaultns to set the namespaces listed in&lt;br /&gt;
-- cfg.extendedNamespaces&lt;br /&gt;
cfg.defaultnsExtended = &#039;گسترده&#039;&lt;br /&gt;
&lt;br /&gt;
-- The value of cfg.defaultns to set no default namespaces.&lt;br /&gt;
cfg.defaultnsNone = &#039;هیچ‌کدام&#039;&lt;br /&gt;
&lt;br /&gt;
-- The parameter name to use for disambiguation pages page.&lt;br /&gt;
cfg.dab = &#039;dab&#039;&lt;br /&gt;
&lt;br /&gt;
-- This table holds the different possible aliases for disambiguation-class&lt;br /&gt;
-- pages. These should be lower-case.&lt;br /&gt;
cfg.dabAliases = {&lt;br /&gt;
	&#039;disambiguation&#039;,&lt;br /&gt;
	&#039;disambig&#039;,&lt;br /&gt;
	&#039;disamb&#039;,&lt;br /&gt;
	&#039;dab&#039;,&lt;br /&gt;
	&#039;ابهام‌زدایی&#039;,&lt;br /&gt;
	&#039;ابهام&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- The default value for disambiguation pages.&lt;br /&gt;
cfg.dabDefault = &#039;صفحه&#039;&lt;br /&gt;
&lt;br /&gt;
-- The parameter name to use for N/A-class page.&lt;br /&gt;
cfg.na = &#039;na&#039;&lt;br /&gt;
&lt;br /&gt;
-- This table holds the different possible aliases for N/A-class pages. These&lt;br /&gt;
-- should be lower-case.&lt;br /&gt;
cfg.naAliases = {&#039;na&#039;, &#039;n/a&#039;,&#039;قابل اجرا نیست&#039;, &#039;در دسترس نیست&#039;, &#039;بدون پاسخ&#039;}&lt;br /&gt;
&lt;br /&gt;
-- The default value for N/A-class pages.&lt;br /&gt;
cfg.naDefault = &#039;صفحه&#039;&lt;br /&gt;
&lt;br /&gt;
-- The parameter name to use for redirects.&lt;br /&gt;
cfg.redirect = &#039;redirect&#039;&lt;br /&gt;
&lt;br /&gt;
-- The default value to use for redirects.&lt;br /&gt;
cfg.redirectDefault = &#039;تفییرمسیر&#039;&lt;br /&gt;
&lt;br /&gt;
-- The parameter name for undefined namespaces.&lt;br /&gt;
cfg.other = &#039;other&#039;&lt;br /&gt;
&lt;br /&gt;
-- The value used if the module detects an undefined namespace.&lt;br /&gt;
cfg.otherDefault = &#039;صفحه&#039;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                        End configuration data                              --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
return cfg -- Don&#039;t edit this line&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Pagetype&amp;diff=1984</id>
		<title>پودمان:Pagetype</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Pagetype&amp;diff=1984"/>
		<updated>2026-06-25T09:35:04Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                                                                            --&lt;br /&gt;
--                                PAGETYPE                                    --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
--      This is a meta-module intended to replace {{pagetype}} and similar    --&lt;br /&gt;
--      templates. It automatically detects namespaces, and allows for a      --&lt;br /&gt;
--      great deal of customisation. It can easily be ported to other         --&lt;br /&gt;
--      wikis by changing the values in the [[Module:Pagetype/config]].       --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Load config.&lt;br /&gt;
local cfg = mw.loadData(&#039;Module:Pagetype/config&#039;)&lt;br /&gt;
&lt;br /&gt;
-- Load required modules.&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
local nsDetectModule = require(&#039;Module:Namespace detect&#039;)&lt;br /&gt;
local nsDetect = nsDetectModule._main&lt;br /&gt;
local getParamMappings = nsDetectModule.getParamMappings&lt;br /&gt;
local getPageObject = nsDetectModule.getPageObject&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function shallowCopy(t)&lt;br /&gt;
	-- Makes a shallow copy of a table.&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		ret[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function checkPagetypeInput(namespace, val)&lt;br /&gt;
	-- Checks to see whether we need the default value for the given namespace,&lt;br /&gt;
	-- and if so gets it from the pagetypes table.&lt;br /&gt;
	-- The yesno function returns true/false for &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc., and returns&lt;br /&gt;
	-- val for other input.&lt;br /&gt;
	local ret = yesno(val, val)&lt;br /&gt;
	if ret and type(ret) ~= &#039;string&#039; then&lt;br /&gt;
		ret = cfg.pagetypes[namespace]&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getPagetypeFromClass(class, param, aliasTable, default)&lt;br /&gt;
	-- Gets the pagetype from a class specified from the first positional&lt;br /&gt;
	-- parameter.&lt;br /&gt;
	param = yesno(param, param)&lt;br /&gt;
	if param ~= false then -- No check if specifically disallowed.&lt;br /&gt;
		for _, alias in ipairs(aliasTable) do&lt;br /&gt;
			if class == alias then&lt;br /&gt;
				if type(param) == &#039;string&#039; then&lt;br /&gt;
					return param&lt;br /&gt;
				else&lt;br /&gt;
					return default&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getNsDetectValue(args)&lt;br /&gt;
	-- Builds the arguments to pass to [[Module:Namespace detect]] and returns&lt;br /&gt;
	-- the result.&lt;br /&gt;
&lt;br /&gt;
	-- Get the default values.&lt;br /&gt;
	local ndArgs = {}&lt;br /&gt;
	local defaultns = args[cfg.defaultns]&lt;br /&gt;
	if defaultns == cfg.defaultnsAll then&lt;br /&gt;
		ndArgs = shallowCopy(cfg.pagetypes)&lt;br /&gt;
	else&lt;br /&gt;
		local defaultnsArray&lt;br /&gt;
		if defaultns == cfg.defaultnsExtended then&lt;br /&gt;
			defaultnsArray = cfg.extendedNamespaces&lt;br /&gt;
		elseif defaultns == cfg.defaultnsNone then&lt;br /&gt;
			defaultnsArray = {}&lt;br /&gt;
		else&lt;br /&gt;
			defaultnsArray = cfg.defaultNamespaces&lt;br /&gt;
		end&lt;br /&gt;
		for _, namespace in ipairs(defaultnsArray) do&lt;br /&gt;
			ndArgs[namespace] = cfg.pagetypes[namespace]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Add custom values passed in from the arguments. These overwrite the&lt;br /&gt;
	-- defaults. The possible argument names are fetched from&lt;br /&gt;
	-- Module:Namespace detect automatically in case new namespaces are&lt;br /&gt;
	-- added. Although we accept namespace aliases as parameters, we only pass&lt;br /&gt;
	-- the local namespace name as a parameter to Module:Namespace detect.&lt;br /&gt;
	-- This means that the &amp;quot;image&amp;quot; parameter can overwrite defaults for the&lt;br /&gt;
	-- File: namespace, which wouldn&#039;t work if we passed the parameters through&lt;br /&gt;
	-- separately.&lt;br /&gt;
	--]]&lt;br /&gt;
	local mappings = getParamMappings()&lt;br /&gt;
	for ns, paramAliases in pairs(mappings) do&lt;br /&gt;
		-- Copy the aliases table, as # doesn&#039;t work with tables returned from&lt;br /&gt;
		-- mw.loadData.&lt;br /&gt;
		paramAliases = shallowCopy(paramAliases)&lt;br /&gt;
		local paramName = paramAliases[1]&lt;br /&gt;
		-- Iterate backwards along the array so that any values for the local&lt;br /&gt;
		-- namespace names overwrite those for namespace aliases.&lt;br /&gt;
		for i = #paramAliases, 1, -1 do&lt;br /&gt;
			local paramAlias = paramAliases[i]&lt;br /&gt;
			local ndArg = checkPagetypeInput(paramAlias, args[paramAlias])&lt;br /&gt;
			if ndArg == false then&lt;br /&gt;
				-- If any arguments are false, convert them to nil to protect&lt;br /&gt;
				-- against breakage by future changes to&lt;br /&gt;
				-- [[Module:Namespace detect]].&lt;br /&gt;
				ndArgs[paramName] = nil&lt;br /&gt;
			elseif ndArg then&lt;br /&gt;
				ndArgs[paramName] = ndArg&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Check for disambiguation-class and N/A-class pages in mainspace.&lt;br /&gt;
	if ndArgs.main then&lt;br /&gt;
		local class = args[1]&lt;br /&gt;
		if type(class) == &#039;string&#039; then&lt;br /&gt;
			-- Put in lower case so e.g. &amp;quot;Dab&amp;quot; and &amp;quot;dab&amp;quot; will both match.&lt;br /&gt;
			class = mw.ustring.lower(class)&lt;br /&gt;
		end&lt;br /&gt;
		local dab = getPagetypeFromClass(&lt;br /&gt;
			class,&lt;br /&gt;
			args[cfg.dab],&lt;br /&gt;
			cfg.dabAliases,&lt;br /&gt;
			cfg.dabDefault&lt;br /&gt;
		)&lt;br /&gt;
		if dab then&lt;br /&gt;
			ndArgs.main = dab&lt;br /&gt;
		else&lt;br /&gt;
			local na = getPagetypeFromClass(&lt;br /&gt;
				class,&lt;br /&gt;
				args[cfg.na],&lt;br /&gt;
				cfg.naAliases,&lt;br /&gt;
				cfg.naDefault&lt;br /&gt;
			)&lt;br /&gt;
			if na then&lt;br /&gt;
				ndArgs.main = na&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- If there is no talk value specified, use the corresponding subject &lt;br /&gt;
	-- namespace for talk pages.&lt;br /&gt;
	if not ndArgs.talk then&lt;br /&gt;
		ndArgs.subjectns = true&lt;br /&gt;
	end&lt;br /&gt;
	-- Add the fallback value. This can also be customised, but it cannot be&lt;br /&gt;
	-- disabled.&lt;br /&gt;
	local other = args[cfg.other]&lt;br /&gt;
	-- We will ignore true/false/nil results from yesno here, but using it&lt;br /&gt;
	-- anyway for consistency.&lt;br /&gt;
	other = yesno(other, other)&lt;br /&gt;
	if type(other) == &#039;string&#039; then&lt;br /&gt;
		ndArgs.other = other&lt;br /&gt;
	else&lt;br /&gt;
		ndArgs.other = cfg.otherDefault&lt;br /&gt;
	end&lt;br /&gt;
	-- Allow custom page values.&lt;br /&gt;
	ndArgs.page = args.page&lt;br /&gt;
	return nsDetect(ndArgs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function detectRedirects(args)&lt;br /&gt;
	local redirect = args[cfg.redirect]&lt;br /&gt;
	-- The yesno function returns true/false for &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc., and returns&lt;br /&gt;
	-- redirect for other input.&lt;br /&gt;
	redirect = yesno(redirect, redirect)&lt;br /&gt;
	if redirect == false then&lt;br /&gt;
		-- Detect redirects unless they have been explicitly disallowed with&lt;br /&gt;
		-- &amp;quot;redirect=no&amp;quot; or similar.&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local pageObject = getPageObject(args.page)&lt;br /&gt;
	-- If we are using subject namespaces elsewhere, do so here as well.&lt;br /&gt;
	if pageObject&lt;br /&gt;
		and not yesno(args.talk, true)&lt;br /&gt;
		and args[cfg.defaultns] ~= cfg.defaultnsAll&lt;br /&gt;
	then&lt;br /&gt;
		pageObject = getPageObject(&lt;br /&gt;
			pageObject.subjectNsText .. &#039;:&#039; .. pageObject.text&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	-- Allow custom values for redirects.&lt;br /&gt;
	if pageObject and pageObject.isRedirect then&lt;br /&gt;
		if type(redirect) == &#039;string&#039; then&lt;br /&gt;
			return redirect&lt;br /&gt;
		else&lt;br /&gt;
			return cfg.redirectDefault&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local redirect = detectRedirects(args)&lt;br /&gt;
	local pagetype = &amp;quot;&amp;quot;&lt;br /&gt;
	if redirect then&lt;br /&gt;
		pagetype = redirect&lt;br /&gt;
	else&lt;br /&gt;
		pagetype = getNsDetectValue(args)&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(args.plural, false) then&lt;br /&gt;
		-- if cfg.irregularPlurals[pagetype] then&lt;br /&gt;
		--	pagetype = cfg.irregularPlurals[pagetype]&lt;br /&gt;
		--else&lt;br /&gt;
		if pagetype == &amp;quot;الگو&amp;quot; then&lt;br /&gt;
			pagetype = pagetype .. &amp;quot;های&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			pagetype = pagetype .. &amp;quot;‌های&amp;quot; -- often &#039;s&#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(args.caps, false) then&lt;br /&gt;
		pagetype = mw.ustring.upper(mw.ustring.sub(pagetype, 1, 1)) ..&lt;br /&gt;
			mw.ustring.sub(pagetype, 2)&lt;br /&gt;
	end&lt;br /&gt;
	return pagetype&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Numeral_converter2&amp;diff=1981</id>
		<title>پودمان:Numeral converter2</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Numeral_converter2&amp;diff=1981"/>
		<updated>2026-06-25T09:34:51Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Use this function from templates.&lt;br /&gt;
function p.convert_template(frame)&lt;br /&gt;
  -- Third argument is optional; If true given, signs like dot (.) will be replaced.&lt;br /&gt;
  frame.args[3] = frame.args[3] or nil&lt;br /&gt;
  return p.convert(frame.args[1], frame.args[2], frame.args[3])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Use these function directly in modules.&lt;br /&gt;
&lt;br /&gt;
function p.convert(lang, text, signs, virgule)&lt;br /&gt;
  text = tostring(text)&lt;br /&gt;
  signs = signs or nil&lt;br /&gt;
  virgule= virgule or nil&lt;br /&gt;
&lt;br /&gt;
  if lang == &amp;quot;fa&amp;quot; or lang == &amp;quot;ur&amp;quot; or lang == &amp;quot;mzn&amp;quot; or lang == &amp;quot;glk&amp;quot; then -- برای فارسی، اردو، مازندرانی، گیلکی&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[0٠]&amp;quot;, &amp;quot;۰&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[1١]&amp;quot;, &amp;quot;۱&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[2٢]&amp;quot;, &amp;quot;۲&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[3٣]&amp;quot;, &amp;quot;۳&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[4٤]&amp;quot;, &amp;quot;۴&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[5٥]&amp;quot;, &amp;quot;۵&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[6٦]&amp;quot;, &amp;quot;۶&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[7٧]&amp;quot;, &amp;quot;۷&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[8٨]&amp;quot;, &amp;quot;۸&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[9٩]&amp;quot;, &amp;quot;۹&amp;quot;)&lt;br /&gt;
--    text = mw.ustring.gsub(text, &amp;quot;ISBN &amp;quot;, &amp;quot;&amp;quot;)	&lt;br /&gt;
    --تبدیل نقطه به «٫» را به دلیل ایجاد مشکل در فارسی‌سازی برخی شناسه‌ها که نقطه دارند حذف کردم&lt;br /&gt;
    if type(signs) ~= &amp;quot;nil&amp;quot; then&lt;br /&gt;
      text = mw.ustring.gsub(text, &amp;quot;%.&amp;quot;, &amp;quot;٫&amp;quot;)&lt;br /&gt;
      --تبدیل % به درصد فارسی ٪ را نگذاشتم چون ممکن است کدهای درصدی وارد شده به پودمان را خراب کند.&lt;br /&gt;
    end&lt;br /&gt;
  elseif lang == &amp;quot;en&amp;quot; then -- تبدیل به انگلیسی&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۰٠]&amp;quot;, &amp;quot;0&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۱١]&amp;quot;, &amp;quot;1&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۲٢]&amp;quot;, &amp;quot;2&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۳٣]&amp;quot;, &amp;quot;3&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۴٤]&amp;quot;, &amp;quot;4&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۵٥]&amp;quot;, &amp;quot;5&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۶٦]&amp;quot;, &amp;quot;6&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۷٧]&amp;quot;, &amp;quot;7&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۸٨]&amp;quot;, &amp;quot;8&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۹٩]&amp;quot;, &amp;quot;9&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;٫&amp;quot;, &amp;quot;.&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;٪&amp;quot;, &amp;quot;%&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Numeral_converter&amp;diff=1978</id>
		<title>پودمان:Numeral converter</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Numeral_converter&amp;diff=1978"/>
		<updated>2026-06-25T09:34:51Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Use this function from templates.&lt;br /&gt;
function p.convert_template(frame)&lt;br /&gt;
  -- Third argument is optional; If true given, signs like dot (.) will be replaced.&lt;br /&gt;
  frame.args[3] = frame.args[3] or nil&lt;br /&gt;
  return p.convert(frame.args[1], frame.args[2], frame.args[3])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Use these function directly in modules.&lt;br /&gt;
&lt;br /&gt;
function p.convert_cordination_template(frame)&lt;br /&gt;
  return p.convert(&#039;en&#039;,p.convert_cordination(frame.args[1]))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.convert_cordination(text)&lt;br /&gt;
  text = tostring(text)&lt;br /&gt;
  text = mw.ustring.gsub(text, &amp;quot;شمالی&amp;quot;, &amp;quot;N&amp;quot;)&lt;br /&gt;
  text = mw.ustring.gsub(text, &amp;quot;شرقی&amp;quot;, &amp;quot;E&amp;quot;)&lt;br /&gt;
  text = mw.ustring.gsub(text, &amp;quot;جنوبی&amp;quot;, &amp;quot;S&amp;quot;)&lt;br /&gt;
  text = mw.ustring.gsub(text, &amp;quot;غربی&amp;quot;, &amp;quot;W&amp;quot;)&lt;br /&gt;
  return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.convert_Fa_cordination(text)&lt;br /&gt;
  text = tostring(text)&lt;br /&gt;
  text = mw.ustring.gsub(text,&amp;quot;N&amp;quot;, &amp;quot;شمالی&amp;quot;)&lt;br /&gt;
  text = mw.ustring.gsub(text,&amp;quot;E&amp;quot;, &amp;quot;شرقی&amp;quot;)&lt;br /&gt;
  text = mw.ustring.gsub(text,  &amp;quot;S&amp;quot;,&amp;quot;جنوبی&amp;quot;)&lt;br /&gt;
  text = mw.ustring.gsub(text, &amp;quot;W&amp;quot;,&amp;quot;غربی&amp;quot;)&lt;br /&gt;
  return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.convert(lang, text, signs, virgule)&lt;br /&gt;
  text = tostring(text)&lt;br /&gt;
  signs = signs or nil&lt;br /&gt;
  virgule= virgule or nil&lt;br /&gt;
&lt;br /&gt;
  if lang == &amp;quot;fa&amp;quot; or lang == &amp;quot;ur&amp;quot; or lang == &amp;quot;mzn&amp;quot; or lang == &amp;quot;glk&amp;quot; then -- برای فارسی، اردو، مازندرانی، گیلکی&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[0٠]&amp;quot;, &amp;quot;۰&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[1١]&amp;quot;, &amp;quot;۱&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[2٢]&amp;quot;, &amp;quot;۲&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[3٣]&amp;quot;, &amp;quot;۳&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[4٤]&amp;quot;, &amp;quot;۴&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[5٥]&amp;quot;, &amp;quot;۵&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[6٦]&amp;quot;, &amp;quot;۶&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[7٧]&amp;quot;, &amp;quot;۷&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[8٨]&amp;quot;, &amp;quot;۸&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[9٩]&amp;quot;, &amp;quot;۹&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[.]&amp;quot;, &amp;quot;٫&amp;quot;)&lt;br /&gt;
    if type(signs) ~= &amp;quot;nil&amp;quot; then&lt;br /&gt;
      text = mw.ustring.gsub(text, &amp;quot;%.&amp;quot;, &amp;quot;٫&amp;quot;)&lt;br /&gt;
      --تبدیل % به درصد فارسی ٪ را نگذاشتم چون ممکن است کدهای درصدی وارد شده به پودمان را خراب کند.&lt;br /&gt;
    end&lt;br /&gt;
  elseif lang == &amp;quot;ar&amp;quot; or lang == &amp;quot;ckb&amp;quot; or lang == &amp;quot;ks&amp;quot; then -- برای عربی، کردی سورانی، کشمیری&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۰0]&amp;quot;, &amp;quot;٠&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۱1]&amp;quot;, &amp;quot;١&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۲2]&amp;quot;, &amp;quot;٢&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۳3]&amp;quot;, &amp;quot;٣&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۴4]&amp;quot;, &amp;quot;٤&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۵5]&amp;quot;, &amp;quot;٥&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۶6]&amp;quot;, &amp;quot;٦&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۷7]&amp;quot;, &amp;quot;٧&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۸8]&amp;quot;, &amp;quot;٨&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۹9]&amp;quot;, &amp;quot;٩&amp;quot;)&lt;br /&gt;
  elseif lang and lang ~= &amp;quot;&amp;quot; then -- برای همهٔ زبان‌های دیگر&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۰٠]&amp;quot;, &amp;quot;0&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۱١]&amp;quot;, &amp;quot;1&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۲٢]&amp;quot;, &amp;quot;2&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۳٣]&amp;quot;, &amp;quot;3&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۴٤]&amp;quot;, &amp;quot;4&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۵٥]&amp;quot;, &amp;quot;5&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۶٦]&amp;quot;, &amp;quot;6&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۷٧]&amp;quot;, &amp;quot;7&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۸٨]&amp;quot;, &amp;quot;8&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;[۹٩]&amp;quot;, &amp;quot;9&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;٫&amp;quot;, &amp;quot;.&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;٪&amp;quot;, &amp;quot;%&amp;quot;)&lt;br /&gt;
    if type(virgule) ~= &amp;quot;nil&amp;quot; then&lt;br /&gt;
      text = mw.ustring.gsub(text, &amp;quot;،&amp;quot;, &amp;quot;,&amp;quot;)&lt;br /&gt;
      text = mw.ustring.gsub(text, &amp;quot;٪&amp;quot;, &amp;quot;%&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Ns_has_subpages&amp;diff=1975</id>
		<title>پودمان:Ns has subpages</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Ns_has_subpages&amp;diff=1975"/>
		<updated>2026-06-25T09:34:51Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements [[Template:Ns has subpages]].&lt;br /&gt;
-- While the template is fairly simple, this information is made available to&lt;br /&gt;
-- Lua directly, so using a module means that we don&#039;t have to update the&lt;br /&gt;
-- template as new namespaces are added.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p._main(ns, frame)&lt;br /&gt;
	-- Get the current namespace if we were not passed one.&lt;br /&gt;
	if not ns then&lt;br /&gt;
		ns = mw.title.getCurrentTitle().namespace&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Look up the namespace table from mw.site.namespaces. This should work&lt;br /&gt;
	-- for a majority of cases.&lt;br /&gt;
	local nsTable = mw.site.namespaces[ns]&lt;br /&gt;
&lt;br /&gt;
	-- Try using string matching to get the namespace from page names.&lt;br /&gt;
	-- Do a quick and dirty bad title check to try and make sure we do the same&lt;br /&gt;
	-- thing as {{NAMESPACE}} in most cases.&lt;br /&gt;
	if not nsTable and type(ns) == &#039;string&#039; and not ns:find(&#039;[&amp;lt;&amp;gt;|%[%]{}]&#039;) then&lt;br /&gt;
		local nsStripped = ns:gsub(&#039;^[_%s]*:&#039;, &#039;&#039;)&lt;br /&gt;
		nsStripped = nsStripped:gsub(&#039;:.*$&#039;, &#039;&#039;)&lt;br /&gt;
		nsTable = mw.site.namespaces[nsStripped]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- If we still have no match then try the {{NAMESPACE}} parser function,&lt;br /&gt;
	-- which should catch the remainder of cases. Don&#039;t use a mw.title object,&lt;br /&gt;
	-- as this would increment the expensive function count for each new page&lt;br /&gt;
	-- tested.&lt;br /&gt;
	if not nsTable then&lt;br /&gt;
		frame = frame or mw.getCurrentFrame()&lt;br /&gt;
		local nsProcessed = frame:callParserFunction(&#039;NAMESPACE&#039;, ns)&lt;br /&gt;
		nsTable = nsProcessed and mw.site.namespaces[nsProcessed]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return nsTable and nsTable.hasSubpages&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local ns = frame:getParent().args[1]&lt;br /&gt;
	if ns then&lt;br /&gt;
		ns = ns:match(&#039;^%s*(.-)%s*$&#039;) -- trim whitespace&lt;br /&gt;
		ns = tonumber(ns) or ns&lt;br /&gt;
	end&lt;br /&gt;
	local hasSubpages = p._main(ns, frame)&lt;br /&gt;
	return hasSubpages and &#039;yes&#039; or &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:No_globals&amp;diff=1972</id>
		<title>پودمان:No globals</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:No_globals&amp;diff=1972"/>
		<updated>2026-06-25T09:34:50Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local mt = getmetatable(_G) or {}&lt;br /&gt;
function mt.__index (t, k)&lt;br /&gt;
	if k ~= &#039;arg&#039; then&lt;br /&gt;
		error(&#039;Tried to read nil global &#039; .. tostring(k), 2)&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
function mt.__newindex(t, k, v)&lt;br /&gt;
	if k ~= &#039;arg&#039; then&lt;br /&gt;
		error(&#039;Tried to write global &#039; .. tostring(k), 2)&lt;br /&gt;
	end&lt;br /&gt;
	rawset(t, k, v)&lt;br /&gt;
end&lt;br /&gt;
setmetatable(_G, mt)&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Navbox_with_collapsible_groups&amp;diff=1969</id>
		<title>پودمان:Navbox with collapsible groups</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Navbox_with_collapsible_groups&amp;diff=1969"/>
		<updated>2026-06-25T09:34:50Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{Navbox with collapsible groups}}&lt;br /&gt;
local q = {}&lt;br /&gt;
local Navbox = require(&#039;Module:Navbox&#039;)&lt;br /&gt;
&lt;br /&gt;
-- helper functions&lt;br /&gt;
local function concatstrings(s)&lt;br /&gt;
	local r = table.concat(s, &#039;&#039;)&lt;br /&gt;
	if r:match(&#039;^%s*$&#039;) then r = nil end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function concatstyles(s)&lt;br /&gt;
	local r = table.concat(s, &#039;;&#039;)&lt;br /&gt;
	while r:match(&#039;;%s*;&#039;) do&lt;br /&gt;
		r = mw.ustring.gsub(r, &#039;;%s*;&#039;, &#039;;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if r:match(&#039;^%s*;%s*$&#039;) then r = nil end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function q._navbox(pargs)&lt;br /&gt;
	-- table for args passed to navbox&lt;br /&gt;
	local targs = {}&lt;br /&gt;
&lt;br /&gt;
	-- process args&lt;br /&gt;
	local passthrough = {&lt;br /&gt;
		[&#039;name&#039;]=true,[&#039;navbar&#039;]=true,[&#039;state&#039;]=true,[&#039;border&#039;]=true,&lt;br /&gt;
		[&#039;bodyclass&#039;]=true,[&#039;groupclass&#039;]=true,[&#039;listclass&#039;]=true,&lt;br /&gt;
		[&#039;style&#039;]=true,[&#039;bodystyle&#039;]=true,[&#039;basestyle&#039;]=true,&lt;br /&gt;
		[&#039;title&#039;]=true,[&#039;titleclass&#039;]=true,[&#039;titlestyle&#039;]=true,&lt;br /&gt;
		[&#039;above&#039;]=true,[&#039;aboveclass&#039;]=true,[&#039;abovestyle&#039;]=true,&lt;br /&gt;
		[&#039;below&#039;]=true,[&#039;belowclass&#039;]=true,[&#039;belowstyle&#039;]=true,&lt;br /&gt;
		[&#039;image&#039;]=true,[&#039;imageclass&#039;]=true,[&#039;imagestyle&#039;]=true,&lt;br /&gt;
		[&#039;imageleft&#039;]=true,[&#039;imageleftstyle&#039;]=true&lt;br /&gt;
	}&lt;br /&gt;
	for k,v in pairs(pargs) do&lt;br /&gt;
		if k and type(k) == &#039;string&#039; then&lt;br /&gt;
			if passthrough[k] then&lt;br /&gt;
				targs[k] = v&lt;br /&gt;
			elseif (k:match(&#039;^list[0-9][0-9]*$&#039;) &lt;br /&gt;
					or k:match(&#039;^content[0-9][0-9]*$&#039;) ) then&lt;br /&gt;
				local n = mw.ustring.gsub(k, &#039;^[a-z]*([0-9]*)$&#039;, &#039;%1&#039;)&lt;br /&gt;
				if (targs[&#039;list&#039; .. n] == nil and pargs[&#039;group&#039; .. n] == nil&lt;br /&gt;
					and pargs[&#039;sect&#039; .. n] == nil and pargs[&#039;section&#039; .. n] == nil) then&lt;br /&gt;
					targs[&#039;list&#039; .. n] = concatstrings(&lt;br /&gt;
						{pargs[&#039;list&#039; .. n] or &#039;&#039;, pargs[&#039;content&#039; .. n] or &#039;&#039;})&lt;br /&gt;
				end&lt;br /&gt;
			elseif (k:match(&#039;^group[0-9][0-9]*$&#039;) &lt;br /&gt;
					or k:match(&#039;^sect[0-9][0-9]*$&#039;) &lt;br /&gt;
					or k:match(&#039;^section[0-9][0-9]*$&#039;) ) then&lt;br /&gt;
				local n = mw.ustring.gsub(k, &#039;^[a-z]*([0-9]*)$&#039;, &#039;%1&#039;)&lt;br /&gt;
				if targs[&#039;list&#039; .. n] == nil then&lt;br /&gt;
					local titlestyle = concatstyles(&lt;br /&gt;
						{pargs[&#039;groupstyle&#039;] or &#039;&#039;,pargs[&#039;secttitlestyle&#039;] or &#039;&#039;, &lt;br /&gt;
							pargs[&#039;group&#039; .. n .. &#039;style&#039;] or &#039;&#039;, &lt;br /&gt;
							pargs[&#039;section&#039; .. n ..&#039;titlestyle&#039;] or &#039;&#039;})&lt;br /&gt;
					local liststyle = concatstyles(&lt;br /&gt;
						{pargs[&#039;liststyle&#039;] or &#039;&#039;, pargs[&#039;contentstyle&#039;] or &#039;&#039;, &lt;br /&gt;
							pargs[&#039;list&#039; .. n .. &#039;style&#039;] or &#039;&#039;, &lt;br /&gt;
							pargs[&#039;content&#039; .. n .. &#039;style&#039;] or &#039;&#039;})&lt;br /&gt;
					local title = concatstrings(&lt;br /&gt;
						{pargs[&#039;group&#039; .. n] or &#039;&#039;, &lt;br /&gt;
							pargs[&#039;sect&#039; .. n] or &#039;&#039;,&lt;br /&gt;
							pargs[&#039;section&#039; .. n] or &#039;&#039;})&lt;br /&gt;
					local list = concatstrings(&lt;br /&gt;
						{pargs[&#039;list&#039; .. n] or &#039;&#039;, &lt;br /&gt;
							pargs[&#039;content&#039; .. n] or &#039;&#039;})&lt;br /&gt;
					local state = (pargs[&#039;abbr&#039; .. n] and pargs[&#039;abbr&#039; .. n] == pargs[&#039;selected&#039;]) &lt;br /&gt;
						and &#039;uncollapsed&#039; or pargs[&#039;state&#039; .. n] or &#039;collapsed&#039;&lt;br /&gt;
					&lt;br /&gt;
					targs[&#039;list&#039; .. n] = Navbox._navbox(&lt;br /&gt;
						{&#039;child&#039;, navbar = &#039;plain&#039;, state = state,&lt;br /&gt;
						basestyle = pargs[&#039;basestyle&#039;],&lt;br /&gt;
						title = title, titlestyle = titlestyle,&lt;br /&gt;
						list1 = list, liststyle = liststyle,&lt;br /&gt;
						listclass = pargs[&#039;list&#039; .. n .. &#039;class&#039;],&lt;br /&gt;
						image = pargs[&#039;image&#039; .. n],&lt;br /&gt;
						imageleft = pargs[&#039;imageleft&#039; .. n],&lt;br /&gt;
						listpadding = pargs[&#039;listpadding&#039;]})&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- ordering of style and bodystyle&lt;br /&gt;
	targs[&#039;style&#039;] = concatstyles({targs[&#039;style&#039;] or &#039;&#039;, targs[&#039;bodystyle&#039;] or &#039;&#039;})&lt;br /&gt;
	targs[&#039;bodystyle&#039;] = nil&lt;br /&gt;
	&lt;br /&gt;
	-- child or subgroup&lt;br /&gt;
	if targs[&#039;border&#039;] == nil then targs[&#039;border&#039;] = pargs[1] end&lt;br /&gt;
&lt;br /&gt;
	return Navbox._navbox(targs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function q.navbox(frame)&lt;br /&gt;
	local pargs = require(&#039;Module:Arguments&#039;).getArgs(frame, {wrappers = {&#039;Template:Navbox with collapsible groups&#039;}})&lt;br /&gt;
&lt;br /&gt;
	-- Read the arguments in the order they&#039;ll be output in, to make references number in the right order.&lt;br /&gt;
	local _&lt;br /&gt;
	_ = pargs.title&lt;br /&gt;
	_ = pargs.above&lt;br /&gt;
	for i = 1, 20 do&lt;br /&gt;
		_ = pargs[&amp;quot;group&amp;quot; .. tostring(i)]&lt;br /&gt;
		_ = pargs[&amp;quot;list&amp;quot; .. tostring(i)]&lt;br /&gt;
	end&lt;br /&gt;
	_ = pargs.below&lt;br /&gt;
&lt;br /&gt;
	return q._navbox(pargs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return q&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Navbox/styles.css&amp;diff=1966</id>
		<title>پودمان:Navbox/styles.css</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Navbox/styles.css&amp;diff=1966"/>
		<updated>2026-06-25T09:34:50Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp|small=y}} */&lt;br /&gt;
.navbox {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	clear: both;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 1px;&lt;br /&gt;
	margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .navbox {&lt;br /&gt;
	margin-top: 0; /* No top margin for nested navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox + .navbox, /* TODO: remove first line after transclusions have updated */&lt;br /&gt;
.navbox + .navbox-styles + .navbox {&lt;br /&gt;
	margin-top: -1px; /* Single pixel border between adjacent navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-inner,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-group,&lt;br /&gt;
.navbox-title,&lt;br /&gt;
.navbox-abovebelow {&lt;br /&gt;
	padding: 0.25em 1em;&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-group {&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-list {&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	border-color: #f8f9fa; /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-list-with-group {&lt;br /&gt;
	text-align: right;&lt;br /&gt;
	border-left-width: 2px;&lt;br /&gt;
	border-right-style: solid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* cell spacing for navbox cells */&lt;br /&gt;
/* Borders above 2nd, 3rd, etc. rows */&lt;br /&gt;
/* TODO: figure out how to replace tr as structure;&lt;br /&gt;
 * with div structure it should be just a matter of first-child */&lt;br /&gt;
tr + tr &amp;gt; .navbox-abovebelow,&lt;br /&gt;
tr + tr &amp;gt; .navbox-group,&lt;br /&gt;
tr + tr &amp;gt; .navbox-image,&lt;br /&gt;
tr + tr &amp;gt; .navbox-list {&lt;br /&gt;
	border-top: 2px solid #f8f9fa; /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title {&lt;br /&gt;
	background-color: #b3ccff; /* Level 1 color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-abovebelow,&lt;br /&gt;
.navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-title {&lt;br /&gt;
	background-color: #dbe7ff; /* Level 2 color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-subgroup .navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
	background-color: #e5edff; /* Level 3 color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-even {&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* TODO: figure out how to remove reliance on td as structure */&lt;br /&gt;
.navbox .hlist td dl,&lt;br /&gt;
.navbox .hlist td ol,&lt;br /&gt;
.navbox .hlist td ul,&lt;br /&gt;
.navbox td.hlist dl,&lt;br /&gt;
.navbox td.hlist ol,&lt;br /&gt;
.navbox td.hlist ul {&lt;br /&gt;
	padding: 0.125em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	float: right;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	margin-left: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* RTL fix for navbox-list bullet lists; See [[Special:Permalink/24864265#خطای ظاهری]]. */&lt;br /&gt;
.navbox-list li {&lt;br /&gt;
	unicode-bidi: isolate;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Navbox/configuration&amp;diff=1963</id>
		<title>پودمان:Navbox/configuration</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Navbox/configuration&amp;diff=1963"/>
		<updated>2026-06-25T09:34:49Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	aria_label = &#039;Navbox&#039;,&lt;br /&gt;
	nowrap_item = &#039;%s&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
	templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
		name = &#039;templatestyles&#039;, args = { src = &#039;Module:Navbox/styles.css&#039; }&lt;br /&gt;
	},&lt;br /&gt;
	hlist_templatestyles = &#039;Hlist/styles.css&#039;,&lt;br /&gt;
	plainlist_templatestyles = &#039;فهرست ساده/styles.css&#039;,&lt;br /&gt;
	-- do not localize marker table&lt;br /&gt;
	marker = {&lt;br /&gt;
		oddeven = &#039;\127_ODDEVEN_\127&#039;,&lt;br /&gt;
		restart = &#039;\127_ODDEVEN0_\127&#039;,&lt;br /&gt;
		regex = &#039;\127_ODDEVEN(%d?)_\127&#039;&lt;br /&gt;
	},&lt;br /&gt;
	category = {&lt;br /&gt;
		orphan = &#039;[[رده:جعبه‌های ناوبری یتیم]]&#039;,&lt;br /&gt;
		horizontal_lists = &#039;جعبه‌های ناوبری بدون فهرست افقی&#039;,&lt;br /&gt;
		background_colors = &#039;جعبه‌های ناوبری با استفاده از رنگ‌های پس‌زمینه&#039;,&lt;br /&gt;
		illegible = &#039;جعبه‌های ناوبری بالقوه ناخوانا&#039;,&lt;br /&gt;
		borders = &#039;جعبه‌های ناوبری با استفاده از حاشیه&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	keyword = {&lt;br /&gt;
		border_subgroup = &#039;subgroup&#039;,&lt;br /&gt;
		border_child = &#039;child&#039;,&lt;br /&gt;
		border_none = &#039;none&#039;,&lt;br /&gt;
		evenodd_swap = &#039;swap&#039;,&lt;br /&gt;
		navbar_off = &#039;off&#039;,&lt;br /&gt;
		navbar_plain = &#039;plain&#039;,&lt;br /&gt;
		nocat_false = &#039;false&#039;,&lt;br /&gt;
		nowrapitems_yes = &#039;yes&#039;,&lt;br /&gt;
		orphan_yes = &#039;yes&#039;,&lt;br /&gt;
		state_collapsed = &#039;collapsed&#039;,&lt;br /&gt;
		state_off = &#039;off&#039;,&lt;br /&gt;
		state_plain = &#039;plain&#039;,&lt;br /&gt;
		subpage_doc = &#039;توضیحات&#039;,&lt;br /&gt;
		subpage_sandbox = &#039;تمرین&#039;,&lt;br /&gt;
		subpage_testcases = &#039;آزمایشی&#039;,&lt;br /&gt;
		tracking_no = &#039;no&#039;&lt;br /&gt;
	},&lt;br /&gt;
	class = {&lt;br /&gt;
		autocollapse = &#039;autocollapse&#039;,&lt;br /&gt;
		collapsible = &#039;mw-collapsible&#039;,&lt;br /&gt;
		collapsed = &#039;mw-collapsed&#039;,&lt;br /&gt;
		-- Warning&lt;br /&gt;
		navbox = &#039;navbox&#039;, -- WMF currently hides &#039;navbox&#039; from mobile,&lt;br /&gt;
		-- so you probably shouldn&#039;t change the navbox class.&lt;br /&gt;
		navbox_abovebelow = &#039;navbox-abovebelow&#039;,&lt;br /&gt;
		navbox_group = &#039;navbox-group&#039;,&lt;br /&gt;
		navbox_image = &#039;navbox-image&#039;,&lt;br /&gt;
		navbox_inner = &#039;navbox-inner&#039;,&lt;br /&gt;
		navbox_list = &#039;navbox-list&#039;,&lt;br /&gt;
		navbox_list_with_group = &#039;navbox-list-with-group&#039;,&lt;br /&gt;
		navbox_part = &#039;navbox-&#039;, -- do not l10n&lt;br /&gt;
		navbox_styles = &#039;navbox-styles&#039;,&lt;br /&gt;
		navbox_subgroup = &#039;navbox-subgroup&#039;,&lt;br /&gt;
		navbox_title = &#039;navbox-title&#039;, -- l10n only if you change pattern.navbox_title below&lt;br /&gt;
		navbox_odd_part = &#039;odd&#039;, -- do not l10n&lt;br /&gt;
		navbox_even_part = &#039;even&#039;, -- do not l10n&lt;br /&gt;
		nomobile = &#039;nomobile&#039;,&lt;br /&gt;
		nowraplinks = &#039;nowraplinks&#039;,&lt;br /&gt;
		noviewer = &#039;noviewer&#039; -- used to remove images from MediaViewer&lt;br /&gt;
	},&lt;br /&gt;
	pattern = {&lt;br /&gt;
		listnum = &#039;^list(%d+)$&#039;,&lt;br /&gt;
		class = &#039;class&#039;,&lt;br /&gt;
		sandbox = &#039;/تمرین$&#039;,&lt;br /&gt;
		navbox = &#039;الگو:Navbox&#039;,&lt;br /&gt;
		nowrap = &#039;^&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
		style = &#039;style$&#039;,&lt;br /&gt;
		navbox_title = &#039;&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;&#039;,&lt;br /&gt;
		hlist = &#039;hlist&#039;,&lt;br /&gt;
		plainlist = &#039;plainlist&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	arg = {&lt;br /&gt;
		above = &#039;above&#039;,&lt;br /&gt;
		aboveclass = &#039;aboveclass&#039;,&lt;br /&gt;
		abovestyle = &#039;abovestyle&#039;,&lt;br /&gt;
		basestyle = &#039;basestyle&#039;,&lt;br /&gt;
		bodyclass = &#039;bodyclass&#039;,&lt;br /&gt;
		bodystyle = &#039;bodystyle&#039;,&lt;br /&gt;
		border = &#039;border&#039;,&lt;br /&gt;
		below = &#039;below&#039;,&lt;br /&gt;
		belowclass = &#039;belowclass&#039;,&lt;br /&gt;
		belowstyle = &#039;belowstyle&#039;,&lt;br /&gt;
		evenodd = &#039;evenodd&#039;,&lt;br /&gt;
		evenstyle = &#039;evenstyle&#039;,&lt;br /&gt;
		group1 = &#039;group1&#039;,&lt;br /&gt;
		group2 = &#039;group2&#039;,&lt;br /&gt;
		group_and_num = &#039;group%d&#039;,&lt;br /&gt;
		groupstyle_and_num = &#039;group%dstyle&#039;,&lt;br /&gt;
		groupclass = &#039;groupclass&#039;,&lt;br /&gt;
		groupstyle = &#039;groupstyle&#039;,&lt;br /&gt;
		groupwidth = &#039;groupwidth&#039;,&lt;br /&gt;
		innerstyle = &#039;innerstyle&#039;,&lt;br /&gt;
		image = &#039;image&#039;,&lt;br /&gt;
		imageclass = &#039;imageclass&#039;,&lt;br /&gt;
		imageleft = &#039;imageleft&#039;,&lt;br /&gt;
		imageleftstyle = &#039;imageleftstyle&#039;,&lt;br /&gt;
		imagesetyle = &#039;imagestyle&#039;,&lt;br /&gt;
		list_and_num = &#039;list%d&#039;,&lt;br /&gt;
		listclass_and_num = &#039;list%dclass&#039;,&lt;br /&gt;
		liststyle_and_num = &#039;list%dstyle&#039;,&lt;br /&gt;
		list1padding = &#039;list1padding&#039;,&lt;br /&gt;
		listclass = &#039;listclass&#039;,&lt;br /&gt;
		listpadding = &#039;listpadding&#039;,&lt;br /&gt;
		liststyle = &#039;liststyle&#039;,&lt;br /&gt;
		name = &#039;name&#039;,&lt;br /&gt;
		navbar = &#039;navbar&#039;,&lt;br /&gt;
		navboxclass = &#039;navboxclass&#039;,&lt;br /&gt;
		nocat = &#039;nocat&#039;,&lt;br /&gt;
		nowrapitems = &#039;nowrapitems&#039;,&lt;br /&gt;
		oddstyle = &#039;oddstyle&#039;,&lt;br /&gt;
		orphan = &#039;orphan&#039;,&lt;br /&gt;
		state = &#039;state&#039;,&lt;br /&gt;
		style = &#039;style&#039;,&lt;br /&gt;
		templatestyles = &#039;templatestyles&#039;,&lt;br /&gt;
		child_templatestyles = &#039;child templatestyles&#039;,&lt;br /&gt;
		title = &#039;title&#039;,&lt;br /&gt;
		titleclass = &#039;titleclass&#039;,&lt;br /&gt;
		titlestyle = &#039;titlestyle&#039;,&lt;br /&gt;
		tracking = &#039;tracking&#039;&lt;br /&gt;
	},&lt;br /&gt;
	-- names of navbar arguments&lt;br /&gt;
	navbar = {&lt;br /&gt;
		name = 1,&lt;br /&gt;
		fontstyle = &#039;fontstyle&#039;,&lt;br /&gt;
		mini = &#039;mini&#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Navbox&amp;diff=1960</id>
		<title>پودمان:Navbox</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Navbox&amp;diff=1960"/>
		<updated>2026-06-25T09:34:49Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&#039;strict&#039;)&lt;br /&gt;
local p = {}&lt;br /&gt;
local navbar = require(&#039;Module:Navbar&#039;)._navbar&lt;br /&gt;
local cfg = mw.loadData(&#039;Module:Navbox/configuration&#039;)&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
local args&lt;br /&gt;
local format = string.format&lt;br /&gt;
&lt;br /&gt;
local function striped(wikitext, border)&lt;br /&gt;
	-- Return wikitext with markers replaced for odd/even striping.&lt;br /&gt;
	-- Child (subgroup) navboxes are flagged with a category that is removed&lt;br /&gt;
	-- by parent navboxes. The result is that the category shows all pages&lt;br /&gt;
	-- where a child navbox is not contained in a parent navbox.&lt;br /&gt;
	local orphanCat = cfg.category.orphan&lt;br /&gt;
	if border == cfg.keyword.border_subgroup and args[cfg.arg.orphan] ~= cfg.keyword.orphan_yes then&lt;br /&gt;
		-- No change; striping occurs in outermost navbox.&lt;br /&gt;
		return wikitext .. orphanCat&lt;br /&gt;
	end&lt;br /&gt;
	local first, second = cfg.class.navbox_odd_part, cfg.class.navbox_even_part&lt;br /&gt;
	if args[cfg.arg.evenodd] then&lt;br /&gt;
		if args[cfg.arg.evenodd] == cfg.keyword.evenodd_swap then&lt;br /&gt;
			first, second = second, first&lt;br /&gt;
		else&lt;br /&gt;
			first = args[cfg.arg.evenodd]&lt;br /&gt;
			second = first&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local changer&lt;br /&gt;
	if first == second then&lt;br /&gt;
		changer = first&lt;br /&gt;
	else&lt;br /&gt;
		local index = 0&lt;br /&gt;
		changer = function (code)&lt;br /&gt;
			if code == &#039;0&#039; then&lt;br /&gt;
				-- Current occurrence is for a group before a nested table.&lt;br /&gt;
				-- Set it to first as a valid although pointless class.&lt;br /&gt;
				-- The next occurrence will be the first row after a title&lt;br /&gt;
				-- in a subgroup and will also be first.&lt;br /&gt;
				index = 0&lt;br /&gt;
				return first&lt;br /&gt;
			end&lt;br /&gt;
			index = index + 1&lt;br /&gt;
			return index % 2 == 1 and first or second&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local regex = orphanCat:gsub(&#039;([%[%]])&#039;, &#039;%%%1&#039;)&lt;br /&gt;
	return (wikitext:gsub(regex, &#039;&#039;):gsub(cfg.marker.regex, changer)) -- () omits gsub count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function processItem(item, nowrapitems)&lt;br /&gt;
	if item:sub(1, 2) == &#039;{|&#039; then&lt;br /&gt;
		-- Applying nowrap to lines in a table does not make sense.&lt;br /&gt;
		-- Add newlines to compensate for trim of x in |parm=x in a template.&lt;br /&gt;
		return &#039;\n&#039; .. item ..&#039;\n&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if nowrapitems == cfg.keyword.nowrapitems_yes then&lt;br /&gt;
		local lines = {}&lt;br /&gt;
		for line in (item .. &#039;\n&#039;):gmatch(&#039;([^\n]*)\n&#039;) do&lt;br /&gt;
			local prefix, content = line:match(&#039;^([*:;#]+)%s*(.*)&#039;)&lt;br /&gt;
			if prefix and not content:match(cfg.pattern.nowrap) then&lt;br /&gt;
				line = format(cfg.nowrap_item, prefix, content)&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(lines, line)&lt;br /&gt;
		end&lt;br /&gt;
		item = table.concat(lines, &#039;\n&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if item:match(&#039;^[*:;#]&#039;) then&lt;br /&gt;
		return &#039;\n&#039; .. item ..&#039;\n&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return item&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function has_navbar()&lt;br /&gt;
	return args[cfg.arg.navbar] ~= cfg.keyword.navbar_off&lt;br /&gt;
		and args[cfg.arg.navbar] ~= cfg.keyword.navbar_plain&lt;br /&gt;
		and (&lt;br /&gt;
			args[cfg.arg.name]&lt;br /&gt;
			or mw.getCurrentFrame():getParent():getTitle():gsub(cfg.pattern.sandbox, &#039;&#039;)&lt;br /&gt;
				~= cfg.pattern.navbox&lt;br /&gt;
		)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- extract text color from css, which is the only permitted inline CSS for the navbar&lt;br /&gt;
local function extract_color(css_str)&lt;br /&gt;
	-- return nil because navbar takes its argument into mw.html which handles&lt;br /&gt;
	-- nil gracefully, removing the associated style attribute&lt;br /&gt;
	return mw.ustring.match(&#039;;&#039; .. css_str .. &#039;;&#039;, &#039;.*;%s*([Cc][Oo][Ll][Oo][Rr]%s*:%s*.-)%s*;&#039;) or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar(titleCell)&lt;br /&gt;
	if has_navbar() then&lt;br /&gt;
		titleCell:wikitext(navbar{&lt;br /&gt;
			[cfg.navbar.name] = args[cfg.arg.name],&lt;br /&gt;
			[cfg.navbar.mini] = 1,&lt;br /&gt;
			[cfg.navbar.fontstyle] = extract_color(&lt;br /&gt;
				(args[cfg.arg.basestyle] or &#039;&#039;) .. &#039;;&#039; .. (args[cfg.arg.titlestyle] or &#039;&#039;)&lt;br /&gt;
			)&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTitleRow(tbl)&lt;br /&gt;
	if not args[cfg.arg.title] then return end&lt;br /&gt;
&lt;br /&gt;
	local titleRow = tbl:tag(&#039;tr&#039;)&lt;br /&gt;
&lt;br /&gt;
	local titleCell = titleRow:tag(&#039;th&#039;):attr(&#039;scope&#039;, &#039;col&#039;)&lt;br /&gt;
&lt;br /&gt;
	local titleColspan = 2&lt;br /&gt;
	if args[cfg.arg.imageleft] then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args[cfg.arg.image] then titleColspan = titleColspan + 1 end&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
		:cssText(args[cfg.arg.titlestyle])&lt;br /&gt;
		:addClass(cfg.class.navbox_title)&lt;br /&gt;
		:attr(&#039;colspan&#039;, titleColspan)&lt;br /&gt;
&lt;br /&gt;
	renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			-- id for aria-labelledby attribute&lt;br /&gt;
			:attr(&#039;id&#039;, mw.uri.anchorEncode(args[cfg.arg.title]))&lt;br /&gt;
			:addClass(args[cfg.arg.titleclass])&lt;br /&gt;
			:css(&#039;font-size&#039;, &#039;114%&#039;)&lt;br /&gt;
			:css(&#039;margin&#039;, &#039;0 4em&#039;)&lt;br /&gt;
			:wikitext(processItem(args[cfg.arg.title]))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getAboveBelowColspan()&lt;br /&gt;
	local ret = 2&lt;br /&gt;
	if args[cfg.arg.imageleft] then ret = ret + 1 end&lt;br /&gt;
	if args[cfg.arg.image] then ret = ret + 1 end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderAboveRow(tbl)&lt;br /&gt;
	if not args[cfg.arg.above] then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag(&#039;tr&#039;)&lt;br /&gt;
		:tag(&#039;td&#039;)&lt;br /&gt;
			:addClass(cfg.class.navbox_abovebelow)&lt;br /&gt;
			:addClass(args[cfg.arg.aboveclass])&lt;br /&gt;
			:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
			:cssText(args[cfg.arg.abovestyle])&lt;br /&gt;
			:attr(&#039;colspan&#039;, getAboveBelowColspan())&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				-- id for aria-labelledby attribute, if no title&lt;br /&gt;
				:attr(&#039;id&#039;, (not args[cfg.arg.title]) and mw.uri.anchorEncode(args[cfg.arg.above]) or nil)&lt;br /&gt;
				:wikitext(processItem(args[cfg.arg.above], args[cfg.arg.nowrapitems]))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow(tbl)&lt;br /&gt;
	if not args[cfg.arg.below] then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag(&#039;tr&#039;)&lt;br /&gt;
		:tag(&#039;td&#039;)&lt;br /&gt;
			:addClass(cfg.class.navbox_abovebelow)&lt;br /&gt;
			:addClass(args[cfg.arg.belowclass])&lt;br /&gt;
			:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
			:cssText(args[cfg.arg.belowstyle])&lt;br /&gt;
			:attr(&#039;colspan&#039;, getAboveBelowColspan())&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				:wikitext(processItem(args[cfg.arg.below], args[cfg.arg.nowrapitems]))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderListRow(tbl, index, listnum, listnums_size)&lt;br /&gt;
	local row = tbl:tag(&#039;tr&#039;)&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args[cfg.arg.imageleft] then&lt;br /&gt;
		row&lt;br /&gt;
			:tag(&#039;td&#039;)&lt;br /&gt;
				:addClass(cfg.class.noviewer)&lt;br /&gt;
				:addClass(cfg.class.navbox_image)&lt;br /&gt;
				:addClass(args[cfg.arg.imageclass])&lt;br /&gt;
				:css(&#039;width&#039;, &#039;1px&#039;)               -- Minimize width&lt;br /&gt;
				:css(&#039;padding&#039;, &#039;0 2px 0 0&#039;)&lt;br /&gt;
				:cssText(args[cfg.arg.imageleftstyle])&lt;br /&gt;
				:attr(&#039;rowspan&#039;, listnums_size)&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:wikitext(processItem(args[cfg.arg.imageleft]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local group_and_num = format(cfg.arg.group_and_num, listnum)&lt;br /&gt;
	local groupstyle_and_num = format(cfg.arg.groupstyle_and_num, listnum)&lt;br /&gt;
	if args[group_and_num] then&lt;br /&gt;
		local groupCell = row:tag(&#039;th&#039;)&lt;br /&gt;
&lt;br /&gt;
		-- id for aria-labelledby attribute, if lone group with no title or above&lt;br /&gt;
		if listnum == 1 and not (args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group2]) then&lt;br /&gt;
			groupCell&lt;br /&gt;
				:attr(&#039;id&#039;, mw.uri.anchorEncode(args[cfg.arg.group1]))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:attr(&#039;scope&#039;, &#039;row&#039;)&lt;br /&gt;
			:addClass(cfg.class.navbox_group)&lt;br /&gt;
			:addClass(args[cfg.arg.groupclass])&lt;br /&gt;
			:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
			-- If groupwidth not specified, minimize width&lt;br /&gt;
			:css(&#039;width&#039;, args[cfg.arg.groupwidth] or &#039;1%&#039;)&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:cssText(args[cfg.arg.groupstyle])&lt;br /&gt;
			:cssText(args[groupstyle_and_num])&lt;br /&gt;
			:wikitext(args[group_and_num])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listCell = row:tag(&#039;td&#039;)&lt;br /&gt;
&lt;br /&gt;
	if args[group_and_num] then&lt;br /&gt;
		listCell&lt;br /&gt;
			:addClass(cfg.class.navbox_list_with_group)&lt;br /&gt;
	else&lt;br /&gt;
		listCell:attr(&#039;colspan&#039;, 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not args[cfg.arg.groupwidth] then&lt;br /&gt;
		listCell:css(&#039;width&#039;, &#039;100%&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local rowstyle  -- usually nil so cssText(rowstyle) usually adds nothing&lt;br /&gt;
	if index % 2 == 1 then&lt;br /&gt;
		rowstyle = args[cfg.arg.oddstyle]&lt;br /&gt;
	else&lt;br /&gt;
		rowstyle = args[cfg.arg.evenstyle]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local list_and_num = format(cfg.arg.list_and_num, listnum)&lt;br /&gt;
	local listText = args[list_and_num]&lt;br /&gt;
	local oddEven = cfg.marker.oddeven&lt;br /&gt;
	if listText:sub(1, 12) == &#039;&amp;lt;/div&amp;gt;&amp;lt;table&#039; then&lt;br /&gt;
		-- Assume list text is for a subgroup navbox so no automatic striping for this row.&lt;br /&gt;
		oddEven = listText:find(cfg.pattern.navbox_title) and cfg.marker.restart or cfg.class.navbox_odd_part&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local liststyle_and_num = format(cfg.arg.liststyle_and_num, listnum)&lt;br /&gt;
	local listclass_and_num = format(cfg.arg.listclass_and_num, listnum)&lt;br /&gt;
	listCell&lt;br /&gt;
		:css(&#039;padding&#039;, &#039;0&#039;)&lt;br /&gt;
		:cssText(args[cfg.arg.liststyle])&lt;br /&gt;
		:cssText(rowstyle)&lt;br /&gt;
		:cssText(args[liststyle_and_num])&lt;br /&gt;
		:addClass(cfg.class.navbox_list)&lt;br /&gt;
		:addClass(cfg.class.navbox_part .. oddEven)&lt;br /&gt;
		:addClass(args[cfg.arg.listclass])&lt;br /&gt;
		:addClass(args[listclass_and_num])&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:css(&#039;padding&#039;,&lt;br /&gt;
				(index == 1 and args[cfg.arg.list1padding]) or args[cfg.arg.listpadding] or &#039;0 0.25em&#039;&lt;br /&gt;
			)&lt;br /&gt;
			:wikitext(processItem(listText, args[cfg.arg.nowrapitems]))&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args[cfg.arg.image] then&lt;br /&gt;
		row&lt;br /&gt;
			:tag(&#039;td&#039;)&lt;br /&gt;
				:addClass(cfg.class.noviewer)&lt;br /&gt;
				:addClass(cfg.class.navbox_image)&lt;br /&gt;
				:addClass(args[cfg.arg.imageclass])&lt;br /&gt;
				:css(&#039;width&#039;, &#039;1px&#039;)               -- Minimize width&lt;br /&gt;
				:css(&#039;padding&#039;, &#039;0 0 0 2px&#039;)&lt;br /&gt;
				:cssText(args[cfg.arg.imagestyle])&lt;br /&gt;
				:attr(&#039;rowspan&#039;, listnums_size)&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:wikitext(processItem(args[cfg.arg.image]))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function has_list_class(htmlclass)&lt;br /&gt;
	local patterns = {&lt;br /&gt;
		&#039;^&#039; .. htmlclass .. &#039;$&#039;,&lt;br /&gt;
		&#039;%s&#039; .. htmlclass .. &#039;$&#039;,&lt;br /&gt;
		&#039;^&#039; .. htmlclass .. &#039;%s&#039;,&lt;br /&gt;
		&#039;%s&#039; .. htmlclass .. &#039;%s&#039;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	for arg, _ in pairs(args) do&lt;br /&gt;
		if type(arg) == &#039;string&#039; and mw.ustring.find(arg, cfg.pattern.class) then&lt;br /&gt;
			for _, pattern in ipairs(patterns) do&lt;br /&gt;
				if mw.ustring.find(args[arg] or &#039;&#039;, pattern) then&lt;br /&gt;
					return true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- there are a lot of list classes in the wild, so we add their TemplateStyles&lt;br /&gt;
local function add_list_styles()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local function add_list_templatestyles(htmlclass, templatestyles)&lt;br /&gt;
		if has_list_class(htmlclass) then&lt;br /&gt;
			return frame:extensionTag{&lt;br /&gt;
				name = &#039;templatestyles&#039;, args = { src = templatestyles }&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
			return &#039;&#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local hlist_styles = add_list_templatestyles(&#039;hlist&#039;, cfg.hlist_templatestyles)&lt;br /&gt;
	local plainlist_styles = add_list_templatestyles(&#039;plainlist&#039;, cfg.plainlist_templatestyles)&lt;br /&gt;
	&lt;br /&gt;
	-- a second workaround for [[phab:T303378]]&lt;br /&gt;
	-- when that issue is fixed, we can actually use has_navbar not to emit the&lt;br /&gt;
	-- tag here if we want&lt;br /&gt;
	if has_navbar() and hlist_styles == &#039;&#039; then&lt;br /&gt;
		hlist_styles = frame:extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = cfg.hlist_templatestyles }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- hlist -&amp;gt; plainlist is best-effort to preserve old Common.css ordering.&lt;br /&gt;
	-- this ordering is not a guarantee because most navboxes will emit only&lt;br /&gt;
	-- one of these classes [hlist_note]&lt;br /&gt;
	return hlist_styles .. plainlist_styles&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function needsHorizontalLists(border)&lt;br /&gt;
	if border == cfg.keyword.border_subgroup or args[cfg.arg.tracking] == cfg.keyword.tracking_no then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	return not has_list_class(cfg.pattern.hlist) and not has_list_class(cfg.pattern.plainlist)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBackgroundColors()&lt;br /&gt;
	for _, key in ipairs({cfg.arg.titlestyle, cfg.arg.groupstyle,&lt;br /&gt;
		cfg.arg.basestyle, cfg.arg.abovestyle, cfg.arg.belowstyle}) do&lt;br /&gt;
		if tostring(args[key]):find(&#039;background&#039;, 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBorders()&lt;br /&gt;
	for _, key in ipairs({cfg.arg.groupstyle, cfg.arg.basestyle,&lt;br /&gt;
		cfg.arg.abovestyle, cfg.arg.belowstyle}) do&lt;br /&gt;
		if tostring(args[key]):find(&#039;border&#039;, 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isIllegible()&lt;br /&gt;
	local styleratio = require(&#039;Module:Color contrast&#039;)._styleratio&lt;br /&gt;
	for key, style in pairs(args) do&lt;br /&gt;
		if tostring(key):match(cfg.pattern.style) then&lt;br /&gt;
			if styleratio{mw.text.unstripNoWiki(style)} &amp;lt; 4.5 then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTrackingCategories(border)&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	if needsHorizontalLists(border) then table.insert(cats, cfg.category.horizontal_lists) end&lt;br /&gt;
	if hasBackgroundColors() then table.insert(cats, cfg.category.background_colors) end&lt;br /&gt;
	if isIllegible() then table.insert(cats, cfg.category.illegible) end&lt;br /&gt;
	if hasBorders() then table.insert(cats, cfg.category.borders) end&lt;br /&gt;
	return cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories(builder, border)&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	if title.namespace ~= 10 then return end -- not in template space&lt;br /&gt;
	local subpage = title.subpageText&lt;br /&gt;
	if subpage == cfg.keyword.subpage_doc or subpage == cfg.keyword.subpage_sandbox&lt;br /&gt;
		or subpage == cfg.keyword.subpage_testcases then return end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(getTrackingCategories(border)) do&lt;br /&gt;
		builder:wikitext(&#039;[[رده:&#039; .. cat .. &#039;]]&#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderMainTable(border, listnums)&lt;br /&gt;
	local tbl = mw.html.create(&#039;table&#039;)&lt;br /&gt;
		:addClass(cfg.class.nowraplinks)&lt;br /&gt;
		:addClass(args[cfg.arg.bodyclass])&lt;br /&gt;
&lt;br /&gt;
	local state = args[cfg.arg.state]&lt;br /&gt;
	if args[cfg.arg.title] and state ~= cfg.keyword.state_plain and state ~= cfg.keyword.state_off then&lt;br /&gt;
		if state == cfg.keyword.state_collapsed then&lt;br /&gt;
			state = cfg.class.collapsed&lt;br /&gt;
		end&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass(cfg.class.collapsible)&lt;br /&gt;
			:addClass(state or cfg.class.autocollapse)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tbl:css(&#039;border-spacing&#039;, 0)&lt;br /&gt;
	if border == cfg.keyword.border_subgroup or border == cfg.keyword.border_none then&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass(cfg.class.navbox_subgroup)&lt;br /&gt;
			:cssText(args[cfg.arg.bodystyle])&lt;br /&gt;
			:cssText(args[cfg.arg.style])&lt;br /&gt;
	else  -- regular navbox - bodystyle and style will be applied to the wrapper table&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass(cfg.class.navbox_inner)&lt;br /&gt;
			:css(&#039;background&#039;, &#039;transparent&#039;)&lt;br /&gt;
			:css(&#039;color&#039;, &#039;inherit&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	tbl:cssText(args[cfg.arg.innerstyle])&lt;br /&gt;
&lt;br /&gt;
	renderTitleRow(tbl)&lt;br /&gt;
	renderAboveRow(tbl)&lt;br /&gt;
	local listnums_size = #listnums&lt;br /&gt;
	for i, listnum in ipairs(listnums) do&lt;br /&gt;
		renderListRow(tbl, i, listnum, listnums_size)&lt;br /&gt;
	end&lt;br /&gt;
	renderBelowRow(tbl)&lt;br /&gt;
&lt;br /&gt;
	return tbl&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function add_navbox_styles(hiding_templatestyles)&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- This is a lambda so that it doesn&#039;t need the frame as a parameter&lt;br /&gt;
	local function add_user_styles(templatestyles)&lt;br /&gt;
		if templatestyles and templatestyles ~= &#039;&#039; then&lt;br /&gt;
			return frame:extensionTag{&lt;br /&gt;
				name = &#039;templatestyles&#039;, args = { src = templatestyles }&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- get templatestyles. load base from config so that Lua only needs to do&lt;br /&gt;
	-- the work once of parser tag expansion&lt;br /&gt;
	local base_templatestyles = cfg.templatestyles&lt;br /&gt;
	local templatestyles = add_user_styles(args[cfg.arg.templatestyles])&lt;br /&gt;
	local child_templatestyles = add_user_styles(args[cfg.arg.child_templatestyles])&lt;br /&gt;
&lt;br /&gt;
	-- The &#039;navbox-styles&#039; div exists to wrap the styles to work around T200206&lt;br /&gt;
	-- more elegantly. Instead of combinatorial rules, this ends up being linear&lt;br /&gt;
	-- number of CSS rules.&lt;br /&gt;
	return mw.html.create(&#039;div&#039;)&lt;br /&gt;
		:addClass(cfg.class.navbox_styles)&lt;br /&gt;
		:wikitext(&lt;br /&gt;
			add_list_styles() .. -- see [hlist_note] applied to &#039;before base_templatestyles&#039;&lt;br /&gt;
			base_templatestyles ..&lt;br /&gt;
			templatestyles ..&lt;br /&gt;
			child_templatestyles ..&lt;br /&gt;
			table.concat(hiding_templatestyles)&lt;br /&gt;
		)&lt;br /&gt;
		:done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- work around [[phab:T303378]]&lt;br /&gt;
-- for each arg: find all the templatestyles strip markers, insert them into a&lt;br /&gt;
-- table. then remove all templatestyles markers from the arg&lt;br /&gt;
local function move_hiding_templatestyles(args)&lt;br /&gt;
	local gfind = string.gfind&lt;br /&gt;
	local gsub = string.gsub&lt;br /&gt;
	local templatestyles_markers = {}&lt;br /&gt;
	local strip_marker_pattern = &#039;(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)&#039;&lt;br /&gt;
	for k, arg in pairs(args) do&lt;br /&gt;
		for marker in gfind(arg, strip_marker_pattern) do&lt;br /&gt;
			table.insert(templatestyles_markers, marker)&lt;br /&gt;
		end&lt;br /&gt;
		args[k] = gsub(arg, strip_marker_pattern, &#039;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return templatestyles_markers&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._navbox(navboxArgs)&lt;br /&gt;
	args = navboxArgs&lt;br /&gt;
	local hiding_templatestyles = move_hiding_templatestyles(args)&lt;br /&gt;
	local listnums = {}&lt;br /&gt;
&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;string&#039; then&lt;br /&gt;
			local listnum = k:match(cfg.pattern.listnum)&lt;br /&gt;
			if listnum then table.insert(listnums, tonumber(listnum)) end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
	local border = mw.text.trim(args[cfg.arg.border] or args[1] or &#039;&#039;)&lt;br /&gt;
	if border == cfg.keyword.border_child then&lt;br /&gt;
		border = cfg.keyword.border_subgroup&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- render the main body of the navbox&lt;br /&gt;
	local tbl = renderMainTable(border, listnums)&lt;br /&gt;
&lt;br /&gt;
	local res = mw.html.create()&lt;br /&gt;
	-- render the appropriate wrapper for the navbox, based on the border param&lt;br /&gt;
&lt;br /&gt;
	if border == cfg.keyword.border_none then&lt;br /&gt;
		res:node(add_navbox_styles(hiding_templatestyles))&lt;br /&gt;
		local nav = res:tag(&#039;div&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;navigation&#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args[cfg.arg.title] or args[cfg.arg.above] or (args[cfg.arg.group1]&lt;br /&gt;
			and not args[cfg.arg.group2]) then&lt;br /&gt;
			nav:attr(&lt;br /&gt;
				&#039;aria-labelledby&#039;,&lt;br /&gt;
				mw.uri.anchorEncode(&lt;br /&gt;
					args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]&lt;br /&gt;
				)&lt;br /&gt;
			)&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr(&#039;aria-label&#039;, cfg.aria_label)&lt;br /&gt;
		end&lt;br /&gt;
	elseif border == cfg.keyword.border_subgroup then&lt;br /&gt;
		-- We assume that this navbox is being rendered in a list cell of a&lt;br /&gt;
		-- parent navbox, and is therefore inside a div with padding:0em 0.25em.&lt;br /&gt;
		-- We start with a &amp;lt;/div&amp;gt; to avoid the padding being applied, and at the&lt;br /&gt;
		-- end add a &amp;lt;div&amp;gt; to balance out the parent&#039;s &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext(&#039;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext(&#039;&amp;lt;div&amp;gt;&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		res:node(add_navbox_styles(hiding_templatestyles))&lt;br /&gt;
		local nav = res:tag(&#039;div&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;navigation&#039;)&lt;br /&gt;
			:addClass(cfg.class.navbox)&lt;br /&gt;
			:addClass(args[cfg.arg.navboxclass])&lt;br /&gt;
			:cssText(args[cfg.arg.bodystyle])&lt;br /&gt;
			:cssText(args[cfg.arg.style])&lt;br /&gt;
			:css(&#039;padding&#039;, &#039;3px&#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args[cfg.arg.title] or args[cfg.arg.above]&lt;br /&gt;
			or (args[cfg.arg.group1] and not args[cfg.arg.group2]) then&lt;br /&gt;
			nav:attr(&lt;br /&gt;
				&#039;aria-labelledby&#039;,&lt;br /&gt;
				mw.uri.anchorEncode(args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1])&lt;br /&gt;
			)&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr(&#039;aria-label&#039;, cfg.aria_label)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args[cfg.arg.nocat] or cfg.keyword.nocat_false):lower() == cfg.keyword.nocat_false then&lt;br /&gt;
		renderTrackingCategories(res, border)&lt;br /&gt;
	end&lt;br /&gt;
	return striped(tostring(res), border)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbox(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
	end&lt;br /&gt;
	args = getArgs(frame, {wrappers = {cfg.pattern.navbox}})&lt;br /&gt;
&lt;br /&gt;
	-- Read the arguments in the order they&#039;ll be output in, to make references&lt;br /&gt;
	-- number in the right order.&lt;br /&gt;
	local _&lt;br /&gt;
	_ = args[cfg.arg.title]&lt;br /&gt;
	_ = args[cfg.arg.above]&lt;br /&gt;
	-- Limit this to 20 as covering &#039;most&#039; cases (that&#039;s a SWAG) and because&lt;br /&gt;
	-- iterator approach won&#039;t work here&lt;br /&gt;
	for i = 1, 20 do&lt;br /&gt;
		_ = args[format(cfg.arg.group_and_num, i)]&lt;br /&gt;
		_ = args[format(cfg.arg.list_and_num, i)]&lt;br /&gt;
	end&lt;br /&gt;
	_ = args[cfg.arg.below]&lt;br /&gt;
&lt;br /&gt;
	return p._navbox(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Navbar/styles.css&amp;diff=1957</id>
		<title>پودمان:Navbar/styles.css</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Navbar/styles.css&amp;diff=1957"/>
		<updated>2026-06-25T09:34:48Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp|small=yes}} */&lt;br /&gt;
.navbar {&lt;br /&gt;
	display: inline;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-collapse {&lt;br /&gt;
	float: right;&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-boxtext {&lt;br /&gt;
	word-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar ul {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	line-height: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-brackets::before {&lt;br /&gt;
	margin-left: -0.125em;&lt;br /&gt;
	content: &#039;[ &#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-brackets::after {&lt;br /&gt;
	margin-right: -0.125em;&lt;br /&gt;
	content: &#039; ]&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar li {&lt;br /&gt;
	word-spacing: -0.125em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar a &amp;gt; span,&lt;br /&gt;
.navbar a &amp;gt; abbr {&lt;br /&gt;
	text-decoration: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-mini abbr {&lt;br /&gt;
	font-variant: small-caps;&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	cursor: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-ct-full {&lt;br /&gt;
	font-size: 114%;&lt;br /&gt;
	margin: 0 7em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-ct-mini {&lt;br /&gt;
	font-size: 114%;&lt;br /&gt;
	margin: 0 4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* not the usual @media screen, we simply remove navbar in @media print */&lt;br /&gt;
html.skin-theme-clientpref-night .navbar li a abbr {&lt;br /&gt;
	color: var(--color-base) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
	html.skin-theme-clientpref-os .navbar li a abbr {&lt;br /&gt;
		color: var(--color-base) !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
	.navbar {&lt;br /&gt;
		display: none !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
	<entry>
		<id>https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Navbar/configuration&amp;diff=1954</id>
		<title>پودمان:Navbar/configuration</title>
		<link rel="alternate" type="text/html" href="https://fa.farahowzeh.ir/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Navbar/configuration&amp;diff=1954"/>
		<updated>2026-06-25T09:34:48Z</updated>

		<summary type="html">&lt;p&gt;Esfandiari: ۲ نسخه واردشده&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	[&#039;templatestyles&#039;] = &#039;پودمان:Navbar/styles.css&#039;,&lt;br /&gt;
	[&#039;hlist_templatestyles&#039;] = &#039;Hlist/styles.css&#039;,&lt;br /&gt;
	[&#039;box_text&#039;] = &#039;این جعبه: &#039;,			-- default text box when not plain or mini&lt;br /&gt;
	[&#039;title_namespace&#039;] = &#039;الگو&#039;,		-- namespace to default to for title&lt;br /&gt;
	[&#039;invalid_title&#039;] = &#039;عنوان نامعتبر &#039;,&lt;br /&gt;
	[&#039;classes&#039;] = { -- set a line to nil if you don&#039;t want it&lt;br /&gt;
		[&#039;navbar&#039;] = &#039;navbar&#039;,&lt;br /&gt;
		[&#039;plainlinks&#039;] = &#039;plainlinks&#039;, -- plainlinks&lt;br /&gt;
		[&#039;horizontal_list&#039;] = &#039;hlist&#039;, -- horizontal list class&lt;br /&gt;
		[&#039;mini&#039;] = &#039;navbar-mini&#039;, -- class indicating small links in the navbar&lt;br /&gt;
		[&#039;this_box&#039;] = &#039;navbar-boxtext&#039;,&lt;br /&gt;
		[&#039;brackets&#039;] = &#039;navbar-brackets&#039;,&lt;br /&gt;
		-- &#039;collapsible&#039; is the key for a class to indicate the navbar is&lt;br /&gt;
		-- setting up the collapsible element in addition to the normal&lt;br /&gt;
		-- navbar.&lt;br /&gt;
		[&#039;collapsible&#039;] = &#039;navbar-collapse&#039;,&lt;br /&gt;
		[&#039;collapsible_title_mini&#039;] = &#039;navbar-ct-mini&#039;,&lt;br /&gt;
		[&#039;collapsible_title_full&#039;] = &#039;navbar-ct-full&#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Esfandiari</name></author>
	</entry>
</feed>