Vai al contenuto

Modulo:EbraicoTr

Da Cathopedia, l'enciclopedia cattolica.

La documentazione per questo modulo può essere creata in Modulo:EbraicoTr/man

local p = {}

function p.traslittera(frame)
    local args = frame.args or frame:getParent().args
    local testo = args[1] or ""
    if testo == "" then return "" end

    local res = testo

    -- ECCEZIONI PER TESTO NON VOCALIZZATO (pronuncia semplificata)
    -- Gestisce le parole comuni quando mancano i segni diacritici
    local eccezioni = {
        {"ישוע", "yeshua"},
        {"קם", "kam"},
        {"לתחייה", "litchiya"},
        {"יהוה", "yahweh"},
        {"אלהים", "elohim"}
    }
    for _, v in ipairs(eccezioni) do
        res = mw.ustring.gsub(res, v[1], v[2])
    end

    -- RIMOZIONE ACCENTI BIBLICI
    res = mw.ustring.gsub(res, "[\214\145-\214\175]", "")

    -- MATER LECTIONIS & VOCALI SPECIALI
    local mater = {
        {"וּ", "u"}, {"וֹ", "o"}, {"יִ", "i"},
        {"וַ", "va"}, {"וְ", "ve"}, -- Congiunzione "ve"
        {"ַח$", "ah"}, {"ַע$", "a‘"} -- Patah furtivum
    }
    for _, v in ipairs(mater) do
        res = mw.ustring.gsub(res, v[1], v[2])
    end

    -- GESTIONE DAGHESH
    -- B, P, K cambiano suono; le altre raddoppiano
    res = mw.ustring.gsub(res, "בּ", "b")
    res = mw.ustring.gsub(res, "פּ", "p")
    res = mw.ustring.gsub(res, "כּ", "k")
    
    -- Raddoppio meccanico (es. השמים -> ssh)
    local raddoppio = {
        {"גּ", "gg"}, {"דּ", "dd"}, {"הּ", "hh"}, {"זּ", "zz"}, {"טּ", "tt"},
        {"לּ", "ll"}, {"מּ", "mm"}, {"נּ", "nn"}, {"סּ", "ss"}, {"צּ", "tz"},
        {"קּ", "kk"}, {"רּ", "rr"}, {"שּ", "ssh"}, {"תּ", "tt"}
    }
    for _, v in ipairs(raddoppio) do
        res = mw.ustring.gsub(res, v[1], v[2])
    end

    -- MAPPATURA CONSONANTI
    local generic = {
        {"א", ""}, {"ע", "‘"},
        {"ב", "v"}, {"ג", "g"}, {"ד", "d"}, {"ה", "h"}, {"ז", "z"}, {"ח", "h"}, {"ט", "t"}, 
        {"כ", "h"}, {"ל", "l"}, {"מ", "m"}, {"ם", "m"}, {"נ", "n"}, {"ן", "n"}, {"ס", "s"}, 
        {"פ", "f"}, {"צ", "tz"}, {"ץ", "tz"}, {"ק", "k"}, {"ר", "r"}, {"שׁ", "sh"}, {"שׂ", "s"}, {"ש", "sh"}, {"ת", "t"},
        -- Gestione Y/I (Punto 6)
        {"^י", "y"}, {"%sי", " y"}, {"י", "i"}, 
        -- Gestione Vav consonantica residua
        {"ו", "v"}
    }
    for _, v in ipairs(generic) do
        res = mw.ustring.gsub(res, v[1], v[2])
    end

    -- AFFINAMENTO VOCALI & SHEVA
    local vocali = {
        {"ָ", "a"}, {"ַ", "a"}, {"ֳ", "a"},
        {"ֶ", "e"}, {"ֵ", "e"}, {"ֱ", "e"},
        {"ִ", "i"}, {"ֹ", "o"}, {"ֳ", "o"},
        {"ֻ", "u"},
        -- Sheva (ְ): lo rendiamo "e" solo se non è a fine parola (muto)
        {"ְ$", ""}, {"ְ%s", " "}, {"ְ", "e"}
    }
    for _, v in ipairs(vocali) do
        res = mw.ustring.gsub(res, v[1], v[2])
    end

    -- PULIZIA FINALE
    res = mw.ustring.lower(res)
    res = mw.ustring.gsub(res, "[א-ת\214\128-\215\191]", "")
    res = res:gsub("%s+", " "):gsub("^%s+", ""):gsub("%s+$", "")

    local lrm = "\226\128\142" 
    return '<span dir="ltr">' .. lrm .. res .. lrm .. '</span>'
end

return p