Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

Convertisseur Èlyan (en lettre latines) vers Èlyan

-- Tableau de correspondance Latin -> Èlyan
-- Tableau de correspondance Latin -> Èlyan
local latinToElyan = {
    ["p"]="Ϥ", 
    ["b"]="Ϥ°", 
    ["t"]="ϟ", 
    ["d"]="ϟ°", 
    ["k"]="Ϩ", 
    ["g"]="Ϩ°",
    ["f"]="Ꜫ", 
    ["v"]="ϣ", 
    ["s"]="Ϭ", 
    ["z"]="Ϭ°", 
    ["sh"]="ʒ", 
    ["j"]="ʒ°",
    ["m"]="Ϡ", 
    ["n"]="Ϡ°", 
    ["l"]="ϻ", 
    ["r"]="ϻ°", 
    ["c"]="∿",
    ["ch"]="っ",
    
    ["i"]="ㄹ",
    ["e"]="═", 
    ["è"]="+", 
    ["a"]="ㅆ", 
    ["u"]="ㄷ", 
    ["ù"]="へ",
    ["o"]="○",
    ["ò"]="ㅁ",
    
    ["y"]="乙", 
    ["w"]="㇊",
    ["h"]="亅",
    
    -- Ponctuation
    ["."]="。",
    ["..."]="…",
    ["!"]="!",
    ["?"]="?",
    [","]=",",
    [":"]=":",
    [";"]=";",
    ["'"]="’"
}

-- Tableau de correspondance Èlyan -> Latin
-- Attention : on met d'abord les symboles les plus longs pour gérer digrammes
local elyanToLatin = {}
local sortedKeys = {}

for k,v in pairs(latinToElyan) do
    elyanToLatin[v] = k
    table.insert(sortedKeys, v)
end

-- Trier par longueur décroissante pour gérer les symboles sur plusieurs caractères
table.sort(sortedKeys, function(a,b) return #a > #b end)

-- Fonction pour convertir du latin vers Elyan
local function toElyan(text)
    text = text:lower()
    local result = ""
    local i = 1
    while i <= #text do
        local two = text:sub(i,i+1)
        local one = text:sub(i,i)
        if latinToElyan[two] then
            result = result .. latinToElyan[two]
            i = i + 2
        elseif latinToElyan[one] then
            result = result .. latinToElyan[one]
            i = i + 1
        else
            result = result .. one
            i = i + 1
        end
    end
    return result
end

-- Fonction pour convertir de Elyan vers latin
local function toLatin(text)
    local result = ""
    local i = 1
    while i <= #text do
        local matched = false
        for _, key in ipairs(sortedKeys) do
            if text:sub(i,i+#key-1) == key then
                result = result .. elyanToLatin[key]
                i = i + #key
                matched = true
                break
            end
        end
        if not matched then
            result = result .. text:sub(i,i)
            i = i + 1
        end
    end
    return result
end

-- Exemples d'utilisation
local sampleLatin = "Mèn Che ThaLaEk"
local sampleElyan = toElyan(sampleLatin)
print("Latin -> Èlyan : " .. sampleElyan)

local sampleElyan2 = "Ϡ+Ϡ° っ═ ϟ亅ㅆϻㅆ═Ϩ"
local backToLatin = toLatin(sampleElyan2)
print("Èlyan -> Latin : " .. backToLatin)