"इस मॉड्यूल हेतु प्रलेख मॉड्यूल:category tree/poscatboiler/data/lang-specific/hi/doc पर बनाया जा सकता है"

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 with base verb (.*)$")
	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 with base verb " .. 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}