Ce module construit des tables de déclinaisons de noms en grec moderne.
Chaque modèle de déclinaison correspond à une fonction du module qui construit la table, sans argument, à partir du mot vedette de l'article qui l'appelle.
Les fonctions disponibles sont les suivantes:
Ce module n'est pas destiné à être utilisé directement mais à être appelé par les modèles appropriés figurant dans Catégorie:Modèles de déclinaison de noms communs (grec moderne).
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis la page Module:el-déclinaison-nom/Documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
-- Module el-déclinaison-nom librement inspiré de ]
--
-- à ajouter: options selon les cas usité (singulier seulement, pluriel seulement,
-- vocatif inusité, génitif pluriel peu/pas usité).
local p = {}
-- tables de déclinaison
local data = mw.loadData('Module:el-déclinaison-nom/data')
function lang_el(mot)
return '<span lang="el" class="lang-el">' .. mot .. '</span>'
end
function lien_el(mot)
if mot == mw.title.getCurrentTitle().prefixedText then
return ']'
else
return ']'
end
end
-- 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 .. lang_el(as .. ' ')
end
ligne = ligne .. '\r\n| class="colle-gauche" | ' .. lien_el(ms)
if ms2 ~= nil then
ligne = ligne .. '<br />' .. lien_el(ms2)
end
ligne = ligne .. '\r\n| class="colle-droite" | '
if ap ~= nil then
ligne = ligne .. lang_el(ap .. ' ')
end
ligne = ligne .. '\r\n| class="colle-gauche" | ' .. lien_el(mp)
if mp2 ~= nil then
ligne = ligne .. '<br />' .. lien_el(mp2)
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
-- 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)
-- Ces trois radicaux sont extraits par la fonction radicaux().
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 l == 0 then
return mot
end
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 pos_accent = -1 -- position de l'accent
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
if c2 == nil then c2 = c else pos_accent = i end
if accentue ~= nil then voyelle = i end
if accentue ~= nil and pos_accent+1 == i then
-- une voyelle se trouve juste après l'accent, il faut lui mettre un tréma.
if c2 == "ι" then c2 = "ϊ" end
if c2 == "υ" then c2 = "ϋ" end
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
-- vedette extrait le mot à traiter du titre de la page (par défaut)
-- ou du premier argument passé à l'invocation.
function vedette(frame)
if frame.args == nil or frame.args == nil then
return mw.title.getCurrentTitle().baseText
else
return frame.args
end
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 = "των",
}
local articles = {m = artm, f = artf, n = artn}
-- decline décline un mot selon un modèle de déclinaison.
function decline(mot, table_decl)
local r = tronque(mot, table_decl.desinences.ns)
local rads = {radicaux(r)}
local formes = {}
local formes_alt = {}
for cas, x in pairs(table_decl.desinences) do
local type_rad, desinence = x, x
formes = rads .. desinence
end
for cas, x in pairs(table_decl.alt) do
local type_rad, desinence = x, x
formes_alt = rads .. desinence
end
return fait_tableau(articles, formes, formes_alt)
end
-- Déclinaisons de noms masculins.
-- - ouranos: ός accentué
-- - dromos/angelos: ος non accentué
-- - antilalos: ος accent fixe
-- - nikitis: ής accentué
-- - navtis: ης non accentué, gén.pl. ών
-- - tamias: ας non accentué, gén.pl. ών
-- - fylakas/agonas: ας non accentué, gén.pl ων
-- - grammateas: -έας, pluriel en -είς
-- - balomatis/sfoungaras/kafes: imparisyllabiques oxytons
-- - manavis: imparisyllabique paroxyton
function p._ouranos(mot) return decline(mot, data) end
function p._angelos(mot) return decline(mot, data) end
function p._antilalos(mot) return decline(mot, data) end
function p._nikitis(mot) return decline(mot, data) end
function p._navtis(mot) return decline(mot, data) end
function p._tamias(mot) return decline(mot, data) end
function p._fylakas(mot) return decline(mot, data) end
function p._grammateas(mot) return decline(mot, data) end
function p._impari_masc(mot) return decline(mot, data) end
-- Les fonctions à utiliser en temps normal (utilisent le titre de page).
function p.ouranos(frame) return p._ouranos(vedette(frame)) end
function p.dromos(frame) return p._angelos(vedette(frame)) end
function p.angelos(frame) return p._angelos(vedette(frame)) end -- alias
function p.antilalos(frame) return p._antilalos(vedette(frame)) end
function p.nikitis(frame) return p._nikitis(vedette(frame)) end
function p.navtis(frame) return p._navtis (vedette(frame)) end
function p.tamias(frame) return p._tamias (vedette(frame)) end
function p.fylakas(frame) return p._fylakas(vedette(frame)) end
function p.agonas(frame) return p._fylakas(vedette(frame)) end -- alias
function p.grammateas(frame) return p._grammateas(vedette(frame)) end
function p.balomatis(frame) return p._impari_masc(vedette(frame)) end -- variante en η
function p.sfoungaras(frame) return p._impari_masc(vedette(frame)) end -- variante en α
function p.kafes(frame) return p._impari_masc(vedette(frame)) end -- variante en ε
function p.manavis(frame) return p._impari_masc(vedette(frame)) 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: η, -ών
-- - nosos: oς paroxyton
-- - diametros: ος proparoxyton
-- - skepsi/dynami: η, -εως
-- - giagia/alepou: imparisyllabiques
function p._kardia(mot) return decline(mot, data) end
function p._ora(mot) return decline(mot, data) end
function p._elpida(mot) return decline(mot, data) end
function p._psychi(mot) return decline(mot, data) end
function p._niki(mot) return decline(mot, data) end
function p._nosos(mot) return decline(mot, data) end
function p._dynami(mot) return decline(mot, data) end
function p._giagia(mot) return decline(mot, data) end
function p.kardia(frame) return p._kardia(vedette(frame)) end -- ά
function p.ora(frame) return p._ora (vedette(frame)) end -- α
function p.thalassa(frame) return p._ora (vedette(frame)) end -- α
function p.elpida(frame) return p._elpida(vedette(frame)) end -- α < 3e décl.
function p.salpigga(frame) return p._elpida(vedette(frame)) end -- α < 3e décl.
function p.psychi(frame) return p._psychi(vedette(frame)) end -- ή
function p.niki(frame) return p._niki (vedette(frame)) end -- η
function p.nosos(frame) return p._nosos (vedette(frame)) end -- ος
function p.dynami(frame) return p._dynami(vedette(frame)) end -- η/εις
function p.skepsi(frame) return p._dynami(vedette(frame)) end -- η/εις
function p.giagia(frame) return p._giagia(vedette(frame)) end -- pluriel δες
function p.alepou(frame) return p._giagia(vedette(frame)) 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) return decline(mot, data) end
function p._pevko(mot) return decline(mot, data) end
function p._prosopo(mot) return decline(mot, data) end
function p._provato(mot) return decline(mot, data) end
function p._paidi(mot) return decline(mot, data) end
function p._tragoudi(mot) return decline(mot, data) end
function p._onoma(mot) return decline(mot, data) end
function p._desimo(mot) return decline(mot, data) end
function p._meros(mot) return decline(mot, data) end
function p._kreas(mot) return decline(mot, data) end
function p._mellon(mot) return decline(mot, data) end
function p.bouno(frame) return p._bouno(vedette(frame)) end -- -ό
function p.pevko(frame) return p._pevko(vedette(frame)) end -- -ο
function p.prosopo(frame) return p._prosopo (vedette(frame)) end -- -ο
function p.provato(frame) return p._provato (vedette(frame)) end -- -ο
function p.paidi(frame) return p._paidi (vedette(frame)) end -- -ί
function p.tragoudi(frame) return p._tragoudi(vedette(frame)) end -- -ι
function p.kyma(frame) return p._onoma(vedette(frame)) end -- -μα
function p.onoma(frame) return p._onoma(vedette(frame)) end -- -μα
function p.desimo(frame) return p._desimo(vedette(frame)) end -- -μο
function p.meros(frame) return p._meros(vedette(frame)) end -- -ος
function p.edafos(frame) return p._meros(vedette(frame)) end -- -ος
function p.kreas(frame) return p._kreas(vedette(frame)) end -- -ας/-ατα
function p.mellon(frame) return p._mellon(vedette(frame)) end -- -ν/-ντα
-- Fonctions de test.
function p.test_masculins(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._tamias("ταμίας") .. "\r\n" ..
p._fylakas("αγώνας") .. "\r\n" ..
p._fylakas("φύλακας") .. "\r\n" ..
p._impari_masc("σφουγγαράς") .. "\r\n" ..
p._impari_masc("καφές")
end
function p.test_feminins(frame)
return 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"
end
function p.test_neutres(frame)
return p._bouno("βουνό") .. "\r\n" ..
p._pevko("πεύκο") .. "\r\n" ..
p._pevko("σίδερο") .. "\r\n" .. -- exemple proparoxyton chez Triantafyllidis
p._prosopo("πρόσωπο") .. "\r\n" ..
p._provato("πρόβατο") .. "\r\n" ..
p._paidi("παιδί") .. "\r\n" ..
p._tragoudi("τραγούδι") .. "\r\n" ..
p._onoma("κύμα") .. "\r\n" ..
p._onoma("όνομα") .. "\r\n" ..
p._desimo("δέσιμο") .. "\r\n" ..
p._meros("μέρος") .. "\r\n" ..
p._meros("έδαφος") .. "\r\n" ..
p._kreas("κρέας") .. "\r\n" ..
-- exemples de Triantafyllidis
p._mellon("μέλλον") .. "\r\n" ..
p._mellon("καθήκον") .. "\r\n" ..
p._mellon("σύμπαν") .. "\r\n" ..
p._mellon("φωνήεν") .. "\r\n"
end
function p.test_radicaux(frame)
local ret = [==[
Ce test doit afficher:
* δύναμ, δυνάμ, δυναμ
* όνομ, ονόμ, ονομ
* πόλ, πόλ, πολ
* έτ, έτ, ετ
* φ, φ, φ
* ί, ί, ι
* χάιδεμ, χαϊδέμ, χαϊδεμ
* πράυνσ, πραΰνσ, πραϋνσ
Résultat du test:
]==]
function test_ligne(r)
a, b, c = radicaux(r)
return "* " .. a .. ", " .. b .. ", " .. c .. "\r\n"
end
ret = ret .. test_ligne("δύναμ")
ret = ret .. test_ligne("όνομ")
ret = ret .. test_ligne("πόλ")
ret = ret .. test_ligne("έτ")
ret = ret .. test_ligne("φ")
ret = ret .. test_ligne("ί")
ret = ret .. test_ligne("χάιδεμ")
ret = ret .. test_ligne("πράυνσ")
return ret
end
return p