<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://www.vigyanwiki.in/index.php?action=history&amp;feed=atom&amp;title=Module%3ALang%2Fdocumentor_tool</id>
	<title>Module:Lang/documentor tool - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.vigyanwiki.in/index.php?action=history&amp;feed=atom&amp;title=Module%3ALang%2Fdocumentor_tool"/>
	<link rel="alternate" type="text/html" href="https://www.vigyanwiki.in/index.php?title=Module:Lang/documentor_tool&amp;action=history"/>
	<updated>2026-04-26T21:17:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://www.vigyanwiki.in/index.php?title=Module:Lang/documentor_tool&amp;diff=32262&amp;oldid=prev</id>
		<title>Admin: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://www.vigyanwiki.in/index.php?title=Module:Lang/documentor_tool&amp;diff=32262&amp;oldid=prev"/>
		<updated>2022-12-07T16:21:01Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:51, 7 December 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en-GB&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.vigyanwiki.in/index.php?title=Module:Lang/documentor_tool&amp;diff=32261&amp;oldid=prev</id>
		<title>wikipedia&gt;WOSlinker: use require('strict') instead of require('Module:No globals')</title>
		<link rel="alternate" type="text/html" href="https://www.vigyanwiki.in/index.php?title=Module:Lang/documentor_tool&amp;diff=32261&amp;oldid=prev"/>
		<updated>2022-10-22T09:06:43Z</updated>

		<summary type="html">&lt;p&gt;use require(&amp;#039;strict&amp;#039;) instead of require(&amp;#039;Module:No globals&amp;#039;)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:36, 22 October 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;require('&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module:No globals&lt;/del&gt;')&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;require('&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;strict&lt;/ins&gt;')&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local p = {}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local p = {}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>wikipedia&gt;WOSlinker</name></author>
	</entry>
	<entry>
		<id>https://www.vigyanwiki.in/index.php?title=Module:Lang/documentor_tool&amp;diff=15397&amp;oldid=prev</id>
		<title>Admin: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://www.vigyanwiki.in/index.php?title=Module:Lang/documentor_tool&amp;diff=15397&amp;oldid=prev"/>
		<updated>2022-10-09T04:18:09Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 09:48, 9 October 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en-GB&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.vigyanwiki.in/index.php?title=Module:Lang/documentor_tool&amp;diff=15396&amp;oldid=prev</id>
		<title>wikipedia&gt;Trappist the monk at 22:31, 17 September 2022</title>
		<link rel="alternate" type="text/html" href="https://www.vigyanwiki.in/index.php?title=Module:Lang/documentor_tool&amp;diff=15396&amp;oldid=prev"/>
		<updated>2022-09-17T22:31:39Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:01, 18 September 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l758&quot;&gt;Line 758:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 758:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;--[[ -------------------------- &amp;lt; E X P O R T E D _ F U N C T I O N S &amp;gt; --------------------------&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;--[[-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-------------------------&amp;lt; S E E _ A L S O &amp;gt;--------------------------------------------------------------&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;adds items to the list of items in §See also section of Template:Lang-x/doc;  Evaluates single positional parameter&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;which is a comma-separated list of items including list markup.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	{{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;local function see_also (frame)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	if nil == frame.args[1] or '' == frame.args[1] then							-- if empty, ...&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		return;																	-- ... return nothing&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n'));				-- preprocess so any templates are rendered before saving and done&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--[[ &lt;/ins&gt;-------------------------&amp;lt; E X P O R T E D _ F U N C T I O N S &amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;---------------&lt;/ins&gt;--------------------------&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l765&quot;&gt;Line 765:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 783:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	lang_xx_settings = lang_xx_settings,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	lang_xx_settings = lang_xx_settings,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	uses_module = uses_module,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	uses_module = uses_module,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	see_also = see_also,&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	non_english_language_text_category = non_english_language_text_category,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	non_english_language_text_category = non_english_language_text_category,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	non_english_language_sources_category = non_english_language_sources_category,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	non_english_language_sources_category = non_english_language_sources_category,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>wikipedia&gt;Trappist the monk</name></author>
	</entry>
	<entry>
		<id>https://www.vigyanwiki.in/index.php?title=Module:Lang/documentor_tool&amp;diff=5859&amp;oldid=prev</id>
		<title>Admin: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://www.vigyanwiki.in/index.php?title=Module:Lang/documentor_tool&amp;diff=5859&amp;oldid=prev"/>
		<updated>2022-08-11T16:35:46Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:05, 11 August 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en-GB&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.vigyanwiki.in/index.php?title=Module:Lang/documentor_tool&amp;diff=5858&amp;oldid=prev</id>
		<title>wikipedia&gt;Trappist the monk at 19:34, 10 January 2022</title>
		<link rel="alternate" type="text/html" href="https://www.vigyanwiki.in/index.php?title=Module:Lang/documentor_tool&amp;diff=5858&amp;oldid=prev"/>
		<updated>2022-01-10T19:34:14Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require('Module:No globals')&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------&amp;lt; P R I V A T E _ T A G S &amp;gt;------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
{{#invoke:Lang/documentor tool|private_tags}}&lt;br /&gt;
&lt;br /&gt;
Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function private_tags (frame)&lt;br /&gt;
	local override_t = mw.loadData ('Module:Lang/data').override;				-- get the override table&lt;br /&gt;
	&lt;br /&gt;
	local private_t = {};&lt;br /&gt;
&lt;br /&gt;
	for tag, lang in pairs (override_t) do&lt;br /&gt;
		if tag:find ('%-x%-') then&lt;br /&gt;
			table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag}))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort (private_t)&lt;br /&gt;
&lt;br /&gt;
	table.insert (private_t, 1, '{| class=&amp;quot;wikitable&amp;quot;');&lt;br /&gt;
	table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags')&lt;br /&gt;
	table.insert (private_t, 3, '\n! Language !! Private-use tag')&lt;br /&gt;
&lt;br /&gt;
	return table.concat (private_t) .. '\n|}';&lt;br /&gt;
--	return '&amp;lt;pre&amp;gt;' .. table.concat (private_t) .. '\n|}' .. '&amp;lt;/pre&amp;gt;'&lt;br /&gt;
--error (mw.dumpObject (private_t))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------&amp;lt; L A N G - X X _ S E T T I N G S &amp;gt;----------------------------------------------&lt;br /&gt;
&lt;br /&gt;
{{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's&lt;br /&gt;
documentation page.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function lang_xx_settings(frame)&lt;br /&gt;
	local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1])	-- get a page object for this page in 'Template:' namespace&lt;br /&gt;
	if not page then&lt;br /&gt;
		return ''																-- TODO: error message?&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local content = page:getContent()											-- get unparsed content&lt;br /&gt;
	if not page then&lt;br /&gt;
		return ''																-- TODO: error message?&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local out = {}&lt;br /&gt;
&lt;br /&gt;
	local params&lt;br /&gt;
	local style&lt;br /&gt;
&lt;br /&gt;
	if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then			-- if this template uses [[Module:Lang]]&lt;br /&gt;
		params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}')	-- extract the #invoke:'s parameters&lt;br /&gt;
		if not params then &lt;br /&gt;
			return ''															-- there should be at least one or the template/module won't work TODO: error message?&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(out, '{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: right; float: right;&amp;quot;\n|+settings')	-- start a wikitable&lt;br /&gt;
		for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do		-- get the parameter names (k) and values (v)&lt;br /&gt;
			if 'label' == k then												-- special case for labels because spaces and pipes&lt;br /&gt;
				v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label'&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(out, table.concat({k, '\n|', v}))						-- make rudimentary wikitable entries&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		style = content:match('lang_xx_([^|]+)')&lt;br /&gt;
		return table.concat({table.concat(out,'\n|-\n! scope=&amp;quot;row&amp;quot; | '), '\n|-\n|colspan=&amp;quot;2&amp;quot;|style: ', style, '\n|-\n|}'})	-- add inter-row markup and close the wikitable and done&lt;br /&gt;
	else&lt;br /&gt;
		return ''																-- does not use [[Module:Lang]] so abandon quietly&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; U S E S _ M O D U L E &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
{{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang.&lt;br /&gt;
Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false.&lt;br /&gt;
&lt;br /&gt;
Used in template documentation {{#if:}} parser functions.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function uses_module(frame)&lt;br /&gt;
	local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1])	-- get a page object for this page in 'Template:' namespace&lt;br /&gt;
	if not page then&lt;br /&gt;
		return ''																-- TODO: error message?&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local content = page:getContent()											-- get unparsed content&lt;br /&gt;
	if not page then&lt;br /&gt;
		return ''																-- TODO: error message?&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return content:find('{{%s*#invoke:[Ll]ang%s*|') or ''						-- return index or empty string&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; S H A R E D _ C O D E &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
- Tables:&lt;br /&gt;
-- language_categories&lt;br /&gt;
-- error_messages&lt;br /&gt;
-- strings&lt;br /&gt;
&lt;br /&gt;
- Functions:&lt;br /&gt;
-- make_error(message, layout, parent_category, nocat)&lt;br /&gt;
-- get_language_link(language_name, language_code)&lt;br /&gt;
-- get_see_also_section(page_title, language_name, language_code)&lt;br /&gt;
-- get_hidden_category_template(frame)&lt;br /&gt;
-- get_top_section(frame)&lt;br /&gt;
-- get_bottom_section(frame, language_name, see_also_section, parent_category)&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local language_categories = {&lt;br /&gt;
	[&amp;quot;LANGUAGES_SOURCES&amp;quot;] = &amp;quot;Articles with %s-language sources (%s)&amp;quot;,&lt;br /&gt;
	[&amp;quot;LANGUAGES_COLLECTIVE_SOURCES&amp;quot;] = &amp;quot;Articles with %s-collective sources (%s)&amp;quot;,&lt;br /&gt;
	[&amp;quot;CS1&amp;quot;] = &amp;quot;CS1 %s-language sources (%s)&amp;quot;,&lt;br /&gt;
	[&amp;quot;LANGUAGE_TEXT&amp;quot;] = &amp;quot;Articles containing %s-language text&amp;quot;,&lt;br /&gt;
	-- old version [&amp;quot;LANGUAGES_COLLECTIVE_TEXT&amp;quot;] = &amp;quot;Articles with text from the %s collective&amp;quot;,&lt;br /&gt;
	[&amp;quot;LANGUAGES_COLLECTIVE_TEXT&amp;quot;] = &amp;quot;Articles with text in %s&amp;quot;,&lt;br /&gt;
	[&amp;quot;ENGLISH&amp;quot;] = &amp;quot;Articles containing explicitly cited %s-language text&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local error_assistance = &amp;quot; Please see [[Template talk:Lang]] for assistance.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local error_messages = {&lt;br /&gt;
	[&amp;quot;ASSISTANCE&amp;quot;] = &amp;quot;Please see [[Template talk:Lang]] for assistance.&amp;quot;,&lt;br /&gt;
	[&amp;quot;INCORRECT_CATEGORY_TITLE&amp;quot;] = &amp;quot;[[:%s]] is not the category being populated by the {{tlx|%s}} template. The correct category is located at: [[:%s]].&amp;quot;,&lt;br /&gt;
	[&amp;quot;NO_CATEGORY_TITLE_FOUND&amp;quot;] = &amp;quot;No language category found for '''%s.'''&amp;quot; .. error_assistance,&lt;br /&gt;
	[&amp;quot;NOT_VALID_CATEGORY_FORMAT&amp;quot;] = &amp;quot;'''%s''' is not a a valid category title.&amp;quot; .. error_assistance,&lt;br /&gt;
	[&amp;quot;NOT_VALID_LANGUAGE_CODE&amp;quot;] = &amp;quot;[[%s]] is not a valid ISO 639 or IETF language name.&amp;quot; .. error_assistance,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local strings = {&lt;br /&gt;
	[&amp;quot;ERROR_CATEGORY&amp;quot;] = &amp;quot;[[Category:Lang and lang-xx template errors]]&amp;quot;,&lt;br /&gt;
	[&amp;quot;ERROR_SPAN&amp;quot;] = '&amp;lt;span style=&amp;quot;font-size: 100%%; font-style: normal;&amp;quot; class=&amp;quot;error&amp;quot;&amp;gt;Error: %s &amp;lt;/span&amp;gt;',&lt;br /&gt;
	[&amp;quot;PURGE_DIV&amp;quot;] = '&amp;lt;div style=&amp;quot;font-size: x-small;&amp;quot;&amp;gt;%s&amp;lt;/div&amp;gt;',&lt;br /&gt;
	[&amp;quot;SEE_ALSO&amp;quot;] = &amp;quot;\n==See also==&amp;quot;,&lt;br /&gt;
	[&amp;quot;SEE_ALSO_ITEM&amp;quot;] = &amp;quot;* [[:%s]]&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; M A K E _ E R R O R &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
Create an error message.&lt;br /&gt;
Does not place page in error category if args.nocat is used.&lt;br /&gt;
Does not categorize in parent cateogory if used in category namespace (usually for /testcases).&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function make_error(message, layout, parent_category, nocat)&lt;br /&gt;
	table.insert(layout, string.format(strings[&amp;quot;ERROR_SPAN&amp;quot;], message))&lt;br /&gt;
&lt;br /&gt;
	if not nocat then&lt;br /&gt;
		table.insert(layout, strings[&amp;quot;ERROR_CATEGORY&amp;quot;])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if mw.title.getCurrentTitle().nsText == &amp;quot;Category&amp;quot; then&lt;br /&gt;
		table.insert(layout, parent_category)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(layout)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; G E T _ L A N G U A G E _ L I N K &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
Generates a language link for the correct style.&lt;br /&gt;
&lt;br /&gt;
Collective languages use the name_from_tag value,&lt;br /&gt;
while other languages use a display name of &amp;quot;x-language&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function get_language_link(language_name, language_code)&lt;br /&gt;
	local lang_module = require('Module:Lang')&lt;br /&gt;
	-- Is a language collective?&lt;br /&gt;
	if language_name:find('languages') then&lt;br /&gt;
		return lang_module.name_from_tag({language_code, link = &amp;quot;yes&amp;quot;})&lt;br /&gt;
	else&lt;br /&gt;
		return lang_module.name_from_tag({language_code, link = &amp;quot;yes&amp;quot;, label = lang_module.name_from_tag({language_code}) .. &amp;quot;-language&amp;quot;})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; G E T _ S E E _ A L S O _ S E C T I O N &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
Generates a consistent style See also section for&lt;br /&gt;
{{Category articles containing non-English-language text}} and {{Non-English-language source category}}.&lt;br /&gt;
&lt;br /&gt;
If {{CS1 language sources}} is converted, it should also use it.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function get_see_also_section(page_title, language_name, language_code)&lt;br /&gt;
	local see_also_section = {}&lt;br /&gt;
&lt;br /&gt;
	for _, category_name in pairs(language_categories) do&lt;br /&gt;
		local category = mw.title.new(string.format(category_name, language_name, language_code), 14)&lt;br /&gt;
 		if category and page_title ~= category.text and category.exists then&lt;br /&gt;
			table.insert(see_also_section, string.format(strings[&amp;quot;SEE_ALSO_ITEM&amp;quot;], category.prefixedText))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.sort(see_also_section)&lt;br /&gt;
	table.insert(see_also_section, 1, strings[&amp;quot;SEE_ALSO&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
	if table.getn(see_also_section) == 1 then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return table.concat(see_also_section, &amp;quot;\n&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
Generates the Template:Hidden category template.&lt;br /&gt;
&lt;br /&gt;
This function is separate from the get_top_section() function&lt;br /&gt;
as this should be used in both error categories and valid categories.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function get_hidden_category_template(frame)&lt;br /&gt;
	return frame:expandTemplate{title = 'Hidden category'}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; G E T _ T O P _ S E C T I O N &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
Generates a consistent top maintenance template section which consists of:&lt;br /&gt;
-- Template:Possibly empty category&lt;br /&gt;
-- Template:Purge&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function get_top_section(frame)&lt;br /&gt;
	local top_section = {}&lt;br /&gt;
	if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, &amp;quot;all&amp;quot;) == 0 then&lt;br /&gt;
		table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'})&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local purge_module = require('Module:Purge')&lt;br /&gt;
	table.insert(top_section, string.format(strings[&amp;quot;PURGE_DIV&amp;quot;], purge_module._main({&amp;quot;Purge page cache&amp;quot;})))&lt;br /&gt;
&lt;br /&gt;
	return table.concat(top_section, &amp;quot;\n\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; G E T _ B O T T O M _ S E C T I O N &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
Generates a consistent non-text section which consists of:&lt;br /&gt;
-- Template:CatAutoTOC&lt;br /&gt;
-- A see also section&lt;br /&gt;
-- {{DEFAULTSORT}}&lt;br /&gt;
-- Categorization in parent category&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function get_bottom_section(frame, language_name, see_also_section, parent_category)&lt;br /&gt;
	local bottom_section = {}&lt;br /&gt;
	table.insert(bottom_section, frame:expandTemplate{title = 'CatAutoTOC'})&lt;br /&gt;
	table.insert(bottom_section, see_also_section)&lt;br /&gt;
&lt;br /&gt;
	if mw.title.getCurrentTitle().nsText == &amp;quot;Category&amp;quot; then&lt;br /&gt;
		table.insert(bottom_section, frame:preprocess{text = &amp;quot;{{DEFAULTSORT:&amp;quot; .. language_name .. &amp;quot;}}&amp;quot;})&lt;br /&gt;
		table.insert(bottom_section, parent_category)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(bottom_section, &amp;quot;\n\n\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
{{#invoke:Lang/documentor tool|non_english_language_text_category}}&lt;br /&gt;
&lt;br /&gt;
This function implements {{Non-English-language text category}}.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local non_english_language_text_strings = {&lt;br /&gt;
	[&amp;quot;LINE1&amp;quot;] = &amp;quot;This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.&amp;quot;,&lt;br /&gt;
	[&amp;quot;LINE2&amp;quot;] = &amp;quot;This category should only be added with the %s family of templates, never explicitly.&amp;quot;,&lt;br /&gt;
	[&amp;quot;LINE3&amp;quot;] = 'For example %s, which wraps the text with &amp;lt;code&amp;gt;&amp;amp;lt;span lang=&amp;quot;%s&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt;.%s',&lt;br /&gt;
	[&amp;quot;LINE3_EXTRA&amp;quot;] = &amp;quot; Also available is %s which displays as %s.&amp;quot;,&lt;br /&gt;
	[&amp;quot;IN_SCRIPT&amp;quot;] = &amp;quot; (in %s)&amp;quot;,&lt;br /&gt;
	[&amp;quot;EXAMPLE_DEFAULT_TEXT&amp;quot;] = &amp;quot;text in %s language here&amp;quot;,&lt;br /&gt;
	[&amp;quot;PARENT_CATEGORY&amp;quot;] = &amp;quot;[[Category:Articles containing non-English-language text]]&amp;quot;,&lt;br /&gt;
	[&amp;quot;TEMPLATE&amp;quot;] = &amp;quot;Lang&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function non_english_language_text_category(frame)&lt;br /&gt;
	local page = mw.title.getCurrentTitle()&lt;br /&gt;
	local args = require('Module:Arguments').getArgs(frame)&lt;br /&gt;
	-- args.test is used for /testcases&lt;br /&gt;
	if args.test then&lt;br /&gt;
		page = mw.title.new(args.test)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Naming style: Articles with text from the Berber languages collective&lt;br /&gt;
	local page_title_modified = page.text&lt;br /&gt;
	local split_title = &amp;quot;([^,]+)%%s([^,]*)&amp;quot;&lt;br /&gt;
	local part1 = &amp;quot;&amp;quot;&lt;br /&gt;
	local part2 = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	if page_title_modified:find('Articles with text in') then&lt;br /&gt;
		-- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang)&lt;br /&gt;
		part1, part2 = language_categories[&amp;quot;LANGUAGES_COLLECTIVE_TEXT&amp;quot;]:match(split_title)&lt;br /&gt;
	elseif page_title_modified:find('explicitly cited') then&lt;br /&gt;
		part1, part2 = language_categories[&amp;quot;ENGLISH&amp;quot;]:match(split_title)&lt;br /&gt;
	else&lt;br /&gt;
		-- Naming style: Category:Articles containing French-language text&lt;br /&gt;
		part1, part2 = language_categories[&amp;quot;LANGUAGE_TEXT&amp;quot;]:match(split_title)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	page_title_modified = page_title_modified:gsub(part1, &amp;quot;&amp;quot;)&lt;br /&gt;
	page_title_modified = page_title_modified:gsub(part2, &amp;quot;&amp;quot;)&lt;br /&gt;
	local language_name = page_title_modified&lt;br /&gt;
&lt;br /&gt;
	local layout = {}&lt;br /&gt;
	table.insert(layout, get_hidden_category_template(frame))&lt;br /&gt;
	local parent_category = non_english_language_text_strings[&amp;quot;PARENT_CATEGORY&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
	if language_name == page.text then&lt;br /&gt;
		-- Error: Category title format not supported.&lt;br /&gt;
		return make_error(string.format(error_messages[&amp;quot;NOT_VALID_CATEGORY_FORMAT&amp;quot;], page.text), layout, parent_category, args.nocat)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local lang_module = require('Module:Lang')&lt;br /&gt;
	local language_code = lang_module._tag_from_name({language_name})	&lt;br /&gt;
&lt;br /&gt;
	if language_code:find('[Ee]rror') then&lt;br /&gt;
		-- Error: Language code not found in database.&lt;br /&gt;
		return make_error(string.format(error_messages[&amp;quot;NOT_VALID_LANGUAGE_CODE&amp;quot;], language_name), layout, parent_category, args.nocat)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local correct_language_category_title = lang_module._category_from_tag({language_code})&lt;br /&gt;
	if correct_language_category_title:find('[Ee]rror') then&lt;br /&gt;
		-- Error: No category title found for language code.&lt;br /&gt;
		return make_error(string.format(error_messages[&amp;quot;NO_CATEGORY_TITLE_FOUND&amp;quot;], language_code), layout, parent_category, args.nocat)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local current_category_title = page.prefixedText&lt;br /&gt;
	if current_category_title ~= correct_language_category_title then&lt;br /&gt;
		-- Error: The current title used is not in the supported format. TODO: can this still be reached?&lt;br /&gt;
		return make_error(&lt;br /&gt;
			string.format(error_messages[&amp;quot;INCORRECT_CATEGORY_TITLE&amp;quot;], current_category_title, non_english_language_text_strings[&amp;quot;LANG&amp;quot;], correct_language_category_title),&lt;br /&gt;
			layout, parent_category, args.nocat)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert(layout, get_top_section(frame))&lt;br /&gt;
&lt;br /&gt;
	local script_text = &amp;quot;&amp;quot;&lt;br /&gt;
	if args.script then&lt;br /&gt;
		script_text = string.format(non_english_language_text_strings[&amp;quot;IN_SCRIPT&amp;quot;], args.script)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local language_link = get_language_link(language_name, language_code)&lt;br /&gt;
	table.insert(layout, string.format(non_english_language_text_strings[&amp;quot;LINE1&amp;quot;], language_link, script_text))&lt;br /&gt;
&lt;br /&gt;
	local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings[&amp;quot;TEMPLATE&amp;quot;]}}&lt;br /&gt;
	table.insert(layout, string.format(non_english_language_text_strings[&amp;quot;LINE2&amp;quot;], lang_template))&lt;br /&gt;
&lt;br /&gt;
	local language_code_link = lang_module._name_from_tag({language_code, link=&amp;quot;yes&amp;quot;, label=language_code})&lt;br /&gt;
	local example_default_text = string.format(non_english_language_text_strings[&amp;quot;EXAMPLE_DEFAULT_TEXT&amp;quot;], language_name)&lt;br /&gt;
	local example_text = args.example or example_default_text&lt;br /&gt;
	local lang_template_example = frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings[&amp;quot;TEMPLATE&amp;quot;], language_code_link, example_text}}&lt;br /&gt;
	local lang_x = mw.title.makeTitle(10, &amp;quot;Lang-&amp;quot; .. language_code)&lt;br /&gt;
&lt;br /&gt;
	local line3_extra = &amp;quot;&amp;quot;&lt;br /&gt;
	if lang_x.exists then&lt;br /&gt;
		local lang_x_template_example = frame:expandTemplate{title = 'Tlx', args = {lang_x.text, example_text}}&lt;br /&gt;
		local lang_x_template = frame:expandTemplate{title = lang_x.text, args = {example_text}}&lt;br /&gt;
		line3_extra = string.format(non_english_language_text_strings[&amp;quot;LINE3_EXTRA&amp;quot;], lang_x_template_example, lang_x_template)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert(layout, string.format(non_english_language_text_strings[&amp;quot;LINE3&amp;quot;], lang_template_example, language_code, line3_extra))&lt;br /&gt;
	local see_also_section = get_see_also_section(page.text, language_name, language_code)&lt;br /&gt;
&lt;br /&gt;
	local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings[&amp;quot;PARENT_CATEGORY&amp;quot;])&lt;br /&gt;
	return table.concat(layout, &amp;quot;\n\n&amp;quot;) .. bottom&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
{{#invoke:Lang/documentor tool|non_english_language_sources_category}}&lt;br /&gt;
&lt;br /&gt;
This function implements {{Non-English-language sources category}}.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local non_english_language_sources_strings = {&lt;br /&gt;
	[&amp;quot;LINE1&amp;quot;] = &amp;quot;This is a tracking category for articles that use %s to identify %s sources.&amp;quot;,&lt;br /&gt;
	[&amp;quot;PARENT_CATEGORY&amp;quot;] = &amp;quot;[[Category:Articles with non-English-language sources]]&amp;quot;,&lt;br /&gt;
	[&amp;quot;TEMPLATE&amp;quot;] = &amp;quot;In lang&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function non_english_language_sources_category(frame)&lt;br /&gt;
	local page = mw.title.getCurrentTitle()&lt;br /&gt;
	local args = require('Module:Arguments').getArgs(frame)&lt;br /&gt;
	-- args.test is used for /testcases&lt;br /&gt;
	if args.test then&lt;br /&gt;
		page = mw.title.new(args.test)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local page_title = page.text&lt;br /&gt;
	local language_code = page_title:match('%(([%a%-]+)%)')&lt;br /&gt;
	local language_name = require('Module:Lang')._name_from_tag({language_code})&lt;br /&gt;
&lt;br /&gt;
	local layout = {}&lt;br /&gt;
	table.insert(layout, get_hidden_category_template(frame))&lt;br /&gt;
	local parent_category = non_english_language_sources_strings[&amp;quot;PARENT_CATEGORY&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
	local correct_language_category_title = require('Module:In lang')._in_lang({language_code, [&amp;quot;list-cats&amp;quot;]=&amp;quot;yes&amp;quot;})&lt;br /&gt;
	if correct_language_category_title == &amp;quot;&amp;quot; then&lt;br /&gt;
		-- Error: No category title found for language code.&lt;br /&gt;
		return make_error(string.format(error_messages[&amp;quot;NO_CATEGORY_TITLE_FOUND&amp;quot;], language_code), layout, parent_category, args.nocat)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local current_category_title = page.prefixedText&lt;br /&gt;
	if correct_language_category_title ~= current_category_title then&lt;br /&gt;
		-- Error: The current title used is not in the supported format.&lt;br /&gt;
		return make_error(&lt;br /&gt;
			string.format(error_messages[&amp;quot;INCORRECT_CATEGORY_TITLE&amp;quot;], current_category_title, non_english_language_sources_strings[&amp;quot;TEMPLATE&amp;quot;], correct_language_category_title),&lt;br /&gt;
			layout, parent_category, args.nocat)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local language_link = get_language_link(language_name, language_code)&lt;br /&gt;
	local text = string.format(non_english_language_sources_strings[&amp;quot;LINE1&amp;quot;], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings[&amp;quot;TEMPLATE&amp;quot;], language_code}}, language_link)&lt;br /&gt;
&lt;br /&gt;
	table.insert(layout, get_top_section(frame))	&lt;br /&gt;
	table.insert(layout, text)&lt;br /&gt;
	local see_also_section = get_see_also_section(page_title, language_name, language_code)&lt;br /&gt;
&lt;br /&gt;
	local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category)&lt;br /&gt;
	return table.concat(layout, &amp;quot;\n\n&amp;quot;) .. bottom&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
{{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}}&lt;br /&gt;
&lt;br /&gt;
This function implements {{Non-English-language CS1 sources category}}.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local non_english_language_cs1_text_strings = {&lt;br /&gt;
	[&amp;quot;LINE1&amp;quot;] = &amp;quot;This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].&amp;quot;,&lt;br /&gt;
	[&amp;quot;PARENT_CATEGORY&amp;quot;] = &amp;quot;[[Category:CS1 foreign language sources]]&amp;quot;, -- #TODO change to &amp;quot;Articles with non-english CS1 language sources&amp;quot; or &amp;quot;CS1 non-English language sources&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	--&amp;quot;This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix &amp;lt;code&amp;gt;%s:&amp;lt;/code&amp;gt;. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].&amp;quot;,&lt;br /&gt;
	--&amp;quot;[[Category:CS1 uses foreign language script]]&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
	-- &amp;quot;This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].&amp;quot;,&lt;br /&gt;
	-- &amp;quot;to identify a source in [[%s language|%s]].&amp;quot;,&lt;br /&gt;
	-- &amp;quot;to hold a citation title that uses %s characters and contains the language prefix &amp;lt;code&amp;gt;%s:&amp;lt;/code&amp;gt;.&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
local function non_english_language_cs1_sources_category(frame)&lt;br /&gt;
	local page_title_object = mw.title.getCurrentTitle()&lt;br /&gt;
	local page_title = page_title_object.text&lt;br /&gt;
	local language_code = page_title:match('%(([%a%-]+)%)')&lt;br /&gt;
	local language_name = require('Module:Lang')._name_from_tag({language_code})&lt;br /&gt;
	local layout = {}&lt;br /&gt;
	table.insert(layout, get_hidden_category_template(frame))&lt;br /&gt;
	local see_also_section = &amp;quot;&amp;quot;&lt;br /&gt;
	local parameter_doc = frame:expandTemplate{title = 'para', args = {&amp;quot;language&amp;quot;, language_code}}&lt;br /&gt;
	table.insert(layout, get_top_section(frame))&lt;br /&gt;
	table.insert(layout, string.format(non_english_language_cs1_text_strings[&amp;quot;LINE1&amp;quot;], parameter_doc, language_name, language_name))&lt;br /&gt;
	local see_also_section = get_see_also_section(page_title, language_name, language_code)&lt;br /&gt;
	local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings[&amp;quot;PARENT_CATEGORY&amp;quot;])&lt;br /&gt;
	return table.concat(layout, &amp;quot;\n\n&amp;quot;) .. bottom&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; T E S T _ C A S E S _ S H A R E D _ C O D E &amp;gt; -------------------------- &lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function compare_by_keys2(a, b)											-- local function used by table.sort()&lt;br /&gt;
	return a[2] &amp;lt; b[2]															-- ascending sort by code&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function compare_by_keys(a, b)											-- local function used by table.sort()&lt;br /&gt;
	return a[1] &amp;lt; b[1]															-- ascending sort by code&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Used by testcases_iso_code_to_name()&lt;br /&gt;
local function get_language_code_table_from_code(args)&lt;br /&gt;
	local entry = {}&lt;br /&gt;
	--if args.override_table[args.language_code] then&lt;br /&gt;
	--	table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here&lt;br /&gt;
	--else&lt;br /&gt;
		table.insert(entry, args.language_code)&lt;br /&gt;
--	end&lt;br /&gt;
	return entry&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Used by testcases_name_from_tag()&lt;br /&gt;
local function get_language_code_and_name_table_from_code(args)&lt;br /&gt;
	local entry = {}&lt;br /&gt;
	if args.override_table[args.language_code] then&lt;br /&gt;
		table.insert(entry, args.language_code)&lt;br /&gt;
		local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '')&lt;br /&gt;
		table.insert(entry, language_code)&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(entry, args.language_code)&lt;br /&gt;
		table.insert(entry, args.language_table[args.language_code])&lt;br /&gt;
	end&lt;br /&gt;
	return entry&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Used by testcases_category_from_tag()&lt;br /&gt;
local function get_language_code_and_category_table_from_code(args)&lt;br /&gt;
	local entry = {}&lt;br /&gt;
	table.insert(entry, args.language_code)&lt;br /&gt;
	table.insert(entry, args.test_function({args.language_code}))&lt;br /&gt;
	return entry&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Used by testcases_iso_name_to_code() and testcases_tag_from_name()&lt;br /&gt;
local function get_language_name_and_code_table_from_code(args)&lt;br /&gt;
	local entry = {}&lt;br /&gt;
	if args.override_table[args.language_code] then&lt;br /&gt;
		table.insert(entry, args.override_table[args.language_code][1])			-- only the first name when there are multiples&lt;br /&gt;
		table.insert(entry, args.language_code)&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(entry, args.language_names[1])								-- only the first name when there are multiples&lt;br /&gt;
		table.insert(entry, args.language_code)&lt;br /&gt;
	end&lt;br /&gt;
	return entry&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function get_table(table_function, language_table, length, range, iso_number, test_function)&lt;br /&gt;
	local table_of_language_name_and_code_tables = {}&lt;br /&gt;
&lt;br /&gt;
	local override_table_name = &amp;quot;override&amp;quot;&lt;br /&gt;
	if iso_number then&lt;br /&gt;
		override_table_name = &amp;quot;override_&amp;quot; .. iso_number&lt;br /&gt;
	end&lt;br /&gt;
	local override_table = require(&amp;quot;Module:Language/data/ISO_639_override/sandbox&amp;quot;)[override_table_name]&lt;br /&gt;
&lt;br /&gt;
	-- For most ISO 639s.&lt;br /&gt;
	if range then&lt;br /&gt;
		for language_code, language_names in pairs(language_table) do&lt;br /&gt;
			if language_code:find(range) then&lt;br /&gt;
				table.insert(table_of_language_name_and_code_tables, table_function({&lt;br /&gt;
					override_table = override_table,&lt;br /&gt;
					language_code = language_code,&lt;br /&gt;
					language_names = language_names,&lt;br /&gt;
					test_function = test_function,&lt;br /&gt;
					language_table = language_table&lt;br /&gt;
				}))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	-- For ISO 639-1.&lt;br /&gt;
	elseif length then&lt;br /&gt;
		for language_code, language_names in pairs(language_table) do&lt;br /&gt;
			if language_code:len() == 2 then&lt;br /&gt;
				table.insert(table_of_language_name_and_code_tables, table_function({&lt;br /&gt;
					override_table = override_table,&lt;br /&gt;
					language_code = language_code,&lt;br /&gt;
					language_names = language_names,&lt;br /&gt;
					test_function = test_function,&lt;br /&gt;
					language_table = language_table&lt;br /&gt;
				}))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	-- For general /testcases.&lt;br /&gt;
	else&lt;br /&gt;
		for language_code, language_names in pairs(language_table) do&lt;br /&gt;
				table.insert(table_of_language_name_and_code_tables, table_function({&lt;br /&gt;
					override_table = override_table,&lt;br /&gt;
					language_code = language_code,&lt;br /&gt;
					language_names = language_names,&lt;br /&gt;
					test_function = test_function,&lt;br /&gt;
					language_table = language_table&lt;br /&gt;
				}))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table_of_language_name_and_code_tables&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function get_undabbed_table(language_list, length, range)&lt;br /&gt;
	local undabbed_language_table = {}											-- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here&lt;br /&gt;
	for language_code, language_names in pairs(language_list) do&lt;br /&gt;
		-- For most ISO 639s.&lt;br /&gt;
		if range then&lt;br /&gt;
			if language_code:find(range) then&lt;br /&gt;
				undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '')	-- undab and save only the first name; ignore all other names assigned to a code&lt;br /&gt;
			end&lt;br /&gt;
		-- For ISO 639-1.&lt;br /&gt;
		elseif length then&lt;br /&gt;
			if language_code:len() == 2 then&lt;br /&gt;
				undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '')	-- undab and save only the first name; ignore all other names assigned to a code&lt;br /&gt;
			end&lt;br /&gt;
		-- For general /testcases.&lt;br /&gt;
		else&lt;br /&gt;
			undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return undabbed_language_table&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
Entry point for the various category_from_tag testcases.&lt;br /&gt;
&lt;br /&gt;
Build a table of test patterns where each entry in the table is a table with two members:&lt;br /&gt;
	{&amp;quot;&amp;lt;language_code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;category name according to Module:Lang&amp;gt;&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
- &amp;quot;Expected&amp;quot; column value is the category name according to Module:Lang.&lt;br /&gt;
- &amp;quot;Actual&amp;quot; column value is the result of {{#invoke:Lang/sandbox|category_from_tag|&amp;lt;language_code&amp;gt;}}.&lt;br /&gt;
&lt;br /&gt;
TODO: Currently not working.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function testcases_category_from_tag(self, args)&lt;br /&gt;
	local cat_from_tag_function = require('Module:Lang')._category_from_tag	&lt;br /&gt;
	local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function)&lt;br /&gt;
	table.sort(language_tables, compare_by_keys)&lt;br /&gt;
&lt;br /&gt;
	self:preprocess_equals_preprocess_many(&lt;br /&gt;
		'{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '',&lt;br /&gt;
		language_tables, &lt;br /&gt;
		{nowiki=false}&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; T E S T C A S E S _ N A M E _ F R O M _ T A G &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
Entry point for the various name_from_tag testcases.&lt;br /&gt;
&lt;br /&gt;
Build a table of test patterns where each entry in the table is a table with two members:&lt;br /&gt;
	{&amp;quot;&amp;lt;language_code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;language_name&amp;gt;&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
- &amp;quot;Expected&amp;quot; column value is the &amp;lt;language_name&amp;gt;.&lt;br /&gt;
- &amp;quot;Actual&amp;quot; column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|&amp;lt;language_code&amp;gt;}}.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function testcases_name_from_tag(self, args)&lt;br /&gt;
	local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil)&lt;br /&gt;
	local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range)&lt;br /&gt;
	table.sort(language_tables, compare_by_keys)&lt;br /&gt;
&lt;br /&gt;
	self:preprocess_equals_preprocess_many(&lt;br /&gt;
		'{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '',&lt;br /&gt;
		language_tables, &lt;br /&gt;
		{nowiki=false}&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; T E S T C A S E S _ T A G _ F R O M _ N A M E &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
Entry point for the various tag_from_name testcases.&lt;br /&gt;
&lt;br /&gt;
Build a table of test patterns where each entry in the table is a table with two members:&lt;br /&gt;
	{&amp;quot;&amp;lt;language_name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;language_code&amp;gt;&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
- &amp;quot;Expected&amp;quot; column value is the &amp;lt;language_code&amp;gt;.&lt;br /&gt;
- &amp;quot;Actual&amp;quot; column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|&amp;lt;language_name&amp;gt;}}.&lt;br /&gt;
&lt;br /&gt;
TODO: Currently not working.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function testcases_tag_from_name(self, args)&lt;br /&gt;
	local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil)&lt;br /&gt;
	table.sort(language_tables, compare_by_keys2)&lt;br /&gt;
&lt;br /&gt;
	local ordered_table = {}&lt;br /&gt;
	table.sort(unordered_table)&lt;br /&gt;
	for _, key in ipairs(unordered_table) do&lt;br /&gt;
		table.insert(ordered_table, {key, reverse_table[key]})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	self:preprocess_equals_preprocess_many(&lt;br /&gt;
		'{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '',&lt;br /&gt;
		language_tables, &lt;br /&gt;
		{nowiki=false}&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
Entry point for the various iso_code_to_name testcases.&lt;br /&gt;
&lt;br /&gt;
Build a table of test patterns where each entry in the table is a table with one member:&lt;br /&gt;
	{&amp;quot;&amp;lt;language_code&amp;gt;&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
- &amp;quot;Expected&amp;quot; column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|&amp;lt;language_code&amp;gt;}}.&lt;br /&gt;
- &amp;quot;Actual&amp;quot; column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|&amp;lt;language_code&amp;gt;}}.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function testcases_iso_code_to_name(self, args)&lt;br /&gt;
	local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil)&lt;br /&gt;
	table.sort(language_tables, compare_by_keys)&lt;br /&gt;
&lt;br /&gt;
	self:preprocess_equals_preprocess_many(&lt;br /&gt;
		'{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}',&lt;br /&gt;
		language_tables, &lt;br /&gt;
		{nowiki=false}&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
Entry point for the various iso_name_to_code testcases.&lt;br /&gt;
&lt;br /&gt;
Build a table of test patterns where each entry in the table is a table with two members:&lt;br /&gt;
	{&amp;quot;&amp;lt;language_name&amp;gt;&amp;quot;, &amp;quot;&amp;lt;language_code&amp;gt;&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
- &amp;quot;Expected&amp;quot; column value is the &amp;lt;language_code&amp;gt;.&lt;br /&gt;
- &amp;quot;Actual&amp;quot; column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|&amp;lt;language_name&amp;gt;}}.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function testcases_iso_name_to_code(self, args)&lt;br /&gt;
	local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil)&lt;br /&gt;
	table.sort(language_tables, compare_by_keys2)&lt;br /&gt;
	self:preprocess_equals_preprocess_many(&lt;br /&gt;
		'{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. &amp;quot;|&amp;quot;, '}}', '', '',&lt;br /&gt;
		language_tables, &lt;br /&gt;
		{nowiki=false}&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&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;
&lt;br /&gt;
return {&lt;br /&gt;
	lang_xx_settings = lang_xx_settings,&lt;br /&gt;
	uses_module = uses_module,&lt;br /&gt;
	non_english_language_text_category = non_english_language_text_category,&lt;br /&gt;
	non_english_language_sources_category = non_english_language_sources_category,&lt;br /&gt;
	non_english_language_cs1_sources_category = non_english_language_cs1_sources_category,&lt;br /&gt;
	private_tags = private_tags,&lt;br /&gt;
&lt;br /&gt;
	-- Module:Lang testcases&lt;br /&gt;
	testcases_category_from_tag = testcases_category_from_tag,&lt;br /&gt;
	testcases_name_from_tag = testcases_name_from_tag,&lt;br /&gt;
	testcases_tag_from_name = testcases_tag_from_name,&lt;br /&gt;
&lt;br /&gt;
	-- Module:ISO 639 name testcases&lt;br /&gt;
	testcases_iso_code_to_name = testcases_iso_code_to_name,&lt;br /&gt;
	testcases_iso_name_to_code = testcases_iso_name_to_code,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>wikipedia&gt;Trappist the monk</name></author>
	</entry>
</feed>