Module:got-adjective

local m_utilities = require("Module:utilities") local m_links = require("Module:links") local m_translit = require("Module:Goth-translit")

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

local export = {}

local function postprocess(args, data) -- Check if the lemma form matches the page name if (data.forms["m_nom_sg"] or data.forms["strong_m_nom_sg"]) and (lang:makeEntryName(m_translit.tr_reverse((data.forms["m_nom_sg"] or data.forms["strong_m_nom_sg"])[1]))) ~= mw.title.getCurrentTitle.text then table.insert(data.categories, lang:getCanonicalName .. " entries with inflection not matching pagename") end end

local function make_Latn(args, names) for _, name in ipairs(names) do		if args[name] then if type(args[name]) == "table" then for i, _ in ipairs(args[name]) do					args[name][i] = m_translit.tr(args[name][i]) end else args[name] = m_translit.tr(args[name]) end end end end

local function weak(data, stem, prefix) if prefix then data.weak = true for key, forms in pairs(data.forms) do			if not mw.ustring.find(key, "^strong_") then data.forms["strong_" .. key] = forms end end for key, forms in pairs(data.forms) do			if not mw.ustring.find(key, "^strong_") then data.forms[key] = nil end end end data.forms[(prefix and "weak_" or "") .. "m_nom_sg"] = {stem .. "a"} data.forms[(prefix and "weak_" or "") .. "m_acc_sg"] = {stem .. "an"} data.forms[(prefix and "weak_" or "") .. "m_gen_sg"] = {stem .. "ins"} data.forms[(prefix and "weak_" or "") .. "m_dat_sg"] = {stem .. "in"} data.forms[(prefix and "weak_" or "") .. "m_nom_pl"] = {stem .. "ans"} data.forms[(prefix and "weak_" or "") .. "m_acc_pl"] = {stem .. "ans"} data.forms[(prefix and "weak_" or "") .. "m_gen_pl"] = {stem .. "anē"} data.forms[(prefix and "weak_" or "") .. "m_dat_pl"] = {stem .. "am"} data.forms[(prefix and "weak_" or "") .. "f_nom_sg"] = {stem .. "ō"} data.forms[(prefix and "weak_" or "") .. "f_acc_sg"] = {stem .. "ōn"} data.forms[(prefix and "weak_" or "") .. "f_gen_sg"] = {stem .. "ōns"} data.forms[(prefix and "weak_" or "") .. "f_dat_sg"] = {stem .. "ōn"} data.forms[(prefix and "weak_" or "") .. "f_nom_pl"] = {stem .. "ōns"} data.forms[(prefix and "weak_" or "") .. "f_acc_pl"] = {stem .. "ōns"} data.forms[(prefix and "weak_" or "") .. "f_gen_pl"] = {stem .. "ōnō"} data.forms[(prefix and "weak_" or "") .. "f_dat_pl"] = {stem .. "ōm"} data.forms[(prefix and "weak_" or "") .. "n_nom_sg"] = {stem .. "ō"} data.forms[(prefix and "weak_" or "") .. "n_acc_sg"] = {stem .. "ō"} data.forms[(prefix and "weak_" or "") .. "n_gen_sg"] = {stem .. "ins"} data.forms[(prefix and "weak_" or "") .. "n_dat_sg"] = {stem .. "in"} data.forms[(prefix and "weak_" or "") .. "n_nom_pl"] = {stem .. "ōna"} data.forms[(prefix and "weak_" or "") .. "n_acc_pl"] = {stem .. "ōna"} data.forms[(prefix and "weak_" or "") .. "n_gen_pl"] = {stem .. "anē"} data.forms[(prefix and "weak_" or "") .. "n_dat_pl"] = {stem .. "am"} end

-- Inflection functions

