Module:iu-headword

From Wiktionary, the free dictionary
Jump to navigation Jump to search
This module needs documentation.
Please document this module by describing its purpose and usage on the documentation page.

local export = {}
local pos_functions = {}

local lang = require("Module:languages").getByCode("iu")

-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
	PAGENAME = mw.title.getCurrentTitle().text

	local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")

	local params = {
		["head"] = {list = true},
		["suff"] = {type = "boolean"},
	}
	
	if pos_functions[poscat] then
		for key, val in pairs(pos_functions[poscat].params) do
			params[key] = val
		end
	end
	
	local args = require("Module:parameters").process(frame:getParent().args, params)
	
	local data = {lang = lang, pos_category = poscat, categories = {}, heads = args["head"], inflections = {}}
	
	if args["suff"] then
		data.pos_category = "suffixes"

		if poscat == "adjectives" then
			table.insert(data.categories, lang:getCanonicalName() .. " adjective-forming suffixes")
		elseif poscat == "adverbs" then
			table.insert(data.categories, lang:getCanonicalName() .. " adverb-forming suffixes")
		elseif poscat == "nouns" then
			table.insert(data.categories, lang:getCanonicalName() .. " noun-forming suffixes")
		elseif poscat == "verbs" then
			table.insert(data.categories, lang:getCanonicalName() .. " verb-forming suffixes")
		else
			error("No category exists for suffixes forming " .. poscat .. ".")
		end
	end

	if pos_functions[poscat] then
		pos_functions[poscat].func(args, data)
	end

	return require("Module:headword").full_headword(data)
end

