Module:el-accentuation

Définition, traduction, prononciation, anagramme et synonyme sur le dictionnaire libre Wiktionnaire.

 Documentation[voir] [modifier] [historique] [purger]

Ce module propose deux fonctions utilitaires pour manipuler l’accentuations des mots en grec.

Les fonctions disponibles sont les suivantes:

  • radicaux : renvoie 3 variantes du mot passé en argument (mot non modifié, variante oxytone, variante sans accent). Cette fonction est notamment utilisée pour obtenir les variantes d’un radical lorsque l'accent se déplace au cours de la déclinaison. Si l'argument commence par έ-, le mot est traité comme possédant un augment : l’augment sera retiré s’il ne porte pas l’accent.
  • normalise : retire l'accent d’un mot monosyllabique et laisse son argument inchangé sinon.

local p = {}

-- Accentuation. Pour chaque radical, on construit:
-- * le radical accentué sur l'avant-dernière syllabe (formes proparoxytones à désinence courte)
--   ou le radical de la 1re personne du singulier
-- * le radical accentué sur la dernière syllabe
-- * le radical sans accent (désinence accentuée)
-- Ces trois radicaux sont extraits par la fonction radicaux().
 
local accentue = {
   ['α']='ά',
   ['ε']='έ',
   ['η']='ή',
   ['ι']='ί',
   ['ϊ']='ΐ',
   ['ο']='ό',
   ['υ']='ύ',
   ['ϋ']='ΰ',
   ['ω']='ώ',
}
 
local sans_accents = {
   ['ά']='α',
   ['έ']='ε',
   ['ή']='η',
   ['ί']='ι',
   ['ΐ']='ϊ',
   ['ό']='ο',
   ['ύ']='υ',
   ['ΰ']='ϋ',
   ['ώ']='ω',
}
 
-- 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)
-- ύι -> υϊ (?)
-- άυ -> αϋ (πράυνση)
-- έυ -> εϋ (?)
-- όυ -> οϋ (?)
--
-- Si l'argument commence par "έ-", il est traité cmome un augment et
-- disparaît si l'accent se déplace sur une autre syllabe.
function p.radicaux(arg)
    local r1 = arg
    local r2 = ""
    local r3 = ""
    local pos_accent = -1 -- position de l'accent
    local voyelle = 0 -- indice de la dernière voyelle
    local i = 0
    -- L'augment est marqué par le préfixe "έ-" que l'on retire pour r2 et r3.
    if mw.ustring.len(arg) > 2 and
       mw.ustring.sub(arg, 1, 2) == "έ-" then
       r1 = "έ" .. mw.ustring.sub(arg, 3, -1)
       arg = mw.ustring.sub(arg, 3, -1)
    end
    -- on fait r3 en enlevant tous les accents
    for c in mw.ustring.gcodepoint(arg) do
    	c = mw.ustring.char(c)
    	i = i + 1
        c2 = sans_accents[c]
        if c2 == nil then c2 = c else pos_accent = i end
        if accentue[c2] ~= nil then voyelle = i end
        if accentue[c2] ~= 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 = arg
    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[voy] ~= nil then voy = accentue[voy] end
    	r2 = pre .. voy .. suf
    end
    return {r1, r2, r3}
end

-- normalise retire l'accent sur les monosyllabes
function p.normalise(mot)
    -- un mot est monosyllabe si l'accent est sur la dernière voyelle et que
    -- que la première voyelle précède immédiatement.
    local iv, ia = -1, -1
    local i = 0
    for c in mw.ustring.gcodepoint(mot) do
    	c = mw.ustring.char(c)
    	i = i + 1
        if sans_accents[c] ~= nil then
            ia = i -- accent trouvé
        end
        if accentue[c] ~= nil then
            if ia > 0 and i > ia then return mot end -- voyelle après l'accent
            if iv == -1 then iv = i end
        end
    end
    if iv ~= -1 and iv ~= ia-1 then return mot end

    local pre = mw.ustring.sub(mot, 1, ia-1)
    local voy = mw.ustring.sub(mot, ia, ia)
    local suf = mw.ustring.sub(mot, ia+1, -1)
    return pre .. sans_accents[voy] .. suf
end

function p.test_radicaux(frame)
    local ret = [==[
Ce test doit afficher:
* δύναμ, δυνάμ, δυναμ
* όνομ, ονόμ, ονομ
* πόλ, πόλ, πολ
* έτ, έτ, ετ
* φ, φ, φ
* ί, ί, ι
* χάιδεμ, χαϊδέμ, χαϊδεμ
* πράυνσ, πραΰνσ, πραϋνσ
* έλαβ, λάβ, λαβ

Résultat du test:
]==]
    function test_ligne(r)
    	rs = p.radicaux(r)
    	return "* " .. rs[1] .. ", " .. rs[2] .. ", " .. rs[3] .. "\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("πράυνσ")
	ret = ret .. test_ligne("έ-λαβ")
	return ret
end

function p.test_normalise(frame)
    local ret = [==[
Ce test doit afficher:
* σοκ
* λάιτ
* λες
* μπεις
 
Résultat du test:
]==]
	ret = ret .. "* " .. p.normalise("σόκ") .. "\n"
	ret = ret .. "* " .. p.normalise("λάιτ") .. "\n"
	ret = ret .. "* " .. p.normalise("λές") .. "\n"
	ret = ret .. "* " .. p.normalise("μπείς") .. "\n"
	return ret
end

return p