Module:category tree/poscatboiler/data/lang-specific/hi

From Wiktionary, the free dictionary
Jump to navigation Jump to search

This module handles generating the descriptions and categorization for Hindi category pages of the format "Hindi LABEL" where LABEL can be any text. Examples are Category:Bulgarian conjugation 2.1 verbs and Category:Russian velar-stem neuter-form nouns. This module is part of the poscatboiler system, which is a general framework for generating the descriptions and categorization of category pages.

For more information, see Module:category tree/poscatboiler/data/lang-specific/documentation.

NOTE: If you add a new language-specific module, you must add the language code to the list at the top of Module:category tree/poscatboiler/data/lang-specific in order for the module to be recognized.


local labels = {}
local handlers = {}

local u = mw.ustring.char


for _, pos in ipairs({"nouns", "verbs", "adjectives"}) do
	labels[pos .. " with phonetic respelling"] = {
		description = "{{{langname}}} " .. pos .. " using phonetic respelling in their " ..
			(pos == "verbs" and "conjugation" or "declension") ..
			" tables due to irregular or unpredictable pronunciations.",
		additional = [=[
===See also===
* [[Wiktionary:Hindi transliteration]]
* [[Module:hi-translit]]]=],
		parents = {
			"terms by orthographic property", 
			"terms by phonemic property", 
			{name = pos, sort = "phonetic respelling"},
		},
	}
end

--------------------------------- Verbs --------------------------------

labels["compound verbs by base verb"] = {
	description = "{{{langname}}} compound verbs categorized by base verb.",
	parents = {"verbs"},
}

table.insert(handlers, function(data)
	local base_verb = data.label:match("^compound verbs formed with (.*)$")
	if base_verb then
		local altlink = "{{m|hi||" .. base_verb .. "}}"
		local altlink_no_tr = "{{m|hi||" .. base_verb .. "|tr=-}}"
		return {
			description = "{{{langname}}} compound verbs formed with the base verb {{m|hi|" .. base_verb .. "}}.",
			displaytitle = "{{{langname}}} compound verbs formed with " .. altlink_no_tr,
			parents = {
				{name = "compound verbs by base verb", sort = base_verb}
			},
			breadcrumb = altlink,
		}
	end
end)


--------------------------------- Nouns --------------------------------

labels["nouns by gender and stem type"] = {
	description = "{{{langname}}} nouns categorized by gender and stem type.",
	parents = {{name = "nouns", sort = "gender and stem type"}},
	breadcrumb = "by gender and stem type",
}

labels["nouns with irregular plural stem"] = {
	description = "{{{langname}}} nouns with an irregular plural stem.",
	parents = {{name = "nouns", sort = "irregular plural stem"}},
	breadcrumb = "with irregular plural stem",
}

table.insert(handlers, function(data)
	local gender, stem, pos
	gender, stem, pos = data.label:match("^([a-z]+ine) (independent unmarked [^ %-]*%-stem) (.*)s$")
	if not gender then
		gender, stem, pos = data.label:match("^([a-z]+ine) (independent [^ %-]*%-stem) (.*)s$")
	end
	if not gender then
		gender, stem, pos = data.label:match("^([a-z]+ine) (unmarked [^ %-]*%-stem) (.*)s$")
	end
	if not gender then
		gender, stem, pos = data.label:match("^([a-z]+ine) ([^ %-]*%-stem) (.*)s$")
	end
	if gender and pos == "noun" then
		local desc = "{{{langname}}} " .. gender .. " " .. stem .. " " .. pos .. "s."
		local additional
		if stem:find("independent") then
			additional = "* Here, 'independent' means that the stem ending directly " ..
			"follows a vowel and so uses the independent Devanagari form of the vowel that begins the ending."
		end
		if stem:find("unmarked") then
			additional = additional and additional .. "\n" or ""
			additional = additional .. "* Here, 'unmarked' means that the endings are added onto the full direct singular form " ..
			"without removing the stem ending (although final nasalization, if present, will move to the ending)."
		end
		return {
			description = desc,
			additional = additional,
			parents = {
				{name = pos .. "s by gender and stem type", sort = stem:gsub("independent ", ""):gsub("unmarked ", "")}
			},
			breadcrumb = gender .. " " .. stem,
		}
	end
end)


--------------------------------- Adjectives --------------------------------

-- vowel diacritics; don't display nicely on their own
local M = u(0x0901)
local N = u(0x0902)
local AA = u(0x093e)
local AAM = AA .. M
local E = u(0x0947)
local EN = E .. N
local II = u(0x0940)
local IIN = II .. N


local adj_decl_endings = {
	["ā-stem"] = {AA, E, II},
	["independent ā-stem"] = {"आ", "ए", "ई"},
	["ā̃-stem"] = {AAM, EN, IIN},
	["independent ā̃-stem"] = {"आँ", "एँ", "ईं"},
}

labels["adjectives by stem type"] = {
	description = "{{{langname}}} adjectives categorized by stem type.",
	parents = {{name = "adjectives", sort = "stem type"}},
	breadcrumb = "by stem type",
}

table.insert(handlers, function(data)
	local stem
	stem = data.label:match("^(independent [^ %-]*%-stem) adjectives$")
	if not stem then
		stem = data.label:match("^([^ %-]*%-stem) adjectives$")
	end
	if stem and adj_decl_endings[stem] then
		local mdir, mop, f = unpack(adj_decl_endings[stem])
		local desc = "{{{langname}}} " .. stem .. " adjectives, ending in " .. mdir ..
			" in the direct masculine singular, in " .. mop .. " in the remaining masculine forms, and in " .. f ..
			" in all feminine forms."
		local additional
		if stem:find("independent") then
			additional = "* Here, 'independent' means that the stem ending directly " ..
			"follows a vowel and so uses the independent Devanagari form of the vowel that begins the ending."
		end
		return {
			description = desc,
			additional = additional,
			parents = {
				{name = "adjectives by stem type", sort = stem:gsub("independent ", "")}
			},
			breadcrumb = stem,
		}
	end
end)

return {LABELS = labels, HANDLERS = handlers}