export["a"] = function(frame) local params = { [1] = {required = true, default = ""}, [2] = {},		["nomsg"] = {}, ["j"] = {}, ["noweak"] = {type = "boolean"}, }	local args = require("Module:parameters").process(frame:getParent.args, params) make_Latn(args, {1, 2, "nomsg"}) if args["j"] and not (args["j"] == "ji" or args["j"] == "ei") then error("Invalid value for parameter j=, must be \"ji\", \"ei\" or empty.") end local data = {forms = {}, info = (args["j"] and "j" or "") .. "a-stem" .. (args["noweak"] and ", strong forms only" or ""), categories = {lang:getCanonicalName .. " a-stem adjectives"}} data.sg = true data.pl = true data.forms["m_nom_sg"] = {args["nomsg"] or (args[2] or args[1]) .. (args["j"] or "") .. "s"} data.forms["m_acc_sg"] = {args[1] .. (args["j"] and "j" or "") .. "ana"} data.forms["m_gen_sg"] = {args[1] .. (args["j"] or "i") .. "s"} data.forms["m_dat_sg"] = {args[1] .. (args["j"] and "j" or "") .. "amma"} data.forms["m_nom_pl"] = {args[1] .. (args["j"] and "j" or "") .. "ai"} data.forms["m_acc_pl"] = {args[1] .. (args["j"] and "j" or "") .. "ans"} data.forms["m_gen_pl"] = {args[1] .. (args["j"] and "j" or "") .. "aizē"} data.forms["m_dat_pl"] = {args[1] .. (args["j"] and "j" or "") .. "aim"} data.forms["f_nom_sg"] = {args[1] .. (args["j"] == "ei" and "i" or args["j"] and "ja" or "a")} data.forms["f_acc_sg"] = {args[1] .. (args["j"] and "j" or "") .. "a"} data.forms["f_gen_sg"] = {args[1] .. (args["j"] and "j" or "") .. "aizōs"} data.forms["f_dat_sg"] = {args[1] .. (args["j"] and "j" or "") .. "ai"} data.forms["f_nom_pl"] = {args[1] .. (args["j"] and "j" or "") .. "ōs"} data.forms["f_acc_pl"] = {args[1] .. (args["j"] and "j" or "") .. "ōs"} data.forms["f_gen_pl"] = {args[1] .. (args["j"] and "j" or "") .. "aizō"} data.forms["f_dat_pl"] = {args[1] .. (args["j"] and "j" or "") .. "aim"} data.forms["n_nom_sg"] = {(args[2] or args[1]) .. (args["j"] and "i" or ""), args[1] .. (args["j"] and "j" or "") .. "ata"} data.forms["n_acc_sg"] = {(args[2] or args[1]) .. (args["j"] and "i" or ""), args[1] .. (args["j"] and "j" or "") .. "ata"} data.forms["n_gen_sg"] = {args[1] .. (args["j"] or "i") .. "s"} data.forms["n_dat_sg"] = {args[1] .. (args["j"] and "j" or "") .. "amma"} data.forms["n_nom_pl"] = {args[1] .. (args["j"] and "j" or "") .. "a"} data.forms["n_acc_pl"] = {args[1] .. (args["j"] and "j" or "") .. "a"} data.forms["n_gen_pl"] = {args[1] .. (args["j"] and "j" or "") .. "aizē"} data.forms["n_dat_pl"] = {args[1] .. (args["j"] and "j" or "") .. "aim"} if not args["noweak"] then weak(data, args[1] .. (args["j"] and "j" or ""), true) end postprocess(args, data) return make_table(data) .. m_utilities.format_categories(data.categories, lang) end

