Module:goh-decl-noun

local export = {}

local m_links = require("Module:links") local m_utils = require("Module:utilities")

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

local decl_data = {}

decl_data["a-m"] = { params = { [1] = {},		[2] = {},		["alt1"] = {}, ["alt2"] = {}, }, } setmetatable(decl_data["a-m"], {__call = function(self, args, data)	data.decl_type = "masculine a-stem"	local a2 = args.alt2 or args[2] or args.alt1 or args[1]	data.forms["nom_sg"] = {args.alt1 or args[1]}	data.forms["acc_sg"] = {args.alt1 or args[1]}	data.forms["gen_sg"] = {a2 .. "es"}	data.forms["dat_sg"] = {a2 .. "e"}	data.forms["ins_sg"] = {a2 .. "u"}

data.forms["nom_pl"] = {a2 .. "a"} data.forms["acc_pl"] = {a2 .. "a"} data.forms["gen_pl"] = {a2 .. "o"} data.forms["dat_pl"] = {a2 .. "um"} table.insert(data.categories, "Old High German a-stem nouns") end })

decl_data["a-n"] = { params = { [1] = {},		[2] = {},		["alt1"] = {}, ["alt2"] = {}, }, } setmetatable(decl_data["a-n"], {__call = function(self, args, data)	decl_data["a-m"](args, data)	data.decl_type = "neuter a-stem"

data.forms["nom_pl"] = {args.alt1 or args[1]} data.forms["acc_pl"] = {args.alt1 or args[1]} end })

decl_data["i-f"] = { params = { [1] = {},		[2] = {},		["alt1"] = {}, ["alt2"] = {}, ["nom_sg"] = {}, }, } setmetatable(decl_data["i-f"], {__call = function(self, args, data)	data.decl_type = "feminine i-stem"	local a2 = args.alt2 or args[2] or args.alt1 or args[1]	data.forms["nom_sg"] = {args.nom_sg or args.alt1 or args[1]}	data.forms["acc_sg"] = {args.nom_sg or args.alt1 or args[1]}	data.forms["gen_sg"] = {a2 .. "i"}	data.forms["dat_sg"] = {a2 .. "i"}

data.forms["nom_pl"] = {a2 .. "i"} data.forms["acc_pl"] = {a2 .. "i"} data.forms["gen_pl"] = {a2 .. "o"} data.forms["dat_pl"] = {a2 .. "im", a2 .. "en"} table.insert(data.categories, "Old High German i-stem nouns") end })

decl_data["i-m"] = { params = { [1] = {},		[2] = {},		["alt1"] = {}, ["alt2"] = {}, ["nom_sg"] = {}, }, } setmetatable(decl_data["i-m"], {__call = function(self, args, data)	data.decl_type = "masculine i-stem"	local a2 = args.alt2 or args[2] or args.alt1 or args[1]

data.forms["nom_sg"] = {args.nom_sg or args.alt1 or args[1]} data.forms["acc_sg"] = {args.nom_sg or args.alt1 or args[1]} data.forms["gen_sg"] = {args.alt1 or args[1] .. "es"} data.forms["dat_sg"] = {args.alt1 or args[1] .. "e"} data.forms["ins_sg"] = {args.alt1 or args[1] .. "u"}

data.forms["nom_pl"] = {a2 .. "i"} data.forms["acc_pl"] = {a2 .. "i"} data.forms["gen_pl"] = {a2 .. "o"} data.forms["dat_pl"] = {a2 .. "im", a2 .. "en"} table.insert(data.categories, "Old High German i-stem nouns") end })

decl_data["ja-m"] = { params = { [1] = {},		[2] = {},		["alt1"] = {}, ["alt2"] = {}, }, } setmetatable(decl_data["ja-m"], {__call = function(self, args, data)	data.decl_type = "masculine ja-stem"	local a2 = args.alt2 or args[2] or args.alt1 or args[1]	data.forms["nom_sg"] = {(args.alt1 or args[1]) .. "i"}	data.forms["acc_sg"] = {(args.alt1 or args[1]) .. "i"}	data.forms["gen_sg"] = {a2 .. "es"}	data.forms["dat_sg"] = {a2 .. "e"}	data.forms["ins_sg"] = {a2 .. "u"}

data.forms["nom_pl"] = {a2 .. "a"} data.forms["acc_pl"] = {a2 .. "a"} data.forms["gen_pl"] = {a2 .. "o"} data.forms["dat_pl"] = {a2 .. "im"} table.insert(data.categories, "Old High German ja-stem nouns") end })

