Más idiomas
Más acciones
El Alfabeto Fonético Internacional (AFI en español, API en francés e IPA en inglés) es un sistema de notación fonética creado por lingüistas. Su propósito es establecer, de forma regularizada, precisa y única, la representación de los sonidos del habla de cualquier lengua, y en el ámbito profesional lo usan frecuentemente lingüistas, logopedas, terapeutas, maestros de lengua extranjera, lexicógrafos y traductores. En su forma básica (en 2005) tiene aproximadamente 107 símbolos básicos y 55 modificadores.
local z = {}
local ModuloTablas = require('Módulo:Tablas')
local datos = mw.loadData('Módulo:AFI/datos')
local function enlaceSim(sim)
if sim == '[' or sim == ']' then
return mw.text.nowiki(sim)
elseif sim ~= '/' and mw.text.trim(sim) then
local art = datos.fonemas[mw.text.trim(sim)]
if art then
return '[[' .. art ..'|' .. sim .. ']]'
end
end
return sim
end
local function separarSims(afi)
local puntos = { mw.ustring.codepoint(afi, 1, mw.ustring.len(afi)) }
local res = {}
local i = 1
while puntos[i] do
local tam = 0
-- Si hay caracteres unidos por una ligadura entre U+035C y U+0362
if puntos[i+2] and puntos[i+1] > 859 and puntos[i+1] < 867 then
tam = 2
end
-- Si hay caracteres seguidos de un diacritico entre U+0300 y U+035B
if puntos[i+tam+1] and puntos[i+tam+1] > 767 and puntos[i+tam+1] < 860 then
tam = tam + 1
end
table.insert(res, mw.ustring.sub(afi, i, i+tam))
i = i + tam + 1
end
return res
end
function z.AFI(args, frame)
local elem = mw.html.create('span'):addClass('AFI-bloque')
local cats = ''
-- Datos:idioma
local idioma
if args.idioma then
idioma = mw.language.fetchLanguageName(args.idioma, 'es')
if mw.ustring.len(idioma) == 0 then
local tidioma = datos.lenguas[args.idioma]
if tidioma == nil then
idioma = nil
cats = cats .. '[[Categoría:' .. datos.cadenas.lengerr .. ']]'
else
idioma = tidioma[1]
if #tidioma == 2 then
cats = cats .. '[[Categoría:' .. datos.cadenas.plancat .. tidioma[2] .. ']]'
else
cats = cats .. '[[Categoría:' .. datos.cadenas.plancat .. tidioma[1] .. ']]'
end
end
else
cats = cats .. '[[Categoría:' .. datos.cadenas.plancat .. idioma .. ']]'
end
else
cats = cats .. '[[Categoría:' .. datos.cadenas.noleng .. ']]'
end
-- Texto
local texto = elem:tag('span'):addClass('AFI-texto')
if args.tipo then
local tipo = datos.tipos[args.tipo]
if args.tipo == 'p' or args.tipo == 'l' or args.tipo == 'a' then
texto:wikitext(tipo .. ' ')
elseif (args.tipo == 'i' or args.tipo == 'n') and idioma then
texto:wikitext(mw.ustring.format(tipo, idioma) .. ' ')
end
else
return error("Debe especificar el tipo de uso")
end
-- Pronunciacion
local afispan = elem:tag('span'):addClass('IPA')
if not args.enlaces then
local enlaces = {}
local fonemas = separarSims(args.pron)
local simbolo
for k, v in ipairs(fonemas) do
simbolo = enlaceSim(v)
if simbolo then
table.insert(enlaces, simbolo)
end
end
--   = Six-Per-Em Space, de lo contrario ʃ toca [ en windows
if mw.ustring.match(enlaces[1], '[ʃɲjʄɟ]') then
table.insert(enlaces, 1, ' ')
end
if mw.ustring.match(enlaces[#enlaces], '[ʃʈɭʄɖɻʠʧ]' ) then
table.insert(enlaces, ' ')
end
-- Añade // si no lo tiene
if not (enlaces[1] == '[' or enlaces[1] == '/') then
table.insert(enlaces, 1, '/')
table.insert(enlaces, '/')
end
afispan:wikitext(table.concat(enlaces))
-- Si no se quieren enlaces
else
afispan:wikitext(args.pron)
end
-- Audio
if args.audio then
elem:wikitext(' ')
elem:tag('small'):addClass('AFI-audio'):wikitext('(🔊︎ [[Media:' .. args.audio .. '|escuchar]])')
cats = cats .. '[[Categoría:' .. datos.cadenas.audiocat .. ']]'
end
-- Ayuda
if datos.ayuda[args.idioma] then
elem:wikitext(' ')
elem:tag('sup'):addClass('AFI-ayuda'):attr('style', 'font-weight: bold; text-decoration: none'):wikitext('[[Ayuda:AFI/'..datos.ayuda[args.idioma]..'|?]]')
--elem:tag('u'):addClass('AFI-ayuda'):attr('style', 'font-weight: bold; text-decoration: none'):wikitext('[[Ayuda:AFI/'..datos.ayuda[args.idioma]..'|❓]]')
end
if mw.title:getCurrentTitle().namespace == 0 then
return tostring(elem) .. cats
else
return tostring(elem)
end
end
function z._AFI(frame)
local ModuloArgumentos = require('Módulo:Argumentos')
local argumentos = ModuloArgumentos.obtenerArgumentosConValor(frame)
local obj = {
pron = argumentos[1],
tipo = argumentos[2] or 'x',
idioma = argumentos[3],
audio = argumentos[4],
enlaces = argumentos[5]
}
return z.AFI(obj)
end
return z