Modul:translit/uk

Hej, du har kommit hit för att leta efter betydelsen av ordet Modul:translit/uk. I DICTIOUS hittar du inte bara alla ordboksbetydelser av ordet Modul:translit/uk, utan du får också veta mer om dess etymologi, dess egenskaper och hur man säger Modul:translit/uk i singular och plural. Allt du behöver veta om ordet Modul:translit/uk finns här. Definitionen av ordet Modul:translit/uk hjälper dig att vara mer exakt och korrekt när du talar eller skriver dina texter. Genom att känna till definitionen avModul:translit/uk och andra ord berikar du ditt ordförråd och får tillgång till fler och bättre språkliga resurser.

Dokumentation för denna modul finns på /dok (redigera), /test


Syfte

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

local Translit = require("Modul:translit/uk")
latin_text = Translit.tr("ukrainsk text")

Specifikation

Publika funktioner:
  • tr("text") Returnerar innehållet i "text" translittererat till latinska bokstäver på det svenska sättet.

Tester

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

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

local multibyte_char_pattern = ".*"

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 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)
			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)
		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