Mòdul:ka-trans

De Viccionari
Icona de documentació de mòdul Documentació del mòdul[mostra] [modifica] [refresca]

A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]


Mòdul per a la transcripció automàtica del georgià segons w:Viquipèdia:Transcripció del georgià. És usat per altres mòduls i indirectament per les plantilles {{entrada}}, {{m}} i {{trad}}.

local p = {}

local u = mw.ustring.char
local GR = u(0x0300) -- grave =  ̀
local AC = u(0x0301) -- acute = ˊ
local DI = u(0x0308) -- diaeresis = ¨

local tt = {
	["ა"]="a", ["ბ"]="b", ["გ"]="g", ["დ"]="d", ["ე"]="e", ["ვ"]="v", ["ზ"]="z", ["ჱ"]="eï",
	["თ"]="t", ["ი"]="i", ["კ"]="k", ["ლ"]="l", ["მ"]="m", ["ნ"]="n", ["ჲ"]="i", ["ო"]="o",
	["პ"]="p", ["ჟ"]="j", ["რ"]="r", ["ს"]="s", ["ტ"]="t", ["ჳ"]="uï", ["უ"]="u", ["ფ"]="p",
	["ქ"]="k", ["ღ"]="g", ["ყ"]="k", ["შ"]="x", ["ჩ"]="tx", ["ც"]="ts",
	["ძ"]="dz", ["წ"]="ts", ["ჭ"]="tx", ["ხ"]="kh", ["ჴ"]="kh", ["ჯ"]="dj", ["ჰ"]="h", ["ჵ"]="o",
	["ჶ"]="f", ["ჷ"]="ə", ["ჸ"]="ʾ", ["ჺ"]="ʿ" 
}

local function wtr(geor)
	local latin = mw.ustring.gsub(geor, '.', tt)
	
	-- accentuació
	local sil = mw.text.split(require("Mòdul:ca-general").sil(latin), "·")
	if not mw.ustring.find("[" .. AC .. GR .. "]", latin) then
		if #sil == 2 then -- accent en primera síl·laba
			sil[1] = mw.ustring.gsub(sil[1], "[AEIOUaeiou]", "%1" .. AC, 1)
		elseif #sil > 2 then -- esdrúixola
			sil[#sil - 2] = mw.ustring.gsub(sil[#sil - 2], "[AEIOUaeiou]", "%1" .. AC, 1)
		end
	end
	-- regles d'accentuació en català
	latin = table.concat(sil)
	if #sil == 1 then -- monosíl·laba sense accent
		latin = mw.ustring.gsub(latin, AC, "")
	elseif mw.ustring.find(sil[#sil], AC) then -- aguda
		if not (mw.ustring.find(latin, "[aeiou]" .. AC .. "s?$") or mw.ustring.find(latin, "[ei]" .. AC .. "n$")) then
			latin = mw.ustring.gsub(latin, "([aeoiu][iu])" .. AC, "%1" .. DI)
			latin = mw.ustring.gsub(latin, "gui" .. DI, "gui")
			latin = mw.ustring.gsub(latin, AC, "")
		end
	elseif mw.ustring.find(sil[#sil-1], AC) then -- plana
		if string.find(latin, "[aeiou]s?$") or string.find(latin, "[ei]n$") then
			if not string.find(latin, "[aeiou][iu]$") then
				latin = mw.ustring.gsub(latin, "([aeoiu][iu])" .. AC, "%1" .. DI)
				latin = mw.ustring.gsub(latin, "gui" .. DI, "gui")
				latin = mw.ustring.gsub(latin, AC, "")
			end
		end
	end
	local char_acc = {["A"..AC]="À", ["E"..AC]="È", ["I"..AC]="Í", ["O"..AC]="Ò", ["U"..AC]="Ú", 
		["a"..AC]="à", ["e"..AC]="è", ["i"..AC]="í", ["i"..DI]="ï", ["o"..AC]="ò", ["u"..AC]="ú", ["u"..DI]="ü"}
	latin = mw.ustring.gsub(latin, ".[" .. AC .. DI .. "]", char_acc)
	
	-- correcció gue/gui
	latin = mw.ustring.gsub(latin, "([Gg])([eèií])", "%1u%2")
	
	-- correcció intervocàlica ss, ix
	latin = mw.ustring.gsub(latin, "([AEIOUaeiouÀÉÍÓÚàéíóú])s([aeiouàéíóú])", "%1ss%2")
	latin = mw.ustring.gsub(latin, "([AEOUaeouÀÉÓÚàéóúü])x", "%1ix")
	
	return latin
end

-- Transliterates text, a single word or phrase.
function p.tr(text)
	if type(text) == "table" then text = text.args[1] end
	local trwords = {}
	for word in mw.text.gsplit(text, '%s') do
		table.insert(trwords, wtr(word))
	end
	
	return table.concat(trwords, ' ')
end

return p