Modul:translit/be
Dokumentation för denna modul finns på /dok (redigera), /test
Syfte
redigera- Den här modulen translittererar belarusiska/vitryska.
- För en beskrivning av språkspecifika saker att ta i beaktning, se dokumentationen för
{{tr}}
.
Användning
redigeralocal Translit = require("Modul:translit/be") latin_text = Translit.tr("belarusisk text")
Specifikation
redigera- Publika funktioner:
tr("text")
Returnerar innehållet i "text" translittererat till latinska bokstäver på det svenska sättet.
Tester
redigeraAll tests passed. (refresh)
Text | Expected | Actual | |
---|---|---|---|
mut.tr("арты́кул") | artýkul | artýkul |
Text | Expected | Actual | |
---|---|---|---|
mut.tr("Анна") | Anna | Anna | |
mut.tr("Борис") | Boris | Boris | |
mut.tr("Волга") | Volha | Volha | |
mut.tr("Гродна") | Hrodna | Hrodna | |
mut.tr("Дон") | Don | Don | |
mut.tr("Афанасьев") | Afanasiev | Afanasiev | |
mut.tr("Днепр") | Dnepr | Dnepr | |
mut.tr("Евгений") | Jevhenij | Jevhenij | |
mut.tr("Алексеев") | Aleksejev | Aleksejev | |
mut.tr("Кондратьев") | Kondratiev | Kondratiev | |
mut.tr("Чёрный") | Tjornyj | Tjornyj | |
mut.tr("Аксёнов") | Aksionov | Aksionov | |
mut.tr("Фёдор") | Fjodor | Fjodor | |
mut.tr("Пётр") | Pjotr | Pjotr | |
mut.tr("Зёрнов") | Ziornov | Ziornov | |
mut.tr("Щёлкин") | Sjtjolkin | Sjtjolkin | |
mut.tr("Жуковский") | Zjukovskij | Zjukovskij | |
mut.tr("Замятин") | Zamjatin | Zamjatin | |
mut.tr("Мінск") | Minsk | Minsk | |
mut.tr("Толстой") | Tolstoj | Tolstoj | |
mut.tr("Куприн") | Kuprin | Kuprin | |
mut.tr("Лесков") | Leskov | Leskov | |
mut.tr("Максим") | Maksim | Maksim | |
mut.tr("Надя") | Nadja | Nadja | |
mut.tr("Онега") | Oneha | Oneha | |
mut.tr("Пушкин") | Pusjkin | Pusjkin | |
mut.tr("Ростропович") | Rostropovitj | Rostropovitj | |
mut.tr("Самара") | Samara | Samara | |
mut.tr("Толстой") | Tolstoj | Tolstoj | |
mut.tr("Устинов") | Ustinov | Ustinov | |
mut.tr("Магілёў") | Mahiljoŭ | Mahiljoŭ | |
mut.tr("Фёдор") | Fjodor | Fjodor | |
mut.tr("Тихонов") | Tichonov | Tichonov | |
mut.tr("Донец") | Donets | Donets | |
mut.tr("Чайковский") | Tjajkovskij | Tjajkovskij | |
mut.tr("Шостакович") | Sjostakovitj | Sjostakovitj | |
mut.tr("Белы") | Bely | Bely | |
mut.tr("Ильич") | Iljitj | Iljitj | |
mut.tr("Гомель") | Homel | Homel | |
mut.tr("Игорь") | Ihor | Ihor | |
mut.tr("Эдуард") | Eduard | Eduard | |
mut.tr("Юрий") | Jurij | Jurij | |
mut.tr("Актюбинск") | Aktiubinsk | Aktiubinsk | |
mut.tr("Союз") | Sojuz | Sojuz | |
mut.tr("Татьяна") | Tatiana | Tatiana | |
mut.tr("Зябков") | Ziabkov | Ziabkov | |
mut.tr("Ярослав") | Jaroslav | Jaroslav |
-- Denna modul används för att transkribera belarusiska/vitryska.
--
-- För att transkribera bulgariska, ukrainska och
-- ryska kan ett liknande system användas. Det hanteras dock av
-- särskilda moduler. Se:
--
-- Modul:translit/ru
-- Modul:translit/bg
-- Modul:translit/uk
--
-- 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) [[Användare:Gabbe]]
local export = {}
local Q = require("Modul:queue")
local multibyte_char_pattern = ".[\128-\191]*"
latin_by_cyrillic = {
["А"]="A", ["а"]="a", ["Б"]="B", ["б"]="b", ["В"]="V", ["в"]="v",
["Г"]="H", ["г"]="h", ["Д"]="D", ["д"]="d", ["Е"]="E", ["е"]="e",
["Ё"]="Jo", ["ё"]="jo", ["Ж"]="Zj", ["ж"]="zj", ["З"]="Z", ["з"]="z",
["І"]="I", ["і"]="i", ["И"]="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",
["Х"]="Ch", ["х"]="ch", ["Ц"]="Ts", ["ц"]="ts", ["Ч"]="Tj", ["ч"]="tj",
["Ш"]="Sj", ["ш"]="sj", ["Щ"]="Sjtj", ["щ"]="sjtj", ["Ъ"]="", ["ъ"]="",
["Ы"]="Y", ["ы"]="y", ["Ь"]="J", ["ь"]="j", ["Э"]="E", ["э"]="e",
["Ю"]="Ju", ["ю"]="ju", ["Я"]="Ja", ["я"]="ja"
}
-- Själva transkriberingsfunktionen för vitryska/belarusiska
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[x] then -- icke-kyrilliskt tecken
Q.enqueue(latin_q, x)
elseif (Q.isEmpty(latin_q) or u == " ") and x == "Е" then
Q.enqueue(latin_q, "Je")
elseif (Q.isEmpty(latin_q) or u == " ") and x == "е" then
Q.enqueue(latin_q, "je")
elseif x == "ь" then
if y == "и" then
Q.enqueue(latin_q, "ji")
Q.dequeue(cyrillic_q)
end
elseif x == "Ь" then
if y == "и" then
Q.enqueue(latin_q, "Ji")
Q.dequeue(cyrillic_q)
elseif y == "И" then
Q.enqueue(latin_q, "JI")
Q.dequeue(cyrillic_q)
end
elseif mw.ustring.find(x, "[стзСТЗ]") then
Q.enqueue(latin_q, latin_by_cyrillic[x])
if y == "ь" then
if z == "е" then
Q.enqueue(latin_q, "ie")
Q.dequeue(cyrillic_q)
Q.dequeue(cyrillic_q)
elseif z == "ё" then
Q.enqueue(latin_q, "io")
Q.dequeue(cyrillic_q)
Q.dequeue(cyrillic_q)
elseif 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, "io")
Q.dequeue(cyrillic_q)
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
elseif mw.ustring.find(x, "[шщчжШЩЧЖ]") then
Q.enqueue(latin_q, latin_by_cyrillic[x])
if y == "ё" then
Q.enqueue(latin_q, "o")
Q.dequeue(cyrillic_q)
end
elseif x == "е" then
if mw.ustring.find(u, "[aeouiAEOUI]") or u == accent then
Q.enqueue(latin_q, "je")
else
Q.enqueue(latin_q, "e")
end
else
Q.enqueue(latin_q, latin_by_cyrillic[x])
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)
return table.concat(tbl, "")
end
return export