Modul:translit/uk

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 ukrainska.
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/uk")
latin_text = Translit.tr("ukrainsk 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
test01_uppercase_letters_in_isolation:
Passed mut.tr("А,Б,В,Г,Ґ,Д") A,B,V,H,G,D A,B,V,H,G,D
Passed mut.tr("Е,Є,Ж,З,И,І") E,Je,Zj,Z,Y,I E,Je,Zj,Z,Y,I
Passed mut.tr("Ї,Й,К,Л,М,Н") Ji,J,K,L,M,N Ji,J,K,L,M,N
Passed mut.tr("О,П,Р,С,Т,У") O,P,R,S,T,U O,P,R,S,T,U
Passed mut.tr("Ф,Х,Ц,Ч,Ш,Щ") F,Ch,Ts,Tj,Sj,Sjtj F,Ch,Ts,Tj,Sj,Sjtj
Passed mut.tr("Э,Ю,Я") E,Ju,Ja E,Ju,Ja
Text Expected Actual
test02_lowercase_letters_in_isolation:
Passed mut.tr("а,б,в,г,ґ,д") a,b,v,h,g,d a,b,v,h,g,d
Passed mut.tr("е,є,ж,з,и,і") e,je,zj,z,y,i e,je,zj,z,y,i
Passed mut.tr("ї,й,к,л,м,н") ji,j,k,l,m,n ji,j,k,l,m,n
Passed mut.tr("о,п,р,с,т,у") o,p,r,s,t,u o,p,r,s,t,u
Passed mut.tr("ф,х,ц,ч,ш,щ") f,ch,ts,tj,sj,sjtj f,ch,ts,tj,sj,sjtj
Passed mut.tr("э,ю,я") e,ju,ja e,ju,ja
Text Expected Actual
test02_special_orthographic_letters:
Passed mut.tr("Ъ,Ь") , ,
Passed mut.tr("ъ,ь") , ,
Text Expected Actual
test03_i_rather_than_j_after_s_or_t_or_z:
Passed mut.tr("сю,ся") siu,sia siu,sia
Passed mut.tr("тю,тя") tiu,tia tiu,tia
Passed mut.tr("зю,зя") ziu,zia ziu,zia
Passed mut.tr("сью,сья") siu,sia siu,sia
Passed mut.tr("тью,тья") tiu,tia tiu,tia
Passed mut.tr("зью,зья") ziu,zia ziu,zia
Passed mut.tr("Сю,Ся") Siu,Sia Siu,Sia
Passed mut.tr("Тю,Тя") Tiu,Tia Tiu,Tia
Passed mut.tr("Зю,Зя") Ziu,Zia Ziu,Zia
Passed mut.tr("Сью,Сья") Siu,Sia Siu,Sia
Passed mut.tr("Тью,Тья") Tiu,Tia Tiu,Tia
Passed mut.tr("Зью,Зья") Ziu,Zia Ziu,Zia
Text Expected Actual
test99_reference:
Passed mut.tr("Кривий Ріг") Kryvyj Rih Kryvyj Rih
Passed mut.tr("Ґалаґан") Galagan Galagan
Passed mut.tr("Миколаїв") Mykolajiv Mykolajiv
Passed mut.tr("Городище") Horodysjtje Horodysjtje
Passed mut.tr("Донецьк") Donetsk Donetsk


-- 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) [[Användare:Gabbe]]

local export = {}
local Q = require("Modul:queue")

local multibyte_char_pattern = ".[\128-\191]*"

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[x] 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[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)
    	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