Vai al contenuto

Modulo:AraboTr

Da Cathopedia, l'enciclopedia cattolica.

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

local p = {}

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

    -- 1. Gestione Articolo (Google preferisce 'al' unito senza raddoppiare la solare)
    testo = mw.ustring.gsub(testo, "^ال", "al")
    testo = mw.ustring.gsub(testo, "%sال", " al")

    -- 2. Mappatura Caratteri Semplificata (Più vicina ai suoni di Google)
    local map = {
        ['ب']='b', ['ت']='t', ['ث']='th', ['ج']='j', ['ح']='h', ['خ']='kh', 
        ['د']='d', ['ذ']='dh', ['ر']='r', ['ز']='z', ['س']='s', ['ش']='sh', 
        ['ص']='s', ['ض']='d', ['ط']='t', ['ظ']='z', ['ع']='a', ['غ']='gh', 
        ['ف']='f', ['ق']='q', ['ك']='k', ['ل']='l', ['م']='m', ['ن']='n', 
        ['ه']='h', ['و']='u', ['ي']='y', ['ة']='at', ['أ']='a', ['إ']='i', 
        ['ا']='a', ['آ']='a', ['ى']='a', ['\217\145']='' -- Rimuoviamo la shadda per ora
    }

    local res = ""
    for i = 1, mw.ustring.len(testo) do
        local char = mw.ustring.sub(testo, i, i)
        res = res .. (map[char] or char)
    end

    -- 3. Pulizia Post-Elaborazione come Google
    res = res:lower()
    
    -- Corregge i raddoppiamenti antiestetici (es. 'iyiy' -> 'i')
    res = res:gsub("yy", "y"):gsub("uu", "u"):gsub("ii", "i")
    
    -- Gestione 'at' finale (Stato costrutto vs fine frase)
    res = res:gsub("at%s", "at "):gsub("at$", "a")

    -- Inserimento vocali "probabili" (Euristiche per nomi comuni)
    res = res:gsub("almlk", "almalak") -- Trasforma al-mlk in al-malak
    res = res:gsub("iyin", "iayn"):gsub("iyayn", "iayn")

    -- 4. Output
    return '<span lang="ar" dir="rtl">' .. originale .. '</span> (<i>' .. res .. '</i>)'
end

return p -- {{#invoke:AraboTr|traslittera|الشَّمْس}}