<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://test.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3ACategory_tree%2Fposcatboiler%2Fdata%2Ffamilies</id>
	<title>Module:Category tree/poscatboiler/data/families - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://test.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3ACategory_tree%2Fposcatboiler%2Fdata%2Ffamilies"/>
	<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/families&amp;action=history"/>
	<updated>2026-04-10T17:39:50Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/families&amp;diff=73&amp;oldid=prev</id>
		<title>Jsrs701: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/families&amp;diff=73&amp;oldid=prev"/>
		<updated>2026-04-10T07:25:52Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 07:25, 10 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key mediawikidb:diff:1.41:old-72:rev-73 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jsrs701</name></author>
	</entry>
	<entry>
		<id>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/families&amp;diff=72&amp;oldid=prev</id>
		<title>bob&gt;Juelos at 15:27, 6 September 2024</title>
		<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/families&amp;diff=72&amp;oldid=prev"/>
		<updated>2024-09-06T15:27:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local 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;</summary>
		<author><name>bob&gt;Juelos</name></author>
	</entry>
</feed>