Module:category tree/poscatboiler/data/families

Hello, you have come here looking for the meaning of the word Module:category tree/poscatboiler/data/families. In DICTIOUS you will not only get to know all the dictionary meanings for the word Module:category tree/poscatboiler/data/families, but we will also tell you about its etymology, its characteristics and you will know how to say Module:category tree/poscatboiler/data/families in singular and plural. Everything you need to know about the word Module:category tree/poscatboiler/data/families you have here. The definition of the word Module:category tree/poscatboiler/data/families will help you to be more precise and correct when speaking or writing your texts. Knowing the definition ofModule:category tree/poscatboiler/data/families, as well as those of other words, enriches your vocabulary and provides you with more and better linguistic resources.

This data submodule defines part of Wiktionary's category structure.

For an introduction to the poscatboiler system and a description of how to add or modify categories, see Module:category tree/poscatboiler/data/documentation.


local raw_categories = {}
local raw_handlers = {}



-----------------------------------------------------------------------------
--                                                                         --
--                              RAW CATEGORIES                             --
--                                                                         --
-----------------------------------------------------------------------------


raw_categories = {
	topright = "{{commonscat|Languages by family}}\n{{wikipedia|Language family|Language family|mul=List of language families|mullabel=List of language families}}",
	description = "This category lists all ].",
	parents = {"Fundamental"},
}

raw_categories = {
	topright = "{{commonscat|Languages by family}}\n{{wikipedia|Language family|Language family|mul=List of language families|mullabel=List of language families}}",
	description = "This category contains all languages categorized hierarchically according to the ] they belong to.",
	additional = "Only top-level language families are shown here. For a full list of all language families, see ] or ].",
	parents = {
		{name = "All languages", sort = " "},
		{name = "All language families", sort = " "},
	},
}



-----------------------------------------------------------------------------
--                                                                         --
--                                RAW HANDLERS                             --
--                                                                         --
-----------------------------------------------------------------------------


local function family_is_not_a_family(fam)
	local famcode = fam:getCode()
	if famcode == "paa" then
		return false -- Papuan languages are not a family but have a category
	elseif famcode == "qfa-iso" or famcode == "qfa-not" then
		return true
	else
		local parfam = fam:getFamily()
		if parfam and parfam:getCode() == "qfa-not" then
			-- Constructed languages, sign languages, etc.; no category for them
			return true
		end
	end
	return false
