-- Lumbaieric verb module
local p = {}
----------------------------------------------------------------
-- ENDINGS
----------------------------------------------------------------
local endings = {
pres_part = "nō",
past_part = "ar",
pres_1s = "a",
pres_2s = "at",
pres_3s = "ahþ",
pres_1p = "a",
pres_2p = "ata",
pres_3p = "ahþa",
imperf_1s = "īz",
imperf_2s = "iz",
imperf_3s = "enþ",
imperf_1p = "īza",
imperf_2p = "iza",
imperf_3p = "enþa",
past_1s = "ir",
past_2s = "int",
past_3s = "iþ",
past_1p = "ira",
past_2p = "inta",
past_3p = "iþa",
fut_1s = "ōna",
fut_2s = "ōnt",
fut_3s = "ōnahþ",
fut_1p = "ōnha",
fut_2p = "ōnta",
fut_3p = "őnahþa",
Spres_1s = "er",
Spres_2s = "īt",
Spres_3s = "jōt",
Spres_1p = "era",
Spres_2p = "īta",
Spres_3p = "jōta",
Simperf_1s = "au",
Simperf_2s = "ōfla",
Simperf_3s = "in",
Simperf_1p = "awa",
Simperf_2p = "ōfla",
Simperf_3p = "ina",
IMP_2s = "s",
IMP_3s = "erþ",
IMP_2p = "sa",
IMP_3p = "erþa",
}
----------------------------------------------------------------
-- IRREGULAR VERBS
----------------------------------------------------------------
local irregulars = {
[""] = {
}
}
----------------------------------------------------------------
-- STEM
----------------------------------------------------------------
local function get_stem(title)
return mw.ustring.gsub(title, "ana$", "")
end
----------------------------------------------------------------
-- DISPLAY HELPERS
----------------------------------------------------------------
local function make_cell(form, prefix)
if not form then return "—" end
if prefix then form = prefix .. " " .. form end
return "<div style='text-align:center;'>"
.. "[[Contionary:" .. form .. "|" .. form .. "]]"
.. "</div>"
end
local function make_pronoun(text)
return text
end
local function empty_cell()
return "<div style='text-align:center;'>—</div>"
end
----------------------------------------------------------------
-- COMBINE
----------------------------------------------------------------
local function combine(stem, ending)
local form = stem .. ending
----------------------------------------------------------------
-- PHONOLOGICAL RULES
----------------------------------------------------------------
-- double h is simplified to single h
form = mw.ustring.gsub(form, "hh", "h")
-- double j is simplified to single j
form = mw.ustring.gsub(form, "jj", "j")
-- <iji> is simplified to <ī>
form = mw.ustring.gsub(form, "ij[iī]", "ī")
return form
end
----------------------------------------------------------------
-- MAIN FUNCTION
----------------------------------------------------------------
function p.show(frame)
local args = frame:getParent().args
local title = mw.title.getCurrentTitle().text
local stem = get_stem(title)
local use_oi = (args.oi and args.oi ~= "" and args.oi ~= "0")
local forms = {}
for slot, ending in pairs(endings) do
if args[slot] and args[slot] ~= "" then
forms[slot] = args[slot]
elseif irregulars[title] and irregulars[title][slot] then
forms[slot] = irregulars[title][slot]
else
local currentStem = stem
-- STEM ALTERNATION
if use_oi then
local oi_slots = {
pres_1s = true,
pres_2s = true,
pres_3s = true,
imperf_3s = true,
past_1s = true,
past_2s = true,
past_3s = true,
Simperf_2s = true,
IMP_2s = true
}
if oi_slots[slot] then
currentStem = mw.ustring.gsub(currentStem, "e", "oi")
end
end
forms[slot] = combine(currentStem, ending)
end
end
----------------------------------------------------------------
-- TABLE OUTPUT
----------------------------------------------------------------
local t = {}
table.insert(t,
'{| class="wikitable mw-collapsible mw-collapsed"\n'
.. '|+ Conjugation of [[Contionary:' .. title .. '|' .. title .. ']]\n'
)
table.insert(t,
'|-\n'
.. '! colspan="5" style="background:#ebe8b9;" | Infinitive\n'
.. '| colspan="3" | ' .. make_cell(title) .. '\n'
)
table.insert(t,
'|-\n'
.. '! colspan="5" style="background:#ebe8b9;" | Present Participle\n'
.. '| colspan="3" | ' .. make_cell(forms.pres_part or "—") .. '\n'
)
table.insert(t,
'|-\n'
.. '! colspan="5" style="background:#ebe8b9;" | Past Participle\n'
.. '| colspan="3" | ' .. make_cell(forms.past_part or "—") .. '\n'
)
table.insert(t,
'|-\n'
.. '! colspan="2" rowspan="2" style="background:#cfcfcf;" | !! colspan="3" style="background:#cfcfcf;" | Singular !! colspan="3" style="background:#cfcfcf;" | Plural\n'
)
table.insert(t,
'|-\n'
.. '! style="background:#cfcfcf;" | 1st !! style="background:#cfcfcf;" | 2nd !! style="background:#cfcfcf;" | 3rd !! style="background:#cfcfcf;" | 1st !! style="background:#cfcfcf;" | 2nd !! style="background:#cfcfcf;" | 3rd\n'
)
table.insert(t,
'|-\n'
.. '! rowspan="5" style="background:#bbd0fa;" | Indicative\n'
.. '! \n'
.. '! ' .. make_pronoun("vie")
.. ' !! ' .. make_pronoun("tife")
.. ' !! ' .. make_pronoun("vois/liv/ceu")
.. ' !! ' .. make_pronoun("vié")
.. ' !! ' .. make_pronoun("tifée")
.. ' !! ' .. make_pronoun("voise")
.. '\n'
)
table.insert(t,
'|-\n'
.. '! Present\n'
.. '| ' .. make_cell(forms.pres_1s)
.. ' || ' .. make_cell(forms.pres_2s)
.. ' || ' .. make_cell(forms.pres_3s)
.. ' || ' .. make_cell(forms.pres_1p)
.. ' || ' .. make_cell(forms.pres_2p)
.. ' || ' .. make_cell(forms.pres_3p)
.. '\n'
)
table.insert(t,
'|-\n'
.. '! Imperfect\n'
.. '| ' .. make_cell(forms.imperf_1s)
.. ' || ' .. make_cell(forms.imperf_2s)
.. ' || ' .. make_cell(forms.imperf_3s)
.. ' || ' .. make_cell(forms.imperf_1p)
.. ' || ' .. make_cell(forms.imperf_2p)
.. ' || ' .. make_cell(forms.imperf_3p)
.. '\n'
)
table.insert(t,
'|-\n'
.. '! Past\n'
.. '| ' .. make_cell(forms.past_1s)
.. ' || ' .. make_cell(forms.past_2s)
.. ' || ' .. make_cell(forms.past_3s)
.. ' || ' .. make_cell(forms.past_1p)
.. ' || ' .. make_cell(forms.past_2p)
.. ' || ' .. make_cell(forms.past_3p)
.. '\n'
)
table.insert(t,
'|-\n'
.. '! Future\n'
.. '| ' .. make_cell(forms.fut_1s)
.. ' || ' .. make_cell(forms.fut_2s)
.. ' || ' .. make_cell(forms.fut_3s)
.. ' || ' .. make_cell(forms.fut_1p)
.. ' || ' .. make_cell(forms.fut_2p)
.. ' || ' .. make_cell(forms.fut_3p)
.. '\n'
.. '|-\n'
.. '| colspan="8" style="background:#cfcfcf; height:6px; padding:0;" | \n'
)
table.insert(t,
'|-\n'
.. '! rowspan="3" style="background:#b3da9d;" | Subjunctive\n'
.. '! \n'
.. '! ' .. make_pronoun("vie")
.. ' !! ' .. make_pronoun("tife")
.. ' !! ' .. make_pronoun("vois/liv/ceu")
.. ' !! ' .. make_pronoun("vié")
.. ' !! ' .. make_pronoun("tifée")
.. ' !! ' .. make_pronoun("voise")
.. '\n'
)
table.insert(t,
'|-\n'
.. '! Present\n'
.. '| ' .. make_cell(forms.Spres_1s)
.. ' || ' .. make_cell(forms.Spres_2s)
.. ' || ' .. make_cell(forms.Spres_3s)
.. ' || ' .. make_cell(forms.Spres_1p)
.. ' || ' .. make_cell(forms.Spres_2p)
.. ' || ' .. make_cell(forms.Spres_3p)
.. '\n'
)
table.insert(t,
'|-\n'
.. '! Imperfect\n'
.. '| ' .. make_cell(forms.Simperf_1s)
.. ' || ' .. make_cell(forms.Simperf_2s)
.. ' || ' .. make_cell(forms.Simperf_3s)
.. ' || ' .. make_cell(forms.Simperf_1p)
.. ' || ' .. make_cell(forms.Simperf_2p)
.. ' || ' .. make_cell(forms.Simperf_3p)
.. '\n'
.. '|-\n'
.. '| colspan="8" style="background:#cfcfcf; height:6px; padding:0;" | \n'
)
table.insert(t,
'|-\n'
.. '! rowspan="3" style="background:#e8cc8f;" | Imperative\n'
.. '! \n'
.. '! —'
.. ' !! ' .. make_pronoun("tife")
.. ' !! —'
.. ' !! ' .. make_pronoun("vié")
.. ' !! ' .. make_pronoun("tifée")
.. ' !! —'
.. '\n'
)
table.insert(t,
'|-\n'
.. '! Affirmative\n'
.. '| ' .. empty_cell()
.. ' || ' .. make_cell(forms.IMP_2s)
.. ' || ' .. make_cell(forms.IMP_3s)
.. ' || ' .. empty_cell()
.. ' || ' .. make_cell(forms.IMP_2p)
.. ' || ' .. make_cell(forms.IMP_3p)
.. '\n'
)
table.insert(t,
'|-\n'
.. '! Negative\n'
.. '| ' .. empty_cell()
.. ' || ' .. make_cell(forms.IMP_2s, "ne")
.. ' || ' .. make_cell(forms.IMP_3s, "ne")
.. ' || ' .. empty_cell()
.. ' || ' .. make_cell(forms.IMP_2p, "ne")
.. ' || ' .. make_cell(forms.IMP_3p, "ne")
.. '\n'
)
table.insert(t, '|}')
return table.concat(t)
end
return p