decl_data["ja-n"] = { params = { [1] = {},		[2] = {},		["alt1"] = {}, ["alt2"] = {}, }, } setmetatable(decl_data["ja-n"], {__call = function(self, args, data)	decl_data["ja-m"](args, data)	data.decl_type = "neuter ja-stem"

data.forms["nom_pl"] = {(args.alt1 or args[1]) .. "i"} data.forms["acc_pl"] = {(args.alt1 or args[1]) .. "i"} end })

decl_data["n-m"] = { params = { [1] = {},		[2] = {},		["alt1"] = {}, ["alt2"] = {}, }, } setmetatable(decl_data["n-m"], {__call = function(self, args, data)	data.decl_type = "masculine n-stem"	local a2 = args.alt2 or args[2] or args.alt1 or args[1]	data.forms["nom_sg"] = {args.alt1 or args[1] .. "o"}	data.forms["acc_sg"] = {args.alt1 or args[1] .. "on", args.alt1 or args[1] .. "un"}	data.forms["gen_sg"] = {a2 .. "en", a2 .. "in"}	data.forms["dat_sg"] = {a2 .. "en", a2 .. "in"}

data.forms["nom_pl"] = {a2 .. "on", a2 .. "un"} data.forms["acc_pl"] = {a2 .. "on", a2 .. "un"} data.forms["gen_pl"] = {a2 .. "ōno"} data.forms["dat_pl"] = {a2 .. "ōm", a2 .. "ōn"} table.insert(data.categories, "Old High German n-stem nouns") end })

decl_data["n-n"] = { params = { [1] = {},		[2] = {},		["alt1"] = {}, ["alt2"] = {}, }, } setmetatable(decl_data["n-n"], {__call = function(self, args, data)	data.decl_type = "neuter n-stem"	local a2 = args.alt2 or args[2] or args.alt1 or args[1]	data.forms["nom_sg"] = {args.alt1 or args[1] .. "a"}	data.forms["acc_sg"] = {args.alt1 or args[1] .. "a"}	data.forms["gen_sg"] = {a2 .. "en", a2 .. "in"}	data.forms["dat_sg"] = {a2 .. "en", a2 .. "in"}

data.forms["nom_pl"] = {a2 .. "un"} data.forms["acc_pl"] = {a2 .. "un"} data.forms["gen_pl"] = {a2 .. "ōno"} data.forms["dat_pl"] = {a2 .. "ōm", a2 .. "ōn"} table.insert(data.categories, "Old High German n-stem nouns") end })

decl_data["n-f"] = { params = { [1] = {},		[2] = {},		["alt1"] = {}, ["alt2"] = {}, }, } setmetatable(decl_data["n-f"], {__call = function(self, args, data)	decl_data["n-n"](args, data)	data.decl_type = "feminine n-stem"	local a2 = args.alt2 or args[2] or args.alt1 or args[1]

data.forms["acc_sg"] = {args.alt1 or args[1] .. "ūn"} data.forms["gen_sg"] = {a2 .. "ūn"} data.forms["dat_sg"] = {a2 .. "ūn"} end })

decl_data["o-f"] = { params = { [1] = {},		["alt1"] = {}, }, } setmetatable(decl_data["o-f"], {__call = function(self, args, data)	data.decl_type = "ō-stem"	local a1 = args.alt1 or args[1]	data.forms["nom_sg"] = {a1 .. "a"}	data.forms["acc_sg"] = {a1 .. "a"}	data.forms["gen_sg"] = {a1 .. "a"}	data.forms["dat_sg"] = {a1 .. "u"}

data.forms["nom_pl"] = {a1 .. "ā"} data.forms["acc_pl"] = {a1 .. "ā"} data.forms["gen_pl"] = {a1 .. "ōno"} data.forms["dat_pl"] = {a1 .. "ōm"}

table.insert(data.categories, "Old High German ō-stem nouns") end })

