Modul:translit/bg

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 bulgariska.
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/bg")
latin_text = Translit.tr("bulgarisk 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
test2_example:
Passed mut.tr("Анна") Anna Anna
Passed mut.tr("Борис") Boris Boris
Passed mut.tr("Волга") Volga Volga
Passed mut.tr("Дон") Don Don
Passed mut.tr("Днепр") Dnepr Dnepr
Passed mut.tr("Жуковский") Zjukovskij Zjukovskij
Passed mut.tr("Замятин") Zamjatin Zamjatin
Passed mut.tr("Ирина") Irina Irina
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("Онега") Onega Onega
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("Тихонов") Tichonov Tichonov
Passed mut.tr("Донец") Donets Donets
Passed mut.tr("Чайковский") Tjajkovskij Tjajkovskij
Passed mut.tr("Шостакович") Sjostakovitj Sjostakovitj
Passed mut.tr("Копривщица") Koprivsjtitsa Koprivsjtitsa
Passed mut.tr("Вършец") Vărsjets Vărsjets
Passed mut.tr("Жельо") Zjeljo Zjeljo
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 bulgariska.
-- 
-- För att transkribera ryska, ukrainska och
-- vitryska/belarusiska kan ett liknande system användas.
-- Det hanteras dock av särskilda moduler. Se:
-- 
-- Modul:translit/be
-- Modul:translit/ru
-- 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",
	["Г"]="G", ["г"]="g", ["Д"]="D", ["д"]="d", ["Е"]="E", ["е"]="e",
	["Ж"]="Zj", ["ж"]="zj", ["З"]="Z", ["з"]="z", ["И"]="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", ["Щ"]="Sjt", ["щ"]="sjt", ["Ъ"]="Ă", ["ъ"]="ă",
	["Ь"]="J", ["ь"]="j", ["Э"]="E", ["э"]="e", ["Ю"]="Ju", ["ю"]="ju",
	["Я"]="Ja", ["я"]="ja"
}

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
			Q.enqueue(latin_q, x)
		elseif mw.ustring.find(x, "[стзСТЗ]") then
			Q.enqueue(latin_q, latin_by_cyrillic[x])
			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[x])
		end
	until Q.isEmpty(cyrillic_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