-- Exemple d'utilisation
--
{{#invoke:el-décl-nom|ouranos|αριθμ}}
-- Principe: les déclinaisons régulières ont besoin de connaître: -- * le radical avec son accent premier (désinences courtes) -- * le radical avec l'accent sur la dernière syllabe (désinence longue) -- * le radical sans accent (désinence très longue) -- Le premier vient du titre de la page, le troisième est obtenu par simple remplacement -- le second se fait par remplacement. -- -- Librement inspiré de el:Module:el-nouns-decl
--
local p = {}
-- Fonction auxiliaire pour faire les lignes du tableau.
function ligne_tableau(cas, as, ms, ap, mp, ms2, mp2)
local ligne = "|-"
ligne = ligne .. "\r\n! " .. cas
ligne = ligne .. '\r\n| class="colle-droite" | '
if as ~= nil then
ligne = ligne .. '<span lang="el" class="lang-el">' .. as .. ' </span>'
end
ligne = ligne .. '\r\n| class="colle-gauche" | ]'
if ms2 ~= nil then
ligne = ligne .. '<br />]'
end
ligne = ligne .. '\r\n| class="colle-droite" | '
if ap ~= nil then
ligne = ligne .. '<span lang="el" class="lang-el">' .. ap .. ' </span>'
end
ligne = ligne .. '\r\n| class="colle-gauche" | ]'
if mp2 ~= nil then
ligne = ligne .. '<br />]'
end
return ligne .. "\r\n"
end
-- Fonction de formatage principale. Les arguments sont des tables comportant
-- des champs ns/as/gs/vs et np/ap/gp/vp pour les différents cas.
function fait_tableau(art, mots, mots2)
local tableau = [==[
{| class="flextable"
! Cas
! colspan="2" | Singulier
! colspan="2" | Pluriel
]==]
tableau = tableau .. ligne_tableau("Nominatif", art.ns, mots.ns, art.np, mots.np, mots2.ns, mots2.np)
tableau = tableau .. ligne_tableau("Génitif", art.gs, mots.gs, art.gp, mots.gp, mots2.gs, mots2.gp)
tableau = tableau .. ligne_tableau("Accusatif", art.as, mots.as, art.ap, mots.ap, mots2.as, mots2.ap)
tableau = tableau .. ligne_tableau("Vocatif", nil, mots.vs, nil, mots.vp, mots2.vs, mots2.vp)
return tableau .. "|}"
end
function lien_couleur(r, desinence)
local des_couleur = '<font style="color:DeepPink">' .. desinence .. '</span>'
return "]"
end
local accentue = {
='ά',
='έ',
='ή',
='ί',
='ΐ',
='ό',
='ύ',
='ΰ',
='ώ',
}
local sans_accents = {
='α',
='ε',
='η',
='ι',
='ϊ',
='ο',
='υ',
='ϋ',
='ω',
}
-- tronque retourne le mot sans sa desinence. En cas d'argument
-- invalide (si le mot ne termine pas par desinence), renvoie "ERREUR"
function tronque(mot, desinence)
local l = mw.ustring.len(desinence)
if mw.ustring.len(mot) < l then
return "ERREUR"
end
if mw.ustring.sub(mot, -l, -1) ~= desinence then
return "ERREUR"
end
return mw.ustring.sub(mot, 1, -l-1)
end
-- radicaux déplace l'accent de l'argument premier et renvoie
-- les trois variantes d'accentuation du radical.
-- Le déplacement peut faire apparaître un tréma:
-- άι -> αϊ (χάιδεμα: caresse)
-- έι -> εϊ (?)
-- όι -> οϊ (κορόιδεμα: moquerie)
-- ύι -> υϊ (?)
-- άυ -> αϋ (πράυνση)
-- έυ -> εϋ (?)
-- όυ -> οϋ (?)
function radicaux(premier)
local r2 = ""
local r3 = ""
local voyelle = 0 -- indice de la dernière voyelle
local i = 0
-- on fait r3 en enlevant tous les accents
for c in mw.ustring.gcodepoint(premier) do
c = mw.ustring.char(c)
i = i + 1
c2 = sans_accents -- TODO: implémenter le tréma
if c2 == nil then c2 = c end
if accentue ~= nil then voyelle = i end
r3 = r3 .. c2
end
if voyelle == 0 then
r2 = premier
else
local pre = mw.ustring.sub(r3, 1, voyelle-1)
local voy = mw.ustring.sub(r3, voyelle, voyelle)
local suf = mw.ustring.sub(r3, voyelle+1, -1)
if accentue ~= nil then voy = accentue end
r2 = pre .. voy .. suf
end
return premier, r2, r3
end
local artm = {
ns = "ο", as = "το(ν)", gs = "του",
np = "οι", ap = "τους", gp = "των",
}
local artf = {
ns = "η", as = "τη(ν)", gs = "της",
np = "οι", ap = "τις", gp = "των",
}
local artn = {
ns = "το", as = "το", gs = "του",
np = "τα", ap = "τα", gp = "των",
}
-- Déclinaisons de noms masculins.
-- - ouranos: ός accentué
-- - dromos/angelos: ος non accentué
-- - antilalos: ος accent fixe
-- - nikitis: ής accentué
-- - navtis: ης non accentué
-- - fylakas/agonas: ας non accentué
-- - balomatis/sfoungaras/kafes: imparisyllabiques oxytons
-- - manavis: imparisyllabique paroxyton
function p._ouranos(mot)
local r = tronque(mot, "ός")
local desinences = {
ns = "ός", as = "ό", gs = "ού", vs = "έ",
np = "οί", ap = "ούς", gp = "ών", vp = "οί",
}
local formes = {}
for cas, d in pairs(desinences) do
formes = r .. d
end
return fait_tableau(artm, formes, {})
end
function p._angelos(mot)
local radical = tronque(mot, "ος")
local r1, r2, r3 = radicaux(radical)
local formes = {
ns = r1.."ος", as = r1.."ο", gs = r2.."ου", vs = r1.."ε",
np = r1.."οι", ap = r2.."ους", gp = r2.."ων", vp = r1.."οι",
}
return fait_tableau(artm, formes, {})
end
-- Mot sans déplacement d'accent.
function p._antilalos(mot)
local r = tronque(mot, "ος")
local formes = {
ns = r.."ος", as = r.."ο", gs = r.."ου", vs = r.."ε",
np = r.."οι", ap = r.."ους", gp = r.."ων", vp = r.."οι",
}
return fait_tableau(artm, formes, {})
end
function p._nikitis(mot)
local r = tronque(mot, "ής")
local formes = {
ns = r.."ής", as = r.."ή", gs = r.."ή", vs = r.."ή",
np = r.."ές", ap = r.."ές", gp = r.."ών", vp = r.."ές",
}
return fait_tableau(artm, formes, {})
end
function p._navtis(mot)
local r1, r2, r3 = radicaux(tronque(mot, "ης"))
local formes = {
ns = r1.."ης", as = r1.."η", gs = r1.."η", vs = r1.."η",
np = r1.."ες", ap = r1.."ες", gp = r3.."ών", vp = r1.."ες",
}
return fait_tableau(artm, formes, {})
end
function p._fylakas(mot)
local r1, r2, r3 = radicaux(tronque(mot, "ας"))
local formes = {
ns = r1.."ας", as = r1.."α", gs = r1.."α", vs = r1.."α",
np = r1.."ες", ap = r1.."ες", gp = r2.."ων", vp = r1.."ες",
}
return fait_tableau(artm, formes, {})
end
function p._impari_masc(mot)
local r = tronque(mot, "ς")
local formes = {
ns = r.."ς", as = r.."", gs = r.."", vs = r.."",
np = r.."δες", ap = r.."δες", gp = r.."δων", vp = r.."δες",
}
return fait_tableau(artm, formes, {})
end
-- Les fonctions à utiliser en temps normal (utilisent le titre de page).
function p.ouranos(frame) return p._ouranos(mw.title.getCurrentTitle().baseText) end
function p.dromos(frame) return p._angelos(mw.title.getCurrentTitle().baseText) end
function p.angelos(frame) return p._angelos(mw.title.getCurrentTitle().baseText) end -- alias
function p.antilalos(frame) return p._antilalos(mw.title.getCurrentTitle().baseText) end
function p.nikitis(frame) return p._nikitis(mw.title.getCurrentTitle().baseText) end
function p.navtis(frame) return p._navtis (mw.title.getCurrentTitle().baseText) end
function p.fylakas(frame) return p._fylakas(mw.title.getCurrentTitle().baseText) end
function p.agonas(frame) return p._fylakas(mw.title.getCurrentTitle().baseText) end -- alias
function p.balomatis(frame) return p._impari_masc(mw.title.getCurrentTitle().baseText) end -- variante en η
function p.sfoungaras(frame) return p._impari_masc(mw.title.getCurrentTitle().baseText) end -- variante en α
function p.kafes(frame) return p._impari_masc(mw.title.getCurrentTitle().baseText) end -- variante en ε
function p.manavis(frame) return p._impari_masc(mw.title.getCurrentTitle().baseText) end -- variante en η proparoxyton
-- Modèles de déclinaison de noms féminins
-- - kardia: ά oxyton
-- - ora/thalassa: α non accentué, -ών
-- - elpida/salpigga: α non accentué, -ων non accentué
-- - psychi: ή oxyton
-- - niki: η, -ών
-- - diametros: ος non accentué
-- - skepsi/dynami: η, -εως
-- - giagia/alepou: imparisyllabiques
function p._kardia(mot)
local r = tronque(mot, "ά")
local formes = {
ns = r.."ά", as = r.."ά", gs = r.."άς", vs = r.."ά",
np = r.."ές", ap = r.."ές", gp = r.."ών", vp = r.."ές",
}
return fait_tableau(artf, formes, {})
end
function p._ora(mot)
local r1, r2, r3 = radicaux(tronque(mot, "α"))
local formes = {
ns = r1.."α", as = r1.."α", gs = r1.."ας", vs = r1.."α",
np = r1.."ες", ap = r1.."ες", gp = r3.."ών", vp = r1.."ες",
}
return fait_tableau(artf, formes, {})
end
function p._elpida(mot)
local r1, r2, r3 = radicaux(tronque(mot, "α"))
local formes = {
ns = r1.."α", as = r1.."α", gs = r1.."ας", vs = r1.."α",
np = r1.."ες", ap = r1.."ες", gp = r2.."ων", vp = r1.."ες",
}
return fait_tableau(artf, formes, {})
end
function p._psychi(mot)
local r = tronque(mot, "ή")
local formes = {
ns = r.."ή", as = r.."ή", gs = r.."ής", vs = r.."ή",
np = r.."ές", ap = r.."ές", gp = r.."ών", vp = r.."ές",
}
return fait_tableau(artf, formes, {})
end
function p._niki(mot)
local r1, r2, r3 = radicaux(tronque(mot, "η"))
local formes = {
ns = r1.."η", as = r1.."η", gs = r1.."ης", vs = r1.."η",
np = r1.."ες", ap = r1.."ες", gp = r3.."ών", vp = r1.."ες",
}
return fait_tableau(artf, formes, {})
end
function p._dynami(mot)
local r1, r2, r3 = radicaux(tronque(mot, "η"))
local formes = {
ns = r1.."η", as = r1.."η", gs = r1.."ης", vs = r1.."η",
np = r2.."εις", ap = r2.."εις", gp = r2.."εων", vp = r2.."εις",
}
return fait_tableau(artf, formes, {gs = r2.."εως"})
end
function p._giagia(r)
local formes = {
ns = r, as = r, gs = r.."ς", vs = r,
np = r.."δες", ap = r.."δες", gp = r.."δων", vp = r.."δες",
}
return fait_tableau(artf, formes, {})
end
function p.kardia(frame) return p._kardia(mw.title.getCurrentTitle().baseText) end -- ά
function p.ora(frame) return p._ora (mw.title.getCurrentTitle().baseText) end -- α
function p.thalassa(frame) return p._ora (mw.title.getCurrentTitle().baseText) end -- α
function p.elpida(frame) return p._elpida(mw.title.getCurrentTitle().baseText) end -- α < 3e décl.
function p.salpigga(frame) return p._elpida(mw.title.getCurrentTitle().baseText) end -- α < 3e décl.
function p.psychi(frame) return p._psychi(mw.title.getCurrentTitle().baseText) end -- ή
function p.niki(frame) return p._niki (mw.title.getCurrentTitle().baseText) end -- η
function p.dynami(frame) return p._dynami(mw.title.getCurrentTitle().baseText) end -- η/εις
function p.skepsi(frame) return p._dynami(mw.title.getCurrentTitle().baseText) end -- η/εις
function p.giagia(frame) return p._giagia(mw.title.getCurrentTitle().baseText) end -- pluriel δες
function p.alepou(frame) return p._giagia(mw.title.getCurrentTitle().baseText) end -- pluriel δες
-- Modèles de noms neutres
-- bouno: ό oxyton
-- pevko: ο accent fixe
-- prosopo: -ο accent qui descend
-- provato: -ο accent qui descend optionnellement
-- paidi: -ί oxyton
-- tragoudi: -ι gén. -ιού
-- kyma/onoma: -μα/-ματα
-- desimo: -μο/-ματα
-- meros/edafos: -ος gén. -ους
-- anthos: -ος gén.pl. -έων
-- kreas: -ας/-ατα
-- mellon: -ον/-οντα
function p._bouno(mot)
local r = tronque(mot, "ό")
local formes = {
ns = r.."ό", as = r.."ό", gs = r.."ού", vs = r.."ό",
np = r.."ά", ap = r.."ά", gp = r.."ών", vp = r.."ά",
}
return fait_tableau(artn, formes, {})
end
function p._onoma(mot)
local r1, r2, r3 = radicaux(tronque(mot, "α"))
local formes = {
ns = r1.."α", as = r1.."α", gs = r2.."ατος", vs = r1.."α",
np = r2.."ατα", ap = r2.."ατα", gp = r3.."άτων", vp = r2.."ατα",
}
return fait_tableau(artn, formes, {})
end
function p._meros(mot)
local r1, r2, r3 = radicaux(tronque(mot, "ος"))
local formes = {
ns = r1.."ος", as = r1.."oς", gs = r2.."ους", vs = r1.."ος",
np = r2.."η", ap = r2.."η", gp = r3.."ών", vp = r2.."η",
}
return fait_tableau(artn, formes, {})
end
function p.bouno(frame) return p._bouno(mw.title.getCurrentTitle().baseText) end -- -ό
function p.kyma(frame) return p._onoma(mw.title.getCurrentTitle().baseText) end -- -μα
function p.onoma(frame) return p._onoma(mw.title.getCurrentTitle().baseText) end -- -μα
function p.meros(frame) return p._meros(mw.title.getCurrentTitle().baseText) end -- -ος
function p.edafos(frame) return p._meros(mw.title.getCurrentTitle().baseText) end -- -ος
-- Fonctions de test.
function p.test(frame)
return p._ouranos("ουρανός") .. "\r\n" ..
p._angelos("λόγος") .. "\r\n" ..
p._angelos("άνθρωπος") .. "\r\n" ..
p._antilalos("αντίλαλος") .. "\r\n" ..
p._nikitis("νικητής") .. "\r\n" ..
p._impari_masc("μπαλοματής") .. "\r\n" ..
p._navtis("μετανάστης") .. "\r\n" ..
p._impari_masc("μανάβης") .. "\r\n" ..
p._fylakas("αγώνας") .. "\r\n" ..
p._fylakas("φύλακας") .. "\r\n" ..
p._impari_masc("σφουγγαράς") .. "\r\n" ..
p._impari_masc("καφές") .. "\r\n" ..
p._kardia("καρδιά") .. "\r\n" ..
p._ora("ώρα") .. "\r\n" ..
p._ora("θάλασσα") .. "\r\n" ..
p._elpida("ελπίδα") .. "\r\n" ..
p._elpida("σάλπιγγα") .. "\r\n" ..
p._dynami("δύναμη") .. "\r\n" ..
p._dynami("σκέψη") .. "\r\n" ..
p._giagia("γιαγιά") .. "\r\n" ..
p._giagia("αλεπού") .. "\r\n" ..
p._bouno("βουνό") .. "\r\n" ..
p._onoma("κύμα") .. "\r\n" ..
p._onoma("όνομα") .. "\r\n" ..
p._meros("μέρος") .. "\r\n" ..
p._meros("έδαφος") .. "\r\n"
end
function p.test_radicaux(frame)
local ret = ""
local r1, r2, r3 = radicaux("δύναμ") -- δύναμ δυνάμ δυναμ
ret = r1 .. " " .. r2 .. " " .. r3 .. "\r\n"
r1, r2, r3 = radicaux("όνομ") -- όνομ ονόμ ονομ
ret = ret .. r1 .. " " .. r2 .. " " .. r3 .. "\r\n"
r1, r2, r3 = radicaux("πόλ") -- πόλ πόλ πολ
ret = ret .. r1 .. " " .. r2 .. " " .. r3 .. "\r\n"
r1, r2, r3 = radicaux("έτ") -- έτ έτ ετ
ret = ret .. r1 .. " " .. r2 .. " " .. r3 .. "\r\n"
r1, r2, r3 = radicaux("φ") -- φ φ φ
ret = ret .. r1 .. " " .. r2 .. " " .. r3 .. "\r\n"
r1, r2, r3 = radicaux("ί") -- ί ί ι
ret = ret .. r1 .. " " .. r2 .. " " .. r3 .. "\r\n"
return ret
end
return p
--