end

	
local function infobox(fam)
	local ret = {}
	
	table.insert(ret, "<table class=\"wikitable\">\n")
	table.insert(ret, "<tr>\n<th colspan=\"2\" class=\"plainlinks\"></th>\n</tr>\n")
	table.insert(ret, "<tr>\n<th>Canonical name</th><td>" .. fam:getCanonicalName() .. "</td>\n</tr>\n")
	
	local otherNames = fam:getOtherNames(true)
	if otherNames then
		local names = {}
		
		for _, name in ipairs(otherNames) do
			table.insert(names, "<li>" .. name .. "</li>")
		end
		
		if #names > 0 then
			table.insert(ret, "<tr>\n<th>Other names</th><td><ul>" .. table.concat(names, "\n") .. "</ul></td>\n</tr>\n")
		end
	end
	
	local aliases = fam:getAliases()
	if aliases then
		local names = {}
		
		for _, name in ipairs(aliases) do
			table.insert(names, "<li>" .. name .. "</li>")
		end
		
		if #names > 0 then
			table.insert(ret, "<tr>\n<th>Aliases</th><td><ul>" .. table.concat(names, "\n") .. "</ul></td>\n</tr>\n")
		end
	end

	local varieties = fam:getVarieties()
	if varieties then
		local names = {}
		
		for _, name in ipairs(varieties) do
			if type(name) == "string" then
				table.insert(names, "<li>" .. name .. "</li>")
			else
				assert(type(name) == "table")
				local first_var
				local subvars = {}
				for i, var in ipairs(name) do
					if i == 1 then
						first_var = var
					else
						table.insert(subvars, "<li>" .. var .. "</li>")
					end
				end
				if #subvars > 0 then
					table.insert(names, "<li><dl><dt>" .. first_var .. "</dt>\n<dd><ul>" .. table.concat(subvars, "\n") .. "</ul></dd></dl></li>")
				elseif first_var then
					table.insert(names, "<li>" .. first_var .. "</li>")
				end
			end
		end
		
		if #names > 0 then
			table.insert(ret, "<tr>\n<th>Varieties</th><td><ul>" .. table.concat(names, "\n") .. "</ul></td>\n</tr>\n")
		end
	end

	table.insert(ret, "<tr>\n<th>]</th><td><code>" .. fam:getCode() .. "</code></td>\n</tr>\n")
	table.insert(ret, "<tr>\n<th>]</th><td>")
	
	local protoLanguage = fam:getProtoLanguage()
	
	if protoLanguage then
		table.insert(ret, "]")
	else
		table.insert(ret, "none")
	end
	
	table.insert(ret, "</td>\n")
	table.insert(ret, "\n</tr>\n")
	
	local parent = fam:getFamily()
	
	if not parent then
		table.insert(ret, "<tr>\n<th>]</th>\n<td>")
		table.insert(ret, "unclassified")
	elseif parent:getCode() == "qfa-not" then
		table.insert(ret, "<tr>\n<th>]</th>\n<td>")
		table.insert(ret, "not a family")
	else
		local chain = {}
		while parent do
			if family_is_not_a_family(parent) then
				break
			end
			table.insert(chain, "]")
			parent = parent:getFamily()
		end
		if #chain == 0 then
			table.insert(ret, "<tr>\n<th>]</th>\n<td>")
			table.insert(ret, "no parents")
		else
			table.insert(ret, "<tr>\n<th>[[Wiktionary:Families|Parent famil"
				.. (#chain == 1 and "y" or "ies") .. "]]</th>\n<td>")
			
			for i = #chain, 1, -1 do
				table.insert(ret, "<ul><li>" .. chain)
			end
			table.insert(ret, string.rep("</li></ul>", #chain))
		end
	end
	
	table.insert(ret, "</td>\n</tr>\n")
	
	if fam:getWikidataItem() and mw.wikibase then
		local link = ''
		table.insert(ret, "<tr><th>Wikidata</th><td>" .. link .. "</td></tr>")
	end
	
	table.insert(ret, "</table>")
	
	return table.concat(ret)
end


table.insert(raw_handlers, function(data)
	local family_name = data.category:match("^(.+) languages$") or
		data.category:match("^.+ Languages$") or
		data.category:match("^.+ ects$")
	if not family_name then
		return nil
	end
	local family = require("Module:families").getByCanonicalName(family_name) or
		require("Module:families").getByCanonicalName(mw.ustring.lower(family_name))
	if not family then
		return nil
	end

	local parent_fam = family:getFamily()
	local first_parent
	
	if not parent_fam or family_is_not_a_family(parent_fam) then
		first_parent = "Languages by family"
	else
		first_parent = parent_fam:getCategoryName()
	end

	local topright, description, additional = "", "", ""
	if not data.called_from_inside then
		local wikipedia_art = family:getWikipediaArticle()
		topright = "{{commonscat|" .. family:getCategoryName() .. "}}\n{{wikipedia|" .. wikipedia_art .. "}}"
		description = "This is the main category of the '''" .. family:getDisplayForm() .. "'''."
		additional = "Information about " .. family:getCanonicalName() .. ":\n\n" .. infobox(family)
	end

	local parents = {
		first_parent,
		"All language families",
	}
	if parent_fam and parent_fam:getCode() == "sgn" then
		table.insert(parents, "All sign languages")
	end
	
	return {
		topright = topright,
		description = description,
		additional = additional,
		parents = parents,
		breadcrumb = family:getCanonicalName(),
		can_be_empty = true,
	}
end)


return {RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers}