Ir al contenido

Módulo:lenguas/lista

De Wikcionario, el diccionario libre

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 "&nbsp;",
			#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