export["a-uh"] = function(frame) local params = { [1] = {required = true, default = ""}, [2] = {},		["nomsg"] = {}, ["j"] = {}, }	local args = require("Module:parameters").process(frame:getParent.args, params) make_Latn(args, {1, 2, "nomsg"}) if args["j"] and not (args["j"] == "ji" or args["j"] == "ei") then error("Invalid value for parameter j=, must be \"ji\", \"ei\" or empty.") end local data = {forms = {}, info = (args["j"] and "j" or "") .. "a-stem, strong singular forms only", categories = {lang:getCanonicalName .. " a-stem adjectives"}} data.sg = true data.forms["m_nom_sg"] = {args["nomsg"] or (args[2] or args[1]) .. (args["j"] or "") .. "zuh"} data.forms["m_acc_sg"] = {args[1] .. (args["j"] and "j" or "") .. "anōh"} data.forms["m_gen_sg"] = {args[1] .. (args["j"] or "i") .. "zuh"} data.forms["m_dat_sg"] = {args[1] .. (args["j"] and "j" or "") .. "ammēh"} data.forms["f_nom_sg"] = {args[1] .. (args["j"] and "j" or "") .. "ōh"} data.forms["f_acc_sg"] = {args[1] .. (args["j"] and "j" or "") .. "ōh"} data.forms["f_gen_sg"] = {args[1] .. (args["j"] and "j" or "") .. "aizōzuh"} data.forms["f_dat_sg"] = {args[1] .. (args["j"] and "j" or "") .. "aih"} data.forms["n_nom_sg"] = {args[1] .. (args["j"] and "j" or "") .. "atōh"} data.forms["n_acc_sg"] = {args[1] .. (args["j"] and "j" or "") .. "atōh"} data.forms["n_gen_sg"] = {args[1] .. (args["j"] or "i") .. "zuh"} data.forms["n_dat_sg"] = {args[1] .. (args["j"] and "j" or "") .. "ammēh"} postprocess(args, data) return make_table(data) .. m_utilities.format_categories(data.categories, lang) end

export["i"] = function(frame) local params = { [1] = {required = true, default = ""}, [2] = {},		["nomsg"] = {}, }	local args = require("Module:parameters").process(frame:getParent.args, params) make_Latn(args, {1, 2, "nomsg"}) local data = {forms = {}, info = "i-stem", categories = {lang:getCanonicalName .. " i-stem adjectives"}} data.sg = true data.pl = true data.forms["m_nom_sg"] = {args["nomsg"] or (args[2] or args[1]) .. "s"} data.forms["m_acc_sg"] = {args[1] .. "jana"} data.forms["m_gen_sg"] = {args[1] .. "is"} data.forms["m_dat_sg"] = {args[1] .. "jamma"} data.forms["m_nom_pl"] = {args[1] .. "jai"} data.forms["m_acc_pl"] = {args[1] .. "jans"} data.forms["m_gen_pl"] = {args[1] .. "jaizē"} data.forms["m_dat_pl"] = {args[1] .. "jaim"} data.forms["f_nom_sg"] = {args["nomsg"] or (args[2] or args[1]) .. "s"} data.forms["f_acc_sg"] = {args[1] .. "ja"} data.forms["f_gen_sg"] = {args[1] .. "jaizōs"} data.forms["f_dat_sg"] = {args[1] .. "jai"} data.forms["f_nom_pl"] = {args[1] .. "jōs"} data.forms["f_acc_pl"] = {args[1] .. "jōs"} data.forms["f_gen_pl"] = {args[1] .. "jaizō"} data.forms["f_dat_pl"] = {args[1] .. "jaim"} data.forms["n_nom_sg"] = {args[2] or args[1], args[1] .. "jata"} data.forms["n_acc_sg"] = {args[2] or args[1], args[1] .. "jata"} data.forms["n_gen_sg"] = {args[1] .. "is"} data.forms["n_dat_sg"] = {args[1] .. "jamma"} data.forms["n_nom_pl"] = {args[1] .. "ja"} data.forms["n_acc_pl"] = {args[1] .. "ja"} data.forms["n_gen_pl"] = {args[1] .. "jaizē"} data.forms["n_dat_pl"] = {args[1] .. "jaim"} weak(data, args[1] .. "j", true) postprocess(args, data) return make_table(data) .. m_utilities.format_categories(data.categories, lang) end

