Jump to content

Module:amf-headword

From Wiktionary, the free dictionary


local export = {}
local pos_functions = {}

local m_nominal = require("Module:amf-nominal")
local m_utilities = require("Module:amf-utilities")
local m_headword = require("Module:headword")
local amf = require("Module:languages").getByCode("amf")

local syllabify = m_utilities.syllabify
local combine = m_utilities.combine
local PAGENAME = mw.loadData("Module:headword/data").pagename

function export.make(frame)
	local poscat = frame.args[1]
	
	local params = {
		[1] = { default = PAGENAME },
	}
	
	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 = amf,
		pagename = args[1],
		pos_category = poscat,
		genders = {},
		inflections = {},
	}
	
	if pos_functions[poscat] then
		pos_functions[poscat].func(args, data)
	end
	
	return m_headword.full_headword(data)
end

pos_functions["nouns"] = {
	params = {
		["fem"] = true,
		["masc"] = true,
		["pl"] = true,
		["voc"] = true,
	},
	func = function(args, data)
		if args[1] ~= "-" then
			local result = {}
			
			args[1] = syllabify(args[1])
			
			if args["masc"] ~= "-" then 
				result.masc = {args["masc"] or combine(m_nominal.make_masculine(args[1]))}
				result.masc.label, result.masc.accel = "masculine", {form = "m"}
			end
			if args["fem"] ~= "-" then 
				result.fem = {args["fem"] or combine(m_nominal.attach_CV(args[1],"n","o"))}
				result.fem.label, result.fem.accel = "feminine", {form = "f"}
			end
			if args["pl"] ~= "-" then 
				result.pl = {args["pl"] or combine(m_nominal.attach_CV(args[1],"n","a"))}
				result.pl.label, result.pl.accel = "plural", {form = "p"}
			end
			
			if args["voc"] then 
				result.voc = {
					args["voc"],
					label = "vocative",
					accel = "vocative"
				}
				table.insert(data.inflections, result.voc)
			end
			
			table.insert(data.inflections, result.pl)
			table.insert(data.inflections, result.masc)
			table.insert(data.inflections, result.fem)
		else
			data.pagename = PAGENAME
		end
	end
}

return export