Modul:translit/be

Definition från Wiktionary, den fria ordlistan.
Hoppa till navigering Hoppa till sök

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[redigera]

local 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[redigera]

All tests passed. (refresh)

Text Expected Actual
test1_example:
Passed mut.tr("арты́кул") artýkul artýkul
Text Expected Actual
test2_example:
Passed mut.tr("Анна") Anna Anna
Passed mut.tr("Борис") Boris Boris
Passed mut.tr("Волга") Volha Volha
Passed mut.tr("Гродна") Hrodna Hrodna
Passed mut.tr("Дон") Don Don
Passed mut.tr("Афанасьев") Afanasiev Afanasiev
Passed mut.tr("Днепр") Dnepr Dnepr
Passed mut.tr("Евгений") Jevhenij Jevhenij
Passed mut.tr("Алексеев") Aleksejev Aleksejev
Passed mut.tr("Кондратьев") Kondratiev Kondratiev
Passed mut.tr("Чёрный") Tjornyj Tjornyj
Passed mut.tr("Аксёнов") Aksionov Aksionov
Passed mut.tr("Фёдор") Fjodor Fjodor
Passed mut.tr("Пётр") Pjotr Pjotr
Passed mut.tr("Зёрнов") Ziornov Ziornov
Passed mut.tr("Щёлкин") Sjtjolkin Sjtjolkin
Passed mut.tr("Жуковский") Zjukovskij Zjukovskij
Passed mut.tr("Замятин") Zamjatin Zamjatin
Passed mut.tr("Мінск") Minsk Minsk
Passed mut.tr("Толстой") Tolstoj Tolstoj
Passed mut.tr("Куприн") Kuprin Kuprin
Passed mut.tr("Лесков") Leskov Leskov
Passed mut.tr("Максим") Maksim Maksim
Passed mut.tr("Надя") Nadja Nadja
Passed mut.tr("Онега") Oneha Oneha
Passed mut.tr("Пушкин") Pusjkin Pusjkin
Passed mut.tr("Ростропович") Rostropovitj Rostropovitj
Passed mut.tr("Самара") Samara Samara
Passed mut.tr("Толстой") Tolstoj Tolstoj
Passed mut.tr("Устинов") Ustinov Ustinov
Passed mut.tr("Магілёў") Mahiljoŭ Mahiljoŭ
Passed mut.tr("Фёдор") Fjodor Fjodor
Passed mut.tr("Тихонов") Tichonov Tichonov
Passed mut.tr("Донец") Donets Donets
Passed mut.tr("Чайковский") Tjajkovskij Tjajkovskij
Passed mut.tr("Шостакович") Sjostakovitj Sjostakovitj
Passed mut.tr("Белы") Bely Bely
Passed mut.tr("Ильич") Iljitj Iljitj
Passed mut.tr("Гомель") Homel Homel
Passed mut.tr("Игорь") Ihor Ihor
Passed mut.tr("Эдуард") Eduard Eduard
Passed mut.tr("Юрий") Jurij Jurij
Passed mut.tr("Актюбинск") Aktiubinsk Aktiubinsk
Passed mut.tr("Союз") Sojuz Sojuz
Passed mut.tr("Татьяна") Tatiana Tatiana
Passed mut.tr("Зябков") Ziabkov Ziabkov
Passed 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