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 or data.forms) and (lang:makeEntryName(m_translit.tr_reverse((data.forms or data.forms)))) ~= 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 then
if type(args) == "table" then
for i, _ in ipairs(args) do
args = m_translit.tr(args)
end
else
args = m_translit.tr(args)
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 = forms
end
end
for key, forms in pairs(data.forms) do
if not mw.ustring.find(key, "^strong_") then
data.forms = nil
end
end
end
data.forms = {stem .. "a"}
data.forms = {stem .. "an"}
data.forms = {stem .. "ins"}
data.forms = {stem .. "in"}
data.forms = {stem .. "ans"}
data.forms = {stem .. "ans"}
data.forms = {stem .. "anē"}
data.forms = {stem .. "am"}
data.forms = {stem .. "ō"}
data.forms = {stem .. "ōn"}
data.forms = {stem .. "ōns"}
data.forms = {stem .. "ōn"}
data.forms = {stem .. "ōns"}
data.forms = {stem .. "ōns"}
data.forms = {stem .. "ōnō"}
data.forms = {stem .. "ōm"}
data.forms = {stem .. "ō"}
data.forms = {stem .. "ō"}
data.forms = {stem .. "ins"}
data.forms = {stem .. "in"}
data.forms = {stem .. "ōna"}
data.forms = {stem .. "ōna"}
data.forms = {stem .. "anē"}
data.forms = {stem .. "am"}
end
-- Inflection functions
export = function(frame)
local params = {
= {required = true, default = "{{{1}}}"},
= {},
= {},
= {},
= {type = "boolean"},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
make_Latn(args, {1, 2, "nomsg"})
if args and not (args == "ji" or args == "ei") then
error("Invalid value for parameter j=, must be \"ji\", \"ei\" or empty.")
end
local data = {forms = {}, info = (args and "j" or "") .. "a-stem" .. (args and ", strong forms only" or ""), categories = {lang:getCanonicalName() .. " a-stem adjectives"}}
data.sg = true
data.pl = true
data.forms = {args or (args or args) .. (args or "") .. "s"}
data.forms = {args .. (args and "j" or "") .. "ana"}
data.forms = {args .. (args or "i") .. "s"}
data.forms = {args .. (args and "j" or "") .. "amma"}
data.forms = {args .. (args and "j" or "") .. "ai"}
data.forms = {args .. (args and "j" or "") .. "ans"}
data.forms = {args .. (args and "j" or "") .. "aizē"}
data.forms = {args .. (args and "j" or "") .. "aim"}
data.forms = {args .. (args == "ei" and "i" or args and "ja" or "a")}
data.forms = {args .. (args and "j" or "") .. "a"}
data.forms = {args .. (args and "j" or "") .. "aizōs"}
data.forms = {args .. (args and "j" or "") .. "ai"}
data.forms = {args .. (args and "j" or "") .. "ōs"}
data.forms = {args .. (args and "j" or "") .. "ōs"}
data.forms = {args .. (args and "j" or "") .. "aizō"}
data.forms = {args .. (args and "j" or "") .. "aim"}
data.forms = {(args or args) .. (args and "i" or ""), args .. (args and "j" or "") .. "ata"}
data.forms = {(args or args) .. (args and "i" or ""), args .. (args and "j" or "") .. "ata"}
data.forms = {args .. (args or "i") .. "s"}
data.forms = {args .. (args and "j" or "") .. "amma"}
data.forms = {args .. (args and "j" or "") .. "a"}
data.forms = {args .. (args and "j" or "") .. "a"}
data.forms = {args .. (args and "j" or "") .. "aizē"}
data.forms = {args .. (args and "j" or "") .. "aim"}
if not args then
weak(data, args .. (args and "j" or ""), true)
end
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
export = function(frame)
local params = {
= {required = true, default = "{{{1}}}"},
= {},
= {},
= {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
make_Latn(args, {1, 2, "nomsg"})
if args and not (args == "ji" or args == "ei") then
error("Invalid value for parameter j=, must be \"ji\", \"ei\" or empty.")
end
local data = {forms = {}, info = (args and "j" or "") .. "a-stem, strong singular forms only", categories = {lang:getCanonicalName() .. " a-stem adjectives"}}
data.sg = true
data.forms = {args or (args or args) .. (args or "") .. "zuh"}
data.forms = {args .. (args and "j" or "") .. "anōh"}
data.forms = {args .. (args or "i") .. "zuh"}
data.forms = {args .. (args and "j" or "") .. "ammēh"}
data.forms = {args .. (args and "j" or "") .. "ōh"}
data.forms = {args .. (args and "j" or "") .. "ōh"}
data.forms = {args .. (args and "j" or "") .. "aizōzuh"}
data.forms = {args .. (args and "j" or "") .. "aih"}
data.forms = {args .. (args and "j" or "") .. "atōh"}
data.forms = {args .. (args and "j" or "") .. "atōh"}
data.forms = {args .. (args or "i") .. "zuh"}
data.forms = {args .. (args and "j" or "") .. "ammēh"}
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
export = function(frame)
local params = {
= {required = true, default = "{{{1}}}"},
= {},
= {},
}
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 = {args or (args or args) .. "s"}
data.forms = {args .. "jana"}
data.forms = {args .. "is"}
data.forms = {args .. "jamma"}
data.forms = {args .. "jai"}
data.forms = {args .. "jans"}
data.forms = {args .. "jaizē"}
data.forms = {args .. "jaim"}
data.forms = {args or (args or args) .. "s"}
data.forms = {args .. "ja"}
data.forms = {args .. "jaizōs"}
data.forms = {args .. "jai"}
data.forms = {args .. "jōs"}
data.forms = {args .. "jōs"}
data.forms = {args .. "jaizō"}
data.forms = {args .. "jaim"}
data.forms = {args or args, args .. "jata"}
data.forms = {args or args, args .. "jata"}
data.forms = {args .. "is"}
data.forms = {args .. "jamma"}
data.forms = {args .. "ja"}
data.forms = {args .. "ja"}
data.forms = {args .. "jaizē"}
data.forms = {args .. "jaim"}
weak(data, args .. "j", true)
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
export = function(frame)
local params = {
= {required = true, default = "{{{1}}}"},
}
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, false)
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
export = function(frame)
local params = {
= {required = true, default = "{{{1}}}"},
}
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, false)
data.forms = {args .. "ei"}
data.forms = {args .. "ein"}
data.forms = {args .. "eins"}
data.forms = {args .. "ein"}
data.forms = {args .. "eins"}
data.forms = {args .. "eins"}
data.forms = {args .. "einō"}
data.forms = {args .. "eim"}
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
export = function(frame)
local params = {
= {required = true, default = "{{{1}}}"},
}
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, false)
table.insert(data.forms, 1, args .. "s")
data.forms = {args .. "ei"}
data.forms = {args .. "ein"}
data.forms = {args .. "eins"}
data.forms = {args .. "ein"}
data.forms = {args .. "eins"}
data.forms = {args .. "eins"}
data.forms = {args .. "einō"}
data.forms = {args .. "eim"}
postprocess(args, data)
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
export = function(frame)
local params = {
= {required = true, default = "{{{1}}}"},
}
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 = {args .. "us"}
data.forms = {args .. "jana"}
data.forms = {"*" .. args .. "aus"}
data.forms = {"*" .. args .. "jamma"}
data.forms = {args .. "jai"}
data.forms = {args .. "jans"}
data.forms = {args .. "jaizē"}
data.forms = {args .. "jaim"}
data.forms = {args .. "us"}
data.forms = {args .. "ja"}
data.forms = {"*" .. args .. "jaizōs"}
data.forms = {"*" .. args .. "jai"}
data.forms = {args .. "jōs"}
data.forms = {args .. "jōs"}
data.forms = {args .. "jaizō"}
data.forms = {args .. "jaim"}
data.forms = {(args or args) .. "u", args .. "jata"}
data.forms = {(args or args) .. "u", args .. "jata"}
data.forms = {"*" .. args .. "aus"}
data.forms = {"*" .. args .. "jamma"}
data.forms = {"*" .. args .. "ja"}
data.forms = {"*" .. args .. "ja"}
data.forms = {args .. "jaizē"}
data.forms = {args .. "jaim"}
weak(data, args .. "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)
local form = data.forms
if not form or #form == 0 then
return "—"
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, ", ") .. "<br/>" .. table.concat(ret_Latn, ", ")
end
local names = {
= "nominative",
= "accusative",
= "genitive",
= "dative",
= "singular",
= "plural",
= "masculine",
= "feminine",
= "neuter",
= "strong (indefinite) inflection",
= "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, mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-top',
args = {
title = mw.getContentLanguage():ucfirst(data.info or ""),
palette = 'grey',
tall = 'yes',
}
})
for _, prefix in ipairs(prefixes) do
if prefix == "weak_" then
table.insert(wikicode, "|-")
table.insert(wikicode, "| class=\"separator\" colspan=\"999\" |")
end
if prefix ~= "" then
table.insert(wikicode, "|-")
table.insert(wikicode, "! class=\"outer\" colspan=\"" .. (#genders + 1) .. "\" | " .. mw.getContentLanguage():ucfirst(names))
end
for _, number in ipairs(numbers) do
table.insert(wikicode, "|-")
table.insert(wikicode, "! class=\"outer\" | " .. names)
for _, gender in ipairs(genders) do
table.insert(wikicode, "! " .. names)
end
for _, case in ipairs(cases) do
table.insert(wikicode, "|-")
table.insert(wikicode, "! " .. names)
for _, gender in ipairs(genders) do
table.insert(wikicode, "| {{{" .. prefix .. gender .. "_" .. case .. "_" .. number .. "}}}")
end
end
end
end
table.insert(wikicode, mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' })
wikicode = table.concat(wikicode, "\n")
return mw.ustring.gsub(wikicode, "{{{(+)}}}", repl)
end
return export