Módulo:AFI
Ir a la navegación
Ir a la búsqueda
La documentación para este módulo puede ser creada en Módulo:AFI/doc
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 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