export["n"] = function(frame) local params = { [1] = {required = true, default = ""}, }	local args = require("Module:parameters").process(frame:getParent.args, params) make_Latn(args, {1}) local data = {forms = {}, info = "n-stem, weak forms only", categories = {lang:getCanonicalName .. " n-stem adjectives"}} data.sg = true data.pl = true weak(data, args[1], false) postprocess(args, data) return make_table(data) .. m_utilities.format_categories(data.categories, lang) end

export["in"] = function(frame) local params = { [1] = {required = true, default = ""}, }	local args = require("Module:parameters").process(frame:getParent.args, params) make_Latn(args, {1}) local data = {forms = {}, info = "an/īn-stem, weak forms only", categories = {lang:getCanonicalName .. " an/īn-stem adjectives", lang:getCanonicalName .. " comparative adjectives"}} data.sg = true data.pl = true weak(data, args[1], false) data.forms["f_nom_sg"] = {args[1] .. "ei"} data.forms["f_acc_sg"] = {args[1] .. "ein"} data.forms["f_gen_sg"] = {args[1] .. "eins"} data.forms["f_dat_sg"] = {args[1] .. "ein"} data.forms["f_nom_pl"] = {args[1] .. "eins"} data.forms["f_acc_pl"] = {args[1] .. "eins"} data.forms["f_gen_pl"] = {args[1] .. "einō"} data.forms["f_dat_pl"] = {args[1] .. "eim"} postprocess(args, data) return make_table(data) .. m_utilities.format_categories(data.categories, lang) end

export["pp"] = function(frame) local params = { [1] = {required = true, default = ""}, }	local args = require("Module:parameters").process(frame:getParent.args, params) make_Latn(args, {1}) local data = {forms = {}, info = "an/īn-stem, strong in m. nom. sg.", categories = {lang:getCanonicalName .. " an/īn-stem adjectives"}} data.sg = true data.pl = true weak(data, args[1], false) table.insert(data.forms["m_nom_sg"], 1, args[1] .. "s") data.forms["f_nom_sg"] = {args[1] .. "ei"} data.forms["f_acc_sg"] = {args[1] .. "ein"} data.forms["f_gen_sg"] = {args[1] .. "eins"} data.forms["f_dat_sg"] = {args[1] .. "ein"} data.forms["f_nom_pl"] = {args[1] .. "eins"} data.forms["f_acc_pl"] = {args[1] .. "eins"} data.forms["f_gen_pl"] = {args[1] .. "einō"} data.forms["f_dat_pl"] = {args[1] .. "eim"} postprocess(args, data) return make_table(data) .. m_utilities.format_categories(data.categories, lang) end

export["u"] = function(frame) local params = { [1] = {required = true, default = ""}, }	local args = require("Module:parameters").process(frame:getParent.args, params) make_Latn(args, {1}) local data = {forms = {}, info = "u-stem", categories = {lang:getCanonicalName .. " u-stem adjectives"}} data.sg = true data.pl = true data.forms["m_nom_sg"] = {args[1] .. "us"} data.forms["m_acc_sg"] = {args[1] .. "jana"} data.forms["m_gen_sg"] = {"*" .. args[1] .. "aus"} data.forms["m_dat_sg"] = {"*" .. args[1] .. "jamma"} data.forms["m_nom_pl"] = {args[1] .. "jai"} data.forms["m_acc_pl"] = {args[1] .. "jans"} data.forms["m_gen_pl"] = {args[1] .. "jaizē"} data.forms["m_dat_pl"] = {args[1] .. "jaim"} data.forms["f_nom_sg"] = {args[1] .. "us"} data.forms["f_acc_sg"] = {args[1] .. "ja"} data.forms["f_gen_sg"] = {"*" .. args[1] .. "jaizōs"} data.forms["f_dat_sg"] = {"*" .. args[1] .. "jai"} data.forms["f_nom_pl"] = {args[1] .. "jōs"} data.forms["f_acc_pl"] = {args[1] .. "jōs"} data.forms["f_gen_pl"] = {args[1] .. "jaizō"} data.forms["f_dat_pl"] = {args[1] .. "jaim"} data.forms["n_nom_sg"] = {(args[2] or args[1]) .. "u", args[1] .. "jata"} data.forms["n_acc_sg"] = {(args[2] or args[1]) .. "u", args[1] .. "jata"} data.forms["n_gen_sg"] = {"*" .. args[1] .. "aus"} data.forms["n_dat_sg"] = {"*" .. args[1] .. "jamma"} data.forms["n_nom_pl"] = {"*" .. args[1] .. "ja"} data.forms["n_acc_pl"] = {"*" .. args[1] .. "ja"} data.forms["n_gen_pl"] = {args[1] .. "jaizē"} data.forms["n_dat_pl"] = {args[1] .. "jaim"} weak(data, args[1] .. "j", true) postprocess(args, data) return make_table(data) .. m_utilities.format_categories(data.categories, lang) end

