Vés al contingut

Mòdul:Ca-trans

De la Viquipèdia, l'enciclopèdia lliure
Icona de documentació de mòdul Documentació del mòdul [ mostra ] [ modifica el codi ] [ mostra l'historial ] [ refresca ]

Mòdul Ca-trans (codi · ús · discussió · proves · tests · casos prova | subpàgines · enllaços)

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


Funcions auxiliars per a transcripcions en altres mòduls. Corregeix els accents d'acord amb les regles d'accentuació del català. Vegeu els mòduls per a cada llengua amb el format "Mòdul:xx-trans" on "xx" és el codi de llengua.

local p = {}

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

-- separació de síl·labes en català per les regles d'accentuació de síl·labes agudes o planes
-- la funció és una simplificació de l'original a [[wikt:Mòdul:ca-general]]
function p.sil(mot)
	local sil = mw.ustring.lower(mot)
	-- Diftongs creixents
	sil = mw.ustring.gsub(sil, "[qg]u[aáeéiíoóuú]", "110")
	sil = mw.ustring.gsub(sil, "[aáeéiíoóuú][iu][aáeéiíoóuú]", "010")
	sil = mw.ustring.gsub(sil, "^(h?)[iu][aáeéioóu]", "%110")
	-- Diftongs decreixents
	sil = mw.ustring.gsub(sil, "[0aáeéioóu][u]", "02")
	sil = mw.ustring.gsub(sil, "[0aáeéoóuú][i]", "02")
	-- Nuclis vocàlics
	sil = mw.ustring.gsub(sil, "[aáeéiíoóuú]", "0")
	-- Codes finals
	sil = string.gsub(sil, "%l$", "2")
	sil = string.gsub(sil, "%l2$", "22")
	sil = string.gsub(sil, "%l22$", "222")
	-- Obertures
	sil = string.gsub(sil, "^%l", "1")
	sil = string.gsub(sil, "^1%l", "11")
	sil = string.gsub(sil, "^11%l", "111")
	sil = string.gsub(sil, "[ptcfbdg]r", "11")
	sil = string.gsub(sil, "[pcfbg]l", "11")
	sil = string.gsub(sil, "%l0", "10")
	-- Codes interiors
	sil = string.gsub(sil, "[ps][%l1]", "21")
	sil = string.gsub(sil, "%l([12])", "2%1")
	-- Separació de síl·labes
	local anterior = ""
	local motSil = ""
	for i = 1, mw.ustring.len(mot) do
		actual = mw.ustring.sub(sil,i,i)
		if (actual == "0" or actual == "1") and (anterior == "0" or anterior == "2") then
			motSil = motSil .. "·"
		end
		motSil = motSil .. mw.ustring.sub(mot,i,i)
		anterior = actual
	end
	return motSil
end

-- regles d'accentuació en català
function p.accents(latin)
	-- d'entrada tots els accents són tancats, la conversió a oberts es fa a posteriori
	local char_acc = {["A"..AC]="Á", ["E"..AC]="É", ["I"..AC]="Í", ["O"..AC]="Ó", ["U"..AC]="Ú", 
		["a"..AC]="á", ["e"..AC]="é", ["i"..AC]="í", ["o"..AC]="ó", ["u"..AC]="ú"}
	local sil = mw.text.split(p.sil(mw.ustring.gsub(latin, "." .. AC, char_acc)), '·')
	
	if #sil == 1 then -- monosíl·laba sense accent
		latin = mw.ustring.gsub(latin, AC, "")
	elseif mw.ustring.find(sil[#sil], "[ÁáÉéÍíÓóÚú]") then -- aguda
		if not (mw.ustring.find(latin, "[aeiou]" .. AC .. "s?$") or mw.ustring.find(latin, "[ei]" .. AC .. "n$")) then
			if not mw.ustring.find(latin, "iu" .. AC) then -- hiat excepte diftong ciríl·lic ю
				latin = mw.ustring.gsub(latin, "([aeoiu][iu])" .. AC, "%1" .. DI)
			end
			latin = mw.ustring.gsub(latin, "gui" .. DI, "gui")
			latin = mw.ustring.gsub(latin, AC, "")
		end
	elseif mw.ustring.find(sil[#sil-1], "[ÁáÉéÍíÓóÚú]") 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
	return latin
end

return p