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