-- Make the table function make_table(data) local function repl(param) if param == "info" then return mw.getContentLanguage:ucfirst(data.info or "") end local form = data.forms[param] if not form or #form == 0 then return "&mdash;" end local ret_Goth = {} local ret_Latn = {} for key, subform in ipairs(form) do			table.insert(ret_Latn, m_links.full_link({lang = lang, term = subform, tr = "-"})) table.insert(ret_Goth, m_links.full_link({lang = lang, term = m_translit.tr_reverse(subform), tr = "-"})) end return table.concat(ret_Goth, ", ") .. " " .. table.concat(ret_Latn, ", ") end local names = { ["nom"] = "nominative", ["acc"] = "accusative", ["gen"] = "genitive", ["dat"] = "dative", ["sg"] = "singular", ["pl"] = "plural", ["m"] = "masculine", ["f"] = "feminine", ["n"] = "neuter", ["strong_"] = "strong (indefinite) inflection", ["weak_"] = "weak (definite) inflection", }	local genders = {"m", "f", "n"} local numbers = {} local cases = {"nom", "acc", "gen", "dat"} local prefixes = {""} if data.weak then prefixes = {"strong_", "weak_"} end if data.sg then table.insert(numbers, "sg") end if data.pl then table.insert(numbers, "pl") end local wikicode = {} table.insert(wikicode, "{| class=\"wikitable inflection-table vsSwitcher\" style=\"border-style: double; border-width: 3px;\" cellspacing=\"1\"") table.insert(wikicode, "|-") table.insert(wikicode, "! class=\"vsToggleElement\" style=\"background: #CCC; min-width: " .. (8 + #genders * 12) .. "em; text-align: left;\" colspan=\"" .. (#genders + 1) .. "\" | ") for _, prefix in ipairs(prefixes) do		if prefix ~= "" then table.insert(wikicode, "|- class=\"vsHide\"") table.insert(wikicode, "! style=\"background: #DDD;\" colspan=\"" .. (#genders + 1) .. "\" | " .. mw.getContentLanguage:ucfirst(names[prefix])) end for _, number in ipairs(numbers) do			table.insert(wikicode, "|- class=\"vsHide\"") table.insert(wikicode, "! style=\"min-width: 8em;\" | " .. mw.getContentLanguage:ucfirst(names[number])) for _, gender in ipairs(genders) do table.insert(wikicode, "! style=\"min-width: 12em;\" | " .. mw.getContentLanguage:ucfirst(names[gender])) end for _, case in ipairs(cases) do				table.insert(wikicode, "|- class=\"vsHide\"") table.insert(wikicode, "! " .. mw.getContentLanguage:ucfirst(names[case])) for _, gender in ipairs(genders) do					table.insert(wikicode, "| ") end end end end table.insert(wikicode, "|}") wikicode = table.concat(wikicode, "\n") return mw.ustring.gsub(wikicode, "", repl) end

return export