Modulo:Traslittera
Aspetto
La documentazione per questo modulo può essere creata in Modulo:Traslittera/man
-- =========================================================
-- Module:Translittera
-- Traslitterazione accademica avanzata
--
-- Lingue supportate:
--
-- ru = russo
-- uk = ucraino
-- be = bielorusso
-- bg = bulgaro
-- grc = greco antico (academic)
--
-- =========================================================
-- CARATTERISTICHE
-- =========================================================
--
-- ✔ Traslitterazione scientifica
-- ✔ Greco polictonico completo
-- ✔ Spiriti dolci e aspri
-- ✔ Accenti
-- ✔ Circonflessi
-- ✔ Vocali lunghe (ē / ō)
-- ✔ Vocali brevi (ĕ / ŏ)
-- ✔ Dittonghi politonici completi
-- ✔ Protezione dei dittonghi
-- ✔ Iota sottoscritto
-- ✔ Gamma nasale
-- ✔ Gamma dolce completo
-- ✔ Rho aspirato
-- ✔ Eccezioni lessicali
-- ✔ Unicode NFC
-- ✔ Ordine regole stabile
-- ✔ Compatibile MediaWiki/Scribunto
--
-- =========================================================
-- UTILIZZO CON #INVOKE
-- =========================================================
--
-- {{#invoke:Translittera|translit|grc|Ὅτι}}
-- → Hóti
--
-- {{#invoke:Translittera|translit|grc|σοῦ}}
-- → soû
--
-- {{#invoke:Translittera|translit|grc|εἰς}}
-- → eis
--
-- {{#invoke:Translittera|translit|grc|τοῖς}}
-- → toîs
--
-- {{#invoke:Translittera|translit|grc|οὐρανοῖς}}
-- → ouranoîs
--
-- {{#invoke:Translittera|translit|grc|ἐλθέτω}}
-- → ĕlthétō
--
-- {{#invoke:Translittera|translit|grc|ἁγιασθήτω}}
-- → haghiasthétō
--
-- {{#invoke:Translittera|translit|grc|γῆς}}
-- → ghês
--
-- {{#invoke:Translittera|translit|grc|ὡς}}
-- → hos
--
-- {{#invoke:Translittera|show|grc|Ὅτι}}
-- → Ὅτι (Hóti)
--
-- =========================================================
local p = {}
local data = {}
-- =========================================================
-- RUSSO
-- =========================================================
data.ru = {
["А"]="A", ["а"]="a",
["Б"]="B", ["б"]="b",
["В"]="V", ["в"]="v",
["Г"]="G", ["г"]="g",
["Д"]="D", ["д"]="d",
["Е"]="E", ["е"]="e",
["Ё"]="Jo", ["ё"]="jo",
["Ж"]="Ž", ["ж"]="ž",
["З"]="Z", ["з"]="z",
["И"]="I", ["и"]="i",
["Й"]="J", ["й"]="j",
["К"]="K", ["к"]="k",
["Л"]="L", ["л"]="l",
["М"]="M", ["м"]="m",
["Н"]="N", ["н"]="n",
["О"]="O", ["о"]="o",
["П"]="P", ["п"]="p",
["Р"]="R", ["р"]="r",
["С"]="S", ["с"]="s",
["Т"]="T", ["т"]="t",
["У"]="U", ["у"]="u",
["Ф"]="F", ["ф"]="f",
["Х"]="H", ["х"]="h",
["Ц"]="C", ["ц"]="c",
["Ч"]="Č", ["ч"]="č",
["Ш"]="Š", ["ш"]="š",
["Щ"]="Šč", ["щ"]="šč",
["Ъ"]="", ["ъ"]="",
["Ы"]="Y", ["ы"]="y",
["Ь"]="'", ["ь"]="'",
["Э"]="È", ["э"]="è",
["Ю"]="Ju", ["ю"]="ju",
["Я"]="Ja", ["я"]="ja",
}
-- =========================================================
-- UCRAINO
-- =========================================================
data.uk = {
["А"]="A", ["а"]="a",
["Б"]="B", ["б"]="b",
["В"]="V", ["в"]="v",
["Г"]="H", ["г"]="h",
["Ґ"]="G", ["ґ"]="g",
["Д"]="D", ["д"]="d",
["Е"]="E", ["е"]="e",
["Є"]="Je", ["є"]="je",
["Ж"]="Ž", ["ж"]="ž",
["З"]="Z", ["з"]="z",
["И"]="Y", ["и"]="y",
["І"]="I", ["і"]="i",
["Ї"]="Ji", ["ї"]="ji",
["Й"]="J", ["й"]="j",
["К"]="K", ["к"]="k",
["Л"]="L", ["л"]="l",
["М"]="M", ["м"]="m",
["Н"]="N", ["н"]="n",
["О"]="O", ["о"]="o",
["П"]="P", ["п"]="p",
["Р"]="R", ["р"]="r",
["С"]="S", ["с"]="s",
["Т"]="T", ["т"]="t",
["У"]="U", ["у"]="u",
["Ф"]="F", ["ф"]="f",
["Х"]="H", ["х"]="h",
["Ц"]="C", ["ц"]="c",
["Ч"]="Č", ["ч"]="č",
["Ш"]="Š", ["ш"]="š",
["Щ"]="Šč", ["щ"]="šč",
["Ь"]="'", ["ь"]="'",
["Ю"]="Ju", ["ю"]="ju",
["Я"]="Ja", ["я"]="ja",
}
-- =========================================================
-- BIELORUSSO
-- =========================================================
data.be = {
["А"]="A", ["а"]="a",
["Б"]="B", ["б"]="b",
["В"]="V", ["в"]="v",
["Г"]="H", ["г"]="h",
["Д"]="D", ["д"]="d",
["Е"]="Je", ["е"]="je",
["Ё"]="Jo", ["ё"]="jo",
["Ж"]="Ž", ["ж"]="ž",
["З"]="Z", ["з"]="z",
["І"]="I", ["і"]="i",
["Й"]="J", ["й"]="j",
["К"]="K", ["к"]="k",
["Л"]="L", ["л"]="l",
["М"]="M", ["м"]="m",
["Н"]="N", ["н"]="n",
["О"]="O", ["о"]="o",
["П"]="P", ["п"]="p",
["Р"]="R", ["р"]="r",
["С"]="S", ["с"]="s",
["Т"]="T", ["т"]="t",
["У"]="U", ["у"]="u",
["Ў"]="Ŭ", ["ў"]="ŭ",
["Ф"]="F", ["ф"]="f",
["Х"]="H", ["х"]="h",
["Ц"]="C", ["ц"]="c",
["Ч"]="Č", ["ч"]="č",
["Ш"]="Š", ["ш"]="š",
["Ы"]="Y", ["ы"]="y",
["Ь"]="'", ["ь"]="'",
["Э"]="È", ["э"]="è",
["Ю"]="Ju", ["ю"]="ju",
["Я"]="Ja", ["я"]="ja",
}
-- =========================================================
-- BULGARO
-- =========================================================
data.bg = {
["А"]="A", ["а"]="a",
["Б"]="B", ["б"]="b",
["В"]="V", ["в"]="v",
["Г"]="G", ["г"]="g",
["Д"]="D", ["д"]="d",
["Е"]="E", ["е"]="e",
["Ж"]="Ž", ["ж"]="ž",
["З"]="Z", ["з"]="z",
["И"]="I", ["и"]="i",
["Й"]="J", ["й"]="j",
["К"]="K", ["к"]="k",
["Л"]="L", ["л"]="l",
["М"]="M", ["м"]="m",
["Н"]="N", ["н"]="n",
["О"]="O", ["о"]="o",
["П"]="P", ["п"]="p",
["Р"]="R", ["р"]="r",
["С"]="S", ["с"]="s",
["Т"]="T", ["т"]="t",
["У"]="U", ["у"]="u",
["Ф"]="F", ["ф"]="f",
["Х"]="H", ["х"]="h",
["Ц"]="C", ["ц"]="c",
["Ч"]="Č", ["ч"]="č",
["Ш"]="Š", ["ш"]="š",
["Щ"]="Št", ["щ"]="št",
["Ъ"]="Ă", ["ъ"]="ă",
["Ь"]="J", ["ь"]="j",
["Ю"]="Ju", ["ю"]="ju",
["Я"]="Ja", ["я"]="ja",
}
-- =========================================================
-- GRECO ANTICO
-- =========================================================
data.grc = {
["α"]="a", ["Α"]="A",
["β"]="b", ["Β"]="B",
["γ"]="g", ["Γ"]="G",
["δ"]="d", ["Δ"]="D",
["ε"]="ĕ", ["Ε"]="Ĕ",
["ζ"]="z", ["Ζ"]="Z",
["η"]="ē", ["Η"]="Ē",
["θ"]="th", ["Θ"]="Th",
["ι"]="i", ["Ι"]="I",
["κ"]="k", ["Κ"]="K",
["λ"]="l", ["Λ"]="L",
["μ"]="m", ["Μ"]="M",
["ν"]="n", ["Ν"]="N",
["ξ"]="x", ["Ξ"]="X",
["ο"]="ŏ", ["Ο"]="Ŏ",
["π"]="p", ["Π"]="P",
["ρ"]="r", ["Ρ"]="R",
["σ"]="s", ["Σ"]="S",
["ς"]="s",
["τ"]="t", ["Τ"]="T",
-- upsilon isolata
["υ"]="y", ["Υ"]="Y",
["φ"]="ph", ["Φ"]="Ph",
["χ"]="kh", ["Χ"]="Kh",
["ψ"]="ps", ["Ψ"]="Ps",
["ω"]="ō", ["Ω"]="Ō",
}
-- =========================================================
-- IOTA SOTTOSCRITTO
-- =========================================================
local iotaSubscript = {
{"ᾳ","āi"},
{"ῃ","ēi"},
{"ῳ","ōi"},
{"ᾷ","âi"},
{"ῇ","êi"},
{"ῷ","ôi"},
}
-- =========================================================
-- DITTONGHI GRECO ANTICO
-- =========================================================
local ancientDiphthongs = {
{"αἰ","ai"},
{"αἴ","aí"},
{"αἲ","aì"},
{"αἶ","aî"},
{"αῖ","aî"},
{"Αἰ","Ai"},
{"Αἴ","Aí"},
{"Αἲ","Aì"},
{"Αἶ","Aî"},
{"Αῖ","Aî"},
{"αι","ai"},
{"Αι","Ai"},
{"εἰ","ei"},
{"εἴ","eí"},
{"εἲ","eì"},
{"εἶ","eî"},
{"εῖ","eî"},
{"Εἰ","Ei"},
{"Εἴ","Eí"},
{"Εἲ","Eì"},
{"Εἶ","Eî"},
{"Εῖ","Eî"},
{"ει","ei"},
{"Ει","Ei"},
{"οἰ","oi"},
{"οἴ","oí"},
{"οἲ","oì"},
{"οἶ","oî"},
{"οῖ","oî"},
{"Οἰ","Oi"},
{"Οἴ","Oí"},
{"Οἲ","Oì"},
{"Οἶ","Oî"},
{"Οῖ","Oî"},
{"οι","oi"},
{"Οι","Oi"},
{"οῦ","oû"},
{"Οῦ","Oû"},
{"οὖ","oû"},
{"Οὖ","Oû"},
{"ού","oú"},
{"Ού","Oú"},
{"οὺ","où"},
{"Οὺ","Où"},
{"οὐ","ou"},
{"Οὐ","Ou"},
{"ου","ou"},
{"Ου","Ou"},
{"ΟΥ","OU"},
}
-- =========================================================
-- GAMMA NASALE
-- =========================================================
local nasalGamma = {
{"γγ","ng"},
{"Γγ","Ng"},
{"γκ","nk"},
{"Γκ","Nk"},
{"γξ","nx"},
{"Γξ","Nx"},
{"γχ","nkh"},
{"Γχ","Nkh"},
}
-- =========================================================
-- GAMMA DOLCE COMPLETO
-- =========================================================
local softGamma = {
{"γε","ghĕ"},
{"γέ","ghé"},
{"γὲ","ghè"},
{"γη","ghē"},
{"γή","ghé"},
{"γὴ","ghè"},
{"γῆ","ghê"},
{"γι","ghi"},
{"γί","ghí"},
{"γὶ","ghì"},
{"γῖ","ghî"},
{"γο","ghŏ"},
{"γό","ghó"},
{"γὸ","ghò"},
{"γυ","ghy"},
{"γύ","ghý"},
{"γὺ","ghỳ"},
{"γῦ","ghŷ"},
{"γω","ghō"},
{"γώ","ghṓ"},
{"γὼ","ghṑ"},
{"γῶ","ghô"},
{"Γε","Ghĕ"},
{"Γέ","Ghé"},
{"Γὲ","Ghè"},
{"Γη","Ghē"},
{"Γή","Ghé"},
{"Γὴ","Ghè"},
{"Γῆ","Ghê"},
}
-- =========================================================
-- ECCEZIONI LESSICALI
-- =========================================================
local specialGreek = {
{"ὡς", "hos"},
{"Ὥς", "Hos"},
}
-- =========================================================
-- POLITONICO COMPLETO
-- =========================================================
local polytonic = {
{"ῥῦ", "rhŷ"},
{"ῤ", "r"},
{"ῥ", "rh"},
{"Ῥ", "Rh"},
{"ἀ","a"},
{"ἐ","ĕ"},
{"ἰ","i"},
{"ὀ","ŏ"},
{"ὐ","y"},
{"ἠ","ē"},
{"ὠ","ō"},
{"ἁ","ha"},
{"ἑ","hĕ"},
{"ἱ","hi"},
{"ὁ","hŏ"},
{"ὑ","hy"},
{"ἡ","hē"},
{"ὡ","hō"},
{"ἄ","á"},
{"ἅ","há"},
{"ἔ","é"},
{"ἕ","hé"},
{"ἤ","é"},
{"ἥ","hé"},
{"ἴ","í"},
{"ἵ","hí"},
{"ὄ","ó"},
{"ὅ","hó"},
{"ἆ","â"},
{"ἇ","hâ"},
{"ἦ","ê"},
{"ἧ","hê"},
{"ῶ","ô"},
{"ὦ","ô"},
{"ὧ","hô"},
}
-- =========================================================
-- APPLICA REGOLE
-- =========================================================
local function applyRules(text, rules)
for _, rule in ipairs(rules) do
local pattern = rule[1]
local replacement = rule[2]
text = mw.ustring.gsub(
text,
pattern,
replacement
)
end
return text
end
-- =========================================================
-- TRASLITTERAZIONE
-- =========================================================
local function transliterate(text, lang)
local map = data[lang]
if not map then
return text
end
text = tostring(text)
text = mw.text.decode(text)
text = mw.ustring.toNFC(text)
if lang == "grc" then
text = applyRules(text, iotaSubscript)
text = applyRules(text, ancientDiphthongs)
text = applyRules(text, nasalGamma)
text = applyRules(text, softGamma)
text = applyRules(text, specialGreek)
text = applyRules(text, polytonic)
end
local result = {}
for char in mw.ustring.gcodepoint(text) do
local c = mw.ustring.char(char)
table.insert(
result,
map[c] or c
)
end
return table.concat(result)
end
-- =========================================================
-- SOLO TRASLITTERAZIONE
-- =========================================================
function p.translit(frame)
local lang = frame.args[1] or ""
local text = frame.args[2] or ""
return transliterate(text, lang)
end
-- =========================================================
-- VISUALIZZAZIONE COMPLETA
-- =========================================================
function p.show(frame)
local lang = frame.args[1] or ""
local text = frame.args[2] or ""
local translit =
transliterate(text, lang)
return
text ..
" (" ..
translit ..
")"
end
-- =========================================================
-- SHORTCUTS
-- =========================================================
function p.ru(frame)
frame.args[1] = "ru"
return p.show(frame)
end
function p.uk(frame)
frame.args[1] = "uk"
return p.show(frame)
end
function p.be(frame)
frame.args[1] = "be"
return p.show(frame)
end
function p.bg(frame)
frame.args[1] = "bg"
return p.show(frame)
end
function p.grc(frame)
frame.args[1] = "grc"
return p.show(frame)
end
return p