-- Denna modul används för att transkribera antik grekiska till svenska.
--
-- För att transkribera modern grekiska kan ett liknande system användas.
-- Det hanteras dock av särskilda moduler. Se:
--
-- [TODO]
--
--
-- Denna modul strävar efter att följa det system som används av
-- "Library of Congress". Det finns i skrivande stund beskrivet här:
--
-- https://www.loc.gov/catdir/cpso/romanization/greek.pdf
--
-- Några avsteg har gjorts för att bättre reflektera hur orden vanligen
-- transkriberas till svenska. Exempelvis förvandlas φρόνησις till "frónēsis",
-- inte "phronēsis".
--
-- Notera att det finns andra sätt för att transkribera forngrekiska.
-- Notera även att denna modul inte (ännu) hanterar skriftsystem som Linear B
-- eller den cypriska stavelseskriften.
--
-- Lägg också märke till att denna version av modulen hanterar de flesta
-- diakriter på ett ganska styvmoderligt sätt. Framtida versioner kan
-- (och bör) göra detta mer nyanserat.
--
--
-- Denna modul används av följande mall:
-- {{tr}}
--
-- Modulen är författad av (och underhålls av) [[Användare:Gabbe]]
local export = {}
local Q = require("Modul:queue")
local multibyte_char_pattern = ".[\128-\191]*"
local acute_accent = "́"
-- börja med de vanligaste bokstäverna
latin_by_greek = {
["Α"]="A", ["α"]="a",
["Β"]="B", ["β"]="b",
["Γ"]="G", ["γ"]="g",
["Δ"]="D", ["δ"]="d",
["Ε"]="E", ["ε"]="e",
["Ζ"]="Z", ["ζ"]="z",
["Η"]="Ē", ["η"]="ē",
["Θ"]="Th", ["θ"]="th",
["Ι"]="I", ["ι"]="i",
["Κ"]="K", ["κ"]="k",
["Λ"]="L", ["λ"]="l",
["Μ"]="M", ["μ"]="m",
["Ν"]="N", ["ν"]="n",
["Ξ"]="X", ["ξ"]="x",
["Ο"]="O", ["ο"]="o",
["Π"]="P", ["π"]="p",
["Ρ"]="R", ["ρ"]="r",
["Σ"]="S", ["σ"]="s", ["ς"]="s",
["Τ"]="T", ["τ"]="t",
["Υ"]="Y", ["υ"]="y",
["Φ"]="F", ["φ"]="f",
["Χ"]="Ch", ["χ"]="ch",
["Ψ"]="Ps", ["ψ"]="ps",
["Ω"]="Ō", ["ω"]="ō"
}
-- särvariant av beta
latin_by_greek["ϐ"]=latin_by_greek["β"]
-- särvariant av theta
latin_by_greek["ϑ"]=latin_by_greek["θ"]
-- särvariant av sigma
latin_by_greek["Ϲ"]=latin_by_greek["Σ"]; latin_by_greek["ϲ"]=latin_by_greek["σ"]
-- två arkaiska bokstäver
latin_by_greek["Ϝ"]="W"; latin_by_greek["ϝ"]="w"
latin_by_greek["Ϙ"]="Ḳ"; latin_by_greek["ϙ"]="ḳ"
-- sen en separat tabell för att hålla reda på vilka som har "spiritus asper":
spiritus_asper = {
["Ἁ"] = true, ["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true,
["Ὑ"] = true, ["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true,
["Ῥ"] = true, ["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true,
["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true,
["ᾭ"] = true, ["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true,
["Ὃ"] = true, ["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true,
["ᾫ"] = true, ["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true,
["Ὧ"] = true, ["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true,
["ἁ"] = true, ["ἑ"] = true, ["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true,
["ὑ"] = true, ["ὡ"] = true, ["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true,
["ῥ"] = true, ["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true,
["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true,
["ᾥ"] = true, ["ἃ"] = true, ["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true,
["ὃ"] = true, ["ὓ"] = true, ["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true,
["ᾣ"] = true, ["ἇ"] = true, ["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true,
["ὧ"] = true, ["ᾇ"] = true, ["ᾗ"] = true, ["ᾧ"] = true,
}
-- sen en separat tabell för versalerna:
versaler = {
["Α"] = true, ["Ε"] = true, ["Η"] = true, ["Ι"] = true, ["Ο"] = true,
["Υ"] = true, ["Ω"] = true, ["ᾼ"] = true, ["ῌ"] = true, ["ῼ"] = true,
["Ρ"] = true, ["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true,
["Ό"] = true, ["Ύ"] = true, ["Ώ"] = true, ["Ὰ"] = true, ["Ὲ"] = true,
["Ὴ"] = true, ["Ὶ"] = true, ["Ὸ"] = true, ["Ὺ"] = true, ["Ὼ"] = true,
["Ἀ"] = true, ["Ἐ"] = true, ["Ἠ"] = true, ["Ἰ"] = true, ["Ὀ"] = true,
["Ὠ"] = true, ["ᾈ"] = true, ["ᾘ"] = true, ["ᾨ"] = true, ["Ἄ"] = true,
["Ἔ"] = true, ["Ἤ"] = true, ["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true,
["ᾌ"] = true, ["ᾜ"] = true, ["ᾬ"] = true, ["Ἂ"] = true, ["Ἒ"] = true,
["Ἢ"] = true, ["Ἲ"] = true, ["Ὂ"] = true, ["Ὢ"] = true, ["ᾊ"] = true,
["ᾚ"] = true, ["ᾪ"] = true, ["Ἆ"] = true, ["Ἦ"] = true, ["Ἶ"] = true,
["Ὦ"] = true, ["ᾎ"] = true, ["ᾞ"] = true, ["ᾮ"] = true, ["Ἁ"] = true,
["Ἑ"] = true, ["Ἡ"] = true, ["Ἱ"] = true, ["Ὁ"] = true, ["Ὑ"] = true,
["Ὡ"] = true, ["ᾉ"] = true, ["ᾙ"] = true, ["ᾩ"] = true, ["Ῥ"] = true,
["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true, ["Ὅ"] = true,
["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true, ["ᾭ"] = true,
["Ἃ"] = true, ["Ἓ"] = true, ["Ἣ"] = true, ["Ἳ"] = true, ["Ὃ"] = true,
["Ὓ"] = true, ["Ὣ"] = true, ["ᾋ"] = true, ["ᾛ"] = true, ["ᾫ"] = true,
["Ἇ"] = true, ["Ἧ"] = true, ["Ἷ"] = true, ["Ὗ"] = true, ["Ὧ"] = true,
["ᾏ"] = true, ["ᾟ"] = true, ["ᾯ"] = true, ["Ᾱ"] = true, ["Ῑ"] = true,
["Ῡ"] = true, ["Ᾰ"] = true, ["Ῐ"] = true, ["Ῠ"] = true,
}
-- sen en för gemenerna:
gemener = {
["α"] = true, ["ε"] = true, ["η"] = true, ["ι"] = true, ["ο"] = true,
["υ"] = true, ["ω"] = true, ["ᾳ"] = true, ["ῃ"] = true, ["ῳ"] = true,
["ρ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ὰ"] = true, ["ὲ"] = true, ["ὴ"] = true, ["ὶ"] = true,
["ὸ"] = true, ["ὺ"] = true, ["ὼ"] = true, ["ᾲ"] = true, ["ῂ"] = true,
["ῲ"] = true, ["ᾶ"] = true, ["ῆ"] = true, ["ῖ"] = true, ["ῦ"] = true,
["ῶ"] = true, ["ᾷ"] = true, ["ῇ"] = true, ["ῷ"] = true, ["ἀ"] = true,
["ἐ"] = true, ["ἠ"] = true, ["ἰ"] = true, ["ὀ"] = true, ["ὐ"] = true,
["ὠ"] = true, ["ᾀ"] = true, ["ᾐ"] = true, ["ᾠ"] = true, ["ῤ"] = true,
["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true, ["ὄ"] = true,
["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true, ["ᾤ"] = true,
["ἂ"] = true, ["ἒ"] = true, ["ἢ"] = true, ["ἲ"] = true, ["ὂ"] = true,
["ὒ"] = true, ["ὢ"] = true, ["ᾂ"] = true, ["ᾒ"] = true, ["ᾢ"] = true,
["ἆ"] = true, ["ἦ"] = true, ["ἶ"] = true, ["ὖ"] = true, ["ὦ"] = true,
["ᾆ"] = true, ["ᾖ"] = true, ["ᾦ"] = true, ["ἁ"] = true, ["ἑ"] = true,
["ἡ"] = true, ["ἱ"] = true, ["ὁ"] = true, ["ὑ"] = true, ["ὡ"] = true,
["ᾁ"] = true, ["ᾑ"] = true, ["ᾡ"] = true, ["ῥ"] = true, ["ἅ"] = true,
["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true, ["ὅ"] = true, ["ὕ"] = true,
["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true, ["ᾥ"] = true, ["ἃ"] = true,
["ἓ"] = true, ["ἣ"] = true, ["ἳ"] = true, ["ὃ"] = true, ["ὓ"] = true,
["ὣ"] = true, ["ᾃ"] = true, ["ᾓ"] = true, ["ᾣ"] = true, ["ἇ"] = true,
["ἧ"] = true, ["ἷ"] = true, ["ὗ"] = true, ["ὧ"] = true, ["ᾇ"] = true,
["ᾗ"] = true, ["ᾧ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
["ᾱ"] = true, ["ῑ"] = true, ["ῡ"] = true, ["ᾰ"] = true, ["ῐ"] = true,
["ῠ"] = true, ["ϱ"] = true,
}
-- sen en tabell för de med akut accent:
with_tonos = {
["Ά"] = true, ["Έ"] = true, ["Ή"] = true, ["Ί"] = true, ["Ό"] = true,
["Ύ"] = true, ["Ώ"] = true, ["Ἄ"] = true, ["Ἔ"] = true, ["Ἤ"] = true,
["Ἴ"] = true, ["Ὄ"] = true, ["Ὤ"] = true, ["ᾌ"] = true, ["ᾜ"] = true,
["ᾬ"] = true, ["Ἅ"] = true, ["Ἕ"] = true, ["Ἥ"] = true, ["Ἵ"] = true,
["Ὅ"] = true, ["Ὕ"] = true, ["Ὥ"] = true, ["ᾍ"] = true, ["ᾝ"] = true,
["ᾭ"] = true, ["ά"] = true, ["έ"] = true, ["ή"] = true, ["ί"] = true,
["ό"] = true, ["ύ"] = true, ["ώ"] = true, ["ᾴ"] = true, ["ῄ"] = true,
["ῴ"] = true, ["ἄ"] = true, ["ἔ"] = true, ["ἤ"] = true, ["ἴ"] = true,
["ὄ"] = true, ["ὔ"] = true, ["ὤ"] = true, ["ᾄ"] = true, ["ᾔ"] = true,
["ᾤ"] = true, ["ἅ"] = true, ["ἕ"] = true, ["ἥ"] = true, ["ἵ"] = true,
["ὅ"] = true, ["ὕ"] = true, ["ὥ"] = true, ["ᾅ"] = true, ["ᾕ"] = true,
["ᾥ"] = true, ["ΐ"] = true, ["ΰ"] = true,
}
-- sen några separata tabeller för att hålla reda på vilken slags bokstav det är
alfa = {
["α"] = true, ["𝛂"] = true, ["𝛼"] = true, ["𝜶"] = true, ["𝝰"] = true,
["𝞪"] = true, ["Α"] = true, ["𝚨"] = true, ["𝛢"] = true, ["𝜜"] = true,
["𝝖"] = true, ["𝞐"] = true, ["ἀ"] = true, ["Ἀ"] = true, ["ἄ"] = true,
["Ἄ"] = true, ["ᾄ"] = true, ["ᾌ"] = true, ["ἂ"] = true, ["Ἂ"] = true,
["ᾂ"] = true, ["ᾊ"] = true, ["ἆ"] = true, ["Ἆ"] = true, ["ᾆ"] = true,
["ᾎ"] = true, ["ᾀ"] = true, ["ᾈ"] = true, ["ἁ"] = true, ["Ἁ"] = true,
["ἅ"] = true, ["Ἅ"] = true, ["ᾅ"] = true, ["ᾍ"] = true, ["ἃ"] = true,
["Ἃ"] = true, ["ᾃ"] = true, ["ᾋ"] = true, ["ἇ"] = true, ["Ἇ"] = true,
["ᾇ"] = true, ["ᾏ"] = true, ["ᾁ"] = true, ["ᾉ"] = true, ["ά"] = true,
["ά"] = true, ["Ά"] = true, ["Ά"] = true, ["ᾴ"] = true, ["ὰ"] = true,
["Ὰ"] = true, ["ᾲ"] = true, ["ᾰ"] = true, ["Ᾰ"] = true, ["ᾶ"] = true,
["ᾷ"] = true, ["ᾱ"] = true, ["Ᾱ"] = true, ["ᾳ"] = true, ["ᾼ"] = true,
}
gamma = {
["γ"] = true, ["𝛄"] = true, ["𝛾"] = true, ["𝜸"] = true, ["𝝲"] = true,
["𝞬"] = true, ["Γ"] = true, ["𝚪"] = true, ["𝛤"] = true, ["𝜞"] = true,
["𝝘"] = true, ["𝞒"] = true, ["ℽ"] = true, ["ℾ"] = true, ["ᵞ"] = true,
["ᵧ"] = true, ["ᴦ"] = true,
}
epsilon = {
["ε"] = true, ["ϵ"] = true, ["𝛆"] = true, ["𝛜"] = true, ["𝜀"] = true,
["𝜖"] = true, ["𝜺"] = true, ["𝝐"] = true, ["𝝴"] = true, ["𝞊"] = true,
["𝞮"] = true, ["𝟄"] = true, ["Ε"] = true, ["𝚬"] = true, ["𝛦"] = true,
["𝜠"] = true, ["𝝚"] = true, ["𝞔"] = true, ["ἐ"] = true, ["Ἐ"] = true,
["ἔ"] = true, ["Ἔ"] = true, ["ἒ"] = true, ["Ἒ"] = true, ["ἑ"] = true,
["Ἑ"] = true, ["ἕ"] = true, ["Ἕ"] = true, ["ἓ"] = true, ["Ἓ"] = true,
["έ"] = true, ["έ"] = true, ["Έ"] = true, ["Έ"] = true, ["ὲ"] = true,
["Ὲ"] = true,
}
eta = {
["η"] = true, ["𝛈"] = true, ["𝜂"] = true, ["𝜼"] = true, ["𝝶"] = true,
["𝞰"] = true, ["Η"] = true, ["𝚮"] = true, ["𝛨"] = true, ["𝜢"] = true,
["𝝜"] = true, ["𝞖"] = true, ["ἠ"] = true, ["Ἠ"] = true, ["ἤ"] = true,
["Ἤ"] = true, ["ᾔ"] = true, ["ᾜ"] = true, ["ἢ"] = true, ["Ἢ"] = true,
["ᾒ"] = true, ["ᾚ"] = true, ["ἦ"] = true, ["Ἦ"] = true, ["ᾖ"] = true,
["ᾞ"] = true, ["ᾐ"] = true, ["ᾘ"] = true, ["ἡ"] = true, ["Ἡ"] = true,
["ἥ"] = true, ["Ἥ"] = true, ["ᾕ"] = true, ["ᾝ"] = true, ["ἣ"] = true,
["Ἣ"] = true, ["ᾓ"] = true, ["ᾛ"] = true, ["ἧ"] = true, ["Ἧ"] = true,
["ᾗ"] = true, ["ᾟ"] = true, ["ᾑ"] = true, ["ᾙ"] = true, ["ή"] = true,
["ή"] = true, ["Ή"] = true, ["Ή"] = true, ["ῄ"] = true, ["ὴ"] = true,
["Ὴ"] = true, ["ῂ"] = true, ["ῆ"] = true, ["ῇ"] = true, ["ῃ"] = true,
["ῌ"] = true,
}
jota = {
["ι"] = true, ["𝛊"] = true, ["𝜄"] = true, ["𝜾"] = true, ["𝝸"] = true,
["𝞲"] = true, ["Ι"] = true, ["𝚰"] = true, ["𝛪"] = true, ["𝜤"] = true,
["𝝞"] = true, ["𝞘"] = true, ["ἰ"] = true, ["Ἰ"] = true, ["ἴ"] = true,
["Ἴ"] = true, ["ἲ"] = true, ["Ἲ"] = true, ["ἶ"] = true, ["Ἶ"] = true,
["ἱ"] = true, ["Ἱ"] = true, ["ἵ"] = true, ["Ἵ"] = true, ["ἳ"] = true,
["Ἳ"] = true, ["ἷ"] = true, ["Ἷ"] = true, ["ί"] = true, ["ί"] = true,
["Ί"] = true, ["Ί"] = true, ["ὶ"] = true, ["Ὶ"] = true, ["ῐ"] = true,
["Ῐ"] = true, ["ῖ"] = true, ["ϊ"] = true, ["Ϊ"] = true, ["ΐ"] = true,
["ΐ"] = true, ["ῒ"] = true, ["ῗ"] = true, ["ῑ"] = true, ["Ῑ"] = true,
["ι"] = true, ["ͺ"] = true,
}
kappa = {
["κ"] = true, ["ϰ"] = true, ["𝛋"] = true, ["𝛞"] = true, ["𝜅"] = true,
["𝜘"] = true, ["𝜿"] = true, ["𝝒"] = true, ["𝝹"] = true, ["𝞌"] = true,
["𝞳"] = true, ["𝟆"] = true, ["Κ"] = true, ["𝚱"] = true, ["𝛫"] = true,
["𝜥"] = true, ["𝝟"] = true, ["𝞙"] = true, ["ϗ"] = true, ["Ϗ"] = true,
}
xi = {
["ξ"] = true, ["𝛏"] = true, ["𝜉"] = true, ["𝝃"] = true, ["𝝽"] = true,
["𝞷"] = true, ["Ξ"] = true, ["𝚵"] = true, ["𝛯"] = true, ["𝜩"] = true,
["𝝣"] = true, ["𝞝"] = true,
}
omikron = {
["ο"] = true, ["𝛐"] = true, ["𝜊"] = true, ["𝝄"] = true, ["𝝾"] = true,
["𝞸"] = true, ["Ο"] = true, ["𝚶"] = true, ["𝛰"] = true, ["𝜪"] = true,
["𝝤"] = true, ["𝞞"] = true, ["ὀ"] = true, ["Ὀ"] = true, ["ὄ"] = true,
["Ὄ"] = true, ["ὂ"] = true, ["Ὂ"] = true, ["ὁ"] = true, ["Ὁ"] = true,
["ὅ"] = true, ["Ὅ"] = true, ["ὃ"] = true, ["Ὃ"] = true, ["ό"] = true,
["ό"] = true, ["Ό"] = true, ["Ό"] = true, ["ὸ"] = true, ["Ὸ"] = true,
}
rho = {
["ρ"] = true, ["ϱ"] = true, ["𝛒"] = true, ["𝛠"] = true, ["𝜌"] = true,
["𝜚"] = true, ["𝝆"] = true, ["𝝔"] = true, ["𝞀"] = true, ["𝞎"] = true,
["𝞺"] = true, ["𝟈"] = true, ["Ρ"] = true, ["𝚸"] = true, ["𝛲"] = true,
["𝜬"] = true, ["𝝦"] = true, ["𝞠"] = true, ["ᵨ"] = true, ["ῤ"] = true,
["ῥ"] = true, ["Ῥ"] = true, ["ᴩ"] = true, ["ϼ"] = true,
}
ypsilon = {
["υ"] = true, ["𝛖"] = true, ["𝜐"] = true, ["𝝊"] = true, ["𝞄"] = true,
["𝞾"] = true, ["Υ"] = true, ["ϒ"] = true, ["𝚼"] = true, ["𝛶"] = true,
["𝜰"] = true, ["𝝪"] = true, ["𝞤"] = true, ["ὐ"] = true, ["ὔ"] = true,
["ὒ"] = true, ["ὖ"] = true, ["ὑ"] = true, ["Ὑ"] = true, ["ὕ"] = true,
["Ὕ"] = true, ["ὓ"] = true, ["Ὓ"] = true, ["ὗ"] = true, ["Ὗ"] = true,
["ύ"] = true, ["ύ"] = true, ["Ύ"] = true, ["Ύ"] = true, ["ϓ"] = true,
["ὺ"] = true, ["Ὺ"] = true, ["ῠ"] = true, ["Ῠ"] = true, ["ῦ"] = true,
["ϋ"] = true, ["Ϋ"] = true, ["ϔ"] = true, ["ΰ"] = true, ["ΰ"] = true,
["ῢ"] = true, ["ῧ"] = true, ["ῡ"] = true, ["Ῡ"] = true,
}
chi = {
["χ"] = true, ["𝛘"] = true, ["𝜒"] = true, ["𝝌"] = true, ["𝞆"] = true,
["𝟀"] = true, ["Χ"] = true, ["𝚾"] = true, ["𝛸"] = true, ["𝜲"] = true,
["𝝬"] = true, ["𝞦"] = true, ["ᵡ"] = true, ["ᵪ"] = true
}
omega = {
["ω"] = true, ["𝛚"] = true, ["𝜔"] = true, ["𝝎"] = true, ["𝞈"] = true,
["𝟂"] = true, ["Ω"] = true, ["𝛀"] = true, ["𝛺"] = true, ["𝜴"] = true,
["𝝮"] = true, ["𝞨"] = true, ["ὠ"] = true, ["Ὠ"] = true, ["ὤ"] = true,
["Ὤ"] = true, ["ᾤ"] = true, ["ᾬ"] = true, ["ὢ"] = true, ["Ὢ"] = true,
["ᾢ"] = true, ["ᾪ"] = true, ["ὦ"] = true, ["Ὦ"] = true, ["ᾦ"] = true,
["ᾮ"] = true, ["ᾠ"] = true, ["ᾨ"] = true, ["ὡ"] = true, ["Ὡ"] = true,
["ὥ"] = true, ["Ὥ"] = true, ["ᾥ"] = true, ["ᾭ"] = true, ["ὣ"] = true,
["Ὣ"] = true, ["ᾣ"] = true, ["ᾫ"] = true, ["ὧ"] = true, ["Ὧ"] = true,
["ᾧ"] = true, ["ᾯ"] = true, ["ᾡ"] = true, ["ᾩ"] = true, ["ώ"] = true,
["ώ"] = true, ["Ώ"] = true, ["Ώ"] = true, ["ῴ"] = true, ["ὼ"] = true,
["Ὼ"] = true, ["ῲ"] = true, ["ῶ"] = true, ["ῷ"] = true, ["ῳ"] = true,
["ῼ"] = true, ["ꭥ"] = true, ["Ω"] = true, ["㏀"] = true, ["㏁"] = true,
}
-- de som har två prickar ovanför vokalen
hiatus = {
["Ϊ"] = true, ["Ϋ"] = true, ["ϊ"] = true, ["ϋ"] = true, ["ΐ"] = true,
["ΰ"] = true, ["ῒ"] = true, ["ῢ"] = true, ["ῗ"] = true, ["ῧ"] = true,
}
-- generera tabellen för de övriga bokstäverna med diverse diakritiska tecken
for i,v in pairs(versaler) do
if(alfa[i]) then
latin_by_greek[i] = latin_by_greek["Α"]
if(spiritus_asper[i]) then
latin_by_greek[i] = "H"..latin_by_greek["α"]
end
elseif(epsilon[i]) then
latin_by_greek[i] = latin_by_greek["Ε"]
if(spiritus_asper[i]) then
latin_by_greek[i] = "H"..latin_by_greek["ε"]
end
elseif(eta[i]) then
latin_by_greek[i] = latin_by_greek["Η"]
if(spiritus_asper[i]) then
latin_by_greek[i] = "H"..latin_by_greek["η"]
end
elseif(jota[i]) then
latin_by_greek[i] = latin_by_greek["Ι"]
if(spiritus_asper[i]) then
latin_by_greek[i] = "H"..latin_by_greek["ι"]
end
elseif(omikron[i]) then
latin_by_greek[i] = latin_by_greek["Ο"]
if(spiritus_asper[i]) then
latin_by_greek[i] = "H"..latin_by_greek["ο"]
end
elseif(rho[i]) then
latin_by_greek[i] = latin_by_greek["Ρ"]
if(spiritus_asper[i]) then
latin_by_greek[i] = latin_by_greek[i].."h"
end
elseif(ypsilon[i]) then
latin_by_greek[i] = latin_by_greek["Υ"]
if(spiritus_asper[i]) then
latin_by_greek[i] = "H"..latin_by_greek["υ"]
end
elseif(omega[i]) then
latin_by_greek[i] = latin_by_greek["Ω"]
if(spiritus_asper[i]) then
latin_by_greek[i] = "H"..latin_by_greek["ω"]
end
end
if with_tonos[i] then
latin_by_greek[i] = mw.ustring.toNFC(latin_by_greek[i] .. acute_accent)
end
end
for i,v in pairs(gemener) do
if(alfa[i]) then
latin_by_greek[i] = latin_by_greek["α"]
elseif(epsilon[i]) then
latin_by_greek[i] = latin_by_greek["ε"]
elseif(eta[i]) then
latin_by_greek[i] = latin_by_greek["η"]
elseif(jota[i]) then
latin_by_greek[i] = latin_by_greek["ι"]
elseif(omikron[i]) then
latin_by_greek[i] = latin_by_greek["ο"]
elseif(rho[i]) then
latin_by_greek[i] = latin_by_greek["ρ"]
elseif(ypsilon[i]) then
latin_by_greek[i] = latin_by_greek["υ"]
elseif(omega[i]) then
latin_by_greek[i] = latin_by_greek["ω"]
end
if(spiritus_asper[i]) then
if(rho[i]) then
latin_by_greek[i] = latin_by_greek[i].."h"
else
latin_by_greek[i] = "h"..latin_by_greek[i]
end
end
if with_tonos[i] then
latin_by_greek[i] = mw.ustring.toNFC(latin_by_greek[i] .. acute_accent)
end
end
-- Själva transkriberingsfunktionen för forngrekiska
function export.tr( text )
greek_q = Q()
latin_q = Q()
for c in string.gmatch(text, multibyte_char_pattern) do
Q.enqueue(greek_q, c)
end
repeat
local x = Q.dequeue(greek_q)
local y = Q.peekFirst(greek_q)
local z = Q.peekSecond(greek_q)
local u = Q.peekLast(latin_q)
local reversed_comma_above = "̔"
if not latin_by_greek[x] then -- icke-grekiskt tecken
Q.enqueue(latin_q, x)
-- diverse undantag, startar med "spiritus asper" som del av en diftong
elseif (Q.isEmpty(latin_q) or u == " ") and spiritus_asper[y] then
Q.enqueue(latin_q, string.sub(latin_by_greek[y],1,1)) -- versalt "H" eller gement "h"
if (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(with_tonos[x]) then
Q.enqueue(latin_q, "ú")
else
Q.enqueue(latin_q, "u")
end
else
Q.enqueue(latin_q, latin_by_greek[x])
end
if ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
if(with_tonos[y]) then
Q.enqueue(latin_q, "ú")
else
Q.enqueue(latin_q, "u")
end
else
Q.enqueue(latin_q, string.sub(latin_by_greek[y],2))
end
Q.dequeue(greek_q)
-- sen diftongerna "αυ", "ευ", "ηυ", "ου", "ωυ"
elseif ((alfa[x] or epsilon[x] or eta[x] or omikron[x] or omega[x]) and ypsilon[y] and (not hiatus[y])) then
Q.enqueue(latin_q, latin_by_greek[x])
if(with_tonos[y]) then
Q.enqueue(latin_q, "ú")
else
Q.enqueue(latin_q, "u")
end
Q.dequeue(greek_q)
-- sen diftongen "υι"
elseif (ypsilon[x] and jota[y] and (not hiatus[y])) then
if(with_tonos[x] and spiritus_asper[x]) then
Q.enqueue(latin_q, "hú")
elseif(with_tonos[x]) then
Q.enqueue(latin_q, "ú")
elseif(spiritus_asper[x]) then
Q.enqueue(latin_q, "hu")
else
Q.enqueue(latin_q, "u")
end
Q.enqueue(latin_q, latin_by_greek[y])
Q.dequeue(greek_q)
-- sen bokstavsföljden "γγ"
elseif (gamma[x] and gamma[y]) then
Q.enqueue(latin_q,"n")
Q.enqueue(latin_q,latin_by_greek["γ"])
Q.dequeue(greek_q)
-- sen bokstavsföljden "γκ"
elseif (gamma[x] and kappa[y]) then
Q.enqueue(latin_q,"n")
Q.enqueue(latin_q,latin_by_greek["κ"])
Q.dequeue(greek_q)
-- sen bokstavsföljden "γξ"
elseif (gamma[x] and xi[y]) then
Q.enqueue(latin_q,"n")
Q.enqueue(latin_q,latin_by_greek["ξ"])
Q.dequeue(greek_q)
-- sen bokstavsföljden "γχ"
elseif (gamma[x] and chi[y]) then
Q.enqueue(latin_q,"n")
Q.enqueue(latin_q,latin_by_greek["χ"])
Q.dequeue(greek_q)
-- sen, när "spiritus asper" hanteras med modifierare
elseif y == reversed_comma_above then
Q.enqueue(latin_q, "h") -- TODO!!! Kan detta vara versalt "H"? Diftonger?
Q.enqueue(latin_q, latin_by_greek[x])
Q.dequeue(greek_q)
else
Q.enqueue(latin_q, latin_by_greek[x])
end
until Q.isEmpty(greek_q)
local tbl = {}
repeat
local x = Q.dequeue(latin_q)
table.insert(tbl,x)
until Q.isEmpty(latin_q)
return table.concat(tbl, "")
end
return export