Module:grc-conj
Apparence
Ce module affiche les conjugaisons en grec ancien. Il est appelé par certains Catégorie:Modèles de conjugaison en grec ancien.
-- Module importé de [[:en:Module:grc-conj]]
local m_accent = require("Module:grc-accent")
local export = {}
local conjugations = {}
-- The tense (and system)
local fulltense = ""
-- Simple tense
local tense = ""
local args = {}
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
args = frame:getParent().args
fulltense = args[1] or error("Conjugation type has not been specified. Please pass parameter 1 to the module invocation")
tense = fulltense:sub(1, (fulltense:find("-") or fulltense:len() + 1) - 1)
local data = { forms = {}, title = {}, notes = {} }
if (tense == "pres" or tense == "imperf") and fulltense ~= "pres-irreg" and fulltense ~= "imperf-irreg" then
conjugations["pres"](data)
else
conjugations[fulltense](data)
end
local _, contracted = mw.ustring.find(fulltense, "con")
if fulltense == "fut-ln" then
contracted = true
end
local titleapp = args.titleapp or ""
if contracted then
args.titleapp = "(Contracté) " .. titleapp
end
local out = ""
if not (args["cform"] == "con") then
out = make_table(data)
end
if contracted and not (args["cform"] == "uncon") then
data = { forms = {}, title = {}, notes = {} }
local vowel = "e"
if fulltense ~= "fut-ln" then
vowel = mw.ustring.sub(fulltense, contracted + 2)
end
if vowel == "eta" or vowel == "omega" then
return out
elseif vowel == "a" then
args[2] = args[2] .. "α"
elseif vowel == "e" or vowel == "e-mono" then
args[2] = args[2] .. "ε"
elseif vowel == "o" then
args[2] = args[2] .. "ο"
end
if fulltense == "fut-ln" then
conjugations["fut"](data)
else
fulltense = tense
conjugations["pres"](data)
end
args.titleapp = "(Non contracté) " .. titleapp
out = out .. make_table(data)
end
return out
end
local contr = {
-- "ε" ,"ε" ,"έ" ,"ει","η","ῃ" ,"ο" ,"ο" ,"ό" ,"ου" ,"ω" ,"ώ" ,"οι" ,"οι" ,"οί"
["a"] = { "ᾶ", "ᾱ", "ά", "ᾷ", "ᾶ", "ᾷ", "ῶ", "ω", "ώ", "ῶ", "ῶ", "ώ", "ῷ", "ῳ", "ῴ" },
["eta"] = { "ῆ", "η", "ή", "ῇ", "ῆ", "ῇ", "ῶ", "ω", "ώ", "ῶ", "ῶ", "ώ", "ῷ", "ῳ", "ῴ" },
["e"] = { "εῖ", "ει", "εί", "εῖ", "ῆ", "ῇ", "οῦ", "ου", "ού", "οῦ", "ῶ", "ώ", "οῖ", "οι", "οί" },
["e-mono"] = { "εῖ", "εῖ", "εί", "εῖ", "ῆ", "ῇ", "έο", "εο", "εό", "έου", "έω", "εώ", "έοι", "εοι", "εοί" },
["o"] = { "οῦ", "ου", "ού", "οῖ", "ῶ", "οῖ", "οῦ", "ου", "ού", "οῦ", "ῶ", "ώ", "οῖ", "οι", "οί" },
["omega"] = { "ῶ", "ω", "ώ", "ῷ", "ῶ", "ῷ", "ῶ", "ω", "ώ", "ῶ", "ῶ", "ώ", "ῷ", "ῳ", "ῷ" },
}
local conjs = require("Module:grc-conj/data")
--[[
Conjugation functions
--]]
function addforms(data, ctable, stem)
for code, suffix in pairs(ctable) do
if args[code] then
data.forms[code] = args[code]
else
for i = 1, #stem, 1 do
suffix = mw.ustring.gsub(suffix, i, stem[i])
end
data.forms[code] = suffix
end
end
end
function addforms_futmid(data, ctable, stem)
for codex, suffix in pairs(ctable) do
code = "M" .. string.sub(codex, 2)
if args[code] then
data.forms[code] = args[code]
else
for i = 1, #stem, 1 do
suffix = mw.ustring.gsub(suffix, i, stem[i])
end
data.forms[code] = suffix
end
end
end
function addforms_perfmp(data, ctable, euphon, stem)
for code, suffix in pairs(ctable) do
if args[code] then
data.forms[code] = args[code]
else
for i = 1, #stem, 1 do
suffix = mw.ustring.gsub(suffix, i, stem[i])
end
suffix = mw.ustring.gsub(suffix, "M", euphon[1])
suffix = mw.ustring.gsub(suffix, "S", euphon[2])
suffix = mw.ustring.gsub(suffix, "T", euphon[3])
suffix = mw.ustring.gsub(suffix, "H", euphon[4])
data.forms[code] = suffix
end
end
end
function addforms_contr(data, ctable, vowel, stem, futmid)
for code, suffix in pairs(ctable) do
if futmid and code:sub(1, 1) == "P" then
code = "M" .. code:sub(2)
end
if args[code] then
data.forms[code] = args[code]
else
for i = 1, #stem, 1 do
suffix = mw.ustring.gsub(suffix, i, stem[i])
end
for i, j in ipairs({ "Ê", "E", "É", "Ĵ", "Ĥ", "Ḥ", "Ô", "O", "Ó", "Û", "Ŵ", "Ẃ", "Î", "I", "Í" }) do
suffix = mw.ustring.gsub(suffix, j, contr[vowel][i])
data.forms[code] = suffix
end
end
end
end
function addforms_irreg(data, form)
if form ~= "mp" then
for i, mood in ipairs({ "I", "S", "O", "C" }) do
for j, pers in ipairs({ "1S", "2S", "3S", "2D", "3D", "1P", "2P", "3P" }) do
data.forms["A" .. mood .. pers] = args[1 + (i - 1) * 8 + j]
end
end
data.forms["AI"] = args[34]
data.forms["APM"] = args[35]
data.forms["APF"] = args[36]
data.forms["APN"] = args[37]
end
if form == "am" then
for i, mood in ipairs({ "I", "S", "O", "C" }) do
for j, pers in ipairs({ "1S", "2S", "3S", "2D", "3D", "1P", "2P", "3P" }) do
data.forms["M" .. mood .. pers] = args[37 + (i - 1) * 8 + j]
end
end
data.forms["MI"] = args[70]
data.forms["MPM"] = args[71]
data.forms["MPF"] = args[72]
data.forms["MPN"] = args[73]
end
if form == "mp" then
for i, mood in ipairs({ "I", "S", "O", "C" }) do
for j, pers in ipairs({ "1S", "2S", "3S", "2D", "3D", "1P", "2P", "3P" }) do
data.forms["P" .. mood .. pers] = args[1 + (i - 1) * 8 + j]
end
end
data.forms["PI"] = args[34]
data.forms["PPM"] = args[35]
data.forms["PPF"] = args[36]
data.forms["PPN"] = args[37]
end
end
local pres_index = {
["pres"] = { conjs.pres_act, conjs.pres_mp },
["pres-ami"] = { conjs.pres_ami_act, conjs.pres_ami_mp },
["pres-hmi"] = { conjs.pres_hmi_act, conjs.pres_hmi_mp },
["pres-emi"] = { conjs.pres_emi_act, conjs.pres_emi_mp },
["pres-omi"] = { conjs.pres_omi_act, conjs.pres_omi_mp },
["pres-numi"] = { conjs.pres_numi_act, conjs.pres_numi_mp },
["pres-irregular"] = { {}, {} },
["imperf"] = { conjs.imperf_act, conjs.imperf_mp },
["imperf-ami"] = { conjs.imperf_ami_act, conjs.imperf_ami_mp },
["imperf-hmi"] = { conjs.imperf_hmi_act, conjs.imperf_hmi_mp },
["imperf-emi"] = { conjs.imperf_emi_act, conjs.imperf_emi_mp },
["imperf-omi"] = { conjs.imperf_omi_act, conjs.imperf_omi_mp },
["imperf-numi"] = { conjs.imperf_numi_act, conjs.imperf_numi_mp },
["imperf-irregular"] = { {}, {} },
}
conjugations["pres"] = function(data)
local stem = { m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", ""), m_accent.penult(args[2]) }
if args["prefix"] then
-- 426a: accent cannot precede augment
local root = mw.ustring.sub(stem[2], 1 + mw.ustring.len(args["prefix"]))
stem[3] = args["prefix"] .. m_accent.penult(root)
end
local form = args["form"] or "full"
_, contracted = mw.ustring.find(fulltense, "con")
if contracted then
contracted = mw.ustring.sub(fulltense, contracted + 2)
end
present_system = mw.ustring.find(fulltense, "pres")
if form == "act" or form == "full" then
if contracted then
addforms_contr(data, present_system and conjs.pres_contr_act or conjs.imperf_contr_act, contracted, stem, false)
else
addforms(data, pres_index[fulltense][1], stem)
end
table.insert(data.title, data.forms["AI1S"])
if args["prefix"] then
-- 426d: APN retains accent
local root = mw.ustring.sub(stem[2], 1 + mw.ustring.len(args["prefix"]))
data.forms["APN"] = args["APN"] or (args["prefix"] .. m_accent.penult(root) .. "ον")
end
end
if form == "mp" or form == "full" then
if contracted then
if contracted ~= "e" and j ~= "e-mono" then
conjs.pres_contr_mp["PI2S"] = "2Ĵ"
end
addforms_contr(data, present_system and conjs.pres_contr_mp or conjs.imperf_contr_mp, contracted, stem, false)
else
addforms(data, pres_index[fulltense][2], stem)
end
table.insert(data.title, data.forms["PI1S"])
end
end
conjugations["pres-irreg"] = function(data)
-- εἰμί, εἶμι, ἧμαι
local form = args["form"]
addforms_irreg(data, form)
if form == "act" then
table.insert(data.title, data.forms["AI1S"])
elseif form == "mp" then
table.insert(data.title, data.forms["PI1S"])
end
end
conjugations["imperf-irreg"] = function(data)
-- ἦ, ᾖα, ἥμην
local form = args["form"]
addforms_irreg(data, form)
if form == "act" then
table.insert(data.title, data.forms["AI1S"])
elseif form == "mp" then
table.insert(data.title, data.forms["PI1S"])
end
end
conjugations["fut"] = function(data)
local stem = { m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", ""), m_accent.penult(args[2]) }
local form = args["form"] or "full"
local pstem = {}
if not args[3] then
form = args["form"] or "am"
else
pstem = { mw.ustring.gsub(args[3], "˘", "") .. "ήσ", mw.ustring.gsub(args[3], "˘", "") .. "ησ" }
end
if form == "act" or form == "am" or form == "full" then
addforms(data, conjs.pres_act, stem)
table.insert(data.title, data.forms["AI1S"])
if args["prefix"] then
-- 426d: APN retains accent
local root = mw.ustring.sub(stem[2], 1 + mw.ustring.len(args["prefix"]))
data.forms["APN"] = args["APN"] or (args["prefix"] .. m_accent.penult(root) .. "ον")
end
end
if form ~= "act" and form ~= "pass" then
addforms_futmid(data, conjs.pres_mp, stem)
table.insert(data.title, data.forms["MI1S"])
end
if form == "pass" or form == "mp" or form == "full" then
addforms(data, conjs.pres_mp, pstem)
table.insert(data.title, data.forms["PI1S"])
end
end
conjugations["fut-ln"] = function(data)
local stem = { m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", "") }
local form = args["form"] or "full"
local pstem = {}
if not args[3] then
form = args["form"] or "am"
else
pstem = { mw.ustring.gsub(args[3], "˘", "") .. "ήσ", mw.ustring.gsub(args[3], "˘", "") .. "ησ" }
end
if form == "act" or form == "am" or form == "full" then
addforms_contr(data, conjs.pres_contr_act, "e", stem, false)
table.insert(data.title, data.forms["AI1S"])
end
if form ~= "act" and form ~= "pass" then
addforms_contr(data, conjs.pres_contr_mp, "e", stem, true)
table.insert(data.title, data.forms["MI1S"])
end
if form == "pass" or form == "mp" or form == "full" then
addforms(data, conjs.pres_mp, pstem)
table.insert(data.title, data.forms["PI1S"])
end
data.notes[""] = "Ce modèle d'inflexion comportait originellement un sigma (i.e. *" .. stem[2] .. "έσω), qui a été abandonné très tôt dans l'histoire du grec ancien."
end
conjugations["aor-1"] = function(data)
local stem = { m_accent.penult(args[2]), m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", ""), m_accent.ult(args[3]), mw.ustring.gsub(args[3], "˘", ""), m_accent.penult(args[3]), m_accent.circ(args[3]) }
if args["prefix"] then
-- 426a: accent cannot precede augment
local root = mw.ustring.sub(stem[3], 1 + mw.ustring.len(args["prefix"]))
stem[1] = args["prefix"] .. m_accent.penult(root)
end
local form = args["form"] or "full"
local pstem = {}
if not args[4] then
form = args["form"] or "am"
else
pstem = { m_accent.ult(args[4]), mw.ustring.gsub(args[4], "˘", ""), mw.ustring.gsub(args[5], "˘", ""), m_accent.ult(args[5]) }
end
local mono = (stem[4] == stem[5])
if form == "act" or form == "am" or form == "full" then
addforms(data, (mono and conjs.aor_1m_act or conjs.aor_1_act), stem)
table.insert(data.title, data.forms["AI1S"])
if args["prefix"] then
-- 426d: APN retains accent
local root = mw.ustring.sub(stem[2], 1 + mw.ustring.len(args["prefix"]))
data.forms["APN"] = args["APN"] or (args["prefix"] .. m_accent.penult(root) .. "ᾰν")
end
end
if form ~= "act" and form ~= "pass" then
addforms(data, (mono and conjs.aor_1m_mid or conjs.aor_1_mid), stem)
table.insert(data.title, data.forms["MI1S"])
end
if form == "pass" or form == "mp" or form == "full" then
addforms(data, conjs.aor_pass, pstem)
if (not args["PC2S"]) and mw.ustring.sub(data.forms["PC2S"], -4, -4) == "θ" then
data.forms["PC2S"] = pstem[4] .. "ητῐ"
end
table.insert(data.title, data.forms["PI1S"])
end
end
conjugations["aor-2"] = function(data)
local stem = { m_accent.penult(args[2]), m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", ""), m_accent.ult(args[3]), mw.ustring.gsub(args[3], "˘", ""), m_accent.penult(args[3]), m_accent.circ(args[3]) }
if args["prefix"] then
-- 426a: accent cannot precede augment
local root = mw.ustring.sub(stem[3], 1 + mw.ustring.len(args["prefix"]))
stem[1] = args["prefix"] .. m_accent.penult(root)
end
local form = args["form"] or "full"
local pstem = {}
if not args[4] then
form = args["form"] or "am"
else
pstem = { m_accent.ult(args[4]), mw.ustring.gsub(args[4], "˘", ""), mw.ustring.gsub(args[5], "˘", ""), m_accent.ult(args[5]) }
end
local mono = (stem[4] == stem[5])
if form == "act" or form == "am" or form == "full" then
addforms(data, (mono and conjs.aor_2m_act or conjs.aor_2_act), stem)
table.insert(data.title, data.forms["AI1S"])
end
if form ~= "act" and form ~= "pass" then
addforms(data, (mono and conjs.aor_2m_mid or conjs.aor_2_mid), stem)
table.insert(data.title, data.forms["MI1S"])
end
if form == "pass" or form == "mp" or form == "full" then
addforms(data, conjs.aor_pass, pstem)
if (not args["PC2S"]) and mw.ustring.sub(data.forms["PC2S"], -4, -4) == "θ" then
data.forms["PC2S"] = pstem[4] .. "ητῐ"
end
table.insert(data.title, data.forms["PI1S"])
end
end
conjugations["aor-ami"] = function(data)
local stem = { m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", ""), m_accent.ult(args[3]), mw.ustring.gsub(args[3], "˘", "") }
local form = args["form"] or "full"
local pstem = {}
if not args[4] then
form = args["form"] or "am"
else
pstem = { m_accent.ult(args[4]), mw.ustring.gsub(args[4], "˘", ""), mw.ustring.gsub(args[5], "˘", ""), m_accent.ult(args[5]) }
end
local mono = (stem[3] == stem[4])
if form == "act" or form == "am" or form == "full" then
addforms(data, (mono and conjs.aor_amim_act or conjs.aor_ami_act), stem)
table.insert(data.title, data.forms["AI1S"])
end
if form ~= "act" and form ~= "pass" then
addforms(data, (mono and conjs.aor_amim_mid or conjs.aor_ami_mid), stem)
table.insert(data.title, data.forms["MI1S"])
end
if form == "pass" or form == "mp" or form == "full" then
addforms(data, conjs.aor_pass, pstem)
if (not args["PC2S"]) and mw.ustring.sub(data.forms["PC2S"], -4, -4) == "θ" then
data.forms["PC2S"] = pstem[4] .. "ητῐ"
end
table.insert(data.title, data.forms["PI1S"])
end
end
conjugations["aor-hmi"] = function(data)
local stem = { m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", ""), m_accent.ult(args[3]), mw.ustring.gsub(args[3], "˘", "") }
addforms(data, conjs.aor_hmim_mid, stem)
table.insert(data.title, data.forms["MI1S"])
end
conjugations["aor-emi"] = function(data)
local stem = { m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", ""), m_accent.ult(args[3]), mw.ustring.gsub(args[3], "˘", "") }
local form = args["form"] or "full"
local pstem = {}
if not args[4] then
form = args["form"] or "am"
else
pstem = { m_accent.ult(args[4]), mw.ustring.gsub(args[4], "˘", ""), mw.ustring.gsub(args[5], "˘", ""), m_accent.ult(args[5]) }
end
if form == "act" or form == "am" or form == "full" then
addforms(data, conjs.aor_emi_act, stem)
table.insert(data.title, data.forms["AI2D"])
end
if form ~= "act" and form ~= "pass" then
addforms(data, conjs.aor_emi_mid, stem)
table.insert(data.title, data.forms["MI1S"])
end
if form == "pass" or form == "mp" or form == "full" then
addforms(data, conjs.aor_pass, pstem)
if (not args["PC2S"]) and mw.ustring.sub(data.forms["PC2S"], -4, -4) == "θ" then
data.forms["PC2S"] = pstem[4] .. "ητῐ"
end
table.insert(data.title, data.forms["PI1S"])
end
end
conjugations["aor-omi"] = function(data)
local stem = { m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", ""), m_accent.ult(args[3]), mw.ustring.gsub(args[3], "˘", "") }
local form = args["form"] or "full"
local pstem = {}
if not args[4] then
form = args["form"] or "am"
else
pstem = { m_accent.ult(args[4]), mw.ustring.gsub(args[4], "˘", ""), mw.ustring.gsub(args[5], "˘", ""), m_accent.ult(args[5]) }
end
local mono = (stem[3] == stem[4])
if form == "act" or form == "am" or form == "full" then
addforms(data, (mono and conjs.aor_omim_act or conjs.aor_omi_act), stem)
table.insert(data.title, data.forms["AI2D"])
end
if form ~= "act" and form ~= "pass" then
addforms(data, (mono and conjs.aor_omim_mid or conjs.aor_omi_mid), stem)
table.insert(data.title, data.forms["MI1S"])
end
if form == "pass" or form == "mp" or form == "full" then
addforms(data, conjs.aor_pass, pstem)
if (not args["PC2S"]) and mw.ustring.sub(data.forms["PC2S"], -4, -4) == "θ" then
data.forms["PC2S"] = pstem[4] .. "ητῐ"
end
table.insert(data.title, data.forms["PI1S"])
end
end
conjugations["aor-wmi"] = function(data)
local stem = { m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", ""), m_accent.ult(args[3]), mw.ustring.gsub(args[3], "˘", "") }
addforms(data, conjs.aor_wmim_act, stem)
table.insert(data.title, data.forms["AI1S"])
end
conjugations["aor-numi"] = function(data)
local stem = { m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", ""), mw.ustring.gsub(args[3], "˘", "") }
addforms(data, conjs.aor_numim_act, stem)
table.insert(data.title, data.forms["AI1S"])
end
conjugations["aor-irreg"] = function(data)
-- εἷτον (ἵημι)
local form = args["form"]
addforms_irreg(data, form)
table.insert(data.title, data.forms["AI2D"])
table.insert(data.title, data.forms["MI1S"])
end
conjugations["aor-hiemi-comp"] = function(data)
local stem = { m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", ""), m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", "") }
local form = args["form"] or "full"
local pstem = {}
if not args[3] then
form = args["form"] or "am"
else
pstem = { m_accent.ult(args[3]), mw.ustring.gsub(args[3], "˘", ""), mw.ustring.gsub(args[4], "˘", ""), m_accent.ult(args[4]) }
end
if form == "act" or form == "am" or form == "full" then
addforms(data, conjs.aor_hiemic_act, stem)
table.insert(data.title, data.forms["AI2D"])
end
if form ~= "act" and form ~= "pass" then
addforms(data, conjs.aor_hiemic_mid, stem)
table.insert(data.title, data.forms["MI1S"])
end
if form == "pass" or form == "mp" or form == "full" then
addforms(data, conjs.aor_pass, pstem)
if (not args["PC2S"]) and mw.ustring.sub(data.forms["PC2S"], -4, -4) == "θ" then
data.forms["PC2S"] = pstem[4] .. "ητῐ"
end
table.insert(data.title, data.forms["PI1S"])
end
end
conjugations["perf-ami"] = function(data)
local stem = { m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", "") }
addforms(data, conjs.perf_ami_act, stem)
table.insert(data.title, data.forms["AI2D"])
end
conjugations["perf"] = function(data)
local stem = { m_accent.penult(args[2]), m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", "") }
if args["prefix"] then
-- 426a: accent cannot precede reduplication
local root = mw.ustring.sub(stem[3], 1 + mw.ustring.len(args["prefix"]))
stem[1] = args["prefix"] .. m_accent.penult(root)
end
local form = args["form"] or "full"
local pstem = {}
local ctable
if not args[3] then
form = "act"
else
local pass = mw.ustring.sub(args[3], 1, -2)
local final = mw.ustring.sub(args[3], -1, -1)
if final == "π" or final == "β" or final == "φ" then
if mw.ustring.sub(args[3], -2, -2) == "μ" then
ctable = { "μμ", "μψ", "μπτ", "μφθ" }
pass = mw.ustring.sub(args[3], 1, -3)
else
ctable = { "μμ", "ψ", "πτ", "φθ" }
end
elseif final == "τ" or final == "δ" or final == "θ" or final == "σ" then
ctable = { "σμ", "σ", "στ", "σθ" }
elseif final == "κ" or final == "γ" or final == "χ" then
if mw.ustring.sub(args[3], -2, -2) == "γ" then
ctable = { "γμ", "γξ", "γκτ", "γχθ" }
pass = mw.ustring.sub(args[3], 1, -3)
else
ctable = { "γμ", "ξ", "κτ", "χθ" }
end
elseif final == "ν" then
ctable = { "σμ", "νσ", "ντ", "νθ" }
elseif final == "λ" or final == "ρ" then
ctable = { "μ", "σ", "τ", "θ" }
pass = args[3]
else
pass = args[3]
conjs.perf_mp["PI3P"] = "1νται"
ctable = { "μ", "σ", "τ", "σθ" }
end
pstem = { m_accent.penult(pass), m_accent.ult(pass), mw.ustring.gsub(pass, "˘", ""), m_accent.circ(pass) }
if args["prefix"] then
-- 426a: accent cannot precede reduplication
local root = mw.ustring.sub(pstem[3], 1 + mw.ustring.len(args["prefix"]))
pstem[1] = args["prefix"] .. m_accent.penult(root)
end
end
if form == "act" or form == "full" then
addforms(data, conjs.perf_act, stem)
table.insert(data.title, data.forms["AI1S"])
end
if form == "mp" or form == "full" then
addforms_perfmp(data, conjs.perf_mp, ctable, pstem)
table.insert(data.title, data.forms["PI1S"])
end
end
conjugations["perf-irreg"] = function(data)
-- οἶδα
local form = args["form"]
addforms_irreg(data, form)
table.insert(data.title, data.forms["AI1S"])
end
conjugations["plup-ami"] = function(data)
local stem = { m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", "") }
addforms(data, conjs.plup_ami_act, stem)
table.insert(data.title, data.forms["AI2D"])
end
conjugations["plup"] = function(data)
local stem = { m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", "") }
local form = args["form"] or "full"
local pstem = {}
local ctable
if not args[3] then
form = "act"
else
args[4] = args[4] or ""
local pass = mw.ustring.sub(args[3], 1, -2)
local ppass = mw.ustring.sub(args[4], 1, -2)
local final = mw.ustring.sub(args[3], -1, -1)
if final == "π" or final == "β" or final == "φ" then
if mw.ustring.sub(args[3], -2, -2) == "μ" then
ctable = { "μμ", "μψ", "μπτ", "μφθ" }
pass = mw.ustring.sub(args[3], 1, -3)
ppass = mw.ustring.sub(args[4], 1, -3)
else
ctable = { "μμ", "ψ", "πτ", "φθ" }
end
elseif final == "τ" or final == "δ" or final == "θ" or final == "σ" then
ctable = { "σμ", "σ", "στ", "σθ" }
elseif final == "κ" or final == "γ" or final == "χ" then
if mw.ustring.sub(args[3], -2, -2) == "γ" then
ctable = { "γμ", "γξ", "γκτ", "γχθ" }
pass = mw.ustring.sub(args[3], 1, -3)
ppass = mw.ustring.sub(args[4], 1, -3)
else
ctable = { "γμ", "ξ", "κτ", "χθ" }
end
elseif final == "ν" then
ctable = { "σμ", "νσ", "ντ", "νθ" }
elseif final == "λ" or final == "ρ" then
ctable = { "μ", "σ", "τ", "θ" }
pass = args[3]
ppass = args[4]
else
pass = args[3]
ppass = args[4]
conjs.plup_mp["PI3P"] = "2ντο"
ctable = { "μ", "σ", "τ", "σθ" }
end
pstem = { m_accent.ult(pass), m_accent.penult(pass), mw.ustring.gsub(ppass, "˘", "") }
if args["prefix"] then
-- 426a: accent cannot precede reduplication
local root = mw.ustring.sub(mw.ustring.gsub(pass), 1 + mw.ustring.len(args["prefix"]))
pstem[2] = args["prefix"] .. m_accent.penult(root)
end
end
if form == "act" or form == "full" then
addforms(data, conjs.plup_act, stem)
table.insert(data.title, data.forms["AI1S"])
end
if form == "mp" or form == "full" then
addforms_perfmp(data, conjs.plup_mp, ctable, pstem)
table.insert(data.title, data.forms["PI1S"])
end
end
conjugations["plup-irreg"] = function(data)
-- ᾔδη (οἶδα)
local form = args["form"]
addforms_irreg(data, form)
table.insert(data.title, data.forms["AI1S"])
end
conjugations["futp"] = function(data)
local form = args["form"] or "mp"
local stem = { m_accent.ult(args[2]), mw.ustring.gsub(args[2], "˘", ""), m_accent.penult(args[2]) }
if form == "act" or form == "full" then
addforms(data, conjs.pres_act, stem)
table.insert(data.title, data.forms["AI1S"])
end
if form == "mp" or form == "full" then
addforms(data, conjs.pres_mp, stem)
table.insert(data.title, data.forms["PI1S"])
end
end
local tenses = {
["pres"] = "Présent",
["imperf"] = "Imparfait",
["fut"] = "Futur",
["aor"] = "Aoriste",
["perf"] = "Parfait",
["plup"] = "Plus-que-parfait",
["futp"] = "Futur antérieur",
}
local colors = {
["pres"] = "c0cfe4",
["imperf"] = "c0e4c0",
["fut"] = "e4d4c0",
["aor"] = "c0cfe4",
["perf"] = "c0e4c0",
["plup"] = "e4d4c0",
["futp"] = "c0cfe4",
}
local moods = {
["pres"] = { "indicatif", "subjonctif", "optatif", "impératif" },
["imperf"] = { "indicatif" },
["fut"] = { "indicatif", "optatif" },
["aor"] = { "indicatif", "subjonctif", "optatif", "impératif" },
["perf"] = { "indicatif", "subjonctif", "optatif", "impératif" },
["plup"] = { "indicatif" },
["futp"] = { "indicatif", "optatif" },
["indicatif"] = "I",
["subjonctif"] = "S",
["optatif"] = "O",
["impératif"] = "C",
}
-- Functions for generating the inflection table
-- Make the table
function make_table(data)
return [=[<div class="NavFrame">
<div class="NavHead"> ]=] .. tenses[tense] .. " : " .. table.concat(data.title, ", ") .. [=[</div>
<div class="NavContent">
{| class="wikitable centre" style="background:#F0F0F0"
|-
! colspan="2" rowspan="1" style="background:#C0C0C0" | nombre
! colspan="3" style="background:#C0C0C0" | singulier
! colspan="2" style="background:#C0C0C0" | duel
! colspan="3" style="background:#C0C0C0" | pluriel
]=] .. make_num_header(data) .. make_rows(data) .. make_voice_header(data) .. make_nonfin_forms(data) .. [=[|-
| colspan="10" | ]=] .. format_notes(data) .. [=[
|}
</div></div>]=]
end
function link_form(data, form)
local q = data.forms[form]
if not q then
return "| \n"
end
local s = {}
for word in mw.ustring.gmatch(q, "[^/]+") do
-- split the word by "/"
local link = "[[" .. word .. "#grc|" .. word .. "]]"
table.insert(s, link .. "<sup>" .. (data.forms[form .. 'N'] or "") .. "</sup>")
end
return "| " .. table.concat(s, "/<br>") .. "\n"
end
function make_num_header()
local s = "|-\n! style=\"background:#" .. colors[tense] .. "\" colspan=\"2\" |\n"
for _, num in ipairs({ "première", "deuxième", "troisième", "deuxième", "troisième", "première", "deuxième", "troisième" }) do
s = s .. "! style=\"background:#" .. colors[tense] .. ";width:12.5%\" |" .. num .. "\n"
end
return s
end
function make_rows(data)
local s = ""
local lmoods = args["indonly"] and { "indicatif" } or moods[tense]
if data.forms["AI1S"] then
s = s .. "|-\n! rowspan=\"" .. #lmoods .. "\" style=\"background:#" .. colors[tense] .. "\" | actif\n\n"
for i, mood in ipairs(lmoods) do
if i ~= 1 then
s = s .. "|-\n"
end
s = s .. "! style=\"height:3em;background:#" .. colors[tense] .. "\" | " .. mood .. "\n"
for _, j in ipairs({ "1S", "2S", "3S", "2D", "3D", "1P", "2P", "3P" }) do
s = s .. link_form(data, "A" .. moods[mood] .. j)
end
end
end
if data.forms["MI1S"] then
s = s .. "|-\n! rowspan=\"" .. #lmoods .. "\" style=\"background:#" .. colors[tense] .. "\" | moyen\n\n"
for i, mood in ipairs(lmoods) do
if i ~= 1 then
s = s .. "|-\n"
end
s = s .. "! style=\"height:3em;background:#" .. colors[tense] .. "\" | " .. mood .. "\n"
for _, j in ipairs({ "1S", "2S", "3S", "2D", "3D", "1P", "2P", "3P" }) do
s = s .. link_form(data, "M" .. moods[mood] .. j)
end
end
end
if data.forms["PI1S"] and tense ~= "fut" and tense ~= "aor" then
s = s .. "|-\n! rowspan=\"" .. #lmoods .. "\" style=\"background:#" .. colors[tense] .. "\" | moyen/<br>passif\n\n"
for i, mood in ipairs(lmoods) do
if i ~= 1 then
s = s .. "|-\n"
end
s = s .. "! style=\"height:3em;background:#" .. colors[tense] .. "\" | " .. mood .. "\n"
for _, j in ipairs({ "1S", "2S", "3S", "2D", "3D", "1P", "2P", "3P" }) do
s = s .. link_form(data, "P" .. moods[mood] .. j)
end
end
end
if data.forms["PI1S"] and (tense == "fut" or tense == "aor") then
s = s .. "|-\n! rowspan=\"" .. #lmoods .. "\" style=\"background:#" .. colors[tense] .. "\" | passif\n\n"
for i, mood in ipairs(lmoods) do
if i ~= 1 then
s = s .. "|-\n"
end
s = s .. "! style=\"height:3em;background:#" .. colors[tense] .. "\" | " .. mood .. "\n"
for _, j in ipairs({ "1S", "2S", "3S", "2D", "3D", "1P", "2P", "3P" }) do
s = s .. link_form(data, "P" .. moods[mood] .. j)
end
end
end
return s
end
function make_voice_header(data)
local s = ""
if tense == "imperf" or tense == "plup" or args["indonly"] then
return s
end
s = "|-\n! style=\"background:#" .. colors[tense] .. "\" colspan=\"2\" |\n"
if tense == "fut" or tense == "aor" then
s = s .. "! style=\"background:#" .. colors[tense] .. "\" colspan=\"3\" | " .. (data.forms["AI"] and "actif\n" or "\n")
s = s .. "! style=\"background:#" .. colors[tense] .. "\" colspan=\"2\" | " .. (data.forms["MI"] and "moyen\n" or "\n")
s = s .. "! style=\"background:#" .. colors[tense] .. "\" colspan=\"3\" | " .. (data.forms["PI"] and "passif\n" or "\n")
else
s = s .. "! style=\"background:#" .. colors[tense] .. "\" colspan=\"4\" | " .. (data.forms["AI"] and "actif\n" or "\n")
s = s .. "! style=\"background:#" .. colors[tense] .. "\" colspan=\"4\" | " .. (data.forms["PI"] and "moyen/passif\n" or "\n")
end
return s
end
function make_nonfin_forms(data)
if tense == "imperf" or tense == "plup" or args["indonly"] then
return ""
end
local s = "|-\n! style=\"background:#" .. colors[tense] .. "\" colspan=\"2\" | infinitif\n"
local flag = (tense == "fut" or tense == "aor")
s = s .. "| colspan=\"" .. (flag and 3 or 4) .. "\" " .. link_form(data, "AI")
if flag then
s = s .. "| colspan=\"2\" " .. link_form(data, "MI")
end
s = s .. "| colspan=\"" .. (flag and 3 or 4) .. "\" " .. link_form(data, "PI")
s = s .. "|-\n! rowspan=\"3\" style=\"background:#" .. colors[tense] .. "\" | participe\n"
for _, gender in ipairs({ "m", "f", "n" }) do
if gender ~= "m" then
s = s .. "|-\n"
end
s = s .. "! style=\"background:#" .. colors[tense] .. "\" | " .. gender .. "\n"
s = s .. "| colspan=\"" .. (flag and 3 or 4) .. "\" " .. link_form(data, "AP" .. string.upper(gender))
if flag then
s = s .. "| colspan=\"2\" " .. link_form(data, "MP" .. string.upper(gender))
end
s = s .. "| colspan=\"" .. (flag and 3 or 4) .. "\" " .. link_form(data, "PP" .. string.upper(gender))
end
return s
end
function format_notes(data)
s = "Ces tables de conjugaison devraient être considérées comme un guide. Toutes les formes qu'elles contiennent ne sont pas nécessairement attestées, et les formes peuvent varier significativement selon les dialectes.<br />"
for i, note in pairs(data.notes) do
s = s .. "<br /><sup>" .. i .. "</sup>" .. note
end
return s
end
return export