decl_data["in-f"] = { params = { [1] = {},		[2] = {type = "boolean", default = false}, ["alt1"] = {}, ["pl"] = {type = "boolean", default = false}, }, } setmetatable(decl_data["in-f"], {__call = function(self, args, data)	data.decl_type = "īn-stem"	local a1 = args.alt1 or args[1]	local a2 = args.pl or args[2]

data.forms["nom_sg"] = {a1 .. "ī"} data.forms["acc_sg"] = {a1 .. "ī"} data.forms["gen_sg"] = {a1 .. "ī"} data.forms["dat_sg"] = {a1 .. "ī"} if a2 == true then

data.forms["nom_pl"] = {a1 .. "ī"} data.forms["acc_pl"] = {a1 .. "ī"} data.forms["gen_pl"] = {a1 .. "ino"} data.forms["dat_pl"] = {a1 .. "inum"} else end

table.insert(data.categories, "Old High German īn-stem nouns") end })

decl_data["wa-m"] = { params = { [1] = {},		[2] = {},		["alt1"] = {}, ["alt2"] = {}, ["nomsg"] = {}, }, } setmetatable(decl_data["wa-m"], {__call = function(self, args, data)	data.decl_type = "masculine wa-stem"	local ns = args.nomsg or args.alt1 or args[1]	local a2 = args.alt2 or args[2] or args.alt1 or args[1]	data.forms["nom_sg"] = {ns}	data.forms["acc_sg"] = {ns}	data.forms["gen_sg"] = {a2 .. "wes"}	data.forms["dat_sg"] = {a2 .. "we"}

data.forms["nom_pl"] = {(args.alt1 or args[1]) .. "wa"} data.forms["acc_pl"] = {(args.alt1 or args[1]) .. "wa"} data.forms["gen_pl"] = {a2 .. "wo"} data.forms["dat_pl"] = {a2 .. "wum"} table.insert(data.categories, "Old High German wa-stem nouns") end })

decl_data["wa-n"] = { params = { [1] = {},		[2] = {},		["alt1"] = {}, ["alt2"] = {}, ["nomsg"] = {}, }, } setmetatable(decl_data["wa-n"], {__call = function(self, args, data)	decl_data["wa-m"](args, data)	data.decl_type = "neuter wa-stem"	local ns = args.nomsg or args.alt1 or args[1]

data.forms["nom_pl"] = {ns} data.forms["acc_pl"] = {ns} end })

-- The main entry point. -- This is the only function that can be invoked from a template. function export.show(frame)

local parent_args = frame:getParent.args local decl_type = (frame.args["decl"] or parent_args["decl"]) or "a-m"

if not decl_data[decl_type] then error("Unknown declension '" .. decl_type .. "'") end local data = {forms = {}, categories = {}} data.head = parent_args["head"] or nil

local args = require("Module:parameters").process(parent_args, decl_data[decl_type].params, true) -- Override for templates if not args[1] then setmetatable(args, {__index = function(self, key)			return ""		end		}) end -- Generate the forms if parent_args.irr then table.insert(data.categories, "Old High German irregular nouns") if decl_data.irregular[parent_args.irr] then decl_data.irregular[parent_args.irr](data) else decl_data[decl_type](args, data) end else decl_data[decl_type](args, data) end

-- Make the table return make_table(data) end

function make_table(data) local function show_form(form) if not form then return "—" end local ret = {} for key, subform in ipairs(form) do			if mw.title.getCurrentTitle.nsText == "Reconstruction" and subform ~= "—" then subform = "*" .. subform end table.insert(ret, m_links.full_link({lang = lang, term = subform})) end return table.concat(ret, ", ") end local function repl(param) if param == "decl_type" then return data.decl_type else return show_form(data.forms[param]) end end

local wikicode = [=[ Declension of

{| style="background:#F5FFFA;text-align:center;width:30em" class="inflection-table" ! style="background:#F5FFFA" | case ! style="background:#93C572; width: 37.5%" | singular ! style="background:#93C572; width: 37.5%" | plural ! style="background:#90EE90" | nominative ! style="background:#90EE90" | accusative ! style="background:#90EE90" | genitive ! style="background:#90EE90" | dative ]=]

if data.forms.ins_sg or data.forms.ins_pl then wikicode = wikicode .. [=[|- ! style="background:#90EE90" | instrumental ]=] end wikicode = wikicode .. "|} "

return (mw.ustring.gsub(wikicode, "", repl)) .. m_utils.format_categories(data.categories, lang) end

return export