local export = {}
local m_links = require("Module:links")
local m_utils = require("Module:utilities")
local lang = require("Module:languages").getByCode("goh")
local conj_data = {}
conj_data = {
params = {
= {},
= {},
= {},
= {},
= {},
= {},
= {},
},
}
setmetatable(conj_data, {__call = function(self, args, data)
if not args.class then
error("Class parameter required for strong verbs")
end
data.conj_type = "strong class " .. args.class
if args:sub(1,1) == "*" then
error("Redundant asterisks")
end
data.forms = {args.head or (args .. "an")}
data.forms = {(args.mutstem or args) .. "u", (args.mutstem or args) .. "o"}
data.forms = {(args.mutstem or args) .. "is", (args.mutstem or args) .. "ist"}
data.forms = {(args.mutstem or args) .. "it"}
data.forms = {args .. "em", args .. "emēs"}
data.forms = {args .. "et"}
data.forms = {args .. "ant"}
data.forms = {args}
data.forms = {args .. "i"}
data.forms = {args}
data.forms = {args .. "um", args .. "umēs"}
data.forms = {args .. "ut"}
data.forms = {args .. "un"}
data.forms = {args .. "e"}
data.forms = {args .. "ēs", args .. "ēst"}
data.forms = {args .. "e"}
data.forms = {args .. "ēm", args .. "emēs"}
data.forms = {args .. "ēt"}
data.forms = {args .. "ēn"}
data.forms = {args .. "i"}
data.forms = {args .. "īs", args .. "īst"}
data.forms = {args .. "i"}
data.forms = {args .. "īm", args .. "īmēs"}
data.forms = {args .. "īt"}
data.forms = {args .. "īn"}
data.forms = {(args.impr or args.mutstem) or args}
data.forms = {args .. "et"}
data.forms = {args .. "anti"}
data.forms = {args}
table.insert(data.categories, "Old High German class " .. args.class .. " strong verbs")
end
})
conj_data = {
params = {
= {},
= {},
= {},
= {},
= {},
},
}
setmetatable(conj_data, {__call = function(self, args, data)
data.conj_type = "weak class 1"
if args:sub(1,1) == "*" then
error("Redundant asterisks")
end
data.forms = {args.head or (args .. "en")}
data.forms = {args .. "u"}
data.forms = {(args.mutstem or args) .. "is", (args.mutstem or args) .. "ist"}
data.forms = {(args.mutstem or args) .. "it"}
data.forms = {args .. "em", args .. "emēs"}
data.forms = {args .. "et"}
data.forms = {args .. "ent"}
data.forms = {(args or args) .. "ta"}
data.forms = {(args or args) .. "tōs", (args.mutstem or args) .. "tōst"}
data.forms = {(args or args) .. "ta"}
data.forms = {(args or args) .. "tum", (args or args) .. "tumēs"}
data.forms = {(args or args) .. "tut"}
data.forms = {(args or args) .. "tun"}
data.forms = {args .. "e"}
data.forms = {args .. "ēs", args .. "ēst"}
data.forms = {args .. "e"}
data.forms = {args .. "ēm", args .. "ēn", args .. "emēs"}
data.forms = {args .. "ēt"}
data.forms = {args .. "ēn"}
data.forms = {(args or args) .. "ti"}
data.forms = {(args or args) .. "tīs", (args or args) .. "tīst"}
data.forms = {(args or args) .. "ti"}
data.forms = {(args or args) .. "tīm", (args or args) .. "tīn", (args or args) .. "tīmēs"}
data.forms = {(args or args) .. "tīt"}
data.forms = {(args or args) .. "tīn"}
data.forms = {((args.impr or args.mutstem) or args) .. "i"}
data.forms = {args .. "et"}
data.forms = {args .. "enti"}
data.forms = {args.past_ptc or ("gi" .. (args or args) .. "t")}
table.insert(data.categories, "Old High German class 1 weak verbs")
end
})
conj_data = {
params = {
= {},
= {},
= {},
= {},
},
}
setmetatable(conj_data, {__call = function(self, args, data)
data.conj_type = "weak class 2"
if args:sub(1,1) == "*" then
error("Redundant asterisks")
end
data.forms = {args.head or (args .. "ōn")}
data.forms = {args .. "ōm", args .. "ōn"}
data.forms = {(args.mutstem or args) .. "ōs", (args.mutstem or args) .. "ōst"}
data.forms = {(args.mutstem or args) .. "ōt"}
data.forms = {args .. "ōm", args .. "ōmēs"}
data.forms = {args .. "ōt"}
data.forms = {args .. "ōnt"}
data.forms = {args .. "ōta"}
data.forms = {args .. "ōtōs", args .. "ōtōst"}
data.forms = {args .. "ōta"}
data.forms = {args .. "ōtum", args .. "ōtumēs"}
data.forms = {args .. "ōtut"}
data.forms = {args .. "ōtun"}
data.forms = {args .. "o"}
data.forms = {args .. "ōs", args .. "ōst"}
data.forms = {args .. "o"}
data.forms = {args .. "ōm", args .. "ōmēs"}
data.forms = {args .. "ōt"}
data.forms = {args .. "ōn"}
data.forms = {args .. "ōti"}
data.forms = {args .. "ōtīs"}
data.forms = {args .. "ōti"}
data.forms = {args .. "ōtīm", args .. "ōtīmēs"}
data.forms = {args .. "ōtīt"}
data.forms = {args .. "ōtīn"}
data.forms = {((args.impr or args.mutstem) or args) .. "o"}
data.forms = {args .. "ōt"}
data.forms = {args .. "ōnti"}
data.forms = {args.past_ptc or ("gi" .. args .. "ōt")}
table.insert(data.categories, "Old High German class 2 weak verbs")
end
})
conj_data = {
params = {
= {},
= {},
= {},
= {},
},
}
setmetatable(conj_data, {__call = function(self, args, data)
data.conj_type = "weak class 3"
if args:sub(1,1) == "*" then
error("Redundant asterisks")
end
data.forms = {args.head or (args .. "ēn")}
data.forms = {args .. "ēm", args .. "ēn"}
data.forms = {(args.mutstem or args) .. "ēs", (args.mutstem or args) .. "ēst"}
data.forms = {(args.mutstem or args) .. "ēt"}
data.forms = {args .. "ēm", args .. "ēmēs"}
data.forms = {args .. "ēt"}
data.forms = {args .. "ēnt"}
data.forms = {args .. "ēta"}
data.forms = {args .. "ētōs", args .. "ētōst"}
data.forms = {args .. "ēta"}
data.forms = {args .. "ētum", args .. "ētumēs"}
data.forms = {args .. "ētut"}
data.forms = {args .. "ētun"}
data.forms = {args .. "e"}
data.forms = {args .. "ēs", args .. "ēst"}
data.forms = {args .. "e"}
data.forms = {args .. "ēm", args .. "ēmēs"}
data.forms = {args .. "ēt"}
data.forms = {args .. "ēn"}
data.forms = {args .. "ēti"}
data.forms = {args .. "ētīs", args .. "ētīst"}
data.forms = {args .. "ēti"}
data.forms = {args .. "ētīm", args .. "ētīmēs"}
data.forms = {args .. "ētīt"}
data.forms = {args .. "ētīn"}
data.forms = {((args.impr or args.mutstem) or args) .. "e"}
data.forms = {args .. "ēt"}
data.forms = {args .. "ēnti"}
data.forms = {args.past_ptc or ("gi" .. args .. "ēt")}
table.insert(data.categories, "Old High German class 3 weak verbs")
end
})
conj_data.irregular = {}
conj_data.irregular = function(data)
data.conj_type = "irregular, ]"
data.forms = {"wesan"}
data.forms = {"bim", "bin"}
data.forms = {"bist", "bis"}
data.forms = {"ist"}
data.forms = {"birum", "birun"}
data.forms = {"birut"}
data.forms = {"sint"}
data.forms = {"was"}
data.forms = {"wāri"}
data.forms = {"was"}
data.forms = {"wārum", "wārumēs"}
data.forms = {"wārut"}
data.forms = {"wārun"}
data.forms = {"sī"}
data.forms = {"sīs", "sīst"}
data.forms = {"sī"}
data.forms = {"sīn"}
data.forms = {"sīt"}
data.forms = {"sīn"}
data.forms = {"wāri"}
data.forms = {"wārīs", "wārīst"}
data.forms = {"wāri"}
data.forms = {"wārīm", "wārīmēs"}
data.forms = {"wārīt"}
data.forms = {"wārīn"}
data.forms = {"wis"}
data.forms = {"wesit"}
data.forms = {"wesanti"}
data.forms = {"giwesan"}
table.insert(data.categories, "Old High German suppletive verbs")
end
local function add_asterisks(forms, data)
for _, form in ipairs(forms) do
for i, subform in ipairs(data.forms) do
data.forms = "*" .. subform
end
end
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 conj_type = (frame.args or parent_args) or "st"
if not conj_data then
error("Unknown conjugation '" .. conj_type .. "'")
end
local data = {forms = {}, categories = {}}
data.head = parent_args or nil
local args = require("Module:parameters").process(parent_args, conj_data.params, true)
-- Override for templates
if not args then
setmetatable(args, {__index = function(self, key)
return "{{{" .. key .. "}}}"
end
})
end
-- Generate the forms
if parent_args.irr then
table.insert(data.categories, "Old High German irregular verbs")
if conj_data.irregular then
conj_data.irregular(data)
else
conj_data(args, data)
end
else
conj_data(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 == "conj_type" then
return data.conj_type
else
return show_form(data.forms)
end
end
local wikicode = [=[
<div class="NavFrame" style="width: 42em">
<div class="NavHead" style="background-color:#93C572;">Conjugation of ''{{{inf}}}'' ({{{conj_type}}})</div>
<div class="NavContent">
{| style="width: 100%; border:1px solid #93C572; line-height: 125%; background-color:#F9F9F9; text-align:center; border: 1px solid #CCCCFF;" cellspacing="1" cellpadding="3" cellspacing="1" class="inflection-table"
|- style="background-color:#F2F2FF;"
|-
! style="background-color:#90EE90;" | infinitive
| colspan="2" style="background-color:#EFEFEF;" | {{{inf}}}
|-
! style="background-color:#93C572;" | ]
! style="background-color:#DEDEEE;" | ]
! style="background-color:#DEDEEE;" | ]
|-
! style="background-color:#90EE90;" | 1st person singular
| style="background-color:#efefff;" | {{{pres_ind_1s}}}
| style="background-color:#efefff;" | {{{past_ind_1s}}}
|-
! style="background-color:#90EE90;" | 2nd person singular
| style="background-color:#efefff;" | {{{pres_ind_2s}}}
| style="background-color:#efefff;" | {{{past_ind_2s}}}
|-
! style="background-color:#90EE90;" | 3rd person singular
| style="background-color:#efefff;" | {{{pres_ind_3s}}}
| style="background-color:#efefff;" | {{{past_ind_3s}}}
|-
! style="background-color:#90EE90;" | 1st person plural
| style="background-color:#efefff;" | {{{pres_ind_1p}}}
| style="background-color:#efefff;" | {{{past_ind_1p}}}
|-
! style="background-color:#90EE90;" | 2nd person plural
| style="background-color:#efefff;" | {{{pres_ind_2p}}}
| style="background-color:#efefff;" | {{{past_ind_2p}}}
|-
! style="background-color:#90EE90;" | 3rd person plural
| style="background-color:#efefff;" | {{{pres_ind_3p}}}
| style="background-color:#efefff;" | {{{past_ind_3p}}}
|-
! style="background-color:#93C572;" | ]
! style="background-color:#eeeede;" | present
! style="background-color:#eeeede;" | past
|-
! style="background-color:#90EE90;" | 1st person singular
| style="background-color:#ffffef;" | {{{pres_sub_1s}}}
| style="background-color:#ffffef;" | {{{past_sub_1s}}}
|-
! style="background-color:#90EE90;" | 2nd person singular
| style="background-color:#ffffef;" | {{{pres_sub_2s}}}
| style="background-color:#ffffef;" | {{{past_sub_2s}}}
|-
! style="background-color:#90EE90;" | 3rd person singular
| style="background-color:#ffffef;" | {{{pres_sub_3s}}}
| style="background-color:#ffffef;" | {{{past_sub_3s}}}
|-
! style="background-color:#90EE90;" | 1st person plural
| style="background-color:#ffffef;" | {{{pres_sub_1p}}}
| style="background-color:#ffffef;" | {{{past_sub_1p}}}
|-
! style="background-color:#90EE90;" | 2nd person plural
| style="background-color:#ffffef;" | {{{pres_sub_2p}}}
| style="background-color:#ffffef;" | {{{past_sub_2p}}}
|-
! style="background-color:#90EE90;" | 3rd person plural
| style="background-color:#ffffef;" | {{{pres_sub_3p}}}
| style="background-color:#ffffef;" | {{{past_sub_3p}}}
|-
! style="background-color:#93C572;" | ]
! style="background-color:#eedede;" | present
! rowspan="3" style="background-color:#e0e0e0;" |
|-
! style="background-color:#90EE90;" | singular
| style="background-color:#ffefef;" | {{{imp_s}}}
|-
! style="background-color:#90EE90;" | plural
| style="background-color:#ffefef;" | {{{imp_p}}}
|-
! style="background-color:#93C572; font-weight:bold;" | ]
! style="background-color:#deeede; font-weight:bold;" | ]
! style="background-color:#deeede; font-weight:bold;" | ]
|-
! style="background-color:#90EE90; font-weight:bold;" |
| style="background-color:#efffef;" | {{{pres_part}}}
| style="background-color:#efffef;" | {{{past_part}}}
|}</div></div>]=]
return (mw.ustring.gsub(wikicode, "{{{(+)}}}", repl)) .. m_utils.format_categories(data.categories, lang)
end
return export