Модуль:transcription-eo

Документация
Пример Результат
{{#invoke:transcription-eo|getTranscription|Vikivortarojn}} vi.ki.vor.'ta.roi̯n
{{#invoke:transcription-eo|getTranscription|Vikivortar'}} vi.ki.vor.'tar
{{#invoke:transcription-eo|getTranscription|kaj}} 'kai̯
{{#invoke:transcription-eo|getTranscription|abomenindaĵo}} a.bo.me.nin.'da.ʒo
{{#invoke:transcription-eo|getTranscription|adresinformejo}} ad.re.sin.for.'mei̯.o
local p = {}
		
function p.getTranscription(frame)
	-- Загружаем аргументы
    local new_args = p._getParameters( frame.args, {'vorto'} )
    local vorto = new_args['vorto'] or ''
    
    -- Если есть поэтическая эллизия, то удаляем апостроф и делаем пометку
    -- на будущее
    local vortlongo = string.len(vorto)
    local finlitero = string.sub(vorto, vortlongo, vortlongo)
    local elision = false
    if finlitero == "'" then
	    vorto = string.sub(vorto, 1, vortlongo-1)
	    elision = true
	end
	
	-- Получаем массив слогов
    local getSilaboj = require( "Module:по-слогам eo" ).getSilaboj
    local silaboj = getSilaboj(vorto, true)
    
    -- преобразовываем символы слогов по правилам фонетики эсперанто
    local r = {}
    for i,v in pairs(silaboj) do
    	table.insert(r, p.ReplaceSimbols(v))
	end
	
	if #r < 2 then
	    r[#r] = "'" .. r[#r]
    else
	    if elision then
	        r[#r] = "'" .. r[#r]
	    else
	    	r[#r-1] = "'" .. r[#r-1]
        end
    end
    
    return table.concat(r, '.')
end

function p.ReplaceSimbols(s)
	s = string.lower(s)
	
	-- Дифтонги
	s = string.gsub(s, "aj", "ai̯")
    s = string.gsub(s, "aŭ", "au̯")
    s = string.gsub(s, "ej", "ei̯")
    s = string.gsub(s, "eŭ", "eu̯")
    s = string.gsub(s, "oj", "oi̯")
    s = string.gsub(s, "uj", "ui̯")
    
    -- Гласные так и остаются соответствующими гласными
    
    -- Согласные
    -- s = string.gsub(s, "b", "b")
    s = string.gsub(s, "c", "t͡s")
    s = string.gsub(s, "ĉ", "t͡ʃ")
    -- s = string.gsub(s, "d", "d")
    -- s = string.gsub(s, "f", "f")
    -- s = string.gsub(s, "g", "g")
    s = string.gsub(s, "ĝ", "d͡ʒ")
    -- s = string.gsub(s, "h", "h")
    s = string.gsub(s, "ĥ", "x")
    -- s = string.gsub(s, "j", "j")
    s = string.gsub(s, "ĵ", "ʒ")
    -- s = string.gsub(s, "k", "k")
    -- s = string.gsub(s, "l", "l")
    -- s = string.gsub(s, "m", "m")
    -- s = string.gsub(s, "n", "n")
    -- s = string.gsub(s, "p", "p")
    -- s = string.gsub(s, "r", "r")
    -- s = string.gsub(s, "s", "s")
    s = string.gsub(s, "ŝ", "ʃ")
    -- s = string.gsub(s, "t", "t")
    -- s = string.gsub(s, "v", "v")
    -- s = string.gsub(s, "z", "z")
    
    return s
end

function p._getParameters( frame_args, arg_list )
    local new_args = {};
    local index = 1;
    local value;
 
    for i,arg in ipairs( arg_list ) do
        value = frame_args[arg]
        if value == nil then
            value = frame_args[index];
            index = index + 1;
        end
        new_args[arg] = value;
    end
 
    return new_args;
end

return p