pos_functions["nouns"] = {
	params = {
		[1] = {list = true, allow_holes = true},
	},
	func = function(args, data)
		if args[1][1] == "-" then
			table.insert(data.inflections, {label = "uncountable"})
			table.insert(data.inflections, {label = "Latin", require("Module:iu-translit").tr(PAGENAME, "iu", "Cans")})
		else
			local plural = PAGENAME

			if mw.ustring.find("ᐁᐃᐄᐅᐆᐊᐋᐯᐱᐲᐳᐴᐸᐹᑌᑎᑏᑐᑑᑕᑖᑫᑭᑮᑯᑰᑲᑳᒉᒋᒌᒍᒎᒐᒑᒣᒥᒦᒧᒨᒪᒫᓀᓂᓃᓄᓅᓇᓈᓭᓯᓰᓱᓲᓴᓵᓓᓕᓖᓗᓘᓚᓛᔦᔨᔩᔪᔫᔭᔮᕓᕕᕖᕗᕘᕙᕚᕃᕆᕇᕈᕉᕋᕌᙯᕿᖀᖁᖂᖃᖄᙰᖏᖐᖑᖒᖓᖔᙱᙲᙳᙴᙵᙶᖠᖡᖢᖣᖤᖥ", mw.ustring.sub(plural, -1)) then
				plural = plural .. "ᑦ"
			elseif mw.ustring.sub(plural, -1) == "ᑦ" then
				plural = mw.ustring.sub(plural, 1, mw.ustring.len(plural) - 1) .. "ᑏᑦ"
			elseif mw.ustring.find("ᐦᑉᒃᒡᒻᓐᔅᓪᔾᕝᕐᖅᖕᖖᖦ", mw.ustring.sub(plural, -1)) then
				plural = mw.ustring.sub(plural, 1, mw.ustring.len(plural) - 1)

				if mw.ustring.find("ᐁᐄᐆᐋᐯᐲᐴᐹᑌᑏᑑᑖᑫᑮᑰᑳᒉᒌᒎᒑᒣᒦᒨᒫᓀᓃᓅᓈᓭᓰᓲᓵᓓᓖᓘᓛᔦᔩᔫᔮᕓᕖᕘᕚᕃᕇᕉᕌᙯᖀᖂᖄᙰᖐᖒᖔᙲᙴᙶᖡᖣᖥ", mw.ustring.sub(plural, -1)) or mw.ustring.find("ᐁᐃ ᐃᐃ ᐄᐃ ᐅᐃ ᐆᐃ ᐊᐃ ᐋᐃ ᐯᐃ ᐱᐃ ᐲᐃ ᐳᐃ ᐴᐃ ᐸᐃ ᐹᐃ ᑌᐃ ᑎᐃ ᑏᐃ ᑐᐃ ᑑᐃ ᑕᐃ ᑖᐃ ᑫᐃ ᑭᐃ ᑮᐃ ᑯᐃ ᑰᐃ ᑲᐃ ᑳᐃ ᒉᐃ ᒋᐃ ᒌᐃ ᒍᐃ ᒎᐃ ᒐᐃ ᒑᐃ ᒣᐃ ᒥᐃ ᒦᐃ ᒧᐃ ᒨᐃ ᒪᐃ ᒫᐃ ᓀᐃ ᓂᐃ ᓃᐃ ᓄᐃ ᓅᐃ ᓇᐃ ᓈᐃ ᓭᐃ ᓯᐃ ᓰᐃ ᓱᐃ ᓲᐃ ᓴᐃ ᓵᐃ ᓓᐃ ᓕᐃ ᓖᐃ ᓗᐃ ᓘᐃ ᓚᐃ ᓛᐃ ᔦᐃ ᔨᐃ ᔩᐃ ᔪᐃ ᔫᐃ ᔭᐃ ᔮᐃ ᕓᐃ ᕕᐃ ᕖᐃ ᕗᐃ ᕘᐃ ᕙᐃ ᕚᐃ ᕃᐃ ᕆᐃ ᕇᐃ ᕈᐃ ᕉᐃ ᕋᐃ ᕌᐃ ᙯᐃ ᕿᐃ ᖀᐃ ᖁᐃ ᖂᐃ ᖃᐃ ᖄᐃ ᙰᐃ ᖏᐃ ᖐᐃ ᖑᐃ ᖒᐃ ᖓᐃ ᖔᐃ ᙱᐃ ᙲᐃ ᙳᐃ ᙴᐃ ᙵᐃ ᙶᐃ ᖠᐃ ᖡᐃ ᖢᐃ ᖣᐃ ᖤᐃ ᖥᐃ ᐁᐅ ᐃᐅ ᐄᐅ ᐅᐅ ᐆᐅ ᐊᐅ ᐋᐅ ᐯᐅ ᐱᐅ ᐲᐅ ᐳᐅ ᐴᐅ ᐸᐅ ᐹᐅ ᑌᐅ ᑎᐅ ᑏᐅ ᑐᐅ ᑑᐅ ᑕᐅ ᑖᐅ ᑫᐅ ᑭᐅ ᑮᐅ ᑯᐅ ᑰᐅ ᑲᐅ ᑳᐅ ᒉᐅ ᒋᐅ ᒌᐅ ᒍᐅ ᒎᐅ ᒐᐅ ᒑᐅ ᒣᐅ ᒥᐅ ᒦᐅ ᒧᐅ ᒨᐅ ᒪᐅ ᒫᐅ ᓀᐅ ᓂᐅ ᓃᐅ ᓄᐅ ᓅᐅ ᓇᐅ ᓈᐅ ᓭᐅ ᓯᐅ ᓰᐅ ᓱᐅ ᓲᐅ ᓴᐅ ᓵᐅ ᓓᐅ ᓕᐅ ᓖᐅ ᓗᐅ ᓘᐅ ᓚᐅ ᓛᐅ ᔦᐅ ᔨᐅ ᔩᐅ ᔪᐅ ᔫᐅ ᔭᐅ ᔮᐅ ᕓᐅ ᕕᐅ ᕖᐅ ᕗᐅ ᕘᐅ ᕙᐅ ᕚᐅ ᕃᐅ ᕆᐅ ᕇᐅ ᕈᐅ ᕉᐅ ᕋᐅ ᕌᐅ ᙯᐅ ᕿᐅ ᖀᐅ ᖁᐅ ᖂᐅ ᖃᐅ ᖄᐅ ᙰᐅ ᖏᐅ ᖐᐅ ᖑᐅ ᖒᐅ ᖓᐅ ᖔᐅ ᙱᐅ ᙲᐅ ᙳᐅ ᙴᐅ ᙵᐅ ᙶᐅ ᖠᐅ ᖡᐅ ᖢᐅ ᖣᐅ ᖤᐅ ᖥᐅ ᐁᐊ ᐃᐊ ᐄᐊ ᐅᐊ ᐆᐊ ᐊᐊ ᐋᐊ ᐯᐊ ᐱᐊ ᐲᐊ ᐳᐊ ᐴᐊ ᐸᐊ ᐹᐊ ᑌᐊ ᑎᐊ ᑏᐊ ᑐᐊ ᑑᐊ ᑕᐊ ᑖᐊ ᑫᐊ ᑭᐊ ᑮᐊ ᑯᐊ ᑰᐊ ᑲᐊ ᑳᐊ ᒉᐊ ᒋᐊ ᒌᐊ ᒍᐊ ᒎᐊ ᒐᐊ ᒑᐊ ᒣᐊ ᒥᐊ ᒦᐊ ᒧᐊ ᒨᐊ ᒪᐊ ᒫᐊ ᓀᐊ ᓂᐊ ᓃᐊ ᓄᐊ ᓅᐊ ᓇᐊ ᓈᐊ ᓭᐊ ᓯᐊ ᓰᐊ ᓱᐊ ᓲᐊ ᓴᐊ ᓵᐊ ᓓᐊ ᓕᐊ ᓖᐊ ᓗᐊ ᓘᐊ ᓚᐊ ᓛᐊ ᔦᐊ ᔨᐊ ᔩᐊ ᔪᐊ ᔫᐊ ᔭᐊ ᔮᐊ ᕓᐊ ᕕᐊ ᕖᐊ ᕗᐊ ᕘᐊ ᕙᐊ ᕚᐊ ᕃᐊ ᕆᐊ ᕇᐊ ᕈᐊ ᕉᐊ ᕋᐊ ᕌᐊ ᙯᐊ ᕿᐊ ᖀᐊ ᖁᐊ ᖂᐊ ᖃᐊ ᖄᐊ ᙰᐊ ᖏᐊ ᖐᐊ ᖑᐊ ᖒᐊ ᖓᐊ ᖔᐊ ᙱᐊ ᙲᐊ ᙳᐊ ᙴᐊ ᙵᐊ ᙶᐊ ᖠᐊ ᖡᐊ ᖢᐊ ᖣᐊ ᖤᐊ ᖥᐊ", mw.ustring.sub(plural, -2, -1)) then
					plural = plural .. "ᑦ"
				else
					plural = plural .. "ᐃᑦ"
				end
			end

			table.insert(data.inflections, {label = "plural", accel = {form = "p"}, plural})
			table.insert(data.inflections, {label = "Latin", require("Module:iu-translit").tr(PAGENAME, "iu", "Cans")})
		end
	end
}

return export