<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://test6.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3ADocumentation</id>
	<title>Module:Documentation - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://test6.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3ADocumentation"/>
	<link rel="alternate" type="text/html" href="https://test6.st34an.tech/index.php?title=Module:Documentation&amp;action=history"/>
	<updated>2026-04-22T14:13:43Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://test6.st34an.tech/index.php?title=Module:Documentation&amp;diff=924&amp;oldid=prev</id>
		<title>Jsrs701: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://test6.st34an.tech/index.php?title=Module:Documentation&amp;diff=924&amp;oldid=prev"/>
		<updated>2026-04-17T08:46:03Z</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;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&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 08:46, 17 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key mediawikidb:diff:1.41:old-922:rev-924 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jsrs701</name></author>
	</entry>
	<entry>
		<id>https://test6.st34an.tech/index.php?title=Module:Documentation&amp;diff=922&amp;oldid=prev</id>
		<title>Jsrs701: Created page with &quot;local export = {}  -- it is either here, or in Module:ugly hacks, and it is not in ugly hacks. function export.CONTENTMODEL() 	return mw.title.getCurrentTitle().contentModel	 end  local skins = { 	[&quot;common&quot;     ] = &quot;&quot;; 	[&quot;vector&quot;     ] = &quot;Vector&quot;; 	[&quot;monobook&quot;   ] = &quot;Monobook&quot;; 	[&quot;cologneblue&quot;] = &quot;Cologne Blue&quot;; 	[&quot;modern&quot;     ] = &quot;Modern&quot;; }  local Array = require &quot;Module:array&quot;  local function link_lang_cat(lang) 	return (&quot;%s&quot;) 		:format(lang:getCa...&quot;</title>
		<link rel="alternate" type="text/html" href="https://test6.st34an.tech/index.php?title=Module:Documentation&amp;diff=922&amp;oldid=prev"/>
		<updated>2026-04-17T08:41:16Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local export = {}  -- it is either here, or in &lt;a href=&quot;/index.php?title=Module:Ugly_hacks&quot; title=&quot;Module:Ugly hacks&quot;&gt;Module:ugly hacks&lt;/a&gt;, and it is not in ugly hacks. function export.CONTENTMODEL() 	return mw.title.getCurrentTitle().contentModel	 end  local skins = { 	[&amp;quot;common&amp;quot;     ] = &amp;quot;&amp;quot;; 	[&amp;quot;vector&amp;quot;     ] = &amp;quot;Vector&amp;quot;; 	[&amp;quot;monobook&amp;quot;   ] = &amp;quot;Monobook&amp;quot;; 	[&amp;quot;cologneblue&amp;quot;] = &amp;quot;Cologne Blue&amp;quot;; 	[&amp;quot;modern&amp;quot;     ] = &amp;quot;Modern&amp;quot;; }  local Array = require &amp;quot;Module:array&amp;quot;  local function link_lang_cat(lang) 	return (&amp;quot;&lt;a href=&quot;/index.php?title=Category:%25s&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:%s (page does not exist)&quot;&gt;%s&lt;/a&gt;&amp;quot;) 		:format(lang:getCa...&amp;quot;&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&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 08:41, 17 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key mediawikidb:diff:1.41:old-923:rev-922 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jsrs701</name></author>
	</entry>
	<entry>
		<id>https://test6.st34an.tech/index.php?title=Module:Documentation&amp;diff=923&amp;oldid=prev</id>
		<title>Bob&gt;Djpwikiadmin: Created page with &quot;local export = {}  -- it is either here, or in Module:ugly hacks, and it is not in ugly hacks. function export.CONTENTMODEL() 	return mw.title.getCurrentTitle().contentMod...&quot;</title>
		<link rel="alternate" type="text/html" href="https://test6.st34an.tech/index.php?title=Module:Documentation&amp;diff=923&amp;oldid=prev"/>
		<updated>2019-04-01T04:30:51Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local export = {}  -- it is either here, or in &lt;a href=&quot;/index.php?title=Module:Ugly_hacks&quot; title=&quot;Module:Ugly hacks&quot;&gt;Module:ugly hacks&lt;/a&gt;, and it is not in ugly hacks. function export.CONTENTMODEL() 	return mw.title.getCurrentTitle().contentMod...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local export = {}&lt;br /&gt;
&lt;br /&gt;
-- it is either here, or in [[Module:ugly hacks]], and it is not in ugly hacks.&lt;br /&gt;
function export.CONTENTMODEL()&lt;br /&gt;
	return mw.title.getCurrentTitle().contentModel	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local skins = {&lt;br /&gt;
	[&amp;quot;common&amp;quot;     ] = &amp;quot;&amp;quot;;&lt;br /&gt;
	[&amp;quot;vector&amp;quot;     ] = &amp;quot;Vector&amp;quot;;&lt;br /&gt;
	[&amp;quot;monobook&amp;quot;   ] = &amp;quot;Monobook&amp;quot;;&lt;br /&gt;
	[&amp;quot;cologneblue&amp;quot;] = &amp;quot;Cologne Blue&amp;quot;;&lt;br /&gt;
	[&amp;quot;modern&amp;quot;     ] = &amp;quot;Modern&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Array = require &amp;quot;Module:array&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local function link_lang_cat(lang)&lt;br /&gt;
	return (&amp;quot;[[:Category:%s|%s]]&amp;quot;)&lt;br /&gt;
		:format(lang:getCategoryName(), lang:getCanonicalName())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function compare_pages(page1, page2, text)&lt;br /&gt;
	return &amp;quot;[&amp;quot; .. tostring(&lt;br /&gt;
		mw.uri.fullUrl(&amp;quot;Special:ComparePages&amp;quot;, { page1 = page1, page2 = page2 }))&lt;br /&gt;
		.. &amp;quot; &amp;quot; .. text .. &amp;quot;]&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function page_exists(title)&lt;br /&gt;
	local success, title_obj = pcall(mw.title.new, title)&lt;br /&gt;
	return success and title_obj.exists&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Avoid transcluding [[Module:languages/cache]] everywhere.&lt;br /&gt;
local lang_cache = setmetatable({}, { __index = function (self, k)&lt;br /&gt;
	return require &amp;quot;Module:languages/cache&amp;quot;[k]&lt;br /&gt;
end })&lt;br /&gt;
&lt;br /&gt;
local function zh_link(word)&lt;br /&gt;
	return require(&amp;quot;Module:links&amp;quot;).full_link{&lt;br /&gt;
		lang = lang_cache.zh,&lt;br /&gt;
		term = word&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function make_zh_data_documentation(title, cats)&lt;br /&gt;
	local output = Array()&lt;br /&gt;
	&lt;br /&gt;
	local zh_data_subpage, lang_code, reconstruction, character =&lt;br /&gt;
		mw.ustring.match(title.fullText,&lt;br /&gt;
			&amp;quot;^Module:zh/data/((%l%l%l)%-pron%-?([^/]-))/(.+)$&amp;quot;)&lt;br /&gt;
	if zh_data_subpage == &amp;quot;ltc-pron&amp;quot; or zh_data_subpage == &amp;quot;och-pron-BS&amp;quot;&lt;br /&gt;
			or zh_data_subpage == &amp;quot;och-pron-ZS&amp;quot; then&lt;br /&gt;
		require(&amp;#039;Module:zh-track&amp;#039;).track_data_module(title.fullText)&lt;br /&gt;
		&lt;br /&gt;
		local lang = lang_cache[lang_code]&lt;br /&gt;
		&lt;br /&gt;
		output:insert((&amp;#039;This module contains data on the pronunciation of %s&amp;#039;)&lt;br /&gt;
			:format(zh_link(character)))&lt;br /&gt;
		&lt;br /&gt;
		local see_also_link&lt;br /&gt;
		if reconstruction == &amp;quot;BS&amp;quot; then&lt;br /&gt;
			see_also_link = &amp;#039;Wiktionary:About Proto-Sino-Tibetan#Reconstruction by Baxter-Sagart (2014)&amp;#039;&lt;br /&gt;
		elseif reconstruction == &amp;quot;ZS&amp;quot; then&lt;br /&gt;
			see_also_link = &amp;#039;Wiktionary:About Proto-Sino-Tibetan#Reconstruction by Zhengzhang (2003)&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			reconstruction = nil&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local lang_link = link_lang_cat(lang)&lt;br /&gt;
		if reconstruction then&lt;br /&gt;
			output:insert((&amp;quot;in the reconstruction of %s by %s.&amp;quot;)&lt;br /&gt;
				:format(lang_link, reconstruction == &amp;quot;BS&amp;quot; and &amp;quot;Baxter-Sagart&amp;quot; or &amp;quot;Zhengzhang&amp;quot;))&lt;br /&gt;
		else&lt;br /&gt;
			output:insert((&amp;quot;in %s.&amp;quot;):format(lang_link))&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if see_also_link then&lt;br /&gt;
			output:insert(&amp;quot;See &amp;quot; .. require(&amp;quot;Module:links&amp;quot;).section_link(see_also_link)&lt;br /&gt;
				.. &amp;quot; for more information.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return output:concat(&amp;quot; &amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function make_zh_dial_or_syn_documentation(title, cats)&lt;br /&gt;
	local type_of_data, character = title.fullText:match(&amp;quot;^Module:zh/data/dial%-(%l+)/(.+)$&amp;quot;)&lt;br /&gt;
	if character then&lt;br /&gt;
		local what, where&lt;br /&gt;
		if type_of_data == &amp;quot;pron&amp;quot; then&lt;br /&gt;
			what = &amp;quot;the pronunciation&amp;quot;&lt;br /&gt;
			where = &amp;quot;dialects&amp;quot;&lt;br /&gt;
		elseif type_of_data == &amp;quot;syn&amp;quot; then&lt;br /&gt;
			what = &amp;quot;synonyms&amp;quot;&lt;br /&gt;
			where = &amp;quot;dialects and varieties&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if what then&lt;br /&gt;
			return (&amp;quot;This module contains data on %s of %s in %s of Chinese.&amp;quot;)&lt;br /&gt;
				:format(what, zh_link(character), where)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function make_zh_glyph_data_documentation(title, cats)&lt;br /&gt;
	local character = title.fullText:match(&amp;quot;^Module:zh/data/glyph%-data/(.+)&amp;quot;)&lt;br /&gt;
	if character then&lt;br /&gt;
		return (&amp;quot;This module contains data on historical forms of the Chinese character %s.&amp;quot;)&lt;br /&gt;
			:format(zh_link(character))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function make_accel_documentation(title, cats)&lt;br /&gt;
	local doc_content&lt;br /&gt;
	local lang_code = title.subpageText&lt;br /&gt;
	local lang = lang_cache[lang_code]&lt;br /&gt;
	if lang then&lt;br /&gt;
		cats:insert(lang:getCanonicalName() .. &amp;quot; modules|accel&amp;quot;)&lt;br /&gt;
		cats:insert((&amp;quot;Accel submodules|%s&amp;quot;):format(lang:getCanonicalName()))&lt;br /&gt;
		return (&amp;quot;This module contains new entry creation rules for %s; see [[WT:ACCEL]].&amp;quot;)&lt;br /&gt;
			:format(link_lang_cat(lang))&lt;br /&gt;
	end&lt;br /&gt;
	return doc_content&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function make_Unicode_data_documentation(title, cats)&lt;br /&gt;
	local subpage, first_three_of_code_point&lt;br /&gt;
		= title.fullText:match(&amp;quot;^Module:Unicode data/([^/]+)/(%x%x%x)$&amp;quot;)&lt;br /&gt;
	if subpage == &amp;quot;names&amp;quot; or subpage == &amp;quot;images&amp;quot; then&lt;br /&gt;
		local low, high =&lt;br /&gt;
			tonumber(first_three_of_code_point .. &amp;quot;000&amp;quot;, 16),&lt;br /&gt;
			tonumber(first_three_of_code_point .. &amp;quot;FFF&amp;quot;, 16)&lt;br /&gt;
		return string.format(&lt;br /&gt;
			&amp;quot;This data module contains the %s of &amp;quot; .. &lt;br /&gt;
			&amp;quot;[[Appendix:Unicode|Unicode]] code points within the range U+%04X to U+%04X.&amp;quot;,&lt;br /&gt;
			subpage == &amp;quot;images&amp;quot; and &amp;quot;titles of images&amp;quot; or &amp;quot;names&amp;quot;,&lt;br /&gt;
			low, high)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- This provides categories and documentation for various data modules, so that&lt;br /&gt;
-- [[Category:Uncategorized modules]] isn&amp;#039;t unnecessarily cluttered.&lt;br /&gt;
local module_regex = {&lt;br /&gt;
	[&amp;quot;^Module:languages/.+$&amp;quot;] = &amp;quot;Modules dealing with languages and scripts&amp;quot;,&lt;br /&gt;
	[&amp;quot;^Module:scripts/.+$&amp;quot;] = &amp;quot;Modules dealing with languages and scripts&amp;quot;,&lt;br /&gt;
	[&amp;quot;^Module:data tables/data..?.?.?$&amp;quot;] = &amp;quot;Reference module sharded data tables&amp;quot;,&lt;br /&gt;
	[&amp;quot;^Module:Quotations/...?.?.?.?.?.?$&amp;quot;] = &amp;quot;Quotation data modules&amp;quot;,&lt;br /&gt;
	-- capture submodules of zh/data that do not end with a hanzi in the title&lt;br /&gt;
	[&amp;quot;^Module:zh/data/.+[a-zA-z0-9]$&amp;quot;] = &amp;quot;Chinese data modules&amp;quot;,&lt;br /&gt;
	[&amp;quot;^Module:zh/data/dial%-pron/.+&amp;quot;] = {&lt;br /&gt;
		cat = &amp;quot;Chinese dialectal pronunciation data modules&amp;quot;,&lt;br /&gt;
		doc = make_zh_dial_or_syn_documentation,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;^Module:zh/data/dial%-syn/.+&amp;quot;] = {&lt;br /&gt;
		cat = &amp;quot;Chinese dialectal synonyms data modules&amp;quot;,&lt;br /&gt;
		doc = make_zh_dial_or_syn_documentation,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;^Module:zh/data/glyph%-data/.+&amp;quot;] = {&lt;br /&gt;
		cat = &amp;quot;Chinese historical character forms data modules&amp;quot;,&lt;br /&gt;
		doc = make_zh_glyph_data_documentation,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;^Module:zh/data/ltc%-pron/.+&amp;quot;] = {&lt;br /&gt;
		cat = &amp;quot;Middle Chinese pronunciation data modules&amp;quot;,&lt;br /&gt;
		doc = make_zh_data_documentation,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;^Module:zh/data/och%-pron%-BS/.+&amp;quot;] = {&lt;br /&gt;
		cat = &amp;quot;Old Chinese (Baxter-Sagart) pronunciation data modules&amp;quot;,&lt;br /&gt;
		doc = make_zh_data_documentation,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;^Module:zh/data/och%-pron%-ZS/.+&amp;quot;] = {&lt;br /&gt;
		cat = &amp;quot;Old Chinese (Zhengzhang) pronunciation data modules&amp;quot;,&lt;br /&gt;
		doc = make_zh_data_documentation,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;^Module:mul/guoxue%-data/cjk%-?(.*)&amp;quot;] = {&lt;br /&gt;
		cat = nil,&lt;br /&gt;
		doc = function (title, cats)&lt;br /&gt;
			local suffix = title.fullText:match(&amp;quot;^Module:mul/guoxue%-data/cjk%-?(.*)$&amp;quot;)&lt;br /&gt;
			local block&lt;br /&gt;
			if suffix == &amp;quot;&amp;quot; then&lt;br /&gt;
				block = &amp;quot;CJK Unified Ideographs&amp;quot;&lt;br /&gt;
			elseif suffix:find(&amp;quot;^%l$&amp;quot;) then&lt;br /&gt;
				block = &amp;quot;CJK Unified Ideographs Extension &amp;quot; .. suffix:upper()&lt;br /&gt;
			elseif suffix == &amp;quot;compat&amp;quot; then&lt;br /&gt;
				block = &amp;quot;CJK Compatibility Ideographs&amp;quot;&lt;br /&gt;
			elseif suffix == &amp;quot;compat-sup&amp;quot; then&lt;br /&gt;
				block = &amp;quot;CJK Compatibility Ideographs Supplement&amp;quot;&lt;br /&gt;
			else&lt;br /&gt;
				mw.log(&amp;quot;Unicode block for &amp;quot; .. title.fullText &amp;quot; not found.&amp;quot;)&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local block_link = (&amp;quot;[[Appendix:Unicode/%s|%s]]&amp;quot;):format(block, block)&lt;br /&gt;
			local start, ending = require(&amp;quot;Module:Unicode data&amp;quot;).get_block_range(block)&lt;br /&gt;
			if not start then&lt;br /&gt;
				mw.log(&amp;quot;Code point range for the Unicode block &amp;quot; .. tostring(block) .. &amp;quot; not found.&amp;quot;)&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local sortkey = &amp;quot;|guoxue, &amp;quot; .. suffix&lt;br /&gt;
			cats:insert(&amp;quot;Data modules&amp;quot; .. sortkey)&lt;br /&gt;
			cats:insert(&amp;quot;Han script&amp;quot; .. sortkey)&lt;br /&gt;
			cats:insert(&amp;quot;Translingual modules&amp;quot; .. sortkey)&lt;br /&gt;
			&lt;br /&gt;
			return (&amp;quot;This module contains data on CJK characters in &amp;quot;&lt;br /&gt;
				.. &amp;quot;the Unicode block %s (U+%04X&amp;amp;ndash;U+%04X) from [https://guoxuedashi.com guoxuedashi.com].&amp;quot;)&lt;br /&gt;
				:format(block_link, start, ending)&lt;br /&gt;
		end,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;^Module:Unicode data/(.+)&amp;quot;] = {&lt;br /&gt;
		cat = &amp;quot;Unicode data modules|%1&amp;quot;,&lt;br /&gt;
		doc = make_Unicode_data_documentation,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;^Module:number list/data/(.+)&amp;quot;] = {&lt;br /&gt;
		cat = nil,&lt;br /&gt;
		doc = function (title, cats)&lt;br /&gt;
			local lang_code = title.fullText:match(&amp;quot;^Module:number list/data/(.+)&amp;quot;)&lt;br /&gt;
			local lang = lang_cache[lang_code]&lt;br /&gt;
			&lt;br /&gt;
			if lang then&lt;br /&gt;
				local canonical_name = lang:getCanonicalName()&lt;br /&gt;
				local language_data_modules = canonical_name .. &amp;quot; data modules&amp;quot;&lt;br /&gt;
				&lt;br /&gt;
				cats:insert((page_exists(&amp;quot;Category:&amp;quot; .. language_data_modules)&lt;br /&gt;
					and language_data_modules or canonical_name .. &amp;quot; modules&amp;quot;)&lt;br /&gt;
					.. &amp;quot;|number list&amp;quot;)&lt;br /&gt;
				cats:insert(&amp;quot;Number data modules|&amp;quot; .. canonical_name)&lt;br /&gt;
				&lt;br /&gt;
				return (&amp;quot;This module contains data on various types of numbers in %s.\n%s&amp;quot;)&lt;br /&gt;
					:format(link_lang_cat(lang), require(&amp;quot;Module:number list/show&amp;quot;).table() or &amp;#039;&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;^Module:es%-conj/data/(.+)&amp;quot;] = &amp;quot;Spanish data modules|%1&amp;quot;,&lt;br /&gt;
	[&amp;quot;^Module:accel/(.+)$&amp;quot;] = {&lt;br /&gt;
		cat = nil,&lt;br /&gt;
		doc = make_accel_documentation,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;^Module:inc%-ash.+$&amp;quot;] = {&lt;br /&gt;
		cat = &amp;quot;Ashokan Prakrit modules&amp;quot;,&lt;br /&gt;
		doc = function (title, cats)&lt;br /&gt;
			local word = title.fullText:match(&amp;quot;^Module:inc%-ash/dial/data/(.+)$&amp;quot;)&lt;br /&gt;
			if word then&lt;br /&gt;
				local lang = lang_cache[&amp;quot;inc-ash&amp;quot;]&lt;br /&gt;
				return (&amp;quot;This module contains data on the pronunciation of %s in dialects of %s.&amp;quot;)&lt;br /&gt;
					:format(require(&amp;quot;Module:links&amp;quot;).full_link({ term = word, lang = lang }, &amp;quot;term&amp;quot;),&lt;br /&gt;
						link_lang_cat(lang))&lt;br /&gt;
			end&lt;br /&gt;
		end,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;^Module:[%l-]+:Dialects$&amp;quot;] = {&lt;br /&gt;
		cat = nil,&lt;br /&gt;
		doc = function (title, cats)&lt;br /&gt;
			local content = title:getContent()&lt;br /&gt;
			local has_aliases = content:find(&amp;quot;aliases&amp;quot;) and true or false&lt;br /&gt;
			return mw.getCurrentFrame():expandTemplate {&lt;br /&gt;
				title = &amp;quot;dialectal data module&amp;quot;,&lt;br /&gt;
				args = { [&amp;quot;labels-aliases&amp;quot;] = has_aliases },&lt;br /&gt;
			}&lt;br /&gt;
		end,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;^.+%-translit$&amp;quot;] = {&lt;br /&gt;
		cat = nil,&lt;br /&gt;
		doc = function (title, cats)&lt;br /&gt;
			-- Check that the title begins in a language or script code.&lt;br /&gt;
			-- If so, expand {{translit module documentation}} with that code&lt;br /&gt;
			-- as the first parameter.&lt;br /&gt;
			local code = title.text:match(&amp;quot;^([%l-]+)-&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			if not (code and require(&amp;quot;Module:languages&amp;quot;).getByCode(code)) then&lt;br /&gt;
				code = title.text:match(&amp;quot;^(%u%l%l%l)%-&amp;quot;)&lt;br /&gt;
				if not require(&amp;quot;Module:scripts&amp;quot;).getByCode(code) then&lt;br /&gt;
					return&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			return mw.getCurrentFrame():expandTemplate {&lt;br /&gt;
				title = &amp;quot;translit module documentation&amp;quot;,&lt;br /&gt;
				args = { code },&lt;br /&gt;
			}&lt;br /&gt;
		end,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function export.show(frame)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[&amp;quot;hr&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;for&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;from&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;notsubpage&amp;quot;] = { type = &amp;quot;boolean&amp;quot;, default = false },&lt;br /&gt;
		[&amp;quot;nodoc&amp;quot;] = { type = &amp;quot;boolean&amp;quot;, default = false },&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(frame.args, params)&lt;br /&gt;
	&lt;br /&gt;
	local output = Array(&amp;#039;\n&amp;lt;div class=&amp;quot;documentation&amp;quot; style=&amp;quot;display:block; clear:both&amp;quot;&amp;gt;\n&amp;#039;)&lt;br /&gt;
	local cats = Array()&lt;br /&gt;
	&lt;br /&gt;
	local nodoc = args.nodoc&lt;br /&gt;
	&lt;br /&gt;
	if (not args.hr) or (args.hr == &amp;quot;above&amp;quot;) then&lt;br /&gt;
		output:insert(&amp;quot;----\n&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local title = ((args[&amp;#039;for&amp;#039;] ~= &amp;quot;&amp;quot;) and args[&amp;#039;for&amp;#039;]) and mw.title.new(args[&amp;#039;for&amp;#039;])&lt;br /&gt;
		or mw.title.getCurrentTitle()&lt;br /&gt;
	local doc_title = mw.title.new((args[&amp;#039;from&amp;#039;] ~= &amp;quot;&amp;quot;) and args[&amp;#039;from&amp;#039;]&lt;br /&gt;
		or (title.fullText .. &amp;#039;/documentation&amp;#039;))&lt;br /&gt;
	local contentModel = title.contentModel&lt;br /&gt;
	&lt;br /&gt;
	local pagetype = mw.getContentLanguage():lcfirst(title.nsText) .. &amp;quot; page&amp;quot;&lt;br /&gt;
	local preload, fallback_docs, doc_content, old_doc_title, user_name,&lt;br /&gt;
		skin_name, needs_doc&lt;br /&gt;
	&lt;br /&gt;
	if contentModel == &amp;quot;javascript&amp;quot; then&lt;br /&gt;
		pagetype = &amp;quot;script&amp;quot;&lt;br /&gt;
		if title.nsText == &amp;#039;MediaWiki&amp;#039; then&lt;br /&gt;
			if title.text:find(&amp;#039;Gadget-&amp;#039;) then&lt;br /&gt;
				preload = &amp;#039;Template:documentation/preloadGadget&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				preload = &amp;#039;Template:documentation/preloadMediaWikiJavaScript&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			preload  = &amp;#039;Template:documentation/preloadTemplate&amp;#039; -- XXX&lt;br /&gt;
		end&lt;br /&gt;
		if title.nsText == &amp;#039;User&amp;#039; then&lt;br /&gt;
			user_name = title.rootText	&lt;br /&gt;
		end&lt;br /&gt;
	elseif contentModel == &amp;quot;css&amp;quot; then&lt;br /&gt;
		pagetype = &amp;quot;style sheet&amp;quot;&lt;br /&gt;
		preload  = &amp;#039;Template:documentation/preloadTemplate&amp;#039; -- XXX&lt;br /&gt;
		if title.nsText == &amp;#039;User&amp;#039; then&lt;br /&gt;
			user_name = title.rootText	&lt;br /&gt;
		end&lt;br /&gt;
	elseif contentModel == &amp;quot;Scribunto&amp;quot; then&lt;br /&gt;
		pagetype = &amp;quot;module&amp;quot;&lt;br /&gt;
		user_name = title.rootText:match(&amp;quot;^[Uu]ser:(.+)&amp;quot;)&lt;br /&gt;
		if user_name then&lt;br /&gt;
			preload  = &amp;#039;Template:documentation/preloadModuleSandbox&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			preload  = &amp;#039;Template:documentation/preloadModule&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	elseif title.nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
		pagetype = &amp;quot;template&amp;quot;&lt;br /&gt;
		preload  = &amp;#039;Template:documentation/preloadTemplate&amp;#039;&lt;br /&gt;
	elseif title.nsText == &amp;quot;Wiktionary&amp;quot; then&lt;br /&gt;
		pagetype = &amp;quot;project page&amp;quot;&lt;br /&gt;
		preload  = &amp;#039;Template:documentation/preloadTemplate&amp;#039; -- XXX&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if doc_title.isRedirect then&lt;br /&gt;
		old_doc_title = doc_title&lt;br /&gt;
		doc_title = mw.title.new(string.match(doc_title:getContent(),&lt;br /&gt;
			&amp;quot;^#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]]-)%]%]&amp;quot;))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	output:insert(&amp;quot;&amp;lt;dl class=\&amp;quot;plainlinks\&amp;quot; style=\&amp;quot;font-size: smaller;\&amp;quot;&amp;gt;&amp;quot;)&lt;br /&gt;
	if doc_title.exists then&lt;br /&gt;
		output:insert(&lt;br /&gt;
			&amp;quot;&amp;lt;dd&amp;gt;&amp;lt;i style=\&amp;quot;font-size: larger;\&amp;quot;&amp;gt;The following &amp;quot; ..&lt;br /&gt;
			&amp;quot;[[Help:Documenting templates and modules|documentation]] is located at [[&amp;quot; ..&lt;br /&gt;
			doc_title.fullText .. &amp;quot;]]. &amp;quot; ..&lt;br /&gt;
			&amp;quot;&amp;lt;sup&amp;gt;[[&amp;quot; .. doc_title:fullUrl { action = &amp;#039;edit&amp;#039; } .. &amp;quot; edit]]&amp;lt;/sup&amp;gt; &amp;lt;/i&amp;gt;&amp;lt;/dd&amp;gt;&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		if contentModel == &amp;quot;Scribunto&amp;quot; then&lt;br /&gt;
			local automatic_cat&lt;br /&gt;
			if user_name then&lt;br /&gt;
				fallback_docs = &amp;#039;documentation/fallback/user module&amp;#039;&lt;br /&gt;
				automatic_cat = &amp;quot;User sandbox modules&amp;quot;&lt;br /&gt;
			else&lt;br /&gt;
				for r, data in pairs(module_regex) do &lt;br /&gt;
					if mw.ustring.find(title.fullText, r) then&lt;br /&gt;
						local cat&lt;br /&gt;
						if type(data) == &amp;quot;table&amp;quot; then&lt;br /&gt;
							doc_content = data.doc(title, cats)&lt;br /&gt;
							cat = data.cat&lt;br /&gt;
						else&lt;br /&gt;
							cat = data&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						if cat then&lt;br /&gt;
							automatic_cat = mw.ustring.gsub(title.fullText, r, cat)&lt;br /&gt;
						-- If the documentation function (cat.doc) manages to&lt;br /&gt;
						-- generate documentation, it should add a category.&lt;br /&gt;
						elseif doc_content then&lt;br /&gt;
							automatic_cat = nil&lt;br /&gt;
						end&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
				&lt;br /&gt;
			if not automatic_cat then&lt;br /&gt;
				local success, auto_cats =&lt;br /&gt;
					pcall(require(&amp;quot;Module:module categorization&amp;quot;).categorize, frame, true)&lt;br /&gt;
				if success then&lt;br /&gt;
					for _, category in ipairs(auto_cats) do&lt;br /&gt;
						cats:insert(category)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if title.subpageText == &amp;quot;templates&amp;quot; then&lt;br /&gt;
				cats:insert(&amp;quot;Template interface modules&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			cats:insert(automatic_cat)&lt;br /&gt;
			&lt;br /&gt;
			-- meaning module is not in user&amp;#039;s sandbox or one of many datamodule boring series&lt;br /&gt;
			needs_doc = not (automatic_cat or doc_content or fallback_docs)&lt;br /&gt;
		elseif title.nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
			--cats:insert(&amp;quot;Uncategorized templates&amp;quot;)&lt;br /&gt;
			needs_doc = not (fallback_docs or nodoc)&lt;br /&gt;
		elseif (contentModel == &amp;quot;css&amp;quot;) or (contentModel == &amp;quot;javascript&amp;quot;) then&lt;br /&gt;
			if user_name then&lt;br /&gt;
				skin_name = skins[title.text:sub(#title.rootText + 1):match(&amp;quot;^/([a-z]+)%.[jc]ss?$&amp;quot;)]&lt;br /&gt;
				if skin_name then&lt;br /&gt;
					fallback_docs = &amp;#039;documentation/fallback/user &amp;#039; .. contentModel&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if doc_content then&lt;br /&gt;
			output:insert(&lt;br /&gt;
				&amp;quot;&amp;lt;dd&amp;gt;&amp;lt;i style=\&amp;quot;font-size: larger;\&amp;quot;&amp;gt;The following &amp;quot; ..&lt;br /&gt;
				&amp;quot;[[Help:Documenting templates and modules|documentation]] is &amp;quot; ..&lt;br /&gt;
				&amp;quot;generated by [[Module:documentation]]. &amp;lt;sup&amp;gt;[[&amp;quot; ..&lt;br /&gt;
				mw.title.new(&amp;quot;Module:documentation&amp;quot;):fullUrl { action = &amp;#039;edit&amp;#039; } ..&lt;br /&gt;
				&amp;quot; edit]]&amp;lt;/sup&amp;gt; &amp;lt;/i&amp;gt;&amp;lt;/dd&amp;gt;&amp;quot;)&lt;br /&gt;
		elseif not nodoc then&lt;br /&gt;
			output:insert(&lt;br /&gt;
				&amp;quot;&amp;lt;dd&amp;gt;&amp;lt;i style=\&amp;quot;font-size: larger;\&amp;quot;&amp;gt;This &amp;quot; .. pagetype ..&lt;br /&gt;
				&amp;quot; lacks a [[Help:Documenting templates and modules|documentation subpage]]. &amp;quot; ..&lt;br /&gt;
				(fallback_docs and &amp;quot;You may &amp;quot; or &amp;quot;Please &amp;quot;) ..&lt;br /&gt;
				&amp;quot;[&amp;quot; .. doc_title:fullUrl { action = &amp;#039;edit&amp;#039;, preload = preload }&lt;br /&gt;
				.. &amp;quot; create it].&amp;lt;/i&amp;gt;&amp;lt;/dd&amp;gt;\n&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if title.fullText:match(&amp;quot;^MediaWiki:Gadget%-&amp;quot;) then&lt;br /&gt;
		local is_gadget = false&lt;br /&gt;
		local gadget_list = mw.title.new(&amp;quot;MediaWiki:Gadgets-definition&amp;quot;):getContent()&lt;br /&gt;
		&lt;br /&gt;
		for line in mw.text.gsplit(gadget_list, &amp;quot;\n&amp;quot;) do&lt;br /&gt;
			local gadget, opts, items = line:match(&amp;quot;^%*%s*([A-Za-z][A-Za-z0-9_%-]*)%[(.-)%]|(.+)$&amp;quot;) -- opts is unused&lt;br /&gt;
			if not gadget then&lt;br /&gt;
				gadget, items = line:match(&amp;quot;^%*%s*([A-Za-z][A-Za-z0-9_%-]*)|(.+)$&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if gadget then&lt;br /&gt;
				items = Array(mw.text.split(items, &amp;quot;|&amp;quot;))&lt;br /&gt;
				for i, item in ipairs(items) do&lt;br /&gt;
					if title.fullText == (&amp;quot;MediaWiki:Gadget-&amp;quot; .. item) then&lt;br /&gt;
						is_gadget = true&lt;br /&gt;
&lt;br /&gt;
						output:insert(&amp;quot;&amp;lt;dd&amp;gt; &amp;#039;&amp;#039;This script is a part of the &amp;lt;code&amp;gt;&amp;quot;)&lt;br /&gt;
						output:insert(gadget)&lt;br /&gt;
						output:insert(&amp;quot;&amp;lt;/code&amp;gt; gadget ([&amp;quot;)&lt;br /&gt;
						output:insert(tostring(mw.uri.fullUrl(&amp;#039;MediaWiki:Gadgets-definition&amp;#039;, &amp;#039;action=edit&amp;#039;)))&lt;br /&gt;
						output:insert(&amp;quot; edit definitions])&amp;#039;&amp;#039; &amp;lt;dl&amp;gt;&amp;quot;)&lt;br /&gt;
						&lt;br /&gt;
						output:insert(&amp;quot;&amp;lt;dd&amp;gt; &amp;#039;&amp;#039;Description ([&amp;quot;)&lt;br /&gt;
						output:insert(tostring(mw.uri.fullUrl(&amp;#039;MediaWiki:Gadget-&amp;#039; .. gadget, &amp;#039;action=edit&amp;#039;)))&lt;br /&gt;
						output:insert(&amp;quot; edit])&amp;#039;&amp;#039;: &amp;quot;)&lt;br /&gt;
						&lt;br /&gt;
						local gadget_description = mw.message.new(&amp;#039;Gadget-&amp;#039; .. gadget):plain()&lt;br /&gt;
						gadget_description = frame:preprocess(gadget_description)&lt;br /&gt;
						output:insert(gadget_description)&lt;br /&gt;
						output:insert(&amp;quot; &amp;lt;/dd&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
						items:remove(i)&lt;br /&gt;
						if #items &amp;gt; 0 then&lt;br /&gt;
							for j, item in ipairs(items) do&lt;br /&gt;
								items[j] = &amp;#039;[[MediaWiki:Gadget-&amp;#039; .. item .. &amp;#039;|&amp;#039; .. item .. &amp;#039;]]&amp;#039;&lt;br /&gt;
							end&lt;br /&gt;
							output:insert(&amp;quot;&amp;lt;dd&amp;gt; &amp;#039;&amp;#039;Other parts&amp;#039;&amp;#039;: &amp;quot;)&lt;br /&gt;
							output:insert(mw.text.listToText(items))&lt;br /&gt;
							output:insert(&amp;quot;&amp;lt;/dd&amp;gt;&amp;quot;)&lt;br /&gt;
						end&lt;br /&gt;
&lt;br /&gt;
						output:insert(&amp;quot;&amp;lt;/dl&amp;gt;&amp;lt;/dd&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if not is_gadget then&lt;br /&gt;
			output:insert(&amp;quot;&amp;lt;dd&amp;gt; &amp;#039;&amp;#039;This script is not a part of any [&amp;quot;)&lt;br /&gt;
			output:insert(tostring(mw.uri.fullUrl(&amp;#039;Special:Gadgets&amp;#039;, &amp;#039;uselang=en&amp;#039;)))&lt;br /&gt;
			output:insert(&amp;#039; gadget] ([&amp;#039;)&lt;br /&gt;
			output:insert(tostring(mw.uri.fullUrl(&amp;#039;MediaWiki:Gadgets-definition&amp;#039;, &amp;#039;action=edit&amp;#039;)))&lt;br /&gt;
			output:insert(&amp;#039; edit definitions]).&amp;lt;/dd&amp;gt;&amp;#039;)&lt;br /&gt;
		-- else&lt;br /&gt;
			-- cats:insert(&amp;quot;Wiktionary gadgets&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
	&lt;br /&gt;
	if old_doc_title then&lt;br /&gt;
		output:insert(&amp;quot;&amp;lt;dd&amp;gt; &amp;#039;&amp;#039;Redirected from&amp;#039;&amp;#039; [&amp;quot;)&lt;br /&gt;
		output:insert(old_doc_title:fullUrl { redirect = &amp;#039;no&amp;#039; })&lt;br /&gt;
		output:insert(&amp;quot; &amp;quot;)&lt;br /&gt;
		output:insert(old_doc_title.fullText)&lt;br /&gt;
		output:insert(&amp;quot;] ([&amp;quot;)&lt;br /&gt;
		output:insert(old_doc_title:fullUrl { action = &amp;#039;edit&amp;#039; })&lt;br /&gt;
		output:insert(&amp;quot; edit]).&amp;lt;/dd&amp;gt;\n&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local links = Array()&lt;br /&gt;
	&lt;br /&gt;
	if title.isSubpage and not args.notsubpage then&lt;br /&gt;
		links:insert(&amp;quot;[[:&amp;quot; .. title.nsText .. &amp;quot;:&amp;quot; .. title.rootText .. &amp;quot;|root page]]&amp;quot;)&lt;br /&gt;
		links:insert(&amp;quot;[[Special:PrefixIndex/&amp;quot; .. title.nsText .. &amp;quot;:&amp;quot; .. title.rootText .. &amp;quot;/|root page&amp;#039;s subpages]]&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		links:insert(&amp;quot;[[Special:PrefixIndex/&amp;quot; .. title.fullText .. &amp;quot;/|subpage list]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if (contentModel == &amp;quot;javascript&amp;quot;) or (contentModel == &amp;quot;css&amp;quot;) then&lt;br /&gt;
		links:insert(&amp;quot;[[Special:WhatLinksHere/&amp;quot; .. title.fullText .. &amp;quot;|what links here]]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		if user_name then&lt;br /&gt;
			links:insert(&amp;quot;[[Special:MyPage&amp;quot; .. title.text:sub(#title.rootText + 1) .. &amp;quot;|your own]]&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		links:insert(&lt;br /&gt;
			&amp;#039;[&amp;#039; .. tostring(mw.uri.fullUrl(&amp;#039;Special:WhatLinksHere/&amp;#039; .. title.fullText,&lt;br /&gt;
				&amp;#039;hidelinks=1&amp;amp;hideredirs=1&amp;#039;)) .. &amp;#039; transclusions]&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		if contentModel ~= &amp;quot;Scribunto&amp;quot; then&lt;br /&gt;
			links:insert(&lt;br /&gt;
				&amp;#039;[&amp;#039; .. tostring(mw.uri.fullUrl(&amp;#039;Special:WhatLinksHere/&amp;#039; .. title.fullText,&lt;br /&gt;
				&amp;#039;hidelinks=1&amp;amp;hidetrans=1&amp;#039;)) .. &amp;#039; redirects]&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if contentModel == &amp;quot;Scribunto&amp;quot; then&lt;br /&gt;
		local is_testcases = title.isSubpage and title.subpageText == &amp;quot;testcases&amp;quot;&lt;br /&gt;
		local without_subpage = title.nsText .. &amp;quot;:&amp;quot; .. title.baseText&lt;br /&gt;
		if is_testcases then&lt;br /&gt;
			links:insert(&amp;quot;[[:&amp;quot; .. without_subpage .. &amp;quot;|tested module]]&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			links:insert(&amp;quot;[[&amp;quot; .. title.fullText .. &amp;quot;/testcases|testcases]]&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if user_name then&lt;br /&gt;
			links:insert(&amp;quot;[[User:&amp;quot; .. user_name .. &amp;quot;|user page]]&amp;quot;)&lt;br /&gt;
			links:insert(&amp;quot;[[User talk:&amp;quot; .. user_name .. &amp;quot;|user talk page]]&amp;quot;)&lt;br /&gt;
			links:insert(&amp;quot;[[Special:PrefixIndex/User:&amp;quot; .. user_name .. &amp;quot;/|userspace]]&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			-- If sandbox module, add a link to the module that this is a sandbox of.&lt;br /&gt;
			-- Exclude user sandbox modules like [[User:Dine2016/sandbox]].&lt;br /&gt;
			if title.text:find(&amp;quot;/sandbox%d*%f[/%z]&amp;quot;) then&lt;br /&gt;
				cats:insert(&amp;quot;Sandbox modules&amp;quot;)&lt;br /&gt;
				&lt;br /&gt;
				-- Sandbox modules don&amp;#039;t really need documentation.&lt;br /&gt;
				needs_doc = false&lt;br /&gt;
				&lt;br /&gt;
				-- Will behave badly if &amp;quot;/sandbox&amp;quot; occurs twice in title!&lt;br /&gt;
				local sandbox_of = title.fullText:gsub(&amp;quot;/sandbox%d*%f[/%z]&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
				&lt;br /&gt;
				local diff&lt;br /&gt;
				if page_exists(sandbox_of) then&lt;br /&gt;
					diff = &amp;quot; (&amp;quot; .. compare_pages(title.fullText, sandbox_of, &amp;quot;diff&amp;quot;) .. &amp;quot;)&amp;quot;&lt;br /&gt;
				else&lt;br /&gt;
					require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;documentation/no sandbox of&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				links:insert(&amp;quot;[[:&amp;quot; .. sandbox_of .. &amp;quot;|sandbox of]]&amp;quot; .. (diff or &amp;quot;&amp;quot;))&lt;br /&gt;
			&lt;br /&gt;
			-- If not a sandbox module, add link to sandbox module.&lt;br /&gt;
			-- Sometimes there are multiple sandboxes for a single module:&lt;br /&gt;
			-- [[Module:sa-pronunc/sandbox]],  [[Module:sa-pronunc/sandbox2]].&lt;br /&gt;
			-- Occasionally sandbox modules have their own subpages that are also&lt;br /&gt;
			-- sandboxes: [[Module:grc-decl/sandbox/decl]].&lt;br /&gt;
			else&lt;br /&gt;
				local sandbox_title&lt;br /&gt;
				if title.fullText:find(&amp;quot;^Module:grc%-decl/&amp;quot;) then&lt;br /&gt;
					sandbox_title = title.fullText:gsub(&amp;quot;^Module:grc%-decl/&amp;quot;, &amp;quot;Module:grc-decl/sandbox/&amp;quot;)&lt;br /&gt;
				elseif is_testcases then&lt;br /&gt;
					sandbox_title = title.fullText:gsub(&amp;quot;/testcases&amp;quot;, &amp;quot;/sandbox/testcases&amp;quot;)&lt;br /&gt;
				else&lt;br /&gt;
					sandbox_title = title.fullText .. &amp;quot;/sandbox&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
				local sandbox_link = &amp;quot;[[:&amp;quot; .. sandbox_title .. &amp;quot;|sandbox]]&amp;quot;&lt;br /&gt;
				&lt;br /&gt;
				local diff&lt;br /&gt;
				if page_exists(sandbox_title) then&lt;br /&gt;
					diff = &amp;quot; (&amp;quot; .. compare_pages(title.fullText, sandbox_title, &amp;quot;diff&amp;quot;) .. &amp;quot;)&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				links:insert(sandbox_link .. (diff or &amp;quot;&amp;quot;))&lt;br /&gt;
			end	&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if title.nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
		if title.isSubpage and title.text:find(&amp;quot;/sandbox%d*%f[/%z]&amp;quot;) then -- This is a sandbox template.&lt;br /&gt;
			-- At the moment there are no user sandbox templates with subpage&lt;br /&gt;
			-- &amp;quot;/sandbox&amp;quot;.&lt;br /&gt;
			cats:insert(&amp;quot;Sandbox templates&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			-- Sandbox templates don&amp;#039;t really need documentation.&lt;br /&gt;
			needs_doc = false&lt;br /&gt;
			&lt;br /&gt;
			-- Will behave badly if &amp;quot;/sandbox&amp;quot; occurs twice in title!&lt;br /&gt;
			local sandbox_of = title.fullText:gsub(&amp;quot;/sandbox%d*%f[/%z]&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			local diff&lt;br /&gt;
			if page_exists(sandbox_of) then&lt;br /&gt;
				diff = &amp;quot; (&amp;quot; .. compare_pages(title.fullText, sandbox_of, &amp;quot;diff&amp;quot;) .. &amp;quot;)&amp;quot;&lt;br /&gt;
			else&lt;br /&gt;
				require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;documentation/no sandbox of&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			links:insert(&amp;quot;[[:&amp;quot; .. sandbox_of .. &amp;quot;|sandbox of]]&amp;quot; .. (diff or &amp;quot;&amp;quot;))&lt;br /&gt;
		else -- This is a template that can have a sandbox.&lt;br /&gt;
			local sandbox_title = title.fullText .. &amp;quot;/sandbox&amp;quot;&lt;br /&gt;
			&lt;br /&gt;
			local diff&lt;br /&gt;
			if page_exists(sandbox_title) then&lt;br /&gt;
				diff = &amp;quot; (&amp;quot; .. compare_pages(title.fullText, sandbox_title, &amp;quot;diff&amp;quot;) .. &amp;quot;)&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			links:insert(&amp;quot;[[:&amp;quot; .. sandbox_title .. &amp;quot;|sandbox]]&amp;quot; .. (diff or &amp;quot;&amp;quot;))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if #links &amp;gt; 0 then&lt;br /&gt;
		output:insert(&amp;quot;&amp;lt;dd&amp;gt; &amp;#039;&amp;#039;Useful links&amp;#039;&amp;#039;: &amp;quot; .. links:concat(&amp;quot; • &amp;quot;) .. &amp;quot;&amp;lt;/dd&amp;gt;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	output:insert(&amp;quot;&amp;lt;/dl&amp;gt;\n&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	if doc_title.exists then&lt;br /&gt;
		-- Override automatic documentation, if present.&lt;br /&gt;
		doc_content = frame:expandTemplate { title = doc_title.fullText }&lt;br /&gt;
	elseif not doc_content and fallback_docs then&lt;br /&gt;
		doc_content = frame:expandTemplate {&lt;br /&gt;
			title = fallback_docs;&lt;br /&gt;
			args = {&lt;br /&gt;
				[&amp;#039;user&amp;#039;] = user_name;&lt;br /&gt;
				[&amp;#039;page&amp;#039;] = title.fullText;&lt;br /&gt;
				[&amp;#039;skin name&amp;#039;] = skin_name;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if doc_content then&lt;br /&gt;
		output:insert(doc_content)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	output:insert((&amp;#039;\n&amp;lt;%s style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&amp;#039;):format(args.hr == &amp;quot;below&amp;quot; and &amp;quot;hr&amp;quot; or &amp;quot;br&amp;quot;))&lt;br /&gt;
	&lt;br /&gt;
	if not cats[1] and not doc_content then&lt;br /&gt;
		if contentModel == &amp;quot;Scribunto&amp;quot; then&lt;br /&gt;
			cats:insert(&amp;quot;Uncategorized modules&amp;quot;)&lt;br /&gt;
		-- elseif title.nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
			-- cats:insert(&amp;quot;Uncategorized templates&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if needs_doc then&lt;br /&gt;
		cats:insert(&amp;quot;Templates and modules needing documentation&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for _, cat in ipairs(cats) do&lt;br /&gt;
		output:insert(&amp;quot;[[Category:&amp;quot; .. cat .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	output:insert(&amp;quot;&amp;lt;/div&amp;gt;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	return output:concat()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Used by {{translit module documentation}}.&lt;br /&gt;
function export.translitModuleLangList(frame)&lt;br /&gt;
	local pagename, subpage&lt;br /&gt;
	&lt;br /&gt;
	if frame.args[1] then&lt;br /&gt;
		pagename = frame.args[1]&lt;br /&gt;
	else&lt;br /&gt;
		local title = mw.title.getCurrentTitle()&lt;br /&gt;
		subpage = title.subpageText&lt;br /&gt;
		pagename = title.text&lt;br /&gt;
		&lt;br /&gt;
		if subpage ~= pagename then&lt;br /&gt;
			pagename = title.rootText&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local translitModule = pagename&lt;br /&gt;
	&lt;br /&gt;
	local languageObjects = require(&amp;quot;Module:languages/byTranslitModule&amp;quot;)(translitModule)&lt;br /&gt;
	local codeInPagename = pagename:match(&amp;quot;^([%l-]+)%-.*translit$&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local categories = require(&amp;quot;Module:array&amp;quot;)()&lt;br /&gt;
	local langs = {}&lt;br /&gt;
	if codeInPagename then&lt;br /&gt;
		local codeInPagenameInList = false&lt;br /&gt;
		if languageObjects[1] and subpage ~= &amp;quot;documentation&amp;quot; then&lt;br /&gt;
			local agreement = languageObjects[2] and &amp;quot;s&amp;quot; or &amp;quot;&amp;quot;&lt;br /&gt;
			categories:insert(&amp;quot;[[Category:Transliteration modules used by &amp;quot; ..&lt;br /&gt;
				#languageObjects .. &amp;quot; language&amp;quot; .. agreement .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		for i, lang in ipairs(languageObjects) do&lt;br /&gt;
			if lang:getCode() == codeInPagename then&lt;br /&gt;
				table.remove(languageObjects, i)&lt;br /&gt;
				codeInPagenameInList = true&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for script_code in pagename:gmatch(&amp;quot;%f[^-%z]%u%l%l%l%f[-]&amp;quot;) do&lt;br /&gt;
		local script = require &amp;quot;Module:scripts&amp;quot;.getByCode(script_code)&lt;br /&gt;
		if script then&lt;br /&gt;
			categories:insert(&amp;quot;[[Category:&amp;quot; .. script:getCategoryName() .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if subpage ~= &amp;quot;documentation&amp;quot; and not page_exists(&amp;quot;Module:&amp;quot; .. pagename .. &amp;quot;/testcases&amp;quot;) then&lt;br /&gt;
		categories:insert(&amp;quot;[[Category:Transliteration modules without a testcases subpage]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- TODO: Use serialCommaJoin in [[Module:table]].&lt;br /&gt;
	if not languageObjects[1] then&lt;br /&gt;
		return categories:concat()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.sort(languageObjects,&lt;br /&gt;
		function(lang1, lang2)&lt;br /&gt;
			return lang1:getCode() &amp;lt; lang2:getCode()&lt;br /&gt;
		end)&lt;br /&gt;
	if languageObjects[3] then&lt;br /&gt;
		for i, lang in ipairs(languageObjects) do&lt;br /&gt;
			table.insert(langs, link_lang_cat(lang))&lt;br /&gt;
			if languageObjects[i + 2] then&lt;br /&gt;
				table.insert(langs, &amp;quot;, &amp;quot;)&lt;br /&gt;
			elseif languageObjects[i + 1] then&lt;br /&gt;
				table.insert(langs, &amp;#039;&amp;lt;span class=&amp;quot;serial-comma&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; and &amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		for i, lang in ipairs(languageObjects) do&lt;br /&gt;
			table.insert(langs, link_lang_cat(lang))&lt;br /&gt;
			&lt;br /&gt;
			if languageObjects[i + 1] then&lt;br /&gt;
				table.insert(langs, &amp;quot; and &amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	langs = table.concat(langs)&lt;br /&gt;
	&lt;br /&gt;
	return &amp;quot;It is &amp;quot; .. ( codeInPagenameInList and &amp;quot;also&amp;quot; or &amp;quot;&amp;quot; ) ..&lt;br /&gt;
		&amp;quot; used to transliterate &amp;quot; .. langs .. &amp;quot;.&amp;quot; .. categories:concat()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>Bob&gt;Djpwikiadmin</name></author>
	</entry>
</feed>