Module:ln-headword

local export = {}

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

local plural_classes = { ["1"] = "c2", ["3"] = "c4", ["7"] = "c8", ["9"] = "c10", ["11/10"] = "c10", ["11/6"] = "c6", ["5"] = "c6", ["9/2"] = "c2", ["9/6"] = "c6", ["14/6"] = "c6"}

local plural_rules = { ["1"] = {[1] = {"mo",   "ba", 3}, [2] = {"mw", "b", 3}, [3] = {"a", "b", 2}, [4] = {"", "ba", 1}}, ["3"] = {[1] = {"mo", "mi", 3}, [2] = {"mw", "my", 3}}, ["5"] = {[1] = {"li", "ma", 3}}, ["7"] = {[1] = {"e",  "bi", 2}}, ["9"] = {[1] = { "",    "", 1}},		   ["9/6"] = {[1] = { "a",  "ma", 2}, [2] = {  "",  "ma", 1}}, ["9/2"] = {[1] = { "a",  "ba", 2}, [2] = {  "",  "ba", 1}}, ["11/10"] = {[1] = {"lol", "nd", 4}, [2] = {"lob",  "mb", 4}, [3] = {"lop",  "mp", 4}, [4] = {"lom",  "m", 4}, [5] = {"lon",  "n", 4}, [6] = {"lo",  "n", 3},}, ["11/6"] = {[1] = {"lo", "ma", 3}}, ["14/6"] = {[1] = {"bo", "ma", 3}, [2] = {"bw", "m", 3}} }

function export.noun(frame) local params = { [1] = {required=true}, [2] = {},		["head"] = {}, ["h"] = {alias_of = "head"} }	local args = require("Module:parameters").process(frame:getParent.args, params) local data = {lang = lang, pos_category = "nouns", categories = {}, heads = {args["head"]}, genders = {mw.text.split(args[1], "%/")[1]}, inflections = {}} table.insert(data.categories, lang:getCanonicalName .. " class " .. data.genders[1] .. " nouns") if args[2] ~= "-" and plural_classes[args[1]] then local infl_plural = {label = "plural", accel = {form = "p", gender = plural_classes[args[1]]}, request = true} -- If no plural was provided, generate one if not args[2] then local singular = args["head"] and require("Module:links").remove_links(args["head"]) or mw.title.getCurrentTitle.text args[2] = export.generate_plural(singular, args[1]) end if args[2] then table.insert(infl_plural, {term = args[2], genders = {plural_classes[args[1]]}}) end table.insert(data.inflections, infl_plural) -- colloquial plural for class 9 if args[1] == "9" or args[1] == "9/6" then local infl_coll_plural = {label = "colloquial plural", accel = {form = "p", gender = "c2"}, request = true} local singular = args["head"] and require("Module:links").remove_links(args["head"]) or mw.title.getCurrentTitle.text local coll_plural = export.generate_plural(singular, "9/2") table.insert(infl_coll_plural, {term = coll_plural, genders = {"c2"}}) table.insert(data.inflections, infl_coll_plural) end end return require("Module:headword").full_headword(data) end

function match_case(string1, string2) local c1 = mw.ustring.sub(string1, 1, 1) local c2 = mw.ustring.sub(string2, 1, 1) if (mw.ustring.lower(c1) == c1) then return mw.ustring.lower(c2) .. mw.ustring.sub(string2, 2) else return mw.ustring.upper(c2) .. mw.ustring.sub(string2, 2) end end

function export.generate_plural(singular, class) if plural_rules[class] then for k, v in ipairs(plural_rules[class]) do if mw.ustring.find(mw.ustring.lower(singular), "^" .. v[1]) then return match_case(singular, v[2] .. mw.ustring.sub(singular, v[3])) end end end end

function export.verb(frame) local params = { [1] = {},		["head"] = {}, ["h"] = {alias_of = "head"} }	local args = require("Module:parameters").process(frame:getParent.args, params) local head = args["head"] or mw.title.getCurrentTitle.text local inf = args[1] or "ko"..head local data = {lang = lang, pos_category = "verbs", categories = {}, heads = {"-"..head}, inflections = }

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

return export