Módulo:lenguas
Módulo que almacena y gestiona la información relacionada con las lenguas: idiomas y familias de idiomas.
La lista completa de submódulos acá.Esta documentación está transcluida desde Módulo:lenguas/doc.
Los editores pueden experimentar en la zona de pruebas de este módulo.
Por favor, añade las categorías e interwikis a la subpágina de documentación. Subpáginas de este módulo.
Los editores pueden experimentar en la zona de pruebas de este módulo.
Por favor, añade las categorías e interwikis a la subpágina de documentación. Subpáginas de este módulo.
local export = {}
local ERROR_DE_CODIGO = " es un código no válido, por favor visite [[Wikcionario:Códigos de idioma]] para encontrar el código adecuado."
local NOMBRE = 1
local QID = 2
local FAMILIA = 3
local SCRIPT = 4
function export.cod_a_familia(cod, no_error)
local m_familias = mw.loadData("Módulo:lenguas/familias")
local familia = m_familias[cod]
if not familia then
if no_error then
return nil
else
error(cod..ERROR_DE_CODIGO)
end
end
return familia
end
function export.cod_a_idioma(cod, no_error)
local req = nil
if #cod == 2 then
req = "Módulo:lenguas/idiomas/2"
elseif #cod == 3 then
if cod:sub(1,1) >= "a" and cod:sub(1,1) <= 'z' then
req = "Módulo:lenguas/idiomas/"..cod:sub(1,1)
end
else
req = "Módulo:lenguas/idiomas/+"
end
if not req then
if no_error then
return nil
else
error(cod..ERROR_DE_CODIGO)
end
end
local m = mw.loadData(req)
local idioma = m[cod]
if not idioma then
if no_error then
return nil
else
error(cod..ERROR_DE_CODIGO)
end
end
return idioma
end
function export.cod_a_nombre(cod)
return (export.cod_a_idioma(cod))[NOMBRE]
end
function export.plantilla_cod_a_nombre(frame)
local cod = frame.args[1]
return (export.cod_a_idioma(cod))[NOMBRE]
end
function export.plantilla_cod_a_familia(frame)
local cod = frame.args[1]
return (export.cod_a_familia(cod))[NOMBRE]
end
function export.plantilla_cod_a_script(frame)
local cod = frame.args[1]
return (export.cod_a_idioma(cod))[SCRIPT]
end
-- Respetando el formato de Módulo:DAG -> arreglo de nodos, primero los padres, después el valor y después lo hijos
function export.obtener_dag(nodo, es_familia_)
local insert = table.insert
local ucfirst = require("Módulo:String").ucfirst
local m_familias = mw.loadData("Módulo:lenguas/familias")
local nombre_familia_
if nodo[FAMILIA] then
local n_ = export.cod_a_familia(nodo[FAMILIA])[NOMBRE]
nombre_familia_ = n_:sub(1,1):upper()..n_:sub(2)
else
nombre_familia_ = nil
end
local dag = {}
local id = 0
local function generar_id()
id = id+1
return id
end
-- ya no es necesario
--local function generar_nombre(nodo, es_familia)
-- return es_familia and "lenguas "..nodo[NOMBRE] or nodo[NOMBRE]
--end
local function obtener_nodo(cod)
if not cod then
return nil
end
local nodo = export.cod_a_idioma(cod, true)
if nodo then
return nodo, false
else
nodo = export.cod_a_familia(cod, true)
if nodo then
return nodo, true
else
return nil
end
end
end
local function obtener_rama(nodo, nombre_nodo, cod_padres)
if not cod_padres then
return
end
for cod_padre in cod_padres:gmatch("([^,]+)%s*,?%s*") do
local nodo_padre, padre_es_familia = obtener_nodo(cod_padre)
assert(nodo_padre, cod_padre..ERROR_DE_CODIGO)
local nombre_padre = nodo_padre[NOMBRE]
if not dag[nombre_padre] then
dag[nombre_padre] = {generar_id(), {}, {}}
insert(dag[nombre_nodo][2], dag[nombre_padre][1])
insert(dag[nombre_padre][3], dag[nombre_nodo][1])
obtener_rama(nodo_padre, nombre_padre, nodo_padre.ancestors and nodo_padre.ancestors or nodo_padre[FAMILIA])
else -- Si el padre ya existía, no vuelvo a repetir el mismo recorrido para no tener nodos duplicados
insert(dag[nombre_nodo][2], dag[nombre_padre][1])
insert(dag[nombre_padre][3], dag[nombre_nodo][1])
end
end
end
local nombre_nodo = nodo[NOMBRE]
dag[nombre_nodo] = {generar_id(), {}, {}}
obtener_rama(nodo, nombre_nodo, nodo.ancestors and nodo.ancestors or nodo[FAMILIA])
local dag_ = {}
for nodo,datos in pairs(dag) do
dag_[datos[1]] = {datos[2], nodo, datos[3]}
end
return dag_, nombre_familia_
end
return export