<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://naija.elizia.net/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="http://naija.elizia.net/index.php?action=history&amp;feed=atom&amp;title=Module%3ADocumentation"/>
	<link rel="alternate" type="text/html" href="http://naija.elizia.net/index.php?title=Module:Documentation&amp;action=history"/>
	<updated>2026-10-19T07:38:16Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.0-rc.0</generator>
	<entry>
		<id>http://naija.elizia.net/index.php?title=Module:Documentation&amp;diff=370&amp;oldid=prev</id>
		<title>Root: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="http://naija.elizia.net/index.php?title=Module:Documentation&amp;diff=370&amp;oldid=prev"/>
		<updated>2020-08-07T14:37:13Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&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 14:37, 7 August 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&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;/table&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>http://naija.elizia.net/index.php?title=Module:Documentation&amp;diff=369&amp;oldid=prev</id>
		<title>Mediawiki&gt;J3133 at 05:11, 8 July 2020</title>
		<link rel="alternate" type="text/html" href="http://naija.elizia.net/index.php?title=Module:Documentation&amp;diff=369&amp;oldid=prev"/>
		<updated>2020-07-08T05:11:00Z</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;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 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_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(lang:makeCategoryLink())&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’t unnecessarily cluttered.&lt;br /&gt;
-- It is a list of tables, each of which have three possible fields:&lt;br /&gt;
&lt;br /&gt;
-- The “regex” field is required. It is a Lua pattern to match the module’s&lt;br /&gt;
-- title. If it matches, the data will be used. If the pattern contains one&lt;br /&gt;
-- capture, and a category has been specified, the capture will be used as a&lt;br /&gt;
-- sortkey.&lt;br /&gt;
&lt;br /&gt;
-- The “doc” field is required. This may be a function or a&lt;br /&gt;
-- string. If it is a function, it receives a title and an array (see&lt;br /&gt;
-- [[Module:array]]) of categories that will be added to the documentation as&lt;br /&gt;
-- its first and second arguments, and may return a string, which will be used&lt;br /&gt;
-- as documentation. If it is a string, it is the name of a submodule under&lt;br /&gt;
-- “Module:documentation/functions/” which returns a function, of the same type&lt;br /&gt;
-- as described above.&lt;br /&gt;
&lt;br /&gt;
-- The “cat” field is optional. It is a category in which the module should be&lt;br /&gt;
-- placed. The inner part of the category link is generated as follows:&lt;br /&gt;
-- mw.ustring.gsub(full_title, cat_field)&lt;br /&gt;
-- So if the “cat” field is present, the “regex” field should match the whole&lt;br /&gt;
-- title, and if there is “|%1” at the end of the “cat” field, for a sortkey,&lt;br /&gt;
-- there should be one capture in the “regex” field.&lt;br /&gt;
local module_regex = {&lt;br /&gt;
	{&lt;br /&gt;
		regex = &amp;quot;^Module:languages/.+$&amp;quot;,&lt;br /&gt;
		cat = &amp;quot;Modules dealing with languages and scripts&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		regex = &amp;quot;^Module:scripts/.+$&amp;quot;,&lt;br /&gt;
		cat = &amp;quot;Modules dealing with languages and scripts&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		regex = &amp;quot;^Module:data tables/data..?.?.?$&amp;quot;,&lt;br /&gt;
		cat = &amp;quot;Reference module sharded data tables&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		regex = &amp;quot;^Module:Quotations/...?.?.?.?.?.?$&amp;quot;,&lt;br /&gt;
		cat = &amp;quot;Quotation data modules&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		regex = &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 = &amp;quot;zh dial or syn&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		regex = &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 = &amp;quot;zh dial or syn&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		regex = &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 = function(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;
	{&lt;br /&gt;
		regex = &amp;quot;^Module:zh/data/ltc%-pron/(.+)$&amp;quot;,&lt;br /&gt;
		cat = &amp;quot;Middle Chinese pronunciation data modules|%1&amp;quot;,&lt;br /&gt;
		doc = &amp;quot;zh data&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		regex = &amp;quot;^Module:zh/data/och%-pron%-BS/(.+)$&amp;quot;,&lt;br /&gt;
		cat = &amp;quot;Old Chinese (Baxter-Sagart) pronunciation data modules|%1&amp;quot;,&lt;br /&gt;
		doc = &amp;quot;zh data&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		regex = &amp;quot;^Module:zh/data/och%-pron%-ZS/(.+)$&amp;quot;,&lt;br /&gt;
		cat = &amp;quot;Old Chinese (Zhengzhang) pronunciation data modules|%1&amp;quot;,&lt;br /&gt;
		doc = &amp;quot;zh data&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	-- capture rest of zh/data submodules&lt;br /&gt;
	{&lt;br /&gt;
		regex = &amp;quot;^Module:zh/data/(.+)$&amp;quot;,&lt;br /&gt;
		cat = &amp;quot;Chinese data modules|%1&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		regex = &amp;quot;^Module:mul/guoxue%-data/cjk%-?(.*)$&amp;quot;,&lt;br /&gt;
		cat = nil,&lt;br /&gt;
		doc = &amp;quot;guoxue-data&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		regex = &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;
	{&lt;br /&gt;
		regex = &amp;quot;^Module:number list/data/(.+)$&amp;quot;,&lt;br /&gt;
		cat = nil, -- category added by doc function&lt;br /&gt;
		doc = &amp;quot;number list&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		regex = &amp;quot;^Module:es%-conj/data/(.+)$&amp;quot;,&lt;br /&gt;
		cat = &amp;quot;Spanish data modules|%1&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		regex = &amp;quot;^Module:accel/(.+)$&amp;quot;,&lt;br /&gt;
		cat = nil,&lt;br /&gt;
		doc = make_accel_documentation,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		regex = &amp;quot;^Module:inc%-ash/dial/data/(.+)$&amp;quot;,&lt;br /&gt;
		cat = &amp;quot;Ashokan Prakrit modules|%1&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;
						lang:makeCategoryLink())&lt;br /&gt;
			end&lt;br /&gt;
		end,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		regex = &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;) ~= nil&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;
	{&lt;br /&gt;
		regex = &amp;quot;^.+%-translit$&amp;quot;,&lt;br /&gt;
		cat = nil,&lt;br /&gt;
		doc = &amp;quot;translit&amp;quot;,&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, doc_content_module,&lt;br /&gt;
		old_doc_title, user_name, 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 _, data in ipairs(module_regex) do&lt;br /&gt;
					if mw.ustring.find(title.fullText, data.regex) then&lt;br /&gt;
						local cat&lt;br /&gt;
						local doc_function&lt;br /&gt;
						if type(data.doc) == &amp;quot;function&amp;quot; then&lt;br /&gt;
							doc_function = data.doc&lt;br /&gt;
						elseif type(data.doc) == &amp;quot;string&amp;quot; then&lt;br /&gt;
							doc_content_module = &amp;quot;Module:documentation/functions/&amp;quot; .. data.doc&lt;br /&gt;
							doc_function = require(doc_content_module)&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						if doc_function then&lt;br /&gt;
							doc_content = doc_function(title, cats)&lt;br /&gt;
						end&lt;br /&gt;
						cat = data.cat&lt;br /&gt;
						&lt;br /&gt;
						if cat then&lt;br /&gt;
							automatic_cat = mw.ustring.gsub(title.fullText, data.regex, 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’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 [[&amp;quot; .. (doc_content_module or &amp;quot;Module:documentation&amp;quot;) .. &amp;quot;]]. &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’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;
	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;hidetrans=1&amp;amp;hideredirs=1&amp;#039;)) .. &amp;#039; links]&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;
&lt;br /&gt;
	if (contentModel == &amp;quot;javascript&amp;quot;) or (contentModel == &amp;quot;css&amp;quot;) then&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;
	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’t really need documentation.&lt;br /&gt;
				needs_doc = false&lt;br /&gt;
				&lt;br /&gt;
				-- Will behave badly if “/sandbox” 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;
			-- “/sandbox”.&lt;br /&gt;
			cats:insert(&amp;quot;Sandbox templates&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			-- Sandbox templates don’t really need documentation.&lt;br /&gt;
			needs_doc = false&lt;br /&gt;
			&lt;br /&gt;
			-- Will behave badly if “/sandbox” 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 = Array()&lt;br /&gt;
	local codeInPagenameInList = false&lt;br /&gt;
	if codeInPagename then&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;
		languageObjects = Array(languageObjects)&lt;br /&gt;
			:filter(&lt;br /&gt;
				function (lang)&lt;br /&gt;
					local result = lang:getCode() ~= codeInPagename&lt;br /&gt;
					codeInPagenameInList = codeInPagenameInList or result&lt;br /&gt;
					return result&lt;br /&gt;
				end)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if subpage ~= &amp;quot;documentation&amp;quot; then&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;
	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;
	if not languageObjects[1] then&lt;br /&gt;
		return categories:concat()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local langs = Array(languageObjects)&lt;br /&gt;
		:sort(&lt;br /&gt;
			function(lang1, lang2)&lt;br /&gt;
				return lang1:getCode() &amp;lt; lang2:getCode()&lt;br /&gt;
			end)&lt;br /&gt;
		-- This will not error because languageObjects is not empty.&lt;br /&gt;
		:map(languageObjects[1].makeCategoryLink)&lt;br /&gt;
		:serial_comma_join()&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>Mediawiki&gt;J3133</name></author>
	</entry>
</feed>