Módulo:lenguas/lista
La documentación para este módulo puede ser creada en Módulo:lenguas/lista/doc
local export = {}
function export.mostrar(frame)
local c = frame.args[1]
assert (type(c) == "string" and #c == 1 and (c == "2" or c == "+" or (c >= "a" and c <= "z")))
local m = require("Módulo:lenguas/idiomas/"..c)
local m_familias = require("Módulo:lenguas/familias")
local i = 1
local filas = {}
local function link_script(script)
return "[[Wikcionario:Lista de scripts#" .. script .. "|<code>" .. script .. "</code>]]"
end
local m_str = require("Módulo:String")
local strupper = m_str.upper
local substr = m_str.sub
local function cap(s)
return strupper(substr(s, 1, 1))..substr(s, 2)
end
for cod, datos in require("Módulo:tabla").sortedPairs(m) do
local nomb, fam, scripts = datos[1], datos[3], datos[4]
local row = {
"\n|-",
"\n|", "<code>", cod, "</code>",
"\n| [[:Categoría:", cap(nomb), "|", nomb, "]]",
"\n|", ("[[Wikcionario:Familias de idiomas#%s|%s]]"):format(fam, m_familias[fam][1]),
"\n|"
}
scripts = mw.text.split(scripts, "%s*,%s*")
for j,s in ipairs(scripts) do
if j == 1 then
table.insert(row, link_script(s))
else
table.insert(row, ", "..link_script(s))
end
end
table.insert(row, "\n|")
table.insert(row, datos.otherNames and table.concat(datos.otherNames, ", ") or "")
table.insert(row,
"\n| " .. (datos.sort_key and "Sí" or "") ..
"\n| " .. (datos.entry_name and "Sí" or "")
)
filas[i] = table.concat(row)
i = i + 1
end
return table.concat {
[[
{| class="wikitable sortable mw-datatable"
! style="width: 7em;" | Cód
! style="width: 12em;" | Nombre canónico
! style="width: 12em;" | Familia
! style="width: 12em;" | Scripts
! Otros nombres
! Sort?
! Diacr?]], table.concat(filas), "\n|}"
}
end
function export.mostrar_prohibidos(frame)
local m = require("Módulo:lenguas/prohibidos")
local filas = {}
for i,p in ipairs(m) do
filas[i] = "\n|-".."\n|"..p[1].."\n|"..p[2].."\n|"..p[3]
end
return table.concat {
[[
{| class="wikitable sortable mw-datatable" style="background-color:#ffcccc;"
! style="width: 4em;" | Cód
! style="width: 16em;" | Nombre
! | Motivo de la prohibición
]], table.concat(filas), "\n|}"
}
end
function export.mostrar_familias(frame)
local familias = require("Módulo:lenguas/familias")
local idiomas = require("Módulo:lenguas/idiomas/todo")
local stats = {}
for cod, _ in pairs(familias) do
stats[cod] = {cant_idiomas_total = -1, cant_idiomas_propios = 0, subfamilias = {}}
end
for code, data in pairs(idiomas) do
local fdata = stats[data[3]]
if fdata then
fdata.cant_idiomas_propios = fdata.cant_idiomas_propios + 1
end
end
for cod, data in pairs(familias) do
local fdata = stats[data[3]]
if fdata then
table.insert(fdata.subfamilias, cod)
end
end
i = 1
local codigos = {}
for cod, _ in pairs(familias) do
codigos[i] = cod
i = i + 1
end
table.sort(codigos)
local function contar_idiomas(cod)
if stats[cod].cant_idiomas_total < 0 then
stats[cod].cant_idiomas_total = stats[cod].cant_idiomas_propios
for _,subfamilia in ipairs(stats[cod].subfamilias) do
stats[cod].cant_idiomas_total = stats[cod].cant_idiomas_total + contar_idiomas(subfamilia)
end
end
return stats[cod].cant_idiomas_total
end
local filas = {}
for i, cod in ipairs(codigos) do
local data = familias[cod]
table.insert(filas, string.format(
' id="%s"\n' ..
'| <code>%s</code>\n' ..
'| [[:Categoría:%s|%s]]\n' ..
'| %s\n' ..
'| %s\n' ..
'| %u\n' ..
'| %u\n',
cod, cod,
data[1]:sub(1,1):upper()..data[1]:sub(2),
data[1],
(data[3] ~= nil) and ('[[#' .. data[3] .. '|' .. familias[data[3]][1] .. ']]') or '',
data.otherNames and table.concat(data.otherNames, ", ") or " ",
#stats[cod].subfamilias,
contar_idiomas(cod)
))
end
return
"{| class=\"wikitable sortable\"\n" ..
"! Código\n" ..
"! Nombre canónico\n" ..
"! Familia superior\n" ..
"! Otros nombres\n" ..
"! #Subfamilias\n" ..
"! #Idiomas\n" ..
"|-" .. table.concat(filas, "\n|-") .. "\n|}"
end
return export