Modul:grc-translit

Vun Wiktionary

This module will transliterate Ancient Greek text per WT:GRC TR through the function tr.


--[[
Transliteration for Ancient Greek.
]]
 
local export = {}
 
local tt = {
	-- Vowels
    ["[αάὰᾶἀἄἂἆᾰ]"] = "a",
    ["[ἁἅἃἇ]"] = "ha",
    ["[ᾱᾳᾴᾲᾷᾀᾄᾂᾆ]"] = "ā",
    ["[ᾁᾅᾃᾇ]"] = "hā",
    ["[εέὲἐἔἒ]"] = "e",
    ["[ἑἕἓ]"] = "he",
    ["[ηήὴῆἠἤἢἦῃῄῂῇᾐᾔᾒᾖ]"] = "ē",
    ["[ἡἥἣἧᾑᾕᾓᾗ]"] = "hē",
    ["[ιίὶῖἰἴἲἶῐ]"] = "i",
    ["[ἱἵἳἷ]"] = "hi",
    ["[ϊΐῒῗ]"] = "ï",
    ["ῑ"] = "ī",
    ["[οόὸὀὄὂ]"] = "o",
    ["[ὁὅὃ]"] = "ho",
    ["[υύὺῦὐὔὒὖῠ]"] = "u",
    ["[ὑὕὓὗ]"] = "hu",
    ["[ϋΰῢῧ]"] = "ü",
    ["ῡ"] = "ū",
    ["[ωώὼῶὠὤὢὦῳῴῲῷᾠᾤᾢᾦ]"] = "ō",
    ["[ὡὥὣὧᾡᾥᾣᾧ]"] = "hō",
 
    ["[ΑΆᾺἈἌἊἎᾸ]"] = "A",
    ["[ἉἍἋἏ]"] = "Ha",
    ["[Ᾱᾼᾈᾌᾊᾎ]"] = "Ā",
    ["[ᾉᾍᾋᾏ]"] = "Hā",
    ["[ΕΈῈἘἜἚ]"] = "E",
    ["[ἙἝἛ]"] = "He",
    ["[ΗΉῊἨἬἪἮῌᾘᾜᾚᾞ]"] = "Ē",
    ["[ἩἭἫἯᾙᾝᾛᾟ]"] = "Hē",
    ["[ΙΊῚἸἼἺἾῘ]"] = "I",
    ["[ἹἽἻἿ]"] = "Hi",
    ["Ϊ"] = "Ï",
    ["Ῑ"] = "Ī",
    ["[ΟΌῸὈὌὊ]"] = "O",
    ["[ὉὍὋ]"] = "Ho",
    ["[ΥΎῪῨ]"] = "U",
    ["[ὙὝὛὟ]"] = "Hu",
    ["Ϋ"] = "Ü",
    ["Ῡ"] = "Ū",
    ["[ΩΏῺὨὬὪὮῼᾨᾬᾪᾮ]"] = "Ō",
    ["[ὩὭὫὯᾩᾭᾫᾯ]"] = "Hō",
 
    -- Consonants
    ["β"] = "b",  ["γ"] = "g",  ["δ"] = "d",  ["ζ"] = "z",  ["θ"] = "th", ["κ"] = "k",
    ["λ"] = "l",  ["μ"] = "m",  ["ν"] = "n",  ["ξ"] = "x",  ["π"] = "p",  ["σ"] = "s",
    ["τ"] = "t",  ["φ"] = "ph", ["χ"] = "ch", ["ψ"] = "ps", ["ῥ"] = "rh", ["[ρῤ]"] = "r",
    ["ς"] = "s",
    ["Β"] = "B",  ["Γ"] = "G",  ["Δ"] = "D",  ["Ζ"] = "Z",  ["Θ"] = "Th", ["Κ"] = "K",
    ["Λ"] = "L",  ["Μ"] = "M",  ["Ν"] = "N",  ["Ξ"] = "X",  ["Π"] = "P",  ["Σ"] = "S",
    ["Τ"] = "T",  ["Φ"] = "Ph", ["Χ"] = "Ch", ["Ψ"] = "Ps", ["Ῥ"] = "Rh", ["Ρ"] = "R",
 
    -- Archaic
    ["ϝ"] = "w",  ["ϻ"] = "ś",  ["ϙ"] = "q",  ["ϡ"] = "š",
    ["Ϝ"] = "W",  ["Ϻ"] = "Ś",  ["Ϙ"] = "Q",  ["Ϡ"] = "Š",
}
 
-- Takes a text and return the transliterated form.
function export.tr(text)
    if type(text) == 'table' then text = text.args[1] end
 
    local gsub = mw.ustring.gsub
 
    text = gsub(text, "[οόὸὀὄὂ][ὑὕὓὗ]", "hou")
    text = gsub(text, "[ΟΌῸὈὌὊ][ὑὕὓὗὙὝὛὟ]", "Hou")
 
    text = gsub(text, "γ([γκξχ])", "n%1")
 
    text = gsub(text, "ρρ", "rrh")
 
    for regex, repl in pairs(tt) do
        text = gsub(text, regex, repl)
    end
 
    return text
end
 
return export