-- Denna modul används för att transkribera ukrainska.
--
-- För att transkribera bulgariska, ryska och vitryska/belarusiska kan
-- ett liknande system användas. Det hanteras dock av särskilda moduler. Se:
--
-- Modul:translit/be
-- Modul:translit/bg
-- Modul:translit/ru
--
-- Systemet för translitterering följer det som anges i
-- "Svenska skrivregler" (2017), fjärde upplagan, red. Ola Karlsson
-- En kopia av avsnittet finns i skrivande stund här:
-- https://www.isof.se/download/18.648bef4b18093ee2f03ee80/1652364347434/Kyrillisk%20tabell%20SS2017.pdf
--
-- Denna modul används av följande mall:
-- {{tr}}
--
-- Modulen är författad av (och underhålls av) ]
local export = {}
local Q = require("Modul:queue")
local multibyte_char_pattern = ".*"
local latin_by_cyrillic = { ="A", ="a", ="B", ="b", ="V",
="v", ="H", ="h", ="G", ="g", ="D", ="d",
="E", ="e", ="Je", ="je", ="Zj", ="zj",
="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", ="Ch", ="ch", ="Ts", ="ts",
="Tj", ="tj", ="Sj", ="sj", ="Sjtj", ="sjtj",
="", ="", ="J", ="j", ="E", ="e",
="Ju", ="ju", ="Ja", ="ja"
}
-- Själva transkriberingsfunktionen för ukrainska
function export.tr (text)
cyrillic_q = Q()
latin_q = Q()
for c in string.gmatch(text, multibyte_char_pattern) do
Q.enqueue(cyrillic_q, c)
end
repeat
local x = Q.dequeue(cyrillic_q)
local y = Q.peekFirst(cyrillic_q)
local z = Q.peekSecond(cyrillic_q)
local u = Q.peekLast(latin_q)
local accent = "́"
if not latin_by_cyrillic then
Q.enqueue(latin_q, x)
elseif x == "ь" then
if y == "и" then
Q.enqueue(latin_q, "j")
end
elseif x == "Ь" then
if y == "и" or y == "И" then
Q.enqueue(latin_q, "J")
end
elseif mw.ustring.find(x, "") then
Q.enqueue(latin_q,latin_by_cyrillic)
if y == "ь" then
if z == "ю" then
Q.enqueue(latin_q,"iu")
Q.dequeue(cyrillic_q)
Q.dequeue(cyrillic_q)
elseif z == "я" then
Q.enqueue(latin_q,"ia")
Q.dequeue(cyrillic_q)
Q.dequeue(cyrillic_q)
end
elseif y == "ю" then
Q.enqueue(latin_q,"iu")
Q.dequeue(cyrillic_q)
elseif y == "я" then
Q.enqueue(latin_q,"ia")
Q.dequeue(cyrillic_q)
end
else
Q.enqueue(latin_q, latin_by_cyrillic)
end
until Q.isEmpty(cyrillic_q)
local tbl = {}
repeat
local x = Q.dequeue(latin_q)
local y = Q.peekFirst(latin_q) or ""
local accent = "́"
if y == accent then
x = mw.ustring.toNFC(x .. y)
Q.dequeue(latin_q)
end
table.insert(tbl, x)
until Q.isEmpty(latin_q)
text = table.concat(tbl, "")
return text
end
return export