<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>st34an test wiki  - Recent changes [en]</title>
		<link>https://test.st34an.tech/index.php?title=Special:RecentChanges</link>
		<description>Track the most recent changes to the wiki in this feed.</description>
		<language>en</language>
		<generator>MediaWiki 1.45.3</generator>
		<lastBuildDate>Fri, 10 Apr 2026 17:33:10 GMT</lastBuildDate>
		<item>
			<title>Module:Category tree/poscatboiler/data/lang-specific/chak</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/lang-specific/chak&amp;diff=125&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/lang-specific/chak&amp;diff=125&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/lang-specific/chak&quot; title=&quot;Module:Category tree/poscatboiler/data/lang-specific/chak&quot;&gt;Module:Category tree/poscatboiler/data/lang-specific/chak&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;root modifiers&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} suffixes that add additional meaning to roots.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;suffixes&amp;quot;},&lt;br /&gt;
	breadcrumb = &amp;quot;root modifiers&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms by root modifier&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms categorized by the modifier added to the root.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by etymology&amp;quot;, {name = &amp;quot;root modifiers&amp;quot;, sort = &amp;quot; &amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:58 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/lang-specific/chak</comments>
		</item>
		<item>
			<title>Module:Table/listToSet</title>
			<link>https://test.st34an.tech/index.php?title=Module:Table/listToSet&amp;diff=123&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Table/listToSet&amp;diff=123&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Table/listToSet&quot; title=&quot;Module:Table/listToSet&quot;&gt;Module:Table/listToSet&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
	{ &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot; } -&amp;gt; { [&amp;quot;a&amp;quot;] = true, [&amp;quot;b&amp;quot;] = true, [&amp;quot;c&amp;quot;] = true }&lt;br /&gt;
--]]&lt;br /&gt;
return function(t)&lt;br /&gt;
	-- checkType(&amp;quot;listToSet&amp;quot;, 1, t, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local set = {}&lt;br /&gt;
	for _, item in ipairs(t) do&lt;br /&gt;
		set[item] = true&lt;br /&gt;
	end&lt;br /&gt;
	return set&lt;br /&gt;
end&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:58 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Table/listToSet</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/words by number of syllables</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/words_by_number_of_syllables&amp;diff=121&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/words_by_number_of_syllables&amp;diff=121&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/words_by_number_of_syllables&quot; title=&quot;Module:Category tree/poscatboiler/data/words by number of syllables&quot;&gt;Module:Category tree/poscatboiler/data/words by number of syllables&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
local handlers = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;words by number of syllables&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} words categorized by number of syllables.&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Terms by lexical property subcategories by language&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by phonemic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Words by number of syllables subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering topics related to words categorized by their number of syllables.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;words by number of syllables&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                 HANDLERS                                --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.insert(handlers, function(data)&lt;br /&gt;
	local number = data.label:match(&amp;quot;^([1-9][0-9]*)%-syllable words$&amp;quot;)&lt;br /&gt;
	if number then&lt;br /&gt;
		return {&lt;br /&gt;
			description =&lt;br /&gt;
				number == &amp;quot;1&amp;quot; and &amp;quot;{{{langname}}} words that are pronounced in &amp;quot; .. number .. &amp;quot; syllable.&amp;quot; or&lt;br /&gt;
					&amp;quot;{{{langname}}} words that are pronounced in &amp;quot; .. number .. &amp;quot; syllables.&amp;quot;,&lt;br /&gt;
			breadcrumb = number,&lt;br /&gt;
			umbrella_parents = &amp;quot;Words by number of syllables subcategories by language&amp;quot;,&lt;br /&gt;
			parents = {{&lt;br /&gt;
				name = &amp;quot;words by number of syllables&amp;quot;,&lt;br /&gt;
				sort = (&amp;quot;#%02d&amp;quot;):format(number),&lt;br /&gt;
			}},&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, RAW_CATEGORIES = raw_categories, HANDLERS = handlers}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:58 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/words_by_number_of_syllables</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/word of the day</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/word_of_the_day&amp;diff=119&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/word_of_the_day&amp;diff=119&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/word_of_the_day&quot; title=&quot;Module:Category tree/poscatboiler/data/word of the day&quot;&gt;Module:Category tree/poscatboiler/data/word of the day&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local raw_categories = {}&lt;br /&gt;
local raw_handlers = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Foreign words of the day by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Categories with foreign words of day in various languages.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Category:Foreign word of the day archive&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	breadcrumb = &amp;quot;Foreign words of the day by language&amp;quot;,&lt;br /&gt;
	hidden = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                RAW HANDLERS                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.insert(raw_handlers, function(data)&lt;br /&gt;
	local langname = data.category:match(&amp;quot;^Foreign words of the day in (.*)$&amp;quot;)&lt;br /&gt;
	if langname then&lt;br /&gt;
		local lang = require(&amp;quot;Module:languages&amp;quot;).getByCanonicalName(langname, true)&lt;br /&gt;
		return {&lt;br /&gt;
			lang = lang:getCode(),&lt;br /&gt;
			description = &amp;quot;Foreign words of the day in &amp;quot; .. lang:makeCategoryLink() .. &amp;quot;.&amp;quot;,&lt;br /&gt;
			parents = {&lt;br /&gt;
				{name = &amp;quot;Foreign words of the day by language&amp;quot;, sort = langname},&lt;br /&gt;
			},&lt;br /&gt;
			breadcrumb = langname,&lt;br /&gt;
			hidden = true,&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:58 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/word_of_the_day</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/unicode</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/unicode&amp;diff=117&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/unicode&amp;diff=117&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/unicode&quot; title=&quot;Module:Category tree/poscatboiler/data/unicode&quot;&gt;Module:Category tree/poscatboiler/data/unicode&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local raw_categories = {}&lt;br /&gt;
local raw_handlers = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Unicode blocks&amp;quot;] = {&lt;br /&gt;
	intro = &amp;quot;{{shortcut|CAT:UC}}&amp;quot;,&lt;br /&gt;
	description = &amp;quot;Categories with blocks of particular Unicode characters.&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Fundamental&amp;quot;,&lt;br /&gt;
		&amp;quot;Category:Appendices&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Unicode blocks by number of entries&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Categories that group blocks of Unicode characters by the number of characters in those blocks.&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		{name = &amp;quot;Unicode blocks&amp;quot;, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for _, block in ipairs({&lt;br /&gt;
	{num = &amp;quot;0&amp;quot;, desc = &amp;quot;no other&amp;quot;, sort = &amp;quot;*000&amp;quot;},&lt;br /&gt;
	{num = &amp;quot;1–10&amp;quot;, desc = &amp;quot;1 to 10&amp;quot;, sort = &amp;quot;*001&amp;quot;},&lt;br /&gt;
	{num = &amp;quot;11–50&amp;quot;, desc = &amp;quot;11 to 50&amp;quot;, sort = &amp;quot;*011&amp;quot;},&lt;br /&gt;
	{num = &amp;quot;51–100&amp;quot;, desc = &amp;quot;51 to 100&amp;quot;, sort = &amp;quot;*051&amp;quot;},&lt;br /&gt;
	{num = &amp;quot;101+&amp;quot;, desc = &amp;quot;at least 101&amp;quot;, sort = &amp;quot;*101&amp;quot;},&lt;br /&gt;
}) do&lt;br /&gt;
raw_categories[&amp;quot;Unicode blocks with &amp;quot; .. block.num .. &amp;quot; entries&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Unicode block categories containing 1 appendix + &amp;quot; .. block.desc .. &amp;quot; entries.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;Unicode blocks by number of entries&amp;quot;, sort = block.sort}},&lt;br /&gt;
	breadcrumb = block.num,&lt;br /&gt;
}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                RAW HANDLERS                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.insert(raw_handlers, function(data)&lt;br /&gt;
	local block = data.category:match(&amp;quot;^(.*) block$&amp;quot;)&lt;br /&gt;
	if block then&lt;br /&gt;
		local pages_in_category = mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, &amp;quot;pages&amp;quot;)&lt;br /&gt;
		local entry_bucket&lt;br /&gt;
		-- At least 1 page is the appendix for the current Unicode block.&lt;br /&gt;
		if pages_in_category == 1 then&lt;br /&gt;
			entry_bucket = &amp;quot;0&amp;quot;&lt;br /&gt;
		elseif pages_in_category &amp;lt;= 11 then&lt;br /&gt;
			entry_bucket = &amp;quot;1–10&amp;quot;&lt;br /&gt;
		elseif pages_in_category &amp;lt;= 51 then&lt;br /&gt;
			entry_bucket = &amp;quot;11–50&amp;quot;&lt;br /&gt;
		elseif pages_in_category &amp;lt;= 101 then&lt;br /&gt;
			entry_bucket = &amp;quot;51–100&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			entry_bucket = &amp;quot;101+&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		return {&lt;br /&gt;
			description = &amp;quot;Entries for characters in the &amp;#039;&amp;#039;&amp;#039;[[Appendix:Unicode/&amp;quot; .. block .. &amp;quot;|&amp;quot; .. block .. &amp;quot;]]&amp;#039;&amp;#039;&amp;#039; block, &amp;quot; ..&lt;br /&gt;
			&amp;quot;as categorized by the character boxes.&amp;quot;,&lt;br /&gt;
			additional = &amp;quot;Some entries may define characters from multiple Unicode codepoints at once, so the page title &amp;quot; ..&lt;br /&gt;
			&amp;quot;could be an entry that is not from this block.&amp;quot;,&lt;br /&gt;
			breadcrumb = block,&lt;br /&gt;
			parents = {&lt;br /&gt;
				&amp;quot;Unicode blocks&amp;quot;,&lt;br /&gt;
				&amp;quot;Unicode blocks with &amp;quot; .. entry_bucket .. &amp;quot; entries&amp;quot;,&lt;br /&gt;
			},&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:57 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/unicode</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/transliterations</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/transliterations&amp;diff=115&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/transliterations&amp;diff=115&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/transliterations&quot; title=&quot;Module:Category tree/poscatboiler/data/transliterations&quot;&gt;Module:Category tree/poscatboiler/data/transliterations&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
local handlers = {}&lt;br /&gt;
local raw_handlers = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;romanizations&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms transliterated into the Latin alphabet.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;},&lt;br /&gt;
	umbrella_parents = &amp;quot;Transliterations subcategories by language&amp;quot;,&lt;br /&gt;
	-- Special romanization-specific table-of-contents bars are used on romanization pages&lt;br /&gt;
	-- (e.g. [[Template:got-rom-categoryTOC]]) because they hold Latin-script terms in a&lt;br /&gt;
	-- language-specific romanization scheme, rather than terms in the language&amp;#039;s normal script.&lt;br /&gt;
	-- For the same reason, we specify catfix = false to disable script-specific font&lt;br /&gt;
	-- formatting.&lt;br /&gt;
	toc_template = {&amp;quot;{{{langcode}}}-rom-categoryTOC&amp;quot;, &amp;quot;en-categoryTOC&amp;quot;},&lt;br /&gt;
	toc_template_full = {&amp;quot;{{{langcode}}}-rom-categoryTOC/full&amp;quot;, &amp;quot;{{{langcode}}}-rom-categoryTOC&amp;quot;, &amp;quot;en-categoryTOC/full&amp;quot;},&lt;br /&gt;
	catfix = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;romanizations without a main entry&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} romanizations where the corresponding entry in the language&amp;#039;s normal script does not exist. Automatically added by &amp;lt;code&amp;gt;{{[[Template:romanization of|romanization of]]}}&amp;lt;/code&amp;gt; when applicable.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;entry maintenance&amp;quot;, {name = &amp;quot;romanizations&amp;quot;, sort = &amp;quot; &amp;quot;}},&lt;br /&gt;
	umbrella_parents = &amp;quot;Entry maintenance subcategories by language&amp;quot;,&lt;br /&gt;
	--See &amp;#039;romanizations&amp;#039; above.&lt;br /&gt;
	toc_template = {&amp;quot;{{{langcode}}}-rom-categoryTOC&amp;quot;, &amp;quot;en-categoryTOC&amp;quot;},&lt;br /&gt;
	toc_template_full = {&amp;quot;{{{langcode}}}-rom-categoryTOC/full&amp;quot;, &amp;quot;{{{langcode}}}-rom-categoryTOC&amp;quot;, &amp;quot;en-categoryTOC/full&amp;quot;},&lt;br /&gt;
	catfix = false,&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	hidden = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms transliterated from other languages&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that have been transliterated from other languages.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;borrowed terms&amp;quot;, sort = &amp;quot; &amp;quot;}},&lt;br /&gt;
	umbrella_parents = &amp;quot;Transliterations subcategories by language&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Transliterations subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering topics related to transliterations.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;Terms by etymology subcategories by language&amp;quot;, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Terms with manual transliterations different from the automated ones&amp;quot;] = {&lt;br /&gt;
	intro = &amp;quot;{{also|:Category:Languages with automatic transliteration}}&amp;quot;,&lt;br /&gt;
	description = &amp;quot;Categories with terms with manual transliterations different from the automated ones, by language.&amp;quot;,&lt;br /&gt;
	hidden = true,&lt;br /&gt;
	parents = &amp;quot;Category:Template tracking&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Terms with redundant transliterations&amp;quot;] = {&lt;br /&gt;
	intro = &amp;quot;{{also|:Category:Languages with automatic transliteration}}&amp;quot;,&lt;br /&gt;
	description = &amp;quot;Categories with terms with redundant transliteration, by language.&amp;quot;,&lt;br /&gt;
	hidden = true,&lt;br /&gt;
	parents = &amp;quot;Category:Template tracking&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                 HANDLERS                                --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.insert(handlers, function(data)&lt;br /&gt;
	local source_name = data.label:match(&amp;quot;^transliterations of (.+) terms$&amp;quot;)&lt;br /&gt;
	if source_name then&lt;br /&gt;
		local source = require(&amp;quot;Module:languages&amp;quot;).getByCanonicalName(source_name, true,&lt;br /&gt;
			&amp;quot;allow etym langs&amp;quot;)&lt;br /&gt;
		local source_desc = source:makeCategoryLink()&lt;br /&gt;
		return {&lt;br /&gt;
			description = &amp;quot;{{{langname}}} terms that have been transliterated from &amp;quot; .. source_desc .. &amp;quot;.&amp;quot;,&lt;br /&gt;
			breadcrumb = source_name,&lt;br /&gt;
			parents = {&lt;br /&gt;
				{ name = &amp;quot;terms transliterated from other languages&amp;quot;, sort = source_name },&lt;br /&gt;
				{ name = &amp;quot;terms borrowed from &amp;quot; .. source_name, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
			},&lt;br /&gt;
			umbrella = {&lt;br /&gt;
				no_by_language = true,&lt;br /&gt;
				parents = {&lt;br /&gt;
					{ name = &amp;quot;terms borrowed from &amp;quot; .. source_name, is_label = true, sort = &amp;quot; &amp;quot; }&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                RAW HANDLERS                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.insert(raw_handlers, function(data)&lt;br /&gt;
	local langcode = data.category:match(&amp;quot;^Terms with manual transliterations different from the automated ones/(.+)$&amp;quot;)&lt;br /&gt;
	if langcode then&lt;br /&gt;
		return {&lt;br /&gt;
			description = &amp;quot;{{{langname}}} terms with manual transliterations different from the automated ones.&amp;quot;,&lt;br /&gt;
			lang = langcode,&lt;br /&gt;
			breadcrumb = &amp;quot;{{{langname}}}&amp;quot;,&lt;br /&gt;
			parents = {&lt;br /&gt;
				{ name = &amp;quot;Terms with manual transliterations different from the automated ones&amp;quot;, sort = langcode },&lt;br /&gt;
				{ name = &amp;quot;entry maintenance&amp;quot;, is_label = true, lang = langcode },&lt;br /&gt;
			},&lt;br /&gt;
			-- Set catfix = false because the page will have a mixture of native-language and&lt;br /&gt;
			-- non-native-language pages, but include the normal native-language table of contents headers&lt;br /&gt;
			-- because most pages are in the native language.&lt;br /&gt;
			catfix = false,&lt;br /&gt;
			toc_template = &amp;quot;{{{langcode}}}-categoryTOC&amp;quot;,&lt;br /&gt;
			toc_template_full = &amp;quot;{{{langcode}}}-categoryTOC/full&amp;quot;,&lt;br /&gt;
			can_be_empty = true,&lt;br /&gt;
			hidden = true,&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
table.insert(raw_handlers, function(data)&lt;br /&gt;
	local langcode = data.category:match(&amp;quot;^Terms with redundant transliterations/(.+)$&amp;quot;)&lt;br /&gt;
	if langcode then&lt;br /&gt;
		return {&lt;br /&gt;
			description = &amp;quot;{{{langname}}} terms with redundant transliterations.&amp;quot;,&lt;br /&gt;
			lang = langcode,&lt;br /&gt;
			breadcrumb = &amp;quot;{{{langname}}}&amp;quot;,&lt;br /&gt;
			parents = {&lt;br /&gt;
				{ name = &amp;quot;Terms with redundant transliterations&amp;quot;, sort = langcode },&lt;br /&gt;
				{ name = &amp;quot;entry maintenance&amp;quot;, is_label = true, lang = langcode },&lt;br /&gt;
			},&lt;br /&gt;
			-- Set catfix = false because the page will have a mixture of native-language and&lt;br /&gt;
			-- non-native-language pages, but include the normal native-language table of contents headers&lt;br /&gt;
			-- because most pages are in the native language.&lt;br /&gt;
			catfix = false,&lt;br /&gt;
			toc_template = &amp;quot;{{{langcode}}}-categoryTOC&amp;quot;,&lt;br /&gt;
			toc_template_full = &amp;quot;{{{langcode}}}-categoryTOC/full&amp;quot;,&lt;br /&gt;
			can_be_empty = true,&lt;br /&gt;
			hidden = true,&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, RAW_CATEGORIES = raw_categories, HANDLERS = handlers, RAW_HANDLERS = raw_handlers}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:57 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/transliterations</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/terms by usage</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_usage&amp;diff=113&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_usage&amp;diff=113&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_usage&quot; title=&quot;Module:Category tree/poscatboiler/data/terms by usage&quot;&gt;Module:Category tree/poscatboiler/data/terms by usage&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms by usage&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms categorized by the manner and context in which they are used by speakers.&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Fundamental&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;2channel slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to users of the website {{w|2channel}}.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;internet slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;4chan slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to users of the website {{w|4chan}}.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;internet slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;advertising slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to advertisements.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;angry register terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms belonging to an angry linguistic register, used only when the speaker is angry.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;archaic forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} forms that are used sometimes to imitate older literature for special effect, and serve as alternative forms of the same terms in recent general use.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;archaic terms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;archaic terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are no longer in general use but still encountered in older literature and still sometimes used for special effect.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;autological terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that possess the property they themselves describe.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;back slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms in which the written word is spoken phonemically backwards to form a coded language.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;cant&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;buzzwords&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms drawn from or imitative of technical jargon, and often rendered meaningless and fashionable through abuse by non-technical persons.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;cant&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms used to form secret languages that are typically restricted to members of a specific group.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;censored spellings&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} spellings where some characters have been changed in an effort to reduce the shock value of the original lemma.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;childish terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are typically only used by, or to, children.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;, &amp;quot;informal terms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;colloquialisms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are likely to be used primarily in casual conversation rather than in more formal written works, speeches, and discourse.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;corporate jargon&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms (typically for non-business-specific concepts) that are used especially in a [[Wiktionary:business|business]] or [[Wiktionary:corporate|corporate]] [[Wiktionary:context|context]].&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;See also [[:Category:Businesses]], [[:Category:Business]] and language-specific categories thereof for terms related to business-specific concepts.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;criminal slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to criminals.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;dated forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} forms that are no longer fashionable, thus are anachronistic, and serve as alternative forms of the same terms in recent general use.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;dated terms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;dated terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are no longer fashionable, thus are [[Wiktionary:anachronistic|anachronistic]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;derogatory terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are intended to [[Wiktionary:disparage|disparage]], [[Wiktionary:demean|demean]], [[Wiktionary:insult|insult]] or [[Wiktionary:offend|offend]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;dialectal terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are not used in standard language but only in dialects.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;ecclesiastical terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms used only by religious figures.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;eggcorns&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:eggcorn|eggcorn]]s, terms which are misconstructed.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;misconstructions&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;emoticons&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} characters, or sequences of characters, that imitate expressions and other objects by means of [[Wiktionary:pareidolia|pareidolia]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;internet slang&amp;quot;, &amp;quot;text messaging slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;endearing terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are used to show affection or endearment to another person. Entries using {{temp|lb|en|endearing}} will be added to this category.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;ethnic slurs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are intended to offend certain ethnic groups.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;offensive terms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;eye dialect&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} nonstandard spellings, which however do not change pronunciation, deliberately used by an author to indicate that the speaker uses a nonstandard or dialectal speech.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;nonstandard forms&amp;quot;, &amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;familiar terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms whose use is typically to contexts of friendly intimacy.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;fandom slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to fans of one or more works of fiction.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;filter-avoidance spellings&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Intentional misspellings of {{{langname}}} terms that are used to avoid [[Wikipedia:Wordfilter|wordfilters]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;intentional misspellings&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;folk poetic terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms whose usage is typically restricted to works of oral or folk poetry.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;, &amp;quot;poetic terms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;formal terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms whose use is typically restricted to polite, ceremonious, non-casual contexts.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;gay slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to homosexual people.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;, &amp;quot;Category:{{{langcode}}}:LGBT&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;gender-critical slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to gender-critical feminists.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;, &amp;quot;Category:{{{langcode}}}:Gender-critical feminism&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;gender-neutral terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are applicable to all people, independent of gender.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;higher register terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms belonging to a higher linguistic register, such as literary terms; such terms are somewhat less common or known.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;historical terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that refer to obsolete things or concepts.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;honorific terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:honorific|honorific]] terms, which are used to show deference and respect.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;polite terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:polite|polite]] terms, which are used to show deference and respect.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;hapax legomena&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are attested only once in the entire corpus.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;humble terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:humble|humble]] terms, which are used to indicate that the addressee has higher social standing.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;honorific terms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;hypercorrections&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} forms of other terms by misapplications of grammatical or orthographical rules.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;nonstandard terms&amp;quot;, &amp;quot;nonstandard forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;hyperforeign terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms created by misapplying the perceived grammatical, orthographical or phonetical rules of another language.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;hypercorrections&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;incel slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to incels.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;, &amp;quot;Category:{{{langcode}}}:Incel community&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;imperfective forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} verbs that serve as imperfective variants of perfective verbs, sharing the same base set of meanings.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;informal forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that can be used in casual, non-ceremonious conversations as alternative forms of other terms.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;informal terms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;informal terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms whose use is typically restricted to casual, non‐ceremonious conversations.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;intentional misspellings&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Intentional misspellings of {{{langname}}} terms.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;misspellings&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;internet laughter slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms that are used as substitutes for laughter in internet-related contexts.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;::&amp;#039;&amp;#039;Note: The majority of items that &amp;lt;u&amp;gt;could&amp;lt;/u&amp;gt; be here do not meet Wiktionary&amp;#039;s [[WT:CFI|criteria for inclusion]].&amp;#039;&amp;#039;&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;internet slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;internet slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to internet users.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;humorous terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are humorous, amusing or joking.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;journalistic terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are used especially in [[Wiktionary:journalistic|journalistic]] language, i.e. in newspapers and magazines.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;leet&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} which are used in [[Wiktionary:leetspeak|leetspeak]], a variety of internet slang that focuses on substitution of letters by other characters which are similar in appearance.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;internet slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;literary terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms whose usage is typically restricted to works of literature.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;higher register terms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;medical slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to medical doctors, such as physicians and surgeons.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;military slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to military personnel.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;misconstructions&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Terms wrongly built due to a misunderstanding of their parts.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;nonstandard forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;misromanizations&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Common misromanizations of {{{langname}}} terms.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;nonstandard forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;misspellings&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Common accidental misspellings of {{{langname}}} terms and some terms which are deliberate misspellings.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;nonstandard forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;naval slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to naval personnel.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;military slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;nonstandard forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} forms of standard terms that are considered improper, incorrect or commonly misused.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;nonstandard terms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;nonstandard terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are considered improper, incorrect or commonly misused.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;numismatic slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to numismatists.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;, &amp;quot;Category:{{{langcode}}}:Currency&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;obsolete forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are found in older texts and are no longer in current use, because they changed in comparison with recent general use.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms with obsolete senses&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;obsolete terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are no longer in current use, but found in older texts.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;offensive terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are typically considered to offend people.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;officialese terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are chiefly used by official sources, and are often bureaucratic-sounding.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;oxymorons&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are juxtapositions of opposing ideas.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;perfective forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} verbs that serve as perfective variants of imperfective verbs, sharing the same base set of meanings.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;placeholder terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms used to refer to items for which one does not know or cannot recall the name, or is unable to or does not care to specify precisely.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;poetic terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms whose usage is typically restricted to works of poetry.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;, &amp;quot;literary terms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;post-nominal letters&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} Post-nominal letters - also called post-nominal initials, post-nominal titles or designatory letters are letters placed after the name of a person to indicate that the individual holds a position, educational degree, accreditation, office, military decoration, or honour, or is a member of a religious institute or fraternity.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;prison slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to detainees in correctional institutions.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;proscribed terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms whose usage is proscribed; thus, they are considered wrong according to prescriptive sources.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;, &amp;quot;nonstandard terms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;radio slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to radio communication.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;rare forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that serve as rarely used forms of other terms.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms with rare senses&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;rare terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are rare in general use, for whatever reason.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;Reddit slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to users of the website {{w|Reddit}}.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;internet slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;religious slurs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are intended to offend members of certain religions.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;offensive terms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;reverential terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms used when referring to nobles.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;honorific terms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;royal terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms used only by royalty.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;school slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to schools and school pupils.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;self-deprecatory terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:self-deprecatory|self-deprecatory]] terms.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;short forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are [[Wiktionary:short form|short form]]s of other terms, often used informally.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;, &amp;quot;shortenings&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:colloquial|colloquial]] terms that are typically used to mark membership in a cultural subgroup.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;solemn terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are used to instill a sense of somberness.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;student slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to colleges, universities, and their students.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;superseded forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} forms that have been superseded by other forms due to changes in spelling conventions.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;, &amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;swear words&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are used to swear, such as to express strong anger or frustration.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;vulgarities&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;technical terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are usually or exclusively used in technical/scientific writing.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms of address&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms used to refer to another person.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with archaic senses&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are no longer in general use but still encountered in older literature and still sometimes used for special effect.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with dated senses&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that have one or more senses that are occasionally still found in use, but are clearly old-fashioned or typical of older texts&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with historical senses&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with senses that refer to things or concepts mainly known for their historical value.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with obsolete senses&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are no longer in current use, but found in older texts.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with rare senses&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} rarely used terms or terms with rarely used senses.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with transferred senses&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with [[Appendix:Glossary#transferred senses|transferred senses]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with uncommon senses&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} uncommonly used terms or terms with uncommonly used senses.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with uncertain meaning&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms whose meaning is unknown or disputed.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;text messaging slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms used for [[Wiktionary:text messaging|text messaging]] on mobile phones or similar devices, usually consisting of heavily abbreviated forms.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;tone indicators&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} symbols used to denote or clarify the intent of a preceeding message.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;internet slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;trademarks&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that identify legal entities, their products and services, by means of legal protection — to some extent, in a number of jurisdictions — against unauthorized use of the terms.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;transgender slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to transgender people.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;slang&amp;quot;, &amp;quot;Category:{{{langcode}}}:Transgender&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;TV Tropes slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to users of the website {{w|TV Tropes}}.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;internet slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;umlautless spellings&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are the result of the original terms&amp;#039; [[Wiktionary:umlaut|umlaut]]s being substituted.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;nonstandard forms&amp;quot;, &amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;uncommon forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that serve as uncommonly used forms of other terms.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;uncommon terms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;uncommon terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} uncommonly used terms.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;Usenet slang&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:slang|slang]] terms whose usage is typically restricted to users of {{w|Usenet}}.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;internet slang&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;men&amp;#039;s speech terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms and forms used in [[Appendix:Glossary#men&amp;#039;s speech|men&amp;#039;s speech]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;women&amp;#039;s speech terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms and forms used in [[Appendix:Glossary#women&amp;#039;s speech|women&amp;#039;s speech]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;vulgarities&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms whose tone (rather than the meaning) is offensive to polite company.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by usage&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Add &amp;#039;umbrella_parents&amp;#039; key if not already present.&lt;br /&gt;
for key, data in pairs(labels) do&lt;br /&gt;
	if not data.umbrella_parents then&lt;br /&gt;
		data.umbrella_parents = &amp;quot;Terms by usage subcategories by language&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Terms by usage subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering topics related to terms categorized by their usage, such as slang, obsolete or archaic forms and vulgarities.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;terms by usage&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, RAW_CATEGORIES = raw_categories}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:57 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/terms_by_usage</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/terms by semantic function</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_semantic_function&amp;diff=111&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_semantic_function&amp;diff=111&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_semantic_function&quot; title=&quot;Module:Category tree/poscatboiler/data/terms by semantic function&quot;&gt;Module:Category tree/poscatboiler/data/terms by semantic function&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms by semantic function&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms by their semantic function, regardless of part of speech.&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Fundamental&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;cardinal numbers&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are used to count objects.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;numbers&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;demonstrative pro-forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that refer to specified entities or qualities.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;pro-forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;fractional numbers&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that indicate proportioned parts of a whole.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;numbers&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;hedges&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} expressions that are used to qualify statements so as to lessen impact, e.g. to appear polite or modest or to soften a blow.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by semantic function&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;indefinite pro-forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that refer to unspecified entities or qualities.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;pro-forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;intensifiers&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that serve to intensify.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by semantic function&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;interrogative pro-forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that request the listener to specify.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;pro-forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;imperative sentences&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} free-standing expressions that are in the grammatical form of commands, though often with a [[Wiktionary:precative|precative]] or [[Wiktionary:hortatory|hortatory]] force.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;sentences&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;mnemonics&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms used for remembering something more easily.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by semantic function&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;negative polarity items&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are chiefly or always used with a negation. Entries can be added to this category using {{temp|lb|{{{langcode}}}|chiefly in the negative}}.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by semantic function&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;nominal numbers&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that represent numbers as entities in themselves.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;numbers&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;numbers&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that represent or relate to numbers of various kinds.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by semantic function&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;oaths&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by semantic function&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;ordinal numbers&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that specify the ordering of objects within a sequence.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;numbers&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;pro-forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that refer to other parts of speech.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by semantic function&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;pro-sentences&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that substitute for full [[Wiktionary:sentences|sentences]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;pro-forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;questions&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that usually or notably used as questions.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by semantic function&amp;quot;, &amp;quot;sentences&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;relative pro-forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that indicate [[Wiktionary:relative clause|relative clause]]s.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;pro-forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;rhetorical questions&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} questions posed only for dramatic or persuasive effect.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;idioms&amp;quot;, &amp;quot;sentences&amp;quot;, &amp;quot;questions&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for label, data in pairs(labels) do&lt;br /&gt;
	if not data.umbrella_parents then&lt;br /&gt;
		data.umbrella_parents = &amp;quot;Terms by semantic function subcategories by language&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Terms by semantic function subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering topics related to terms categorized by their semantic function, such as types of numbers or questions.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;terms by semantic function&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, RAW_CATEGORIES = raw_categories}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:57 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/terms_by_semantic_function</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/terms by script</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_script&amp;diff=109&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_script&amp;diff=109&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_script&quot; title=&quot;Module:Category tree/poscatboiler/data/terms by script&quot;&gt;Module:Category tree/poscatboiler/data/terms by script&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
local handlers = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms by script&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms categorized by the script they are written in (for languages with multiple native scripts).&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Terms by lexical property subcategories by language&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Terms by script subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering topics related to terms categorized by their script.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;terms by script&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                 HANDLERS                                --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.insert(handlers, function(data)&lt;br /&gt;
	local script = data.label:match(&amp;quot;^terms in (.+) script$&amp;quot;)&lt;br /&gt;
	if script then&lt;br /&gt;
		return {&lt;br /&gt;
			description = &amp;quot;{{{langname}}} terms written in &amp;quot; .. script .. &amp;quot; script.&amp;quot;,&lt;br /&gt;
			umbrella_parents = &amp;quot;Terms by script subcategories by language&amp;quot;,&lt;br /&gt;
			parents = {{&lt;br /&gt;
				name = &amp;quot;terms by script&amp;quot;,&lt;br /&gt;
				sort = script,&lt;br /&gt;
			}},&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, RAW_CATEGORIES = raw_categories, HANDLERS = handlers}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:56 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/terms_by_script</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/terms by lexical property</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_lexical_property&amp;diff=107&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_lexical_property&amp;diff=107&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_lexical_property&quot; title=&quot;Module:Category tree/poscatboiler/data/terms by lexical property&quot;&gt;Module:Category tree/poscatboiler/data/terms by lexical property&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms by lexical property&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms categorized by properties relating to spelling, pronunciation or meaning.&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Fundamental&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;autohyponyms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that have at least two meanings, one of which is a hyponym of the other.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by lexical property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;character counts&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms categorized by their quantities of characters.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;contranyms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that have two opposite meanings.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by lexical property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;double negatives&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms which include a [[Wiktionary:double negative|double negative]], either etymologically or in a definition.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by lexical property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;heteronyms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that have different meanings depending on their etymology and/or on how they are pronounced.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by lexical property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;nuqtaless forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are spelled without a [[Wiktionary:nuqta|nuqta]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;palindromes&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms whose characters are read equally both from left to right and vice versa, normally ignoring spaces, [[Wiktionary:diacritic|diacritic]]s and punctuation.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by their sequences of characters&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;pleonastic compounds&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} compound terms where the head is a hyponym of its other part and whose other part is its synonym.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by lexical property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;pleonastic compound adjectives&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} compound adjectives where the head is a hyponym of its other part and whose other part is its synonym.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;pleonastic compounds&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;pleonastic compound nouns&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} compound nouns where the head is a hyponym of its other part and where the head is the synonym for the whole.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;pleonastic compounds&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;pronunciation spellings&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms spelled to represent a pronunciation, often a nonstandard one.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;tautophrases&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} phrases that repeat the same idea or concept using the same words.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by lexical property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms by orthographic property&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms categorized by properties relating to [[Wiktionary:orthography|orthography]] or [[Wiktionary:spelling|spelling]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by lexical property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;calculator words&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that can be spelled on a [[Wiktionary:seven-segment|seven-segment]] display, as found on pocket calculators, by turning numbers upside-down.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms by their individual characters&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms categorized by whether they include certain individual characters.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms by their sequences of characters&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms categorized by whether they include certain sequences of characters.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms containing italics&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms containing [[Wiktionary:italics|italics]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms containing Roman numerals&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms containing [[Wiktionary:Roman numeral|Roman numeral]]s.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with mixed convergence&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms where the spelling represents a variant pronunciation that differs from (one of) the current standard pronunciation(s).&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by orthographic property&amp;quot;, &amp;quot;terms by phonemic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with homophones&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that have one or more [[Wiktionary:homophones|homophones]]: other terms that are pronounced in the same way but spelled differently.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by lexical property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms where the adjective follows the noun&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms where the adjective follows the noun. These adjectives within these terms are sometimes referred to as postpositive or postnominal adjectives.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;words containing three consecutive instances of the same letter&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with three consecutive instances of the same letter&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by their sequences of characters&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;words containing four consecutive instances of the same letter&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with four consecutive instances of the same letter&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by their sequences of characters&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;words containing five consecutive instances of the same letter&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with five consecutive instances of the same letter&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by their sequences of characters&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms written in foreign scripts&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are written in a different, non-native script.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms written in multiple scripts&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are written using more than one script.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;one-letter words&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} individual words consisting of exactly one letter. They have meaning(s) other than their letter or the shape of their letter which are not abbreviations, names, numbers or symbols.&amp;quot;,&lt;br /&gt;
	parents = {name = &amp;quot;character counts&amp;quot;, sort = &amp;quot;1&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;two-letter words&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} individual words composed of exactly two letters. They have meaning(s) beyond their component letters that are neither names nor abbreviations.&amp;quot;,&lt;br /&gt;
	parents = {name = &amp;quot;character counts&amp;quot;, sort = &amp;quot;2&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;three-letter words&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} individual words composed of exactly three letters. They have meaning(s) beyond their component letters that are neither names nor abbreviations.&amp;quot;,&lt;br /&gt;
	parents = {name = &amp;quot;character counts&amp;quot;, sort = &amp;quot;3&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;two-letter abbreviations&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} abbreviations composed of exactly two letters.&amp;quot;,&lt;br /&gt;
	parents = {name = &amp;quot;character counts&amp;quot;, sort = &amp;quot;2&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;three-letter abbreviations&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} abbreviations composed of exactly three letters.&amp;quot;,&lt;br /&gt;
	parents = {name = &amp;quot;character counts&amp;quot;, sort = &amp;quot;3&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;four-letter abbreviations&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} abbreviations composed of exactly four letters.&amp;quot;,&lt;br /&gt;
	parents = {name = &amp;quot;character counts&amp;quot;, sort = &amp;quot;4&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;five-letter abbreviations&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} abbreviations composed of exactly five letters.&amp;quot;,&lt;br /&gt;
	parents = {name = &amp;quot;character counts&amp;quot;, sort = &amp;quot;5&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms by phonemic property&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms categorized by properties relating to [[Wiktionary:pronunciation|pronunciation]] and [[Wiktionary:phonemics|phonemics]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by lexical property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with hiatus&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that contain two consecutive vowels which form separate syllables.&amp;quot;,&lt;br /&gt;
	fundamental = &amp;quot;Terms by lexical property subcategories by language&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by phonemic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Add &amp;#039;umbrella_parents&amp;#039; key if not already present.&lt;br /&gt;
for key, data in pairs(labels) do&lt;br /&gt;
	if not data.umbrella_parents then&lt;br /&gt;
		data.umbrella_parents = &amp;quot;Terms by lexical property subcategories by language&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Terms by lexical property subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering topics related to terms categorized by their lexical properties, such as palindromes and number of letters or syllables in a word.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;terms by lexical property&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, RAW_CATEGORIES = raw_categories}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:56 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/terms_by_lexical_property</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/terms by grammatical category</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_grammatical_category&amp;diff=105&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_grammatical_category&amp;diff=105&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_grammatical_category&quot; title=&quot;Module:Category tree/poscatboiler/data/terms by grammatical category&quot;&gt;Module:Category tree/poscatboiler/data/terms by grammatical category&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
local handlers = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms by grammatical category&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms categorized by their grammatical category.&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Fundamental&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
------- GENDER -------&lt;br /&gt;
&lt;br /&gt;
for _, pos in ipairs { &amp;quot;nouns&amp;quot;, &amp;quot;pronouns&amp;quot;, &amp;quot;proper nouns&amp;quot;, &amp;quot;suffixes&amp;quot; } do&lt;br /&gt;
	labels[pos .. &amp;quot; by gender&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; organized by the gender they belong to.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;by gender&amp;quot;,&lt;br /&gt;
		parents = {{name = pos, sort = &amp;quot;gender&amp;quot;}},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	labels[pos .. &amp;quot; with irregular gender&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; whose ending is not typical for &amp;quot; .. pos .. &amp;quot; of their gender.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;with irregular gender&amp;quot;,&lt;br /&gt;
		parents = {{name = &amp;quot;irregular &amp;quot; .. pos, sort = &amp;quot;irregular gender&amp;quot;}},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	labels[pos .. &amp;quot; with multiple genders&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; that belong to more than one gender.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;with multiple genders&amp;quot;,&lt;br /&gt;
		parents = {{name = pos .. &amp;quot; by gender&amp;quot;, sort = &amp;quot;multiple genders&amp;quot;}},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	labels[&amp;quot;common-gender &amp;quot; .. pos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; of [[Appendix:Glossary#common gender|common gender]], i.e. belonging to a gender category that combines the function of [[Appendix:Glossary#masculine|masculine]] and [[Appendix:Glossary#feminine|feminine]] and is opposed to the [[Appendix:Glossary#neuter|neuter]] gender.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;common-gender&amp;quot;,&lt;br /&gt;
		parents = {pos .. &amp;quot; by gender&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	labels[&amp;quot;feminine &amp;quot; .. pos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; of [[Appendix:Glossary#feminine|feminine]] gender, i.e. belonging to a gender category that contains (among other things) female beings.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;feminine&amp;quot;,&lt;br /&gt;
		parents = {pos .. &amp;quot; by gender&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	labels[&amp;quot;masculine &amp;quot; .. pos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; of [[Appendix:Glossary#masculine|masculine]] gender, i.e. belonging to a gender category that contains (among other things) male beings.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;masculine&amp;quot;,&lt;br /&gt;
		parents = {pos .. &amp;quot; by gender&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	labels[&amp;quot;masculine and feminine &amp;quot; .. pos .. &amp;quot; by sense&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; that may be either [[Appendix:Glossary#masculine|masculine]] or [[Appendix:Glossary#feminine|feminine]] depending on whether they refer to male or female beings.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;masculine and feminine by sense&amp;quot;,&lt;br /&gt;
		parents = {pos .. &amp;quot; by gender&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	labels[&amp;quot;neuter &amp;quot; .. pos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; of [[Appendix:Glossary#neuter|neuter]] gender, i.e. belonging to a gender category that does not usually contain male or female beings.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;neuter&amp;quot;,&lt;br /&gt;
		parents = {pos .. &amp;quot; by gender&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------- CLASSES -------&lt;br /&gt;
&lt;br /&gt;
for _, pos in ipairs { &amp;quot;nouns&amp;quot;, &amp;quot;pronouns&amp;quot;, &amp;quot;proper nouns&amp;quot;, &amp;quot;suffixes&amp;quot;, &amp;quot;adjectives&amp;quot;, &amp;quot;verbs&amp;quot;, &amp;quot;numerals&amp;quot; } do&lt;br /&gt;
	labels[pos .. &amp;quot; by class&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; organized by the class they belong to.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;by class&amp;quot;,&lt;br /&gt;
		parents = {{name = pos, sort = &amp;quot;class&amp;quot;}},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	labels[pos .. &amp;quot; with irregular class&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; whose ending is not typical for &amp;quot; .. pos .. &amp;quot; of their class.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;with irregular class&amp;quot;,&lt;br /&gt;
		parents = {{name = &amp;quot;irregular &amp;quot; .. pos, sort = &amp;quot;irregular class&amp;quot;}},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	labels[pos .. &amp;quot; with multiple classes&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; that belong to more than one class.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;with multiple classes&amp;quot;,&lt;br /&gt;
		parents = {{name = pos .. &amp;quot; by class&amp;quot;, sort = &amp;quot;multiple classes&amp;quot;}},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------- ANIMACY -------&lt;br /&gt;
&lt;br /&gt;
for _, pos in ipairs({&amp;quot;nouns&amp;quot;, &amp;quot;pronouns&amp;quot;, &amp;quot;proper nouns&amp;quot;, &amp;quot;suffixes&amp;quot;, &amp;quot;verbs&amp;quot;}) do&lt;br /&gt;
	labels[&amp;quot;animate &amp;quot; .. pos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; that refer to humans or animals.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;animate&amp;quot;,&lt;br /&gt;
		parents = {pos},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	labels[&amp;quot;inanimate &amp;quot; .. pos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; that refer to inanimate objects (not humans or animals).&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;inanimate&amp;quot;,&lt;br /&gt;
		parents = {pos},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	labels[pos .. &amp;quot; with multiple animacies&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; that belong to more than one animacy.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;with multiple animacies&amp;quot;,&lt;br /&gt;
		parents = {{name = pos, sort = &amp;quot;multiple animacies&amp;quot;}},&lt;br /&gt;
	}&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
for _, pos in ipairs({&amp;quot;nouns&amp;quot;, &amp;quot;suffixes&amp;quot;}) do&lt;br /&gt;
	-- This category should be used particularly in languages that have&lt;br /&gt;
	-- grammatical distinctions related to animals, such as Ukrainian.&lt;br /&gt;
	labels[&amp;quot;animal &amp;quot; .. pos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; that refer to animals.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;animal&amp;quot;,&lt;br /&gt;
		parents = {&amp;quot;animate &amp;quot; .. pos},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	-- This category should be used particularly in languages that have&lt;br /&gt;
	-- grammatical distinctions related to men, such as Polish.&lt;br /&gt;
	labels[&amp;quot;nonvirile &amp;quot; .. pos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} plural &amp;quot; .. pos .. &amp;quot; that refer to a group without male humans.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;nonvirile&amp;quot;,&lt;br /&gt;
		parents = {pos, &amp;quot;pluralia tantum&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	labels[&amp;quot;personal &amp;quot; .. pos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; that refer to humans.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;personal&amp;quot;,&lt;br /&gt;
		parents = {&amp;quot;animate &amp;quot; .. pos},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	-- This category should be used particularly in languages that have&lt;br /&gt;
	-- grammatical distinctions related to men, such as Polish.&lt;br /&gt;
	labels[&amp;quot;virile &amp;quot; .. pos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} plural &amp;quot; .. pos .. &amp;quot; that refer to a group with at least one male human.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;virile&amp;quot;,&lt;br /&gt;
		parents = {pos, &amp;quot;pluralia tantum&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------- INFLECTED PARTS OF SPEECH -------&lt;br /&gt;
&lt;br /&gt;
-- Add &amp;quot;POS by inflection type&amp;quot;, &amp;quot;irregular POS&amp;quot; and &amp;quot;POS by tone&amp;quot;&lt;br /&gt;
-- categories for (potentially) inflected parts of speech.&lt;br /&gt;
&lt;br /&gt;
local inflected_poses = {&lt;br /&gt;
	&amp;quot;adjectives&amp;quot;,&lt;br /&gt;
	&amp;quot;adverbs&amp;quot;,&lt;br /&gt;
	&amp;quot;determiners&amp;quot;,&lt;br /&gt;
	&amp;quot;nouns&amp;quot;,&lt;br /&gt;
	&amp;quot;numerals&amp;quot;,&lt;br /&gt;
	&amp;quot;participles&amp;quot;,&lt;br /&gt;
	&amp;quot;pronouns&amp;quot;,&lt;br /&gt;
	&amp;quot;proper nouns&amp;quot;,&lt;br /&gt;
	&amp;quot;suffixes&amp;quot;,&lt;br /&gt;
	&amp;quot;verbs&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for _, pos in ipairs(inflected_poses) do&lt;br /&gt;
	labels[pos .. &amp;quot; by inflection type&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; organized by the type of inflection they follow.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;by inflection type&amp;quot;,&lt;br /&gt;
		parents = {{name = pos, sort = &amp;quot;inflection&amp;quot;}},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	labels[&amp;quot;irregular &amp;quot; .. pos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; that follow non-standard patterns of inflection.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;irregular&amp;quot;,&lt;br /&gt;
		parents = {pos .. &amp;quot; by inflection type&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	labels[&amp;quot;defective &amp;quot; .. pos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; that lack one or more forms in their inflections.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;defective&amp;quot;,&lt;br /&gt;
		parents = {pos, &amp;quot;irregular &amp;quot; .. pos},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	labels[&amp;quot;suppletive &amp;quot; .. pos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; that have inflected forms from different roots.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;suppletive&amp;quot;,&lt;br /&gt;
		parents = {&amp;quot;irregular &amp;quot; .. pos},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	if pos ~= &amp;quot;verbs&amp;quot; and pos ~= &amp;quot;adverbs&amp;quot; then&lt;br /&gt;
		labels[&amp;quot;indeclinable &amp;quot; .. pos] = {&lt;br /&gt;
			description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; that do not display additional grammatical relations by means of declension.&amp;quot;,&lt;br /&gt;
			breadcrumb = &amp;quot;indeclinable&amp;quot;,&lt;br /&gt;
			parents = {pos .. &amp;quot; by inflection type&amp;quot;},&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		labels[pos .. &amp;quot; with multiple declensions&amp;quot;] = {&lt;br /&gt;
			description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; that follow more than one type of inflection.&amp;quot;,&lt;br /&gt;
			breadcrumb = &amp;quot;with multiple declensions&amp;quot;,&lt;br /&gt;
			parents = {{name = pos .. &amp;quot; by inflection type&amp;quot;, sort = &amp;quot;multiple declensions&amp;quot;}},&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		labels[pos .. &amp;quot; with multiple plurals&amp;quot;] = {&lt;br /&gt;
			description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; that have more than one possible plural (sometimes with distinct meanings).&amp;quot;,&lt;br /&gt;
			breadcrumb = &amp;quot;with multiple plurals&amp;quot;,&lt;br /&gt;
			parents = {{name = pos .. &amp;quot; by inflection type&amp;quot;, sort = &amp;quot;multiple plurals&amp;quot;}},&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	labels[pos .. &amp;quot; by tone&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; organized by the tone they follow.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;by tone&amp;quot;,&lt;br /&gt;
		parents = {{name = pos .. &amp;quot; by inflection type&amp;quot;, sort = &amp;quot;tone&amp;quot;}},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	labels[pos .. &amp;quot; by vowel harmony&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; organized by the vowel harmony they follow.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;by vowel harmony&amp;quot;,&lt;br /&gt;
		parents = {{name = pos .. &amp;quot; by inflection type&amp;quot;, sort = &amp;quot;vowel harmony&amp;quot;}},&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- FIXME: Only used currently for Arabic; probably should be removed as a general category.&lt;br /&gt;
labels[&amp;quot;irregular elative adjectives&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} elative adjectives that follow non-standard patterns of inflection.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;adjectives by inflection type&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for _, pos in ipairs { &amp;quot;nouns&amp;quot;, &amp;quot;proper nouns&amp;quot;, &amp;quot;pronouns&amp;quot; } do&lt;br /&gt;
	labels[pos .. &amp;quot; with unattested plurals&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; with unattested plurals.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;with unattested plurals&amp;quot;,&lt;br /&gt;
		parents = {{name = pos, sort = &amp;quot;unattested plurals&amp;quot;}},&lt;br /&gt;
	}&lt;br /&gt;
	labels[&amp;quot;definite &amp;quot; .. pos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; that are inherently definite and have definite concord.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;definite&amp;quot;,&lt;br /&gt;
		parents = {pos .. &amp;quot; by inflection type&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------- GERMANIC VERB CLASSES -------&lt;br /&gt;
&lt;br /&gt;
-- FIXME: Not clear this belongs among the general categories.&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} verbs that present different stem vowels in their typically regular conjugated forms.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;strong&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;verbs by inflection type&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;weak verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} verbs that display dental suffixes in their past tense conjugated forms.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;weak&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;verbs by inflection type&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;preterite-present verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} verbs that inflect in the present tense like the past tense of strong verbs.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;preterite-present&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;verbs by inflection type&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 1 strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Verbs where the [[Wiktionary:ablaut|ablaut]] vowel was followed by &amp;#039;&amp;#039;-y-&amp;#039;&amp;#039; in Proto-Indo-European.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 1&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;strong verbs&amp;quot;, sort = &amp;quot;1&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 1 weak verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Weak verbs of the first class.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 1&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;weak verbs&amp;quot;, sort = &amp;quot;1&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 2 strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Verbs where the [[Wiktionary:ablaut|ablaut]] vowel was followed by &amp;#039;&amp;#039;-w-&amp;#039;&amp;#039; in Proto-Indo-European.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 2&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;strong verbs&amp;quot;, sort = &amp;quot;2&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 2a strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Verbs where the [[Wiktionary:ablaut|ablaut]] vowel was *eu in Proto-Germanic.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 2a&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;class 2 strong verbs&amp;quot;, sort = &amp;quot;1&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 2b strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Verbs where the [[Wiktionary:ablaut|ablaut]] vowel was *ū in Proto-Germanic.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 2b&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;class 2 strong verbs&amp;quot;, sort = &amp;quot;2&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 2 weak verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Weak verbs of the second class.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 2&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;weak verbs&amp;quot;, sort = &amp;quot;2&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 3 weak verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Weak verbs of the third class.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 3&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;weak verbs&amp;quot;, sort = &amp;quot;3&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 3 strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Verbs where the [[Wiktionary:ablaut|ablaut]] vowel was followed by a [[Wiktionary:consonant cluster|consonant cluster]] in Proto-Indo-European.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 3&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;strong verbs&amp;quot;, sort = &amp;quot;3&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 3a strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Verbs where the [[Wiktionary:consonant cluster|consonant cluster]] begins with a nasal consonant.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 3a&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;class 3 strong verbs&amp;quot;, sort = &amp;quot;1&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 3b strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Verbs where the [[Wiktionary:consonant cluster|consonant cluster]] begins with a lateral consonant or velar fricative.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 3b&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;class 3 strong verbs&amp;quot;, sort = &amp;quot;2&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 3c strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Verbs where the [[Wiktionary:consonant cluster|consonant cluster]] begins with a rhotic consonant.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 3c&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;class 3 strong verbs&amp;quot;, sort = &amp;quot;3&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 4 strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Verbs where the [[Wiktionary:ablaut|ablaut]] vowel was followed by a [[Wiktionary:sonorant|sonorant]] (&amp;#039;&amp;#039;m&amp;#039;&amp;#039;, &amp;#039;&amp;#039;n&amp;#039;&amp;#039;, &amp;#039;&amp;#039;l&amp;#039;&amp;#039;, &amp;#039;&amp;#039;r&amp;#039;&amp;#039;) but no other consonant in Proto-Indo-European.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 4&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;strong verbs&amp;quot;, sort = &amp;quot;4&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 4 weak verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Weak verbs of the fourth class.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 4&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;weak verbs&amp;quot;, sort = &amp;quot;4&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 5 strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Verbs where the [[Wiktionary:ablaut|ablaut]] vowel was followed by [[Wiktionary:consonant|consonant]] other than a [[Wiktionary:sonorant|sonorant]] in Proto-Indo-European.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 5&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;strong verbs&amp;quot;, sort = &amp;quot;5&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 6 strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;The Proto-Indo-European origin of this class is not securely known. It contains verbs with the stem vowel &amp;#039;&amp;#039;-a-&amp;#039;&amp;#039;, except those where it is followed by a sonorant and another consonant (this combination was considered a diphthong in PIE and therefore belonged to class 7).&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 6&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;strong verbs&amp;quot;, sort = &amp;quot;6&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 7 strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Verbs that retained their reduplication in the past tense in Proto-Germanic.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 7&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;strong verbs&amp;quot;, sort = &amp;quot;7&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 7a strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Class 7 strong verbs where the root vowel was &amp;#039;&amp;#039;*ai&amp;#039;&amp;#039; in Proto-Germanic, analogous to class 1.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 7a&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;class 7 strong verbs&amp;quot;, sort = &amp;quot;a&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 7b strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Class 7 strong verbs where the root vowel was &amp;#039;&amp;#039;*au&amp;#039;&amp;#039; in Proto-Germanic, analogous to class 2.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 7b&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;class 7 strong verbs&amp;quot;, sort = &amp;quot;b&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 7c strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Class 7 strong verbs where the root vowel was &amp;#039;&amp;#039;*a&amp;#039;&amp;#039; followed by a [[Wiktionary:consonant cluster|consonant cluster]] in Proto-Germanic, analogous to class 3.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 7c&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;class 7 strong verbs&amp;quot;, sort = &amp;quot;c&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 7d strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Class 7 strong verbs where the root vowel was &amp;#039;&amp;#039;*ē&amp;#039;&amp;#039; in Proto-Germanic.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 7d&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;class 7 strong verbs&amp;quot;, sort = &amp;quot;d&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;class 7e strong verbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Class 7 strong verbs where the root vowel was &amp;#039;&amp;#039;*ō&amp;#039;&amp;#039; in Proto-Germanic.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;class 7e&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;class 7 strong verbs&amp;quot;, sort = &amp;quot;e&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local labels2 = {}&lt;br /&gt;
&lt;br /&gt;
-- Add &amp;#039;umbrella_parents&amp;#039; key if not already present.&lt;br /&gt;
for key, data in pairs(labels) do&lt;br /&gt;
	labels2[key] = data&lt;br /&gt;
	if not data.umbrella_parents then&lt;br /&gt;
		data.umbrella_parents = &amp;quot;Terms by grammatical category subcategories by language&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Terms by grammatical category subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering topics related to grammatical categories, such as gender, animacy and noun and verb classes.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;terms by grammatical category&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                 HANDLERS                                --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.insert(handlers, function(data)&lt;br /&gt;
	local class = data.label:match(&amp;quot;^class ([0-9a-z]+) nouns$&amp;quot;)&lt;br /&gt;
	if class then&lt;br /&gt;
		local classnum, suffix = class:match(&amp;quot;^([0-9]+)([a-z]*)$&amp;quot;)&lt;br /&gt;
		return {&lt;br /&gt;
			description =&lt;br /&gt;
				&amp;quot;{{{langname}}} nouns that belong to class &amp;quot; .. class .. &amp;quot;.&amp;quot;,&lt;br /&gt;
			breadcrumb = class,&lt;br /&gt;
			umbrella = false,&lt;br /&gt;
			parents = {{&lt;br /&gt;
				name = &amp;quot;nouns by class&amp;quot;,&lt;br /&gt;
				sort = classnum and (&amp;quot;#%02d&amp;quot;):format(classnum) .. suffix or class,&lt;br /&gt;
			}},&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
		local class = data.label:match(&amp;quot;^class ([0-9a-z]+) verbs$&amp;quot;)&lt;br /&gt;
	if class then&lt;br /&gt;
		local classnum, suffix = class:match(&amp;quot;^([0-9]+)([a-z]*)$&amp;quot;)&lt;br /&gt;
		return {&lt;br /&gt;
			description =&lt;br /&gt;
				&amp;quot;{{{langname}}} verbs that belong to class &amp;quot; .. class .. &amp;quot;.&amp;quot;,&lt;br /&gt;
			breadcrumb = class,&lt;br /&gt;
			umbrella = false,&lt;br /&gt;
			parents = {{&lt;br /&gt;
				name = &amp;quot;verbs by class&amp;quot;,&lt;br /&gt;
				sort = classnum and (&amp;quot;#%02d&amp;quot;):format(classnum) .. suffix or class,&lt;br /&gt;
			}},&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
table.insert(handlers, function(data)&lt;br /&gt;
	local pos, tone = data.label:match(&amp;quot;^(.+) with tone ([^ ]+)$&amp;quot;)&lt;br /&gt;
	if pos then&lt;br /&gt;
		return {&lt;br /&gt;
			description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; with tone &amp;quot; .. tone .. &amp;quot;.&amp;quot;,&lt;br /&gt;
			breadcrumb = tone,&lt;br /&gt;
			-- FIXME, should there be an umbrella category e.g. &amp;#039;Adjectives with tone H by language&amp;#039;?&lt;br /&gt;
			umbrella = false,&lt;br /&gt;
			parents = {{&lt;br /&gt;
				name = pos .. &amp;quot; by tone&amp;quot;,&lt;br /&gt;
				sort = &amp;quot;&amp;quot; .. tone:len() .. tone,&lt;br /&gt;
			}},&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
table.insert(handlers, function(data)&lt;br /&gt;
	local vh, pos = data.label:match(&amp;quot;^(.+)-harmonic ([^ ]+)$&amp;quot;)&lt;br /&gt;
	if pos then&lt;br /&gt;
		return {&lt;br /&gt;
			description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; with vowel harmony in &amp;quot; .. vh .. &amp;quot;.&amp;quot;,&lt;br /&gt;
			breadcrumb = vh,&lt;br /&gt;
			umbrella = false,&lt;br /&gt;
			parents = {{&lt;br /&gt;
				name = pos .. &amp;quot; by vowel harmony&amp;quot;,&lt;br /&gt;
				sort = &amp;quot;&amp;quot; .. vh:len() .. vh,&lt;br /&gt;
			}},&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
table.insert(handlers, function(data)&lt;br /&gt;
	local pos, classifier = data.label:match(&amp;quot;^(nouns) classified by (.+)$&amp;quot;)&lt;br /&gt;
	if pos then&lt;br /&gt;
		local linktext&lt;br /&gt;
		if data.lang then&lt;br /&gt;
			if data.lang:getCode() == &amp;quot;zh&amp;quot; then&lt;br /&gt;
				linktext = require(&amp;quot;Module:zh/link&amp;quot;).link(nil, true, { classifier, tr = &amp;quot;-&amp;quot; }, classifier)&lt;br /&gt;
			else&lt;br /&gt;
				linktext = require(&amp;quot;Module:links&amp;quot;).full_link({ term = classifier, lang = data.lang }, &amp;quot;term&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			linktext = classifier&lt;br /&gt;
		end&lt;br /&gt;
		return {&lt;br /&gt;
			description = &amp;quot;{{{langname}}} &amp;quot; .. pos .. &amp;quot; using &amp;quot; .. linktext .. &amp;quot; as their classifier.&amp;quot;,&lt;br /&gt;
			breadcrumb = classifier,&lt;br /&gt;
			umbrella = false,&lt;br /&gt;
			parents = {{&lt;br /&gt;
				name = pos .. &amp;quot; by classifier&amp;quot;,&lt;br /&gt;
				sort = (data.lang:makeSortKey(classifier)),&lt;br /&gt;
			}},&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels2, RAW_CATEGORIES = raw_categories, HANDLERS = handlers}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:56 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/terms_by_grammatical_category</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/terms by etymology</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_etymology&amp;diff=103&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_etymology&amp;diff=103&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_etymology&quot; title=&quot;Module:Category tree/poscatboiler/data/terms by etymology&quot;&gt;Module:Category tree/poscatboiler/data/terms by etymology&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/terms_by_etymology&amp;amp;diff=103&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:56 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/terms_by_etymology</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/templates</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/templates&amp;diff=101&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/templates&amp;diff=101&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/templates&quot; title=&quot;Module:Category tree/poscatboiler/data/templates&quot;&gt;Module:Category tree/poscatboiler/data/templates&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:Templates|templates]], containing reusable wiki code that help with creating and managing entries.&amp;quot;,&lt;br /&gt;
	umbrella = {&lt;br /&gt;
		parents = {{name = &amp;quot;Templates&amp;quot;, sort = &amp;quot; &amp;quot;}},&lt;br /&gt;
		breadcrumb = &amp;quot;by language&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;auto-table templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates that contain {{{langname}}} tables generated automatically.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;They use the &amp;lt;code&amp;gt;table:&amp;lt;/code&amp;gt; prefix. For example, see [[Template:table:chess pieces/en]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;category boilerplate templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates used to generate descriptions and categorization for category pages.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;definition templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates used in the [[Wiktionary:Glossary#definition line|definition line]] of {{{langname}}} entries to help in creating definitions.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;entry templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates used to help in the creation of {{{langname}}} entries.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;etymology templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates used in the etymology section of {{{langname}}} entries.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;experimental templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates used to test possible content for {{{langname}}} entries.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;form-of templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates used on the definition line of entries for inflected forms of words in {{{langname}}}, to link back to the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;headword-line templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates used to show lines that contain headwords in {{{langname}}}.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;index templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates used to organize {{{langname}}} indexes.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;inflection-table templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates used to show inflection tables for {{{langname}}} terms.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Do particular types of inflection-table templates.&lt;br /&gt;
for _, pos in ipairs({&lt;br /&gt;
	&amp;quot;adjective&amp;quot;,&lt;br /&gt;
	&amp;quot;adverb&amp;quot;,&lt;br /&gt;
	&amp;quot;determiner&amp;quot;,&lt;br /&gt;
	&amp;quot;nominal&amp;quot;,&lt;br /&gt;
	&amp;quot;noun&amp;quot;,&lt;br /&gt;
	&amp;quot;numeral&amp;quot;,&lt;br /&gt;
	&amp;quot;participle&amp;quot;,&lt;br /&gt;
	&amp;quot;postposition&amp;quot;,&lt;br /&gt;
	&amp;quot;preposition&amp;quot;,&lt;br /&gt;
	&amp;quot;pronoun&amp;quot;,&lt;br /&gt;
	&amp;quot;verb&amp;quot;,&lt;br /&gt;
}) do&lt;br /&gt;
	labels[pos .. &amp;quot; inflection-table templates&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;Templates used to show inflection tables for {{{langname}}} &amp;quot; .. pos .. &amp;quot;s.&amp;quot;,&lt;br /&gt;
		parents = {&amp;quot;inflection-table templates&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;list templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates that contain {{{langname}}} lists.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;They use the &amp;lt;code&amp;gt;list:&amp;lt;/code&amp;gt; prefix. For example, see [[Template:list:Latin script letters/en]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;mutation templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates used to show mutation of {{{langname}}} words.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;quotation templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates used to generate quotations for {{{langname}}} entries.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;reference templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates used to generate reference footnotes for {{{langname}}} entries.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;supplementary templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates used to keep contents for other {{{langname}}} templates.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;usage templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates used to show usage notes in {{{langname}}} entries.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Add &amp;#039;umbrella_parents&amp;#039; key if not already present.&lt;br /&gt;
for key, data in pairs(labels) do&lt;br /&gt;
	if not data.umbrella_parents then&lt;br /&gt;
		data.umbrella_parents = &amp;quot;Templates subcategories by language&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	-- Add breadcrumb by chopping off the parent from the end of the label, if possible.&lt;br /&gt;
	if #data.parents == 1 and type(data.parents[1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
		local parent_re = &amp;quot; &amp;quot; .. require(&amp;quot;Module:utilities&amp;quot;).pattern_escape(data.parents[1]) .. &amp;quot;$&amp;quot;&lt;br /&gt;
		if key:find(parent_re) then&lt;br /&gt;
			data.breadcrumb = key:gsub(parent_re, &amp;quot;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Templates&amp;quot;] = {&lt;br /&gt;
	intro = &amp;quot;{{shortcut|WT:T}}&amp;quot;,&lt;br /&gt;
	description = &amp;quot;An organizing category intended for all templates in use on Wiktionary.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;&amp;#039;&amp;#039;See also: [[Wiktionary:Templates]], [[meta:Help:Template]]&amp;#039;&amp;#039;&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;Category:Wiktionary&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Non-production templates and modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates and modules not currently used in production.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{also|Special:UnusedTemplates|Category:Unused templates}}&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;Templates&amp;quot;, &amp;quot;Modules&amp;quot;, &amp;quot;Category:Wiktionary maintenance&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Templates subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering topics related to templates.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;templates&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, RAW_CATEGORIES = raw_categories}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:55 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/templates</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/symbols</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/symbols&amp;diff=99&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/symbols&amp;diff=99&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/symbols&quot; title=&quot;Module:Category tree/poscatboiler/data/symbols&quot;&gt;Module:Category tree/poscatboiler/data/symbols&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;symbols&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} written signs.&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Fundamental&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;diacritical marks&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} glyphs that are added to characters to modify their sounds or meanings.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;symbols&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;Han characters&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} symbols of the Han logographic script, which can represent sounds or convey meanings directly.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;logograms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;ideograms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} symbols that represent objects, ideas or concepts directly.&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Fundamental&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;symbols&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;iteration marks&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} glyphs that act as a shorthand for repeated text.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;abbreviations&amp;quot;, &amp;quot;symbols&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;letters&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} symbols that represent single sounds. Variations of letters, such as letters with diacritics, should also be categorized here.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;symbols&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;ligatures&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} letters that have been combined into a single graphical unit.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;symbols&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;logograms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} symbols that represent single words.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;symbols&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;matched pairs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} pairs of separate characters that are used together. Example: [[( )]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;symbols&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;numeral symbols&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} symbols that represent numerals.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;symbols&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;punctuation marks&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} symbols that indicate structure and organization of writing.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;symbols&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;syllables&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} symbols that represent groups of sounds. Variations of syllables, such as syllables with diacritics, should also be categorized here.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;symbols&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Add &amp;#039;umbrella_parents&amp;#039; key if not already present.&lt;br /&gt;
for key, data in pairs(labels) do&lt;br /&gt;
	if not data.umbrella_parents then&lt;br /&gt;
		data.umbrella_parents = &amp;quot;Symbols subcategories by language&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Symbols subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering topics related to symbols.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;symbols&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, RAW_CATEGORIES = raw_categories}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:55 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/symbols</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/shortenings</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/shortenings&amp;diff=97&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/shortenings&amp;diff=97&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/shortenings&quot; title=&quot;Module:Category tree/poscatboiler/data/shortenings&quot;&gt;Module:Category tree/poscatboiler/data/shortenings&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;shortenings&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are shortened forms of other words or word combinations.&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Terms by etymology subcategories by language&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;abbreviations&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} abbreviated words or groups of words.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;shortenings&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;acronyms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} groups of words represented by parts pronounced together as single words.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;shortenings&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;aphetic forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} words that underwent [[Wiktionary:aphesis|aphesis]], meaning their origin involved a loss or omission of a sound or syllable from their beginning.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;clippings&amp;quot;, &amp;quot;terms by etymology&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;apocopic forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} words that underwent [[Wiktionary:apocope|apocope]], thus their origin involved a loss or omission of a sound or syllable(s) from their end.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;clippings&amp;quot;, &amp;quot;terms by etymology&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;clippings&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} words that were formed from another word by removing part of it, but without changing the part of speech.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;shortenings&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;contractions&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} shortened words or phrases, deriving from multiple words.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;shortenings&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;ellipses&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are shortened versions of longer expressions.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;shortenings&amp;quot;, &amp;quot;terms by etymology&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;initialisms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} groups of words represented by their beginning parts pronounced separately.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;shortenings&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;nomina sacra&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:nomen sacrum|nomina sacra]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;abbreviations&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;pseudo-acronyms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} groups of words that used to represent an acronym but no longer do, or which appear to be acronyms but are not.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;shortenings&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;scribal abbreviations&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} abbreviations used by scribes.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;abbreviations&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;sigla&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} letters or symbols standing for words, word parts or common sequences of letters.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;abbreviations&amp;quot;, &amp;quot;symbols&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;stenoscript abbreviations&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} abbreviations used in [[Wiktionary:Stenoscript|stenoscript]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;abbreviations&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;syncopic forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} words that underwent [[Wiktionary:syncope|syncope]], thus their origin involved a loss or omission of a sound or syllable from their interior.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;clippings&amp;quot;, &amp;quot;terms by etymology&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Add &amp;#039;umbrella_parents&amp;#039; key if not already present.&lt;br /&gt;
for key, data in pairs(labels) do&lt;br /&gt;
	if not data.umbrella_parents then&lt;br /&gt;
		data.umbrella_parents = &amp;quot;Shortenings subcategories by language&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Shortenings subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering topics related to shortenings.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;shortenings&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, RAW_CATEGORIES = raw_categories}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:55 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/shortenings</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/scripts</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/scripts&amp;diff=95&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/scripts&amp;diff=95&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/scripts&quot; title=&quot;Module:Category tree/poscatboiler/data/scripts&quot;&gt;Module:Category tree/poscatboiler/data/scripts&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local raw_categories = {}&lt;br /&gt;
local raw_handlers = {}&lt;br /&gt;
&lt;br /&gt;
-- A list of Unicode blocks to which the characters of the script or scripts belong is created by this module&lt;br /&gt;
-- and displayed in script category pages.&lt;br /&gt;
local blocks_submodule = &amp;quot;Module:category tree/poscatboiler/data/scripts/blocks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                               SCRIPT LABELS                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
The following values are recognized for each script label:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;description&amp;#039;&lt;br /&gt;
  A plain English description for the label. Special template substitutions are recognized; see below.&lt;br /&gt;
&amp;#039;umbrella_parents&amp;#039;&lt;br /&gt;
  A table listing one or more parent categories of the umbrella category &amp;#039;LABELS by script&amp;#039; for this label.&lt;br /&gt;
  The format is as for regular raw categories (see [[Module:category tree/poscatboiler/data/documentation]]).&lt;br /&gt;
&amp;#039;umbrella_breadcrumb&amp;#039;&lt;br /&gt;
  The breadcrumb to use in the umbrella category &amp;#039;LABELS by script&amp;#039;. Defaults to &amp;quot;by script&amp;quot;.&lt;br /&gt;
&amp;#039;catfix&amp;#039;&lt;br /&gt;
  Same as the &amp;#039;catfix&amp;#039; parameter for regular raw categories (see [[Module:category tree/poscatboiler/data/documentation]]).&lt;br /&gt;
  This specifies a language code to use to ensure that pages in the category are displayed in the right font and linked&lt;br /&gt;
  appropriately. If this is set, the &amp;#039;catfix_sc&amp;#039; parameter will effectively be set with the script code in question.&lt;br /&gt;
&lt;br /&gt;
Special template-like parameters can be used inside the &amp;#039;description&amp;#039; field (as well as in the &amp;#039;root_description&amp;#039;, &amp;#039;root_intro&amp;#039; and&lt;br /&gt;
&amp;#039;root_additional&amp;#039; variable values initialized below). These are replaced by the equivalent text.&lt;br /&gt;
&lt;br /&gt;
{{{code}}}: Script code.&lt;br /&gt;
{{{codes}}}: A comma-separated list of all the alias codes for this script. This applies especially to Arabic, which has&lt;br /&gt;
  multiple aliases (e.g. &amp;#039;tt-Arab&amp;#039;, &amp;#039;ur-Arab&amp;#039;, &amp;#039;ku-Arab&amp;#039;, etc.).&lt;br /&gt;
{{{codesplural}}}: The value &amp;quot;s&amp;quot; if {{{codes}}} lists more than one code, otherwise an empty string.&lt;br /&gt;
{{{scname}}}: The name of the script that the category belongs to.&lt;br /&gt;
{{{sccat}}}: The name of the script&amp;#039;s main category, which adds &amp;quot;script&amp;quot; to the capitalized regular name.&lt;br /&gt;
{{{scdisp}}}: The display form of the script, which adds &amp;quot;script&amp;quot; to the regular name.&lt;br /&gt;
{{{scprosename}}}: Same as {{{scdisp}}} for Morse code and flag semaphore, otherwise adds &amp;quot;the&amp;quot; before {{{scdisp}}}.&lt;br /&gt;
{{{Wikipedia}}}: The Wikipedia article for the script (if it is present in the language&amp;#039;s data file), or else {{{sccat}}}.&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
local script_labels = {}&lt;br /&gt;
&lt;br /&gt;
script_labels[&amp;quot;characters&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;All characters from {{{scprosename}}}, and their possible variations, such as versions with diacritics and combinations recognized as single characters in any language.&amp;quot;,&lt;br /&gt;
	umbrella_parents = {&amp;quot;Fundamental&amp;quot;},&lt;br /&gt;
	umbrella_breadcrumb = &amp;quot;Characters by script&amp;quot;,&lt;br /&gt;
	catfix = &amp;quot;mul&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
script_labels[&amp;quot;appendices&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Appendices about {{{scprosename}}}.&amp;quot;,&lt;br /&gt;
	umbrella_parents = {&amp;quot;Category:Appendices&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
script_labels[&amp;quot;languages&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Languages that use {{{scprosename}}}.&amp;quot;,&lt;br /&gt;
	umbrella_parents = {&amp;quot;All languages&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
script_labels[&amp;quot;templates&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Templates with predefined contents for {{{scprosename}}}.&amp;quot;,&lt;br /&gt;
	umbrella_parents = {&amp;quot;Templates&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
script_labels[&amp;quot;modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules with scripts for {{{scprosename}}}.&amp;quot;,&lt;br /&gt;
	umbrella_parents = {&amp;quot;Modules&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;All scripts&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;This category contains the categories for every script (writing system) on Wiktionary.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;See [[Wiktionary:List of scripts]] for a full list.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;Fundamental&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Types of writing systems listed in [[Module:writing systems/data]].&lt;br /&gt;
raw_categories[&amp;quot;Scripts by type&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Scripts classified by how they represent words.&amp;quot;,&lt;br /&gt;
	parents = {{ name = &amp;quot;All scripts&amp;quot;, sort = &amp;quot; &amp;quot; }},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Alphabetic writing systems&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Scripts whose symbols represent individual speech sounds.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;Scripts by type&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Abjads&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Scripts whose basic symbols represent consonants. Some of these are impure abjads, which have letters for some vowels.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;Scripts by type&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Abugidas&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Scripts whose symbols represent consonant and vowel combinations. Symbols representing the same consonant combined with different vowels are for the most part similar in form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;Scripts by type&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Logographic writing systems&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Scripts whose symbols represent individual words.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;Scripts by type&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Pictographic writing systems&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Scripts whose symbols represent individual words by using symbols that resemble the physical objects to which those words refer.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;Scripts by type&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Semisyllabaries&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Scripts which are a combination of an alphabet and a syllbary.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;Scripts by type&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Syllabaries&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Scripts whose symbols represent consonant and vowel combinations. Symbols representing the same consonant combined with different vowels are for the most part different in form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;Scripts by type&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for script_label, obj in pairs(script_labels) do&lt;br /&gt;
	raw_categories[mw.getContentLanguage():ucfirst(script_label) .. &amp;quot; by script&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;Categories with &amp;quot; .. script_label .. &amp;quot; of various specific scripts.&amp;quot;,&lt;br /&gt;
		breadcrumb = obj.umbrella_breadcrumb or &amp;quot;by script&amp;quot;,&lt;br /&gt;
		parents = obj.umbrella_parents,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                RAW HANDLERS                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Intro text for &amp;quot;root&amp;quot; categories such as [[Category:Arabic script]]. Template substitutions are as described above.&lt;br /&gt;
local root_intro = [=[&amp;lt;div style=&amp;quot;clear: right; border: solid #aaa 1px; margin: 1 1 1 1; background: #f9f9f9; width: 250px; padding: 5px; text-align: left; float: right&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; margin-bottom: 10px; margin-top: 5px&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;{{{scdisp}}}&amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;font-size: 90%; background: #f9f9f9&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; height: 35px;&amp;quot; | [[File:Book notice.png|35px|none|Information]] || {{{scdisp}}} information&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;padding-left: 50px; border-bottom: 1px solid lightgray;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;[[Appendix:{{{sccat}}}]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align: Middle; height: 35px;&amp;quot; | [[File:Abc box.svg|35px|none|Code]] || {{{scdisp}}} code&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;padding-left: 50px; border-bottom: 1px solid lightgray;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;{{{code}}}&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;]=]&lt;br /&gt;
&lt;br /&gt;
-- Short description for &amp;quot;root&amp;quot; categories such as [[Category:Arabic script]]. Template substitutions are as described above.&lt;br /&gt;
local root_description = &amp;quot;This is the main category of &amp;#039;&amp;#039;&amp;#039;{{{scprosename}}}&amp;#039;&amp;#039;&amp;#039;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- Additional description text for &amp;quot;root&amp;quot; categories such as [[Category:Arabic script]]. Template substitutions are as described above.&lt;br /&gt;
local root_additional = [=[Information about {{{scprosename}}} may be available at [[Appendix:{{{sccat}}}]].&lt;br /&gt;
&lt;br /&gt;
In various places at Wiktionary, {{{scprosename}}} is represented by the [[Wiktionary:Scripts|code{{{codesplural}}}]] {{{codes}}}.]=]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Replace template notation {{{}}} with variables.&lt;br /&gt;
local function substitute_template_refs(text, sc)&lt;br /&gt;
	local displayForm = sc:getDisplayForm()&lt;br /&gt;
	local scname = sc:getCanonicalName()&lt;br /&gt;
	local codes = {}&lt;br /&gt;
	&lt;br /&gt;
	for code, data in pairs(mw.loadData(&amp;quot;Module:scripts/data&amp;quot;)) do&lt;br /&gt;
		if data[1] == scname then&lt;br /&gt;
			table.insert(codes, &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. code .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if codes[2] then&lt;br /&gt;
		table.sort(&lt;br /&gt;
			codes,&lt;br /&gt;
			-- Four-letter codes have length 10, because they are bolded: &amp;#039;&amp;#039;&amp;#039;Latn&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
			function(code1, code2)&lt;br /&gt;
				if #code1 == 10 then&lt;br /&gt;
					if #code2 == 10 then&lt;br /&gt;
						return code1 &amp;lt; code2&lt;br /&gt;
					else&lt;br /&gt;
						return true&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					if #code2 == 10 then&lt;br /&gt;
						return false -- four-letter codes before other codes&lt;br /&gt;
					else&lt;br /&gt;
						return code1 &amp;lt; code2&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local content = {&lt;br /&gt;
		code = sc:getCode(),&lt;br /&gt;
		codesplural = codes[2] and &amp;quot;s&amp;quot; or &amp;quot;&amp;quot;,&lt;br /&gt;
		codes = table.concat(codes, &amp;quot;, &amp;quot;),&lt;br /&gt;
		scname = scname,&lt;br /&gt;
		sccat = sc:getCategoryName(),&lt;br /&gt;
		scdisp = displayForm,&lt;br /&gt;
		scprosename = (displayForm:find(&amp;quot;code&amp;quot;) or displayForm:find(&amp;quot;semaphore&amp;quot;)) and displayForm or &amp;quot;the &amp;quot; .. displayForm,&lt;br /&gt;
		Wikipedia = sc:getWikipediaArticle(),&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	text = string.gsub(&lt;br /&gt;
		text,&lt;br /&gt;
		&amp;quot;{{{([^}]+)}}}&amp;quot;,&lt;br /&gt;
		function (parameter)&lt;br /&gt;
			return content[parameter] or error(&amp;quot;No value for script category parameter &amp;#039;&amp;quot; .. parameter .. &amp;quot;&amp;#039;.&amp;quot;)&lt;br /&gt;
		end)&lt;br /&gt;
	&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function get_root_additional(additional, sc)&lt;br /&gt;
	local ret = { additional }&lt;br /&gt;
	&lt;br /&gt;
	local systems = sc:getSystems()&lt;br /&gt;
	for _, system in ipairs(systems) do&lt;br /&gt;
		table.insert(ret, &amp;quot;\n\nThe {{{scname}}} script is &amp;quot;)&lt;br /&gt;
		if mw.ustring.sub(system:getCanonicalName(), 1, 1) == &amp;quot;a&amp;quot; then&lt;br /&gt;
			table.insert(ret, &amp;quot;an &amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(ret, &amp;quot;a &amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local singular = system:getCategoryName()&lt;br /&gt;
		singular = mw.getContentLanguage():lcfirst(singular)&lt;br /&gt;
		singular = mw.ustring.gsub(singular, &amp;quot;ies$&amp;quot;, &amp;quot;y&amp;quot;)&lt;br /&gt;
		singular = mw.ustring.gsub(singular, &amp;quot;s$&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
		table.insert(ret, singular .. &amp;quot;.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local blocks = require(blocks_submodule)&lt;br /&gt;
		.print_blocks_by_canonical_name(sc:getCanonicalName())&lt;br /&gt;
	&lt;br /&gt;
	if blocks then&lt;br /&gt;
		table.insert(ret, &amp;quot;\n&amp;quot;)&lt;br /&gt;
		table.insert(ret, blocks)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return substitute_template_refs(table.concat(ret), sc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function get_script_obj(script)&lt;br /&gt;
	local scriptname = script:gsub(&amp;quot; script$&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	return require(&amp;quot;Module:scripts&amp;quot;).getByCanonicalName(scriptname) or&lt;br /&gt;
		-- [[Category:Undetermined script]] vs. name of script = &amp;quot;undetermined&amp;quot; &lt;br /&gt;
		require(&amp;quot;Module:scripts&amp;quot;).getByCanonicalName(mw.ustring.lower(scriptname))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local scripts_without_script_in_category = {&lt;br /&gt;
	-- FIXME, consider checking all scripts for names without &amp;#039;script&amp;#039; in them.&lt;br /&gt;
	[&amp;quot;Morse code&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Flag semaphore&amp;quot;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Handler for &amp;#039;SCRIPT script&amp;#039; e.g. [[Category:Arabic script]] as well as [[Category:Morse code]] and&lt;br /&gt;
-- [[Category:Flag semaphore]].&lt;br /&gt;
table.insert(raw_handlers, function(data)&lt;br /&gt;
	if not data.category:match(&amp;quot;^(.+ script)$&amp;quot;) and not scripts_without_script_in_category[data.category] then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local sc = get_script_obj(data.category)&lt;br /&gt;
	if not sc then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Compute parents.&lt;br /&gt;
	local parents = {}&lt;br /&gt;
	local systems = sc:getSystems()&lt;br /&gt;
	for _, system in ipairs(systems) do&lt;br /&gt;
		table.insert(parents, system:getCategoryName())&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(parents, &amp;quot;All scripts&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	-- Compute (extra) children.&lt;br /&gt;
	local children = {}&lt;br /&gt;
	for script_label, _ in pairs(script_labels) do&lt;br /&gt;
		table.insert(children, data.category .. &amp;quot; &amp;quot; .. script_label)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return {&lt;br /&gt;
		intro = substitute_template_refs(root_intro, sc),&lt;br /&gt;
		description = substitute_template_refs(root_description, sc),&lt;br /&gt;
		additional = get_root_additional(root_additional, sc),&lt;br /&gt;
		parents = parents,&lt;br /&gt;
		breadcrumb = sc:getCategoryName(),&lt;br /&gt;
		extra_children = children,&lt;br /&gt;
		can_be_empty = true,&lt;br /&gt;
	}&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Handler for &amp;#039;SCRIPT script LABELS&amp;#039; e.g. [[Category:Arabic script templates]] as well as [[Category:Morse code LABELS]] and&lt;br /&gt;
-- [[Category:Flag semaphore LABELS]].&lt;br /&gt;
table.insert(raw_handlers, function(data)&lt;br /&gt;
	local script, label&lt;br /&gt;
	for lab, _ in pairs(script_labels) do&lt;br /&gt;
		-- FIXME, if we add script labels with a hyphen in them we&amp;#039;ll have to escape the hyphen&lt;br /&gt;
		-- in the following patterns.&lt;br /&gt;
		script, label = data.category:match(&amp;quot;^(.+ script) (&amp;quot; .. lab .. &amp;quot;)$&amp;quot;)&lt;br /&gt;
		if script then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
		-- Check for e.g. &amp;#039;Morse code characters&amp;#039; or &amp;#039;Flag semaphore templates&amp;#039;.&lt;br /&gt;
		script, label = data.category:match(&amp;quot;^(.+) (&amp;quot; .. lab .. &amp;quot;)$&amp;quot;)&lt;br /&gt;
		if script then&lt;br /&gt;
			if scripts_without_script_in_category[script] then&lt;br /&gt;
				break&lt;br /&gt;
			else&lt;br /&gt;
				script = nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not script then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local sc = get_script_obj(script)&lt;br /&gt;
	if not sc then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local label_obj = script_labels[label]&lt;br /&gt;
	-- Compute description.&lt;br /&gt;
	local desc = substitute_template_refs(label_obj.description, sc)&lt;br /&gt;
&lt;br /&gt;
	-- Compute parents.&lt;br /&gt;
	local parents = {&lt;br /&gt;
		{name = script, sort = label},&lt;br /&gt;
		-- umbrella category&lt;br /&gt;
		mw.getContentLanguage():ucfirst(label) .. &amp;quot; by script&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return {&lt;br /&gt;
		description = substitute_template_refs(label_obj.description, sc),&lt;br /&gt;
		parents = parents,&lt;br /&gt;
		breadcrumb = label,&lt;br /&gt;
		catfix = label_obj.catfix,&lt;br /&gt;
		catfix_sc = label_obj.catfix and sc:getCode(),&lt;br /&gt;
	}&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:55 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/scripts</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/rhymes</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/rhymes&amp;diff=93&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/rhymes&amp;diff=93&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/rhymes&quot; title=&quot;Module:Category tree/poscatboiler/data/rhymes&quot;&gt;Module:Category tree/poscatboiler/data/rhymes&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
local raw_handlers = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;rhymes&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;List of indexes of {{{langname}}} words by their rhymes.&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Fundamental&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;refractory rhymes&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Lists of {{{langname}}} words that don&amp;#039;t rhyme with other words.&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Rhymes subcategories by language&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;rhymes&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Rhymes subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering topics related to rhymes.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;rhymes&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Rhymes&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering rhymes by language.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;rhymes&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                               RAW HANDLERS                              --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.insert(raw_handlers, function(data)&lt;br /&gt;
	local function rhymeTopCategory(lang)&lt;br /&gt;
		return {&lt;br /&gt;
			lang = lang:getCode(),&lt;br /&gt;
			description = &amp;quot;Lists of &amp;quot; .. lang:makeCategoryLink() .. &amp;quot; words by their rhymes.&amp;quot;,&lt;br /&gt;
			additional = &amp;quot;This is an umbrella category. It contains no dictionary entries, but rather possible rhymes as subcategories.&amp;quot;,&lt;br /&gt;
			parents = {&lt;br /&gt;
				&amp;quot;{{{langcat}}}&amp;quot;,&lt;br /&gt;
				{name = &amp;quot;Rhymes&amp;quot;, sort = langname},&lt;br /&gt;
			},&lt;br /&gt;
			breadcrumb = &amp;quot;Rhymes&amp;quot;,&lt;br /&gt;
			toctemplateprefix = &amp;quot;rhymetop&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local function linkRhymeIfExists(lang, rhyme) -- {{change new|Though this could be ported to Wikitionary}}&lt;br /&gt;
		if mw.title.new(&amp;#039;Rhymes:&amp;#039; .. lang:getCanonicalName() .. &amp;quot;/&amp;quot; .. rhyme).exists then&lt;br /&gt;
			return &amp;quot;&amp;#039;&amp;#039;&amp;#039;[[Rhymes:&amp;quot; .. lang:getCanonicalName() .. &amp;quot;/&amp;quot; .. rhyme ..&amp;#039;|&amp;lt;span class=&amp;quot;IPA&amp;quot;&amp;gt;-&amp;#039; .. rhyme .. &amp;quot;&amp;lt;/span&amp;gt;]]&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		return &amp;#039;&amp;lt;span class=&amp;quot;IPA&amp;quot;&amp;gt;-&amp;#039; .. rhyme .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local function rhymeCategory(lang, rhyme)&lt;br /&gt;
		return {&lt;br /&gt;
			lang = lang:getCode(),&lt;br /&gt;
			description = &amp;quot;List of &amp;quot; .. lang:makeCategoryLink() .. &amp;#039; words with the rhyme &amp;#039; .. linkRhymeIfExists(lang, rhyme) .. &amp;#039;.&amp;#039;,&lt;br /&gt;
			parents = {&lt;br /&gt;
				{name = &amp;quot;Rhymes:&amp;quot; .. lang:getCanonicalName(), sort = rhyme},&lt;br /&gt;
			},&lt;br /&gt;
			breadcrumb = &amp;#039;&amp;lt;span class=&amp;quot;IPA&amp;quot;&amp;gt;-&amp;#039; .. rhyme .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
			displaytitle = &amp;#039;Rhymes:&amp;#039; .. lang:getCanonicalName() .. &amp;#039;/&amp;lt;span class=&amp;quot;IPA&amp;quot;&amp;gt;&amp;#039; .. rhyme .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local function rhymeSyllableCountCategory(lang, rhyme, syllableCount)&lt;br /&gt;
		return {&lt;br /&gt;
			lang = lang:getCode(),&lt;br /&gt;
			description = &amp;quot;List of &amp;quot; .. syllableCount .. &amp;quot;-syllable &amp;quot; .. lang:makeCategoryLink() .. &amp;#039; words with the rhyme &amp;#039; .. linkRhymeIfExists(lang, rhyme) .. &amp;#039;.&amp;#039;,&lt;br /&gt;
			parents = {&lt;br /&gt;
				{name = &amp;quot;Rhymes:&amp;quot; .. lang:getCanonicalName() .. &amp;quot;/&amp;quot; .. rhyme, sort = syllableCount},&lt;br /&gt;
			},&lt;br /&gt;
			breadcrumb = tostring(syllableCount) .. &amp;quot; syllables&amp;quot;,&lt;br /&gt;
			displaytitle = &amp;#039;Rhymes:&amp;#039; .. lang:getCanonicalName() .. &amp;#039;/&amp;lt;span class=&amp;quot;IPA&amp;quot;&amp;gt;&amp;#039; .. rhyme .. &amp;#039;&amp;lt;/span&amp;gt;/&amp;#039; .. tostring(syllableCount) .. &amp;quot; syllable&amp;quot; .. (syllableCount &amp;gt; 1 and &amp;quot;s&amp;quot; or &amp;quot;&amp;quot;)&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local langname = data.category:match(&amp;quot;^Rhymes:([^/]+)&amp;quot;)&lt;br /&gt;
	if langname then&lt;br /&gt;
		local lang = require(&amp;quot;Module:languages&amp;quot;).getByCanonicalName(langname)&lt;br /&gt;
		if lang then&lt;br /&gt;
			local tokens = mw.text.split(data.category, &amp;quot;/&amp;quot;)&lt;br /&gt;
			if #tokens &amp;gt; 1 then&lt;br /&gt;
				local rhyme = tokens[2]&lt;br /&gt;
				if #tokens == 3 then&lt;br /&gt;
					-- rhyme + syllable count category&lt;br /&gt;
					local syllables = nil&lt;br /&gt;
					if tokens[3] == &amp;quot;1 syllable&amp;quot; then&lt;br /&gt;
						syllables = 1&lt;br /&gt;
					else&lt;br /&gt;
						local syllablesregex = tokens[3]:match(&amp;quot;(%d+) syllables&amp;quot;)&lt;br /&gt;
						if syllablesregex then&lt;br /&gt;
							syllables = tonumber(syllablesregex)&lt;br /&gt;
							if syllables &amp;lt; 2 then&lt;br /&gt;
								syllables = nil&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if syllables then&lt;br /&gt;
						return rhymeSyllableCountCategory(lang, rhyme, syllables)&lt;br /&gt;
					end&lt;br /&gt;
				elseif #tokens == 2 then&lt;br /&gt;
					-- rhyme category&lt;br /&gt;
					return rhymeCategory(lang, rhyme)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- rhyme language top category&lt;br /&gt;
				return rhymeTopCategory(lang)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:54 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/rhymes</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/phrases</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/phrases&amp;diff=91&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/phrases&amp;diff=91&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/phrases&quot; title=&quot;Module:Category tree/poscatboiler/data/phrases&quot;&gt;Module:Category tree/poscatboiler/data/phrases&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;phrases&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} groups of words elaborated to express ideas, not necessarily [[Wiktionary:phrase|phrase]]s in the grammatical sense.&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Lemmas subcategories by language&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;lemmas&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;adverb-adjective phrases&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} phrases in which an adverb modifies the adjective that heads the phrase.&amp;quot;,&lt;br /&gt;
	umbrella_parents = {name = &amp;quot;phrases&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	parents = {&amp;quot;phrases&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;alliterative phrases&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} phrases composed of two or more words that alliterate.&amp;quot;,&lt;br /&gt;
	umbrella_parents = {name = &amp;quot;phrases&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	parents = {&amp;quot;phrases&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;rhyming phrases&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} phrases composed of two or more words that rhyme.&amp;quot;,&lt;br /&gt;
	umbrella_parents = {name = &amp;quot;phrases&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	parents = {&amp;quot;phrases&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;sentences&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:sentence|sentence]]s.&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Fundamental&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;phrasebook&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} non-idiomatic phrases that are used in common situations, and may be useful to language learners or travellers.&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;phrases&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;Phrasebooks by language&amp;quot;, raw = true, sort = &amp;quot;{{{langname}}}&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
	umbrella = false, -- Umbrella has a nonstandard name so we treat it as a raw category&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Phrasebooks by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Categories with phrasebooks in various specific languages.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Phrasebook categories contain non-idiomatic phrases that are used in common situations, and may be useful to language learners or travellers.\n\n&amp;quot; ..&lt;br /&gt;
	&amp;quot;See [[Wiktionary:Phrasebook]] for more information.\n\n{{{umbrella_msg}}}&amp;quot;,&lt;br /&gt;
	parents = &amp;quot;Fundamental&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for _, category in ipairs({&lt;br /&gt;
	{name = &amp;quot;Basic&amp;quot;, topics = {}},&lt;br /&gt;
	{name = &amp;quot;Communication&amp;quot;, topics = {&amp;quot;Communication&amp;quot;}},&lt;br /&gt;
	{name = &amp;quot;Emergencies&amp;quot;, topics = {&amp;quot;Emergency medicine&amp;quot;}},&lt;br /&gt;
	{name = &amp;quot;Ethnicity&amp;quot;, topics = {&amp;quot;Ethnicity&amp;quot;}},&lt;br /&gt;
	{name = &amp;quot;Family&amp;quot;, topics = {&amp;quot;Family&amp;quot;}},&lt;br /&gt;
	{name = &amp;quot;Farewells&amp;quot;, topics = {&amp;quot;Farewells&amp;quot;}},&lt;br /&gt;
	{name = &amp;quot;Festivities&amp;quot;, topics = {}},&lt;br /&gt;
	{name = &amp;quot;Food and drink&amp;quot;, topics = {&amp;quot;Food and drink&amp;quot;}},&lt;br /&gt;
	{name = &amp;quot;Greetings&amp;quot;, topics = {&amp;quot;Greetings&amp;quot;}},&lt;br /&gt;
	{name = &amp;quot;Health&amp;quot;, topics = {&amp;quot;Health&amp;quot;}},&lt;br /&gt;
	{name = &amp;quot;Love&amp;quot;, topics = {&amp;quot;Love&amp;quot;}},&lt;br /&gt;
	{name = &amp;quot;Money&amp;quot;, topics = {&amp;quot;Money&amp;quot;}},&lt;br /&gt;
	{name = &amp;quot;Needs&amp;quot;, topics = {}},&lt;br /&gt;
	{name = &amp;quot;Quotes&amp;quot;, topics = {}},&lt;br /&gt;
	{name = &amp;quot;Religion&amp;quot;, topics = {&amp;quot;Religion&amp;quot;}},&lt;br /&gt;
	{name = &amp;quot;Sex&amp;quot;, topics = {&amp;quot;Sex&amp;quot;}},&lt;br /&gt;
	{name = &amp;quot;Time&amp;quot;, topics = {&amp;quot;Time&amp;quot;}},&lt;br /&gt;
	{name = &amp;quot;Travel&amp;quot;, topics = {&amp;quot;Travel&amp;quot;}},&lt;br /&gt;
	{name = &amp;quot;Weather&amp;quot;, topics = {&amp;quot;Weather&amp;quot;}},&lt;br /&gt;
}) do&lt;br /&gt;
	local parents = {&lt;br /&gt;
		{name = &amp;quot;phrasebook&amp;quot;, sort = category.name},&lt;br /&gt;
		{name = &amp;quot;Phrasebooks by language/&amp;quot; .. category.name, raw = true, sort = &amp;quot;{{{langname}}}&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
	for _, topic in ipairs(category.topics) do&lt;br /&gt;
		table.insert(parents, {module = &amp;quot;topic cat&amp;quot;, args = {code = &amp;quot;{{{langcode}}}&amp;quot;, label = topic}, sort = &amp;quot; &amp;quot;})&lt;br /&gt;
	end&lt;br /&gt;
	labels[&amp;quot;phrasebook/&amp;quot; .. category.name] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} common non-idiomatic phrases in the category &amp;#039;&amp;quot; .. category.name .. &amp;quot;&amp;#039;.&amp;quot;,&lt;br /&gt;
		breadcrumb = category.name,&lt;br /&gt;
		parents = parents,&lt;br /&gt;
		umbrella = false,&lt;br /&gt;
	}&lt;br /&gt;
	raw_categories[&amp;quot;Phrasebooks by language/&amp;quot; .. category.name] = {&lt;br /&gt;
		description = &amp;quot;Categories with common non-idiomatic phrases in the category &amp;#039;&amp;quot; .. category.name .. &amp;quot;&amp;#039;, in various specific languages.&amp;quot;,&lt;br /&gt;
		additional = &amp;quot;{{{umbrella_msg}}}&amp;quot;,&lt;br /&gt;
		parents = {{name = &amp;quot;Phrasebooks by language&amp;quot;, sort = &amp;quot; &amp;quot;}},&lt;br /&gt;
		breadcrumb = category.name,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, RAW_CATEGORIES = raw_categories}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:54 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/phrases</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/non-lemma forms</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/non-lemma_forms&amp;diff=89&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/non-lemma_forms&amp;diff=89&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/non-lemma_forms&quot; title=&quot;Module:Category tree/poscatboiler/data/non-lemma forms&quot;&gt;Module:Category tree/poscatboiler/data/non-lemma forms&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;non-lemma forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} inflected forms of other [[Wiktionary:Lemmas|lemmas]], categorized by their part of speech.&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Fundamental&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;active participle forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} active participles that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participle forms&amp;quot;, {name = &amp;quot;active participles&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;active participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express an agent actively performing an action.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;active adjectival participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that function as adjectives and express an agent actively performing an action.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;, &amp;quot;adjectives&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;adjectival participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that function as adjectives.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;, &amp;quot;adjectives&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;adjective construct forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adjectives that are inflected to modify a noun in a genitive construction.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;adjective forms&amp;quot;, sort = &amp;quot;construct&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;adjective definite forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adjectives that are inflected to give attributes to specific and identifiable nouns.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;adjective forms&amp;quot;, sort = &amp;quot;definite forms&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;adjective dual forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adjectives that are inflected to be quantified as two.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;adjective forms&amp;quot;, sort = &amp;quot;dual forms&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;adjective feminine forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adjectives that are inflected to give attributes to nouns associated to female beings.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;adjective forms&amp;quot;, sort = &amp;quot;feminine forms&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;adjective forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adjectives that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;adjectives&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;adjective indefinite forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adjectives that are inflected to give attributes to unspecified nouns.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;adjective forms&amp;quot;, sort = &amp;quot;indefinite forms&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;adjective plural forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adjectives that are inflected to give attributes to nouns quantified as more than one (more than two in some languages with dual number).&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;adjective forms&amp;quot;, sort = &amp;quot;plural forms&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;broken noun plural forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} nouns that are inflected for plural as in Arabic&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;noun plural forms&amp;quot;, sort = &amp;quot;plural forms&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;adverb forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adverbs that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;adverbs&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;adverbial participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that function as adverbs.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;, &amp;quot;adverbs&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;agent participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express an agent by who something is done.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;anterior adverbial participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that function as adverbs and express an action completed before the one expressed by the primary verb.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;, &amp;quot;adverbs&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;article forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} articles that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;determiner forms&amp;quot;, {name = &amp;quot;articles&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;circumfix forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} circumfixes that are inflected to express grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;circumfixes&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;classifier forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} classifiers that are inflected to express grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;classifiers&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;classifier singular forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} classifiers that are inflected for singular number.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;classifier forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;collective plurals&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} nominal plural forms with specifically collective semantics.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;noun forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;comparative adjective forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} comparative adjectives that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;comparative adjectives&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;comparative adjectives&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adjectives that express attributes in a relatively higher degree, or serve to set apart one thing from another.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;adjective forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;comparative adverb forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} comparative adverbs that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;comparative adverbs&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;comparative adverbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adverbs that express attributes in a relatively higher degree, or serve to set apart one thing from another.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;adverb forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;conjunction forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} conjunctions that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;conjunctions&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;contemporary adverbial participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that function as adverbs and express an action occuring simultaneously with the one expressed by the primary verb.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;, &amp;quot;adverbs&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;converbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} verb forms that build clauses which function as adverbials.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;verb forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;determiner comparative forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} determiners that are inflected to display relative degrees of given qualities between nouns.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;determiner forms&amp;quot;, sort = &amp;quot;comparative forms&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;determiner forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} determiners that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;determiners&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;diminutive gerunds&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} diminutives of gerunds.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;verb forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;equative adjective forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} equative adjectives that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;equative adjectives&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;equative adjectives&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adjectives that express similar degrees of given qualities between nouns, i.e. &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039; is as &amp;#039;&amp;#039;(insert adjective)&amp;#039;&amp;#039; as &amp;#039;&amp;#039;&amp;#039;B&amp;#039;&amp;#039;&amp;#039;.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;adjective forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;equative adverb forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} equative adverbs that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;equative adverbs&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;equative adverbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adverbs that express similar degrees of given qualities between verbs, i.e. &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039; as &amp;#039;&amp;#039;(insert adverb)&amp;#039;&amp;#039; as &amp;#039;&amp;#039;&amp;#039;B&amp;#039;&amp;#039;&amp;#039;.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;adverb forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;exaggerated adjective forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} exaggerated adjectives that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;exaggerated adjectives&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;exaggerated adjectives&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adjectives that express attributes in an even more magnified degree than the superlative forms.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;adjective forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;excessive adjective forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} exaggerated adjectives that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;excessive adjectives&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;excessive adjectives&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adjectives that express attributes in an excessive degree.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;adjective forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;excessive adverbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adverbs that express attributes in an excessive degree.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;adverb forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;extended adjective forms&amp;quot;] = {&lt;br /&gt;
	parents = {&amp;quot;adjective forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;future active participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express an agent actively performing an action in future time.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;future participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that indicate future events.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;future passive participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express a patient having an action performed on it in future time.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function gerund_description(data)&lt;br /&gt;
	local default_text = &amp;quot;{{{langname}}} verbs that are conjugated to indicate ongoing events at unspecified moments.&amp;quot;&lt;br /&gt;
	if not data.lang then&lt;br /&gt;
		-- This happens e.g. in [[:Category:Gerunds by language]].&lt;br /&gt;
		return default_text&lt;br /&gt;
	else&lt;br /&gt;
		local langcode = data.lang:getCode()&lt;br /&gt;
		if langcode == &amp;quot;sq&amp;quot; or langcode == &amp;quot;kmr&amp;quot; or langcode == &amp;quot;liv&amp;quot; or data.lang:inFamily(&amp;quot;gem&amp;quot;, &amp;quot;itc&amp;quot;) then&lt;br /&gt;
			return &amp;quot;{{{langname}}} forms that generally act as an action noun for the verb that they are formed from.&amp;quot;&lt;br /&gt;
		elseif langcode == &amp;quot;sa&amp;quot; or langcode == &amp;quot;pi&amp;quot; then&lt;br /&gt;
			return &amp;quot;{{{langname}}} verb forms used in a clause to indicate a prior action by the subject of the sentence.&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			return default_text&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
labels[&amp;quot;gerunds&amp;quot;] = {&lt;br /&gt;
	description = gerund_description,&lt;br /&gt;
	additional = &amp;quot;{{small|[Edit function gerund_description() in [[Module:category tree/poscatboiler/data/non-lemma forms]] to change this description.]}}&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;verb forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;imperfect participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express an ongoing or continuous action.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;infinitive forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} infinitives that are conjugated to express grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;infinitives&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;infinitives&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} non-finite verb forms of various kinds.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;verb forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;intensive adjectives&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adjectives that are derived from a base word to express a stronger concept than the base word.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;adjective forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;interjection forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} interjections that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;interjections&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;manuscript forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} words as they appear in original manuscripts.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;mutated forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms whose initial consonant is mutated due to the effect of the preceding word.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local inflected_pos_for_mutation = {&lt;br /&gt;
	&amp;quot;adjective&amp;quot;,&lt;br /&gt;
	&amp;quot;adverb&amp;quot;,&lt;br /&gt;
	&amp;quot;determiner&amp;quot;,&lt;br /&gt;
	&amp;quot;interjection&amp;quot;,&lt;br /&gt;
	&amp;quot;noun&amp;quot;,&lt;br /&gt;
	&amp;quot;numeral&amp;quot;,&lt;br /&gt;
	&amp;quot;participle&amp;quot;,&lt;br /&gt;
	&amp;quot;particle&amp;quot;,&lt;br /&gt;
	&amp;quot;prefix&amp;quot;,&lt;br /&gt;
	&amp;quot;preposition&amp;quot;,&lt;br /&gt;
	&amp;quot;pronoun&amp;quot;,&lt;br /&gt;
	&amp;quot;proper noun&amp;quot;,&lt;br /&gt;
	&amp;quot;verb&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for _, pos in ipairs(inflected_pos_for_mutation) do&lt;br /&gt;
	local plpos = require(&amp;quot;Module:string utilities&amp;quot;).pluralize(pos)&lt;br /&gt;
	labels[&amp;quot;mutated &amp;quot; .. plpos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. plpos .. &amp;quot; whose initial consonant is mutated due to the effect of the preceding word.&amp;quot;,&lt;br /&gt;
		parents = {pos .. &amp;quot; forms&amp;quot;, {name = &amp;quot;mutated forms&amp;quot;, sort = pos}},&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local mutation_types = {&lt;br /&gt;
	-- FIXME, we should add these terms to [[Appendix:Glossary]] and link to them.&lt;br /&gt;
	[&amp;quot;eclipsed&amp;quot;] = &amp;quot;[[Appendix:Irish mutations#Eclipsis|eclipsis]]&amp;quot;,&lt;br /&gt;
	[&amp;quot;lenited&amp;quot;] = &amp;quot;[[Appendix:Irish mutations#Lenition|lenition]]&amp;quot;,&lt;br /&gt;
	[&amp;quot;h-prothesized&amp;quot;] = &amp;quot;[[Wiktionary:h-prothesis|h-prothesis]]&amp;quot;,&lt;br /&gt;
	[&amp;quot;t-prothesized&amp;quot;] = &amp;quot;[[Wiktionary:t-prothesis|t-prothesis]]&amp;quot;,&lt;br /&gt;
	[&amp;quot;aspirate-mutation&amp;quot;] = &amp;quot;[[Wiktionary:aspirate mutation|aspirate mutation]]&amp;quot;,&lt;br /&gt;
	[&amp;quot;hard-mutation&amp;quot;] = &amp;quot;[[Wiktionary:hard mutation|hard mutation]]&amp;quot;,&lt;br /&gt;
	[&amp;quot;mixed-mutation&amp;quot;] = &amp;quot;[[Wiktionary:mixed mutation|mixed mutation]]&amp;quot;,&lt;br /&gt;
	[&amp;quot;nasal-mutation&amp;quot;] = &amp;quot;[[Wiktionary:nasal mutation|nasal mutation]]&amp;quot;,&lt;br /&gt;
	[&amp;quot;soft-mutation&amp;quot;] = &amp;quot;[[Wiktionary:soft mutation|soft mutation]]&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for muttype, desc in pairs(mutation_types) do&lt;br /&gt;
	labels[muttype .. &amp;quot; forms&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} terms whose initial consonant is mutated through &amp;quot; .. desc .. &amp;quot;, due to the effect of the preceding word.&amp;quot;,&lt;br /&gt;
		parents = {&amp;quot;mutated forms&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;negative participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express lack of an action being performed.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;nominal participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that function as nouns.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;, &amp;quot;nouns&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;noun construct forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} nouns that are inflected to modify a noun in a genitive construction.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;noun forms&amp;quot;, sort = &amp;quot;construct&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;noun definite forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} nouns that are inflected to designate an identified object.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;noun forms&amp;quot;, sort = &amp;quot;definite&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;noun dual forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} nouns that are inflected to be quantified as two.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;noun forms&amp;quot;, sort = &amp;quot;dual&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;noun feminine forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} nouns that are inflected to be associated to female beings.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;noun forms&amp;quot;, sort = &amp;quot;feminine&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;noun forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} nouns that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;nouns&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;noun indefinite forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} nouns that are inflected to designate an unidentified object.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;noun forms&amp;quot;, sort = &amp;quot;indefinite&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;noun masculine forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} nouns that are inflected to be associated to male beings.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;noun forms&amp;quot;, sort = &amp;quot;masculine&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;noun plural forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} nouns that are inflected to be quantified as more than one (more than two in some languages with dual number).&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;noun forms&amp;quot;, sort = &amp;quot;plural&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;noun paucal forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} nouns that are inflected to be quantified as between two (or three in some languages with dual number) and ten.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;noun forms&amp;quot;, sort = &amp;quot;paucal&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;noun possessive forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} nouns that are inflected to indicate possession.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;noun forms&amp;quot;, sort = &amp;quot;possessive&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;numeral forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} numerals that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;numerals&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;participle forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;participles&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} verbs not fully conjugated, usually to be used in compound conjugations.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;verb forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;particle forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} particles that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;particles&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;passive participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express a patient having an action performed on it.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;passive adjectival participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that function as adjectives and express a patient having an action performed on it.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;, &amp;quot;adjectives&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;past active aorist participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express completed events in past time.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;past active imperfect participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express ongoing events in past time.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;past active participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express an agent actively performing an action in past time.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;past adverbial participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that function as adverbs and express actions in past time.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;adverbial participles&amp;quot;, &amp;quot;adverbs&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;past participle forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} past participles that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participle forms&amp;quot;, {name = &amp;quot;past participles&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;past participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express actions in past time.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;past passive participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express a patient having an action performed on it in past time.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;perfect participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express having completed or undergone an action.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;prefix forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} prefixes that are inflected to express grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;prefixes&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;prepositional pronouns&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} pronouns that are combined with a preposition.&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Lemmas subcategories by language&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;pronoun forms&amp;quot;, {name = &amp;quot;prepositions&amp;quot;, sort = &amp;quot;pronouns&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;proper noun forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} proper nouns that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;proper nouns&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;postposition forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} postpositions that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;postpositions&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;preposition forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} prepositions that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;prepositions&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;present active participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express an agent actively performing an action in present time.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;present adverbial participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that function as adverbs and express actions in present time.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;adverbial participles&amp;quot;, &amp;quot;adverbs&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;present middle participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express an agent performing an action in present time in middle voice.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;present participle forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} present participles that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participle forms&amp;quot;, {name = &amp;quot;present participles&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;present participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express actions occurring in the present time.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;present passive participles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} participles that express a patient having an action performed on it in present time.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;participles&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;pronoun forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} pronouns that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;pronouns&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;pronoun possessive forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} pronouns that are inflected to indicate possession.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;pronoun forms&amp;quot;, sort = &amp;quot;possessive&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;pronunciation variants&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} words that have alternative pronunciation-based spellings.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;proper noun plural forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} proper nouns that are inflected to be quantified as more than one (more than two in some languages with dual number).&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;proper noun forms&amp;quot;, sort = &amp;quot;plural&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;singulatives&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} plural nouns that are inflected for singular number.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;noun forms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;suffix forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} suffixes that are inflected to express grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;suffixes&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for _, pos in ipairs { &amp;quot;adjective&amp;quot;, &amp;quot;adverb&amp;quot;, &amp;quot;determiner&amp;quot; } do&lt;br /&gt;
	local plpos = pos .. &amp;quot;s&amp;quot;&lt;br /&gt;
	labels[&amp;quot;superlative &amp;quot; .. pos .. &amp;quot; forms&amp;quot;] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} superlative &amp;quot; .. plpos .. &amp;quot; that are inflected to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
		parents = {&amp;quot;superlative &amp;quot; .. plpos},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	labels[&amp;quot;superlative &amp;quot; .. plpos] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. plpos .. &amp;quot; that express attributes in their highest possible degrees.&amp;quot;,&lt;br /&gt;
		parents = {pos .. &amp;quot; forms&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;verb causative forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} verbs that are conjugated to express actions caused by external conditions.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;verb forms&amp;quot;, sort = &amp;quot;causative&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;verb forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} verbs that are conjugated to display grammatical relations other than the main form.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;non-lemma forms&amp;quot;, {name = &amp;quot;verbs&amp;quot;, sort = &amp;quot;**&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;verb irregular forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} verb forms that don&amp;#039;t follow standard patterns of conjugation.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;verb forms&amp;quot;, sort = &amp;quot;irregular&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;verb negative forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} verbs that are conjugated to express negation.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;verb forms&amp;quot;, sort = &amp;quot;negative&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;verb passive forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} verbs that are conjugated to direct the action to the grammatical subject, by means of passive voice.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;verb forms&amp;quot;, sort = &amp;quot;passive&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;verb simple past forms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} verbs that are conjugated to indicate events before the current moment.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;verb forms&amp;quot;, sort = &amp;quot;simple past&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local labels2 = {}&lt;br /&gt;
&lt;br /&gt;
-- Add &amp;quot;reconstructed&amp;quot; subcategories; add &amp;#039;umbrella_parents&amp;#039; key if not&lt;br /&gt;
-- already present.&lt;br /&gt;
for key, data in pairs(labels) do&lt;br /&gt;
	labels2[key] = data&lt;br /&gt;
	if not data.umbrella_parents then&lt;br /&gt;
		data.umbrella_parents = &amp;quot;Non-lemma forms subcategories by language&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	labels2[&amp;quot;reconstructed &amp;quot; .. key] = {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} &amp;quot; .. key .. &amp;quot;  that have been linguistically [[Wiktionary:Reconstructed terms|reconstructed]].&amp;quot;,&lt;br /&gt;
		umbrella_parents = &amp;quot;Non-lemma forms subcategories by language&amp;quot;,&lt;br /&gt;
		parents = {key, {name = &amp;quot;reconstructed terms&amp;quot;, sort = key}}&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Non-lemma forms subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering topics related to non-lemma forms.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;non-lemma forms&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels2, RAW_CATEGORIES = raw_categories}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:54 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/non-lemma_forms</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/names</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/names&amp;diff=87&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/names&amp;diff=87&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/names&quot; title=&quot;Module:Category tree/poscatboiler/data/names&quot;&gt;Module:Category tree/poscatboiler/data/names&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
local handlers = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are used to refer to specific individuals or groups. Place names, demonyms and other kinds of names can be found in [[:Category:Names]].&amp;quot;,&lt;br /&gt;
	umbrella_parents = {name = &amp;quot;terms by semantic function&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	parents = {&amp;quot;terms by semantic function&amp;quot;, &amp;quot;proper nouns&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;augmentatives of female given names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} augmentative names given to female individuals.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;augmentative&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;female given names&amp;quot;, &amp;quot;augmentative nouns&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;augmentatives of male given names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} augmentative names given to male individuals.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;augmentative&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;male given names&amp;quot;, &amp;quot;augmentative nouns&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;augmentatives of unisex given names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} augmentative names given either to male or to female individuals.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;augmentative&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;unisex given names&amp;quot;, &amp;quot;augmentative nouns&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;common-gender surnames&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} names shared by both male and female family members, in languages that distinguish male and female surnames.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;common-gender&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;surnames&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;diminutives of female given names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} diminutive names given to female individuals.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;diminutives&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;female given names&amp;quot;, &amp;quot;diminutive nouns&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;diminutives of male given names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} diminutive names given to male individuals.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;diminutives&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;male given names&amp;quot;, &amp;quot;diminutive nouns&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;diminutives of unisex given names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} diminutive names given either to male or to female individuals.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;diminutives&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;unisex given names&amp;quot;, &amp;quot;diminutive nouns&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;female given names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} names given to female individuals.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;female&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;given names&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;female skin names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} skin names given to female individuals.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;female&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;skin names&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;female surnames&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} names shared by female family members.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;female&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;surnames&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;given names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} names given to individuals.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;names&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;male given names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} names given to male individuals.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;male&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;given names&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;male skin names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} skin names given to male individuals.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;male&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;skin names&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;male surnames&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} names shared by male family members.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;male&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;surnames&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;matronymics&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} names indicating a person&amp;#039;s mother, grandmother or earlier female ancestor.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;names&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;nomina gentilia&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;A Roman [[nomen gentile]] was the \&amp;quot;[[family name]]\&amp;quot; in the [[w:Roman naming convention|convential Roman name]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;names&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;patronymics&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} names indicating a person&amp;#039;s father, grandfather or earlier male ancestor.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;names&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;skin names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms given at birth that are used to refer to individuals from specific marital classes.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;proper nouns&amp;quot;, &amp;quot;names&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;surnames&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} names shared by family members.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;names&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;unisex given names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} names given either to male or to female individuals.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;unisex&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;given names&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;unisex skin names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} skin names given either to male or to female individuals.&amp;quot;,&lt;br /&gt;
	breadcrumb = &amp;quot;unisex&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;skin names&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;exonyms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[exonym]]s, i.e. terms for toponyms whose name in {{{langname}}} is different from the name in the source language.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;names&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;renderings of foreign personal names&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} transliterations, respellings or other renderings of foreign personal names.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;names&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Add &amp;#039;umbrella_parents&amp;#039; key if not already present.&lt;br /&gt;
for key, data in pairs(labels) do&lt;br /&gt;
	if not data.umbrella_parents then&lt;br /&gt;
		data.umbrella_parents = &amp;quot;Names subcategories by language&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Names subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering topics related to names.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;names&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                 HANDLERS                                --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function source_name_to_source(nametype, source_name)&lt;br /&gt;
	local special_sources&lt;br /&gt;
	if nametype:find(&amp;quot;given names&amp;quot;) then&lt;br /&gt;
		special_sources = require(&amp;quot;Module:table&amp;quot;).listToSet {&lt;br /&gt;
			&amp;quot;surnames&amp;quot;, &amp;quot;place names&amp;quot;, &amp;quot;coinages&amp;quot;, &amp;quot;the Bible&amp;quot;, &amp;quot;month names&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	elseif nametype:find(&amp;quot;surnames&amp;quot;) then&lt;br /&gt;
		special_sources = require(&amp;quot;Module:table&amp;quot;).listToSet {&lt;br /&gt;
			&amp;quot;given names&amp;quot;, &amp;quot;place names&amp;quot;, &amp;quot;occupations&amp;quot;, &amp;quot;patronymics&amp;quot;, &amp;quot;matronymics&amp;quot;,&lt;br /&gt;
			&amp;quot;common nouns&amp;quot;, &amp;quot;nicknames&amp;quot;, &amp;quot;ethnonyms&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	else&lt;br /&gt;
		special_sources = {}&lt;br /&gt;
	end&lt;br /&gt;
	if special_sources[source_name] then&lt;br /&gt;
		return source_name&lt;br /&gt;
	else&lt;br /&gt;
		return require(&amp;quot;Module:languages&amp;quot;).getByCanonicalName(source_name, nil,&lt;br /&gt;
			&amp;quot;allow etym langs&amp;quot;, &amp;quot;allow families&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_source_text(source)&lt;br /&gt;
	if type(source) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		return source:getDisplayForm()&lt;br /&gt;
	else&lt;br /&gt;
		return source&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_description(lang, nametype, source)&lt;br /&gt;
	local origintext, addltext&lt;br /&gt;
	if source == &amp;quot;surnames&amp;quot; then&lt;br /&gt;
		origintext = &amp;quot;transferred from surnames&amp;quot;&lt;br /&gt;
	elseif source == &amp;quot;given names&amp;quot; then&lt;br /&gt;
		origintext = &amp;quot;transferred from given names&amp;quot;&lt;br /&gt;
	elseif source == &amp;quot;nicknames&amp;quot; then&lt;br /&gt;
		origintext = &amp;quot;transferred from nicknames&amp;quot;&lt;br /&gt;
	elseif source == &amp;quot;place names&amp;quot; then&lt;br /&gt;
		origintext = &amp;quot;transferred from place names&amp;quot;&lt;br /&gt;
		addltext = &amp;quot; For place names that are also surnames, see &amp;quot; .. (&lt;br /&gt;
			lang and &amp;quot;[[:Category:{{{langname}}} &amp;quot; .. nametype .. &amp;quot; from surnames]]&amp;quot; or&lt;br /&gt;
			&amp;quot;[[:Category:&amp;quot; .. mw.getContentLanguage():ucfirst(nametype) .. &amp;quot; from surnames by language]]&amp;quot;&lt;br /&gt;
		) .. &amp;quot;.&amp;quot;&lt;br /&gt;
	elseif source == &amp;quot;common nouns&amp;quot; then&lt;br /&gt;
		origintext = &amp;quot;transferred from common nouns&amp;quot;&lt;br /&gt;
	elseif source == &amp;quot;month names&amp;quot; then&lt;br /&gt;
		origintext = &amp;quot;transferred from month names&amp;quot;&lt;br /&gt;
	elseif source == &amp;quot;coinages&amp;quot; then&lt;br /&gt;
		origintext = &amp;quot;originating as coinages&amp;quot;&lt;br /&gt;
		addltext = &amp;quot; These are names of artificial origin, names based on fictional characters, combinations of two words or names or backward spellings. Names of uncertain origin can also be placed here if there is a strong suspicion that they are coinages.&amp;quot;&lt;br /&gt;
	elseif source == &amp;quot;occupations&amp;quot; then&lt;br /&gt;
		origintext = &amp;quot;originating as occupations&amp;quot;&lt;br /&gt;
	elseif source == &amp;quot;patronymics&amp;quot; then&lt;br /&gt;
		origintext = &amp;quot;originating as patronymics&amp;quot;&lt;br /&gt;
	elseif source == &amp;quot;matronymics&amp;quot; then&lt;br /&gt;
		origintext = &amp;quot;originating as matronymics&amp;quot;&lt;br /&gt;
	elseif source == &amp;quot;ethnonyms&amp;quot; then&lt;br /&gt;
		origintext = &amp;quot;originating as ethnonyms&amp;quot;&lt;br /&gt;
	elseif source == &amp;quot;the Bible&amp;quot; then&lt;br /&gt;
		-- Hack esp. for Hawaiian names. We should consider changing them to&lt;br /&gt;
		-- have the source as Biblical Hebrew and mention the derivation from&lt;br /&gt;
		-- the Bible some other way.&lt;br /&gt;
		origintext = &amp;quot;originating from the Bible&amp;quot;&lt;br /&gt;
	elseif type(source) == &amp;quot;string&amp;quot; then&lt;br /&gt;
		error(&amp;quot;Internal error: Unrecognized string source \&amp;quot;&amp;quot; .. source .. &amp;quot;\&amp;quot;, should be special-cased&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		origintext = &amp;quot;of &amp;quot; .. source:makeCategoryLink() .. &amp;quot; origin&amp;quot;&lt;br /&gt;
		if lang and source:getCode() == lang:getCode() then&lt;br /&gt;
			addltext = &amp;quot; These are names derived from common nouns, local mythology, etc.&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local introtext&lt;br /&gt;
	if lang then&lt;br /&gt;
		introtext = &amp;quot;{{{langname}}} &amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		introtext = &amp;quot;Categories with &amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return introtext .. nametype .. &amp;quot; &amp;quot; .. origintext ..&lt;br /&gt;
		&amp;quot;. (This includes names derived at an older stage of the language.)&amp;quot; .. (addltext or &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- If one of the following families occurs in any of the ancestral families&lt;br /&gt;
-- of a given language, use it instead of the three-letter parent&lt;br /&gt;
-- (or immediate parent if no three-letter parent).&lt;br /&gt;
local high_level_families = require(&amp;quot;Module:table&amp;quot;).listToSet {&lt;br /&gt;
	-- Indo-European&lt;br /&gt;
	&amp;quot;gem&amp;quot;, -- Germanic (for gme, gmq, gmw)&lt;br /&gt;
	&amp;quot;inc&amp;quot;, -- Indic (for e.g. pra = Prakrit)&lt;br /&gt;
	&amp;quot;ine-ana&amp;quot;, -- Anatolian (don&amp;#039;t keep going to ine)&lt;br /&gt;
	&amp;quot;ine-toc&amp;quot;, -- Tocharian (don&amp;#039;t keep going to ine)&lt;br /&gt;
	&amp;quot;ira&amp;quot;, -- Iranian (for e.g. xme = Median, xsc = Scythian)&lt;br /&gt;
	&amp;quot;sla&amp;quot;, -- Slavic (for zle, zls, zlw)&lt;br /&gt;
	-- Other&lt;br /&gt;
	&amp;quot;ath&amp;quot;, -- Athabaskan (for e.g. apa = Apachean)&lt;br /&gt;
	&amp;quot;poz&amp;quot;, -- Malayo-Polynesian (for e.g. pqe = Eastern Malayo-Polynesian)&lt;br /&gt;
	&amp;quot;cau-nwc&amp;quot;, -- Northwest Caucasian&lt;br /&gt;
	&amp;quot;cau-nec&amp;quot;, -- Northeast Caucasian&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function find_high_level_family(lang)&lt;br /&gt;
	local family = lang:getFamily()&lt;br /&gt;
	-- (1) If no family, return nil (e.g. for Pictish).&lt;br /&gt;
	if not family then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	-- (2) See if any ancestor family is in `high_level_families`.&lt;br /&gt;
	-- if so, return it.&lt;br /&gt;
	local high_level_family = family&lt;br /&gt;
	while high_level_family do&lt;br /&gt;
		local high_level_code = high_level_family:getCode()&lt;br /&gt;
		if high_level_code == &amp;quot;qfa-not&amp;quot; then&lt;br /&gt;
			-- &amp;quot;not a family&amp;quot;; its own parent, causing an infinite loop.&lt;br /&gt;
			-- Break rather than return so we get categories like&lt;br /&gt;
			-- [[Category:English female given names from sign languages]] and&lt;br /&gt;
			-- [[Category:English female given names from constructed languages]].&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
		if high_level_families[high_level_code] then&lt;br /&gt;
			return high_level_family&lt;br /&gt;
		end&lt;br /&gt;
		high_level_family = high_level_family:getFamily()&lt;br /&gt;
	end&lt;br /&gt;
	-- (3) If the family is of the form &amp;#039;FOO-BAR&amp;#039;, see if &amp;#039;FOO&amp;#039; is a family.&lt;br /&gt;
	-- If so, return it.&lt;br /&gt;
	local basic_family = family:getCode():match(&amp;quot;^(.-)%-.*$&amp;quot;)&lt;br /&gt;
	if basic_family then&lt;br /&gt;
		basic_family = require(&amp;quot;Module:families&amp;quot;).getByCode(basic_family)&lt;br /&gt;
		if basic_family then&lt;br /&gt;
			return basic_family&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- (4) Fall back to just the family itself.&lt;br /&gt;
	return family&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function match_gendered_nametype(nametype)&lt;br /&gt;
	local gender, label = nametype:match(&amp;quot;^(f?e?male) (given names)$&amp;quot;)&lt;br /&gt;
	if not gender then&lt;br /&gt;
		gender, label = nametype:match(&amp;quot;^(unisex) (given names)$&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if gender then&lt;br /&gt;
		return gender, label&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_parents(lang, nametype, source)&lt;br /&gt;
	local parents = {}&lt;br /&gt;
&lt;br /&gt;
	if lang then&lt;br /&gt;
		table.insert(parents, {name = nametype, sort = get_source_text(source)})&lt;br /&gt;
		if type(source) == &amp;quot;table&amp;quot; then&lt;br /&gt;
			table.insert(parents, {name = &amp;quot;terms derived from &amp;quot; .. source:getDisplayForm(), sort = &amp;quot; &amp;quot;})&lt;br /&gt;
			-- If the source is a regular language, put it in a parent category for the high-level language family, e.g. for&lt;br /&gt;
			-- &amp;quot;Russian female given names from German&amp;quot;, put it in a parent category &amp;quot;Russian female given names from Germanic languages&amp;quot;&lt;br /&gt;
			-- (skipping over West Germanic languages).&lt;br /&gt;
			--&lt;br /&gt;
			-- If the source is an etymology language, put it in a parent category for the parent full language, e.g. for&lt;br /&gt;
			-- &amp;quot;French male given names from Gascon&amp;quot;, put it in a parent category &amp;quot;French male given names from Occitan&amp;quot;.&lt;br /&gt;
			--&lt;br /&gt;
			-- If the source is a family, put it in a parent category for the parent family.&lt;br /&gt;
			if source:hasType(&amp;quot;family&amp;quot;) then&lt;br /&gt;
				local parent_family = source:getFamily()&lt;br /&gt;
				if parent_family and parent_family:getCode() ~= &amp;quot;qfa-not&amp;quot; then&lt;br /&gt;
					table.insert(parents, {&lt;br /&gt;
						name = nametype .. &amp;quot; from &amp;quot; .. parent_family:getDisplayForm(),&lt;br /&gt;
						sort = source:getCanonicalName()&lt;br /&gt;
					})&lt;br /&gt;
				end&lt;br /&gt;
			elseif source:hasType(&amp;quot;etymology-only&amp;quot;) then&lt;br /&gt;
				local source_parent = source:getFull()&lt;br /&gt;
				if source_parent and source_parent:getCode() ~= &amp;quot;und&amp;quot; then&lt;br /&gt;
					table.insert(parents, {&lt;br /&gt;
						name = nametype .. &amp;quot; from &amp;quot; .. source_parent:getDisplayForm(),&lt;br /&gt;
						sort = source:getCanonicalName()&lt;br /&gt;
					})&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				local high_level_family = find_high_level_family(source)&lt;br /&gt;
				if high_level_family then -- may not exist, e.g. for Pictish&lt;br /&gt;
					table.insert(parents,&lt;br /&gt;
						{name = nametype .. &amp;quot; from &amp;quot; .. high_level_family:getDisplayForm(),&lt;br /&gt;
						sort = source:getCanonicalName()&lt;br /&gt;
					})&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		local gender, label = match_gendered_nametype(nametype)&lt;br /&gt;
		if gender then&lt;br /&gt;
			table.insert(parents, {name = label .. &amp;quot; from &amp;quot; .. get_source_text(source), sort = gender})&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local gender, label = match_gendered_nametype(nametype)&lt;br /&gt;
		if gender then&lt;br /&gt;
			table.insert(parents, {name = label .. &amp;quot; from &amp;quot; .. get_source_text(source), is_label = true, sort = &amp;quot; &amp;quot;})&lt;br /&gt;
		elseif type(source) == &amp;quot;table&amp;quot; then&lt;br /&gt;
			-- FIXME! This is duplicated in [[Module:category tree/poscatboiler/data/terms by etymology]] in the&lt;br /&gt;
			-- handler for umbrella categories &amp;#039;Terms derived from SOURCE&amp;#039;.&lt;br /&gt;
			local first_umbrella_parent =&lt;br /&gt;
				source:hasType(&amp;quot;family&amp;quot;) and {name = source:getCategoryName(), raw = true, sort = &amp;quot; &amp;quot;} or&lt;br /&gt;
				source:hasType(&amp;quot;etymology-only&amp;quot;) and {name = &amp;quot;Category:&amp;quot; .. source:getCategoryName(), sort = nametype} or&lt;br /&gt;
				{name = source:getCategoryName(), raw = true, sort = nametype}&lt;br /&gt;
			table.insert(parents, first_umbrella_parent)&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(parents, &amp;quot;Names subcategories by language&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return parents&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
table.insert(handlers, function(data)&lt;br /&gt;
	local nametype, source_name = data.label:match(&amp;quot;^(.*names) from (.+)$&amp;quot;)&lt;br /&gt;
	if nametype then&lt;br /&gt;
		local m_table = require(&amp;quot;Module:table&amp;quot;)&lt;br /&gt;
		local personal_name_types = m_table.listToSet(require(&amp;quot;Module:names&amp;quot;).personal_name_types)&lt;br /&gt;
		if not personal_name_types[nametype] then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local source = source_name_to_source(nametype, source_name)&lt;br /&gt;
		if not source then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		return {&lt;br /&gt;
			description = get_description(data.lang, nametype, source),&lt;br /&gt;
			breadcrumb = &amp;quot;from &amp;quot; .. get_source_text(source),&lt;br /&gt;
			parents = get_parents(data.lang, nametype, source),&lt;br /&gt;
			umbrella = {&lt;br /&gt;
				description = get_description(nil, nametype, source),&lt;br /&gt;
				parents = get_parents(nil, nametype, source),&lt;br /&gt;
			},&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
-- Handler for e.g. &amp;#039;English renderings of Russian male given names&amp;#039;.&lt;br /&gt;
table.insert(handlers, function(data)&lt;br /&gt;
	local label = data.label:match(&amp;quot;^renderings of (.*)$&amp;quot;)&lt;br /&gt;
	if label then&lt;br /&gt;
		local personal_name_types = require(&amp;quot;Module:names&amp;quot;).personal_name_types&lt;br /&gt;
		for _, nametype in ipairs(personal_name_types) do&lt;br /&gt;
			local sourcename = label:match(&amp;quot;^(.+) &amp;quot; .. nametype .. &amp;quot;$&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			if sourcename then&lt;br /&gt;
				local source = require(&amp;quot;Module:languages&amp;quot;).getByCanonicalName(sourcename, nil, &amp;quot;allow etym&amp;quot;)&lt;br /&gt;
				if source then&lt;br /&gt;
					return {&lt;br /&gt;
						description = &amp;quot;Transliterations, respellings or other renderings of &amp;quot; .. source:makeCategoryLink() .. &amp;quot; &amp;quot; .. nametype .. &amp;quot; into {{{langlink}}}.&amp;quot;,&lt;br /&gt;
						lang = data.lang,&lt;br /&gt;
						breadcrumb = sourcename .. &amp;quot; &amp;quot; .. nametype,&lt;br /&gt;
						parents = {&lt;br /&gt;
							{ name = &amp;quot;renderings of foreign personal names&amp;quot;, sort = sourcename },&lt;br /&gt;
							{ name = nametype, lang = source:getCode(), sort = &amp;quot;{{{langname}}}&amp;quot; },&lt;br /&gt;
						},&lt;br /&gt;
						umbrella = {&lt;br /&gt;
							description = &amp;quot;Transliterations, respellings or other renderings of &amp;quot; .. source:makeCategoryLink() .. &amp;quot; &amp;quot; .. nametype .. &amp;quot; into various languages.&amp;quot;,&lt;br /&gt;
							parents = {{name = &amp;quot;renderings of foreign personal names&amp;quot;, is_label = true, sort = label}},&lt;br /&gt;
						},&lt;br /&gt;
					}&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, RAW_CATEGORIES = raw_categories, HANDLERS = handlers}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:54 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/names</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/modules</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/modules&amp;diff=85&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/modules&amp;diff=85&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/modules&quot; title=&quot;Module:Category tree/poscatboiler/data/modules&quot;&gt;Module:Category tree/poscatboiler/data/modules&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
local raw_handlers = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:Modules|modules]], which contain Lua code to create and manage entries.&amp;quot;,&lt;br /&gt;
	umbrella = {&lt;br /&gt;
		parents = {{name = &amp;quot;Modules&amp;quot;, sort = &amp;quot; &amp;quot;}},&lt;br /&gt;
		breadcrumb = &amp;quot;by language&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;data modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:Modules|modules]] containing data used by other modules.&amp;quot;,&lt;br /&gt;
	umbrella = {&lt;br /&gt;
		parents = {{name = &amp;quot;Data modules&amp;quot;, sort = &amp;quot; &amp;quot;}},&lt;br /&gt;
		breadcrumb = &amp;quot;by language&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	parents = {&amp;quot;modules&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;inflection modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[Wiktionary:inflection|inflection]] [[Wiktionary:Modules|modules]], which contain Lua code for generating conjugation and declension tables.&amp;quot;,&lt;br /&gt;
	umbrella = {&lt;br /&gt;
		parents = {{name = &amp;quot;Inflection modules&amp;quot;, sort = &amp;quot; &amp;quot;}},&lt;br /&gt;
		breadcrumb = &amp;quot;by language&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	parents = {&amp;quot;modules&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;This is a general holder category for modules.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;For more information on what modules are and how they work, see [[Wiktionary:Scribunto]]. For a complete list of all modules, see [[Special:PrefixIndex/Module:|here]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;Category:Wiktionary&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Uncategorized modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Uncategorized modules.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Modules are placed here by [[MediaWiki:Scribunto-doc-page-does-not-exist]]. The default documentation page, [[Template:documentation/preloadModule]], also adds this category.&amp;quot;,&lt;br /&gt;
	parents = { {name = &amp;quot;Modules&amp;quot;, sort = &amp;quot; &amp;quot;} },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Module unit tests&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Unit tests for modules.&amp;quot;,&lt;br /&gt;
	parents = { {name = &amp;quot;Modules&amp;quot;, sort = &amp;quot;1 test modules&amp;quot;} },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Appendix modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules with functions that generate content for or extract information from pages in the Appendix namespace.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Bot support modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules for supporting individual bot accounts.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Category modules&amp;quot;] = {&lt;br /&gt;
	intro = &amp;quot;{{also|:Category:Category templates}}&amp;quot;,&lt;br /&gt;
	description = &amp;quot;Modules for adding categories to pages or generating the description and subcategories of category pages.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Data modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that do not contain functions, but only export a table of data that is used by other modules. Modules that are in this category should be imported using &amp;lt;code&amp;gt;mw.loadData&amp;lt;/code&amp;gt; rather than &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Character insertion data modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules containing data for use by {{temp|chars}}.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Data modules&amp;quot; },&lt;br /&gt;
	breadcrumb = &amp;quot;character insertion&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Debugging modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules used for debugging.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Some should only be used in sandbox modules or when using the [[mw:Extension:TemplateSandbox|{{MediaWiki:Templatesandbox-editform-legend}}]] button in the edit page of modules and templates.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Lua metamodules&amp;quot;, &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Definition modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that fuel templates that are used in [[Wiktionary:Glossary#definition line|definition lines]] of entries.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Deprecated modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that should not be used, as their functions are performed by newer modules.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot;, &amp;quot;Category:Wiktionary maintenance&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Discussion modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules concerning discussion pages.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Display text-generating modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that are used to generate display text.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Display text determines what is shown to the reader. In some languages it must be normalized, due to common errors caused by confusable characters, or so as to ensure a consistent display format.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Documentation modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules for generating documentation pages.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Entry-generating modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules with functions that are used to generate new entries.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Entry name-generating modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that are used to generate entry names.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Entry names determine the page at which an entry is created, accounting for the removal of language-specified diacritics.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Etymology modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that fuel templates that define the etymology of entries.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Form-of modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that generate the definition line of non-lemma forms, e.g. verb forms and noun forms.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Definition modules&amp;quot;, &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;General utility modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that serve some sort of utility purpose in various entries but are used by multiple languages. Modules only used by one language should be at [[:Category:Utility modules]].&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Headword-line modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that support [[:Category:Headword-line templates by language|headword-line templates]] for a specific language.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;See also [[:Category:Headword-line templates]].&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Inflection modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules used to support [[:Category:Inflection-table templates by language|inflection templates]] for a specific language.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Internal link modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that are used in [[:Category:Internal link templates|internal link templates]].&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;General utility modules&amp;quot;, &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;JSON-generating modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules with functions that generate data in JSON format.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Language and script modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that process language and script codes and return data on them.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;List modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that generate lists and tables of entries.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Lua metamodules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that have exported functions that are only used by other modules: that is, cannot be called using {{temp|#invoke:}}.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Maintenance modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that fuel templates used for maintaining entries, such as cleanup templates (e.g. {{temp|attention}}), deletion templates (e.g. {{temp|rfd}}) and verification templates (e.g. {{temp|rfv}}).&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Pronunciation modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that fuel templates that are used to create the language-specific pronunciation of entries.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Quotation and usage example modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that fuel templates that are used to format quotations and usage examples.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Definition modules&amp;quot;, &amp;quot;Modules&amp;quot; },&lt;br /&gt;
	breadcrumb = &amp;quot;quotation and usage example&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Reference modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that are used for [[:Category:Reference templates|reference templates]].&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Sandbox modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Test versions of modules intended for production use.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Sortkey-generating modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that are used to generate sortkeys.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Sortkeys determine the order of entry names in categories.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Swadesh modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules containing [[Wiktionary:Swadesh list|Swadesh list]]s.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Template interface modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules whose purpose is to provide an interface between templates and the functions of a module.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;They are usually named &amp;lt;code&amp;gt;.../templates&amp;lt;/code&amp;gt;, and the functions present within them usually all have only a \&amp;quot;frame\&amp;quot; parameter.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Tracking modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that add tracking templates.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Transliteration modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that automatically convert text in one script to another.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Most of them convert non-Latin scripts to Latin (romanisation/romanization), and are used by templates or modules to generate transliteration of text that is tagged with a particular language. Each language&amp;#039;s transliteration module is specified in its data table (for which, see the category {{catlink|Language data modules}}).&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Unused modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Unused modules.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;User sandbox modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that are for personal use and testing by individual editors.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;These should all begin with &amp;lt;code&amp;gt;User:&amp;lt;/code&amp;gt; followed by the user&amp;#039;s name. If several sandbox modules are needed by a single user, subpages can be created. These modules should not be used in real Wiktionary content pages, as all content on those pages should be editable by anyone and, if necessary, edit protected.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Sandbox modules&amp;quot;, &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Utility modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that deal with several utilities needed by a certain language.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Usually their names end with -utilities or -common (preceded by the language code), although more specific utility modules that one language uses may reside here as well. If a utility is used by many languages, it should be in [[:Category:General utility modules]].&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Vote modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules used to manage Wiktionary votes.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Wikitext parsing modules&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Modules that contain functions that grab the wikitext of a page and get information from it by performing string operations on it.&amp;quot;,&lt;br /&gt;
	parents = { &amp;quot;Modules&amp;quot; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                RAW HANDLERS                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for _, mod_type in ipairs { &amp;quot;Entry name-generating&amp;quot;, &amp;quot;Sortkey-generating&amp;quot;, &amp;quot;Transliteration&amp;quot; } do&lt;br /&gt;
	table.insert(raw_handlers, function(data)&lt;br /&gt;
		local count, languages = data.category:match((&amp;quot;^%s modules used by ([0-9]+) (languages?)$&amp;quot;):format(&lt;br /&gt;
			-- need to escape the hyphen in &amp;#039;Entry name-generating&amp;#039; and &amp;#039;Sortkey-generating&amp;#039;&lt;br /&gt;
			require(&amp;quot;Module:pattern utilities&amp;quot;).pattern_escape(mod_type)))&lt;br /&gt;
		if count then&lt;br /&gt;
			return {&lt;br /&gt;
				description = data.category .. &amp;quot;.&amp;quot;,&lt;br /&gt;
				breadcrumb = &amp;quot;used by &amp;quot; .. count .. &amp;quot; &amp;quot; .. languages,&lt;br /&gt;
				parents = {&lt;br /&gt;
					{ name = mod_type .. &amp;quot; modules&amp;quot;, sort = count },&lt;br /&gt;
				},&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
	end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:53 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/modules</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/miscellaneous</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/miscellaneous&amp;diff=83&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/miscellaneous&amp;diff=83&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/miscellaneous&quot; title=&quot;Module:Category tree/poscatboiler/data/miscellaneous&quot;&gt;Module:Category tree/poscatboiler/data/miscellaneous&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Appendices&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;appendices&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Pages containing additional information about {{{langname}}}.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
	umbrella = {&lt;br /&gt;
		description = &amp;quot;Categories with pages containing additional information about a given language.&amp;quot;,&lt;br /&gt;
		parents = {&amp;quot;Category:Appendices&amp;quot;},&lt;br /&gt;
		breadcrumb = &amp;quot;By language&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Citations&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;citations&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Pages documenting instances of actual usage of {{{langname}}} terms.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
	umbrella = {&lt;br /&gt;
		description = &amp;quot;Categories with pages documenting instances of actual usage of terms in a given language.&amp;quot;,&lt;br /&gt;
		parents = {&amp;quot;Category:Citations&amp;quot;},&lt;br /&gt;
		breadcrumb = &amp;quot;Citations by language&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;citations of undefined terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Pages documenting instances of actual usage of {{{langname}}} terms, but for which the term is not defined yet.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Citation pages in {{{langname}}} are automatically added here when any of the corresponding entries is a redlink. You can also add citation pages to this category manually when the entry exists but it has not a(n) {{{langname}}} section yet or has not been defined in that specific meaning. Before removing a page from this category, please verify that all citations relate to senses properly defined in the entry.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;citations&amp;quot;},&lt;br /&gt;
	umbrella = {&lt;br /&gt;
		description = &amp;quot;Categories with pages documenting instances of actual usage of terms in a given language, but for which the term is not defined yet.&amp;quot;,&lt;br /&gt;
		parents = {&amp;quot;Requests&amp;quot;, &amp;quot;Category:Citations&amp;quot;},&lt;br /&gt;
		breadcrumb = &amp;quot;Citations of undefined terms by language&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	hidden = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Thesaurus entries&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;thesaurus entries&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;[[WT:WS|Thesaurus]] entries for listing [[Wiktionary:Semantic relations|semantically related terms]] such as [[Wiktionary:synonym|synonym]]s, [[Wiktionary:antonym|antonym]]s, [[Wiktionary:hyponym|hyponym]]s, [[Wiktionary:hypernym|hypernym]]s, [[Wiktionary:meronym|meronym]]s, and [[Wiktionary:holonym|holonym]]s of {{{langname}}} words.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
	umbrella = {&lt;br /&gt;
		description = &amp;quot;Categories with [[WT:WS|thesaurus]] entries for listing [[Wiktionary:Semantic relations|semantically related terms]] terms.&amp;quot;,&lt;br /&gt;
		breadcrumb = &amp;quot;Thesaurus entries by language&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Fundamental&amp;quot;] = {&lt;br /&gt;
	intro = &amp;quot;{{sisterlinks|Category:CommonsRoot}}&amp;quot;,&lt;br /&gt;
	description = &amp;quot;This page is the top-level category, under which all categories at Wiktionary should lie.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Note that most categories are in [[:Category:All topics]] or under individual [[:Category:All languages|languages]].&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Umbrella metacategories&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;This page contains &amp;#039;&amp;#039;&amp;#039;umbrella metacategories&amp;#039;&amp;#039;&amp;#039;, which group umbrella categories under high-level topics.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Umbrella categories in turn group language-specific categories devoted to particular low-level topics.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;Fundamental&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, RAW_CATEGORIES = raw_categories}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:53 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/miscellaneous</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/lemmas</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/lemmas&amp;diff=81&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/lemmas&amp;diff=81&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/lemmas&quot; title=&quot;Module:Category tree/poscatboiler/data/lemmas&quot;&gt;Module:Category tree/poscatboiler/data/lemmas&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/lemmas&amp;amp;diff=81&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:53 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/lemmas</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/languages</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/languages&amp;diff=79&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/languages&amp;diff=79&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/languages&quot; title=&quot;Module:Category tree/poscatboiler/data/languages&quot;&gt;Module:Category tree/poscatboiler/data/languages&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local raw_categories = {}&lt;br /&gt;
local raw_handlers = {}&lt;br /&gt;
&lt;br /&gt;
local m_languages = require(&amp;quot;Module:languages&amp;quot;)&lt;br /&gt;
local m_sc_getByCode = require(&amp;quot;Module:scripts&amp;quot;).getByCode&lt;br /&gt;
local m_table = require(&amp;quot;Module:table&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local Hang = m_sc_getByCode(&amp;quot;Hang&amp;quot;)&lt;br /&gt;
local Hani = m_sc_getByCode(&amp;quot;Hani&amp;quot;)&lt;br /&gt;
local Hira = m_sc_getByCode(&amp;quot;Hira&amp;quot;)&lt;br /&gt;
local Hrkt = m_sc_getByCode(&amp;quot;Hrkt&amp;quot;)&lt;br /&gt;
local Kana = m_sc_getByCode(&amp;quot;Kana&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
-- This handles language categories of the form e.g. [[Category:French language]] and&lt;br /&gt;
-- [[:Category:British Sign Language]] and regional variant categories of the form&lt;br /&gt;
-- e.g. [[Category:Regional French]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Regionalisms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Categories that group terms in regional varieties of various languages.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Fundamental&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;All languages&amp;quot;] = {&lt;br /&gt;
	intro = &amp;quot;{{sisterlinks|Category:Languages}}\n[[File:Languages world map-transparent background.svg|thumb|right|250px|Rough world map of language families]]&amp;quot;,&lt;br /&gt;
	description = &amp;quot;This category contains the categories for every language on Wiktionary.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Not all languages that Wiktionary recognises may have a category here yet. There are many that have &amp;quot; ..&lt;br /&gt;
	&amp;quot;not yet received any attention from editors, mainly because not all Wiktionary users know about every single &amp;quot; ..&lt;br /&gt;
	&amp;quot;language. See [[Wiktionary:List of languages]] for a full list.&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Fundamental&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;All extinct languages&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;This category contains the categories for every {{wt|extinct language}} on Wiktionary.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Do not confuse this category with [[:Category:Extinct languages]] which is for the names of extinct languages.&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;All languages&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                RAW HANDLERS                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function makeCategoryLink(object)&lt;br /&gt;
	return &amp;quot;[[:Category:&amp;quot; .. object:getCategoryName() .. &amp;quot;|&amp;quot; .. object:getCanonicalName() .. &amp;quot;]]&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function ucfirst(text)&lt;br /&gt;
	return mw.getContentLanguage():ucfirst(text)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function linkbox(lang, setwiki, setwikt, setsister, entryname)&lt;br /&gt;
	local wiktionarylinks = &amp;quot;&amp;#039;&amp;#039;None.&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	local canonicalName = lang:getCanonicalName()&lt;br /&gt;
	local wikimediaLanguages = lang:getWikimediaLanguages()&lt;br /&gt;
	local nameWithLanguage = lang:getCategoryName(&amp;quot;nocap&amp;quot;)&lt;br /&gt;
	local categoryName = lang:getCategoryName()&lt;br /&gt;
	local wikipediaArticle = setwiki or lang:getWikipediaArticle()&lt;br /&gt;
	setsister = setsister and ucfirst(setsister) or nil&lt;br /&gt;
	&lt;br /&gt;
	if setwikt then&lt;br /&gt;
		require &amp;quot;Module:debug&amp;quot;.track &amp;quot;langcatboiler/setwikt&amp;quot;&lt;br /&gt;
		if setwikt == &amp;quot;-&amp;quot; then&lt;br /&gt;
			require &amp;quot;Module:debug&amp;quot;.track &amp;quot;langcatboiler/setwikt/hyphen&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if setwikt ~= &amp;quot;-&amp;quot; and wikimediaLanguages and wikimediaLanguages[1] then&lt;br /&gt;
		wiktionarylinks = {}&lt;br /&gt;
		&lt;br /&gt;
		for _, wikimedialang in ipairs(wikimediaLanguages) do&lt;br /&gt;
			table.insert(wiktionarylinks,&lt;br /&gt;
				(wikimedialang:getCanonicalName() ~= canonicalName and &amp;quot;(&amp;#039;&amp;#039;&amp;quot; .. wikimedialang:getCanonicalName() .. &amp;quot;&amp;#039;&amp;#039;) &amp;quot; or &amp;quot;&amp;quot;) ..&lt;br /&gt;
				&amp;quot;&amp;#039;&amp;#039;&amp;#039;[[:&amp;quot; .. wikimedialang:getCode() .. &amp;quot;:|&amp;quot; .. wikimedialang:getCode() .. &amp;quot;.wiktionary.org]]&amp;#039;&amp;#039;&amp;#039;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		wiktionarylinks = table.concat(wiktionarylinks, &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local plural = wikimediaLanguages[2] and &amp;quot;s&amp;quot; or &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return table.concat{&lt;br /&gt;
[=[&amp;lt;div style=&amp;quot;clear: right; border: solid #aaa 1px; margin: 1 1 1 1; background: #f9f9f9; width: 270px; padding: 5px; margin: 5px; text-align: left; float: right&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; margin-bottom: 10px; margin-top: 5px&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;]=], nameWithLanguage, [=[&amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;font-size: 90%; background: #f9f9f9;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; height: 35px&amp;quot; | [[File:Wikipedia-logo.png|35px|none|Wikipedia]]&lt;br /&gt;
|| &amp;#039;&amp;#039;Article about ]=], nameWithLanguage, [=[&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;padding-left: 10px; border-bottom: 1px solid lightgray;&amp;quot; | ]=], (setwiki == &amp;quot;-&amp;quot; and &amp;quot;&amp;#039;&amp;#039;None.&amp;#039;&amp;#039;&amp;quot; or &amp;quot;&amp;#039;&amp;#039;&amp;#039;[[&amp;quot; .. wikipediaArticle .. &amp;quot;]]&amp;#039;&amp;#039;&amp;#039;&amp;quot;), [=[&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align: middle; height: 35px&amp;quot; | [[File:Open book nae 02.svg|35px|none|Entry]]&lt;br /&gt;
|| ]=], nameWithLanguage, [=[ entry&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;padding-left: 10px;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;]=], require(&amp;quot;Module:links&amp;quot;).full_link({lang = m_languages.getByCode(&amp;quot;en&amp;quot;), term = entryname or canonicalName}), [=[&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;]=]&lt;br /&gt;
}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function edit_link(title, text)&lt;br /&gt;
	return &amp;#039;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[&amp;#039;&lt;br /&gt;
		.. tostring(mw.uri.fullUrl(title, { action = &amp;quot;edit&amp;quot; }))&lt;br /&gt;
		.. &amp;#039; &amp;#039; .. text .. &amp;#039;]&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Should perhaps use wiki syntax.&lt;br /&gt;
local function infobox(lang)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	&lt;br /&gt;
	table.insert(ret, &amp;#039;&amp;lt;table class=&amp;quot;wikitable language-category-info&amp;quot;&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	if type(lang.getRawData) == &amp;quot;function&amp;quot; then&lt;br /&gt;
		local raw_data = lang:getRawData()&lt;br /&gt;
		if raw_data then&lt;br /&gt;
			local replacements = {&lt;br /&gt;
				[1] = &amp;quot;canonical-name&amp;quot;,&lt;br /&gt;
				[2] = &amp;quot;wikidata-item&amp;quot;,&lt;br /&gt;
				[3] = &amp;quot;family&amp;quot;,&lt;br /&gt;
			}&lt;br /&gt;
			local function replacer(letter1, letter2)&lt;br /&gt;
				return letter1:lower() .. &amp;quot;-&amp;quot; .. letter2:lower()&lt;br /&gt;
			end&lt;br /&gt;
			-- For each key in the language data modules, returns a descriptive&lt;br /&gt;
			-- kebab-case version (containing ASCII lowercase words separated&lt;br /&gt;
			-- by hyphens).&lt;br /&gt;
			local function kebab_case(key)&lt;br /&gt;
				key = replacements[key] or key&lt;br /&gt;
				key = key:gsub(&amp;quot;(%l)(%u)&amp;quot;, replacer):gsub(&amp;quot;(%l)_(%l)&amp;quot;, replacer)&lt;br /&gt;
				return key&lt;br /&gt;
			end&lt;br /&gt;
			local function html_attribute_encode(str)&lt;br /&gt;
				str = mw.text.jsonEncode(str)&lt;br /&gt;
					:gsub(&amp;#039;&amp;quot;&amp;#039;, &amp;quot;&amp;amp;quot;&amp;quot;)&lt;br /&gt;
					-- &amp;amp; in attributes is automatically escaped.&lt;br /&gt;
					-- :gsub(&amp;quot;&amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;&amp;quot;)&lt;br /&gt;
					:gsub(&amp;quot;&amp;lt;&amp;quot;, &amp;quot;&amp;amp;lt;&amp;quot;)&lt;br /&gt;
					:gsub(&amp;quot;&amp;gt;&amp;quot;, &amp;quot;&amp;amp;gt;&amp;quot;)&lt;br /&gt;
				return str&lt;br /&gt;
			end&lt;br /&gt;
			pcall(function ()&lt;br /&gt;
				table.insert(ret, &amp;#039; data-code=&amp;quot;&amp;#039; .. lang:getCode() .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
				for k, v in m_table.sortedPairs(lang:getRawData()) do&lt;br /&gt;
					table.insert(ret, &amp;quot; data-&amp;quot; .. kebab_case(k)&lt;br /&gt;
						.. &amp;#039;=&amp;quot;&amp;#039;&lt;br /&gt;
						.. html_attribute_encode(v)&lt;br /&gt;
						.. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
				end&lt;br /&gt;
			end)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(ret, &amp;#039;&amp;gt;\n&amp;#039;)&lt;br /&gt;
	table.insert(ret, &amp;#039;&amp;lt;tr class=&amp;quot;language-category-data&amp;quot;&amp;gt;\n&amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
		.. edit_link(&amp;quot;Module:&amp;quot; .. m_languages.getDataModuleName(lang:getCode()),&lt;br /&gt;
			&amp;quot;Edit language data&amp;quot;)&lt;br /&gt;
		.. &amp;quot;&amp;lt;/th&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
	table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;Canonical name&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;quot; .. lang:getCanonicalName() .. &amp;quot;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	local otherNames = lang:getOtherNames(true)&lt;br /&gt;
	if otherNames then&lt;br /&gt;
		local names = {}&lt;br /&gt;
		&lt;br /&gt;
		for _, name in ipairs(otherNames) do&lt;br /&gt;
			table.insert(names, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. name .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if #names &amp;gt; 0 then&lt;br /&gt;
			table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;Other names&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;lt;ul&amp;gt;&amp;quot; .. table.concat(names, &amp;quot;\n&amp;quot;) .. &amp;quot;&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local aliases = lang:getAliases()&lt;br /&gt;
	if aliases then&lt;br /&gt;
		local names = {}&lt;br /&gt;
		&lt;br /&gt;
		for _, name in ipairs(aliases) do&lt;br /&gt;
			table.insert(names, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. name .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if #names &amp;gt; 0 then&lt;br /&gt;
			table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;Aliases&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;lt;ul&amp;gt;&amp;quot; .. table.concat(names, &amp;quot;\n&amp;quot;) .. &amp;quot;&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local varieties = lang:getVarieties()&lt;br /&gt;
	if varieties then&lt;br /&gt;
		local names = {}&lt;br /&gt;
		&lt;br /&gt;
		for _, name in ipairs(varieties) do&lt;br /&gt;
			if type(name) == &amp;quot;string&amp;quot; then&lt;br /&gt;
				table.insert(names, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. name .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
			else&lt;br /&gt;
				assert(type(name) == &amp;quot;table&amp;quot;)&lt;br /&gt;
				local first_var&lt;br /&gt;
				local subvars = {}&lt;br /&gt;
				for i, var in ipairs(name) do&lt;br /&gt;
					if i == 1 then&lt;br /&gt;
						first_var = var&lt;br /&gt;
					else&lt;br /&gt;
						table.insert(subvars, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. var .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if #subvars &amp;gt; 0 then&lt;br /&gt;
					table.insert(names, &amp;quot;&amp;lt;li&amp;gt;&amp;lt;dl&amp;gt;&amp;lt;dt&amp;gt;&amp;quot; .. first_var .. &amp;quot;&amp;lt;/dt&amp;gt;\n&amp;lt;dd&amp;gt;&amp;lt;ul&amp;gt;&amp;quot; .. table.concat(subvars, &amp;quot;\n&amp;quot;) .. &amp;quot;&amp;lt;/ul&amp;gt;&amp;lt;/dd&amp;gt;&amp;lt;/dl&amp;gt;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
				elseif first_var then&lt;br /&gt;
					table.insert(names, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. first_var .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if #names &amp;gt; 0 then&lt;br /&gt;
			table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;Varieties&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;lt;ul&amp;gt;&amp;quot; .. table.concat(names, &amp;quot;\n&amp;quot;) .. &amp;quot;&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;[[Wiktionary:Languages|Language code]]&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;quot; .. lang:getCode() .. &amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
	table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;[[Wiktionary:Families|Language family]]&amp;lt;/th&amp;gt;\n&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local fam = lang:getFamily()&lt;br /&gt;
	local famCode = fam and fam:getCode()&lt;br /&gt;
	&lt;br /&gt;
	if not fam then&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;td&amp;gt;unclassified&amp;lt;/td&amp;gt;&amp;quot;)&lt;br /&gt;
	elseif famCode == &amp;quot;qfa-iso&amp;quot; then&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;td&amp;gt;[[:Category:Language isolates|language isolate]]&amp;lt;/td&amp;gt;&amp;quot;)&lt;br /&gt;
	elseif famCode == &amp;quot;qfa-mix&amp;quot; then&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;td&amp;gt;[[:Category:Mixed languages|mixed language]]&amp;lt;/td&amp;gt;&amp;quot;)&lt;br /&gt;
	elseif famCode == &amp;quot;sgn&amp;quot; then&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;td&amp;gt;[[:Category:Sign languages|sign language]]&amp;lt;/td&amp;gt;&amp;quot;)&lt;br /&gt;
	elseif famCode == &amp;quot;crp&amp;quot; then&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;td&amp;gt;[[:Category:Creole or pidgin languages|creole or pidgin]]&amp;lt;/td&amp;gt;&amp;quot;)&lt;br /&gt;
	elseif famCode == &amp;quot;art&amp;quot; then&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;td&amp;gt;[[:Category:Constructed languages|constructed language]]&amp;lt;/td&amp;gt;&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;td&amp;gt;&amp;quot; .. makeCategoryLink(fam) .. &amp;quot;&amp;lt;/td&amp;gt;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.insert(ret, &amp;quot;\n&amp;lt;/tr&amp;gt;\n&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;Ancestors&amp;lt;/th&amp;gt;\n&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local ancestors, ancestorChain = lang:getAncestors(), lang:getAncestorChain()&lt;br /&gt;
	if ancestors[2] then&lt;br /&gt;
		local ancestorList = {}&lt;br /&gt;
		&lt;br /&gt;
		for i, anc in ipairs(ancestors) do&lt;br /&gt;
			ancestorList[i] = &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. makeCategoryLink(anc) .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;td&amp;gt;&amp;lt;ul&amp;gt;\n&amp;quot; .. table.concat(ancestorList, &amp;quot;\n&amp;quot;) .. &amp;quot;&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;\n&amp;quot;)&lt;br /&gt;
	elseif ancestorChain[1] then&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;td&amp;gt;&amp;lt;ul&amp;gt;\n&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
		local chain = {}&lt;br /&gt;
		&lt;br /&gt;
		for i, anc in ipairs(ancestorChain) do&lt;br /&gt;
			chain[i] = &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. makeCategoryLink(anc) .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		table.insert(ret, table.concat(chain, &amp;quot;\n&amp;lt;ul&amp;gt;\n&amp;quot;))&lt;br /&gt;
		&lt;br /&gt;
		for _, _ in ipairs(chain) do&lt;br /&gt;
			table.insert(ret, &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;/td&amp;gt;\n&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;td&amp;gt;unknown&amp;lt;/td&amp;gt;\n&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.insert(ret, &amp;quot;&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local scripts = lang:getScripts()&lt;br /&gt;
	&lt;br /&gt;
	if scripts[1] then&lt;br /&gt;
		local script_text = {}&lt;br /&gt;
		&lt;br /&gt;
		local function makeScriptLine(sc)&lt;br /&gt;
			local code = sc:getCode()&lt;br /&gt;
			local url = tostring(mw.uri.fullUrl(&amp;#039;Special:Search&amp;#039;, {&lt;br /&gt;
				search = &amp;#039;contentmodel:css insource:&amp;quot;&amp;#039; .. code&lt;br /&gt;
					.. &amp;#039;&amp;quot; insource:/\\.&amp;#039; .. code .. &amp;#039;/&amp;#039;,&lt;br /&gt;
				ns8 = &amp;#039;1&amp;#039;&lt;br /&gt;
			}))&lt;br /&gt;
			return makeCategoryLink(sc)&lt;br /&gt;
				.. &amp;#039; (&amp;lt;span class=&amp;quot;plainlinks&amp;quot; title=&amp;quot;Search for stylesheets referencing this script&amp;quot;&amp;gt;[&amp;#039; .. url .. &amp;#039; &amp;lt;code&amp;gt;&amp;#039; .. code .. &amp;#039;&amp;lt;/code&amp;gt;]&amp;lt;/span&amp;gt;)&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local function add_Hrkt(text)&lt;br /&gt;
			table.insert(text, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. makeScriptLine(Hrkt))&lt;br /&gt;
			table.insert(text, &amp;quot;&amp;lt;ul&amp;gt;&amp;quot;)&lt;br /&gt;
			table.insert(text, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. makeScriptLine(Hira) .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
			table.insert(text, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. makeScriptLine(Kana) .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
			table.insert(text, &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;)&lt;br /&gt;
			table.insert(text, &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		for _, sc in ipairs(scripts) do&lt;br /&gt;
			local text = {}&lt;br /&gt;
			local code = sc:getCode()&lt;br /&gt;
			&lt;br /&gt;
			if code == &amp;quot;Hrkt&amp;quot; then&lt;br /&gt;
				add_Hrkt(text)&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(text, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. makeScriptLine(sc))&lt;br /&gt;
				if code == &amp;quot;Jpan&amp;quot; then&lt;br /&gt;
					table.insert(text, &amp;quot;&amp;lt;ul&amp;gt;&amp;quot;)&lt;br /&gt;
					table.insert(text, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. makeScriptLine(Hani) .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
					add_Hrkt(text)&lt;br /&gt;
					table.insert(text, &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;)&lt;br /&gt;
				elseif code == &amp;quot;Kore&amp;quot; then&lt;br /&gt;
					table.insert(text, &amp;quot;&amp;lt;ul&amp;gt;&amp;quot;)&lt;br /&gt;
					table.insert(text, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. makeScriptLine(Hang) .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
					table.insert(text, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. makeScriptLine(Hani) .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
					table.insert(text, &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
				table.insert(text, &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			table.insert(script_text, table.concat(text, &amp;quot;\n&amp;quot;))&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;[[Wiktionary:Scripts|Scripts]]&amp;lt;/th&amp;gt;\n&amp;lt;td&amp;gt;&amp;lt;ul&amp;gt;\n&amp;quot; .. table.concat(script_text, &amp;quot;\n&amp;quot;) .. &amp;quot;&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;[[Wiktionary:Scripts|Scripts]]&amp;lt;/th&amp;gt;\n&amp;lt;td&amp;gt;not specified&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local function add_module_info(raw_data, heading)&lt;br /&gt;
		if raw_data then&lt;br /&gt;
			local scripts = lang:getScriptCodes()&lt;br /&gt;
			local module_info, n, add = {}, 0, false&lt;br /&gt;
			if type(raw_data) == &amp;quot;string&amp;quot; then&lt;br /&gt;
				table.insert(module_info,&lt;br /&gt;
					(&amp;quot;[[Module:%s]]&amp;quot;):format(raw_data))&lt;br /&gt;
				add = true&lt;br /&gt;
			elseif type(raw_data) == &amp;quot;table&amp;quot; and m_table.size(scripts) == 1 and type(raw_data[scripts[1]]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
				table.insert(module_info,&lt;br /&gt;
					(&amp;quot;[[Module:%s]]&amp;quot;):format(raw_data[scripts[1]]))&lt;br /&gt;
				add = true&lt;br /&gt;
			elseif type(raw_data) == &amp;quot;table&amp;quot; then&lt;br /&gt;
				table.insert(module_info, &amp;quot;&amp;lt;ul&amp;gt;&amp;quot;)&lt;br /&gt;
				for script, data in m_table.sortedPairs(raw_data) do&lt;br /&gt;
					local script_info&lt;br /&gt;
					if m_sc_getByCode(script) then&lt;br /&gt;
						if type(data) == &amp;quot;string&amp;quot; then&lt;br /&gt;
							script_info = (&amp;quot;[[Module:%s]]&amp;lt;/li&amp;gt;&amp;quot;):format(data)&lt;br /&gt;
						else&lt;br /&gt;
							n = n + 1&lt;br /&gt;
							script_info = &amp;quot;(none)\n&amp;quot;&lt;br /&gt;
						end&lt;br /&gt;
						table.insert(module_info, (&amp;quot;&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;: %s&amp;quot;):format(script, script_info))&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				table.insert(module_info, &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;)&lt;br /&gt;
				if m_table.size(module_info) &amp;gt; 2 and n &amp;lt; (m_table.size(module_info) - 2) then add = true end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if add then&lt;br /&gt;
				table.insert(ret, [=[&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;]=] .. heading .. [=[&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;]=] .. table.concat(module_info) .. [=[&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
]=])&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	add_module_info(lang._rawData.generate_forms, &amp;quot;Form-generating&amp;lt;br&amp;gt;module&amp;quot;)&lt;br /&gt;
	add_module_info(lang._rawData.translit, &amp;quot;[[Wiktionary:Transliteration and romanization|Transliteration&amp;lt;br&amp;gt;module]]&amp;quot;)&lt;br /&gt;
	add_module_info(lang._rawData.display_text, &amp;quot;Display text&amp;lt;br&amp;gt;module&amp;quot;)&lt;br /&gt;
	add_module_info(lang._rawData.entry_name, &amp;quot;Entry name&amp;lt;br&amp;gt;module&amp;quot;)&lt;br /&gt;
	add_module_info(lang._rawData.sort_key, &amp;quot;[[Wiktionary:sortkey|Sortkey]]&amp;lt;br&amp;gt;module&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local wikidataItem = lang:getWikidataItem()&lt;br /&gt;
	if lang:getWikidataItem() and mw.wikibase then&lt;br /&gt;
		local URL = mw.wikibase.getEntityUrl(wikidataItem)&lt;br /&gt;
		local link&lt;br /&gt;
		if URL then&lt;br /&gt;
			link = &amp;#039;[&amp;#039; .. URL .. &amp;#039; &amp;#039; .. wikidataItem .. &amp;#039;]&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			link = &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Invalid Wikidata item: &amp;lt;code&amp;gt;&amp;#039; .. wikidataItem .. &amp;#039;&amp;lt;/code&amp;gt;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Wikidata&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;quot; .. link .. &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.insert(ret, &amp;quot;&amp;lt;/table&amp;gt;&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function NavFrame(content, title)&lt;br /&gt;
	return &amp;#039;&amp;lt;div class=&amp;quot;NavFrame&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;NavHead&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
		.. (title or &amp;#039;{{{title}}}&amp;#039;) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
		.. &amp;#039;&amp;lt;div class=&amp;quot;NavContent&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
		.. content&lt;br /&gt;
		.. &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function get_description_intro_additional(lang, countries, extinct, setwiki, setwikt, setsister, entryname)&lt;br /&gt;
	local nameWithLanguage = lang:getCategoryName(&amp;quot;nocap&amp;quot;)&lt;br /&gt;
	if lang:getCode() == &amp;quot;und&amp;quot; then&lt;br /&gt;
		local description =&lt;br /&gt;
			&amp;quot;This is the main category of the &amp;#039;&amp;#039;&amp;#039;&amp;quot; .. nameWithLanguage .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;, represented in Wiktionary by the [[Wiktionary:Languages|code]] &amp;#039;&amp;#039;&amp;#039;&amp;quot; .. lang:getCode() .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;. &amp;quot; ..&lt;br /&gt;
			&amp;quot;This language contains terms in historical writing, whose meaning has not yet been determined by scholars.&amp;quot;&lt;br /&gt;
		return description, nil, nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local canonicalName = lang:getCanonicalName()&lt;br /&gt;
	&lt;br /&gt;
	local intro = linkbox(lang, setwiki, setwikt, setsister, entryname)&lt;br /&gt;
&lt;br /&gt;
	local the_prefix&lt;br /&gt;
	if canonicalName:find(&amp;quot; Language$&amp;quot;) then&lt;br /&gt;
		the_prefix = &amp;quot;&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		the_prefix = &amp;quot;the &amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local description = &amp;quot;This is the main category of &amp;quot; .. the_prefix .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. nameWithLanguage .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	local country_links = {}&lt;br /&gt;
	for _, country in ipairs(countries) do&lt;br /&gt;
		if country ~= &amp;quot;UNKNOWN&amp;quot; then&lt;br /&gt;
			local country_without_the = country:match(&amp;quot;^the (.*)$&amp;quot;)&lt;br /&gt;
			if country_without_the then&lt;br /&gt;
				table.insert(country_links, &amp;quot;the [[&amp;quot; .. country_without_the .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(country_links, &amp;quot;[[&amp;quot; .. country .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local country_desc&lt;br /&gt;
	if #country_links &amp;gt; 0 then&lt;br /&gt;
		local country_link_text = m_table.serialCommaJoin(country_links)&lt;br /&gt;
		if extinct then&lt;br /&gt;
			country_desc = &amp;quot;It is an {{wt|extinct language}} that was formerly spoken in &amp;quot; .. country_link_text .. &amp;quot;.\n\n&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			country_desc = &amp;quot;It is spoken in &amp;quot; .. country_link_text .. &amp;quot;.\n\n&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	elseif extinct then&lt;br /&gt;
		country_desc = &amp;quot;It is an {{wt|extinct language}}.&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		country_desc = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local add = country_desc .. &amp;quot;Information about &amp;quot; .. canonicalName .. &amp;quot;:\n\n&amp;quot; .. infobox(lang)&lt;br /&gt;
	&lt;br /&gt;
	if lang:hasType(&amp;quot;reconstructed&amp;quot;) then&lt;br /&gt;
		add = add .. &amp;quot;\n\n&amp;quot; ..&lt;br /&gt;
			ucfirst(canonicalName) .. &amp;quot; is a reconstructed language. Its words and roots are not directly attested in any written works, but have been reconstructed through the &amp;#039;&amp;#039;comparative method&amp;#039;&amp;#039;, &amp;quot; ..&lt;br /&gt;
			&amp;quot;which finds regular similarities between languages that cannot be explained by coincidence or word-borrowing, and extrapolates ancient forms from these similarities.\n\n&amp;quot; ..&lt;br /&gt;
			&amp;quot;According to our [[Wiktionary:Criteria for inclusion|criteria for inclusion]], terms in &amp;quot; .. canonicalName ..&lt;br /&gt;
			&amp;quot; should &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; be present in entries in the main namespace, but may be added to the Reconstruction: namespace.&amp;quot;&lt;br /&gt;
	elseif lang:hasType(&amp;quot;appendix-constructed&amp;quot;) then&lt;br /&gt;
		add = add .. &amp;quot;\n\n&amp;quot; ..&lt;br /&gt;
			ucfirst(canonicalName) .. &amp;quot; is a constructed language that is only in sporadic use. &amp;quot; ..&lt;br /&gt;
			&amp;quot;According to our [[Wiktionary:Criteria for inclusion|criteria for inclusion]], terms in &amp;quot; .. canonicalName ..&lt;br /&gt;
			&amp;quot; should &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; be present in entries in the main namespace, but may be added to the Appendix: namespace. &amp;quot; ..&lt;br /&gt;
			&amp;quot;All terms in this language may be available at [[Appendix:&amp;quot; .. ucfirst(canonicalName) .. &amp;quot;]].&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local about = mw.title.new(&amp;quot;Wiktionary:About &amp;quot; .. canonicalName)&lt;br /&gt;
	&lt;br /&gt;
	if about.exists then&lt;br /&gt;
		add = add .. &amp;quot;\n\n&amp;quot; ..&lt;br /&gt;
			&amp;quot;Please see &amp;#039;&amp;#039;&amp;#039;[[Wiktionary:About &amp;quot; .. canonicalName .. &amp;quot;]]&amp;#039;&amp;#039;&amp;#039; for information and special considerations for creating &amp;quot; .. nameWithLanguage .. &amp;quot; entries.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local ok, tree_of_descendants = pcall(&lt;br /&gt;
		require(&amp;quot;Module:family tree&amp;quot;).print_children,&lt;br /&gt;
		lang:getCode(), {&lt;br /&gt;
			protolanguage_under_family = true,&lt;br /&gt;
			must_have_descendants = true&lt;br /&gt;
		})&lt;br /&gt;
	&lt;br /&gt;
	if ok then&lt;br /&gt;
		if tree_of_descendants then&lt;br /&gt;
			add = add .. NavFrame(&lt;br /&gt;
				tree_of_descendants,&lt;br /&gt;
				&amp;quot;Family tree&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			add = add .. &amp;quot;\n\n&amp;quot; .. ucfirst(lang:getCanonicalName())&lt;br /&gt;
				.. &amp;quot; has no descendants or varieties listed in Wiktionary&amp;#039;s language data modules.&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		mw.log(&amp;quot;error while generating tree: &amp;quot; .. tostring(tree_of_descendants))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return description, intro, add&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function get_parents(lang, countries, extinct)&lt;br /&gt;
	local canonicalName = lang:getCanonicalName()&lt;br /&gt;
	&lt;br /&gt;
	local ret = {{name = &amp;quot;All languages&amp;quot;, sort = canonicalName}}&lt;br /&gt;
	&lt;br /&gt;
	local fam = lang:getFamily()&lt;br /&gt;
	local famCode = fam and fam:getCode()&lt;br /&gt;
	&lt;br /&gt;
	-- FIXME: Some of the following categories should be added to this module.&lt;br /&gt;
	if not fam then&lt;br /&gt;
		table.insert(ret, {name = &amp;quot;Category:Unclassified languages&amp;quot;, sort = canonicalName})&lt;br /&gt;
	elseif famCode == &amp;quot;qfa-iso&amp;quot; then&lt;br /&gt;
		table.insert(ret, {name = &amp;quot;Category:Language isolates&amp;quot;, sort = canonicalName})&lt;br /&gt;
	elseif famCode == &amp;quot;qfa-mix&amp;quot; then&lt;br /&gt;
		table.insert(ret, {name = &amp;quot;Category:Mixed languages&amp;quot;, sort = canonicalName})&lt;br /&gt;
	elseif famCode == &amp;quot;sgn&amp;quot; then&lt;br /&gt;
		table.insert(ret, {name = &amp;quot;Category:All sign languages&amp;quot;, sort = canonicalName})&lt;br /&gt;
	elseif famCode == &amp;quot;crp&amp;quot; then&lt;br /&gt;
		table.insert(ret, {name = &amp;quot;Category:Creole or pidgin languages&amp;quot;, sort = canonicalName})&lt;br /&gt;
		for _, anc in ipairs(lang:getAncestors()) do&lt;br /&gt;
			-- Avoid Haitian Creole being categorised in [[:Category:Haitian Creole-based creole or pidgin languages]], as one of its ancestors is an etymology-only variety of it.&lt;br /&gt;
			-- Use that ancestor&amp;#039;s ancestors instead.&lt;br /&gt;
			if anc:getNonEtymologicalCode() == lang:getCode() then&lt;br /&gt;
				for _, anc_extra in ipairs(anc:getAncestors()) do&lt;br /&gt;
					table.insert(ret, {name = &amp;quot;Category:&amp;quot; .. ucfirst(anc_extra:getNonEtymologicalName()) .. &amp;quot;-based creole or pidgin languages&amp;quot;, sort = canonicalName})&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(ret, {name = &amp;quot;Category:&amp;quot; .. ucfirst(anc:getNonEtymologicalName()) .. &amp;quot;-based creole or pidgin languages&amp;quot;, sort = canonicalName})&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	elseif famCode == &amp;quot;art&amp;quot; then&lt;br /&gt;
		if lang:hasType(&amp;quot;appendix-constructed&amp;quot;) then&lt;br /&gt;
			table.insert(ret, {name = &amp;quot;Category:Appendix-only constructed languages&amp;quot;, sort = canonicalName})&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(ret, {name = &amp;quot;Category:Constructed languages&amp;quot;, sort = canonicalName})&lt;br /&gt;
		end&lt;br /&gt;
		for _, anc in ipairs(lang:getAncestors()) do&lt;br /&gt;
			if anc:getNonEtymologicalCode() == lang:getCode() then&lt;br /&gt;
				for _, anc_extra in ipairs(anc:getAncestors()) do&lt;br /&gt;
					table.insert(ret, {name = &amp;quot;Category:&amp;quot; .. ucfirst(anc_extra:getNonEtymologicalName()) .. &amp;quot;-based constructed languages&amp;quot;, sort = canonicalName})&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(ret, {name = &amp;quot;Category:&amp;quot; .. ucfirst(anc:getNonEtymologicalName()) .. &amp;quot;-based constructed languages&amp;quot;, sort = canonicalName})&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(ret, {name = &amp;quot;Category:&amp;quot; .. fam:getCategoryName(), sort = canonicalName})&lt;br /&gt;
		if lang:hasType(&amp;quot;reconstructed&amp;quot;) then&lt;br /&gt;
			table.insert(ret, {name = &amp;quot;Category:Reconstructed languages&amp;quot;, sort = (mw.ustring.gsub(canonicalName, &amp;quot;^Proto%-&amp;quot;, &amp;quot;&amp;quot;))})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local function add_sc_cat(sc)&lt;br /&gt;
		table.insert(ret, {name = &amp;quot;Category:&amp;quot; .. sc:getCategoryName() .. &amp;quot; languages&amp;quot;, sort = canonicalName})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local function add_Hrkt()&lt;br /&gt;
		add_sc_cat(Hrkt)&lt;br /&gt;
		add_sc_cat(Hira)&lt;br /&gt;
		add_sc_cat(Kana)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for _, sc in ipairs(lang:getScripts()) do&lt;br /&gt;
		if sc:getCode() == &amp;quot;Hrkt&amp;quot; then&lt;br /&gt;
			add_Hrkt()&lt;br /&gt;
		else&lt;br /&gt;
			add_sc_cat(sc)&lt;br /&gt;
			if sc:getCode() == &amp;quot;Jpan&amp;quot; then&lt;br /&gt;
				add_sc_cat(Hani)&lt;br /&gt;
				add_Hrkt()&lt;br /&gt;
			elseif sc:getCode() == &amp;quot;Kore&amp;quot; then&lt;br /&gt;
				add_sc_cat(Hang)&lt;br /&gt;
				add_sc_cat(Hani)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if lang:hasTranslit() then&lt;br /&gt;
		table.insert(ret, {name = &amp;quot;Category:Languages with automatic transliteration&amp;quot;, sort = canonicalName})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local saw_country = false&lt;br /&gt;
	for _, country in ipairs(countries) do&lt;br /&gt;
		if country ~= &amp;quot;UNKNOWN&amp;quot; then&lt;br /&gt;
			table.insert(ret, {name = &amp;quot;Category:Languages of &amp;quot; .. country, sort = canonicalName})&lt;br /&gt;
			saw_country = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if extinct then&lt;br /&gt;
		table.insert(ret, {name = &amp;quot;Category:All extinct languages&amp;quot;, sort = canonicalName})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not saw_country then&lt;br /&gt;
		table.insert(ret, {name = &amp;quot;Category:Languages not sorted into a country category&amp;quot;, sort = canonicalName})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function get_children(lang)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
&lt;br /&gt;
	-- FIXME: We should work on the children mechanism so it isn&amp;#039;t necessary to manually specify these.&lt;br /&gt;
	for _, label in ipairs({&amp;quot;appendices&amp;quot;, &amp;quot;entry maintenance&amp;quot;, &amp;quot;lemmas&amp;quot;, &amp;quot;names&amp;quot;, &amp;quot;phrases&amp;quot;, &amp;quot;rhymes&amp;quot;, &amp;quot;symbols&amp;quot;, &amp;quot;templates&amp;quot;, &amp;quot;terms by etymology&amp;quot;, &amp;quot;terms by usage&amp;quot;}) do&lt;br /&gt;
		table.insert(ret, {name = label, is_label = true})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert(ret, {name = &amp;quot;terms derived from {{{langname}}}&amp;quot;, is_label = true, lang = false})&lt;br /&gt;
	table.insert(ret, {module = &amp;quot;topic cat&amp;quot;, args = {code = &amp;quot;{{{langcode}}}&amp;quot;, label = &amp;quot;all topics&amp;quot;}, sort = &amp;quot;all topics&amp;quot;})&lt;br /&gt;
	table.insert(ret, {name = &amp;quot;Regional {{{langname}}}&amp;quot;})&lt;br /&gt;
	table.insert(ret, {name = &amp;quot;Requests concerning {{{langname}}}&amp;quot;})&lt;br /&gt;
	table.insert(ret, {name = &amp;quot;Category:Rhymes:{{{langname}}}&amp;quot;, description = &amp;quot;Lists of {{{langname}}} words by their rhymes.&amp;quot;})&lt;br /&gt;
	table.insert(ret, {name = &amp;quot;Category:User {{{langcode}}}&amp;quot;, description = &amp;quot;Wiktionary users categorized by fluency levels in {{{langname}}}.&amp;quot;})&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Handle language categories of the form e.g. [[:Category:French language]] and&lt;br /&gt;
-- [[:Category:British Sign Language]].&lt;br /&gt;
table.insert(raw_handlers, function(data)&lt;br /&gt;
	local lang&lt;br /&gt;
	local langname = data.category:match(&amp;quot;^(.*) language$&amp;quot;)&lt;br /&gt;
	if langname then&lt;br /&gt;
		lang = m_languages.getByCanonicalName(langname)&lt;br /&gt;
	elseif data.category:find(&amp;quot; Language$&amp;quot;) then&lt;br /&gt;
		lang = m_languages.getByCanonicalName(data.category)&lt;br /&gt;
	end&lt;br /&gt;
	if not lang then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local params = {&lt;br /&gt;
		[4] = {list = true},&lt;br /&gt;
		[&amp;quot;setwiki&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;setwikt&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;setsister&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;entryname&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;extinct&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(data.args, params)&lt;br /&gt;
	-- If called from inside, don&amp;#039;t require any arguments, as they can&amp;#039;t be known&lt;br /&gt;
	-- in general and aren&amp;#039;t needed just to generate the first parent (used for&lt;br /&gt;
	-- breadcrumbs).&lt;br /&gt;
--	if #args[4] == 0 and not data.called_from_inside then&lt;br /&gt;
		-- At least one country must be specified unless the language is constructed (e.g. Esperanto) or reconstructed (e.g. Proto-Indo-European).&lt;br /&gt;
--		local fam = lang:getFamily()&lt;br /&gt;
--		if not (lang:hasType(&amp;quot;reconstructed&amp;quot;) or (fam and fam:getCode() == &amp;quot;art&amp;quot;)) then&lt;br /&gt;
--			error(&amp;quot;At least one country (param 1=) must be specified for language &amp;#039;&amp;quot; .. lang:getCanonicalName() .. &amp;quot;&amp;#039; (code &amp;#039;&amp;quot; .. lang:getCode() .. &amp;quot;&amp;#039;). &amp;quot; ..&lt;br /&gt;
--				&amp;quot;Use the value UNKNOWN if the language&amp;#039;s location is truly unknown.&amp;quot;)&lt;br /&gt;
--		end&lt;br /&gt;
--	end&lt;br /&gt;
	local description, intro, additional = &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;&lt;br /&gt;
	-- If called from inside the category tree system, it&amp;#039;s called when generating&lt;br /&gt;
	-- parents or children, and we don&amp;#039;t need to generate the description or additional&lt;br /&gt;
	-- text (which is very expensive in terms of memory because it calls [[Module:family tree]],&lt;br /&gt;
	-- which calls [[Module:languages/data/all]]).&lt;br /&gt;
	if not data.called_from_inside then&lt;br /&gt;
		description, intro, additional = get_description_intro_additional(&lt;br /&gt;
			lang, args[4], args.extinct, args.setwiki, args.setwikt, args.setsister, args.entryname&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	return {&lt;br /&gt;
		description = description,&lt;br /&gt;
		lang = lang:getCode(),&lt;br /&gt;
		intro = intro,&lt;br /&gt;
		additional = additional,&lt;br /&gt;
		breadcrumb = lang:getCanonicalName(),&lt;br /&gt;
		parents = get_parents(lang, args[4], args.extinct),&lt;br /&gt;
		extra_children = get_children(lang),&lt;br /&gt;
		umbrella = false,&lt;br /&gt;
		can_be_empty = true,&lt;br /&gt;
	}, true&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Handle categories such as [[:Category:Regional French]] and [[:Category:Regional Ancient Greek]].&lt;br /&gt;
table.insert(raw_handlers, function(data)&lt;br /&gt;
	local langname = data.category:match(&amp;quot;^Regional (.*)$&amp;quot;)&lt;br /&gt;
	if langname then&lt;br /&gt;
		local lang = require(&amp;quot;Module:languages&amp;quot;).getByCanonicalName(langname)&lt;br /&gt;
		if lang then&lt;br /&gt;
			return {&lt;br /&gt;
				lang = lang:getCode(),&lt;br /&gt;
				description = &amp;quot;Categories containing terms in regional varieties of &amp;quot; .. lang:makeCategoryLink() .. &amp;quot;.&amp;quot;,&lt;br /&gt;
				additional = &amp;quot;This category may also directly contain terms that are uncategorized regionalisms. Such terms should usually be recategorized by the particular regional variety they belong to.&amp;quot;,&lt;br /&gt;
				parents = {&lt;br /&gt;
					&amp;quot;{{{langcat}}}&amp;quot;,&lt;br /&gt;
					{name = &amp;quot;Regionalisms&amp;quot;, sort = langname},&lt;br /&gt;
				},&lt;br /&gt;
				breadcrumb = &amp;quot;Regional&amp;quot;,&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Handle categories such as [[:Category:English-based creole or pidgin languages]].&lt;br /&gt;
table.insert(raw_handlers, function(data)&lt;br /&gt;
	local langname = data.category:match(&amp;quot;(.*)%-based creole or pidgin languages$&amp;quot;)&lt;br /&gt;
	if langname then&lt;br /&gt;
		local lang = require(&amp;quot;Module:languages&amp;quot;).getByCanonicalName(langname)&lt;br /&gt;
		if lang then&lt;br /&gt;
			return {&lt;br /&gt;
				lang = lang:getCode(),&lt;br /&gt;
				description = &amp;quot;Languages which developed as a {{wt|creole}} or {{wt|pidgin}} from &amp;quot; .. lang:makeCategoryLink() .. &amp;quot;.&amp;quot;,&lt;br /&gt;
				parents = {{name = &amp;quot;Creole or pidgin languages&amp;quot;, sort = &amp;quot;*&amp;quot; .. langname}},&lt;br /&gt;
				breadcrumb = lang:getCanonicalName() .. &amp;quot;-based&amp;quot;,&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Handle categories such as [[:Category:English-based constructed languages]].&lt;br /&gt;
table.insert(raw_handlers, function(data)&lt;br /&gt;
	local langname = data.category:match(&amp;quot;(.*)%-based constructed languages$&amp;quot;)&lt;br /&gt;
	if langname then&lt;br /&gt;
		local lang = require(&amp;quot;Module:languages&amp;quot;).getByCanonicalName(langname)&lt;br /&gt;
		if lang then&lt;br /&gt;
			return {&lt;br /&gt;
				lang = lang:getCode(),&lt;br /&gt;
				description = &amp;quot;Constructed languages which are based on &amp;quot; .. lang:makeCategoryLink() .. &amp;quot;.&amp;quot;,&lt;br /&gt;
				parents = {{name = &amp;quot;Constructed languages&amp;quot;, sort = &amp;quot;*&amp;quot; .. langname}},&lt;br /&gt;
				breadcrumb = lang:getCanonicalName() .. &amp;quot;-based&amp;quot;,&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:52 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/languages</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/lang-specific</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/lang-specific&amp;diff=77&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/lang-specific&amp;diff=77&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/lang-specific&quot; title=&quot;Module:Category tree/poscatboiler/data/lang-specific&quot;&gt;Module:Category tree/poscatboiler/data/lang-specific&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module contains a list of languages with lang-specific modules.&lt;br /&gt;
&lt;br /&gt;
local langs_with_modules = {&lt;br /&gt;
	[&amp;quot;acw&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;afb&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ajp&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ams&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ang&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;apc&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ar&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ary&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;arz&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;asta&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;az&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;be&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;bg&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;cast&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ceb&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;chak&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;cs&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;cu&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;de&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;doth&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;el&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;en&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;enm&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;es&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;eu&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;fa&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;fax&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;fi&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;fjer&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;goh&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;gvun&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;grk-pro&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;he&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;hi&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;hil&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;henl&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;hval&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ilo&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ira-pro&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;it&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ja&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;kzg&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;la&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;lhaz&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;lo&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;meer&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;meni&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;mk&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;mt&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;mvi&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ne&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ngda&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;nl&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;nn&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ojp&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;okn&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;orv&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;pi&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;pt&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ro&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ru&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ryn&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;rys&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ryu&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;sa&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;sc&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;sei&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;th&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;tkn&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;tl&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;trig&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;uk&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;vzaa&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;xug&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;yoi&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;yox&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;zh&amp;quot;] = true,	&lt;br /&gt;
	[&amp;quot;zlw-ocs&amp;quot;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return langs_with_modules&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:52 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/lang-specific</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/figures of speech</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/figures_of_speech&amp;diff=75&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/figures_of_speech&amp;diff=75&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/figures_of_speech&quot; title=&quot;Module:Category tree/poscatboiler/data/figures of speech&quot;&gt;Module:Category tree/poscatboiler/data/figures of speech&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                  LABELS                                 --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;figures of speech&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms whose interpretation is not strictly literal, but are used in figurative ways or for special effect.&amp;quot;,&lt;br /&gt;
	umbrella_parents = &amp;quot;Fundamental&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;abbreviated euphemisms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} shortened euphemisms for profane, blasphemous, or taboo terms.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;euphemisms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;aphorisms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} phrases that convey basic concepts in a manner short and easily memorable. Typically conveying a concise statement of a scientific principle or truth.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;figures of speech&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;catchphrases&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} phrases that are popularized through repeated use.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;figures of speech&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;dysphemisms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} [[dysphemism]]s (offensive, vulgar or otherwise negative terms used in place of a neutral alternative).&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;figures of speech&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;euphemisms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that indirectly refer to something unpleasant or controversial.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;figures of speech&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;four-character idioms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} phrases originating in Classical Chinese, typically four characters in length.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;idioms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;hyperboles&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms used as exaggerations for emphasis, rather than being taken literally.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;figures of speech&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;idioms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} phrases understood by subjective, as opposed to literal meanings.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;figures of speech&amp;quot;, &amp;quot;multiword terms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;litotes&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} litotical expressions or terms commonly used in [[litotes]] (stating something by denying its opposite).&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;figures of speech&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;meioses&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} meiotic expressions or terms commonly used in [[meiosis]] (downplaying the focal point of a statement for effect).&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;figures of speech&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;metaphors&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} phrases that invoke a similarity with something else.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;figures of speech&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;minced oaths&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} euphemisms for profane, blasphemous, or taboo terms.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;euphemisms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;proverbs&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} phrases popularly known as representations of common sense.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;figures of speech&amp;quot;, &amp;quot;phrases&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;sarcastic terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms that are used sarcastically.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;figures of speech&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;similes&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} figures of speech in which one thing is compared to another.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;figures of speech&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
labels[&amp;quot;set phrases&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} established expressions whose wording are subject to little or no variation.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;figures of speech&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
labels[&amp;quot;snowclones&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} clichés using old idioms with varying words in new contexts.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;idioms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
labels[&amp;quot;synecdoches&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} figures of speech in which a term for a part of something is used to refer to the whole [[pars pro toto]], or vice versa [[totum pro parte]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;figures of speech&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Add &amp;#039;umbrella_parents&amp;#039; key if not already present.&lt;br /&gt;
for key, data in pairs(labels) do&lt;br /&gt;
	if not data.umbrella_parents then&lt;br /&gt;
		data.umbrella_parents = &amp;quot;Figures of speech subcategories by language&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Figures of speech subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering topics related to figures of speech.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;figures of speech&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, RAW_CATEGORIES = raw_categories}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:52 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/figures_of_speech</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/families</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/families&amp;diff=73&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/families&amp;diff=73&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/families&quot; title=&quot;Module:Category tree/poscatboiler/data/families&quot;&gt;Module:Category tree/poscatboiler/data/families&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local raw_categories = {}&lt;br /&gt;
local raw_handlers = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;All language families&amp;quot;] = {&lt;br /&gt;
	intro = &amp;quot;{{sisterlinks|Category:Languages by family}}\n{{wikipedia|Language family|Language family|mul=List of language families|mullabel=List of language families}}&amp;quot;,&lt;br /&gt;
	description = &amp;quot;This category lists all [[Wiktionary:language family|language families]].&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;Fundamental&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Languages by family&amp;quot;] = {&lt;br /&gt;
	intro = &amp;quot;{{sisterlinks|Category:Languages by family}}\n{{wikipedia|Language family|Language family|mul=List of language families|mullabel=List of language families}}&amp;quot;,&lt;br /&gt;
	description = &amp;quot;This category contains all languages categorized hierarchically according to the [[Wiktionary:language family|language family]] they belong to.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Only top-level language families are shown here. For a full list of all language families, see [[:Category:All language families]] or [[Wiktionary:List of families]].&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		{name = &amp;quot;All languages&amp;quot;, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
		{name = &amp;quot;All language families&amp;quot;, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                RAW HANDLERS                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function family_is_not_a_family(fam)&lt;br /&gt;
	local famcode = fam:getCode()&lt;br /&gt;
	if famcode == &amp;quot;paa&amp;quot; then&lt;br /&gt;
		return false -- Papuan languages are not a family but have a category&lt;br /&gt;
	elseif famcode == &amp;quot;qfa-iso&amp;quot; or famcode == &amp;quot;qfa-not&amp;quot; then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		local parfam = fam:getFamily()&lt;br /&gt;
		if parfam and parfam:getCode() == &amp;quot;qfa-not&amp;quot; then&lt;br /&gt;
			-- Constructed languages, sign languages, etc.; no category for them&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
local function infobox(fam)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	&lt;br /&gt;
	table.insert(ret, &amp;quot;&amp;lt;table class=\&amp;quot;wikitable\&amp;quot;&amp;gt;\n&amp;quot;)&lt;br /&gt;
	table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th colspan=\&amp;quot;2\&amp;quot; class=\&amp;quot;plainlinks\&amp;quot;&amp;gt;[//en.wiktionary.org/w/index.php?title=Module:families/data&amp;amp;action=edit Edit family data]&amp;lt;/th&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
	table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;Canonical name&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;quot; .. fam:getCanonicalName() .. &amp;quot;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local otherNames = fam:getOtherNames(true)&lt;br /&gt;
	if otherNames then&lt;br /&gt;
		local names = {}&lt;br /&gt;
		&lt;br /&gt;
		for _, name in ipairs(otherNames) do&lt;br /&gt;
			table.insert(names, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. name .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if #names &amp;gt; 0 then&lt;br /&gt;
			table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;Other names&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;lt;ul&amp;gt;&amp;quot; .. table.concat(names, &amp;quot;\n&amp;quot;) .. &amp;quot;&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local aliases = fam:getAliases()&lt;br /&gt;
	if aliases then&lt;br /&gt;
		local names = {}&lt;br /&gt;
		&lt;br /&gt;
		for _, name in ipairs(aliases) do&lt;br /&gt;
			table.insert(names, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. name .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if #names &amp;gt; 0 then&lt;br /&gt;
			table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;Aliases&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;lt;ul&amp;gt;&amp;quot; .. table.concat(names, &amp;quot;\n&amp;quot;) .. &amp;quot;&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local varieties = fam:getVarieties()&lt;br /&gt;
	if varieties then&lt;br /&gt;
		local names = {}&lt;br /&gt;
		&lt;br /&gt;
		for _, name in ipairs(varieties) do&lt;br /&gt;
			if type(name) == &amp;quot;string&amp;quot; then&lt;br /&gt;
				table.insert(names, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. name .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
			else&lt;br /&gt;
				assert(type(name) == &amp;quot;table&amp;quot;)&lt;br /&gt;
				local first_var&lt;br /&gt;
				local subvars = {}&lt;br /&gt;
				for i, var in ipairs(name) do&lt;br /&gt;
					if i == 1 then&lt;br /&gt;
						first_var = var&lt;br /&gt;
					else&lt;br /&gt;
						table.insert(subvars, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. var .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if #subvars &amp;gt; 0 then&lt;br /&gt;
					table.insert(names, &amp;quot;&amp;lt;li&amp;gt;&amp;lt;dl&amp;gt;&amp;lt;dt&amp;gt;&amp;quot; .. first_var .. &amp;quot;&amp;lt;/dt&amp;gt;\n&amp;lt;dd&amp;gt;&amp;lt;ul&amp;gt;&amp;quot; .. table.concat(subvars, &amp;quot;\n&amp;quot;) .. &amp;quot;&amp;lt;/ul&amp;gt;&amp;lt;/dd&amp;gt;&amp;lt;/dl&amp;gt;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
				elseif first_var then&lt;br /&gt;
					table.insert(names, &amp;quot;&amp;lt;li&amp;gt;&amp;quot; .. first_var .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if #names &amp;gt; 0 then&lt;br /&gt;
			table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;Varieties&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;lt;ul&amp;gt;&amp;quot; .. table.concat(names, &amp;quot;\n&amp;quot;) .. &amp;quot;&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;[[Wiktionary:Families|Family code]]&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;quot; .. fam:getCode() .. &amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
	table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;[[Wikipedia:Proto-language|Common ancestor]]&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local protoLanguage = fam:getProtoLanguage()&lt;br /&gt;
	&lt;br /&gt;
	if protoLanguage then&lt;br /&gt;
		table.insert(ret, &amp;quot;[[:Category:&amp;quot; .. protoLanguage:getCategoryName() .. &amp;quot;|&amp;quot; .. protoLanguage:getCanonicalName() .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(ret, &amp;quot;none&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.insert(ret, &amp;quot;&amp;lt;/td&amp;gt;\n&amp;quot;)&lt;br /&gt;
	table.insert(ret, &amp;quot;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local parent = fam:getFamily()&lt;br /&gt;
	&lt;br /&gt;
	if not parent then&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;[[Wiktionary:Families|Parent family]]&amp;lt;/th&amp;gt;\n&amp;lt;td&amp;gt;&amp;quot;)&lt;br /&gt;
		table.insert(ret, &amp;quot;unclassified&amp;quot;)&lt;br /&gt;
	elseif parent:getCode() == &amp;quot;qfa-not&amp;quot; then&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;[[Wiktionary:Families|Parent family]]&amp;lt;/th&amp;gt;\n&amp;lt;td&amp;gt;&amp;quot;)&lt;br /&gt;
		table.insert(ret, &amp;quot;not a family&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		local chain = {}&lt;br /&gt;
		while parent do&lt;br /&gt;
			if family_is_not_a_family(parent) then&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(chain, &amp;quot;[[:Category:&amp;quot; .. parent:getCategoryName() .. &amp;quot;|&amp;quot; .. parent:getCanonicalName() .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
			parent = parent:getFamily()&lt;br /&gt;
		end&lt;br /&gt;
		if #chain == 0 then&lt;br /&gt;
			table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;[[Wiktionary:Families|Parent family]]&amp;lt;/th&amp;gt;\n&amp;lt;td&amp;gt;&amp;quot;)&lt;br /&gt;
			table.insert(ret, &amp;quot;no parents&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;\n&amp;lt;th&amp;gt;[[Wiktionary:Families|Parent famil&amp;quot;&lt;br /&gt;
				.. (#chain == 1 and &amp;quot;y&amp;quot; or &amp;quot;ies&amp;quot;) .. &amp;quot;]]&amp;lt;/th&amp;gt;\n&amp;lt;td&amp;gt;&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			for i = #chain, 1, -1 do&lt;br /&gt;
				table.insert(ret, &amp;quot;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;quot; .. chain[i])&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(ret, string.rep(&amp;quot;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;quot;, #chain))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.insert(ret, &amp;quot;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	if fam:getWikidataItem() and mw.wikibase then&lt;br /&gt;
		local link = &amp;#039;[&amp;#039; .. mw.wikibase.getEntityUrl(fam:getWikidataItem()) .. &amp;#039; &amp;#039; .. fam:getWikidataItem() .. &amp;#039;]&amp;#039;&lt;br /&gt;
		table.insert(ret, &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Wikidata&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;quot; .. link .. &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.insert(ret, &amp;quot;&amp;lt;/table&amp;gt;&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.insert(raw_handlers, function(data)&lt;br /&gt;
	local family_name = data.category:match(&amp;quot;^(.+) languages$&amp;quot;)&lt;br /&gt;
	if not family_name then&lt;br /&gt;
		family_name = data.category:match(&amp;quot;^(.+ Languages)$&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if not family_name then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local family = require(&amp;quot;Module:families&amp;quot;).getByCanonicalName(family_name) or&lt;br /&gt;
		require(&amp;quot;Module:families&amp;quot;).getByCanonicalName(mw.ustring.lower(family_name))&lt;br /&gt;
	if not family then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local parent_fam = family:getFamily()&lt;br /&gt;
	local first_parent&lt;br /&gt;
	&lt;br /&gt;
	if not parent_fam or family_is_not_a_family(parent_fam) then&lt;br /&gt;
		first_parent = &amp;quot;Languages by family&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		first_parent = parent_fam:getCategoryName()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local intro, description, additional = &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;&lt;br /&gt;
	if not data.called_from_inside then&lt;br /&gt;
		local wikipedia_art = family:getWikipediaArticle()&lt;br /&gt;
		intro = &amp;quot;&amp;quot;&lt;br /&gt;
		description = &amp;quot;This is the main category of the &amp;#039;&amp;#039;&amp;#039;&amp;quot; .. family:getDisplayForm() .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;.&amp;quot;&lt;br /&gt;
		additional = &amp;quot;Information about &amp;quot; .. family:getCanonicalName() .. &amp;quot;:\n\n&amp;quot; .. infobox(family)&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	return {&lt;br /&gt;
		intro = intro,&lt;br /&gt;
		description = description,&lt;br /&gt;
		additional = additional,&lt;br /&gt;
		parents = {&lt;br /&gt;
			first_parent,&lt;br /&gt;
			&amp;quot;All language families&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		breadcrumb = family:getCanonicalName(),&lt;br /&gt;
		can_be_empty = true,&lt;br /&gt;
	}&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:52 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/families</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/entry maintenance</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/entry_maintenance&amp;diff=71&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/entry_maintenance&amp;diff=71&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/entry_maintenance&quot; title=&quot;Module:Category tree/poscatboiler/data/entry maintenance&quot;&gt;Module:Category tree/poscatboiler/data/entry maintenance&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/entry_maintenance&amp;amp;diff=71&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:51 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/entry_maintenance</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data/characters</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/characters&amp;diff=69&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/characters&amp;diff=69&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data/characters&quot; title=&quot;Module:Category tree/poscatboiler/data/characters&quot;&gt;Module:Category tree/poscatboiler/data/characters&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local raw_categories = {}&lt;br /&gt;
local handlers = {} &lt;br /&gt;
&lt;br /&gt;
local ulen = mw.ustring.len&lt;br /&gt;
local uupper = mw.ustring.upper&lt;br /&gt;
local ulower = mw.ustring.lower&lt;br /&gt;
local rfind = mw.ustring.find&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function track(page)&lt;br /&gt;
	require(&amp;quot;Module:debug/track&amp;quot;)(&amp;quot;poscatboiler-characters/&amp;quot; .. page)&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Terms by their individual characters subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering terms categorized by unusual characters contained in them.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;terms by their individual characters&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                 HANDLERS                                --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- 	If char is a combining character, returns a version with a dotted circle before it.&lt;br /&gt;
function add_dotted_circle(char, combining)&lt;br /&gt;
	return combining and &amp;quot;◌&amp;quot; .. char or char&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.insert(handlers, function(data)&lt;br /&gt;
	-- NOTE: The &amp;quot;character&amp;quot; in the title may actually be a description such as&lt;br /&gt;
	-- &amp;quot;gershayim&amp;quot;. In that case, char= is specified as a parameter indicating the&lt;br /&gt;
	-- actual character.&lt;br /&gt;
	local titlechar = data.label:match(&amp;quot;^terms spelled with (.+)$&amp;quot;)&lt;br /&gt;
	if not titlechar then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local ja_ryu = data.lang and (data.lang:getFamilyCode() == &amp;quot;jpx&amp;quot; or data.lang:getFamilyCode() == &amp;quot;jpx-ryu&amp;quot;)&lt;br /&gt;
	-- If Japanese or Ryukyuan, only fire on a single kanji character.&lt;br /&gt;
	if ja_ryu and (titlechar:find(&amp;quot;[A-Za-z]&amp;quot;) or ulen(titlechar) &amp;gt; 1) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local params = {&lt;br /&gt;
		[&amp;quot;char&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;sort&amp;quot;] = {},&lt;br /&gt;
		-- Not sure what used to be done with the following parameters.&lt;br /&gt;
		[&amp;quot;context&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;context2&amp;quot;] = {},&lt;br /&gt;
	}&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(data.args, params)&lt;br /&gt;
	if args.context or args.context2 then&lt;br /&gt;
		track(&amp;quot;terms-spelled-with-context&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if titlechar == &amp;quot;numbers&amp;quot; then&lt;br /&gt;
		local sortkey = args.sort or &amp;quot;#&amp;quot;&lt;br /&gt;
		return {&lt;br /&gt;
			description = &amp;quot;{{{langname}}} terms spelled with one or more numeric digits.&amp;quot;,&lt;br /&gt;
			parents = {{name = &amp;quot;terms by their individual characters&amp;quot;, sort = sortkey }},&lt;br /&gt;
			breadcrumb = &amp;quot;numbers&amp;quot;,&lt;br /&gt;
			umbrella = {&lt;br /&gt;
				breadcrumb = &amp;quot;numbers&amp;quot;,&lt;br /&gt;
				parents = {{name = &amp;quot;Terms by their individual characters subcategories by language&amp;quot;, sort = &amp;quot; &amp;quot; .. sortkey }}&lt;br /&gt;
			},&lt;br /&gt;
		}, true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local char = args.char or titlechar&lt;br /&gt;
	local titlechar_is_desc = args.char and args.char ~= titlechar&lt;br /&gt;
	if titlechar_is_desc then&lt;br /&gt;
		track(&amp;quot;titlechar_is_desc&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local lang = data.lang or require(&amp;quot;Module:languages&amp;quot;).getByCode(&amp;quot;mul&amp;quot;)&lt;br /&gt;
	local combining = ulen(char) == 1 and require(&amp;quot;Module:Unicode_data&amp;quot;).is_combining(mw.ustring.codepoint(char))&lt;br /&gt;
	&lt;br /&gt;
	local specials = {[&amp;quot;ß&amp;quot;] = &amp;quot;ẞ&amp;quot;, [&amp;quot;ͅ&amp;quot;] = &amp;quot;ͅ&amp;quot;}&lt;br /&gt;
	local upper = mw.ustring.toNFD(char)&lt;br /&gt;
		:gsub(&amp;quot;[%z\1-\127\194-\244][\128-\191]*&amp;quot;, function(m)&lt;br /&gt;
			return specials[m] or mw.ustring.upper(m)&lt;br /&gt;
		end)&lt;br /&gt;
	upper = mw.ustring.toNFC(upper)&lt;br /&gt;
	&lt;br /&gt;
	if char ~= upper and ulen(char) == 1 then&lt;br /&gt;
		-- We want uppercase characters; but unless we&amp;#039;re careful, we run into an issue with&lt;br /&gt;
		-- [[Category:English terms spelled with ı]] due to the weird behavior of this character,&lt;br /&gt;
		-- which has standard I as its uppercase equivalent.&lt;br /&gt;
		local standard_chars = lang:getStandardCharacters()&lt;br /&gt;
		if data.lang and standard_chars then&lt;br /&gt;
			local function err()&lt;br /&gt;
				error(&amp;quot;Category titles should use uppercase characters: &amp;#039;&amp;quot; .. data.label .. &amp;quot;&amp;#039;&amp;quot;, 2)&lt;br /&gt;
			end&lt;br /&gt;
			if data.lang:getCode() ~= &amp;quot;lo&amp;quot; then&lt;br /&gt;
				if not rfind(standard_chars, upper) then&lt;br /&gt;
					err()&lt;br /&gt;
				end&lt;br /&gt;
			elseif not rfind(upper, &amp;quot;[&amp;quot; .. standard_chars .. &amp;quot;]&amp;quot;) then&lt;br /&gt;
				err()&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Compute description.&lt;br /&gt;
	&lt;br /&gt;
	-- If the letter has a lowercase form, show it.&lt;br /&gt;
	local character = require(&amp;quot;Module:links&amp;quot;).full_link(&lt;br /&gt;
		{&lt;br /&gt;
			term = char,&lt;br /&gt;
			alt = combining and add_dotted_circle(char, true) or nil,&lt;br /&gt;
			lang = lang,&lt;br /&gt;
			tr = combining and &amp;quot;-&amp;quot; or nil,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;term&amp;quot;&lt;br /&gt;
	)&lt;br /&gt;
	&lt;br /&gt;
	if ulower(char) ~= char then&lt;br /&gt;
		character = &amp;quot;upper case &amp;quot; .. character .. &amp;quot; or lower case &amp;quot; ..&lt;br /&gt;
			require(&amp;quot;Module:links&amp;quot;).full_link(&lt;br /&gt;
				{&lt;br /&gt;
					term = ulower(char),&lt;br /&gt;
					lang = lang&lt;br /&gt;
				},&lt;br /&gt;
				&amp;quot;term&amp;quot;&lt;br /&gt;
			)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if titlechar_is_desc then&lt;br /&gt;
		character = character .. &amp;quot; (&amp;quot; .. titlechar .. &amp;quot;)&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local description = &amp;quot;{{{langname}}} terms spelled with &amp;quot; .. character .. &amp;quot;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	-- Set tagged character for displaytitle and breadcrumb.&lt;br /&gt;
	local tagged_titlechar = not titlechar_is_desc and&lt;br /&gt;
		require(&amp;quot;Module:script utilities&amp;quot;).tag_text(titlechar, lang, nil, &amp;quot;term&amp;quot;) or nil&lt;br /&gt;
	local tagged_char = titlechar_is_desc and titlechar or&lt;br /&gt;
		require(&amp;quot;Module:script utilities&amp;quot;).tag_text(add_dotted_circle(char, combining), lang, nil, &amp;quot;term&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	-- Compute sort key.&lt;br /&gt;
&lt;br /&gt;
	local sortkey =&lt;br /&gt;
		args.sort or&lt;br /&gt;
		(lang:makeSortKey(char))&lt;br /&gt;
	if sortkey == &amp;quot;&amp;quot; then&lt;br /&gt;
		sortkey = char&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return {&lt;br /&gt;
		description = description,&lt;br /&gt;
		additional = &amp;quot;Note that categories of the form &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;LANG terms spelled with CHAR&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; are intended for characters not &amp;quot;&lt;br /&gt;
			.. &amp;quot;part of the standard repertoire of a language (e.g. Cyrillic characters in English or Latin characters in Russian).&amp;quot;,&lt;br /&gt;
		displaytitle = not titlechar_is_desc and &amp;quot;{{{langname}}} terms spelled with &amp;quot; .. tagged_titlechar or nil,&lt;br /&gt;
		parents = {{name = &amp;quot;terms by their individual characters&amp;quot;, sort = sortkey }},&lt;br /&gt;
		breadcrumb = tagged_char,&lt;br /&gt;
		umbrella = not ja_ryu and {&lt;br /&gt;
			displaytitle = not titlechar_is_desc and &amp;quot;Terms spelled with &amp;quot; .. tagged_titlechar .. &amp;quot; by language&amp;quot; or nil,&lt;br /&gt;
			breadcrumb = tagged_char,&lt;br /&gt;
			parents = {{name = &amp;quot;Terms by their individual characters subcategories by language&amp;quot;, sort = &amp;quot; &amp;quot; .. sortkey }}&lt;br /&gt;
		} or false,&lt;br /&gt;
	}, true&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {RAW_CATEGORIES = raw_categories, HANDLERS = handlers}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:51 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data/characters</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler/data</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data&amp;diff=67&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data&amp;diff=67&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler/data&quot; title=&quot;Module:Category tree/poscatboiler/data&quot;&gt;Module:Category tree/poscatboiler/data&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local raw_categories = {}&lt;br /&gt;
local handlers = {}&lt;br /&gt;
local raw_handlers = {}&lt;br /&gt;
&lt;br /&gt;
local subpages = {&lt;br /&gt;
	&amp;quot;characters&amp;quot;,&lt;br /&gt;
	&amp;quot;entry maintenance&amp;quot;,&lt;br /&gt;
	&amp;quot;families&amp;quot;,&lt;br /&gt;
	&amp;quot;figures of speech&amp;quot;,&lt;br /&gt;
	&amp;quot;languages&amp;quot;,&lt;br /&gt;
	&amp;quot;lemmas&amp;quot;,&lt;br /&gt;
	&amp;quot;miscellaneous&amp;quot;,&lt;br /&gt;
	&amp;quot;modules&amp;quot;,&lt;br /&gt;
	&amp;quot;names&amp;quot;,&lt;br /&gt;
	&amp;quot;non-lemma forms&amp;quot;,&lt;br /&gt;
	&amp;quot;phrases&amp;quot;,&lt;br /&gt;
	&amp;quot;rhymes&amp;quot;,&lt;br /&gt;
	&amp;quot;scripts&amp;quot;,&lt;br /&gt;
	&amp;quot;shortenings&amp;quot;,&lt;br /&gt;
	&amp;quot;symbols&amp;quot;,&lt;br /&gt;
	&amp;quot;templates&amp;quot;,&lt;br /&gt;
	&amp;quot;terms by etymology&amp;quot;,&lt;br /&gt;
	&amp;quot;terms by grammatical category&amp;quot;,&lt;br /&gt;
	&amp;quot;terms by lexical property&amp;quot;,&lt;br /&gt;
	&amp;quot;terms by semantic function&amp;quot;,&lt;br /&gt;
	&amp;quot;terms by script&amp;quot;,&lt;br /&gt;
	&amp;quot;terms by usage&amp;quot;,&lt;br /&gt;
	&amp;quot;transliterations&amp;quot;,&lt;br /&gt;
	&amp;quot;unicode&amp;quot;,&lt;br /&gt;
	&amp;quot;word of the day&amp;quot;,&lt;br /&gt;
	&amp;quot;words by number of syllables&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Import subpages&lt;br /&gt;
for _, subpage in ipairs(subpages) do&lt;br /&gt;
	local datamodule = &amp;quot;Module:category tree/poscatboiler/data/&amp;quot; .. subpage&lt;br /&gt;
	local retval = require(datamodule)&lt;br /&gt;
	if retval[&amp;quot;LABELS&amp;quot;] then&lt;br /&gt;
		for label, data in pairs(retval[&amp;quot;LABELS&amp;quot;]) do&lt;br /&gt;
			if labels[label] and not retval[&amp;quot;IGNOREDUP&amp;quot;] then&lt;br /&gt;
				error(&amp;quot;Label &amp;quot; .. label .. &amp;quot; defined in both [[&amp;quot;&lt;br /&gt;
					.. datamodule .. &amp;quot;]] and [[&amp;quot; .. labels[label].module .. &amp;quot;]].&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			data.module = datamodule&lt;br /&gt;
			labels[label] = data&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if retval[&amp;quot;RAW_CATEGORIES&amp;quot;] then&lt;br /&gt;
		for category, data in pairs(retval[&amp;quot;RAW_CATEGORIES&amp;quot;]) do&lt;br /&gt;
			if raw_categories[category] and not retval[&amp;quot;IGNOREDUP&amp;quot;] then&lt;br /&gt;
				error(&amp;quot;Raw category &amp;quot; .. category .. &amp;quot; defined in both [[&amp;quot;&lt;br /&gt;
					.. datamodule .. &amp;quot;]] and [[&amp;quot; .. raw_categories[category].module .. &amp;quot;]].&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			data.module = datamodule&lt;br /&gt;
			raw_categories[category] = data&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if retval[&amp;quot;HANDLERS&amp;quot;] then&lt;br /&gt;
		for _, handler in ipairs(retval[&amp;quot;HANDLERS&amp;quot;]) do&lt;br /&gt;
			table.insert(handlers, { module = datamodule, handler = handler })&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if retval[&amp;quot;RAW_HANDLERS&amp;quot;] then&lt;br /&gt;
		for _, handler in ipairs(retval[&amp;quot;RAW_HANDLERS&amp;quot;]) do&lt;br /&gt;
			table.insert(raw_handlers, { module = datamodule, handler = handler })&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Add child categories to their parents&lt;br /&gt;
local function add_children_to_parents(hierarchy, raw)&lt;br /&gt;
	for key, data in pairs(hierarchy) do&lt;br /&gt;
		local parents = data.parents&lt;br /&gt;
		if parents then&lt;br /&gt;
			if type(parents) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
				parents = {parents}&lt;br /&gt;
			end&lt;br /&gt;
			if parents.name or parents.module then&lt;br /&gt;
				parents = {parents}&lt;br /&gt;
			end&lt;br /&gt;
			for _, parent in ipairs(parents) do&lt;br /&gt;
				if type(parent) ~= &amp;quot;table&amp;quot; or not parent.name and not parent.module then&lt;br /&gt;
					parent = {name = parent}&lt;br /&gt;
				end&lt;br /&gt;
				if parent.name and not parent.module and type(parent.name) == &amp;quot;string&amp;quot; and not parent.name:find(&amp;quot;^Category:&amp;quot;) then&lt;br /&gt;
					local parent_is_raw&lt;br /&gt;
					if raw then&lt;br /&gt;
						parent_is_raw = not parent.is_label&lt;br /&gt;
					else&lt;br /&gt;
						parent_is_raw = parent.raw&lt;br /&gt;
					end&lt;br /&gt;
					-- Don&amp;#039;t do anything if the child is raw and the parent is lang-specific,&lt;br /&gt;
					-- otherwise e.g. &amp;quot;Lemmas subcategories by language&amp;quot; will be listed as a&lt;br /&gt;
					-- child of every &amp;quot;LANG lemmas&amp;quot; category.&lt;br /&gt;
					-- FIXME: We need to rethink this mechanism.&lt;br /&gt;
					if not raw or parent_is_raw then&lt;br /&gt;
						local child_hierarchy = parent_is_raw and raw_categories or labels&lt;br /&gt;
						if child_hierarchy[parent.name] then&lt;br /&gt;
							local child = {name = key, sort = parent.sort, raw = raw}&lt;br /&gt;
							if child_hierarchy[parent.name].children then&lt;br /&gt;
								table.insert(child_hierarchy[parent.name].children, child)&lt;br /&gt;
							else&lt;br /&gt;
								child_hierarchy[parent.name].children = {child}&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
add_children_to_parents(labels)&lt;br /&gt;
add_children_to_parents(raw_categories, true)&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	LABELS = labels, RAW_CATEGORIES = raw_categories,&lt;br /&gt;
	HANDLERS = handlers, RAW_HANDLERS = raw_handlers&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:51 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler/data</comments>
		</item>
		<item>
			<title>Module:Category tree/poscatboiler</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler&amp;diff=65&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler&amp;diff=65&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/poscatboiler&quot; title=&quot;Module:Category tree/poscatboiler&quot;&gt;Module:Category tree/poscatboiler&lt;/a&gt; by file upload (1 revision)&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;
local lang_independent_data = require(&amp;quot;Module:category tree/poscatboiler/data&amp;quot;)&lt;br /&gt;
local lang_specific_module = &amp;quot;Module:category tree/poscatboiler/data/lang-specific&amp;quot;&lt;br /&gt;
local lang_specific_module_prefix = lang_specific_module .. &amp;quot;/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- Category object&lt;br /&gt;
&lt;br /&gt;
local Category = {}&lt;br /&gt;
Category.__index = Category&lt;br /&gt;
&lt;br /&gt;
function Category.new_main(frame)&lt;br /&gt;
	local self = setmetatable({}, Category)&lt;br /&gt;
&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {},&lt;br /&gt;
		[2] = {required = true},&lt;br /&gt;
		[3] = {},&lt;br /&gt;
		[&amp;quot;raw&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local args, remaining_args = require(&amp;quot;Module:parameters&amp;quot;).process(frame:getParent().args, params, true, &amp;quot;category tree/poscatboiler&amp;quot;)&lt;br /&gt;
	self._info = {code = args[1], label = args[2], sc = args[3], raw = args.raw, args = remaining_args}&lt;br /&gt;
&lt;br /&gt;
	self:initCommon()&lt;br /&gt;
&lt;br /&gt;
	if not self._data then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:get_originating_info()&lt;br /&gt;
	local originating_info = &amp;quot;&amp;quot;&lt;br /&gt;
	if self._info.originating_label then&lt;br /&gt;
		originating_info = &amp;quot; (originating from label \&amp;quot;&amp;quot; .. self._info.originating_label .. &amp;quot;\&amp;quot; in module [[&amp;quot; .. self._info.originating_module .. &amp;quot;]])&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return originating_info&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
function Category.new(info)&lt;br /&gt;
	for key, val in pairs(info) do&lt;br /&gt;
		if not (key == &amp;quot;code&amp;quot; or key == &amp;quot;label&amp;quot; or key == &amp;quot;sc&amp;quot; or key == &amp;quot;raw&amp;quot; or key == &amp;quot;args&amp;quot;&lt;br /&gt;
			or key == &amp;quot;called_from_inside&amp;quot; or key == &amp;quot;originating_label&amp;quot; or key == &amp;quot;originating_module&amp;quot;) then&lt;br /&gt;
			error(&amp;quot;The parameter \&amp;quot;&amp;quot; .. key .. &amp;quot;\&amp;quot; was not recognized.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local self = setmetatable({}, Category)&lt;br /&gt;
	self._info = info&lt;br /&gt;
&lt;br /&gt;
	if not self._info.label then&lt;br /&gt;
		error(&amp;quot;No label was specified.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	self:initCommon()&lt;br /&gt;
&lt;br /&gt;
	if not self._data then&lt;br /&gt;
		error(&amp;quot;The &amp;quot; .. (self._info.raw and &amp;quot;raw &amp;quot; or &amp;quot;&amp;quot;) .. &amp;quot;label \&amp;quot;&amp;quot; .. self._info.label .. &amp;quot;\&amp;quot; does not exist&amp;quot; .. self:get_originating_info() .. &amp;quot;.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
export.new = Category.new&lt;br /&gt;
export.new_main = Category.new_main&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:initCommon()&lt;br /&gt;
	local args_handled = false&lt;br /&gt;
	if self._info.raw then&lt;br /&gt;
		-- Check if the category exists&lt;br /&gt;
		local raw_categories = lang_independent_data[&amp;quot;RAW_CATEGORIES&amp;quot;]&lt;br /&gt;
		self._data = raw_categories[self._info.label]&lt;br /&gt;
&lt;br /&gt;
		if self._data then&lt;br /&gt;
			if self._data.lang then&lt;br /&gt;
				self._lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(self._data.lang, true, nil, nil, true)&lt;br /&gt;
				self._info.code = self._lang:getCode()&lt;br /&gt;
			end&lt;br /&gt;
			if self._data.sc then&lt;br /&gt;
				self._sc = require(&amp;quot;Module:scripts&amp;quot;).getByCode(self._data.sc, true, nil, true)&lt;br /&gt;
				self._info.sc = self._sc:getCode()&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- Go through raw handlers&lt;br /&gt;
			local data = {&lt;br /&gt;
				category = self._info.label,&lt;br /&gt;
				args = self._info.args or {},&lt;br /&gt;
				called_from_inside = self._info.called_from_inside,&lt;br /&gt;
			}&lt;br /&gt;
			for _, handler in ipairs(lang_independent_data[&amp;quot;RAW_HANDLERS&amp;quot;]) do&lt;br /&gt;
				self._data, args_handled = handler.handler(data)&lt;br /&gt;
				if self._data then&lt;br /&gt;
					self._data.module = self._data.module or handler.module&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if self._data then	&lt;br /&gt;
				if self._data.lang then&lt;br /&gt;
					if type(self._data.lang) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
						error(&amp;quot;Received non-string value &amp;quot; .. mw.dumpObject(self._data.lang) .. &amp;quot; for self._data.lang, label \&amp;quot;&amp;quot; .. self._info.label .. &amp;quot;\&amp;quot;&amp;quot; .. self:get_originating_info() .. &amp;quot;.&amp;quot;)&lt;br /&gt;
					end&lt;br /&gt;
					self._lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(self._data.lang, true, nil, nil, true)&lt;br /&gt;
					self._info.code = self._lang:getCode()&lt;br /&gt;
				end&lt;br /&gt;
				if self._data.sc then&lt;br /&gt;
					if type(self._data.sc) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
						error(&amp;quot;Received non-string value &amp;quot; .. mw.dumpObject(self._data.sc) .. &amp;quot; for self._data.sc, label \&amp;quot;&amp;quot; .. self._info.label .. &amp;quot;\&amp;quot;&amp;quot; .. self:get_originating_info() .. &amp;quot;.&amp;quot;)&lt;br /&gt;
					end&lt;br /&gt;
					self._sc = require(&amp;quot;Module:scripts&amp;quot;).getByCode(self._data.sc, true, nil, true)&lt;br /&gt;
					self._info.sc = self._sc:getCode()&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Already parsed into language + label&lt;br /&gt;
		if self._info.code then&lt;br /&gt;
			self._lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(self._info.code, 1, nil, nil, true)&lt;br /&gt;
		else&lt;br /&gt;
			self._lang = nil&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if self._info.sc then&lt;br /&gt;
			self._sc = require(&amp;quot;Module:scripts&amp;quot;).getByCode(self._info.sc, true, nil, true) or error(&amp;quot;The script code \&amp;quot;&amp;quot; .. self._info.sc .. &amp;quot;\&amp;quot; is not valid.&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			self._sc = nil&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- First, check lang-specific labels and handlers if this is not an umbrella category.&lt;br /&gt;
		if self._lang then&lt;br /&gt;
			local langcode = self._lang:getCode()&lt;br /&gt;
			local langs_with_modules = mw.loadData(lang_specific_module)&lt;br /&gt;
			if langs_with_modules[langcode] then&lt;br /&gt;
				local module = lang_specific_module_prefix .. self._lang:getCode()&lt;br /&gt;
				local labels_and_handlers = require(module)&lt;br /&gt;
				if labels_and_handlers.LABELS then&lt;br /&gt;
					self._data = labels_and_handlers.LABELS[self._info.label]&lt;br /&gt;
					if self._data then&lt;br /&gt;
						if self._data.umbrella == nil and self._data.umbrella_parents == nil then&lt;br /&gt;
							self._data.umbrella = false&lt;br /&gt;
						end&lt;br /&gt;
						self._data.module = self._data.module or module&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if not self._data and labels_and_handlers.HANDLERS then&lt;br /&gt;
					for _, handler in ipairs(labels_and_handlers.HANDLERS) do&lt;br /&gt;
						local data = {&lt;br /&gt;
							label = self._info.label,&lt;br /&gt;
							lang = self._lang,&lt;br /&gt;
							sc = self._sc,&lt;br /&gt;
							args = self._info.args or {},&lt;br /&gt;
							called_from_inside = self._info.called_from_inside,&lt;br /&gt;
						}&lt;br /&gt;
						self._data, args_handled = handler(data)&lt;br /&gt;
						if self._data then&lt;br /&gt;
							if self._data.umbrella == nil and self._data.umbrella_parents == nil then&lt;br /&gt;
								self._data.umbrella = false&lt;br /&gt;
							end&lt;br /&gt;
							self._data.module = self._data.module or module&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Then check lang-independent labels.&lt;br /&gt;
		if not self._data then&lt;br /&gt;
			local labels = lang_independent_data[&amp;quot;LABELS&amp;quot;]&lt;br /&gt;
			self._data = labels[self._info.label]&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Then check lang-independent handlers.&lt;br /&gt;
		if not self._data then&lt;br /&gt;
			local data = {&lt;br /&gt;
				label = self._info.label,&lt;br /&gt;
				lang = self._lang,&lt;br /&gt;
				sc = self._sc,&lt;br /&gt;
				args = self._info.args or {},&lt;br /&gt;
				called_from_inside = self._info.called_from_inside,&lt;br /&gt;
			}&lt;br /&gt;
			for _, handler in ipairs(lang_independent_data[&amp;quot;HANDLERS&amp;quot;]) do&lt;br /&gt;
				self._data, args_handled = handler.handler(data)&lt;br /&gt;
				if self._data then&lt;br /&gt;
					self._data.module = self._data.module or handler.module&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 args_handled and self._data and self._info.args and next(self._info.args) then&lt;br /&gt;
		local module_text = &amp;quot; (handled in [[&amp;quot; .. (self._data.module or &amp;quot;UNKNOWN&amp;quot;).. &amp;quot;]])&amp;quot;&lt;br /&gt;
		local args_text = {}&lt;br /&gt;
		for k, v in pairs(self._info.args) do&lt;br /&gt;
			table.insert(args_text, k .. &amp;quot;=&amp;quot; .. ((type(v) == &amp;quot;string&amp;quot; or type(v) == &amp;quot;number&amp;quot;) and v or mw.dumpObject(v)))&lt;br /&gt;
		end&lt;br /&gt;
		error(&amp;quot;poscatboiler label &amp;#039;&amp;quot; .. self._info.label .. &amp;quot;&amp;#039; &amp;quot; .. module_text .. &amp;quot; doesn&amp;#039;t accept extra args &amp;quot; ..&lt;br /&gt;
			table.concat(args_text, &amp;quot;, &amp;quot;))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if self._sc and not self._lang then&lt;br /&gt;
		error(&amp;quot;Umbrella categories cannot have a script specified.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:convert_spec_to_string(desc)&lt;br /&gt;
	if not desc then&lt;br /&gt;
		return desc&lt;br /&gt;
	end&lt;br /&gt;
	if type(desc) == &amp;quot;number&amp;quot; then&lt;br /&gt;
		desc = tostring(desc)&lt;br /&gt;
	end&lt;br /&gt;
	if type(desc) == &amp;quot;function&amp;quot; then&lt;br /&gt;
		local data = {&lt;br /&gt;
			lang = self._lang,&lt;br /&gt;
			sc = self._sc,&lt;br /&gt;
			label = self._info.label,&lt;br /&gt;
			raw = self._info.raw,&lt;br /&gt;
		}&lt;br /&gt;
		desc = desc(data)&lt;br /&gt;
	end&lt;br /&gt;
	return desc&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:substitute_template_specs(desc)&lt;br /&gt;
	if not desc then&lt;br /&gt;
		return desc&lt;br /&gt;
	end&lt;br /&gt;
	-- This may end up happening twice but that&amp;#039;s OK as the function is idempotent.&lt;br /&gt;
	desc = self:convert_spec_to_string(desc)&lt;br /&gt;
&lt;br /&gt;
	desc = desc:gsub(&amp;quot;{{PAGENAME}}&amp;quot;, mw.title.getCurrentTitle().text)&lt;br /&gt;
	desc = desc:gsub(&amp;quot;{{{umbrella_msg}}}&amp;quot;, &amp;quot;This is an umbrella category. It contains no dictionary entries, but only other, language-specific categories, which in turn contain relevant terms in a given language.&amp;quot;)&lt;br /&gt;
	desc = desc:gsub(&amp;quot;{{{umbrella_meta_msg}}}&amp;quot;, &amp;#039;This is an umbrella metacategory, covering a general area such as &amp;quot;lemmas&amp;quot;, &amp;quot;names&amp;quot; or &amp;quot;terms by etymology&amp;quot;. It contains no dictionary entries, but holds only umbrella (&amp;quot;by language&amp;quot;) categories covering specific subtopics, which in turn contain language-specific categories holding terms in a given language for that same topic.&amp;#039;)&lt;br /&gt;
	if self._lang then&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{langname}}}&amp;quot;, self._lang:getCanonicalName())&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{langcode}}}&amp;quot;, self._lang:getCode())&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{langcat}}}&amp;quot;, self._lang:getCategoryName())&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{langlink}}}&amp;quot;, self._lang:makeCategoryLink())&lt;br /&gt;
	end&lt;br /&gt;
	if self._sc then&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{scname}}}&amp;quot;, self._sc:getCanonicalName())&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{sccode}}}&amp;quot;, self._sc:getCode())&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{sccat}}}&amp;quot;, self._sc:getCategoryName())&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{scdisp}}}&amp;quot;, self._sc:getDisplayForm())&lt;br /&gt;
		desc = desc:gsub(&amp;quot;{{{sclink}}}&amp;quot;, self._sc:makeCategoryLink())&lt;br /&gt;
	end&lt;br /&gt;
	if desc:find(&amp;quot;{&amp;quot;) then&lt;br /&gt;
		desc = mw.getCurrentFrame():preprocess(desc)&lt;br /&gt;
	end&lt;br /&gt;
	return desc&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:substitute_template_specs_in_args(args)&lt;br /&gt;
	if not args then&lt;br /&gt;
		return args&lt;br /&gt;
	end&lt;br /&gt;
	local pinfo = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = self:substitute_template_specs(k)&lt;br /&gt;
		v = self:substitute_template_specs(v)&lt;br /&gt;
		pinfo[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return pinfo&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:make_new(info)&lt;br /&gt;
	info.originating_label = self._info.label&lt;br /&gt;
	info.originating_module = self._data.module&lt;br /&gt;
	info.called_from_inside = true&lt;br /&gt;
	return Category.new(info)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getBreadcrumbName()&lt;br /&gt;
	local ret&lt;br /&gt;
&lt;br /&gt;
	if self._lang or self._info.raw then&lt;br /&gt;
		ret = self._data.breadcrumb&lt;br /&gt;
	else&lt;br /&gt;
		ret = self._data.umbrella and self._data.umbrella.breadcrumb&lt;br /&gt;
	end&lt;br /&gt;
	if not ret then&lt;br /&gt;
		ret = self._info.label&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if type(ret) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
		ret = {name = ret}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local name = self:substitute_template_specs(ret.name)&lt;br /&gt;
	local nocap = ret.nocap&lt;br /&gt;
&lt;br /&gt;
	if self._sc then&lt;br /&gt;
		name = name .. &amp;quot; in &amp;quot; .. self._sc:getDisplayForm()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return name, nocap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getTOC(toc_type)&lt;br /&gt;
	local ret&lt;br /&gt;
&lt;br /&gt;
	-- type &amp;quot;none&amp;quot; means everything fits on a single page; fall back to normal behavior (display nothing)&lt;br /&gt;
	if toc_type == &amp;quot;none&amp;quot; then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Return the textual expansion of the first existing template among the given templates, first performing&lt;br /&gt;
	-- substitutions on the template name such as replacing {{{langcode}}} with the current language&amp;#039;s code (if any).&lt;br /&gt;
	-- If no templates exist after expansion, or if nil is passed in, return nil. If a single string is passed in,&lt;br /&gt;
	-- treat it like a one-element list consisting of that string.&lt;br /&gt;
	local function get_template_text(templates)&lt;br /&gt;
		if templates == nil then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		if type(templates) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
			templates = {templates}&lt;br /&gt;
		end&lt;br /&gt;
		for _, template in ipairs(templates) do&lt;br /&gt;
			if template == false then&lt;br /&gt;
				return false&lt;br /&gt;
			end&lt;br /&gt;
			template = self:substitute_template_specs(template)&lt;br /&gt;
			local template_obj = mw.title.new(&amp;quot;Template:&amp;quot; .. template)&lt;br /&gt;
			if template_obj.exists then&lt;br /&gt;
				return mw.getCurrentFrame():expandTemplate{title = template_obj.text, args = {}}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local templates, fallback_templates&lt;br /&gt;
&lt;br /&gt;
	-- If TOC type is &amp;quot;full&amp;quot; (more than 2500 entries), do the following, in order:&lt;br /&gt;
	-- 1. look up and expand the `toc_template_full` templates (normal or umbrella, depending on whether there is&lt;br /&gt;
	--    a current language);&lt;br /&gt;
	-- 2. look up and expand the `toc_template` templates (normal or umbrella, as above);&lt;br /&gt;
	-- 3. do the default behavior, which is as follows:&lt;br /&gt;
	-- 3a. look up a language-specific &amp;quot;full&amp;quot; template according to the current language (using English if there&lt;br /&gt;
	--     is no current language);&lt;br /&gt;
	-- 3b. look up a language-specific &amp;quot;normal&amp;quot; template according to the current language (using English if there&lt;br /&gt;
	--     is no current language);&lt;br /&gt;
	-- 3c. display nothing.&lt;br /&gt;
	--&lt;br /&gt;
	-- If TOC type is &amp;quot;normal&amp;quot; (between 200 and 2500 entries), do the following, in order:&lt;br /&gt;
	-- 1. look up and expand the `toc_template` templates (normal or umbrella, depending on whether there is&lt;br /&gt;
	--    a current language);&lt;br /&gt;
	-- 2. do the default behavior, which is as follows:&lt;br /&gt;
	-- 2a. look up a language-specific &amp;quot;normal&amp;quot; template according to the current language (using English if there&lt;br /&gt;
	--     is no current language);&lt;br /&gt;
	-- 2b. display nothing.&lt;br /&gt;
&lt;br /&gt;
	local data_source&lt;br /&gt;
	if self._lang or self._info.raw then&lt;br /&gt;
		data_source = self._data&lt;br /&gt;
	else&lt;br /&gt;
		data_source = self._data.umbrella&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if data_source then&lt;br /&gt;
		if toc_type == &amp;quot;full&amp;quot; then&lt;br /&gt;
			templates = data_source.toc_template_full&lt;br /&gt;
			fallback_templates = data_source.toc_template&lt;br /&gt;
		else&lt;br /&gt;
			templates = data_source.toc_template&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local text = get_template_text(templates)&lt;br /&gt;
	if text then&lt;br /&gt;
		return text&lt;br /&gt;
	end&lt;br /&gt;
	if text == false then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	text = get_template_text(fallback_templates)&lt;br /&gt;
	if text then&lt;br /&gt;
		return text&lt;br /&gt;
	end&lt;br /&gt;
	if text == false then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getInfo()&lt;br /&gt;
	return self._info&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getDataModule()&lt;br /&gt;
	return self._data.module&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:canBeEmpty()&lt;br /&gt;
	if self._lang or self._info.raw then&lt;br /&gt;
		return self._data.can_be_empty&lt;br /&gt;
	else&lt;br /&gt;
		return self._data.umbrella and self._data.umbrella.can_be_empty&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:isHidden()&lt;br /&gt;
	if self._lang or self._info.raw then&lt;br /&gt;
		return self._data.hidden&lt;br /&gt;
	else&lt;br /&gt;
		return self._data.umbrella and self._data.umbrella.hidden&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getCategoryName()&lt;br /&gt;
	if self._info.raw then&lt;br /&gt;
		return self._info.label&lt;br /&gt;
	elseif self._lang then&lt;br /&gt;
		local ret = self._lang:getCanonicalName() .. &amp;quot; &amp;quot; .. self._info.label&lt;br /&gt;
&lt;br /&gt;
		if self._sc then&lt;br /&gt;
			ret = ret .. &amp;quot; in &amp;quot; .. self._sc:getDisplayForm()&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return mw.getContentLanguage():ucfirst(ret)&lt;br /&gt;
	else&lt;br /&gt;
		local ret = mw.getContentLanguage():ucfirst(self._info.label)&lt;br /&gt;
		if not (self._data.umbrella and self._data.umbrella.no_by_language) then&lt;br /&gt;
			ret = ret .. &amp;quot; by language&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getIntro()&lt;br /&gt;
	if self._lang or self._info.raw then&lt;br /&gt;
		return self:substitute_template_specs(self._data.intro)&lt;br /&gt;
	else&lt;br /&gt;
		return self._data.umbrella and self:substitute_template_specs(self._data.umbrella.intro)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function remove_lang_params(desc)&lt;br /&gt;
	desc = desc:gsub(&amp;quot;{{{langname}}} &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	desc = desc:gsub(&amp;quot;{{{langcode}}} &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	desc = desc:gsub(&amp;quot;{{{langcat}}} &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	return desc&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Category:getDescription(isChild)&lt;br /&gt;
	-- Allows different text in the list of a category&amp;#039;s children&lt;br /&gt;
	local isChild = isChild == &amp;quot;child&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	local function display_title(displaytitle, lang)&lt;br /&gt;
		if type(displaytitle) == &amp;quot;string&amp;quot; then&lt;br /&gt;
			displaytitle = self:substitute_template_specs(displaytitle)&lt;br /&gt;
		else&lt;br /&gt;
			displaytitle = displaytitle(self:getCategoryName(), lang)&lt;br /&gt;
		end&lt;br /&gt;
		mw.getCurrentFrame():callParserFunction(&amp;quot;DISPLAYTITLE&amp;quot;, &amp;quot;Category:&amp;quot; .. displaytitle)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if self._lang or self._info.raw then&lt;br /&gt;
		if not isChild and self._data.displaytitle then&lt;br /&gt;
			display_title(self._data.displaytitle, self._lang)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if self._sc then&lt;br /&gt;
			return self:getCategoryName() .. &amp;quot;.&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			local desc = self:convert_spec_to_string(self._data.description)&lt;br /&gt;
&lt;br /&gt;
			if not isChild and desc and self._data.additional then&lt;br /&gt;
				desc = desc .. &amp;quot;\n\n&amp;quot; .. self._data.additional&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			return self:substitute_template_specs(desc)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if not isChild and self._data.umbrella and self._data.umbrella.displaytitle then&lt;br /&gt;
			display_title(self._data.umbrella.displaytitle, nil)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local desc = self:convert_spec_to_string(self._data.umbrella and self._data.umbrella.description)&lt;br /&gt;
		local has_umbrella_desc = not not desc&lt;br /&gt;
		if not desc then&lt;br /&gt;
			desc = self:convert_spec_to_string(self._data.description)&lt;br /&gt;
			if desc then&lt;br /&gt;
				desc = remove_lang_params(desc)&lt;br /&gt;
				desc = mw.getContentLanguage():lcfirst(desc)&lt;br /&gt;
				desc = desc:gsub(&amp;quot;%.$&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
				desc = &amp;quot;Categories with &amp;quot; .. desc .. &amp;quot;.&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if not desc then&lt;br /&gt;
			desc = &amp;quot;Categories with &amp;quot; .. self._info.label .. &amp;quot; in various specific languages.&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		if not isChild then&lt;br /&gt;
			local additional = self:convert_spec_to_string(&lt;br /&gt;
				self._data.umbrella and self._data.umbrella.additional or not has_umbrella_desc and self._data.additional&lt;br /&gt;
			)&lt;br /&gt;
			if additional then&lt;br /&gt;
				desc = desc .. &amp;quot;\n\n&amp;quot; .. remove_lang_params(additional)&lt;br /&gt;
			end&lt;br /&gt;
			desc = desc .. &amp;quot;\n\n{{{umbrella_msg}}}&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		desc = self:substitute_template_specs(desc)&lt;br /&gt;
		return desc&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:canonicalize_parents_children(cats, is_children)&lt;br /&gt;
	if not cats then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if type(cats) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
		cats = {cats}&lt;br /&gt;
	end&lt;br /&gt;
	if cats.name or cats.module then&lt;br /&gt;
		cats = {cats}&lt;br /&gt;
	end&lt;br /&gt;
	if #cats == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ret = {}&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(cats) do&lt;br /&gt;
		if type(cat) ~= &amp;quot;table&amp;quot; or not cat.name and not cat.module then&lt;br /&gt;
			cat = {name = cat}&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(ret, cat)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local is_umbrella = not self._lang and not self._info.raw&lt;br /&gt;
	local table_type = is_children and &amp;quot;extra_children&amp;quot; or &amp;quot;parents&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	for i, cat in ipairs(ret) do&lt;br /&gt;
		local sort_key = self:substitute_template_specs(cat.sort)&lt;br /&gt;
&lt;br /&gt;
		local name = cat.name&lt;br /&gt;
&lt;br /&gt;
		if cat.module then&lt;br /&gt;
			-- A reference to a category using another category tree module.&lt;br /&gt;
			if not cat.args then&lt;br /&gt;
				error(&amp;quot;Missing .args in &amp;#039;&amp;quot; .. table_type .. &amp;quot;&amp;#039; table with module=\&amp;quot;&amp;quot; .. cat.module .. &amp;quot;\&amp;quot; for &amp;#039;&amp;quot; ..&lt;br /&gt;
					self._info.label .. &amp;quot;&amp;#039; category entry in module &amp;#039;&amp;quot; .. (self._data.module or &amp;quot;unknown&amp;quot;) .. &amp;quot;&amp;#039;&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			name = require(&amp;quot;Module:category tree/&amp;quot; .. cat.module).new(self:substitute_template_specs_in_args(cat.args))&lt;br /&gt;
		else&lt;br /&gt;
			if not name then&lt;br /&gt;
				error(&amp;quot;Missing .name in &amp;quot; .. (is_umbrella and &amp;quot;umbrella &amp;quot; or &amp;quot;&amp;quot;) .. &amp;quot;&amp;#039;&amp;quot; .. table_type .. &amp;quot;&amp;#039; table for &amp;#039;&amp;quot; ..&lt;br /&gt;
					self._info.label .. &amp;quot;&amp;#039; category entry in module &amp;#039;&amp;quot; .. (self._data.module or &amp;quot;unknown&amp;quot;) .. &amp;quot;&amp;#039;&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			if type(name) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
				-- assume it&amp;#039;s a category object and use it directly&lt;br /&gt;
			else&lt;br /&gt;
				name = self:substitute_template_specs(name)&lt;br /&gt;
				if name:find(&amp;quot;^Category:&amp;quot;) then&lt;br /&gt;
					-- It&amp;#039;s a non-poscatboiler category name.&lt;br /&gt;
					sort_key = sort_key or is_children and name:gsub(&amp;quot;^Category:&amp;quot;, &amp;quot;&amp;quot;) or self:getCategoryName()&lt;br /&gt;
				else&lt;br /&gt;
					-- It&amp;#039;s a label.&lt;br /&gt;
					local raw&lt;br /&gt;
					if self._info.raw or is_umbrella then&lt;br /&gt;
						raw = not cat.is_label&lt;br /&gt;
					else&lt;br /&gt;
						raw = cat.raw&lt;br /&gt;
					end&lt;br /&gt;
					local cat_code&lt;br /&gt;
					if cat.lang == false then&lt;br /&gt;
						cat_code = nil&lt;br /&gt;
					elseif cat.lang then&lt;br /&gt;
						cat_code = self:substitute_template_specs(cat.lang)&lt;br /&gt;
					elseif not raw then&lt;br /&gt;
						cat_code = self._info.code&lt;br /&gt;
					end&lt;br /&gt;
					sort_key = sort_key or is_children and name or self._info.label&lt;br /&gt;
					name = self:make_new({&lt;br /&gt;
						label = name, code = cat_code, sc = self:substitute_template_specs(cat.sc),&lt;br /&gt;
						raw = raw, args = self:substitute_template_specs_in_args(cat.args)&lt;br /&gt;
					})&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		sort_key = mw.ustring.upper(sort_key or is_children and &amp;quot; &amp;quot; or self._info.label)&lt;br /&gt;
		local description = is_children and self:substitute_template_specs(cat.description) or nil&lt;br /&gt;
		ret[i] = {name = name, description = description, sort = sort_key}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getParents()&lt;br /&gt;
	local is_umbrella = not self._lang and not self._info.raw&lt;br /&gt;
	local retval&lt;br /&gt;
	if self._sc then&lt;br /&gt;
		local parent1 = self:make_new({code = self._info.code, label = &amp;quot;terms in &amp;quot; .. self._sc:getCanonicalName() .. &amp;quot; script&amp;quot;})&lt;br /&gt;
		local parent2 = self:make_new({code = self._info.code, label = self._info.label, raw = self._info.raw, args = self._info.args})&lt;br /&gt;
&lt;br /&gt;
		retval = {&lt;br /&gt;
			{name = parent1, sort = self._sc:getCanonicalName()},&lt;br /&gt;
			{name = parent2, sort = self._sc:getCanonicalName()},&lt;br /&gt;
		}&lt;br /&gt;
	else&lt;br /&gt;
		local parents&lt;br /&gt;
		if is_umbrella then&lt;br /&gt;
			parents = self._data.umbrella and self._data.umbrella.parents or self._data.umbrella_parents&lt;br /&gt;
		else&lt;br /&gt;
			parents = self._data.parents&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		retval = self:canonicalize_parents_children(parents)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not retval then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local self_cat = self:getCategoryName()&lt;br /&gt;
	for _, parent in ipairs(retval) do&lt;br /&gt;
		local parent_cat = parent.name.getCategoryName and parent.name:getCategoryName()&lt;br /&gt;
		if self_cat == parent_cat then&lt;br /&gt;
			error((&amp;quot;Internal error: Infinite loop would occur, as parent category &amp;#039;%s&amp;#039; is the same as the child category&amp;quot;):&lt;br /&gt;
				format(self_cat))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getTopicParents()&lt;br /&gt;
	if self._data[&amp;quot;topic_parents&amp;quot;] then&lt;br /&gt;
		local topic_parents = {}&lt;br /&gt;
		for _, topic_parent in ipairs(self._data[&amp;quot;topic_parents&amp;quot;]) do&lt;br /&gt;
			if self._lang then&lt;br /&gt;
				table.insert(topic_parents, self._lang:getCode() .. &amp;quot;:&amp;quot; .. topic_parent)&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(topic_parents, topic_parent)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return topic_parents&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getChildren()&lt;br /&gt;
	local is_umbrella = not self._lang and not self._info.raw&lt;br /&gt;
	local children = self._data.children&lt;br /&gt;
&lt;br /&gt;
	local ret = {}&lt;br /&gt;
&lt;br /&gt;
	if not is_umbrella and children then&lt;br /&gt;
		for _, child in ipairs(children) do&lt;br /&gt;
			child = mw.clone(child)&lt;br /&gt;
&lt;br /&gt;
			if type(child) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
				child = {name = child}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if not child.sort then&lt;br /&gt;
				child.sort = child.name&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- FIXME, is preserving the script correct?&lt;br /&gt;
			child.name = self:make_new({code = self._info.code, label = child.name, raw = child.raw, sc = self._info.sc})&lt;br /&gt;
&lt;br /&gt;
			table.insert(ret, child)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local extra_children&lt;br /&gt;
	if is_umbrella then&lt;br /&gt;
		extra_children = self._data.umbrella and self._data.umbrella.extra_children&lt;br /&gt;
	else&lt;br /&gt;
		extra_children = self._data.extra_children&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	extra_children = self:canonicalize_parents_children(extra_children, &amp;quot;children&amp;quot;)&lt;br /&gt;
	if extra_children then&lt;br /&gt;
		for _, child in ipairs(extra_children) do&lt;br /&gt;
			table.insert(ret, child)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #ret == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getUmbrella()&lt;br /&gt;
	if self._info.raw or not self._lang or self._sc or self._data.umbrella == false then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return self:make_new({label = self._info.label})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getAppendix()&lt;br /&gt;
	-- FIXME, this should be customizable.&lt;br /&gt;
	if not self._info.raw and self._info.label and self._lang then&lt;br /&gt;
		local appendixName = &amp;quot;Appendix:&amp;quot; .. self._lang:getCanonicalName() .. &amp;quot; &amp;quot; .. self._info.label&lt;br /&gt;
		local appendix = mw.title.new(appendixName).exists&lt;br /&gt;
		if appendix then&lt;br /&gt;
			return appendixName&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getCatfixInfo()&lt;br /&gt;
	if self._lang or self._info.raw then&lt;br /&gt;
		if self._data.catfix == false then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local lang, sc&lt;br /&gt;
		if self._data.catfix then&lt;br /&gt;
			lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(self:substitute_template_specs(self._data.catfix), true, nil, nil, true)&lt;br /&gt;
		else&lt;br /&gt;
			lang = self._lang&lt;br /&gt;
		end&lt;br /&gt;
		if self._data.catfix_sc then&lt;br /&gt;
			sc = require(&amp;quot;Module:scripts&amp;quot;).getByCode(self:substitute_template_specs(self._data.catfix_sc), true, nil, true)&lt;br /&gt;
		else&lt;br /&gt;
			sc = self._sc&lt;br /&gt;
		end&lt;br /&gt;
		return lang, sc&lt;br /&gt;
	else -- umbrella&lt;br /&gt;
		if not self._data.umbrella or not self._data.umbrella.catfix then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(self:substitute_template_specs(self._data.umbrella.catfix), true, nil, nil, true)&lt;br /&gt;
		local sc = self:substitute_template_specs(self._data.umbrella.catfix_sc)&lt;br /&gt;
		if sc then&lt;br /&gt;
			sc = require(&amp;quot;Module:scripts&amp;quot;).getByCode(sc, true, nil, true)&lt;br /&gt;
		end&lt;br /&gt;
		return lang, sc&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getTOCTemplateName()&lt;br /&gt;
	local lang, sc = self:getCatfixInfo()&lt;br /&gt;
	local code = lang and lang:getCode() or &amp;quot;en&amp;quot;&lt;br /&gt;
	return &amp;quot;Template:&amp;quot; .. code .. &amp;quot;-&amp;quot; .. (self._data.toctemplateprefix or &amp;quot;&amp;quot;) .. &amp;quot;categoryTOC&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Category:getDisplay()&lt;br /&gt;
	if self._data[&amp;quot;display&amp;quot;] then&lt;br /&gt;
		if self._lang then&lt;br /&gt;
			return self._lang:getCanonicalName() .. &amp;quot; &amp;quot; .. self._data[&amp;quot;display&amp;quot;]&lt;br /&gt;
		else&lt;br /&gt;
			return mw.getContentLanguage():ucfirst(self._data[&amp;quot;display&amp;quot;]) .. &amp;quot; by language&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Category:getDisplay2()&lt;br /&gt;
	if self._data[&amp;quot;display&amp;quot;] then&lt;br /&gt;
		if self._lang then&lt;br /&gt;
			return mw.getContentLanguage():ucfirst(self._data[&amp;quot;display&amp;quot;])&lt;br /&gt;
		else&lt;br /&gt;
			return mw.getContentLanguage():ucfirst(self._data[&amp;quot;display&amp;quot;]) .. &amp;quot; by language&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Category:getSort()&lt;br /&gt;
	return self._data[&amp;quot;sort&amp;quot;]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:51 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/poscatboiler</comments>
		</item>
		<item>
			<title>Module:Category tree/data</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree/data&amp;diff=63&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree/data&amp;diff=63&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree/data&quot; title=&quot;Module:Category tree/data&quot;&gt;Module:Category tree/data&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local data = {&lt;br /&gt;
	&amp;quot;All language families&amp;quot;,&lt;br /&gt;
	&amp;quot;All languages&amp;quot;,&lt;br /&gt;
	&amp;quot;All scripts&amp;quot;,&lt;br /&gt;
	&amp;quot;Categories only containing subcategories&amp;quot;,&lt;br /&gt;
	&amp;quot;Character boxes&amp;quot;,&lt;br /&gt;
	&amp;quot;Characters by script&amp;quot;,&lt;br /&gt;
	&amp;quot;Entries with audio examples&amp;quot;,&lt;br /&gt;
	&amp;quot;Entries with redirects&amp;quot;,&lt;br /&gt;
	&amp;quot;Entry maintenance by language&amp;quot;,&lt;br /&gt;
	&amp;quot;Figures of speech by language&amp;quot;,&lt;br /&gt;
	&amp;quot;Gestures&amp;quot;,&lt;br /&gt;
	&amp;quot;Lemmas by language&amp;quot;,&lt;br /&gt;
	&amp;quot;Letters&amp;quot;,&lt;br /&gt;
	&amp;quot;Lists&amp;quot;,&lt;br /&gt;
	&amp;quot;Non-lemma forms by language&amp;quot;,&lt;br /&gt;
	&amp;quot;Phrasebooks by language&amp;quot;,&lt;br /&gt;
	&amp;quot;Protologisms&amp;quot;,&lt;br /&gt;
	&amp;quot;Regionalisms&amp;quot;,&lt;br /&gt;
	&amp;quot;Rhymes by language&amp;quot;,&lt;br /&gt;
	&amp;quot;Sentences by language&amp;quot;,&lt;br /&gt;
	&amp;quot;All sets&amp;quot;,&lt;br /&gt;
	&amp;quot;Shortenings by language&amp;quot;,&lt;br /&gt;
	&amp;quot;Symbols by language&amp;quot;,&lt;br /&gt;
	&amp;quot;Synchronized entries by language&amp;quot;,&lt;br /&gt;
	&amp;quot;Terms by etymology by language&amp;quot;,&lt;br /&gt;
	&amp;quot;Terms by lexical property by language&amp;quot;,&lt;br /&gt;
	&amp;quot;Terms by semantic function by language&amp;quot;,&lt;br /&gt;
	&amp;quot;Terms by usage by language&amp;quot;,&lt;br /&gt;
	&amp;quot;All topics&amp;quot;,&lt;br /&gt;
	&amp;quot;Unicode blocks&amp;quot;,&lt;br /&gt;
	&amp;quot;Unsupported titles&amp;quot;,&lt;br /&gt;
	&amp;quot;Wiktionary&amp;quot;,&lt;br /&gt;
	&amp;quot;Wiktionary pages that don&amp;#039;t exist&amp;quot;,&lt;br /&gt;
	&amp;quot;Wiktionary-namespace discussion pages&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for i, category in ipairs(data) do&lt;br /&gt;
	data[i] = nil&lt;br /&gt;
	data[&amp;quot;Category:&amp;quot; .. category] = true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return data&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:50 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree/data</comments>
		</item>
		<item>
			<title>Module:Category tree</title>
			<link>https://test.st34an.tech/index.php?title=Module:Category_tree&amp;diff=61&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Category_tree&amp;diff=61&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Category_tree&quot; title=&quot;Module:Category tree&quot;&gt;Module:Category tree&lt;/a&gt; by file upload (1 revision)&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;
local m_utilities = require(&amp;quot;Module:utilities&amp;quot;)&lt;br /&gt;
local inFundamental = mw.loadData(&amp;quot;Module:category tree/data&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local show_error, check_name, link_box, show_catfix, show_categories, show_intro, show_editlink, show_pagelist,&lt;br /&gt;
	show_display, show_breadcrumbs, show_description, show_appendix, show_children, show_TOC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- The main entry point.&lt;br /&gt;
-- This is the only function that can be invoked from a template.&lt;br /&gt;
function export.show(frame)&lt;br /&gt;
	local template = frame.args[&amp;quot;template&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	if not template or template == &amp;quot;&amp;quot; then&lt;br /&gt;
		error(&amp;quot;The \&amp;quot;template\&amp;quot; parameter was not specified.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if mw.title.getCurrentTitle().nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
		local text = {}&lt;br /&gt;
		table.insert(text, &amp;quot;This template should be used on pages in the Category: namespace, &amp;quot;)&lt;br /&gt;
		table.insert(text, &amp;quot;and automatically generates descriptions and categorization for categories of a recognized type (see below).&amp;quot;)&lt;br /&gt;
		table.insert(text, &amp;quot; It is implemented by [[Module:category tree]] and its submodule [[Module:category tree/&amp;quot;)&lt;br /&gt;
		table.insert(text, template .. &amp;quot;]].&amp;quot;)&lt;br /&gt;
		if frame.args[&amp;quot;useautocat&amp;quot;] then&lt;br /&gt;
			table.insert(text, &amp;quot; It is preferable not to invoke this template directly, but to simply use &amp;quot;)&lt;br /&gt;
			table.insert(text, require(&amp;quot;Module:template link&amp;quot;).format_link({&amp;quot;auto cat&amp;quot;}))&lt;br /&gt;
			table.insert(text, &amp;quot; (with no parameters), which will automatically invoke this template on appropriately-named category pages.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		return table.concat(text)&lt;br /&gt;
	elseif mw.title.getCurrentTitle().nsText ~= &amp;quot;Category&amp;quot; then&lt;br /&gt;
		error(&amp;quot;This template/module can only be used on pages in the Category: namespace.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local submodule = require(&amp;quot;Module:category tree/&amp;quot; .. template)&lt;br /&gt;
	&lt;br /&gt;
	-- Get all the parameters and the label data&lt;br /&gt;
	local current&lt;br /&gt;
	&lt;br /&gt;
	if submodule.new_main then&lt;br /&gt;
		current = submodule.new_main(frame)&lt;br /&gt;
	else&lt;br /&gt;
		local info = {}&lt;br /&gt;
		&lt;br /&gt;
		for key, val in pairs(frame.args) do&lt;br /&gt;
			if val ~= &amp;quot;&amp;quot; and key ~= &amp;quot;useautocat&amp;quot; then&lt;br /&gt;
				info[key] = val&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		info.template = nil&lt;br /&gt;
		current = submodule.new(info, true)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local functions = {&lt;br /&gt;
		&amp;quot;getBreadcrumbName&amp;quot;,&lt;br /&gt;
		&amp;quot;getDataModule&amp;quot;,&lt;br /&gt;
		&amp;quot;canBeEmpty&amp;quot;,&lt;br /&gt;
		&amp;quot;getDescription&amp;quot;,&lt;br /&gt;
		&amp;quot;getParents&amp;quot;,&lt;br /&gt;
		&amp;quot;getChildren&amp;quot;,&lt;br /&gt;
		&amp;quot;getUmbrella&amp;quot;,&lt;br /&gt;
		&amp;quot;getAppendix&amp;quot;,&lt;br /&gt;
		&amp;quot;getTOCTemplateName&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	if current then&lt;br /&gt;
		for i, functionName in pairs(functions) do&lt;br /&gt;
			if type(current[functionName]) ~= &amp;quot;function&amp;quot; then&lt;br /&gt;
				require(&amp;quot;Module:debug&amp;quot;).track{ &amp;quot;category tree/missing function&amp;quot;, &amp;quot;category tree/missing function/&amp;quot; .. functionName }&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local boxes = {}&lt;br /&gt;
	local display = {}&lt;br /&gt;
	local categories = {}&lt;br /&gt;
&lt;br /&gt;
	if template == &amp;quot;topic cat&amp;quot; then&lt;br /&gt;
		table.insert(categories, &amp;quot;[[Category:topic cat]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Check if the category is empty&lt;br /&gt;
	local isEmpty = mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, &amp;quot;all&amp;quot;) == 0&lt;br /&gt;
	&lt;br /&gt;
	-- Are the parameters valid?&lt;br /&gt;
	if not current then&lt;br /&gt;
		table.insert(categories, &amp;quot;[[Category:Categories with invalid label]]&amp;quot;)&lt;br /&gt;
		table.insert(categories, isEmpty and &amp;quot;[[Category:Empty categories]]&amp;quot; or nil)&lt;br /&gt;
		table.insert(display, show_error(&lt;br /&gt;
			&amp;quot;The label given to the &amp;quot; ..&lt;br /&gt;
			require(&amp;quot;Module:template link&amp;quot;).format_link{template} ..&lt;br /&gt;
			&amp;quot; template is not valid. You may have mistyped it, or it simply has not been created yet. &amp;quot; ..&lt;br /&gt;
			&amp;quot;To add a new label, please consult the documentation of the template.&amp;quot;))&lt;br /&gt;
		&lt;br /&gt;
		-- Exit here, as all code beyond here relies on current not being nil&lt;br /&gt;
		return table.concat(categories, &amp;quot;&amp;quot;) .. table.concat(display, &amp;quot;\n\n&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Does the category have the correct name?&lt;br /&gt;
	if mw.ustring.lower(mw.title.getCurrentTitle().text) ~= mw.ustring.lower(current:getCategoryName()) then&lt;br /&gt;
		table.insert(categories, &amp;quot;[[Category:Categories with incorrect name]]&amp;quot;)&lt;br /&gt;
		table.insert(display, show_error(&lt;br /&gt;
			&amp;quot;Based on the parameters given to the &amp;quot; ..&lt;br /&gt;
			require(&amp;quot;Module:template link&amp;quot;).format_link{template} ..&lt;br /&gt;
			&amp;quot; template, this category should be called &amp;#039;&amp;#039;&amp;#039;[[:Category:&amp;quot; .. current:getCategoryName() .. &amp;quot;]]&amp;#039;&amp;#039;&amp;#039;.&amp;quot;))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Add cleanup category for empty categories&lt;br /&gt;
	local canBeEmpty = current:canBeEmpty()&lt;br /&gt;
	if isEmpty and not canBeEmpty then&lt;br /&gt;
		table.insert(categories, &amp;quot;[[Category:Empty categories]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if current:isHidden() then&lt;br /&gt;
		table.insert(categories, &amp;quot;__HIDDENCAT__&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if canBeEmpty then&lt;br /&gt;
		table.insert(categories, &amp;quot; __EXPECTUNUSEDCATEGORY__&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.insert(boxes, show_intro(current))&lt;br /&gt;
	table.insert(boxes, show_editlink(current))&lt;br /&gt;
	table.insert(boxes, show_related_changes())&lt;br /&gt;
	table.insert(boxes, show_pagelist(current))&lt;br /&gt;
	&lt;br /&gt;
	-- Generate the displayed information&lt;br /&gt;
	table.insert(display, show_display(current))&lt;br /&gt;
	table.insert(display, show_breadcrumbs(current))&lt;br /&gt;
	table.insert(display, show_description(current))&lt;br /&gt;
	table.insert(display, show_appendix(current))&lt;br /&gt;
	table.insert(display, show_children(current))&lt;br /&gt;
	table.insert(display, show_TOC(current))&lt;br /&gt;
	table.insert(display, show_catfix(current))&lt;br /&gt;
	&lt;br /&gt;
	show_categories(current, categories)&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(boxes, &amp;quot;\n&amp;quot;) .. &amp;quot;\n&amp;quot; .. table.concat(display, &amp;quot;\n\n&amp;quot;) .. table.concat(categories, &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function show_error(text)&lt;br /&gt;
	return  mw.getCurrentFrame():expandTemplate{title = &amp;quot;maintenance box&amp;quot;, args = {&lt;br /&gt;
		&amp;quot;red&amp;quot;,&lt;br /&gt;
		image = &amp;quot;[[File:Ambox warning pn.svg|50px]]&amp;quot;,&lt;br /&gt;
		title = &amp;quot;The automatically-generated contents of this category has errors.&amp;quot;,&lt;br /&gt;
		text = text,&lt;br /&gt;
		}}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Check the name of the current page, and return an error if it&amp;#039;s not right.&lt;br /&gt;
function check_name(current, template, info)&lt;br /&gt;
	local errortext = nil&lt;br /&gt;
	local category = nil&lt;br /&gt;
	&lt;br /&gt;
	if not current then&lt;br /&gt;
		errortext =&lt;br /&gt;
			&amp;quot;The label \&amp;quot;&amp;quot; .. (info.label or &amp;quot;&amp;quot;) .. &amp;quot;\&amp;quot; given to the &amp;quot; ..&lt;br /&gt;
			require(&amp;quot;Module:template link&amp;quot;).format_link{template} .. &amp;quot; template is not valid. &amp;quot; ..&lt;br /&gt;
			&amp;quot;You may have mistyped it, or it simply has not been created yet. To add a new label, please consult the documentation of the template.&amp;quot;&lt;br /&gt;
		category = &amp;quot;[[Category:Categories with invalid label]]&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if errortext then&lt;br /&gt;
		return (category or &amp;quot;&amp;quot;) .. show_error(errortext)&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_catfix_info(current)&lt;br /&gt;
	local lang, sc&lt;br /&gt;
	if current.getCatfixInfo then&lt;br /&gt;
		lang, sc = current:getCatfixInfo()&lt;br /&gt;
	elseif not (current._info and current._info.no_catfix) then&lt;br /&gt;
		-- FIXME: This is hacky and should be removed.&lt;br /&gt;
		lang = current._lang&lt;br /&gt;
		sc = current._info and current._info.sc and require(&amp;quot;Module:scripts&amp;quot;).getByCode(current._info.sc) or nil&lt;br /&gt;
	end&lt;br /&gt;
	return lang, sc&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Show the &amp;quot;catfix&amp;quot; that adds language attributes and script classes to the page.&lt;br /&gt;
function show_catfix(current)&lt;br /&gt;
	local lang, sc = get_catfix_info(current)&lt;br /&gt;
	if lang then&lt;br /&gt;
		return m_utilities.catfix(lang, sc)&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Show the parent categories that the current category should be placed in.&lt;br /&gt;
function show_categories(current, categories)&lt;br /&gt;
	local parents = current:getParents()&lt;br /&gt;
	&lt;br /&gt;
	if not parents then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local sort_override = nil&lt;br /&gt;
	if current.getSort then&lt;br /&gt;
		sort_override = current:getSort()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for _, parent in ipairs(parents) do&lt;br /&gt;
		local sort = sort_override or parent.sort&lt;br /&gt;
&lt;br /&gt;
		if type(parent.name) == &amp;quot;string&amp;quot; then&lt;br /&gt;
			table.insert(categories, &amp;quot;[[&amp;quot; .. parent.name .. &amp;quot;|&amp;quot; .. sort .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			if string.sub(sort, 1, 1) ~= &amp;quot; &amp;quot; and not current._lang then&lt;br /&gt;
				sort = &amp;quot; &amp;quot; .. sort&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(categories, &amp;quot;[[Category:&amp;quot; .. parent.name:getCategoryName() .. &amp;quot;|&amp;quot; .. sort .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if current.getTopicParents then&lt;br /&gt;
		if current:getTopicParents() then&lt;br /&gt;
			for _, topic_parent in ipairs(current:getTopicParents()) do&lt;br /&gt;
				table.insert(categories, &amp;quot;[[Category:&amp;quot; .. topic_parent .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Also put the category in its corresponding &amp;quot;umbrella&amp;quot; or &amp;quot;by language&amp;quot; category.&lt;br /&gt;
	local umbrella = current:getUmbrella()&lt;br /&gt;
	&lt;br /&gt;
	if umbrella then&lt;br /&gt;
		local sort&lt;br /&gt;
		if current._lang then&lt;br /&gt;
			sort = current._lang:getCanonicalName()&lt;br /&gt;
		else&lt;br /&gt;
			sort = current:getCategoryName()&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if type(umbrella) == &amp;quot;string&amp;quot; then&lt;br /&gt;
			table.insert(categories, &amp;quot;[[&amp;quot; .. umbrella .. &amp;quot;|&amp;quot; .. sort .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(categories, &amp;quot;[[Category:&amp;quot; .. umbrella:getCategoryName() .. &amp;quot;|&amp;quot; .. sort .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function link_box(content)&lt;br /&gt;
	return &amp;quot;&amp;lt;div class=\&amp;quot;noprint plainlinks\&amp;quot; style=\&amp;quot;float: right; clear: both; margin: 0 0 .5em 1em; background: #f9f9f9; border: 1px #aaaaaa solid; margin-top: -1px; padding: 5px; font-weight: bold;\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
		.. content .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function show_related_changes()&lt;br /&gt;
	local title = mw.title.getCurrentTitle().fullText&lt;br /&gt;
	return link_box(&lt;br /&gt;
		&amp;quot;[&amp;quot;&lt;br /&gt;
		.. tostring(mw.uri.fullUrl(&amp;quot;Special:RecentChangesLinked&amp;quot;, {&lt;br /&gt;
			target = title,&lt;br /&gt;
			showlinkedto = 0,&lt;br /&gt;
		}))&lt;br /&gt;
		.. &amp;#039; &amp;lt;span title=&amp;quot;Recent edits and other changes to pages in &amp;#039; .. title .. &amp;#039;&amp;quot;&amp;gt;Recent changes&amp;lt;/span&amp;gt;]&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function show_editlink(current)&lt;br /&gt;
	return link_box(&lt;br /&gt;
		&amp;quot;[&amp;quot; .. tostring(mw.uri.fullUrl(current:getDataModule(), &amp;quot;action=edit&amp;quot;))&lt;br /&gt;
		.. &amp;quot; Edit category data]&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function show_pagelist(current)&lt;br /&gt;
	local namespace = &amp;quot;&amp;quot;&lt;br /&gt;
	local info = current:getInfo()&lt;br /&gt;
	&lt;br /&gt;
	local lang_code = info.code&lt;br /&gt;
	if info.label == &amp;quot;citations&amp;quot; or info.label == &amp;quot;citations of undefined terms&amp;quot; then&lt;br /&gt;
		namespace = &amp;quot;Citations&amp;quot;&lt;br /&gt;
	elseif lang_code then&lt;br /&gt;
		local lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(lang_code)&lt;br /&gt;
		&lt;br /&gt;
		if lang then&lt;br /&gt;
			-- Proto-Norse (gmq-pro) is the probably language with a code ending in -pro&lt;br /&gt;
			-- that&amp;#039;s intended to have mostly non-reconstructed entries.&lt;br /&gt;
			if (lang_code:find(&amp;quot;%-pro$&amp;quot;) and lang_code ~= &amp;quot;gmq-pro&amp;quot;) or lang:hasType(&amp;quot;reconstructed&amp;quot;) then&lt;br /&gt;
				namespace = &amp;quot;Reconstruction&amp;quot;&lt;br /&gt;
			elseif lang:hasType(&amp;quot;appendix-constructed&amp;quot;) then&lt;br /&gt;
				namespace = &amp;quot;Appendix&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local recent = mw.getCurrentFrame():callParserFunction{&lt;br /&gt;
		name = &amp;quot;#tag&amp;quot;,&lt;br /&gt;
		args = {&lt;br /&gt;
			&amp;quot;DynamicPageList&amp;quot;,&lt;br /&gt;
			&amp;quot;category=&amp;quot; .. mw.title.getCurrentTitle().text .. &amp;quot;\n&amp;quot; ..&lt;br /&gt;
			&amp;quot;namespace=&amp;quot; .. namespace .. &amp;quot;\n&amp;quot; ..&lt;br /&gt;
			&amp;quot;count=10\n&amp;quot; ..&lt;br /&gt;
			&amp;quot;mode=ordered\n&amp;quot; ..&lt;br /&gt;
			&amp;quot;ordermethod=categoryadd\n&amp;quot; ..&lt;br /&gt;
			&amp;quot;order=descending&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local oldest = mw.getCurrentFrame():callParserFunction{&lt;br /&gt;
		name = &amp;quot;#tag&amp;quot;,&lt;br /&gt;
		args = {&lt;br /&gt;
			&amp;quot;DynamicPageList&amp;quot;,&lt;br /&gt;
			&amp;quot;category=&amp;quot; .. mw.title.getCurrentTitle().text .. &amp;quot;\n&amp;quot; ..&lt;br /&gt;
			&amp;quot;namespace=&amp;quot; .. namespace .. &amp;quot;\n&amp;quot; ..&lt;br /&gt;
			&amp;quot;count=10\n&amp;quot; ..&lt;br /&gt;
			&amp;quot;mode=ordered\n&amp;quot; ..&lt;br /&gt;
			&amp;quot;ordermethod=lastedit\n&amp;quot; ..&lt;br /&gt;
			&amp;quot;order=ascending&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	return [=[&lt;br /&gt;
{| id=&amp;quot;newest-and-oldest-pages&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: right; clear: both; margin: 0 0 .5em 1em;&amp;quot;&lt;br /&gt;
! Newest pages ordered by last [[mw:Manual:Categorylinks table#cl_timestamp|category link update]]&lt;br /&gt;
|-&lt;br /&gt;
| id=&amp;quot;recent-additions&amp;quot; style=&amp;quot;font-size:0.9em;&amp;quot; | ]=] .. recent .. [=[&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Oldest pages ordered by last edit&lt;br /&gt;
|-&lt;br /&gt;
| id=&amp;quot;oldest-pages&amp;quot; style=&amp;quot;font-size:0.9em;&amp;quot; | ]=] .. oldest .. [=[&lt;br /&gt;
&lt;br /&gt;
|}]=]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function show_display(current)&lt;br /&gt;
	if current.getDisplay then&lt;br /&gt;
		local display = current:getDisplay()&lt;br /&gt;
		if display then&lt;br /&gt;
			mw.getCurrentFrame():callParserFunction(&amp;quot;DISPLAYTITLE&amp;quot;, &amp;quot;Category:&amp;quot; .. current:getDisplay())&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Show navigational &amp;quot;breadcrumbs&amp;quot; at the top of the page.&lt;br /&gt;
function show_breadcrumbs(current)&lt;br /&gt;
	local steps = {}&lt;br /&gt;
	&lt;br /&gt;
	-- Start at the current label and move our way up the &amp;quot;chain&amp;quot; from child to parent, until we can&amp;#039;t go further.&lt;br /&gt;
	while current do&lt;br /&gt;
		local category = nil&lt;br /&gt;
		local display_name = nil&lt;br /&gt;
		local nocap = nil&lt;br /&gt;
		&lt;br /&gt;
		if type(current) == &amp;quot;string&amp;quot; then&lt;br /&gt;
			category = current&lt;br /&gt;
			display_name = current:gsub(&amp;quot;^Category:&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			category = &amp;quot;Category:&amp;quot; .. current:getCategoryName()&lt;br /&gt;
			display_name, nocap = current:getBreadcrumbName()&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not nocap then&lt;br /&gt;
			display_name = mw.getContentLanguage():ucfirst(display_name)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if current.getDisplay2 then&lt;br /&gt;
			display_name = current:getDisplay2() or display_name&lt;br /&gt;
		elseif current.getDisplay then&lt;br /&gt;
			display_name = current:getDisplay() or display_name&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(steps, 1, &amp;quot;[[:&amp;quot; .. category .. &amp;quot;|&amp;quot; .. display_name .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
		-- Move up the &amp;quot;chain&amp;quot; by one level.&lt;br /&gt;
		if type(current) == &amp;quot;string&amp;quot; then&lt;br /&gt;
			current = nil&lt;br /&gt;
		else&lt;br /&gt;
			current = current:getParents()&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if current then&lt;br /&gt;
			current = current[1].name&lt;br /&gt;
		elseif inFundamental[category] then&lt;br /&gt;
			current = &amp;quot;Category:Fundamental&amp;quot;&lt;br /&gt;
		end	&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	steps = table.concat(steps, &amp;quot; » &amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	return &amp;quot;&amp;lt;small&amp;gt;&amp;quot; .. steps .. &amp;quot;&amp;lt;/small&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Show the intro text that goes at the very top of the page.&lt;br /&gt;
function show_intro(current)&lt;br /&gt;
	return (current.getIntro and current:getIntro() or &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Show a short description text for the category.&lt;br /&gt;
function show_description(current)&lt;br /&gt;
	return (current:getDescription() or &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function show_appendix(current)&lt;br /&gt;
	local appendix&lt;br /&gt;
	&lt;br /&gt;
	if current.getAppendix then&lt;br /&gt;
		appendix = current:getAppendix()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if appendix then&lt;br /&gt;
		return &amp;quot;For more information, see [[&amp;quot; .. appendix .. &amp;quot;]].&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Show a list of child categories.&lt;br /&gt;
function show_children(current)&lt;br /&gt;
	local children = current:getChildren()&lt;br /&gt;
	&lt;br /&gt;
	if not children then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.sort(children, function(first, second) return mw.ustring.upper(first.sort) &amp;lt; mw.ustring.upper(second.sort) end)&lt;br /&gt;
	&lt;br /&gt;
	local children_list = {}&lt;br /&gt;
	&lt;br /&gt;
	for _, child in ipairs(children) do&lt;br /&gt;
		local child_pagetitle&lt;br /&gt;
		if type(child.name) == &amp;quot;string&amp;quot; then&lt;br /&gt;
			child_pagetitle = child.name&lt;br /&gt;
		else&lt;br /&gt;
			child_pagetitle = &amp;quot;Category:&amp;quot; .. child.name:getCategoryName()&lt;br /&gt;
		end&lt;br /&gt;
		local child_page = mw.title.new(child_pagetitle)&lt;br /&gt;
		&lt;br /&gt;
		local display = child_pagetitle&lt;br /&gt;
		if child.name.getDisplay then&lt;br /&gt;
			if child.name:getDisplay() then&lt;br /&gt;
				display = &amp;quot;Category:&amp;quot; .. child.name:getDisplay()&lt;br /&gt;
			end&lt;br /&gt;
		end	&lt;br /&gt;
		if child_page.exists then&lt;br /&gt;
			local child_description =&lt;br /&gt;
				child.description or&lt;br /&gt;
				type(child.name) == &amp;quot;string&amp;quot; and child.name:gsub(&amp;quot;^Category:&amp;quot;, &amp;quot;&amp;quot;) .. &amp;quot;.&amp;quot; or&lt;br /&gt;
				child.name:getDescription(&amp;quot;child&amp;quot;)&lt;br /&gt;
			table.insert(children_list, &amp;quot;* [[:&amp;quot; .. child_pagetitle .. &amp;quot;|&amp;quot; .. display .. &amp;quot;]]: &amp;quot; .. child_description)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(children_list, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Show a table of contents with links to each letter in the language&amp;#039;s script.&lt;br /&gt;
function show_TOC(current)&lt;br /&gt;
	local titleText = mw.title.getCurrentTitle().text&lt;br /&gt;
	&lt;br /&gt;
	local inCategoryPages = mw.site.stats.pagesInCategory(titleText, &amp;quot;pages&amp;quot;)&lt;br /&gt;
	local inCategorySubcats = mw.site.stats.pagesInCategory(titleText, &amp;quot;subcats&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	local TOC_type&lt;br /&gt;
&lt;br /&gt;
	-- Compute type of table of contents required.&lt;br /&gt;
	if inCategoryPages &amp;gt; 2500 or inCategorySubcats &amp;gt; 2500 then&lt;br /&gt;
		TOC_type = &amp;quot;full&amp;quot;&lt;br /&gt;
	elseif inCategoryPages &amp;gt; 200 or inCategorySubcats &amp;gt; 200 then&lt;br /&gt;
		TOC_type = &amp;quot;normal&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		-- No (usual) need for a TOC if all pages or subcategories can fit on one page;&lt;br /&gt;
		-- but allow this to be overridden by a custom TOC handler.&lt;br /&gt;
		TOC_type = &amp;quot;none&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if current.getTOC then&lt;br /&gt;
		local TOC_text = current:getTOC(TOC_type)&lt;br /&gt;
		if TOC_text ~= true then&lt;br /&gt;
			return TOC_text&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if TOC_type ~= &amp;quot;none&amp;quot; then&lt;br /&gt;
		local templatename = current:getTOCTemplateName()&lt;br /&gt;
&lt;br /&gt;
		local TOC_template&lt;br /&gt;
		if TOC_type == &amp;quot;full&amp;quot; then&lt;br /&gt;
			-- This category is very large, see if there is a &amp;quot;full&amp;quot; version of the TOC.&lt;br /&gt;
			local TOC_template_full = mw.title.new(templatename .. &amp;quot;/full&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			if TOC_template_full.exists then&lt;br /&gt;
				TOC_template = TOC_template_full&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not TOC_template then&lt;br /&gt;
			local TOC_template_normal = mw.title.new(templatename)&lt;br /&gt;
			if TOC_template_normal.exists then&lt;br /&gt;
				TOC_template = TOC_template_normal&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if TOC_template then&lt;br /&gt;
			return mw.getCurrentFrame():expandTemplate{title = TOC_template.text, args = {}}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.test(frame)&lt;br /&gt;
	local template = frame.args[1]&lt;br /&gt;
	local submodule = require(&amp;quot;Module:category tree/&amp;quot; .. template)&lt;br /&gt;
	&lt;br /&gt;
	if submodule.new_main then&lt;br /&gt;
		current = submodule.new_main(frame)&lt;br /&gt;
	else&lt;br /&gt;
		local info = {}&lt;br /&gt;
		&lt;br /&gt;
		for key, val in pairs(frame.args) do&lt;br /&gt;
			info[key] = val; if info[key] == &amp;quot;&amp;quot; then info[key] = nil end&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		info.template = nil&lt;br /&gt;
		current = submodule.new(info, true)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:50 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Category_tree</comments>
		</item>
		<item>
			<title>Module:Auto cat</title>
			<link>https://test.st34an.tech/index.php?title=Module:Auto_cat&amp;diff=59&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Auto_cat&amp;diff=59&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Auto_cat&quot; title=&quot;Module:Auto cat&quot;&gt;Module:Auto cat&lt;/a&gt; by file upload (1 revision)&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;
-- Used in multiple places; create a variable for ease in testing.&lt;br /&gt;
local poscatboiler_submodule = &amp;quot;poscatboiler&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function splitLabelLang(titleObject)&lt;br /&gt;
	local getByCanonicalName = require(&amp;quot;Module:languages&amp;quot;).getByCanonicalName&lt;br /&gt;
	local canonicalName&lt;br /&gt;
	local lang&lt;br /&gt;
	&lt;br /&gt;
	-- Progressively add another word to the potential canonical name until it&lt;br /&gt;
	-- matches an actual canonical name.&lt;br /&gt;
	local words = mw.text.split(titleObject.text, &amp;quot; &amp;quot;)&lt;br /&gt;
	for i = #words - 1, 1, -1 do&lt;br /&gt;
		canonicalName = table.concat(words, &amp;quot; &amp;quot;, 1, i)&lt;br /&gt;
		lang = getByCanonicalName(canonicalName)&lt;br /&gt;
		if lang then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local label = lang and titleObject.text:sub(#canonicalName + 2)&lt;br /&gt;
		or titleObject.text&lt;br /&gt;
	&lt;br /&gt;
	return label, lang&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Add the arguments in `source` to those in `receiver`, offsetting numeric arguments by `offset`.&lt;br /&gt;
local function add_args(receiver, source, offset)&lt;br /&gt;
	for k, v in pairs(source) do&lt;br /&gt;
		if type(k) == &amp;quot;number&amp;quot; then&lt;br /&gt;
			receiver[k + offset] = v&lt;br /&gt;
		else&lt;br /&gt;
			receiver[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return receiver&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- List of handler functions that try to match the page name.&lt;br /&gt;
-- A handler should return a table of template title plus arguments&lt;br /&gt;
-- that is passed to frame:expandTemplate.&lt;br /&gt;
-- If a handler does not recognise the page name, it should return nil.&lt;br /&gt;
-- Note that the order of functions matters!&lt;br /&gt;
&lt;br /&gt;
local handlers = {}&lt;br /&gt;
&lt;br /&gt;
local function add_handler(func)&lt;br /&gt;
	table.insert(handlers, func)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Topical categories&lt;br /&gt;
add_handler(function(titleObject)&lt;br /&gt;
	if not titleObject.text:find(&amp;quot;^[A-Za-z-]+:.&amp;quot;) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local code, label = titleObject.text:match(&amp;quot;^([A-Za-z-]+):(.+)$&amp;quot;)&lt;br /&gt;
	return {title = &amp;quot;topic cat&amp;quot;, args = {code, label}}&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Letter names&lt;br /&gt;
add_handler(function(titleObject)&lt;br /&gt;
	if not titleObject.text:find(&amp;quot;letter names$&amp;quot;) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local langCode = titleObject.text:match(&amp;quot;^([^:]+):&amp;quot;)&lt;br /&gt;
	local lang, cat&lt;br /&gt;
	&lt;br /&gt;
	if langCode then&lt;br /&gt;
		lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(langCode) or error(&amp;#039;The language code &amp;quot;&amp;#039; .. langCode .. &amp;#039;&amp;quot; is not valid.&amp;#039;)&lt;br /&gt;
		cat = titleObject.text:match(&amp;quot;:(.+)$&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		cat = titleObject.text&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return {title = &amp;quot;topic cat&amp;quot;, args = {lang and lang:getCode() or nil, cat}}&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- letter cat&lt;br /&gt;
add_handler(function(titleObject)&lt;br /&gt;
	-- Only recognize cases consisting of an uppercase letter followed by the&lt;br /&gt;
	-- corresponding lowercase letter, either as the entire category name or&lt;br /&gt;
	-- followed by a colon (for cases like [[Category:Gg: ⠛]]). Cases that&lt;br /&gt;
	-- don&amp;#039;t fit this profile (e.g. for Turkish [[Category:İi]] and&lt;br /&gt;
	-- [[Category:Iı]]) need to call {{letter cat}} directly. Formerly this&lt;br /&gt;
	-- handler was much less restrictive and would fire on categories named&lt;br /&gt;
	-- [[Category:zh:]], [[Category:RFQ]], etc.&lt;br /&gt;
	local upper, lower = mw.ustring.match(titleObject.text, &amp;quot;^(%u)(%l)%f[:%z]&amp;quot;)&lt;br /&gt;
	if not upper or lower:uupper() ~= upper then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return {title = &amp;quot;letter cat&amp;quot;}&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- poscatboiler lang-specific&lt;br /&gt;
add_handler(function(titleObject, args)&lt;br /&gt;
	local label, lang = splitLabelLang(titleObject)&lt;br /&gt;
	if lang then&lt;br /&gt;
		local baseLabel, script = label:match(&amp;quot;(.+) in (.-) script$&amp;quot;)&lt;br /&gt;
		if script and baseLabel ~= &amp;quot;terms&amp;quot; then&lt;br /&gt;
			local scriptObj = require(&amp;quot;Module:scripts&amp;quot;).getByCanonicalName(script)&lt;br /&gt;
			if scriptObj then&lt;br /&gt;
				return {title = poscatboiler_submodule, args = add_args({lang:getCode(), baseLabel, scriptObj:getCode()}, args, 3)}, true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return {title = poscatboiler_submodule, args = add_args({lang:getCode(), label}, args, 3)}, true&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- poscatboiler umbrella category&lt;br /&gt;
add_handler(function(titleObject, args)&lt;br /&gt;
	local label = titleObject.text:match(&amp;quot;(.+) by language$&amp;quot;)&lt;br /&gt;
	if label then&lt;br /&gt;
		return {&lt;br /&gt;
			title = poscatboiler_submodule,&lt;br /&gt;
			args = add_args({nil, mw.getContentLanguage():lcfirst(label)}, args, 3)&lt;br /&gt;
		}, true&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- topic cat&lt;br /&gt;
add_handler(function(titleObject)&lt;br /&gt;
	return {title = &amp;quot;topic cat&amp;quot;, args = {nil, titleObject.text}}&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- poscatboiler raw handlers&lt;br /&gt;
add_handler(function(titleObject, args)&lt;br /&gt;
	local args = add_args({nil, titleObject.text}, args, 3)&lt;br /&gt;
	args.raw = true&lt;br /&gt;
	return {&lt;br /&gt;
		title = poscatboiler_submodule,&lt;br /&gt;
		args = args,&lt;br /&gt;
	}, true&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- poscatboiler umbrella handlers without &amp;#039;by language&amp;#039;&lt;br /&gt;
add_handler(function(titleObject, args)&lt;br /&gt;
	local args = add_args({nil, mw.getContentLanguage():lcfirst(titleObject.text)}, args, 3)&lt;br /&gt;
	return {&lt;br /&gt;
		title = poscatboiler_submodule,&lt;br /&gt;
		args = args,&lt;br /&gt;
	}, true&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.show(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local titleObject = mw.title.getCurrentTitle()&lt;br /&gt;
	&lt;br /&gt;
	if titleObject.nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
		return &amp;quot;(This template should be used on pages in the Category: namespace.)&amp;quot;&lt;br /&gt;
	elseif titleObject.nsText ~= &amp;quot;Category&amp;quot; then&lt;br /&gt;
		error(&amp;quot;This template/module can only be used on pages in the Category: namespace.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function extra_args_error(templateObject)&lt;br /&gt;
		local numargstext = {}&lt;br /&gt;
		local argstext = {}&lt;br /&gt;
		local maxargnum = 0&lt;br /&gt;
		for k, v in pairs(templateObject.args) do&lt;br /&gt;
			if type(v) == &amp;quot;number&amp;quot; and v &amp;gt; maxargnum then&lt;br /&gt;
				maxargnum = v&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(numargstext, &amp;quot;|&amp;quot; .. k .. &amp;quot;=&amp;quot; .. v)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for i = 1, maxargnum do&lt;br /&gt;
			local v = templateObject.args[i]&lt;br /&gt;
			if v == nil then&lt;br /&gt;
				v = &amp;quot;(nil)&amp;quot;&lt;br /&gt;
			elseif v == true then&lt;br /&gt;
				v = &amp;quot;(true)&amp;quot;&lt;br /&gt;
			elseif v == false then&lt;br /&gt;
				v = &amp;quot;(false)&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(argstext, &amp;quot;|&amp;quot; .. v)&lt;br /&gt;
		end&lt;br /&gt;
		error(&amp;quot;Extra arguments to {{auto cat}} not allowed for this category (recognized as {{[[Template:&amp;quot; ..&lt;br /&gt;
			templateObject.title .. &amp;quot;|&amp;quot; .. templateObject.title .. &amp;quot;]]&amp;quot; .. numargstext .. argstext .. &amp;quot;}}&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local first_error_templateObject, first_error_args_handled, first_error_cattext&lt;br /&gt;
&lt;br /&gt;
	-- Go through each handler in turn. If a handler doesn&amp;#039;t recognize the format of the&lt;br /&gt;
	-- category, it will return nil, and we will consider the next handler. Otherwise,&lt;br /&gt;
	-- it returns a template name and arguments to call it with, but even then, that template&lt;br /&gt;
	-- might return an error, and we need to consider the next handler. This happens,&lt;br /&gt;
	-- for example, with the category &amp;quot;CAT:Mato Grosso, Brazil&amp;quot;, where &amp;quot;Mato&amp;quot; is the name of&lt;br /&gt;
	-- a language, so the handler for {{poscatboiler}} fires and tries to find a label&lt;br /&gt;
	-- &amp;quot;Grosso, Brazil&amp;quot;. This throws an error, and previously, this blocked fruther handler&lt;br /&gt;
	-- consideration, but now we check for the error and continue checking handlers;&lt;br /&gt;
	-- eventually, {{topic cat}} will fire and correctly handle the category.&lt;br /&gt;
	for _, handler in ipairs(handlers) do&lt;br /&gt;
		local templateObject, args_handled = handler(titleObject, args)&lt;br /&gt;
		&lt;br /&gt;
		if templateObject then&lt;br /&gt;
			require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;auto cat/&amp;quot; .. templateObject.title)&lt;br /&gt;
			local cattext = frame:expandTemplate(templateObject)&lt;br /&gt;
			-- FIXME! We check for specific text found in most or all error messages generated&lt;br /&gt;
			-- by category tree templates (in particular, the second piece of text below should be&lt;br /&gt;
			-- in all error messages generated when a given module doesn&amp;#039;t recognize a category name).&lt;br /&gt;
			-- If this text ever changes in the source modules (e.g. [[Module:category tree]],&lt;br /&gt;
			-- it needs to be changed here as well.)&lt;br /&gt;
			if cattext:find(&amp;quot;Category:Categories with invalid label&amp;quot;) or&lt;br /&gt;
				cattext:find(&amp;quot;The automatically%-generated contents of this category has errors&amp;quot;) then&lt;br /&gt;
				if not first_error_cattext then&lt;br /&gt;
					first_error_templateObject = templateObject&lt;br /&gt;
					first_error_args_handled = args_handled&lt;br /&gt;
					first_error_cattext = cattext&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				if not args_handled and next(args) then&lt;br /&gt;
					extra_args_error(templateObject)&lt;br /&gt;
				end&lt;br /&gt;
				return cattext&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if first_error_cattext then&lt;br /&gt;
		if not first_error_args_handled and next(args) then&lt;br /&gt;
			extra_args_error(first_error_templateObject)&lt;br /&gt;
		end&lt;br /&gt;
		return first_error_cattext&lt;br /&gt;
	end&lt;br /&gt;
	error(&amp;quot;{{auto cat}} couldn&amp;#039;t recognize format of category name&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- test function for injecting title string&lt;br /&gt;
function export.test(title)&lt;br /&gt;
	if type(title) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		if type(title.args[1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
			title = title.args[1]&lt;br /&gt;
		else&lt;br /&gt;
			title = title:getParent().args[1]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local titleObject = {}&lt;br /&gt;
	titleObject.text = title&lt;br /&gt;
	&lt;br /&gt;
	for _, handler in ipairs(handlers) do&lt;br /&gt;
		local t = handler(titleObject)&lt;br /&gt;
		&lt;br /&gt;
		if t then&lt;br /&gt;
			return t.title&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:50 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Auto_cat</comments>
		</item>
		<item>
			<title>Template:Tracking/parameters/no calling function/category tree/poscatboiler</title>
			<link>https://test.st34an.tech/index.php?title=Template:Tracking/parameters/no_calling_function/category_tree/poscatboiler&amp;diff=57&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Template:Tracking/parameters/no_calling_function/category_tree/poscatboiler&amp;diff=57&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Template:Tracking/parameters/no_calling_function/category_tree/poscatboiler&quot; title=&quot;Template:Tracking/parameters/no calling function/category tree/poscatboiler&quot;&gt;Template:Tracking/parameters/no calling function/category tree/poscatboiler&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;==Subpages==&lt;br /&gt;
{{Special:PrefixIndex/{{FULLPAGENAME}}/|stripprefix=1}}[[Category:Tracking templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:50 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Template_talk:Tracking/parameters/no_calling_function/category_tree/poscatboiler</comments>
		</item>
		<item>
			<title>Template:Tracking/auto cat/poscatboiler</title>
			<link>https://test.st34an.tech/index.php?title=Template:Tracking/auto_cat/poscatboiler&amp;diff=55&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Template:Tracking/auto_cat/poscatboiler&amp;diff=55&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Template:Tracking/auto_cat/poscatboiler&quot; title=&quot;Template:Tracking/auto cat/poscatboiler&quot;&gt;Template:Tracking/auto cat/poscatboiler&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;==Subpages==&lt;br /&gt;
{{Special:PrefixIndex/{{FULLPAGENAME}}/|stripprefix=1}}[[Category:Tracking templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:50 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Template_talk:Tracking/auto_cat/poscatboiler</comments>
		</item>
		<item>
			<title>Template:Poscatboiler</title>
			<link>https://test.st34an.tech/index.php?title=Template:Poscatboiler&amp;diff=53&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Template:Poscatboiler&amp;diff=53&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Template:Poscatboiler&quot; title=&quot;Template:Poscatboiler&quot;&gt;Template:Poscatboiler&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{#invoke:category tree|show|template=poscatboiler|useautocat=1}}&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:50 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Template_talk:Poscatboiler</comments>
		</item>
		<item>
			<title>Template:Auto cat</title>
			<link>https://test.st34an.tech/index.php?title=Template:Auto_cat&amp;diff=51&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Template:Auto_cat&amp;diff=51&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Template:Auto_cat&quot; title=&quot;Template:Auto cat&quot;&gt;Template:Auto cat&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{#invoke:auto cat|show}}&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:50 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Template_talk:Auto_cat</comments>
		</item>
		<item>
			<title>Module:Debug</title>
			<link>https://test.st34an.tech/index.php?title=Module:Debug&amp;diff=49&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Debug&amp;diff=49&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Debug&quot; title=&quot;Module:Debug&quot;&gt;Module:Debug&lt;/a&gt; by file upload (1 revision)&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;
local escape&lt;br /&gt;
do&lt;br /&gt;
	local escapes = {&lt;br /&gt;
		[&amp;quot;\a&amp;quot;] = &amp;quot;a&amp;quot;, [&amp;quot;\b&amp;quot;] = &amp;quot;b&amp;quot;, [&amp;quot;\f&amp;quot;] = &amp;quot;f&amp;quot;, [&amp;quot;\n&amp;quot;] = &amp;quot;n&amp;quot;, [&amp;quot;\r&amp;quot;] = &amp;quot;r&amp;quot;,&lt;br /&gt;
		[&amp;quot;\t&amp;quot;] = &amp;quot;t&amp;quot;, [&amp;quot;\v&amp;quot;] = &amp;quot;v&amp;quot;, [&amp;quot;\\&amp;quot;] = &amp;quot;\\&amp;quot;, [&amp;quot;\&amp;quot;&amp;quot;] = &amp;#039;&amp;quot;&amp;#039;, [&amp;quot;&amp;#039;&amp;quot;] = &amp;quot;&amp;#039;&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local function helper(char)&lt;br /&gt;
		return escapes[char] and &amp;quot;\\&amp;quot; .. escapes[char]&lt;br /&gt;
			or (&amp;quot;\\%03d&amp;quot;):format(char:byte())&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Escape control characters, backslash, double quote, and bytes that aren&amp;#039;t&lt;br /&gt;
	-- used in UTF-8.&lt;br /&gt;
	-- Escape stuff that can&amp;#039;t be saved in a MediaWiki page, like invalid UTF-8&lt;br /&gt;
	-- and NFD character sequences? Hard.&lt;br /&gt;
	-- Similar to string.format(&amp;quot;%q&amp;quot;, str), which does not use C-like simple&lt;br /&gt;
	-- escapes and does not escape bytes that are not used in UTF-8.&lt;br /&gt;
	escape = function (str)&lt;br /&gt;
		return (str:gsub(&amp;quot;[%z\1-\31\\\&amp;quot;\127\192\193\245-\255]&amp;quot;, helper))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
export.escape = escape&lt;br /&gt;
&lt;br /&gt;
-- Convert a value to a string&lt;br /&gt;
function export.dump(value, prefix, tsort)&lt;br /&gt;
	local t = type(value)&lt;br /&gt;
	&lt;br /&gt;
	prefix = prefix or &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	if t == &amp;quot;string&amp;quot; then&lt;br /&gt;
		return &amp;#039;&amp;quot;&amp;#039; .. escape(value) .. &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
	elseif t == &amp;quot;table&amp;quot; then&lt;br /&gt;
		local str_table = {}&lt;br /&gt;
		&lt;br /&gt;
		table.insert(str_table, &amp;quot; {&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
		for key, val in require(&amp;quot;Module:table&amp;quot;).sortedPairs(value, tsort) do&lt;br /&gt;
			table.insert(str_table, &amp;quot; &amp;quot; .. prefix .. &amp;quot;\t[&amp;quot; .. export.dump(key, prefix .. &amp;quot;\t&amp;quot;) .. &amp;quot;] = &amp;quot; .. export.dump(val, prefix .. &amp;quot;\t&amp;quot;):gsub(&amp;quot;^ &amp;quot;, &amp;quot;&amp;quot;) .. &amp;quot;,&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		table.insert(str_table, &amp;quot; &amp;quot; .. prefix .. &amp;quot;}&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
		return table.concat(str_table, &amp;quot;\n&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		return tostring(value)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.highlight_dump(value, prefix, tsort, options)&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	&lt;br /&gt;
	local func = options.modified and &amp;quot;modified_dump&amp;quot; or &amp;quot;dump&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	local dump = export[func](value, prefix, tsort)&lt;br /&gt;
	&lt;br /&gt;
	-- Remove spaces at beginnings of lines (which are simply to force a &amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt; tag).&lt;br /&gt;
	dump = dump:gsub(&amp;quot;^ &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	dump = dump:gsub(&amp;quot;\n &amp;quot;, &amp;quot;\n&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	return export.highlight(dump)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Returns true if table contains a table as one of its values&lt;br /&gt;
local function containsTable(t)&lt;br /&gt;
	for key, value in pairs(t) do&lt;br /&gt;
		if type(value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function containsTablesWithSize(t, size)&lt;br /&gt;
	for key, value in pairs(t) do&lt;br /&gt;
		if type(value) == &amp;quot;table&amp;quot; and require(&amp;quot;Module:table&amp;quot;).size(value) ~= size then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
	Convert a value to a string.&lt;br /&gt;
	Like dump below, but if a table has consecutive numbered keys and does not&lt;br /&gt;
	have a table as one of its values, it will be placed on a single line.&lt;br /&gt;
	Used by [[Module:User:Erutuon/script recognition]].&lt;br /&gt;
]=]&lt;br /&gt;
function export.modified_dump(value, prefix, tsort)&lt;br /&gt;
	local t = type(value)&lt;br /&gt;
	&lt;br /&gt;
	prefix = prefix or &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	if t == &amp;quot;string&amp;quot; then&lt;br /&gt;
		return &amp;#039;&amp;quot;&amp;#039; .. value .. &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
	elseif t == &amp;quot;table&amp;quot; then&lt;br /&gt;
		local str_table = {}&lt;br /&gt;
		&lt;br /&gt;
		local containsTable = containsTable(value)&lt;br /&gt;
		local consecutive = require(&amp;quot;Module:table&amp;quot;).isArray(value)&lt;br /&gt;
		if consecutive and not containsTable or containsTable and containsTablesWithSize(value, 3) then&lt;br /&gt;
			table.insert(str_table, &amp;quot;{&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			for key, val in require(&amp;quot;Module:table&amp;quot;).sortedPairs(value, tsort) do&lt;br /&gt;
				if containsTable then&lt;br /&gt;
					table.insert(str_table, &amp;quot;\n\t&amp;quot; .. prefix)&lt;br /&gt;
				else&lt;br /&gt;
					table.insert(str_table, &amp;quot; &amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				if type(key) == &amp;quot;string&amp;quot; then&lt;br /&gt;
					table.insert(str_table, &amp;quot;[&amp;quot; .. export.modified_dump(key) .. &amp;quot;] = &amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				table.insert(str_table, type(key) == &amp;quot;number&amp;quot; and type(val) == &amp;quot;number&amp;quot; and string.format(&amp;quot;0x%05X&amp;quot;, val) or export.modified_dump(val))&lt;br /&gt;
				&lt;br /&gt;
				if not (consecutive and #value == 3) or type(key) == &amp;quot;number&amp;quot; and value[key + 1] then&lt;br /&gt;
					table.insert(str_table, &amp;quot;,&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if containsTable then&lt;br /&gt;
				table.insert(str_table, &amp;quot;\n&amp;quot; .. prefix)&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(str_table, &amp;quot; &amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			table.insert(str_table, &amp;quot;}&amp;quot;)&lt;br /&gt;
			return table.concat(str_table)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		table.insert(str_table, &amp;quot; {&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
		for key, val in require(&amp;quot;Module:table&amp;quot;).sortedPairs(value, tsort) do&lt;br /&gt;
			table.insert(str_table, &amp;quot; &amp;quot; .. prefix .. &amp;quot;\t[&amp;quot; .. export.modified_dump(key, prefix .. &amp;quot;\t&amp;quot;) .. &amp;quot;] = &amp;quot; .. export.modified_dump(val, prefix .. &amp;quot;\t&amp;quot;):gsub(&amp;quot;^ &amp;quot;, &amp;quot;&amp;quot;) .. &amp;quot;,&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		table.insert(str_table, &amp;quot; &amp;quot; .. prefix .. &amp;quot;}&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
		return table.concat(str_table, &amp;quot;\n&amp;quot;)&lt;br /&gt;
	elseif t == &amp;quot;number&amp;quot; and value &amp;gt; 46 then&lt;br /&gt;
		return string.format(&amp;quot;0x%05X&amp;quot;, value)&lt;br /&gt;
	else&lt;br /&gt;
		return tostring(value)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
function export.track(key)&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	if key then&lt;br /&gt;
		if type(key) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
			key = { key }&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		for i, value in pairs(key) do&lt;br /&gt;
			pcall(frame.expandTemplate, frame, { title = &amp;#039;tracking/&amp;#039; .. value })&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		error(&amp;#039;No tracking key supplied to the function &amp;quot;&amp;#039; .. track .. &amp;#039;&amp;quot;.&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Trigger a script error from a template&lt;br /&gt;
function export.error(frame)&lt;br /&gt;
	error(frame.args[1] or &amp;quot;(no message specified)&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Convenience function for generating syntaxhighlight tags.&lt;br /&gt;
	Display defaults to block.&lt;br /&gt;
	Options is a table. To display inline text with HTML highlighting:&lt;br /&gt;
		{ inline = true, lang = &amp;quot;html&amp;quot; }&lt;br /&gt;
]]&lt;br /&gt;
function export.highlight(content, options)&lt;br /&gt;
	if type(content) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		options = content&lt;br /&gt;
		options = {&lt;br /&gt;
			lang = options.lang or &amp;quot;lua&amp;quot;,&lt;br /&gt;
			inline = options.inline and true&lt;br /&gt;
		}&lt;br /&gt;
		return function(content)&lt;br /&gt;
			return mw.getCurrentFrame():extensionTag{&lt;br /&gt;
				name = &amp;quot;syntaxhighlight&amp;quot;,&lt;br /&gt;
				content = content,&lt;br /&gt;
				args = options&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return mw.getCurrentFrame():extensionTag{&lt;br /&gt;
			name = &amp;quot;syntaxhighlight&amp;quot;,&lt;br /&gt;
			content = content,&lt;br /&gt;
			args = {&lt;br /&gt;
				lang = options and options.lang or &amp;quot;lua&amp;quot;,&lt;br /&gt;
				inline = options and options.inline and true or nil&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.track_unrecognized_args(args, template_name)&lt;br /&gt;
	local function track(code)&lt;br /&gt;
		export.track(template_name .. &amp;quot;/&amp;quot; .. code)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
    track(&amp;quot;unrecognized arg&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local arg_list = {}&lt;br /&gt;
	for arg, value in pairs(args) do&lt;br /&gt;
		track(&amp;quot;unrecognized arg/&amp;quot; .. arg)&lt;br /&gt;
		table.insert(arg_list, (&amp;quot;|%s=%s&amp;quot;):format(arg, value))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	mw.log(&lt;br /&gt;
		(&amp;quot;Unrecognized parameter%s in {{%s}}: %s.&amp;quot;):format(&lt;br /&gt;
			arg_list[2] and &amp;quot;s&amp;quot; or &amp;quot;&amp;quot;,&lt;br /&gt;
			template_name,&lt;br /&gt;
			table.concat(arg_list, &amp;quot;, &amp;quot;)))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:49 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Debug</comments>
		</item>
		<item>
			<title>Module:Languages/canonical names</title>
			<link>https://test.st34an.tech/index.php?title=Module:Languages/canonical_names&amp;diff=47&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Languages/canonical_names&amp;diff=47&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Languages/canonical_names&quot; title=&quot;Module:Languages/canonical names&quot;&gt;Module:Languages/canonical names&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;https://test.st34an.tech/index.php?title=Module:Languages/canonical_names&amp;amp;diff=47&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:49 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Languages/canonical_names</comments>
		</item>
		<item>
			<title>Template:Tracking/parameters/no calling module</title>
			<link>https://test.st34an.tech/index.php?title=Template:Tracking/parameters/no_calling_module&amp;diff=45&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Template:Tracking/parameters/no_calling_module&amp;diff=45&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Template:Tracking/parameters/no_calling_module&quot; title=&quot;Template:Tracking/parameters/no calling module&quot;&gt;Template:Tracking/parameters/no calling module&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;==Subpages==&lt;br /&gt;
{{Special:PrefixIndex/{{FULLPAGENAME}}/|stripprefix=1}}[[Category:Tracking templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:49 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Template_talk:Tracking/parameters/no_calling_module</comments>
		</item>
		<item>
			<title>Template:Tracking/parameters/no calling function</title>
			<link>https://test.st34an.tech/index.php?title=Template:Tracking/parameters/no_calling_function&amp;diff=43&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Template:Tracking/parameters/no_calling_function&amp;diff=43&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Template:Tracking/parameters/no_calling_function&quot; title=&quot;Template:Tracking/parameters/no calling function&quot;&gt;Template:Tracking/parameters/no calling function&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;==Subpages==&lt;br /&gt;
{{Special:PrefixIndex/{{FULLPAGENAME}}/|stripprefix=1}}[[Category:Tracking templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:49 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Template_talk:Tracking/parameters/no_calling_function</comments>
		</item>
		<item>
			<title>Module:Utilities/data</title>
			<link>https://test.st34an.tech/index.php?title=Module:Utilities/data&amp;diff=41&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Utilities/data&amp;diff=41&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Utilities/data&quot; title=&quot;Module:Utilities/data&quot;&gt;Module:Utilities/data&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local data = {}&lt;br /&gt;
&lt;br /&gt;
data.notneeded = {&lt;br /&gt;
	[&amp;quot;und&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;cmn&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ja&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;zu&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;nan&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;yue&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ko&amp;quot;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
data.neededhassubpage = {&lt;br /&gt;
	[&amp;quot;ga&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;gv&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;nv&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;roa-jer&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;fr&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;rm&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;prg&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;gd&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;twf&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;en&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ro&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;egl&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;roa-tar&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;gl&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;ast&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;br&amp;quot;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Script that should be applied to links in categories.&lt;br /&gt;
]]&lt;br /&gt;
data.catfix_scripts = {&lt;br /&gt;
	[&amp;quot;ab&amp;quot;] = &amp;quot;Cyrl&amp;quot;,&lt;br /&gt;
	[&amp;quot;ae&amp;quot;] = &amp;quot;Avst&amp;quot;,&lt;br /&gt;
	[&amp;quot;ar&amp;quot;] = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
	[&amp;quot;ary&amp;quot;] = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
	[&amp;quot;be&amp;quot;] = &amp;quot;Cyrl&amp;quot;,&lt;br /&gt;
	[&amp;quot;cu&amp;quot;] = &amp;quot;Cyrs&amp;quot;,&lt;br /&gt;
	[&amp;quot;el&amp;quot;] = &amp;quot;Grek&amp;quot;,&lt;br /&gt;
	[&amp;quot;grc&amp;quot;] = &amp;quot;Polyt&amp;quot;,&lt;br /&gt;
	[&amp;quot;he&amp;quot;] = &amp;quot;Hebr&amp;quot;,&lt;br /&gt;
	[&amp;quot;ka&amp;quot;] = &amp;quot;Geor&amp;quot;,&lt;br /&gt;
	[&amp;quot;orv&amp;quot;] = &amp;quot;Cyrs&amp;quot;,&lt;br /&gt;
	[&amp;quot;ru&amp;quot;] = &amp;quot;Cyrl&amp;quot;,&lt;br /&gt;
	[&amp;quot;sa&amp;quot;] = &amp;quot;Deva&amp;quot;,&lt;br /&gt;
	[&amp;quot;syl&amp;quot;] = &amp;quot;Sylo&amp;quot;,&lt;br /&gt;
	[&amp;quot;xfa&amp;quot;] = &amp;quot;Ital&amp;quot;,&lt;br /&gt;
	[&amp;quot;zle-ono&amp;quot;] = &amp;quot;Cyrs&amp;quot;,&lt;br /&gt;
	[&amp;quot;zle-ort&amp;quot;] = &amp;quot;Cyrs&amp;quot;,&lt;br /&gt;
	[&amp;quot;hi&amp;quot;] = &amp;quot;Deva&amp;quot;,&lt;br /&gt;
	[&amp;quot;mr&amp;quot;] = &amp;quot;Deva&amp;quot;,&lt;br /&gt;
--[[&lt;br /&gt;
	[&amp;quot;&amp;quot;] = &amp;quot;&amp;quot;,&lt;br /&gt;
]]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local lower = require(&amp;quot;Module:string utilities&amp;quot;).lower&lt;br /&gt;
&lt;br /&gt;
local interwikis = {}&lt;br /&gt;
for _, interwiki in pairs(mw.site.interwikiMap()) do&lt;br /&gt;
	interwikis[lower(interwiki.prefix)] = true&lt;br /&gt;
end&lt;br /&gt;
data.interwikis = interwikis&lt;br /&gt;
&lt;br /&gt;
local namespaces = {}&lt;br /&gt;
for _, namespace in pairs(mw.site.namespaces) do&lt;br /&gt;
	namespaces[lower(namespace.name)] = true&lt;br /&gt;
	for _, alias in pairs(namespace.aliases) do&lt;br /&gt;
		namespaces[lower(alias)] = true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
data.namespaces = namespaces&lt;br /&gt;
&lt;br /&gt;
return data&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:49 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Utilities/data</comments>
		</item>
		<item>
			<title>Module:Utilities</title>
			<link>https://test.st34an.tech/index.php?title=Module:Utilities&amp;diff=39&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Utilities&amp;diff=39&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Utilities&quot; title=&quot;Module:Utilities&quot;&gt;Module:Utilities&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local decode = mw.text.decode&lt;br /&gt;
local u = mw.ustring.char&lt;br /&gt;
&lt;br /&gt;
local data = mw.loadData(&amp;quot;Module:utilities/data&amp;quot;)&lt;br /&gt;
local notneeded = data.notneeded&lt;br /&gt;
local neededhassubpage = data.neededhassubpage&lt;br /&gt;
&lt;br /&gt;
local export = {}&lt;br /&gt;
&lt;br /&gt;
function export.require_when_needed(text)&lt;br /&gt;
	return setmetatable({}, {&lt;br /&gt;
		__index = function(t, k)&lt;br /&gt;
			t = require(text)&lt;br /&gt;
			return t[k]&lt;br /&gt;
		end,&lt;br /&gt;
		__call = function(t, ...)&lt;br /&gt;
			t = require(text)&lt;br /&gt;
			return t(...)&lt;br /&gt;
		end&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- A helper function to escape magic characters in a string.&lt;br /&gt;
-- Magic characters: ^$()%.[]*+-?&lt;br /&gt;
function export.pattern_escape(text)&lt;br /&gt;
	if type(text) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		text = text.args[1]&lt;br /&gt;
	end&lt;br /&gt;
	return (text:gsub(&amp;quot;[%^$()%%.[%]*+%-?]&amp;quot;, &amp;quot;%%%0&amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- A helper function to resolve HTML entities into plaintext.&lt;br /&gt;
-- Iterates over entities in a string, and decodes them into plaintext. We use iteration (instead of decoding the whole string in one go) because it means we can avoid loading the lookup string unnecessarily, as it uses more memory.&lt;br /&gt;
local entities&lt;br /&gt;
function export.get_entities(text)&lt;br /&gt;
	return (text:gsub(&amp;quot;&amp;amp;(#?[%w]-);&amp;quot;, function(entity)&lt;br /&gt;
		-- Check if mw.text.decode is able to decode the entity.&lt;br /&gt;
		if (&lt;br /&gt;
			entity == &amp;quot;lt&amp;quot; or&lt;br /&gt;
			entity == &amp;quot;gt&amp;quot; or&lt;br /&gt;
			entity == &amp;quot;amp&amp;quot; or&lt;br /&gt;
			entity == &amp;quot;quot&amp;quot; or&lt;br /&gt;
			entity == &amp;quot;nbsp&amp;quot;&lt;br /&gt;
		) then&lt;br /&gt;
			return decode(&amp;quot;&amp;amp;&amp;quot; .. entity .. &amp;quot;;&amp;quot;)&lt;br /&gt;
		-- Catch hex entities beginning with &amp;amp;#X, which are valid but unsupported by mw.text.decode.&lt;br /&gt;
		elseif entity:sub(1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
			entity = entity:lower()&lt;br /&gt;
			return decode(&amp;quot;&amp;amp;&amp;quot; .. entity .. &amp;quot;;&amp;quot;)&lt;br /&gt;
		-- [[Module:utilities/data/entities]] is a lookup string of every named HTML entity (except the ones listed above), as they aren&amp;#039;t covered by mw.text.decode.&lt;br /&gt;
		-- mw.text.decode can decode lots of named entities if the second parameter is true, but around 600 are still not covered, and it&amp;#039;s less efficient than doing it this way anyway.&lt;br /&gt;
		else&lt;br /&gt;
			entities = entities or require(&amp;quot;Module:utilities/data/entities&amp;quot;)&lt;br /&gt;
			return entities:match(&amp;quot;%f[%Z]&amp;quot; .. entity .. &amp;quot;(%Z+)&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- A helper function to convert plaintext into HTML entities where these match the characters given in set.&lt;br /&gt;
-- By default, this resolves any pre-existing entities into plaintext first, to allow mixed input and to avoid accidental double-conversion. This can be turned off with the raw parameter.&lt;br /&gt;
function export.make_entities(text, set, raw)&lt;br /&gt;
	text = not raw and export.get_entities(text) or text&lt;br /&gt;
	return mw.text.encode(text, set)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- A helper function to strip wiki markup, giving the plaintext of what is displayed on the page.&lt;br /&gt;
function export.get_plaintext(text)&lt;br /&gt;
	text = text&lt;br /&gt;
		:gsub(&amp;quot;%[%[&amp;quot;, &amp;quot;\1&amp;quot;)&lt;br /&gt;
		:gsub(&amp;quot;%]%]&amp;quot;, &amp;quot;\2&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	-- Remove strip markers and HTML tags.&lt;br /&gt;
	text = mw.text.unstrip(text)&lt;br /&gt;
		:gsub(&amp;quot;&amp;lt;[^&amp;lt;&amp;gt;\1\2]+&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
	-- Parse internal links for the display text, and remove categories.&lt;br /&gt;
	text = require(&amp;quot;Module:links&amp;quot;).remove_links(text)&lt;br /&gt;
	&lt;br /&gt;
	-- Remove files.&lt;br /&gt;
	for _, falsePositive in ipairs({&amp;quot;File&amp;quot;, &amp;quot;Image&amp;quot;}) do&lt;br /&gt;
		text = text:gsub(&amp;quot;\1&amp;quot; .. falsePositive .. &amp;quot;:[^\1\2]+\2&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Parse external links for the display text.&lt;br /&gt;
	text = text:gsub(&amp;quot;%[(https?://[^%[%]]+)%]&amp;quot;,&lt;br /&gt;
		function(capture)&lt;br /&gt;
			return capture:match(&amp;quot;https?://[^%s%]]+%s([^%]]+)&amp;quot;) or &amp;quot;&amp;quot;&lt;br /&gt;
		end)&lt;br /&gt;
	&lt;br /&gt;
	text = text&lt;br /&gt;
		:gsub(&amp;quot;\1&amp;quot;, &amp;quot;[[&amp;quot;)&lt;br /&gt;
		:gsub(&amp;quot;\2&amp;quot;, &amp;quot;]]&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	-- Any remaining square brackets aren&amp;#039;t involved in links, but must be escaped to avoid creating new links.&lt;br /&gt;
	text = text:gsub(&amp;quot;[%[%]]&amp;quot;, mw.text.nowiki)&lt;br /&gt;
		&lt;br /&gt;
	-- Strip bold, italics and soft hyphens.&lt;br /&gt;
	text = text&lt;br /&gt;
		:gsub(&amp;quot;(&amp;#039;*)&amp;#039;&amp;#039;&amp;#039;(.-&amp;#039;*)&amp;#039;&amp;#039;&amp;#039;&amp;quot;, &amp;quot;%1%2&amp;quot;)&lt;br /&gt;
		:gsub(&amp;quot;(&amp;#039;*)&amp;#039;&amp;#039;(.-&amp;#039;*)&amp;#039;&amp;#039;&amp;quot;, &amp;quot;%1%2&amp;quot;)&lt;br /&gt;
		:gsub(&amp;quot;­&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	-- Get any HTML entities.&lt;br /&gt;
	-- Note: don&amp;#039;t decode URL percent encoding, as it shouldn&amp;#039;t be used in display text and may cause problems if % is used.&lt;br /&gt;
	text = export.get_entities(text)&lt;br /&gt;
	&lt;br /&gt;
	return mw.text.trim(text)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.plain_gsub(text, pattern, replacement)&lt;br /&gt;
	local invoked = false&lt;br /&gt;
	&lt;br /&gt;
	if type(text) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		invoked = true&lt;br /&gt;
		&lt;br /&gt;
		if text.args then&lt;br /&gt;
			local frame = text&lt;br /&gt;
			&lt;br /&gt;
			local params = {&lt;br /&gt;
				[1] = {},&lt;br /&gt;
				[2] = {},&lt;br /&gt;
				[3] = { allow_empty = true },&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			local args = require(&amp;quot;Module:parameters&amp;quot;).process(frame.args, params, nil, &amp;quot;utilities&amp;quot;, &amp;quot;plain_gsub&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			text = args[1]&lt;br /&gt;
			pattern = args[2]&lt;br /&gt;
			replacement = args[3]&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;If the first argument to plain_gsub is a table, it should be a frame object.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if not ( type(pattern) == &amp;quot;string&amp;quot; or type(pattern) == &amp;quot;number&amp;quot; ) then&lt;br /&gt;
			error(&amp;quot;The second argument to plain_gsub should be a string or a number.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if not ( type(replacement) == &amp;quot;string&amp;quot; or type(replacement) == &amp;quot;number&amp;quot; ) then&lt;br /&gt;
			error(&amp;quot;The third argument to plain_gsub should be a string or a number.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	pattern = export.pattern_escape(pattern)&lt;br /&gt;
	&lt;br /&gt;
	local gsub = require(&amp;quot;Module:string utilities&amp;quot;).gsub&lt;br /&gt;
	if invoked then&lt;br /&gt;
		return (gsub(text, pattern, replacement))&lt;br /&gt;
	else&lt;br /&gt;
		return gsub(text, pattern, replacement)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Format the categories with the appropriate sort key. CATEGORIES is a list of&lt;br /&gt;
categories.&lt;br /&gt;
	-- LANG is an object encapsulating a language; if nil, the object for&lt;br /&gt;
	   language code &amp;#039;und&amp;#039; (undetermined) will be used.&lt;br /&gt;
	-- SORT_KEY is placed in the category invocation, and indicates how the&lt;br /&gt;
	   page will sort in the respective category. Normally this should be nil,&lt;br /&gt;
	   and a default sort key based on the subpage name (the part after the&lt;br /&gt;
	   colon) will be used.&lt;br /&gt;
	-- SORT_BASE lets you override the default sort key used when SORT_KEY is&lt;br /&gt;
	   nil. Normally, this should be nil, and a language-specific default sort&lt;br /&gt;
	   key is computed from the subpage name (e.g. for Russian this converts&lt;br /&gt;
	   Cyrillic ё to a string consisting of Cyrillic е followed by U+10FFFF,&lt;br /&gt;
	   so that effectively ё sorts after е instead of the default Wikimedia&lt;br /&gt;
	   sort, which (I think) is based on Unicode sort order and puts ё after я,&lt;br /&gt;
	   the last letter of the Cyrillic alphabet.&lt;br /&gt;
	-- FORCE_OUTPUT forces normal output in all namespaces. Normally, nothing&lt;br /&gt;
	   is output if the page isn&amp;#039;t in the main, Appendix:, Reconstruction: or&lt;br /&gt;
	   Citations: namespaces.&lt;br /&gt;
	-- SC is a script object; if nil, the default will be used from the sort&lt;br /&gt;
	   base.&lt;br /&gt;
]]&lt;br /&gt;
function export.format_categories(categories, lang, sort_key, sort_base, force_output, sc)&lt;br /&gt;
	if type(lang) == &amp;quot;table&amp;quot; and not lang.getCode then&lt;br /&gt;
		error(&amp;quot;The second argument to format_categories should be a language object.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local title_obj = mw.title.getCurrentTitle()	&lt;br /&gt;
	local allowedNamespaces = {&lt;br /&gt;
		[0] = true, [100] = true, [114] = true, [118] = true -- (main), Appendix, Citations, Reconstruction&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if force_output or allowedNamespaces[title_obj.namespace] or title_obj.prefixedText == &amp;quot;Wiktionary:Sandbox&amp;quot; then&lt;br /&gt;
		local headword_data = mw.loadData(&amp;quot;Module:headword/data&amp;quot;)&lt;br /&gt;
		local pagename = headword_data.pagename&lt;br /&gt;
		local pagename_defaultsort = headword_data.pagename_defaultsort&lt;br /&gt;
		&lt;br /&gt;
		-- Generate a default sort key.&lt;br /&gt;
		if sort_key ~= &amp;quot;-&amp;quot; then&lt;br /&gt;
			if not lang then&lt;br /&gt;
				lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(&amp;quot;und&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			sort_base = (lang:makeSortKey(sort_base or pagename, sc))&lt;br /&gt;
			if sort_key and sort_key ~= &amp;quot;&amp;quot; then&lt;br /&gt;
				-- Gather some statistics regarding sort keys&lt;br /&gt;
				if not no_track and sort_key:uupper() == sort_base then&lt;br /&gt;
					table.insert(categories, &amp;quot;Sort key tracking/redundant&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				sort_key = sort_base&lt;br /&gt;
			end&lt;br /&gt;
			-- If the sort key is empty, remove it.&lt;br /&gt;
			if sort_key == &amp;quot;&amp;quot; then&lt;br /&gt;
				sort_key = nil&lt;br /&gt;
			end&lt;br /&gt;
		-- If the sort key is &amp;quot;-&amp;quot;, bypass the process of generating a sort key altogether. This is desirable when categorising (e.g.) translation requests, as the pages to be categorised are always in English/Translingual.&lt;br /&gt;
		else&lt;br /&gt;
			sort_key = sort_base and sort_base:uupper() or pagename_defaultsort&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local out_categories = {}&lt;br /&gt;
		for key, cat in ipairs(categories) do&lt;br /&gt;
			out_categories[key] = &amp;quot;[[Category:&amp;quot; .. cat .. (sort_key and &amp;quot;|&amp;quot; .. sort_key or &amp;quot;&amp;quot;) .. &amp;quot;]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return table.concat(out_categories, &amp;quot;&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.catfix(lang, sc)&lt;br /&gt;
	if not lang then&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;catfix/no lang&amp;quot;)&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif type(lang) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;catfix/lang not table&amp;quot;)&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local canonicalName = lang:getCanonicalName() or error(&amp;#039;The first argument to the function &amp;quot;catfix&amp;quot; should be a language object from Module:languages.&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	if sc and not sc.getCode then&lt;br /&gt;
		error(&amp;#039;The second argument to the function &amp;quot;catfix&amp;quot; should be a script object from Module:scripts.&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- To add script classes to links on pages created by category boilerplate templates.&lt;br /&gt;
	if not sc then&lt;br /&gt;
		sc = data.catfix_scripts[lang:getCode()]&lt;br /&gt;
		if sc then&lt;br /&gt;
			sc = require(&amp;quot;Module:scripts&amp;quot;).getByCode(sc)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return &amp;quot;&amp;lt;span id=\&amp;quot;catfix\&amp;quot; style=\&amp;quot;display:none;\&amp;quot; class=\&amp;quot;CATFIX-&amp;quot; .. mw.uri.anchorEncode(canonicalName) .. &amp;quot;\&amp;quot;&amp;gt;&amp;quot; ..&lt;br /&gt;
		require(&amp;quot;Module:script utilities&amp;quot;).tag_text(&amp;quot;&amp;amp;nbsp;&amp;quot;, lang, sc, nil) ..&lt;br /&gt;
		&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.catfix_template(frame)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {},&lt;br /&gt;
		[2] = { alias_of = &amp;quot;sc&amp;quot; },&lt;br /&gt;
		[&amp;quot;sc&amp;quot;] = {},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(frame:getParent().args, params, nil, &amp;quot;utilities&amp;quot;, &amp;quot;catfix_template&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(args[1]) or require(&amp;quot;Module:languages&amp;quot;).err(args[1], 1)&lt;br /&gt;
	&lt;br /&gt;
	local sc = args.sc&lt;br /&gt;
	if sc then&lt;br /&gt;
		sc = require(&amp;quot;Module:scripts&amp;quot;).getByCode(sc) or error(&amp;#039;The script code &amp;quot;&amp;#039; .. sc .. &amp;#039;&amp;quot;, provided in the second parameter, is not valid.&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return export.catfix(lang, sc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Not exporting because it is not used yet.&lt;br /&gt;
local function getDateTense(frame) &lt;br /&gt;
	local name_num_mapping = {[&amp;quot;January&amp;quot;] = 1, [&amp;quot;February&amp;quot;] = 2, [&amp;quot;March&amp;quot;] = 3, [&amp;quot;April&amp;quot;] = 4, [&amp;quot;May&amp;quot;] = 5, [&amp;quot;June&amp;quot;] = 6, &lt;br /&gt;
		[&amp;quot;July&amp;quot;] = 7, [&amp;quot;August&amp;quot;] = 8, [&amp;quot;September&amp;quot;] = 9, [&amp;quot;October&amp;quot;] = 10, [&amp;quot;November&amp;quot;] = 11, [&amp;quot;December&amp;quot;] = 12, &lt;br /&gt;
		[1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7, [8] = 8, [9] = 9, [10] = 10, [11] = 11, [12] = 12}&lt;br /&gt;
	local month = name_num_mapping[frame.args[2]]&lt;br /&gt;
	local date = os.time({year = frame.args[1], day = frame.args[3], month = month})&lt;br /&gt;
	local today = os.time() -- 12 AM/PM&lt;br /&gt;
	local diff = os.difftime(date, today)&lt;br /&gt;
	local daylength = 24 * 3600&lt;br /&gt;
	&lt;br /&gt;
	if diff &amp;lt; -daylength / 2 then return &amp;quot;past&amp;quot;&lt;br /&gt;
	else &lt;br /&gt;
		if diff &amp;gt; daylength / 2  then return &amp;quot;future&amp;quot;&lt;br /&gt;
		else return &amp;quot;present&amp;quot; end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.make_id(lang, str)&lt;br /&gt;
	--[[	If called with invoke, first argument is a frame object.&lt;br /&gt;
			If called by a module, first argument is a language object. ]]&lt;br /&gt;
	local invoked = false&lt;br /&gt;
	&lt;br /&gt;
	if type(lang) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		if lang.args then&lt;br /&gt;
			invoked = true&lt;br /&gt;
			&lt;br /&gt;
			local frame = lang&lt;br /&gt;
			&lt;br /&gt;
			local params = {&lt;br /&gt;
				[1] = {},&lt;br /&gt;
				[2] = {},&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			local args = require(&amp;quot;Module:parameters&amp;quot;).process(frame:getParent().args, params, nil, &amp;quot;utilities&amp;quot;, &amp;quot;make_id&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			local langCode = args[1]&lt;br /&gt;
			str = args[2]&lt;br /&gt;
			&lt;br /&gt;
			local m_languages = require(&amp;quot;Module:languages&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			lang = m_languages.getByCode(langCode) or m_languages.err(langCode, 1)&lt;br /&gt;
		elseif not lang.getCanonicalName then&lt;br /&gt;
			error(&amp;quot;The first argument to make_id should be a language object.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not ( type(str) == &amp;quot;string&amp;quot; or type(str) == &amp;quot;number&amp;quot; ) then&lt;br /&gt;
		error(&amp;quot;The second argument to make_id should be a string or a number.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local id = require(&amp;quot;Module:senseid&amp;quot;).anchor(lang, str)&lt;br /&gt;
	&lt;br /&gt;
	if invoked then&lt;br /&gt;
		return &amp;#039;&amp;lt;li class=&amp;quot;senseid&amp;quot; id=&amp;quot;&amp;#039; .. id .. &amp;#039;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return id&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Given a type (as a string) and an arbitrary number of entities, checks whether all of those entities are language, family, script, writing system or Wikimedia language objects. Useful for error handling in functions that require one of these kinds of object.&lt;br /&gt;
-- If noErr is set, the function returns false instead of throwing an error, which allows customised error handling to be done in the calling function.&lt;br /&gt;
function export.check_object(typ, noErr, ...)&lt;br /&gt;
	local function fail(message)&lt;br /&gt;
		if noErr then&lt;br /&gt;
			return false&lt;br /&gt;
		else&lt;br /&gt;
			error(message, 3)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local objs = {...}&lt;br /&gt;
	if #objs == 0 then&lt;br /&gt;
		return fail(&amp;quot;Must provide at least one object to check.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	for _, obj in ipairs{...} do&lt;br /&gt;
		if type(obj) ~= &amp;quot;table&amp;quot; or type(obj.hasType) ~= &amp;quot;function&amp;quot; then&lt;br /&gt;
			return fail(&amp;quot;Function expected a &amp;quot; .. typ .. &amp;quot; object, but received a &amp;quot; .. type(obj) .. &amp;quot; instead.&amp;quot;)&lt;br /&gt;
		elseif not (typ == &amp;quot;object&amp;quot; or obj:hasType(typ)) then&lt;br /&gt;
			for _, wrong_type in ipairs{&amp;quot;family&amp;quot;, &amp;quot;language&amp;quot;, &amp;quot;script&amp;quot;, &amp;quot;Wikimedia language&amp;quot;, &amp;quot;writing system&amp;quot;} do&lt;br /&gt;
				if obj:hasType(wrong_type) then&lt;br /&gt;
					return fail(&amp;quot;Function expected a &amp;quot; .. typ .. &amp;quot; object, but received a &amp;quot; .. wrong_type .. &amp;quot; object instead.&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return fail(&amp;quot;Function expected a &amp;quot; .. typ .. &amp;quot; object, but received another type of object instead.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:49 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Utilities</comments>
		</item>
		<item>
			<title>Module:Table</title>
			<link>https://test.st34an.tech/index.php?title=Module:Table&amp;diff=37&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Table&amp;diff=37&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Table&quot; title=&quot;Module:Table&quot;&gt;Module:Table&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--                      table (formerly TableTools)                               --&lt;br /&gt;
--                                                                                --&lt;br /&gt;
-- This module includes a number of functions for dealing with Lua tables.        --&lt;br /&gt;
-- It is a meta-module, meant to be called from other Lua modules, and should     --&lt;br /&gt;
-- not be called directly from #invoke.                                           --&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Inserting new values into a table using a local &amp;quot;index&amp;quot; variable, which is&lt;br /&gt;
	incremented each time, is faster than using &amp;quot;table.insert(t, x)&amp;quot; or&lt;br /&gt;
	&amp;quot;t[#t + 1] = x&amp;quot;. See the talk page.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require(&amp;#039;libraryUtil&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local export = {}&lt;br /&gt;
&lt;br /&gt;
-- Define often-used variables and functions.&lt;br /&gt;
local floor = math.floor&lt;br /&gt;
local infinity = math.huge&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local checkTypeMulti = libraryUtil.checkTypeMulti&lt;br /&gt;
&lt;br /&gt;
local function _check(funcName, expectType)&lt;br /&gt;
	if type(expectType) == &amp;quot;string&amp;quot; then&lt;br /&gt;
		return function(argIndex, arg, nilOk)&lt;br /&gt;
			checkType(funcName, argIndex, arg, expectType, nilOk)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return function(argIndex, arg, expectType, nilOk)&lt;br /&gt;
			if type(expectType) == &amp;quot;table&amp;quot; then&lt;br /&gt;
				checkTypeMulti(funcName, argIndex, arg, expectType, nilOk)&lt;br /&gt;
			else&lt;br /&gt;
				checkType(funcName, argIndex, arg, expectType, nilOk)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isPositiveInteger&lt;br /&gt;
--&lt;br /&gt;
-- This function returns true if the given value is a positive integer, and false&lt;br /&gt;
-- if not. Although it doesn&amp;#039;t operate on tables, it is included here as it is&lt;br /&gt;
-- useful for determining whether a given table key is in the array part or the&lt;br /&gt;
-- hash part of a table.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function export.isPositiveInteger(v)&lt;br /&gt;
	return type(v) == &amp;#039;number&amp;#039; and v &amp;gt;= 1 and floor(v) == v and v &amp;lt; infinity&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isNan&lt;br /&gt;
--&lt;br /&gt;
-- This function returns true if the given number is a NaN value, and false&lt;br /&gt;
-- if not. Although it doesn&amp;#039;t operate on tables, it is included here as it is&lt;br /&gt;
-- useful for determining whether a value can be a valid table key. Lua will&lt;br /&gt;
-- generate an error if a NaN is used as a table key.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function export.isNan(v)&lt;br /&gt;
	if type(v) == &amp;#039;number&amp;#039; and tostring(v) == &amp;#039;-nan&amp;#039; then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- shallowcopy&lt;br /&gt;
--&lt;br /&gt;
-- This returns a clone of an object. If the object is a table, the value&lt;br /&gt;
-- returned is a new table, but all subtables and functions are shared.&lt;br /&gt;
-- Metamethods are respected, but the returned table will have no metatable of&lt;br /&gt;
-- its own.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function export.shallowcopy(orig)&lt;br /&gt;
	local orig_type = type(orig)&lt;br /&gt;
	local copy&lt;br /&gt;
	if orig_type == &amp;#039;table&amp;#039; then&lt;br /&gt;
		copy = {}&lt;br /&gt;
		for orig_key, orig_value in pairs(orig) do&lt;br /&gt;
			copy[orig_key] = orig_value&lt;br /&gt;
		end&lt;br /&gt;
	else -- number, string, boolean, etc&lt;br /&gt;
		copy = orig&lt;br /&gt;
	end&lt;br /&gt;
	return copy&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- An alias for shallowcopy(); prefer shallowcopy().&lt;br /&gt;
function export.shallowClone(t)&lt;br /&gt;
	return export.shallowcopy(t)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- deepcopy&lt;br /&gt;
--&lt;br /&gt;
-- Recursive deep copy function. Preserves copied identities of subtables.&lt;br /&gt;
-- A more powerful version of mw.clone, as it is able to clone recursive tables without getting into an infinite loop.&lt;br /&gt;
-- NOTE: protected metatables will not be copied (i.e. those hidden behind a __metatable metamethod), as they are not accessible by Lua&amp;#039;s design. Instead, the output of the __metatable method will be used instead.&lt;br /&gt;
-- An exception is made for data loaded via mw.loadData, which has its metatable stripped by default. This is because it has a protected metatable, and the substitute metatable causes behaviour that is generally unwanted. This exception can be overridden by setting `rawCopy` to true.&lt;br /&gt;
-- If `noMetatable` is true, then metatables will not be present in the copy at all.&lt;br /&gt;
-- If `keepLoadedData` is true, then any data loaded via mw.loadData will not be copied, and the original will be used instead. This is useful in iterative contexts where it is necessary to copy data being destructively modified, because objects loaded via mw.loadData are immutable.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function export.deepcopy(orig, noMetatable, rawCopy, keepLoadedData)&lt;br /&gt;
	local already_seen = {}&lt;br /&gt;
	&lt;br /&gt;
	local function dc(orig, includeMetatable)&lt;br /&gt;
		if keepLoadedData then&lt;br /&gt;
			local mt = getmetatable(orig)&lt;br /&gt;
			if mt and mt.mw_loadData then&lt;br /&gt;
				return orig&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if type(orig) == &amp;quot;table&amp;quot; then&lt;br /&gt;
			if not already_seen[orig] then&lt;br /&gt;
				local copy = {}&lt;br /&gt;
				already_seen[orig] = copy&lt;br /&gt;
				for key, value in pairs(orig) do&lt;br /&gt;
					copy[dc(key, includeMetatable)] = dc(value, includeMetatable)&lt;br /&gt;
				end&lt;br /&gt;
				if includeMetatable then&lt;br /&gt;
					local mt = getmetatable(orig)&lt;br /&gt;
					if type(mt) == &amp;quot;table&amp;quot; and (&lt;br /&gt;
						(not mt.mw_loadData) or&lt;br /&gt;
						(mt.mw_loadData and rawCopy)&lt;br /&gt;
					) then &lt;br /&gt;
						setmetatable(copy, dc(mt, includeMetatable))&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return already_seen[orig]&lt;br /&gt;
		else&lt;br /&gt;
			return orig&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return dc(orig, not noMetatable)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- append&lt;br /&gt;
--&lt;br /&gt;
-- This appends any number of tables together and returns the result. Compare the Lisp&lt;br /&gt;
-- expression (append list1 list2 ...).&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function export.append(...)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for i=1,select(&amp;#039;#&amp;#039;, ...) do&lt;br /&gt;
		local argt = select(i, ...)&lt;br /&gt;
		checkType(&amp;#039;append&amp;#039;, i, argt, &amp;#039;table&amp;#039;)&lt;br /&gt;
		for _, v in ipairs(argt) do&lt;br /&gt;
			table.insert(ret, v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- extendList&lt;br /&gt;
--&lt;br /&gt;
-- Extend an existing list by a new list, modifying the existing list in-place.&lt;br /&gt;
-- Compare the Python expression list.extend(new_items). If `insertIfNot` is specified,&lt;br /&gt;
-- insertion uses export.insertIfNot() instead of table.insert(), which ensures that&lt;br /&gt;
-- duplicate items do not get inserted (at the cost of an M*N operation, where&lt;br /&gt;
-- M = #list and N = #new_items).&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function export.extendList(list, new_items, insertIfNOt)&lt;br /&gt;
	checkType(&amp;#039;extendList&amp;#039;, 1, list, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;extendList&amp;#039;, 2, new_items, &amp;#039;table&amp;#039;)&lt;br /&gt;
	for _, item in ipairs(new_items) do&lt;br /&gt;
		if insertIfNot then&lt;br /&gt;
			export.insertIfNot(list, item)&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(list, item)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- removeDuplicates&lt;br /&gt;
--&lt;br /&gt;
-- This removes duplicate values from an array. Non-positive-integer keys are&lt;br /&gt;
-- ignored. The earliest value is kept, and all subsequent duplicate values are&lt;br /&gt;
-- removed, but otherwise the array order is unchanged.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function export.removeDuplicates(t)&lt;br /&gt;
	checkType(&amp;#039;removeDuplicates&amp;#039;, 1, t, &amp;#039;table&amp;#039;)&lt;br /&gt;
	local isNan = export.isNan&lt;br /&gt;
	local ret, exists = {}, {}&lt;br /&gt;
	local index = 1&lt;br /&gt;
	for _, v in ipairs(t) do&lt;br /&gt;
		if isNan(v) then&lt;br /&gt;
			-- NaNs can&amp;#039;t be table keys, and they are also unique, so we don&amp;#039;t need to check existence.&lt;br /&gt;
			ret[index] = v&lt;br /&gt;
			index = index + 1&lt;br /&gt;
		else&lt;br /&gt;
			if not exists[v] then&lt;br /&gt;
				ret[index] = v&lt;br /&gt;
				index = index + 1&lt;br /&gt;
				exists[v] = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- numKeys&lt;br /&gt;
--&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of any numerical&lt;br /&gt;
-- keys that have non-nil values, sorted in numerical order.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function export.numKeys(t, checked)&lt;br /&gt;
	if not checked then&lt;br /&gt;
		checkType(&amp;#039;numKeys&amp;#039;, 1, t, &amp;#039;table&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local isPositiveInteger = export.isPositiveInteger&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	local index = 1&lt;br /&gt;
	for k, _ in pairs(t) do&lt;br /&gt;
		if isPositiveInteger(k) then&lt;br /&gt;
			nums[index] = k&lt;br /&gt;
			index = index + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.maxIndex(t)&lt;br /&gt;
	checkType(&amp;#039;maxIndex&amp;#039;, 1, t, &amp;#039;table&amp;#039;)&lt;br /&gt;
	local positiveIntegerKeys = export.numKeys(t)&lt;br /&gt;
	if positiveIntegerKeys[1] then&lt;br /&gt;
		return math.max(unpack(positiveIntegerKeys))&lt;br /&gt;
	else&lt;br /&gt;
		return 0 -- ???&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- affixNums&lt;br /&gt;
--&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of keys with the&lt;br /&gt;
-- specified prefix and suffix.&lt;br /&gt;
-- affixNums({a1 = &amp;#039;foo&amp;#039;, a3 = &amp;#039;bar&amp;#039;, a6 = &amp;#039;baz&amp;#039;}, &amp;quot;a&amp;quot;)&lt;br /&gt;
--		↓&lt;br /&gt;
-- {1, 3, 6}.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function export.affixNums(t, prefix, suffix)&lt;br /&gt;
	local check = _check(&amp;#039;affixNums&amp;#039;)&lt;br /&gt;
	check(1, t, &amp;#039;table&amp;#039;)&lt;br /&gt;
	check(2, prefix, &amp;#039;string&amp;#039;, true)&lt;br /&gt;
	check(3, suffix, &amp;#039;string&amp;#039;, true)&lt;br /&gt;
	&lt;br /&gt;
	local function cleanPattern(s)&lt;br /&gt;
		-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.&lt;br /&gt;
		s = s:gsub(&amp;#039;([%(%)%%%.%[%]%*%+%-%?%^%$])&amp;#039;, &amp;#039;%%%1&amp;#039;)&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	prefix = prefix or &amp;#039;&amp;#039;&lt;br /&gt;
	suffix = suffix or &amp;#039;&amp;#039;&lt;br /&gt;
	prefix = cleanPattern(prefix)&lt;br /&gt;
	suffix = cleanPattern(suffix)&lt;br /&gt;
	local pattern = &amp;#039;^&amp;#039; .. prefix .. &amp;#039;([1-9]%d*)&amp;#039; .. suffix .. &amp;#039;$&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	local index = 1&lt;br /&gt;
	for k, _ in pairs(t) do&lt;br /&gt;
		if type(k) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			local num = mw.ustring.match(k, pattern)&lt;br /&gt;
			if num then&lt;br /&gt;
				nums[index] = tonumber(num)&lt;br /&gt;
				index = index + 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- numData&lt;br /&gt;
--&lt;br /&gt;
-- Given a table with keys like (&amp;quot;foo1&amp;quot;, &amp;quot;bar1&amp;quot;, &amp;quot;foo2&amp;quot;, &amp;quot;baz2&amp;quot;), returns a table&lt;br /&gt;
-- of subtables in the format&lt;br /&gt;
-- { [1] = {foo = &amp;#039;text&amp;#039;, bar = &amp;#039;text&amp;#039;}, [2] = {foo = &amp;#039;text&amp;#039;, baz = &amp;#039;text&amp;#039;} }&lt;br /&gt;
-- Keys that don&amp;#039;t end with an integer are stored in a subtable named &amp;quot;other&amp;quot;.&lt;br /&gt;
-- The compress option compresses the table so that it can be iterated over with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function export.numData(t, compress)&lt;br /&gt;
	local check = _check(&amp;#039;numData&amp;#039;)&lt;br /&gt;
	check(1, t, &amp;#039;table&amp;#039;)&lt;br /&gt;
	check(2, compress, &amp;#039;boolean&amp;#039;, true)&lt;br /&gt;
	&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		local prefix, num = tostring(k):match(&amp;#039;^([^0-9]*)([1-9][0-9]*)$&amp;#039;)&lt;br /&gt;
		if num then&lt;br /&gt;
			num = tonumber(num)&lt;br /&gt;
			local subtable = ret[num] or {}&lt;br /&gt;
			if prefix == &amp;#039;&amp;#039; then&lt;br /&gt;
				-- Positional parameters match the blank string; put them at the start of the subtable instead.&lt;br /&gt;
				prefix = 1&lt;br /&gt;
			end&lt;br /&gt;
			subtable[prefix] = v&lt;br /&gt;
			ret[num] = subtable&lt;br /&gt;
		else&lt;br /&gt;
			local subtable = ret.other or {}&lt;br /&gt;
			subtable[k] = v&lt;br /&gt;
			ret.other = subtable&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if compress then&lt;br /&gt;
		local other = ret.other&lt;br /&gt;
		ret = export.compressSparseArray(ret)&lt;br /&gt;
		ret.other = other&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- compressSparseArray&lt;br /&gt;
--&lt;br /&gt;
-- This takes an array with one or more nil values, and removes the nil values&lt;br /&gt;
-- while preserving the order, so that the array can be safely traversed with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function export.compressSparseArray(t)&lt;br /&gt;
	checkType(&amp;#039;compressSparseArray&amp;#039;, 1, t, &amp;#039;table&amp;#039;)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local index = 1&lt;br /&gt;
	local nums = export.numKeys(t)&lt;br /&gt;
	for _, num in ipairs(nums) do&lt;br /&gt;
		ret[index] = t[num]&lt;br /&gt;
		index = index + 1&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- sparseIpairs&lt;br /&gt;
--&lt;br /&gt;
-- This is an iterator for sparse arrays. It can be used like ipairs, but can&lt;br /&gt;
-- handle nil values.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function export.sparseIpairs(t)&lt;br /&gt;
	checkType(&amp;#039;sparseIpairs&amp;#039;, 1, t, &amp;#039;table&amp;#039;)&lt;br /&gt;
	local nums = export.numKeys(t)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	return function()&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		local key = nums[i]&lt;br /&gt;
		if key then&lt;br /&gt;
			return key, t[key]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- size&lt;br /&gt;
--&lt;br /&gt;
-- This returns the size of a key/value pair table. It will also work on arrays,&lt;br /&gt;
-- but for arrays it is more efficient to use the # operator.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function export.size(t)&lt;br /&gt;
	checkType(&amp;#039;size&amp;#039;, 1, t, &amp;#039;table&amp;#039;)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for _ in pairs(t) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return i&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- This returns the length of a table, or the first integer key n counting from&lt;br /&gt;
-- 1 such that t[n + 1] is nil. It is similar to the operator #, but may return&lt;br /&gt;
-- a different value when there are gaps in the array portion of the table.&lt;br /&gt;
-- Intended to be used on data loaded with mw.loadData. For other tables, use #.&lt;br /&gt;
--]]&lt;br /&gt;
function export.length(t)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	repeat&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	until t[i] == nil&lt;br /&gt;
	return i - 1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Recursively compare two values that may be tables, including tables with&lt;br /&gt;
nested tables as values. Return true if both values are structurally equal.&lt;br /&gt;
Note that this handles arbitary levels of nesting. If all tables are known&lt;br /&gt;
to be lists (with only integral keys), use export.deepEqualsList, which will&lt;br /&gt;
be more efficient.&lt;br /&gt;
&lt;br /&gt;
If `includeMetatables` is true, then metatables will also be compared. However,&lt;br /&gt;
by default, metatables from mw.loadData will not be included in this comparison.&lt;br /&gt;
This is because the metatable changes each time mw.loadData is used, even if&lt;br /&gt;
it is used on the same data. This can be overridden by setting `rawCompare` to&lt;br /&gt;
true.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function export.deepEquals(x, y, includeMetatables, rawCompare)&lt;br /&gt;
	local already_seen = {}&lt;br /&gt;
	&lt;br /&gt;
	-- This strips metatables only from data loaded via mw.loadData.&lt;br /&gt;
	if includeMetatables and not rawCompare then&lt;br /&gt;
		x = export.deepcopy(x)&lt;br /&gt;
		y = export.deepcopy(y)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local function de(x, y)&lt;br /&gt;
		if type(x) == &amp;quot;table&amp;quot; and type(y) == &amp;quot;table&amp;quot; then&lt;br /&gt;
			-- Two tables are the same if they have the same number of&lt;br /&gt;
			-- elements and all keys that are present in one of the tables &lt;br /&gt;
			-- compare equal to the corresponding keys in the other table, &lt;br /&gt;
			-- using structural comparison.&lt;br /&gt;
			-- If an element of x is a table, then its table in `already_seen` &lt;br /&gt;
			-- is checked for y (which means they have been compared before). &lt;br /&gt;
			-- If so, immediately iterate to avoid duplicated work. This avoids &lt;br /&gt;
			-- infinite loops.&lt;br /&gt;
			if not already_seen[x] then&lt;br /&gt;
				already_seen[x] = {}&lt;br /&gt;
				if not already_seen[x][y] then&lt;br /&gt;
					already_seen[x][y] = true&lt;br /&gt;
					local sizex = 0&lt;br /&gt;
					for key, value in pairs(x) do&lt;br /&gt;
						if not de(value, y[key]) then&lt;br /&gt;
							return false&lt;br /&gt;
						end&lt;br /&gt;
						sizex = sizex + 1&lt;br /&gt;
					end&lt;br /&gt;
					if includeMetatables and not de(getmetatable(x), getmetatable(y)) then&lt;br /&gt;
						return false&lt;br /&gt;
					end&lt;br /&gt;
					local sizey = export.size(y)&lt;br /&gt;
					if sizex ~= sizey then&lt;br /&gt;
						return false&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
		return x == y&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return de(x, y)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Recursively compare two values that may be lists (i.e. tables with integral&lt;br /&gt;
keys), including lists with nested lists as values. Return true if both values&lt;br /&gt;
are structurally equal. Note that this handles arbitary levels of nesting.&lt;br /&gt;
Results are undefined if tables with non-integral keys are present anywhere in&lt;br /&gt;
either structure; if that may be the case, use export.deepEquals, which will&lt;br /&gt;
handle such tables correctly but be less efficient on lists than&lt;br /&gt;
export.deepEqualsList.&lt;br /&gt;
]]&lt;br /&gt;
function export.deepEqualsList(x, y)&lt;br /&gt;
	local already_seen = {}&lt;br /&gt;
	&lt;br /&gt;
	local function de(x, y)&lt;br /&gt;
		if type(x) == &amp;quot;table&amp;quot; and type(y) == &amp;quot;table&amp;quot; then&lt;br /&gt;
			if not already_seen[x] then&lt;br /&gt;
				already_seen[x] = {}&lt;br /&gt;
				if not already_seen[x][y] then&lt;br /&gt;
					already_seen[x][y] = true&lt;br /&gt;
					if #x ~= #y then&lt;br /&gt;
						return false&lt;br /&gt;
					end &lt;br /&gt;
					for key, value in pairs(x) do&lt;br /&gt;
						if not de(value, y[key]) then&lt;br /&gt;
							return false&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
		return x == y&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return de(x, y)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Given a list and a value to be found, return true if the value is in the array&lt;br /&gt;
portion of the list. Comparison is by value, using `deepEquals`.&lt;br /&gt;
&lt;br /&gt;
NOTE: This used to do shallow comparison by default and accepted a third&lt;br /&gt;
&amp;#039;deepCompare&amp;#039; param to do deep comparison. This param is still accepted but now&lt;br /&gt;
ignored.&lt;br /&gt;
]]&lt;br /&gt;
function export.contains(list, x)&lt;br /&gt;
	checkType(&amp;#039;contains&amp;#039;, 1, list, &amp;#039;table&amp;#039;)&lt;br /&gt;
	for _, v in ipairs(list) do&lt;br /&gt;
		if export.deepEquals(v, x) then return true end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Given a general table and a value to be found, return true if the value is in&lt;br /&gt;
either the array or hashmap portion of the table. Comparison is by value, using&lt;br /&gt;
`deepEquals`.&lt;br /&gt;
&lt;br /&gt;
NOTE: This used to do shallow comparison by default and accepted a third&lt;br /&gt;
&amp;#039;deepCompare&amp;#039; param to do deep comparison. This param is still accepted but now&lt;br /&gt;
ignored.&lt;br /&gt;
]]&lt;br /&gt;
function export.tableContains(tbl, x)&lt;br /&gt;
	checkType(&amp;#039;tableContains&amp;#039;, 1, tbl, &amp;#039;table&amp;#039;)&lt;br /&gt;
	for _, v in pairs(tbl) do&lt;br /&gt;
		if export.deepEquals(v, x) then return true end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Given a list and a value to be inserted, append or insert the value if not&lt;br /&gt;
already present in the list. Comparison is by value, using `deepEquals`.&lt;br /&gt;
Appends to the end, like the default behavior of table.insert(), unless `pos`&lt;br /&gt;
is given, in which case insertion happens at position `pos` (i.e. before the&lt;br /&gt;
existing item at position `pos`).&lt;br /&gt;
&lt;br /&gt;
NOTE: The order of `item` and `pos` is reversed in comparison to table.insert(),&lt;br /&gt;
which uses `table.insert(list, item)` to insert at the end but&lt;br /&gt;
`table.insert(list, pos, item)` to insert at position POS.&lt;br /&gt;
&lt;br /&gt;
NOTE: This used to do shallow comparison by default and accepted a fourth&lt;br /&gt;
&amp;#039;deepCompare&amp;#039; param to do deep comparison. This param is still accepted but now&lt;br /&gt;
ignored.&lt;br /&gt;
]]&lt;br /&gt;
function export.insertIfNot(list, item, pos)&lt;br /&gt;
	if not export.contains(list, item) then&lt;br /&gt;
		if pos then&lt;br /&gt;
			table.insert(list, pos, item)&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(list, item)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Finds key for specified value in a given table.&lt;br /&gt;
	Roughly equivalent to reversing the key-value pairs in the table –&lt;br /&gt;
		reversed_table = { [value1] = key1, [value2] = key2, ... }&lt;br /&gt;
	– and then returning reversed_table[valueToFind].&lt;br /&gt;
	&lt;br /&gt;
	The value can only be a string or a number&lt;br /&gt;
	(not nil, a boolean, a table, or a function).&lt;br /&gt;
	&lt;br /&gt;
	Only reliable if there is just one key with the specified value.&lt;br /&gt;
	Otherwise, the function returns the first key found,&lt;br /&gt;
	and the output is unpredictable.&lt;br /&gt;
]]&lt;br /&gt;
function export.keyFor(t, valueToFind)&lt;br /&gt;
	local check = _check(&amp;#039;keyFor&amp;#039;)&lt;br /&gt;
	check(1, t, &amp;#039;table&amp;#039;)&lt;br /&gt;
	check(2, valueToFind, { &amp;#039;string&amp;#039;, &amp;#039;number&amp;#039; })&lt;br /&gt;
	&lt;br /&gt;
	for key, value in pairs(t) do&lt;br /&gt;
		if value == valueToFind then&lt;br /&gt;
			return key&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	The default sorting function used in export.keysToList if no keySort&lt;br /&gt;
	is defined.&lt;br /&gt;
]]&lt;br /&gt;
local function defaultKeySort(key1, key2)&lt;br /&gt;
	-- &amp;quot;number&amp;quot; &amp;lt; &amp;quot;string&amp;quot;, so numbers will be sorted before strings.&lt;br /&gt;
	local type1, type2 = type(key1), type(key2)&lt;br /&gt;
	if type1 ~= type2 then&lt;br /&gt;
		return type1 &amp;lt; type2&lt;br /&gt;
	else&lt;br /&gt;
		return key1 &amp;lt; key2&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Returns a list of the keys in a table, sorted using either the default&lt;br /&gt;
	table.sort function or a custom keySort function.&lt;br /&gt;
	If there are only numerical keys, numKeys is probably more efficient.&lt;br /&gt;
]]&lt;br /&gt;
function export.keysToList(t, keySort, checked)&lt;br /&gt;
	if not checked then&lt;br /&gt;
		local check = _check(&amp;#039;keysToList&amp;#039;)&lt;br /&gt;
		check(1, t, &amp;#039;table&amp;#039;)&lt;br /&gt;
		check(2, keySort, &amp;#039;function&amp;#039;, true)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local list = {}&lt;br /&gt;
	local index = 1&lt;br /&gt;
	for key, _ in pairs(t) do&lt;br /&gt;
		list[index] = key&lt;br /&gt;
		index = index + 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Place numbers before strings, otherwise sort using &amp;lt;.&lt;br /&gt;
	if not keySort then&lt;br /&gt;
		keySort = defaultKeySort&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.sort(list, keySort)&lt;br /&gt;
	&lt;br /&gt;
	return list&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Iterates through a table, with the keys sorted using the keysToList function.&lt;br /&gt;
	If there are only numerical keys, sparseIpairs is probably more efficient.&lt;br /&gt;
]]&lt;br /&gt;
function export.sortedPairs(t, keySort)&lt;br /&gt;
	local check = _check(&amp;#039;keysToList&amp;#039;)&lt;br /&gt;
	check(1, t, &amp;#039;table&amp;#039;)&lt;br /&gt;
	check(2, keySort, &amp;#039;function&amp;#039;, true)&lt;br /&gt;
	&lt;br /&gt;
	local list = export.keysToList(t, keySort, true)&lt;br /&gt;
	&lt;br /&gt;
	local i = 0&lt;br /&gt;
	return function()&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		local key = list[i]&lt;br /&gt;
		if key ~= nil then&lt;br /&gt;
			return key, t[key]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.reverseIpairs(list)&lt;br /&gt;
	checkType(&amp;#039;reverse_ipairs&amp;#039;, 1, list, &amp;#039;table&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	local i = #list + 1&lt;br /&gt;
	return function()&lt;br /&gt;
		i = i - 1&lt;br /&gt;
		if list[i] ~= nil then&lt;br /&gt;
			return i, list[i]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	A set of functions that, given an array and function, iterate through the array applying that function.&lt;br /&gt;
	`reduce` applies func(r, k, v), and returns the result, where r is the value calculated so far, k is an index, and v is the value at index k.  For example, reduce(array, function(a, b) return a + b end) will return the sum of `array`.&lt;br /&gt;
	`apply` applies func(k, v), and returns the modified array. For example, apply(array, function(a) return 2*a end) will return an array where each member of `array` has been doubled.&lt;br /&gt;
	`all` returns whether func(k, v) is true for all iterations.&lt;br /&gt;
	`any` returns whether func(k, v) is true for at least one iteration.&lt;br /&gt;
	&lt;br /&gt;
	Optional arguments:&lt;br /&gt;
		i: start index; negative values count from the end of the array&lt;br /&gt;
		j: end index; negative values count from the end of the array&lt;br /&gt;
		s: step increment&lt;br /&gt;
		These must be non-zero integers.&lt;br /&gt;
		The function will determine where to iterate from, whether to iterate forwards or backwards and by how much, based on these inputs (see examples below for default behaviours).&lt;br /&gt;
	Examples:&lt;br /&gt;
		No values for i, j or s results in forward iteration from the start to the end in steps of 1 (the default).&lt;br /&gt;
		s=-1 results in backward iteration from the end to the start in steps of 1.&lt;br /&gt;
		i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. s=-1).&lt;br /&gt;
		j=-3 results in forward iteration from the start to the 3rd last index.&lt;br /&gt;
		j=-3, s=-1 results in backward iteration from the end to the 3rd last index.&lt;br /&gt;
	Note: directionality generally only matters for `reduce`, but values of s &amp;gt; 1 (or s &amp;lt; -1) still affect the return value of `apply`.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function getIteratorValues(i, j , s, list)&lt;br /&gt;
	i = (i and i &amp;lt; 0 and #list - i + 1) or i or (s and s &amp;lt; 0 and #list) or 1&lt;br /&gt;
	j = (j and j &amp;lt; 0 and #list - j + 1) or j or (s and s &amp;lt; 0 and 1) or #list&lt;br /&gt;
	s = s or (j &amp;lt; i and -1) or 1&lt;br /&gt;
	if (&lt;br /&gt;
		i == 0 or i % 1 ~= 0 or&lt;br /&gt;
		j == 0 or j % 1 ~= 0 or&lt;br /&gt;
		s == 0 or s % 1 ~= 0&lt;br /&gt;
	) then&lt;br /&gt;
		error(&amp;quot;Arguments i, j and s must be non-zero integers.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	return i, j, s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.reduce(list, func, i, j, s)&lt;br /&gt;
	i, j, s = getIteratorValues(i, j , s, list)&lt;br /&gt;
	local ret = list[i]&lt;br /&gt;
	for k = i + s, j, s do&lt;br /&gt;
		ret = func(ret, k, list[k])&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.apply(list, func, i, j, s)&lt;br /&gt;
	local modified_list = export.deepcopy(list)&lt;br /&gt;
	i, j, s = getIteratorValues(i, j , s, modified_list)&lt;br /&gt;
	for k = i, j, s do&lt;br /&gt;
		modified_list[k] = func(k, modified_list[k])&lt;br /&gt;
	end&lt;br /&gt;
	return modified_list&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.all(list, func, i, j, s)&lt;br /&gt;
	i, j, s = getIteratorValues(i, j , s, list)&lt;br /&gt;
	local ret = true&lt;br /&gt;
	for k = i, j, s do&lt;br /&gt;
		ret = ret and not not (func(k, list[k]))&lt;br /&gt;
		if not ret then break end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.any(list, func, i, j, s)&lt;br /&gt;
	i, j, s = getIteratorValues(i, j , s, list)&lt;br /&gt;
	local ret = false&lt;br /&gt;
	for k = i, j, s do&lt;br /&gt;
		ret = ret or not not (func(k, list[k]))&lt;br /&gt;
		if ret then break end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
	Joins an array with serial comma and serial conjunction, normally &amp;quot;and&amp;quot;.&lt;br /&gt;
	An improvement on mw.text.listToText, which doesn&amp;#039;t properly handle serial&lt;br /&gt;
	commas.&lt;br /&gt;
	&lt;br /&gt;
	Options:&lt;br /&gt;
		- conj&lt;br /&gt;
			Conjunction to use; defaults to &amp;quot;and&amp;quot;.&lt;br /&gt;
		- italicizeConj&lt;br /&gt;
			Italicize conjunction: for [[Module:also]]&lt;br /&gt;
		- dontTag&lt;br /&gt;
			Don&amp;#039;t tag the serial comma and serial &amp;quot;and&amp;quot;. For error messages, in&lt;br /&gt;
			which HTML cannot be used.&lt;br /&gt;
]=]&lt;br /&gt;
function export.serialCommaJoin(seq, options)&lt;br /&gt;
	local check = _check(&amp;quot;serialCommaJoin&amp;quot;, &amp;quot;table&amp;quot;)&lt;br /&gt;
	check(1, seq)&lt;br /&gt;
	check(2, options, true)&lt;br /&gt;
	&lt;br /&gt;
	local length = #seq&lt;br /&gt;
	&lt;br /&gt;
	if not options then&lt;br /&gt;
		options = {}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local conj&lt;br /&gt;
	if length &amp;gt; 1 then&lt;br /&gt;
		conj = options.conj or &amp;quot;and&amp;quot;&lt;br /&gt;
		if options.italicizeConj then&lt;br /&gt;
			conj = &amp;quot;&amp;#039;&amp;#039;&amp;quot; .. conj .. &amp;quot;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if length == 0 then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	elseif length == 1 then&lt;br /&gt;
		return seq[1] -- nothing to join&lt;br /&gt;
	elseif length == 2 then&lt;br /&gt;
		return seq[1] .. &amp;quot; &amp;quot; .. conj .. &amp;quot; &amp;quot; .. seq[2]&lt;br /&gt;
	else&lt;br /&gt;
		local comma = options.dontTag and &amp;quot;,&amp;quot; or &amp;#039;&amp;lt;span class=&amp;quot;serial-comma&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		conj = options.dontTag and &amp;#039; &amp;#039; .. conj .. &amp;quot; &amp;quot; or &amp;#039;&amp;lt;span class=&amp;quot;serial-and&amp;quot;&amp;gt; &amp;#039; .. conj .. &amp;#039;&amp;lt;/span&amp;gt; &amp;#039;&lt;br /&gt;
		return table.concat(seq, &amp;quot;, &amp;quot;, 1, length - 1) ..&lt;br /&gt;
				comma .. conj .. seq[length]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Concatenates all values in the table that are indexed by a number, in order.&lt;br /&gt;
	sparseConcat{ a, nil, c, d }  =&amp;gt;  &amp;quot;acd&amp;quot;&lt;br /&gt;
	sparseConcat{ nil, b, c, d }  =&amp;gt;  &amp;quot;bcd&amp;quot;&lt;br /&gt;
]]&lt;br /&gt;
function export.sparseConcat(t, sep, i, j)&lt;br /&gt;
	local list = {}&lt;br /&gt;
	&lt;br /&gt;
	local list_i = 0&lt;br /&gt;
	for _, v in export.sparseIpairs(t) do&lt;br /&gt;
		list_i = list_i + 1&lt;br /&gt;
		list[list_i] = v&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(list, sep, i, j)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Values of numberic keys in array portion of table are reversed:&lt;br /&gt;
	{ &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot; } -&amp;gt; { &amp;quot;c&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;a&amp;quot; }&lt;br /&gt;
--]]&lt;br /&gt;
function export.reverse(t)&lt;br /&gt;
	checkType(&amp;quot;reverse&amp;quot;, 1, t, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local new_t = {}&lt;br /&gt;
	local t_len = #t&lt;br /&gt;
	local base = t_len + 1&lt;br /&gt;
	for i = t_len, 1, -1 do&lt;br /&gt;
		new_t[base-i] = t[i]&lt;br /&gt;
	end&lt;br /&gt;
	return new_t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.reverseConcat(t, sep, i, j)&lt;br /&gt;
	return table.concat(export.reverse(t), sep, i, j)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- { &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot; } -&amp;gt; { a = 1, b = 2, c = 3 }&lt;br /&gt;
function export.invert(array)&lt;br /&gt;
	checkType(&amp;quot;invert&amp;quot;, 1, array, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local map = {}&lt;br /&gt;
	for i, v in ipairs(array) do&lt;br /&gt;
		map[v] = i&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return map&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	{ &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot; } -&amp;gt; { [&amp;quot;a&amp;quot;] = true, [&amp;quot;b&amp;quot;] = true, [&amp;quot;c&amp;quot;] = true }&lt;br /&gt;
--]]&lt;br /&gt;
function export.listToSet(t)&lt;br /&gt;
	checkType(&amp;quot;listToSet&amp;quot;, 1, t, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local set = {}&lt;br /&gt;
	for _, item in ipairs(t) do&lt;br /&gt;
		set[item] = true&lt;br /&gt;
	end&lt;br /&gt;
	return set&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Returns true if all keys in the table are consecutive integers starting at 1.&lt;br /&gt;
--]]&lt;br /&gt;
function export.isArray(t)&lt;br /&gt;
	checkType(&amp;quot;isArray&amp;quot;, 1, t, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for _ in pairs(t) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if t[i] == nil then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Add a list of aliases for a given key to a table. The aliases must be given as a table.&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
function export.alias(t, k, aliases)&lt;br /&gt;
	for _, alias in pairs(aliases) do&lt;br /&gt;
		t[alias] = t[k]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:49 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Table</comments>
		</item>
		<item>
			<title>Module:String utilities</title>
			<link>https://test.st34an.tech/index.php?title=Module:String_utilities&amp;diff=35&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:String_utilities&amp;diff=35&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:String_utilities&quot; title=&quot;Module:String utilities&quot;&gt;Module:String utilities&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local module_name = &amp;quot;string_utilities&amp;quot;&lt;br /&gt;
local export = {}&lt;br /&gt;
&lt;br /&gt;
local format_escapes = {&lt;br /&gt;
    [&amp;quot;op&amp;quot;] = &amp;quot;{&amp;quot;,&lt;br /&gt;
    [&amp;quot;cl&amp;quot;] = &amp;quot;}&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function export.format_fun(str, fun)&lt;br /&gt;
    return (str:gsub(&amp;quot;{(\\?)((\\?)[^{}]*)}&amp;quot;, function (p1, name, p2)&lt;br /&gt;
        if #p1 + #p2 == 1 then&lt;br /&gt;
            return format_escapes[name] or error(module_name .. &amp;quot;.format: unrecognized escape sequence &amp;#039;{\\&amp;quot; .. name .. &amp;quot;}&amp;#039;&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
        	if fun(name) and type(fun(name)) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
        		error(module_name .. &amp;quot;.format: &amp;#039;&amp;quot; .. name .. &amp;quot;&amp;#039; is a &amp;quot; .. type(fun(name)) .. &amp;quot;, not a string&amp;quot;)&lt;br /&gt;
        	end&lt;br /&gt;
            return fun(name) or error(module_name .. &amp;quot;.format: &amp;#039;&amp;quot; .. name .. &amp;quot;&amp;#039; not found in table&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[This function, unlike {{code|lua|string.format}} and {{code|lua|mw.ustring.format}}, takes just two parameters—a format string and a table—and replaces all instances of {{code|lua|{param_name}}} in the format string with the table&amp;#039;s entry for {{code|lua|param_name}}. The opening and closing brace characters can be escaped with &amp;lt;code&amp;gt;{\op}&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;{\cl}&amp;lt;/code&amp;gt;, respectively. A table entry beginning with a slash can be escaped by doubling the initial slash.&lt;br /&gt;
====Examples====&lt;br /&gt;
* {{code|lua|2=string_utilities.format(&amp;quot;{foo} fish, {bar} fish, {baz} fish, {quux} fish&amp;quot;, {[&amp;quot;foo&amp;quot;]=&amp;quot;one&amp;quot;, [&amp;quot;bar&amp;quot;]=&amp;quot;two&amp;quot;, [&amp;quot;baz&amp;quot;]=&amp;quot;red&amp;quot;, [&amp;quot;quux&amp;quot;]=&amp;quot;blue&amp;quot;})}}&lt;br /&gt;
*: produces: {{code|lua|&amp;quot;one fish, two fish, red fish, blue fish&amp;quot;}}&lt;br /&gt;
* {{code|lua|2=string_utilities.format(&amp;quot;The set {\\op}1, 2, 3{\\cl} contains {\\\\hello} elements.&amp;quot;, {[&amp;quot;\\hello&amp;quot;]=&amp;quot;three&amp;quot;})}}&lt;br /&gt;
*: produces: {{code|lua|&amp;quot;The set {1, 2, 3} contains three elements.&amp;quot;}}&lt;br /&gt;
*:* Note that the single and double backslashes should be entered as double and quadruple backslashes when quoted in a literal string.]==]&lt;br /&gt;
function export.format(str, tbl)&lt;br /&gt;
    return export.format_fun(str, function (key) return tbl[key] end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- A helper function which takes a string, position and type (&amp;quot;byte&amp;quot; or &amp;quot;char&amp;quot;), and returns the equivalent position for the other type (e.g. iterate_utf8(&amp;quot;字典&amp;quot;, 2, &amp;quot;char&amp;quot;) returns 4, because character 2 of &amp;quot;字典&amp;quot; begins with byte 4). `pos` can be positive or negative, and the function will iterate over the string forwards or backwards (respectively) until it reaches the input position. Checks byte-by-byte; skipping over trailing bytes, and then calculating the correct byte trail for any leading bytes (i.e. how many trailing bytes should follow); these trailing bytes are then checked together.&lt;br /&gt;
-- The optional parameters `init_from_type` and `init_to_type` can be used to start part-way through an iteration to improve performance, if multiple values need to be returned from the same string. For example, iterate_utf8(&amp;quot;слова́рь&amp;quot;, 11, &amp;quot;byte&amp;quot;, 5, 3) will begin checking at byte 5/the start of character 3. Note: The function won&amp;#039;t check if these values match each other (as the only way to do this would be to run the iteration from the beginning), so mismatched values will return incorrect results.&lt;br /&gt;
local function iterate_utf8(text, pos, from_type, init_from_type, init_to_type)&lt;br /&gt;
	-- Position 0 is always valid and never changes.&lt;br /&gt;
	if pos == 0 then&lt;br /&gt;
		return pos&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local to_type&lt;br /&gt;
	if from_type == &amp;quot;char&amp;quot; then&lt;br /&gt;
		to_type = &amp;quot;byte&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		to_type = &amp;quot;char&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Positive positions iterate forwards; negative positions iterate backwards.&lt;br /&gt;
	local iterate_val&lt;br /&gt;
	if pos &amp;gt; 0 then&lt;br /&gt;
		iterate_val = 1&lt;br /&gt;
	else&lt;br /&gt;
		iterate_val = -1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Adjust init_from_type and init_to_type to the iteration before, so that matches for the position given by them will work.&lt;br /&gt;
	local trail, cp, min, b = 0&lt;br /&gt;
	local c, leading_byte = {}&lt;br /&gt;
	c[from_type] = init_from_type and init_from_type ~= 0 and init_from_type - iterate_val or 0&lt;br /&gt;
	c[to_type] = init_to_type and init_to_type ~= 0 and init_to_type - iterate_val or 0&lt;br /&gt;
	&lt;br /&gt;
	while true do&lt;br /&gt;
		if pos &amp;gt; 0 then&lt;br /&gt;
			b = text:byte(c.byte + 1)&lt;br /&gt;
		else&lt;br /&gt;
			b = text:byte(text:len() + c.byte)&lt;br /&gt;
		end&lt;br /&gt;
		-- Position byte doesn&amp;#039;t exist, so iterate the return value and return it.&lt;br /&gt;
		if not b then&lt;br /&gt;
			return c[to_type] + iterate_val&lt;br /&gt;
		elseif b &amp;lt; 0x80 then&lt;br /&gt;
			-- 1-byte codepoint, 00-7F.&lt;br /&gt;
			trail = 0&lt;br /&gt;
			cp = b&lt;br /&gt;
			min = 0&lt;br /&gt;
			leading_byte = true&lt;br /&gt;
		elseif b &amp;lt; 0xc0 then&lt;br /&gt;
			-- A trailing byte.&lt;br /&gt;
			leading_byte = false&lt;br /&gt;
		elseif b &amp;lt; 0xc2 then&lt;br /&gt;
			-- An overlong encoding for a 1-byte codepoint.&lt;br /&gt;
			error(&amp;quot;String &amp;quot; .. text .. &amp;quot; is not UTF-8.&amp;quot;)&lt;br /&gt;
		elseif b &amp;lt; 0xe0 then&lt;br /&gt;
			-- 2-byte codepoint, C2-DF.&lt;br /&gt;
			trail = 1&lt;br /&gt;
			cp = b - 0xc0&lt;br /&gt;
			min = 0x80&lt;br /&gt;
			leading_byte = true&lt;br /&gt;
		elseif b &amp;lt; 0xf0 then&lt;br /&gt;
			-- 3-byte codepoint, E0-EF.&lt;br /&gt;
			trail = 2&lt;br /&gt;
			cp = b - 0xe0&lt;br /&gt;
			min = 0x800&lt;br /&gt;
			leading_byte = true&lt;br /&gt;
		elseif b &amp;lt; 0xf4 then&lt;br /&gt;
			-- 4-byte codepoint, F0-F3.&lt;br /&gt;
			trail = 3&lt;br /&gt;
			cp = b - 0xf0&lt;br /&gt;
			min = 0x10000&lt;br /&gt;
			leading_byte = true&lt;br /&gt;
		elseif b == 0xf4 then&lt;br /&gt;
			-- 4-byte codepoint, F4.&lt;br /&gt;
			-- Make sure it doesn&amp;#039;t decode to over U+10FFFF.&lt;br /&gt;
			if text:byte(c.byte + 2) &amp;gt; 0x8f then&lt;br /&gt;
				error(&amp;quot;String &amp;quot; .. text .. &amp;quot; is not UTF-8.&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			trail = 3&lt;br /&gt;
			cp = 4&lt;br /&gt;
			min = 0x100000&lt;br /&gt;
			leading_byte = true&lt;br /&gt;
		else&lt;br /&gt;
			-- Codepoint over U+10FFFF, or invalid byte.&lt;br /&gt;
			error(&amp;quot;String &amp;quot; .. text .. &amp;quot; is not UTF-8.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Check subsequent bytes for multibyte codepoints.&lt;br /&gt;
		if leading_byte then&lt;br /&gt;
			local from, to&lt;br /&gt;
			if pos &amp;gt; 0 then&lt;br /&gt;
				from, to = c.byte + 2, c.byte + 1 + trail&lt;br /&gt;
			else&lt;br /&gt;
				from, to = text:len() + c.byte + 1, text:len() + c.byte + trail&lt;br /&gt;
			end&lt;br /&gt;
			for trailing_byte = from, to do&lt;br /&gt;
				b = text:byte(trailing_byte)&lt;br /&gt;
				if not b or b &amp;lt; 0x80 or b &amp;gt; 0xbf then&lt;br /&gt;
					error(&amp;quot;String &amp;quot; .. text .. &amp;quot; is not UTF-8.&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
				cp = cp * 0x40 + b - 0x80&lt;br /&gt;
			end&lt;br /&gt;
			local next_byte = text:byte(to + 1)&lt;br /&gt;
			if next_byte and next_byte &amp;gt;= 0x80 and next_byte &amp;lt;= 0xbf then&lt;br /&gt;
				-- Too many trailing bytes.&lt;br /&gt;
				error(&amp;quot;String &amp;quot; .. text .. &amp;quot; is not UTF-8.&amp;quot;)&lt;br /&gt;
			elseif cp &amp;lt; min then&lt;br /&gt;
				-- Overlong encoding.&lt;br /&gt;
				error(&amp;quot;String &amp;quot; .. text .. &amp;quot; is not UTF-8.&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		c.byte = c.byte + iterate_val&lt;br /&gt;
		if leading_byte then&lt;br /&gt;
			c.char = c.char + iterate_val&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if c[from_type] == pos then&lt;br /&gt;
			return c[to_type]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[Converts a character position to the equivalent byte position.]==]&lt;br /&gt;
function export.charsToBytes(text, pos)&lt;br /&gt;
	return iterate_utf8(text, pos, &amp;quot;char&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[Converts a byte position to the equivalent character position.]==]&lt;br /&gt;
function export.bytesToChars(text, pos)&lt;br /&gt;
	local byte = text:byte(pos)&lt;br /&gt;
	if byte and byte &amp;gt;= 0x80 and byte &amp;lt;= 0xbf then&lt;br /&gt;
		error(&amp;quot;Byte &amp;quot; .. pos .. &amp;quot; is not a leading byte.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	return iterate_utf8(text, pos, &amp;quot;byte&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- A helper function which iterates through a pattern, and returns two values: a potentially modified version of the pattern, and a boolean indicating whether the returned pattern is simple (i.e. whether it can be used with the stock string library); if not, then the pattern is complex (i.e. it must be used with the ustring library, which is much more resource-intensive).&lt;br /&gt;
local function patternSimplifier(text, pattern, plain)&lt;br /&gt;
	pattern = tostring(pattern)&lt;br /&gt;
	-- If `plain` is set, then the pattern is treated as literal (so is always simple). Only used by find.&lt;br /&gt;
	if plain then&lt;br /&gt;
		return pattern, true&lt;br /&gt;
	--If none of these are present, then the pattern has to be simple.&lt;br /&gt;
	elseif not (&lt;br /&gt;
		pattern:match(&amp;quot;%[.-[\128-\255].-%]&amp;quot;) or&lt;br /&gt;
		pattern:match(&amp;quot;[\128-\255][%*%+%?%-]&amp;quot;) or&lt;br /&gt;
		pattern:match(&amp;quot;%%[abcdlpsuwxACDLPSUWXZ]&amp;quot;) or&lt;br /&gt;
		pattern:match(&amp;quot;%[%^[^%]]+%]&amp;quot;) or&lt;br /&gt;
		pattern:match(&amp;quot;%.[^%*%+%-]&amp;quot;) or&lt;br /&gt;
		pattern:match(&amp;quot;%.$&amp;quot;) or&lt;br /&gt;
		pattern:match(&amp;quot;%%b.?[\128-\255]&amp;quot;) or&lt;br /&gt;
		pattern:match(&amp;quot;()&amp;quot;, 1, true)&lt;br /&gt;
	) then&lt;br /&gt;
		return pattern, true&lt;br /&gt;
	end&lt;br /&gt;
	-- Otherwise, the pattern could go either way.&lt;br /&gt;
	-- Build up the new pattern in a table, then concatenate at the end. we do it this way, as occasionally entries get modified along the way.&lt;br /&gt;
	local new_pattern = {}&lt;br /&gt;
	local len, pos, b = pattern:len(), 0&lt;br /&gt;
	local char, next_char&lt;br /&gt;
	&lt;br /&gt;
	-- `escape` and `balanced` are counters, which ensure the effects of % or %b (respectively) are distributed over the following bytes.&lt;br /&gt;
	-- `set` is a boolean that states whether the current byte is in a charset.&lt;br /&gt;
	-- `capture` keeps track of how many layers of capture groups the position is in, while `captures` keeps a tally of how many groups have been detected (due to the string library limit of 32).&lt;br /&gt;
	local escape, set, balanced, capture, captures = 0, false, 0, 0, 0&lt;br /&gt;
	&lt;br /&gt;
	while pos &amp;lt; len do&lt;br /&gt;
		pos = pos + 1&lt;br /&gt;
		b = pattern:byte(pos)&lt;br /&gt;
		if escape &amp;gt; 0 then escape = escape - 1 end&lt;br /&gt;
		if balanced &amp;gt; 0 then balanced = balanced - 1 end&lt;br /&gt;
		char = next_char or pattern:sub(pos, pos)&lt;br /&gt;
		next_char = pattern:sub(pos + 1, pos + 1)&lt;br /&gt;
		if escape == 0 then&lt;br /&gt;
			if char == &amp;quot;%&amp;quot; then&lt;br /&gt;
				-- Apply % escape.&lt;br /&gt;
				if next_char == &amp;quot;.&amp;quot; or next_char == &amp;quot;%&amp;quot; or next_char == &amp;quot;[&amp;quot; or next_char == &amp;quot;]&amp;quot; then&lt;br /&gt;
					escape = 2&lt;br /&gt;
					if balanced &amp;gt; 0 then balanced = balanced + 1 end&lt;br /&gt;
				-- These charsets make the pattern complex.&lt;br /&gt;
				elseif next_char:match(&amp;quot;[acdlpsuwxACDLPSUWXZ]&amp;quot;) then&lt;br /&gt;
					return pattern, false&lt;br /&gt;
				-- This is &amp;quot;%b&amp;quot;.&lt;br /&gt;
				elseif next_char == &amp;quot;b&amp;quot; then&lt;br /&gt;
					balanced = 4&lt;br /&gt;
				end&lt;br /&gt;
			-- Enter or leave a charset.&lt;br /&gt;
			elseif char == &amp;quot;[&amp;quot; then&lt;br /&gt;
				set = true&lt;br /&gt;
			elseif char == &amp;quot;]&amp;quot; then&lt;br /&gt;
				set = false&lt;br /&gt;
			elseif char == &amp;quot;(&amp;quot; then&lt;br /&gt;
				capture = capture + 1&lt;br /&gt;
			elseif char == &amp;quot;)&amp;quot; then&lt;br /&gt;
				if capture &amp;gt; 0 and set == false and balanced == 0 then&lt;br /&gt;
					captures = captures + 1&lt;br /&gt;
					capture = capture - 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Multibyte char.&lt;br /&gt;
		if b &amp;gt; 0x7f then&lt;br /&gt;
			-- If followed by &amp;quot;*&amp;quot;, &amp;quot;+&amp;quot; or &amp;quot;-&amp;quot;, then 2-byte chars can be converted into charsets. However, this is not possible with 3 or 4-byte chars, as the charset would be too permissive, because if the trailing bytes were in a different order then this could be a different valid character.&lt;br /&gt;
			if next_char == &amp;quot;*&amp;quot; or next_char == &amp;quot;+&amp;quot; or next_char == &amp;quot;-&amp;quot; then&lt;br /&gt;
				local prev_pos = pattern:byte(pos - 1)&lt;br /&gt;
				if prev_pos &amp;gt; 0xc1 and prev_pos &amp;lt; 0xe0 then&lt;br /&gt;
					new_pattern[#new_pattern] = &amp;quot;[&amp;quot; .. new_pattern[#new_pattern]&lt;br /&gt;
					table.insert(new_pattern, char .. &amp;quot;]&amp;quot;)&lt;br /&gt;
				else&lt;br /&gt;
					return pattern, false&lt;br /&gt;
				end&lt;br /&gt;
			-- If in a charset or used in &amp;quot;%b&amp;quot;, then the pattern is complex.&lt;br /&gt;
			-- If followed by &amp;quot;?&amp;quot;, add &amp;quot;?&amp;quot; after each byte.&lt;br /&gt;
			elseif next_char == &amp;quot;?&amp;quot; then&lt;br /&gt;
				table.insert(new_pattern, char .. &amp;quot;?&amp;quot;)&lt;br /&gt;
				local check_pos, check_b, i = pos, pattern:byte(pos), #new_pattern&lt;br /&gt;
				while check_b and check_b &amp;lt; 0xc0 do&lt;br /&gt;
					check_pos = check_pos - 1&lt;br /&gt;
					check_b = pattern:byte(check_pos)&lt;br /&gt;
					i = i - 1&lt;br /&gt;
					new_pattern[i] = new_pattern[i] .. &amp;quot;?&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
				pos = pos + 1&lt;br /&gt;
				next_char = pattern:sub(pos + 1, pos + 1)&lt;br /&gt;
			elseif set or balanced &amp;gt; 0 then&lt;br /&gt;
				return pattern, false&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(new_pattern, char)&lt;br /&gt;
			end&lt;br /&gt;
		elseif char == &amp;quot;.&amp;quot; then&lt;br /&gt;
			-- &amp;quot;*&amp;quot;, &amp;quot;+&amp;quot;, &amp;quot;-&amp;quot; are always okay after &amp;quot;.&amp;quot;, as they don&amp;#039;t care how many bytes a char has.&lt;br /&gt;
			if set or next_char == &amp;quot;*&amp;quot; or next_char == &amp;quot;+&amp;quot; or next_char == &amp;quot;-&amp;quot; or escape &amp;gt; 0 then&lt;br /&gt;
				table.insert(new_pattern, char)&lt;br /&gt;
			-- If followed by &amp;quot;?&amp;quot;, make sure &amp;quot;?&amp;quot; is after the leading byte of the UTF-8 char pattern, then skip forward one.&lt;br /&gt;
			elseif next_char == &amp;quot;?&amp;quot; then&lt;br /&gt;
				table.insert(new_pattern, &amp;quot;[%z\1-\127\194-\244]?[\128-\191]*&amp;quot;)&lt;br /&gt;
				pos = pos + 1&lt;br /&gt;
				next_char = pattern:sub(pos + 1, pos + 1)&lt;br /&gt;
			-- If used with &amp;quot;%b&amp;quot;, pattern is complex.&lt;br /&gt;
			elseif balanced &amp;gt; 0 then&lt;br /&gt;
				return pattern, false&lt;br /&gt;
			-- Otherwise, add the UTF-8 char pattern.&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(new_pattern, &amp;quot;[%z\1-\127\194-\244][\128-\191]*&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		-- Negative charsets are always complex, unless the text has no UTF-8 chars.&lt;br /&gt;
		elseif char == &amp;quot;[&amp;quot; and next_char == &amp;quot;^&amp;quot; and escape == 0 and text:match(&amp;quot;[\128-\255]&amp;quot;) then&lt;br /&gt;
			return pattern, false&lt;br /&gt;
		-- &amp;quot;()&amp;quot; matches the position unless escaped or used with &amp;quot;%b&amp;quot;, so always necessitates ustring (as we need it to match the char position, not the byte one).&lt;br /&gt;
		elseif char == &amp;quot;(&amp;quot; and next_char == &amp;quot;)&amp;quot; and balanced == 0 and escape == 0 and text:match(&amp;quot;[\128-\255]&amp;quot;) then&lt;br /&gt;
			return pattern, false&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(new_pattern, char)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if captures &amp;gt; 32 then&lt;br /&gt;
		return pattern, false&lt;br /&gt;
	else&lt;br /&gt;
		pattern = table.concat(new_pattern)&lt;br /&gt;
		return pattern, true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[A version of len which uses string.len, but returns the same result as mw.ustring.len.]==]&lt;br /&gt;
function export.len(text)&lt;br /&gt;
	text = tostring(text)&lt;br /&gt;
	local len_bytes = text:len()&lt;br /&gt;
	if not text:match(&amp;quot;[\128-\255]&amp;quot;) then&lt;br /&gt;
		return len_bytes&lt;br /&gt;
	else&lt;br /&gt;
		return iterate_utf8(text, len_bytes, &amp;quot;byte&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[A version of sub which uses string.sub, but returns the same result as mw.ustring.sub.]==]&lt;br /&gt;
function export.sub(text, i_char, j_char)&lt;br /&gt;
	text = tostring(text)&lt;br /&gt;
	if not text:match(&amp;quot;[\128-\255]&amp;quot;) then&lt;br /&gt;
		return text:sub(i_char, j_char)&lt;br /&gt;
	end&lt;br /&gt;
	local i_byte, j_byte&lt;br /&gt;
	if j_char then&lt;br /&gt;
		if i_char &amp;gt; 0 and j_char &amp;gt; 0 then&lt;br /&gt;
			if j_char &amp;lt; i_char then return &amp;quot;&amp;quot; end&lt;br /&gt;
			i_byte = iterate_utf8(text, i_char, &amp;quot;char&amp;quot;)&lt;br /&gt;
			j_byte = iterate_utf8(text, j_char + 1, &amp;quot;char&amp;quot;, i_char, i_byte) - 1&lt;br /&gt;
		elseif i_char &amp;lt; 0 and j_char &amp;lt; 0 then&lt;br /&gt;
			if j_char &amp;lt; i_char then return &amp;quot;&amp;quot; end&lt;br /&gt;
			j_byte = iterate_utf8(text, j_char + 1, &amp;quot;char&amp;quot;) - 1&lt;br /&gt;
			i_byte = iterate_utf8(text, i_char, &amp;quot;char&amp;quot;, j_char, j_byte)&lt;br /&gt;
		-- For some reason, mw.ustring.sub with i=0, j=0 returns the same result as for i=1, j=1, while string.sub always returns &amp;quot;&amp;quot;. However, mw.ustring.sub does return &amp;quot;&amp;quot; with i=1, j=0. As such, we need to adjust j_char to 1 if i_char is either 0, or negative with a magnitude greater than the length of the string.&lt;br /&gt;
		elseif j_char == 0 then&lt;br /&gt;
			i_byte = iterate_utf8(text, i_char, &amp;quot;char&amp;quot;)&lt;br /&gt;
			if i_byte == 0 or -i_byte &amp;gt; text:len() then j_char = 1 end&lt;br /&gt;
			j_byte = iterate_utf8(text, j_char + 1, &amp;quot;char&amp;quot;) - 1&lt;br /&gt;
		else&lt;br /&gt;
			i_byte = iterate_utf8(text, i_char, &amp;quot;char&amp;quot;)&lt;br /&gt;
			j_byte = iterate_utf8(text, j_char + 1, &amp;quot;char&amp;quot;) - 1&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		i_byte = iterate_utf8(text, i_char, &amp;quot;char&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	return text:sub(i_byte, j_byte)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[A version of lower which uses string.lower when possible, but otherwise uses mw.ustring.lower.]==]&lt;br /&gt;
function export.lower(text)&lt;br /&gt;
	text = tostring(text)&lt;br /&gt;
	if not text:match(&amp;quot;[\128-\255]&amp;quot;) then&lt;br /&gt;
		return text:lower()&lt;br /&gt;
	else&lt;br /&gt;
		return mw.ustring.lower(text)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[A version of upper which uses string.upper when possible, but otherwise uses mw.ustring.upper.]==]&lt;br /&gt;
function export.upper(text)&lt;br /&gt;
	text = tostring(text)&lt;br /&gt;
	if not text:match(&amp;quot;[\128-\255]&amp;quot;) then&lt;br /&gt;
		return text:upper()&lt;br /&gt;
	else&lt;br /&gt;
		return mw.ustring.upper(text)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[A version of find which uses string.find when possible, but otherwise uses mw.ustring.find.]==]&lt;br /&gt;
function export.find(text, pattern, init_char, plain)&lt;br /&gt;
	text = tostring(text)&lt;br /&gt;
	local simple&lt;br /&gt;
	pattern, simple = patternSimplifier(text, pattern, plain)&lt;br /&gt;
	-- If the pattern is simple but multibyte characters are present, then init_char needs to be converted into bytes for string.find to work properly, and the return values need to be converted back into chars.&lt;br /&gt;
	if simple then&lt;br /&gt;
		if not text:match(&amp;quot;[\128-\255]&amp;quot;) then&lt;br /&gt;
			return text:find(pattern, init_char, plain)&lt;br /&gt;
		else&lt;br /&gt;
			local init_byte = init_char and iterate_utf8(text, init_char, &amp;quot;char&amp;quot;)&lt;br /&gt;
			local byte1, byte2, c1, c2, c3, c4, c5, c6, c7, c8, c9 = text:find(pattern, init_byte, plain)&lt;br /&gt;
			&lt;br /&gt;
			-- If string.find returned nil, then return nil.&lt;br /&gt;
			if not (byte1 and byte2) then&lt;br /&gt;
				return nil&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			-- Get first return value. If we have a positive init_char, we can save resources by resuming at that point.&lt;br /&gt;
			local char1, char2&lt;br /&gt;
			if (not init_char) or init_char &amp;gt; 0 then&lt;br /&gt;
				char1 = iterate_utf8(text, byte1, &amp;quot;byte&amp;quot;, init_byte, init_char)&lt;br /&gt;
			else&lt;br /&gt;
				char1 = iterate_utf8(text, byte1, &amp;quot;byte&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			-- If byte1 and byte2 are the same, don&amp;#039;t bother running iterate_utf8 twice. Otherwise, resume iterate_utf8 from byte1 to find char2.&lt;br /&gt;
			if byte1 == byte2 then&lt;br /&gt;
				char2 = char1&lt;br /&gt;
			else&lt;br /&gt;
				char2 = iterate_utf8(text, byte2, &amp;quot;byte&amp;quot;, byte1, char1)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			return unpack{char1, char2, c1, c2, c3, c4, c5, c6, c7, c8, c9}&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return mw.ustring.find(text, pattern, init_char, plain)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[A version of match which uses string.match when possible, but otherwise uses mw.ustring.match.]==]&lt;br /&gt;
function export.match(text, pattern, init)&lt;br /&gt;
	text = tostring(text)&lt;br /&gt;
	local simple&lt;br /&gt;
	pattern, simple = patternSimplifier(text, pattern)&lt;br /&gt;
	if simple then&lt;br /&gt;
		if init and text:find(&amp;quot;[\128-\255]&amp;quot;) then&lt;br /&gt;
			init = iterate_utf8(text, init, &amp;quot;char&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		return text:match(pattern, init)&lt;br /&gt;
	else&lt;br /&gt;
		return mw.ustring.match(text, pattern, init)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[A version of gmatch which uses string.gmatch when possible, but otherwise uses mw.ustring.gmatch.]==]&lt;br /&gt;
function export.gmatch(text, pattern)&lt;br /&gt;
	text = tostring(text)&lt;br /&gt;
	local simple&lt;br /&gt;
	pattern, simple = patternSimplifier(text, pattern)&lt;br /&gt;
	if simple then&lt;br /&gt;
		return text:gmatch(pattern)&lt;br /&gt;
	else&lt;br /&gt;
		return mw.ustring.gmatch(text, pattern)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[A version of gsub which uses string.gsub when possible, but otherwise uses mw.ustring.gsub.]==]&lt;br /&gt;
function export.gsub(text, pattern, repl, n)&lt;br /&gt;
	text = tostring(text)&lt;br /&gt;
	local simple&lt;br /&gt;
	pattern, simple = patternSimplifier(text, pattern)&lt;br /&gt;
	if simple then&lt;br /&gt;
		return text:gsub(pattern, repl, n)&lt;br /&gt;
	else&lt;br /&gt;
		return mw.ustring.gsub(text, pattern, repl, n)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[&lt;br /&gt;
-- Reimplementation of mw.ustring.split() that includes any capturing&lt;br /&gt;
-- groups in the splitting pattern. This works like Python&amp;#039;s re.split()&lt;br /&gt;
-- function, except that it has Lua&amp;#039;s behavior when the split pattern&lt;br /&gt;
-- is empty (i.e. advancing by one character at a time; Python returns the&lt;br /&gt;
-- whole remainder of the string).&lt;br /&gt;
]==]&lt;br /&gt;
function export.capturing_split(str, pattern)&lt;br /&gt;
    local ret = {}&lt;br /&gt;
    -- (.-) corresponds to (.*?) in Python or Perl; () captures the&lt;br /&gt;
    -- current position after matching.&lt;br /&gt;
    pattern = &amp;quot;(.-)&amp;quot; .. pattern .. &amp;quot;()&amp;quot;&lt;br /&gt;
    local start = 1&lt;br /&gt;
    while true do&lt;br /&gt;
        -- Did we reach the end of the string?&lt;br /&gt;
        if start &amp;gt; #str then&lt;br /&gt;
            table.insert(ret, &amp;quot;&amp;quot;)&lt;br /&gt;
            return ret&lt;br /&gt;
        end&lt;br /&gt;
        -- match() returns all captures as multiple return values;&lt;br /&gt;
        -- we need to insert into a table to get them all.&lt;br /&gt;
        local captures = {export.match(str, pattern, start)}&lt;br /&gt;
        -- If no match, add the remainder of the string.&lt;br /&gt;
        if #captures == 0 then&lt;br /&gt;
            table.insert(ret, export.sub(str, start))&lt;br /&gt;
            return ret&lt;br /&gt;
        end&lt;br /&gt;
        local newstart = table.remove(captures)&lt;br /&gt;
        -- Special case: If we don&amp;#039;t advance by any characters, then advance&lt;br /&gt;
        -- by one character; this avoids an infinite loop, and makes splitting&lt;br /&gt;
        -- by an empty string work the way mw.ustring.split() does. If we&lt;br /&gt;
        -- reach the end of the string this way, return immediately, so we&lt;br /&gt;
        -- don&amp;#039;t get a final empty string.&lt;br /&gt;
        if newstart == start then&lt;br /&gt;
            table.insert(ret, export.sub(str, start, start))&lt;br /&gt;
            table.remove(captures, 1)&lt;br /&gt;
            start = start + 1&lt;br /&gt;
            if start &amp;gt; #str then&lt;br /&gt;
            	return ret&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            table.insert(ret, table.remove(captures, 1))&lt;br /&gt;
            start = newstart&lt;br /&gt;
        end&lt;br /&gt;
        -- Insert any captures from the splitting pattern.&lt;br /&gt;
        for _, x in ipairs(captures) do&lt;br /&gt;
            table.insert(ret, x)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function uclcfirst(text, dolower)&lt;br /&gt;
	local function douclcfirst(text)&lt;br /&gt;
		-- Actual function to re-case of the first letter.&lt;br /&gt;
		local first_letter = export.sub(text, 1, 1)&lt;br /&gt;
		first_letter = dolower and export.lower(first_letter) or export.upper(first_letter)&lt;br /&gt;
		return first_letter .. export.sub(text, 2)&lt;br /&gt;
	end&lt;br /&gt;
	-- If there&amp;#039;s a link at the beginning, re-case the first letter of the&lt;br /&gt;
	-- link text. This pattern matches both piped and unpiped links.&lt;br /&gt;
	-- If the link is not piped, the second capture (linktext) will be empty.&lt;br /&gt;
	local link, linktext, remainder = export.match(text, &amp;quot;^%[%[([^|%]]+)%|?(.-)%]%](.*)$&amp;quot;)&lt;br /&gt;
	if link then&lt;br /&gt;
		return &amp;quot;[[&amp;quot; .. link .. &amp;quot;|&amp;quot; .. douclcfirst(linktext ~= &amp;quot;&amp;quot; and linktext or link) .. &amp;quot;]]&amp;quot; .. remainder&lt;br /&gt;
	end&lt;br /&gt;
	return douclcfirst(text)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.ucfirst(text)&lt;br /&gt;
	return uclcfirst(text, false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.lcfirst(text)&lt;br /&gt;
	return uclcfirst(text, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Almost identical to mw.text.nowiki, but with minor changes to be identical to the PHP equivalent: &amp;quot;;&amp;quot; always escapes, and colons in certain protocols only escape after regex \b. Also about 2-3 times as fast.&lt;br /&gt;
function export.nowiki(text)&lt;br /&gt;
	return (text&lt;br /&gt;
		:gsub(&amp;quot;[\&amp;quot;&amp;amp;&amp;#039;&amp;lt;=&amp;gt;%[%]{|};]&amp;quot;, {&lt;br /&gt;
			[&amp;quot;\&amp;quot;&amp;quot;] = &amp;quot;&amp;amp;#34;&amp;quot;, [&amp;quot;&amp;amp;&amp;quot;] = &amp;quot;&amp;amp;#38;&amp;quot;, [&amp;quot;&amp;#039;&amp;quot;] = &amp;quot;&amp;amp;#39;&amp;quot;,&lt;br /&gt;
			[&amp;quot;&amp;lt;&amp;quot;] = &amp;quot;&amp;amp;#60;&amp;quot;, [&amp;quot;=&amp;quot;] = &amp;quot;&amp;amp;#61;&amp;quot;, [&amp;quot;&amp;gt;&amp;quot;] = &amp;quot;&amp;amp;#62;&amp;quot;,&lt;br /&gt;
			[&amp;quot;[&amp;quot;] = &amp;quot;&amp;amp;#91;&amp;quot;, [&amp;quot;]&amp;quot;] = &amp;quot;&amp;amp;#93;&amp;quot;, [&amp;quot;{&amp;quot;] = &amp;quot;&amp;amp;#123;&amp;quot;,&lt;br /&gt;
			[&amp;quot;|&amp;quot;] = &amp;quot;&amp;amp;#124;&amp;quot;, [&amp;quot;}&amp;quot;] = &amp;quot;&amp;amp;#125;&amp;quot;, [&amp;quot;;&amp;quot;] = &amp;quot;&amp;amp;#59;&amp;quot;&lt;br /&gt;
		})&lt;br /&gt;
		:gsub(&amp;quot;%f[^%z\r\n][#*: \n\r\t]&amp;quot;, {&lt;br /&gt;
			[&amp;quot;#&amp;quot;] = &amp;quot;&amp;amp;#35;&amp;quot;, [&amp;quot;*&amp;quot;] = &amp;quot;&amp;amp;#42;&amp;quot;, [&amp;quot;:&amp;quot;] = &amp;quot;&amp;amp;#58;&amp;quot;,&lt;br /&gt;
			[&amp;quot; &amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;, [&amp;quot;\n&amp;quot;] = &amp;quot;&amp;amp;#10;&amp;quot;, [&amp;quot;\r&amp;quot;] = &amp;quot;&amp;amp;#13;&amp;quot;,&lt;br /&gt;
			[&amp;quot;\t&amp;quot;] = &amp;quot;&amp;amp;#9;&amp;quot;&lt;br /&gt;
		})&lt;br /&gt;
		:gsub(&amp;quot;(%f[^%z\r\n])%-(%-%-%-)&amp;quot;, &amp;quot;%1&amp;amp;#45;%2&amp;quot;)&lt;br /&gt;
		:gsub(&amp;quot;__&amp;quot;, &amp;quot;_&amp;amp;#95;&amp;quot;)&lt;br /&gt;
		:gsub(&amp;quot;://&amp;quot;, &amp;quot;&amp;amp;#58;//&amp;quot;)&lt;br /&gt;
		:gsub(&amp;quot;([IP]?[MRS][BFI][CDN])([\t\n\f\r ])&amp;quot;, function(m1, m2)&lt;br /&gt;
			if m1 == &amp;quot;ISBN&amp;quot; or m1 == &amp;quot;RFC&amp;quot; or m1 == &amp;quot;PMID&amp;quot; then&lt;br /&gt;
				return m1 .. m2:gsub(&amp;quot;.&amp;quot;, {&lt;br /&gt;
					[&amp;quot;\t&amp;quot;] = &amp;quot;&amp;amp;#9;&amp;quot;, [&amp;quot;\n&amp;quot;] = &amp;quot;&amp;amp;#10;&amp;quot;, [&amp;quot;\f&amp;quot;] = &amp;quot;&amp;amp;#12;&amp;quot;,&lt;br /&gt;
					[&amp;quot;\r&amp;quot;] = &amp;quot;&amp;amp;#13;&amp;quot;, [&amp;quot; &amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;&lt;br /&gt;
				})&lt;br /&gt;
			end&lt;br /&gt;
		end)&lt;br /&gt;
		:gsub(&amp;quot;[%w_]+:&amp;quot;, {&lt;br /&gt;
			[&amp;quot;bitcoin:&amp;quot;] = &amp;quot;bitcoin&amp;amp;#58;&amp;quot;, [&amp;quot;geo:&amp;quot;] = &amp;quot;geo&amp;amp;#58;&amp;quot;, [&amp;quot;magnet:&amp;quot;] = &amp;quot;magnet&amp;amp;#58;&amp;quot;,&lt;br /&gt;
			[&amp;quot;mailto:&amp;quot;] = &amp;quot;mailto&amp;amp;#58;&amp;quot;, [&amp;quot;matrix:&amp;quot;] = &amp;quot;matrix&amp;amp;#58;&amp;quot;, [&amp;quot;news:&amp;quot;] = &amp;quot;news&amp;amp;#58;&amp;quot;,&lt;br /&gt;
			[&amp;quot;sip:&amp;quot;] = &amp;quot;sip&amp;amp;#58;&amp;quot;, [&amp;quot;sips:&amp;quot;] = &amp;quot;sips&amp;amp;#58;&amp;quot;, [&amp;quot;sms:&amp;quot;] = &amp;quot;sms&amp;amp;#58;&amp;quot;,&lt;br /&gt;
			[&amp;quot;tel:&amp;quot;] = &amp;quot;tel&amp;amp;#58;&amp;quot;, [&amp;quot;urn:&amp;quot;] = &amp;quot;urn&amp;amp;#58;&amp;quot;, [&amp;quot;xmpp:&amp;quot;] = &amp;quot;xmpp&amp;amp;#58;&amp;quot;&lt;br /&gt;
		}))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.capitalize(text)&lt;br /&gt;
	if type(text) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		-- allow calling from a template&lt;br /&gt;
		text = text.args[1]&lt;br /&gt;
	end&lt;br /&gt;
	-- Capitalize multi-word that is separated by spaces&lt;br /&gt;
	-- by uppercasing the first letter of each part.&lt;br /&gt;
	-- I assume nobody will input all CAP text.&lt;br /&gt;
	w2 = {}&lt;br /&gt;
	for w in export.gmatch(text, &amp;quot;%S+&amp;quot;) do&lt;br /&gt;
		table.insert(w2, uclcfirst(w, false))&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(w2, &amp;quot; &amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.pluralize(text)&lt;br /&gt;
	if type(text) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		-- allow calling from a template&lt;br /&gt;
		text = text.args[1]&lt;br /&gt;
	end&lt;br /&gt;
	-- Pluralize a word in a smart fashion, according to normal English rules.&lt;br /&gt;
	-- 1. If word ends in consonant + -y, replace the -y with -ies.&lt;br /&gt;
	-- 2. If the word ends in -s, -x, -z, -sh, -ch, add -es.&lt;br /&gt;
	-- 3. Otherwise, add -s.&lt;br /&gt;
	-- This handles links correctly:&lt;br /&gt;
	-- 1. If a piped link, change the second part appropriately.&lt;br /&gt;
	-- 2. If a non-piped link and rule #1 above applies, convert to a piped link&lt;br /&gt;
	--    with the second part containing the plural.&lt;br /&gt;
	-- 3. If a non-piped link and rules #2 or #3 above apply, add the plural&lt;br /&gt;
	--    outside the link.&lt;br /&gt;
	&lt;br /&gt;
	local function word_ends_in_consonant_plus_y(text)&lt;br /&gt;
		-- FIXME, a subrule of rule #1 above says the -ies ending doesn&amp;#039;t&lt;br /&gt;
		-- apply to proper nouns, hence &amp;quot;the Gettys&amp;quot;, &amp;quot;the public Ivys&amp;quot;.&lt;br /&gt;
		-- We should maybe consider applying this rule here; but it may not&lt;br /&gt;
		-- be important as this function is almost always called on common nouns&lt;br /&gt;
		-- (e.g. parts of speech, place types).&lt;br /&gt;
		return text:find(&amp;quot;[^aeiouAEIOU ]y$&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local function word_takes_es_plural(text)&lt;br /&gt;
		return text:find(&amp;quot;[sxz]$&amp;quot;) or text:find(&amp;quot;[cs]h$&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local function do_pluralize(text)&lt;br /&gt;
		if word_ends_in_consonant_plus_y(text) then&lt;br /&gt;
			-- avoid returning multiple values&lt;br /&gt;
			local hack_single_retval = text:gsub(&amp;quot;y$&amp;quot;, &amp;quot;ies&amp;quot;)&lt;br /&gt;
			return hack_single_retval&lt;br /&gt;
		elseif word_takes_es_plural(text) then&lt;br /&gt;
			return text .. &amp;quot;es&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			return text .. &amp;quot;s&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	-- Check for a link. This pattern matches both piped and unpiped links.&lt;br /&gt;
	-- If the link is not piped, the second capture (linktext) will be empty.&lt;br /&gt;
	local beginning, link, linktext = export.match(text, &amp;quot;^(.*)%[%[([^|%]]+)%|?(.-)%]%]$&amp;quot;)&lt;br /&gt;
	if link then&lt;br /&gt;
		if linktext ~= &amp;quot;&amp;quot; then&lt;br /&gt;
			return beginning .. &amp;quot;[[&amp;quot; .. link .. &amp;quot;|&amp;quot; .. do_pluralize(linktext) .. &amp;quot;]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		if word_ends_in_consonant_plus_y(link) then&lt;br /&gt;
			return beginning .. &amp;quot;[[&amp;quot; .. link .. &amp;quot;|&amp;quot; .. link:gsub(&amp;quot;y$&amp;quot;, &amp;quot;ies&amp;quot;) .. &amp;quot;]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		return beginning .. &amp;quot;[[&amp;quot; .. link .. &amp;quot;]]&amp;quot; .. (word_takes_es_plural(link) and &amp;quot;es&amp;quot; or &amp;quot;s&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	return do_pluralize(text)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.singularize(text)&lt;br /&gt;
	if type(text) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		-- allow calling from a template&lt;br /&gt;
		text = text.args[1]&lt;br /&gt;
	end&lt;br /&gt;
	-- Singularize a word in a smart fashion, according to normal English rules.&lt;br /&gt;
	-- Works analogously to pluralize().&lt;br /&gt;
	-- NOTE: This doesn&amp;#039;t always work as well as pluralize(). Beware. It will&lt;br /&gt;
	-- mishandle cases like &amp;quot;passes&amp;quot; -&amp;gt; &amp;quot;passe&amp;quot;, &amp;quot;eyries&amp;quot; -&amp;gt; &amp;quot;eyry&amp;quot;.&lt;br /&gt;
	-- 1. If word ends in -ies, replace -ies with -y.&lt;br /&gt;
	-- 2. If the word ends in -xes, -shes, -ches, remove -es. [Does not affect&lt;br /&gt;
	--    -ses, cf. &amp;quot;houses&amp;quot;, &amp;quot;impasses&amp;quot;.]&lt;br /&gt;
	-- 3. Otherwise, remove -s.&lt;br /&gt;
	-- This handles links correctly:&lt;br /&gt;
	-- 1. If a piped link, change the second part appropriately. Collapse the&lt;br /&gt;
	--    link to a simple link if both parts end up the same.&lt;br /&gt;
	-- 2. If a non-piped link, singularize the link.&lt;br /&gt;
	-- 3. A link like &amp;quot;[[parish]]es&amp;quot; will be handled correctly because the&lt;br /&gt;
	--    code that checks for -shes etc. allows ] characters between the&lt;br /&gt;
	--    &amp;#039;sh&amp;#039; etc. and final -es.&lt;br /&gt;
	local function do_singularize(text)&lt;br /&gt;
		local sing = text:match(&amp;quot;^(.-)ies$&amp;quot;)&lt;br /&gt;
		if sing then&lt;br /&gt;
			return sing .. &amp;quot;y&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		-- Handle cases like &amp;quot;[[parish]]es&amp;quot;&lt;br /&gt;
		local sing = text:match(&amp;quot;^(.-[sc]h%]*)es$&amp;quot;)&lt;br /&gt;
		if sing then&lt;br /&gt;
			return sing&lt;br /&gt;
		end&lt;br /&gt;
		-- Handle cases like &amp;quot;[[box]]es&amp;quot;&lt;br /&gt;
		local sing = text:match(&amp;quot;^(.-x%]*)es$&amp;quot;)&lt;br /&gt;
		if sing then&lt;br /&gt;
			return sing&lt;br /&gt;
		end&lt;br /&gt;
		local sing = text:match(&amp;quot;^(.-)s$&amp;quot;)&lt;br /&gt;
		if sing then&lt;br /&gt;
			return sing&lt;br /&gt;
		end&lt;br /&gt;
		return text&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function collapse_link(link, linktext)&lt;br /&gt;
		if link == linktext then&lt;br /&gt;
			return &amp;quot;[[&amp;quot; .. link .. &amp;quot;]]&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;quot;[[&amp;quot; .. link .. &amp;quot;|&amp;quot; .. linktext .. &amp;quot;]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Check for a link. This pattern matches both piped and unpiped links.&lt;br /&gt;
	-- If the link is not piped, the second capture (linktext) will be empty.&lt;br /&gt;
	local beginning, link, linktext = export.match(text, &amp;quot;^(.*)%[%[([^|%]]+)%|?(.-)%]%]$&amp;quot;)&lt;br /&gt;
	if link then&lt;br /&gt;
		if linktext ~= &amp;quot;&amp;quot; then&lt;br /&gt;
			return beginning .. collapse_link(link, do_singularize(linktext))&lt;br /&gt;
		end&lt;br /&gt;
		return beginning .. &amp;quot;[[&amp;quot; .. do_singularize(link) .. &amp;quot;]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return do_singularize(text)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.add_indefinite_article(text, uppercase)&lt;br /&gt;
	local is_vowel = false&lt;br /&gt;
	-- If there&amp;#039;s a link at the beginning, examine the first letter of the&lt;br /&gt;
	-- link text. This pattern matches both piped and unpiped links.&lt;br /&gt;
	-- If the link is not piped, the second capture (linktext) will be empty.&lt;br /&gt;
	local link, linktext, remainder = export.match(text, &amp;quot;^%[%[([^|%]]+)%|?(.-)%]%](.*)$&amp;quot;)&lt;br /&gt;
	if link then&lt;br /&gt;
		is_vowel = export.find(linktext ~= &amp;quot;&amp;quot; and linktext or link, &amp;quot;^[AEIOUaeiou]&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		is_vowel = export.find(text, &amp;quot;^[AEIOUaeiou]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	return (is_vowel and (uppercase and &amp;quot;An &amp;quot; or &amp;quot;an &amp;quot;) or (uppercase and &amp;quot;A &amp;quot; or &amp;quot;a &amp;quot;)) .. text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Convert risky characters to HTML entities, which minimizes interference once returned (e.g. for &amp;quot;sms:a&amp;quot;, &amp;quot;&amp;lt;!-- --&amp;gt;&amp;quot; etc.).&lt;br /&gt;
function export.escape_risky_characters(text)&lt;br /&gt;
	-- Spacing characters in isolation generally need to be escaped in order to be properly processed by the MediaWiki software.&lt;br /&gt;
	if not mw.ustring.match(text, &amp;quot;%S&amp;quot;) then&lt;br /&gt;
		return mw.text.encode(text, &amp;quot;%s&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		return mw.text.encode(text, &amp;quot;!#%%&amp;amp;*+/:;&amp;lt;=&amp;gt;?@[\\%]_{|}&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:48 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:String_utilities</comments>
		</item>
		<item>
			<title>Module:String/pattern escape</title>
			<link>https://test.st34an.tech/index.php?title=Module:String/pattern_escape&amp;diff=33&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:String/pattern_escape&amp;diff=33&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:String/pattern_escape&quot; title=&quot;Module:String/pattern escape&quot;&gt;Module:String/pattern escape&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;return function (str)&lt;br /&gt;
	return mw.ustring.gsub(str, &amp;quot;([%(%)%.%%%+%-%*%?%[%^%$%]])&amp;quot;, &amp;quot;%%%1&amp;quot;)&lt;br /&gt;
end&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:48 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:String/pattern_escape</comments>
		</item>
		<item>
			<title>Module:Scripts/data/djp</title>
			<link>https://test.st34an.tech/index.php?title=Module:Scripts/data/djp&amp;diff=31&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Scripts/data/djp&amp;diff=31&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Scripts/data/djp&quot; title=&quot;Module:Scripts/data/djp&quot;&gt;Module:Scripts/data/djp&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local m = {}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Acha&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Achaian&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Anmr&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Aazh Naamori&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Decu&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Dekuma&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	aliases = &amp;quot;Decuma&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Dinl&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Dinlih&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Engl&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Engála&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Faji&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Fajizwalino&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Fjrd&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Fjerdan&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Gvoz&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Oz&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Gwaz&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Gwazaks Ankripton&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Hazu&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Hazugimari&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Henw&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Hen Wökina&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Hghf&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Haughòf&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Hvlr&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Nekesse Valyrio&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad,logography&amp;quot;, -- more precisely, impure abjad&lt;br /&gt;
	aliases = &amp;quot;Valyrian,High Valyrian&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Isun&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Isunuche Zemen&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Izra&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Izra&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Kmkw&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Kavaka o Fuvupo&amp;quot;,&lt;br /&gt;
	&amp;quot;logography,syllabary&amp;quot;, &lt;br /&gt;
	aliases = &amp;quot;Kamakawi, Kamakawi Script, Elders&amp;#039; Script, Ancestral Script&amp;quot;, &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Krch&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Kerch&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Kwan&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Kwandon&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Nuls&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Nulisü&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Ovss&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Övüsi&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Rvkn&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Im Shaliloriyi&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	aliases = &amp;quot;Ravkan&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Shig&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Shighraad Shu&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	aliases = &amp;quot;Shighraad&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Shul&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Shul&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Srkz&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Sarkezhe&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Tala&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Tala&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Thal&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Thala&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Todj&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Todjydheenil&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Tpla&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Ancient Tpaalha&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Tplm&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Modern Tpaalha&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Tsts&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Ts&amp;#039;íts&amp;#039;àsh&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Vkht&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Vukht&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Wkth&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Wokuthízhű&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Wlqr&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Welqor&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Yesu&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Yesuþoh&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	aliases = &amp;quot;Yesuthoh&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Zadu&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Zaduusel&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return m&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:48 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Scripts/data/djp</comments>
		</item>
		<item>
			<title>Module:Scripts/data</title>
			<link>https://test.st34an.tech/index.php?title=Module:Scripts/data&amp;diff=29&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Scripts/data&amp;diff=29&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Scripts/data&quot; title=&quot;Module:Scripts/data&quot;&gt;Module:Scripts/data&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[=[&lt;br /&gt;
	When adding new scripts to this file, please don&amp;#039;t forget to add&lt;br /&gt;
	style definitons for the script in [[MediaWiki:Common.css]].&lt;br /&gt;
]=]&lt;br /&gt;
local u = mw.ustring.char&lt;br /&gt;
&lt;br /&gt;
--local m = {}&lt;br /&gt;
t = require(&amp;quot;Module:Table&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local m_djp= require(&amp;quot;Module:Scripts/data/djp&amp;quot;)&lt;br /&gt;
local m = t.shallowClone(m_djp)&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Adlm&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Adlam&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;؟ـ𞤀-𞥟&amp;quot;,&lt;br /&gt;
	capitalized = true,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Afak&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Afaka&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Aghb&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Caucasian Albanian&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐔰-𐕯&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Ahom&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Ahom&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑜀-𑝏&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Arab&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Arabic&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,	-- more precisely, impure abjad&lt;br /&gt;
	varieties = {&amp;quot;Jawi&amp;quot;, {&amp;quot;Nastaliq&amp;quot;, &amp;quot;Nastaleeq&amp;quot;}},&lt;br /&gt;
	characters = &amp;quot;؀-ۿݐ-ݿࡰ-ࣿﭐ-﷏ﷰ-﷿ﹰ-﻾𐋠-𐋻𐹠-𐹿𐻀-𐻿𞸀-𞻿&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;ٳ&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;اٟ&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;fa-Arab&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Arabic&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Arab&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Arab&amp;quot;].characters,&lt;br /&gt;
		otherNames = {&amp;quot;Perso-Arabic&amp;quot;},&lt;br /&gt;
		direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Arab&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;kk-Arab&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Arabic&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Arab&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Arab&amp;quot;].characters,&lt;br /&gt;
		direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Arab&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;ks-Arab&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Arabic&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Arab&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Arab&amp;quot;].characters,&lt;br /&gt;
		direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Arab&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;ku-Arab&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Arabic&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Arab&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Arab&amp;quot;].characters,&lt;br /&gt;
		direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Arab&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;ms-Arab&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Arabic&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Arab&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Arab&amp;quot;].characters,&lt;br /&gt;
		direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Arab&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;mzn-Arab&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Arabic&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Arab&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Arab&amp;quot;].characters,&lt;br /&gt;
		direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Arab&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;ota-Arab&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Arabic&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Arab&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Arab&amp;quot;].characters,&lt;br /&gt;
		direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Arab&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;pa-Arab&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Shahmukhi&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Arab&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Arab&amp;quot;].characters,&lt;br /&gt;
		otherNames = {&amp;quot;Arabic&amp;quot;},&lt;br /&gt;
		direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Arab&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;ps-Arab&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Arabic&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Arab&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Arab&amp;quot;].characters,&lt;br /&gt;
		direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Arab&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;sd-Arab&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Arabic&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Arab&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Arab&amp;quot;].characters,&lt;br /&gt;
		direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Arab&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;tt-Arab&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Arabic&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Arab&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Arab&amp;quot;].characters,&lt;br /&gt;
		direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Arab&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;ug-Arab&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Arabic&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Arab&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Arab&amp;quot;].characters,&lt;br /&gt;
		direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Arab&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;ur-Arab&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Arabic&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Arab&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Arab&amp;quot;].characters,&lt;br /&gt;
		direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Arab&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;xka-Arab&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Arabic&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Arab&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Arab&amp;quot;].characters,&lt;br /&gt;
		direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Arab&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Arab&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
-- Aran (Nastaliq) is subsumed into Arab&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Armi&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Imperial Aramaic&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐡀-𐡟&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Armn&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Armenian&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;԰-֏ﬓ-ﬗ&amp;quot;,&lt;br /&gt;
	capitalized = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Avst&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Avestan&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐬀-𐬿&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;pal-Avst&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Pazend&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Avst&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Avst&amp;quot;].characters,&lt;br /&gt;
		direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Avst&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Bali&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Balinese&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ᬀ-᭿&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Bamu&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Bamum&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ꚠ-꛿𖠀-𖨿&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Bass&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Bassa&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Bassa Vah&amp;quot;, &amp;quot;Vah&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𖫐-𖫿&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Batk&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Batak&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ᯀ-᯿&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Beng&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Bengali&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;॒॑।॥ঀ-৯৲-৿᳕᳖᳘᳐᳒᳡ᳪ᳭ᳲᳵ-᳷꣱&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;অা&amp;quot;, &amp;quot;ঋৃ&amp;quot;, &amp;quot;ঌৢ&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;আ&amp;quot;, &amp;quot;ৠ&amp;quot;, &amp;quot;ৡ&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;as-Beng&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Assamese&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Beng&amp;quot;][2],&lt;br /&gt;
		otherNames = {&amp;quot;Bengali-Assamese&amp;quot;, &amp;quot;Eastern Nagari&amp;quot;},&lt;br /&gt;
		characters = &amp;quot;॒॑।॥ঀ-য঱-৿᳕᳖᳘᳐᳒᳡ᳪ᳭ᳲᳵ-᳷꣱&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Beng&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Bhks&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Bhaiksuki&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑰀-𑱯&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Blis&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Blissymbols&amp;quot;,&lt;br /&gt;
	&amp;quot;logography&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Blissymbolics&amp;quot;},&lt;br /&gt;
	-- Not in Unicode&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Bopo&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Zhuyin&amp;quot;,&lt;br /&gt;
	&amp;quot;semisyllabary&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Zhuyin Fuhao&amp;quot;, &amp;quot;Bopomofo&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;ˇˉˊˋ˙˪˫、-〃〈-】〓-〟〪-〭〰〷・㄀-ㄯ﹅﹆｡-･&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Brah&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Brahmi&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑀀-𑁿&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;𑀅𑀸&amp;quot;, &amp;quot;𑀋𑀾&amp;quot;, &amp;quot;𑀏𑁂&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;𑀆&amp;quot;, &amp;quot;𑀌&amp;quot;, &amp;quot;𑀐&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Brai&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Braille&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;⠀-⣿&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Bugi&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Buginese&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Lontara&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;ᨀ-᨟ꧏ&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Buhd&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Buhid&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;᜵᜶ᝀ-᝟ꧏ&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Cakm&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Chakma&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;০-৯၀-၉𑄀-𑅏&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Cans&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Canadian syllabics&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;᐀-ᙿᢰ-᣿𑪰-𑪿&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Cari&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Carian&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐊠-𐋟&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Cham&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Cham&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ꨀ-꩟&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Cher&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Cherokee&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;Ꭰ-᏿ꭰ-ꮿ&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Chrs&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Chorasmian&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐾰-𐿟&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Copt&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Coptic&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;Ϣ-ϯⲀ-⳿𐋠-𐋻&amp;quot;, -- this is mostly &amp;quot;Coptic&amp;quot;, not unified &amp;quot;Greek and Coptic&amp;quot;&lt;br /&gt;
	capitalized = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Cpmn&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Cypro-Minoan&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Cypro Minoan&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𐄀𐄁𒾐-𒿿&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Cprt&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Cypriot&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐄀-𐄂𐄇-𐄳𐄷-𐄿𐠀-𐠿&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Cyrl&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Cyrillic&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;Ѐ-ԯᲀ-᲏ᴫᵸ᷸ⷠ-ⷿ⹃Ꙁ-ꚟ︮︯𞀰-𞂏&amp;quot;,&lt;br /&gt;
	capitalized = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Cyrs&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Old Cyrillic&amp;quot;,&lt;br /&gt;
	m[&amp;quot;Cyrl&amp;quot;][2],&lt;br /&gt;
	aliases = {&amp;quot;Early Cyrillic&amp;quot;},&lt;br /&gt;
	characters = m[&amp;quot;Cyrl&amp;quot;].characters,&lt;br /&gt;
	capitalized = m[&amp;quot;Cyrl&amp;quot;].capitalized,&lt;br /&gt;
	wikipedia_article = &amp;quot;Early Cyrillic alphabet&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Deva&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Devanagari&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ऀ-ॿ꣠-ꣿ𑬀-𑬉&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;ॆॆ&amp;quot;, &amp;quot;ेे&amp;quot;, &amp;quot;ाॅ&amp;quot;, &amp;quot;ाॆ&amp;quot;, &amp;quot;ाꣿ&amp;quot;, &amp;quot;ॊॆ&amp;quot;, &amp;quot;ाे&amp;quot;, &amp;quot;ाै&amp;quot;, &amp;quot;ोे&amp;quot;, &amp;quot;ाऺ&amp;quot;, &amp;quot;ॖॖ&amp;quot;, &amp;quot;अॅ&amp;quot;, &amp;quot;अॆ&amp;quot;, &amp;quot;अा&amp;quot;, &amp;quot;एॅ&amp;quot;, &amp;quot;एॆ&amp;quot;, &amp;quot;एे&amp;quot;, &amp;quot;एꣿ&amp;quot;, &amp;quot;ऎॆ&amp;quot;, &amp;quot;अॉ&amp;quot;, &amp;quot;आॅ&amp;quot;, &amp;quot;अॊ&amp;quot;, &amp;quot;आॆ&amp;quot;, &amp;quot;अो&amp;quot;, &amp;quot;आे&amp;quot;, &amp;quot;अौ&amp;quot;, &amp;quot;आै&amp;quot;, &amp;quot;ओे&amp;quot;, &amp;quot;अऺ&amp;quot;, &amp;quot;अऻ&amp;quot;, &amp;quot;आऺ&amp;quot;, &amp;quot;अाꣿ&amp;quot;, &amp;quot;आꣿ&amp;quot;, &amp;quot;ऒॆ&amp;quot;, &amp;quot;अॖ&amp;quot;, &amp;quot;अॗ&amp;quot;, &amp;quot;ॶॖ&amp;quot;, &amp;quot;्‍?ा&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;ꣿ&amp;quot;, &amp;quot;ै&amp;quot;, &amp;quot;ॉ&amp;quot;, &amp;quot;ॊ&amp;quot;, &amp;quot;ॏ&amp;quot;, &amp;quot;ॏ&amp;quot;, &amp;quot;ो&amp;quot;, &amp;quot;ौ&amp;quot;, &amp;quot;ौ&amp;quot;, &amp;quot;ऻ&amp;quot;, &amp;quot;ॗ&amp;quot;, &amp;quot;ॲ&amp;quot;, &amp;quot;ऄ&amp;quot;, &amp;quot;आ&amp;quot;, &amp;quot;ऍ&amp;quot;, &amp;quot;ऎ&amp;quot;, &amp;quot;ऐ&amp;quot;, &amp;quot;ꣾ&amp;quot;, &amp;quot;ꣾ&amp;quot;, &amp;quot;ऑ&amp;quot;, &amp;quot;ऑ&amp;quot;, &amp;quot;ऒ&amp;quot;, &amp;quot;ऒ&amp;quot;, &amp;quot;ओ&amp;quot;, &amp;quot;ओ&amp;quot;, &amp;quot;औ&amp;quot;, &amp;quot;औ&amp;quot;, &amp;quot;औ&amp;quot;, &amp;quot;ॳ&amp;quot;, &amp;quot;ॴ&amp;quot;, &amp;quot;ॴ&amp;quot;, &amp;quot;ॵ&amp;quot;, &amp;quot;ॵ&amp;quot;, &amp;quot;ॵ&amp;quot;, &amp;quot;ॶ&amp;quot;, &amp;quot;ॷ&amp;quot;, &amp;quot;ॷ&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Diak&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Dhives Akuru&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Dives Akuru&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𑤀-𑤆𑤉𑤌-𑤓𑤕𑤖𑤘-𑤵𑤷𑤸𑤻-𑥆𑥐-𑥙&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Dogr&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Dogra&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑠀-𑠻&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Dsrt&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Deseret&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐐀-𐑏&amp;quot;,&lt;br /&gt;
	capitalized = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Dupl&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Duployan&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𛰀-𛱪𛱰-𛱼𛲀-𛲈𛲐-𛲙𛲜-𛲟&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Egyd&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Demotic&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad, logography&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Egyh&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Hieratic&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad, logography&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Egyp&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Egyptian hieroglyphic&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad, logography&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𓀀-𓑕&amp;quot;,&lt;br /&gt;
	varieties = {&amp;quot;Hieratic&amp;quot;},&lt;br /&gt;
	wikipedia_article = &amp;quot;Egyptian hieroglyphs&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;𓃁&amp;quot;, &amp;quot;𓆖&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;𓃀𓐶𓂝&amp;quot;, &amp;quot;𓆓𓐳𓐷𓏏𓐰𓇿𓐸&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Elba&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Elbasan&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐔀-𐔧&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Elym&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Elymaic&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐿠-𐿶&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Ethi&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Ethiopic&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Ge&amp;#039;ez&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;ሀ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፝-፼ᎀ-᎙ⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮ𞟠-𞟦𞟨-𞟫𞟭𞟮𞟰-𞟾&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Geok&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Khutsuri&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;Ⴀ-ჅჇჍ჻ⴀ-ⴥⴧⴭ&amp;quot;, -- Ⴀ-Ⴭ is Asomtavruli, ⴀ-ⴭ is Nuskhuri&lt;br /&gt;
	varieties = {&amp;quot;Nuskhuri&amp;quot;, &amp;quot;Asomtavruli&amp;quot;},&lt;br /&gt;
	capitalized = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Geor&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Georgian&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ა-ჿᲐ-ᲺᲽ-Ჿ&amp;quot;, -- ა-ჿ is lowercase Mkhedruli; Ა-Ჿ is uppercase Mkhedruli (Mtavruli)&lt;br /&gt;
	varieties = {&amp;quot;Mkhedruli&amp;quot;, &amp;quot;Mtavruli&amp;quot;},&lt;br /&gt;
	capitalized = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Glag&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Glagolitic&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;Ⰰ-ⱟ𞀀-𞀆𞀈-𞀘𞀛-𞀡𞀣𞀤𞀦-𞀪&amp;quot;,&lt;br /&gt;
	capitalized = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Gong&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Gunjala Gondi&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑵠-𑵥𑵧𑵨𑵪-𑶎𑶐𑶑𑶓-𑶘𑶠-𑶩&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Gonm&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Masaram Gondi&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑴀-𑴆𑴈𑴉𑴋-𑴶𑴺𑴼𑴽𑴿-𑵇𑵐-𑵙&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Goth&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Gothic&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐌰-𐍊&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Gran&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Grantha&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑌀-𑌃𑌅-𑌌𑌏-𑌐𑌓-𑌨𑌪-𑌰𑌲𑌳𑌵-𑌹𑌼-𑍄𑍇𑍈𑍋-𑍍𑍐𑍗𑍝-𑍣𑍦-𑍬𑍰-𑍴&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Grek&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Greek&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;Ͱ-ͷͺ-Ϳ΄-ΊΌΎ-ΡΣ-ϡϰ-Ͽᴦ-ᴪᵝ-ᵡᵦ-ᵪᶿΩ℩ꭥ𐅀-𐆎𐆠𝈀-𝉅&amp;quot;,&lt;br /&gt;
	capitalized = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;Polyt&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Greek&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Grek&amp;quot;][2],&lt;br /&gt;
		characters = &amp;quot;ἀ-῾&amp;quot; .. m[&amp;quot;Grek&amp;quot;].characters,&lt;br /&gt;
		capitalized = m[&amp;quot;Grek&amp;quot;].capitalized,&lt;br /&gt;
		parent = &amp;quot;Grek&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Gujr&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Gujarati&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ઁ-ઃઅ-ઍએ-ઑઓ-નપ-રલળવ-હ઼-ૅે-ૉો-્ૐૠ-ૣ૦-૱ૺ-૿&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;ઓ&amp;quot;, &amp;quot;અાૈ&amp;quot;, &amp;quot;અા&amp;quot;, &amp;quot;અૅ&amp;quot;, &amp;quot;અે&amp;quot;, &amp;quot;અૈ&amp;quot;, &amp;quot;અૉ&amp;quot;, &amp;quot;અો&amp;quot;, &amp;quot;અૌ&amp;quot;, &amp;quot;આૅ&amp;quot;, &amp;quot;આૈ&amp;quot;, &amp;quot;ૅા&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;અાૅ&amp;quot;, &amp;quot;ઔ&amp;quot;, &amp;quot;આ&amp;quot;, &amp;quot;ઍ&amp;quot;, &amp;quot;એ&amp;quot;, &amp;quot;ઐ&amp;quot;, &amp;quot;ઑ&amp;quot;, &amp;quot;ઓ&amp;quot;, &amp;quot;ઔ&amp;quot;, &amp;quot;ઓ&amp;quot;, &amp;quot;ઔ&amp;quot;, &amp;quot;ૉ&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Guru&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Gurmukhi&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ਁ-ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹ਼ਾ-ੂੇੈੋ-੍ੑਖ਼-ੜਫ਼੦-੶&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;ਅਾ&amp;quot;, &amp;quot;ਅੈ&amp;quot;, &amp;quot;ਅੌ&amp;quot;, &amp;quot;ੲਿ&amp;quot;, &amp;quot;ੲੀ&amp;quot;, &amp;quot;ੲੇ&amp;quot;, &amp;quot;ੳੁ&amp;quot;, &amp;quot;ੳੂ&amp;quot;, &amp;quot;ੳੋ&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;ਆ&amp;quot;, &amp;quot;ਐ&amp;quot;, &amp;quot;ਔ&amp;quot;, &amp;quot;ਇ&amp;quot;, &amp;quot;ਈ&amp;quot;, &amp;quot;ਏ&amp;quot;, &amp;quot;ਉ&amp;quot;, &amp;quot;ਊ&amp;quot;, &amp;quot;ਓ&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Hang&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Hangul&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Hangeul&amp;quot;},&lt;br /&gt;
	characters = (&lt;br /&gt;
		&amp;quot;가-힣&amp;quot;.. -- Syllables&lt;br /&gt;
		&amp;quot;ᄀ-ᇿ&amp;quot;.. -- Jamo&lt;br /&gt;
		&amp;quot;ꥠ-ꥼ&amp;quot;.. -- Jamo Ext-A&lt;br /&gt;
		&amp;quot;ힰ-ퟻ&amp;quot;.. -- Jamo Ext-B&lt;br /&gt;
		&amp;quot;ㄱ-ㆎ&amp;quot;.. -- Compat Jamo&lt;br /&gt;
		&amp;quot;ﾠ-ￜ&amp;quot; -- Halfwidth&lt;br /&gt;
	),&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Hani&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Han&amp;quot;,&lt;br /&gt;
	&amp;quot;logography&amp;quot;,&lt;br /&gt;
	characters = (&lt;br /&gt;
		&amp;quot;一-鿿&amp;quot;..&lt;br /&gt;
		&amp;quot;㐀-䶿&amp;quot;.. -- ExtA&lt;br /&gt;
		&amp;quot;𠀀-𮯯&amp;quot;.. -- SIP &lt;br /&gt;
		&amp;quot;𰀀-𲎯&amp;quot;.. -- ExtG-H&lt;br /&gt;
		&amp;quot;﨎﨏﨑﨓﨔﨟﨡﨣﨤﨧﨨﨩&amp;quot;..&lt;br /&gt;
		&amp;quot;⺀-⻿&amp;quot;.. -- Radicals Supplement&lt;br /&gt;
		&amp;quot;　-〿&amp;quot;.. -- CJK Symbols and Punctuation&lt;br /&gt;
		&amp;quot;𖿢𖿣𖿰𖿱&amp;quot;.. -- Ideographic Symbols and Punctuation&lt;br /&gt;
		&amp;quot;㇀-㇯&amp;quot;.. -- Strokes&lt;br /&gt;
		&amp;quot;㋿㍻-㍿&amp;quot; .. -- 組文字&lt;br /&gt;
		&amp;quot;㈠-㉇㊀-㊰㋀-㋋㍘-㍰㏠-㏾🈐-🈒🈔-🈻🉀-🉈🉐🉑🉠-🉥&amp;quot;&lt;br /&gt;
	),&lt;br /&gt;
	varieties = {&amp;quot;Hanzi&amp;quot;, &amp;quot;Kanji&amp;quot;, &amp;quot;Hanja&amp;quot;, &amp;quot;Chu Nom&amp;quot;},&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;Hans&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Simplified Han&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Hani&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Hani&amp;quot;].characters,&lt;br /&gt;
		spaces = m[&amp;quot;Hani&amp;quot;].spaces,&lt;br /&gt;
		parent = &amp;quot;Hani&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;Hant&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Traditional Han&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Hani&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Hani&amp;quot;].characters,&lt;br /&gt;
		spaces = m[&amp;quot;Hani&amp;quot;].spaces,&lt;br /&gt;
		parent = &amp;quot;Hani&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Hano&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Hanunoo&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ᜠ-᜴&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Hatr&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Hatran&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐣠-𐣿&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Hebr&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Hebrew&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,	-- more precisely, impure abjad&lt;br /&gt;
	characters = u(0x0590) .. &amp;quot;-&amp;quot; .. u(0x05FF) .. u(0xFB1D) .. &amp;quot;-&amp;quot; .. u(0xFB4F),&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Hira&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Hiragana&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ぁ-ゟ𛀁-𛄞𛅐𛅑𛅒🈀&amp;quot;,&lt;br /&gt;
	varieties = {&amp;quot;Hentaigana&amp;quot;},&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Hluw&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Anatolian Hieroglyphs&amp;quot;,&lt;br /&gt;
	&amp;quot;logography, syllabary&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𔐀-𔙆&amp;quot;,&lt;br /&gt;
	wikipedia_article = &amp;quot;Anatolian hieroglyphs&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Hmng&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Pahawh Hmong&amp;quot;,&lt;br /&gt;
	&amp;quot;semisyllabary&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Hmong&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𖬀-𖮏&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Hmnp&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Nyiakeng Puachue Hmong&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𞄀‎-𞅏&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Hung&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Old Hungarian&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Hungarian runic&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𐲀-𐲲&amp;quot;,&lt;br /&gt;
	capitalized = true,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Ibrn&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Iberian&amp;quot;,&lt;br /&gt;
	&amp;quot;semisyllabary&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Imag&amp;quot;] = {&lt;br /&gt;
	-- To be used to avoid any formatting or link processing&lt;br /&gt;
	&amp;quot;Image-rendered&amp;quot;,&lt;br /&gt;
	-- This should not have any characters listed&lt;br /&gt;
	translit = false,&lt;br /&gt;
	character_category = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Inds&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Indus&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Harappan&amp;quot;, &amp;quot;Indus Valley&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Ipach&amp;quot;] = {&lt;br /&gt;
	&amp;quot;International Phonetic Alphabet&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;IPA&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Ital&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Old Italic&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐌀-𐌯&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Java&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Javanese&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ꦀ-꧟&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Jurc&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Jurchen&amp;quot;,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Kali&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Kayah Li&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;꤀-꤯&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Kana&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Katakana&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;゠-ヿㇰ-ㇿ㌀-㍗ｦ-ﾟ𛀀𛅤𛅥𛅦𛅧&amp;quot;,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Kawi&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Kawi&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑼀-𑽙&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Khar&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Kharoshthi&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐨀-𐩘&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Khmr&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Khmer&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ក-៝០-៩៰-៹᧠-᧿&amp;quot;,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;ឣ&amp;quot;, &amp;quot;ឤ&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;អ&amp;quot;, &amp;quot;អា&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Khoj&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Khojki&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑈀-𑈾&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;𑈀𑈬𑈱&amp;quot;, &amp;quot;𑈀𑈬&amp;quot;, &amp;quot;𑈀𑈱&amp;quot;, &amp;quot;𑈀𑈳&amp;quot;, &amp;quot;𑈁𑈱&amp;quot;, &amp;quot;𑈆𑈬&amp;quot;, &amp;quot;𑈬𑈰&amp;quot;, &amp;quot;𑈬𑈱&amp;quot;, &amp;quot;𑉀𑈮&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;𑈇&amp;quot;, &amp;quot;𑈁&amp;quot;, &amp;quot;𑈅&amp;quot;, &amp;quot;𑈇&amp;quot;, &amp;quot;𑈇&amp;quot;, &amp;quot;𑈃&amp;quot;, &amp;quot;𑈲&amp;quot;, &amp;quot;𑈳&amp;quot;, &amp;quot;𑈂&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Kitl&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Khitan Large&amp;quot;,&lt;br /&gt;
	&amp;quot;logography, syllabary&amp;quot;,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Kits&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Khitan Small&amp;quot;,&lt;br /&gt;
	&amp;quot;logography, syllabary&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𘬀-𘳕&amp;quot;..u(0x16FE4),&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Knda&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Kannada&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ಀ-ೲ&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;ಉಾ&amp;quot;, &amp;quot;ಋಾ&amp;quot;, &amp;quot;ಒೌ&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;ಊ&amp;quot;, &amp;quot;ೠ&amp;quot;, &amp;quot;ಔ&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Kpel&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Kpelle&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	-- Not in Unicode&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Kthi&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Kaithi&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑂀-𑃍&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Lana&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Tai Tham&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Tham&amp;quot;, &amp;quot;Tua Mueang&amp;quot;, &amp;quot;Lanna&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;ᨠ-ᩞ᩠-᩿᩼᪀-᪉᪐-᪙᪠-᪭&amp;quot;,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Laoo&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Lao&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ກຂຄຆ-ຊຌ-ຣລວ-ຽເ-ໄໆ່-໎໐-໙ໜ-ໟ&amp;quot;,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Latn&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Latin&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Roman&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;A-Za-zªºÀ-ÖØ-öø-ɏḀ-ỿ&amp;quot;,&lt;br /&gt;
	varieties = {&amp;quot;Rumi&amp;quot;, &amp;quot;Romaji&amp;quot;, &amp;quot;Rōmaji&amp;quot;, &amp;quot;Romaja&amp;quot;},&lt;br /&gt;
	capitalized = true,&lt;br /&gt;
	translit = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;Latf&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Fraktur&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Latn&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Latn&amp;quot;].characters,&lt;br /&gt;
		otherNames = {&amp;quot;Blackletter&amp;quot;}, -- Blackletter is actually the parent &amp;quot;script&amp;quot;&lt;br /&gt;
		capitalized = m[&amp;quot;Latn&amp;quot;].capitalized,&lt;br /&gt;
		translit = m[&amp;quot;Latn&amp;quot;].translit,&lt;br /&gt;
		parent = &amp;quot;Latn&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	m[&amp;quot;Latg&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Gaelic&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Latn&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Latn&amp;quot;].characters,&lt;br /&gt;
		otherNames = {&amp;quot;Irish&amp;quot;},&lt;br /&gt;
		capitalized = m[&amp;quot;Latn&amp;quot;].capitalized,&lt;br /&gt;
		translit = m[&amp;quot;Latn&amp;quot;].translit,&lt;br /&gt;
		parent = &amp;quot;Latn&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;Latnx&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Latin&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Latn&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Latn&amp;quot;].characters .. &amp;quot;ɐ-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꟊꟐꟑꟓꟕ-ꟙꟲ-ꟿꬰ-ꭚꭜ-ꭤꭦ-ꭩﬀ-ﬆＡ-Ｚａ-ｚ𐞀-𐞅𐞇-𐞰𐞲-𐞺𝼀-𝼞𝼥-𝼪&amp;quot;,&lt;br /&gt;
		capitalized = m[&amp;quot;Latn&amp;quot;].capitalized,&lt;br /&gt;
		translit = m[&amp;quot;Latn&amp;quot;].translit,&lt;br /&gt;
		parent = &amp;quot;Latn&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;pjt-Latn&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Latin&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Latn&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Latn&amp;quot;].characters,&lt;br /&gt;
		capitalized = m[&amp;quot;Latn&amp;quot;].capitalized,&lt;br /&gt;
		translit = m[&amp;quot;Latn&amp;quot;].translit,&lt;br /&gt;
		parent = &amp;quot;Latn&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Leke&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Leke&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Lepc&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Lepcha&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ᰀ-ᱏ&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Limb&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Limbu&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ᤀ-᥏&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Lina&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Linear A&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐘀-𐝧&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Linb&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Linear B&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐀀-𐃺&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Lisu&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Lisu&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Fraser&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;ꓐ-꓿𑾰&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;[&amp;#039;’]&amp;quot;, &amp;quot;[.ꓸ][.ꓸ]&amp;quot;, &amp;quot;[.ꓸ][,ꓹ]&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;ʼ&amp;quot;, &amp;quot;ꓺ&amp;quot;, &amp;quot;ꓻ&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Loma&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Loma&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	-- Not in Unicode&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Lyci&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Lycian&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐊀-𐊜&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Lydi&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Lydian&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐤠-𐤿&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Mahj&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Mahajani&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑅐-𑅶&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Maka&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Lontara&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Makasar&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𑻠-𑻸&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Mand&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Mandaic&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Mandaean&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;ࡀ-࡞&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Mani&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Manichaean&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐫀-𐫶&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Marc&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Marchen&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑱰-𑲶&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Maya&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Maya&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Maya hieroglyphic&amp;quot;, &amp;quot;Mayan&amp;quot;, &amp;quot;Mayan hieroglyphic&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𝋠-𝋳&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Medf&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Medefaidrin&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Oberi Okaime&amp;quot;, &amp;quot;Oberi Ɔkaimɛ&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𖹀-𖺚&amp;quot;,&lt;br /&gt;
	capitalized = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Mend&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Mende&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Mende Kikakui&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𞠀-𞣖&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Merc&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Meroitic cursive&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐦠-𐦿&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Mero&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Meroitic hieroglyphic&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐦀-𐦟&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Mlym&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Malayalam&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ഀ-ൿ&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;ഇൗ&amp;quot;, &amp;quot;ഉൗ&amp;quot;, &amp;quot;എെ&amp;quot;, &amp;quot;ഒാ&amp;quot;, &amp;quot;ഒൗ&amp;quot;, &amp;quot;ക്‍&amp;quot;, &amp;quot;ണ്‍&amp;quot;, &amp;quot;ന്‍റ&amp;quot;, &amp;quot;ന്‍&amp;quot;, &amp;quot;മ്‍&amp;quot;, &amp;quot;യ്‍&amp;quot;, &amp;quot;ര്‍&amp;quot;, &amp;quot;ല്‍&amp;quot;, &amp;quot;ള്‍&amp;quot;, &amp;quot;ഴ്‍&amp;quot;, &amp;quot;െെ&amp;quot;, &amp;quot;ൻ്റ&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;ഈ&amp;quot;, &amp;quot;ഊ&amp;quot;, &amp;quot;ഐ&amp;quot;, &amp;quot;ഓ&amp;quot;, &amp;quot;ഔ&amp;quot;, &amp;quot;ൿ&amp;quot;, &amp;quot;ൺ&amp;quot;, &amp;quot;ൻറ&amp;quot;, &amp;quot;ൻ&amp;quot;, &amp;quot;ൔ&amp;quot;, &amp;quot;ൕ&amp;quot;, &amp;quot;ർ&amp;quot;, &amp;quot;ൽ&amp;quot;, &amp;quot;ൾ&amp;quot;, &amp;quot;ൖ&amp;quot;, &amp;quot;ൈ&amp;quot;, &amp;quot;ന്റ&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Modi&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Modi&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑘀-𑙙&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;𑘀𑘹&amp;quot;, &amp;quot;𑘀𑘺&amp;quot;, &amp;quot;𑘁𑘹&amp;quot;, &amp;quot;𑘁𑘺&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;𑘊&amp;quot;, &amp;quot;𑘋&amp;quot;, &amp;quot;𑘌&amp;quot;, &amp;quot;𑘍&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Mong&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Mongolian&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Mongol bichig&amp;quot;, &amp;quot;Hudum Mongol bichig&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;᠀-᠅᠊-᠙ᠠ-ᡂᡸᢀ-ᢗᢦᢩ‌‍ 𑙠-𑙨&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;down&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;mnc-Mong&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Manchu&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Mong&amp;quot;][2],&lt;br /&gt;
		characters = &amp;quot;᠁᠄᠈-᠏ᠠᠣᠨ-ᠪᠮ-ᠰᠴ-ᠸᠺᡝᡟ-ᡡᡤ-ᡩᡬ-ᡱᡳ-ᡷᢀ-ᢈᢏᢚ-ᢥᢨᢪ‌‍ &amp;quot;,&lt;br /&gt;
		direction = &amp;quot;down&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Mong&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	m[&amp;quot;sjo-Mong&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Xibe&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Mong&amp;quot;][2],&lt;br /&gt;
		aliases = {&amp;quot;Sibe&amp;quot;},&lt;br /&gt;
		characters = &amp;quot;᠄᠇᠊-᠏ᠠᠣᠨᠪᠮ-ᠰᠴ-ᠸᠺᡝ-ᡲ‌‍ &amp;quot;,&lt;br /&gt;
		direction = &amp;quot;down&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;mnc-Mong&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	m[&amp;quot;xwo-Mong&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Clear Script&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Mong&amp;quot;][2],&lt;br /&gt;
		aliases = {&amp;quot;Todo&amp;quot;, &amp;quot;Todo bichig&amp;quot;},&lt;br /&gt;
		characters = &amp;quot;᠀᠁᠄-᠆᠊-ᠠᠨᠯ-ᠱᠴᠷᠸᠺᠻᡀᡃ-ᡜᢀ-ᢇᢉ-ᢏᢔᢖ-ᢙᢧ‌‍ 𑙩-𑙬&amp;quot;,&lt;br /&gt;
		direction = &amp;quot;down&amp;quot;,&lt;br /&gt;
		parent = &amp;quot;Mong&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Moon&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Moon&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Moon System of Embossed Reading&amp;quot;, &amp;quot;Moon type&amp;quot;, &amp;quot;Moon writing&amp;quot;, &amp;quot;Moon alphabet&amp;quot;, &amp;quot;Moon code&amp;quot;},&lt;br /&gt;
	-- Not in Unicode&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Morse&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Morse code&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Mroo&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Mro&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𖩀-𖩯&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Mtei&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Meitei Mayek&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Meetei Mayek&amp;quot;, &amp;quot;Manipuri&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;ꯀ-꯹ꫠ-꫶&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Mult&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Multani&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑊀-𑊩&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Music&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Musical notation&amp;quot;,&lt;br /&gt;
	&amp;quot;pictography&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𝄀-𝇨&amp;quot;,&lt;br /&gt;
	translit = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Mymr&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Burmese&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Myanmar&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;က-႟ꩠ-ꩿꧠ-ꧾ&amp;quot;,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Nagm&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Nag Mundari&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𞓐-𞓹&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Nand&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Nandinagari&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑦠-𑧤&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Narb&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Old North Arabian&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐪀-𐪟&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Nbat&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Nabataean&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Nabatean&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𐢀-𐢯&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Newa&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Newa&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Newar&amp;quot;, &amp;quot;Newari&amp;quot;, &amp;quot;Prachalit Nepal&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𑐀-𑑡&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Nkdb&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Dongba&amp;quot;,&lt;br /&gt;
	&amp;quot;pictography&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Naxi Dongba&amp;quot;, &amp;quot;Nakhi Dongba&amp;quot;, &amp;quot;Tomba&amp;quot;, &amp;quot;Tompa&amp;quot;, &amp;quot;Mo-so&amp;quot;},&lt;br /&gt;
	spaces = false,&lt;br /&gt;
	-- Not in Unicode&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Nkgb&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Geba&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Nakhi Geba&amp;quot;, &amp;quot;Naxi Geba&amp;quot;},&lt;br /&gt;
	spaces = false,&lt;br /&gt;
	-- Not in Unicode&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Nkoo&amp;quot;] = {&lt;br /&gt;
	&amp;quot;N&amp;#039;Ko&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;߀-߿&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;None&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Unspecified&amp;quot;, -- renders as &amp;#039;unspecified script&amp;#039;&lt;br /&gt;
	-- This should not have any characters listed&lt;br /&gt;
	translit = false,&lt;br /&gt;
	character_category = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Nshu&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Nüshu&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Nushu&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𖿡𛅰-𛋻&amp;quot;,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Ogam&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Ogham&amp;quot;,&lt;br /&gt;
	characters = &amp;quot; -᚜&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Olck&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Ol Chiki&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;᱐-᱿&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Orkh&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Orkhon runes&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Old Turkic&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𐰀-𐱈&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Orya&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Oriya&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Odia&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;ଁ-୷&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;ଅା&amp;quot;, &amp;quot;ଏୗ&amp;quot;, &amp;quot;ଓୗ&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;ଆ&amp;quot;, &amp;quot;ଐ&amp;quot;, &amp;quot;ଔ&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Osge&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Osage&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐒰-𐓻&amp;quot;,&lt;br /&gt;
	capitalized = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Osma&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Osmanya&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐒀-𐒩&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Ougr&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Old Uyghur&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad, alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐽰-𐾉&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;down&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Palm&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Palmyrene&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐡠-𐡿&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Pauc&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Pau Cin Hau&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑫀-𑫸&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Perm&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Old Permic&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐍐-𐍺&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Phag&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Phags-pa&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;᠂᠃᠅‌‍ 。ꡀ-꡷&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;down&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Phli&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Inscriptional Pahlavi&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐭠-𐭿&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Phlp&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Psalter Pahlavi&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐮀-𐮯&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Phlv&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Book Pahlavi&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
	-- Not in Unicode&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Phnx&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Phoenician&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐤀-𐤟&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Plrd&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Pollard&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Miao&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𖼀-𖾟&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Prti&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Inscriptional Parthian&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐭀-𐭟&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Ranj&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Ranjana&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	-- Not in Unicode&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Rjng&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Rejang&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ꤰ-꥟&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Rohg&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Hanifi Rohingya&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐴀-𐴹&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Roro&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Rongorongo&amp;quot;,&lt;br /&gt;
	-- Not in Unicode&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Rumin&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Rumi numerals&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐹠-𐹾&amp;quot;,&lt;br /&gt;
	character_category = &amp;quot;Rumi numerals&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Runr&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Runic&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ᚠ-ᛰ&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Samr&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Samaritan&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ࠀ-࠾&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Sarb&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Old South Arabian&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐩠-𐩿&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Saur&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Saurashtra&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ꢀ-꣙&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Semap&amp;quot;] = {&lt;br /&gt;
	&amp;quot;flag semaphore&amp;quot;,&lt;br /&gt;
	&amp;quot;pictography&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Sgnw&amp;quot;] = {&lt;br /&gt;
	&amp;quot;SignWriting&amp;quot;,&lt;br /&gt;
	&amp;quot;pictography&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𝠀-𝪯&amp;quot;,&lt;br /&gt;
	translit = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Shaw&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Shavian&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐑐-𐑿&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Shrd&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Sharada&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑆀-𑇙&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Shui&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Sui&amp;quot;,&lt;br /&gt;
	&amp;quot;logography&amp;quot;,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
	-- Not in Unicode&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Sidd&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Siddham&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑖀-𑗝&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Sind&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Khudawadi&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑊰-𑋹&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;𑊰𑋠&amp;quot;, &amp;quot;𑊰𑋥&amp;quot;, &amp;quot;𑊰𑋦&amp;quot;, &amp;quot;𑊰𑋧&amp;quot;, &amp;quot;𑊰𑋨&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;𑊱&amp;quot;, &amp;quot;𑊶&amp;quot;, &amp;quot;𑊷&amp;quot;, &amp;quot;𑊸&amp;quot;, &amp;quot;𑊹&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Sinh&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Sinhalese&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Sinhala&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;ං-෴&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;අා&amp;quot;, &amp;quot;අැ&amp;quot;, &amp;quot;අෑ&amp;quot;, &amp;quot;උෟ&amp;quot;, &amp;quot;ඍෘ&amp;quot;, &amp;quot;ඏෟ&amp;quot;, &amp;quot;එ්&amp;quot;, &amp;quot;එෙ&amp;quot;, &amp;quot;ඔෟ&amp;quot;, &amp;quot;ෘෘ&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;ආ&amp;quot;, &amp;quot;ඇ&amp;quot;, &amp;quot;ඈ&amp;quot;, &amp;quot;ඌ&amp;quot;, &amp;quot;ඎ&amp;quot;, &amp;quot;ඐ&amp;quot;, &amp;quot;ඒ&amp;quot;, &amp;quot;ඓ&amp;quot;, &amp;quot;ඖ&amp;quot;, &amp;quot;ෲ&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Sogd&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Sogdian&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐼰-𐽙&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Sogo&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Old Sogdian&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐼀-𐼧&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Sora&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Sorang Sompeng&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Sora Sompeng&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𑃐-𑃹&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Soyo&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Soyombo&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑩐-𑪢&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Sund&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Sundanese&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ᮀ-ᮿ&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Sylo&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Syloti Nagri&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Sylheti Nagari&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;ꠀ-꠫&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Syrc&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Syriac&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,	-- more precisely, impure abjad&lt;br /&gt;
	characters = &amp;quot;܀-ݏ&amp;quot;..u(0x0860)..&amp;quot;-&amp;quot;..u(0x086A),&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Syre, Syrj, Syrn are apparently subsumed into Syrc; discuss if this causes issues&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Tagb&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Tagbanwa&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ᝠ-ᝳ&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Takr&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Takri&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑚀-𑛉&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;𑚀𑚭&amp;quot;, &amp;quot;𑚀𑚴&amp;quot;, &amp;quot;𑚀𑚵&amp;quot;, &amp;quot;𑚆𑚲&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;𑚁&amp;quot;, &amp;quot;𑚈&amp;quot;, &amp;quot;𑚉&amp;quot;, &amp;quot;𑚇&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Tale&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Tai Nüa&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Tai Nuea&amp;quot;, &amp;quot;New Tai Nüa&amp;quot;, &amp;quot;New Tai Nuea&amp;quot;, &amp;quot;Dehong Dai&amp;quot;, &amp;quot;Tai Dehong&amp;quot;, &amp;quot;Tai Le&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;ᥐ-ᥭᥰ-ᥴ&amp;quot;,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Talu&amp;quot;] = {&lt;br /&gt;
	&amp;quot;New Tai Lue&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ᦀ-ᦫᦰ-ᧉ᧐-᧚᧞᧟&amp;quot;,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Taml&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Tamil&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ஂ-௺𑿀-𑿿&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;அூ&amp;quot;, &amp;quot;ஸ்ரீ&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;ஆ&amp;quot;, &amp;quot;ஶ்ரீ&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Tang&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Tangut&amp;quot;,&lt;br /&gt;
	&amp;quot;logography, syllabary&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𖿠𗀀-𘫿𘴀-𘴈&amp;quot;,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Tavt&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Tai Viet&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ꪀ-ꫂꫛ-꫟&amp;quot;,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Telu&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Telugu&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ఀ-౿&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;ఒౌ&amp;quot;, &amp;quot;ఒౕ&amp;quot;, &amp;quot;ిౕ&amp;quot;, &amp;quot;ెౕ&amp;quot;, &amp;quot;ొౕ&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;ఔ&amp;quot;, &amp;quot;ఓ&amp;quot;, &amp;quot;ీ&amp;quot;, &amp;quot;ే&amp;quot;, &amp;quot;ో&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Teng&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Tengwar&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Tfng&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Tifinagh&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad, alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ⴰ-⵿&amp;quot;,&lt;br /&gt;
	otherNames = {&amp;quot;Libyco-Berber&amp;quot;, &amp;quot;Berber&amp;quot;}, -- per Wikipedia, Libyco-Berber is the parent&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Tglg&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Baybayin&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Tagalog&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;ᜀ-᜔&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Thaa&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Thaana&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ހ-ޱ&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Thai&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Thai&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ก-ฺเ-๛&amp;quot;,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Tibt&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Tibetan&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ༀ-࿚&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		combiningClasses = {[&amp;quot;༹&amp;quot;] = 1},&lt;br /&gt;
		from = {&amp;quot;ཷ&amp;quot;, &amp;quot;ཹ&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;ྲཱྀ&amp;quot;, &amp;quot;ླཱྀ&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;sit-tam-Tibt&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Tamyig&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Tibt&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Tibt&amp;quot;].characters,&lt;br /&gt;
		parent = &amp;quot;Tibt&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Tibt&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	m[&amp;quot;xzh-Tibt&amp;quot;] = {&lt;br /&gt;
		&amp;quot;Zhang-Zhung&amp;quot;,&lt;br /&gt;
		m[&amp;quot;Tibt&amp;quot;][2],&lt;br /&gt;
		characters = m[&amp;quot;Tibt&amp;quot;].characters,&lt;br /&gt;
		parent = &amp;quot;Tibt&amp;quot;,&lt;br /&gt;
		normalizationFixes = m[&amp;quot;Tibt&amp;quot;].normalizationFixes,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Tirh&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Tirhuta&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𑒀-𑓙&amp;quot;,&lt;br /&gt;
	normalizationFixes = {&lt;br /&gt;
		from = {&amp;quot;𑒁𑒰&amp;quot;, &amp;quot;𑒋𑒺&amp;quot;, &amp;quot;𑒍𑒺&amp;quot;, &amp;quot;𑒪𑒵&amp;quot;, &amp;quot;𑒪𑒶&amp;quot;},&lt;br /&gt;
		to = {&amp;quot;𑒂&amp;quot;, &amp;quot;𑒌&amp;quot;, &amp;quot;𑒎&amp;quot;, &amp;quot;𑒉&amp;quot;, &amp;quot;𑒊&amp;quot;}&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Tnsa&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Tangsa&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𖩰-𖫉&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Toto&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Toto&amp;quot;,&lt;br /&gt;
	&amp;quot;abugida&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𞊐-𞊮&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Ugar&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Ugaritic&amp;quot;,&lt;br /&gt;
	&amp;quot;abjad&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐎀-𐎟&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Vaii&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Vai&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ꔀ-ꘫ&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Visp&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Visible Speech&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	-- Not in Unicode&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Vith&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Vithkuqi&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐕰-𐖼&amp;quot;,&lt;br /&gt;
	capitalized = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Wara&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Varang Kshiti&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Warang Citi&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𑢠-𑣿&amp;quot;,&lt;br /&gt;
	capitalized = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Wcho&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Wancho&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𞋀-𞋿&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Wole&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Woleai&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	-- Not in Unicode&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Xpeo&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Old Persian&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐎠-𐏕&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Xsux&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Cuneiform&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Sumero-Akkadian Cuneiform&amp;quot;},&lt;br /&gt;
	characters = &amp;quot;𒀀-𒎙𒐀-𒑳&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Yezi&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Yezidi&amp;quot;,&lt;br /&gt;
	&amp;quot;alphabet&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;𐺀-𐺱&amp;quot;,&lt;br /&gt;
	direction = &amp;quot;rtl&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Yiii&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Yi&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ꀀ-꓆&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Zanb&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Zanabazar Square&amp;quot;,&lt;br /&gt;
	characters = u(0x11A00)..&amp;quot;-&amp;quot;..u(0x11A47),&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Zmth&amp;quot;] = {&lt;br /&gt;
	&amp;quot;mathematical notation&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;ℵ∀-⋿⟀-⟯⦀-⫿𝐀-𝟿&amp;quot;,&lt;br /&gt;
	translit = false,&lt;br /&gt;
	character_category = &amp;quot;Mathematical notation symbols&amp;quot;, -- ?&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Zsym&amp;quot;] = {&lt;br /&gt;
	&amp;quot;symbol&amp;quot;,&lt;br /&gt;
	&amp;quot;pictography&amp;quot;,&lt;br /&gt;
	characters = &amp;quot;─-➿←-⇿⌀-⏿⬀-⯾🀀-🃵🌀-🩭&amp;quot;,&lt;br /&gt;
	translit = false,&lt;br /&gt;
	character_category = false, -- none&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Zyyy&amp;quot;] = {&lt;br /&gt;
	&amp;quot;undetermined&amp;quot;,&lt;br /&gt;
	-- This should not have any characters listed, probably&lt;br /&gt;
	translit = false,&lt;br /&gt;
	character_category = false, -- none&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Zzzz&amp;quot;] = {&lt;br /&gt;
	&amp;quot;uncoded&amp;quot;,&lt;br /&gt;
	-- This should not have any characters listed&lt;br /&gt;
	translit = false,&lt;br /&gt;
	character_category = false, -- none&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- These should be defined after the scripts they are composed of.&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Hrkt&amp;quot;] = { -- TODO: add hentaigana&lt;br /&gt;
	&amp;quot;Kana&amp;quot;,&lt;br /&gt;
	&amp;quot;syllabary&amp;quot;,&lt;br /&gt;
	aliases = {&amp;quot;Japanese syllabaries&amp;quot;},&lt;br /&gt;
	characters = m[&amp;quot;Hira&amp;quot;].characters .. m[&amp;quot;Kana&amp;quot;].characters,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Jpan&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Japanese&amp;quot;,&lt;br /&gt;
	&amp;quot;logography, syllabary&amp;quot;,&lt;br /&gt;
	characters = m[&amp;quot;Hrkt&amp;quot;].characters .. m[&amp;quot;Hani&amp;quot;].characters .. m[&amp;quot;Latnx&amp;quot;].characters,&lt;br /&gt;
	spaces = false,&lt;br /&gt;
	sort_by_scraping = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
m[&amp;quot;Kore&amp;quot;] = {&lt;br /&gt;
	&amp;quot;Korean&amp;quot;,&lt;br /&gt;
	&amp;quot;logography, syllabary&amp;quot;,&lt;br /&gt;
	characters = m[&amp;quot;Hang&amp;quot;].characters .. m[&amp;quot;Hani&amp;quot;].characters,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return m&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:48 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Scripts/data</comments>
		</item>
		<item>
			<title>Module:Scripts</title>
			<link>https://test.st34an.tech/index.php?title=Module:Scripts&amp;diff=27&amp;oldid=0</link>
			<guid isPermaLink="false">https://test.st34an.tech/index.php?title=Module:Scripts&amp;diff=27&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Jsrs701&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Jsrs701 (page does not exist)&quot;&gt;&lt;bdi&gt;Jsrs701&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php?title=Module:Scripts&quot; title=&quot;Module:Scripts&quot;&gt;Module:Scripts&lt;/a&gt; by file upload (1 revision)&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;
local Script = {}&lt;br /&gt;
&lt;br /&gt;
--[==[Returns the script code of the language. Example: {{code|lua|&amp;quot;Cyrl&amp;quot;}} for Cyrillic.]==]&lt;br /&gt;
function Script:getCode()&lt;br /&gt;
	return self._code&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[Returns the canonical name of the script. This is the name used to represent that script on Wiktionary. Example: {{code|lua|&amp;quot;Cyrillic&amp;quot;}} for Cyrillic.]==]&lt;br /&gt;
function Script:getCanonicalName()&lt;br /&gt;
	return self._rawData[1] or self._rawData.canonicalName&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[Returns the display form of the script. For scripts, this is the same as the value returned by &amp;lt;code&amp;gt;:getCategoryName(&amp;quot;nocap&amp;quot;)&amp;lt;/code&amp;gt;, i.e. it reads &amp;quot;NAME script&amp;quot; (e.g. {{code|lua|&amp;quot;Arabic script&amp;quot;}}). For regular and etymology languages, this is the same as the canonical name, and for families, it reads &amp;quot;NAME languages&amp;quot; (e.g. {{code|lua|&amp;quot;Indo-Iranian languages&amp;quot;}}). The displayed text used in &amp;lt;code&amp;gt;:makeCategoryLink&amp;lt;/code&amp;gt; is always the same as the display form.]==]&lt;br /&gt;
function Script:getDisplayForm()&lt;br /&gt;
	return self:getCategoryName(&amp;quot;nocap&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Script:getOtherNames(onlyOtherNames)&lt;br /&gt;
	return require(&amp;quot;Module:language-like&amp;quot;).getOtherNames(self, onlyOtherNames)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Script:getAliases()&lt;br /&gt;
	return self._rawData.aliases or {}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Script:getVarieties(flatten)&lt;br /&gt;
	return require(&amp;quot;Module:language-like&amp;quot;).getVarieties(self, flatten)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[Returns the parent of the script. Example: {{code|lua|&amp;quot;Latn&amp;quot;}} for {{code|lua|&amp;quot;Latnx&amp;quot;}} and {{code|lua|&amp;quot;Arab&amp;quot;}} for {{code|lua|&amp;quot;fa-Arab&amp;quot;}}. It returns {{code|lua|&amp;quot;top&amp;quot;}} for scripts without a parent, like {{code|lua|&amp;quot;Latn&amp;quot;}}, {{code|lua|&amp;quot;Grek&amp;quot;}}, etc.]==]&lt;br /&gt;
function Script:getParent()&lt;br /&gt;
	return self._rawData.parent&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Script:getSystemCodes()&lt;br /&gt;
	if not self._systemCodes then&lt;br /&gt;
		if type(self._rawData[2]) == &amp;quot;table&amp;quot; then&lt;br /&gt;
			self._systemCodes = self._rawData[2]&lt;br /&gt;
		elseif type(self._rawData[2]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
			self._systemCodes = mw.text.split(self._rawData[2], &amp;quot;%s*,%s*&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			self._systemCodes = {}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return self._systemCodes&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Script:getSystems()&lt;br /&gt;
	if not self._systemObjects then&lt;br /&gt;
		local m_systems = require(&amp;quot;Module:writing systems&amp;quot;)&lt;br /&gt;
		self._systemObjects = {}&lt;br /&gt;
		&lt;br /&gt;
		for _, ws in ipairs(self:getSystemCodes()) do&lt;br /&gt;
			table.insert(self._systemObjects, m_systems.getByCode(ws))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return self._systemObjects&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--function Script:getAllNames()&lt;br /&gt;
--	return self._rawData.names&lt;br /&gt;
--end&lt;br /&gt;
&lt;br /&gt;
--[==[Given a list of types as strings, returns true if the script has all of them. &lt;br /&gt;
&lt;br /&gt;
Currently the only possible type is {script}; use {{lua|hasType(&amp;quot;script&amp;quot;)}} to determine if an object that&lt;br /&gt;
may be a language, family or script is a script.&lt;br /&gt;
]==]	&lt;br /&gt;
function Script:hasType(...)&lt;br /&gt;
	if not self._type then&lt;br /&gt;
		self._type = {script = true}&lt;br /&gt;
		if self._rawData.type then&lt;br /&gt;
			for _, type in ipairs(mw.text.split(self._rawData.type, &amp;quot;%s*,%s*&amp;quot;)) do&lt;br /&gt;
				self._type[type] = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for _, type in ipairs{...} do&lt;br /&gt;
		if not self._type[type] then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[Returns the name of the main category of that script. Example: {{code|lua|&amp;quot;Cyrillic script&amp;quot;}} for Cyrillic, whose category is at [[:Category:Cyrillic script]].&lt;br /&gt;
Unless optional argument &amp;lt;code&amp;gt;nocap&amp;lt;/code&amp;gt; is given, the script name at the beginning of the returned value will be capitalized. This capitalization is correct for category names, but not if the script name is lowercase and the returned value of this function is used in the middle of a sentence. (For example, the script with the code &amp;lt;code&amp;gt;Semap&amp;lt;/code&amp;gt; has the name &amp;lt;code&amp;gt;&amp;quot;flag semaphore&amp;quot;&amp;lt;/code&amp;gt;, which should remain lowercase when used as part of the category name [[:Category:Translingual letters in flag semaphore]] but should be capitalized in [[:Category:Flag semaphore templates]].) If you are considering using &amp;lt;code&amp;gt;getCategoryName(&amp;quot;nocap&amp;quot;)&amp;lt;/code&amp;gt;, use &amp;lt;code&amp;gt;getDisplayForm()&amp;lt;/code&amp;gt; instead.]==]&lt;br /&gt;
function Script:getCategoryName(nocap)&lt;br /&gt;
	local name = self._rawData[1] or self._rawData.canonicalName&lt;br /&gt;
	&lt;br /&gt;
	-- If the name already has &amp;quot;script&amp;quot;, &amp;quot;code&amp;quot; or &amp;quot;semaphore&amp;quot; at the end, don&amp;#039;t add it.&lt;br /&gt;
	if not (&lt;br /&gt;
		name:find(&amp;quot;[ %-][Ss]cript$&amp;quot;) or&lt;br /&gt;
		name:find(&amp;quot;[ %-][Cc]ode$&amp;quot;) or&lt;br /&gt;
		name:find(&amp;quot;[ %-][Ss]emaphore$&amp;quot;)&lt;br /&gt;
	) then&lt;br /&gt;
		name = name .. &amp;quot; script&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if not nocap then&lt;br /&gt;
		name = mw.getContentLanguage():ucfirst(name)&lt;br /&gt;
	end&lt;br /&gt;
	return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Script:makeCategoryLink()&lt;br /&gt;
	return &amp;quot;[[:Category:&amp;quot; .. self:getCategoryName() .. &amp;quot;|&amp;quot; .. self:getDisplayForm() .. &amp;quot;]]&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[Returns the {{code|lua|wikipedia_article}} item in the language&amp;#039;s data file, or else calls {{code|lua|Script:getCategoryName()}}.]==]&lt;br /&gt;
function Script:getWikipediaArticle()&lt;br /&gt;
	return self._rawData.wikipedia_article or self:getCategoryName()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[Returns the regex defining the script&amp;#039;s characters from the language&amp;#039;s data file.&lt;br /&gt;
This can be used to search for words consisting only of this script, but see the warning above.]==]&lt;br /&gt;
function Script:getCharacters()&lt;br /&gt;
	if self._rawData.characters then&lt;br /&gt;
		return self._rawData.characters&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[Returns the number of characters in the text that are part of this script.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; You should never rely on text consisting entirely of the same script. Strings may contain spaces, punctuation and even wiki markup or HTML tags. HTML tags will skew the counts, as they contain Latin-script characters. So it&amp;#039;s best to avoid them.]==]&lt;br /&gt;
function Script:countCharacters(text)&lt;br /&gt;
	if not self._rawData.characters then&lt;br /&gt;
		return 0&lt;br /&gt;
	-- Due to the number of Chinese characters, a different determination method is used when differentiating between traditional (&amp;quot;Hant&amp;quot;) and simplified (&amp;quot;Hans&amp;quot;) Chinese.&lt;br /&gt;
	elseif self:getCode() == &amp;quot;Hant&amp;quot; or self:getCode() == &amp;quot;Hans&amp;quot; then&lt;br /&gt;
		local charData, num = self:getCode() == &amp;quot;Hant&amp;quot; and require(&amp;quot;Module:zh/data/ts/serialized&amp;quot;) or require(&amp;quot;Module:zh/data/st/serialized&amp;quot;), 0&lt;br /&gt;
		charData = charData:sub(1, charData:len() / 2)&lt;br /&gt;
		for char in text:gmatch(&amp;quot;[\194-\244][\128-\191]*&amp;quot;) do&lt;br /&gt;
			if charData:find(char) then&lt;br /&gt;
				num = num + 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return num&lt;br /&gt;
	else&lt;br /&gt;
		local _, num = mw.ustring.gsub(text, &amp;quot;[&amp;quot; .. self._rawData.characters .. &amp;quot;]&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
		return num&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Script:hasCapitalization()&lt;br /&gt;
	return not not self._rawData.capitalized&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Script:hasSpaces()&lt;br /&gt;
	return self._rawData.spaces ~= false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Script:isTransliterated()&lt;br /&gt;
	return self._rawData.translit ~= false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[Returns true if the script is (sometimes) sorted by scraping page content, meaning that it is sensitive to changes in capitalization during sorting.]==]&lt;br /&gt;
function Script:sortByScraping()&lt;br /&gt;
	return not not self._rawData.sort_by_scraping&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[Returns the text direction, if any. Currently, left-to-right scripts are unmarked, while most right-to-left scripts have direction specified as {{code|lua|&amp;quot;rtl&amp;quot;}} and Mongolian as {{code|lua|&amp;quot;down&amp;quot;}}.]==]&lt;br /&gt;
function Script:getDirection()&lt;br /&gt;
	return self._rawData.direction&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Script:getRawData()&lt;br /&gt;
	return self._rawData&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[Returns {{code|lua|true}} if the script contains characters that require fixes to Unicode normalization under certain circumstances, {{code|lua|false}} if it doesn&amp;#039;t.]==]&lt;br /&gt;
function Script:hasNormalizationFixes()&lt;br /&gt;
	return not not self._rawData.normalizationFixes&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[Corrects discouraged sequences of Unicode characters to the encouraged equivalents.]==]&lt;br /&gt;
function Script:fixDiscouragedSequences(text)&lt;br /&gt;
	if self:hasNormalizationFixes() and self._rawData.normalizationFixes.from then&lt;br /&gt;
		local gsub = require(&amp;quot;Module:string utilities&amp;quot;).gsub&lt;br /&gt;
		for i, from in ipairs(self._rawData.normalizationFixes.from) do&lt;br /&gt;
			text = gsub(text, from, self._rawData.normalizationFixes.to[i] or &amp;quot;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Implements a modified form of Unicode normalization for instances where there are identified deficiencies in the default Unicode combining classes.&lt;br /&gt;
local function fixNormalization(text, self)&lt;br /&gt;
	if self:hasNormalizationFixes() and self._rawData.normalizationFixes.combiningClasses then&lt;br /&gt;
		local combiningClassFixes = self._rawData.normalizationFixes.combiningClasses&lt;br /&gt;
		local charsToFix = table.concat(require(&amp;quot;Module:table&amp;quot;).keysToList(combiningClassFixes))&lt;br /&gt;
		if require(&amp;quot;Module:string utilities&amp;quot;).match(text, &amp;quot;[&amp;quot; .. charsToFix .. &amp;quot;]&amp;quot;) then&lt;br /&gt;
			local codepoint, u = mw.ustring.codepoint, mw.ustring.char&lt;br /&gt;
			-- Obtain the list of default combining classes.&lt;br /&gt;
			local combiningClasses = mw.loadData(&amp;quot;Module:scripts/data/combiningClasses&amp;quot;)&lt;br /&gt;
			-- For each character that needs fixing, find all characters with combining classes equal to or lower than its default class, but greater than its new class (i.e. intermediary characters).&lt;br /&gt;
			for charToFix, newCombiningClass in pairs(combiningClassFixes) do&lt;br /&gt;
				local intermediaryChars = {}&lt;br /&gt;
				for character, combiningClass in pairs(combiningClasses) do&lt;br /&gt;
					if newCombiningClass &amp;lt; combiningClass and combiningClass &amp;lt;= combiningClasses[codepoint(charToFix)] then&lt;br /&gt;
						table.insert(intermediaryChars, u(character))&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				-- Swap the character with any intermediary characters that are immediately before it.&lt;br /&gt;
				text = require(&amp;quot;Module:string utilities&amp;quot;).gsub(text, &amp;quot;([&amp;quot; .. table.concat(intermediaryChars) .. &amp;quot;]+)(&amp;quot; .. charToFix .. &amp;quot;)&amp;quot;, &amp;quot;%2%1&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Script:toFixedNFC(text)&lt;br /&gt;
	return fixNormalization(mw.ustring.toNFC(text), self)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Script:toFixedNFD(text)&lt;br /&gt;
	return fixNormalization(mw.ustring.toNFD(text), self)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Script:toFixedNFKC(text)&lt;br /&gt;
	return fixNormalization(mw.ustring.toNFKC(text), self)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Script:toFixedNFKD(text)&lt;br /&gt;
	return fixNormalization(mw.ustring.toNFKD(text), self)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Script:toJSON()&lt;br /&gt;
	if not self._type then&lt;br /&gt;
		self:hasType()&lt;br /&gt;
	end&lt;br /&gt;
	local types = {}&lt;br /&gt;
	for type in pairs(self._type) do&lt;br /&gt;
		table.insert(types, type)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local ret = {&lt;br /&gt;
		canonicalName = self:getCanonicalName(),&lt;br /&gt;
		categoryName = self:getCategoryName(&amp;quot;nocap&amp;quot;),&lt;br /&gt;
		code = self:getCode(),&lt;br /&gt;
		otherNames = self:getOtherNames(true),&lt;br /&gt;
		aliases = self:getAliases(),&lt;br /&gt;
		varieties = self:getVarieties(),&lt;br /&gt;
		type = types,&lt;br /&gt;
		direction = self:getDirection(),&lt;br /&gt;
		characters = self:getCharacters(),&lt;br /&gt;
		parent = self:getParent(),&lt;br /&gt;
		systems = self:getSystemCodes(),&lt;br /&gt;
		wikipediaArticle = self._rawData.wikipedia_article,&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	return require(&amp;quot;Module:JSON&amp;quot;).toJSON(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Script.__index = Script&lt;br /&gt;
	&lt;br /&gt;
function export.makeObject(code, data, useRequire)&lt;br /&gt;
	return data and setmetatable({_rawData = data, _code = code}, Script) or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Track scripts with anomalous names.&lt;br /&gt;
local scriptsToTrack = {&lt;br /&gt;
	-- scripts already renamed&lt;br /&gt;
	[&amp;quot;IPAchar&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;musical&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Ruminumerals&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;polytonic&amp;quot;] = true,&lt;br /&gt;
	-- scripts not yet renamed&lt;br /&gt;
	[&amp;quot;Latinx&amp;quot;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Temporary aliases from canonicalized names to (existing) anomalous names. Once we have converted everything we will&lt;br /&gt;
-- rename the scripts and remove the alias code.&lt;br /&gt;
local scriptAliases = {&lt;br /&gt;
	-- scripts already renamed; we now alias the old names to the new ones&lt;br /&gt;
	[&amp;quot;IPAchar&amp;quot;] = &amp;quot;Ipach&amp;quot;,&lt;br /&gt;
	[&amp;quot;musical&amp;quot;] = &amp;quot;Music&amp;quot;,&lt;br /&gt;
	[&amp;quot;Ruminumerals&amp;quot;] = &amp;quot;Rumin&amp;quot;,&lt;br /&gt;
	[&amp;quot;polytonic&amp;quot;] = &amp;quot;Polyt&amp;quot;,&lt;br /&gt;
	[&amp;quot;Latinx&amp;quot;] = &amp;quot;Latnx&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--[==[Finds the script whose code matches the one provided. If it exists, it returns a {{code|lua|Script}} object representing the script. Otherwise, it returns {{code|lua|nil}}, unless &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;paramForError&amp;lt;/span&amp;gt; is given, in which case an error is generated. If &amp;lt;code class=&amp;quot;n&amp;quot;&amp;gt;paramForError&amp;lt;/code&amp;gt; is {{code|lua|true}}, a generic error message mentioning the bad code is generated; otherwise &amp;lt;code class=&amp;quot;n&amp;quot;&amp;gt;paramForError&amp;lt;/code&amp;gt; should be a string or number specifying the parameter that the code came from, and this parameter will be mentioned in the error message along with the bad code.]==]&lt;br /&gt;
function export.getByCode(code, paramForError, disallowNil, useRequire)&lt;br /&gt;
	if code == nil and not disallowNil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if scriptsToTrack[code] then&lt;br /&gt;
		require(&amp;quot;Module:debug/track&amp;quot;)(&amp;quot;scripts/&amp;quot; .. code)&lt;br /&gt;
	end&lt;br /&gt;
	code = scriptAliases[code] or code&lt;br /&gt;
	&lt;br /&gt;
	local data&lt;br /&gt;
	if useRequire then&lt;br /&gt;
		data = require(&amp;quot;Module:scripts/data&amp;quot;)[code]&lt;br /&gt;
	else&lt;br /&gt;
		data = mw.loadData(&amp;quot;Module:scripts/data&amp;quot;)[code]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local retval = export.makeObject(code, data, useRequire)&lt;br /&gt;
	&lt;br /&gt;
	if not retval and paramForError then&lt;br /&gt;
		require(&amp;quot;Module:languages/error&amp;quot;)(code, paramForError, &amp;quot;script code&amp;quot;, nil, &amp;quot;not real lang&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.getByCanonicalName(name, useRequire)&lt;br /&gt;
	local code&lt;br /&gt;
	if useRequire then&lt;br /&gt;
		code = require(&amp;quot;Module:scripts/by name&amp;quot;)[name]&lt;br /&gt;
	else&lt;br /&gt;
		code = mw.loadData(&amp;quot;Module:scripts/by name&amp;quot;)[name]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return export.getByCode(code, nil, nil, useRequire)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[&lt;br /&gt;
	Takes a codepoint or a character and finds the script code (if any) that is&lt;br /&gt;
	appropriate for it based on the codepoint, using the data module&lt;br /&gt;
	[[Module:scripts/recognition data]]. The data module was generated from the&lt;br /&gt;
	patterns in [[Module:scripts/data]] using [[Module:User:Erutuon/script recognition]].&lt;br /&gt;
&lt;br /&gt;
	Converts the character to a codepoint. Returns a script code if the codepoint&lt;br /&gt;
	is in the list of individual characters, or if it is in one of the defined&lt;br /&gt;
	ranges in the 4096-character block that it belongs to, else returns &amp;quot;None&amp;quot;.&lt;br /&gt;
]==]&lt;br /&gt;
function export.charToScript(char)&lt;br /&gt;
	return require(&amp;quot;Module:scripts/charToScript&amp;quot;).charToScript(char)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[Returns the code for the script that has the greatest number of characters in &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt;. Useful for script tagging text that is unspecified for language. Uses [[Module:scripts/recognition data]] to determine a script code for a character language-agnostically.]==]&lt;br /&gt;
function export.findBestScriptWithoutLang(text)&lt;br /&gt;
	return require(&amp;quot;Module:scripts/charToScript&amp;quot;).findBestScriptWithoutLang(text)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</description>
			<pubDate>Fri, 10 Apr 2026 07:25:47 GMT</pubDate>
			<dc:creator>Jsrs701</dc:creator>
			<comments>https://test.st34an.tech/index.php?title=Module_talk:Scripts</comments>
		</item>
</channel></rss>