Módulo:Categorizar
Apariencia
Uso
local z = {}
local argumento = {} -- Argumentos eliminando argumentos sin datos
local procesador = {}
-- Módulos utilizados
local ModuloArgumentos = require('Módulo:Argumentos')
local ModuloTablas = require('Módulo:Tablas')
local arreglarCategorias = {
['géneros película'] = {
['Películas de adaptación cinematográfica'] = ''
,['Películas de animación infantil'] = 'Películas infantiles de animación'
,['Películas de aventura'] = 'Películas de aventuras'
,['Películas de aventuras'] = 'Películas de aventuras'
,['Películas de biografía'] = 'Películas biográficas'
,['Películas de biopic'] = 'Películas biográficas'
,['Películas de buddy film'] = 'Películas sobre la amistad'
,['Películas de cine bélico'] = 'Películas de guerra'
,['Películas de cine biográfico'] = 'Películas biográficas'
,['Películas de cine carcelario'] = 'Películas sobre la cárcel'
,['Películas de cine cómicas'] = 'Películas cómicas'
,['Películas de cine de acción'] = 'Películas de acción'
,['Películas de cine de artes marciales'] = 'Películas de artes marciales'
,['Películas de cine de atracos'] = 'Películas sobre atracos'
,['Películas de cine de aventuras'] = 'Películas de aventuras'
,['Películas de cine de ciencia ficción'] = 'Películas de ciencia ficción'
,['Películas de cine de comedia'] = 'Películas cómicas'
,['Películas de cine de crímenes'] = 'Películas policíacas'
,['Películas de cine de espionaje'] = 'Películas de espionaje'
,['Películas de cine de fantasía'] = 'Películas de fantasía'
,['Películas de cine de fantástico'] = 'Películas de fantasía'
,['Películas de cine de misterio'] = 'Películas de misterio'
,['Películas de cine de monstruos'] = 'Películas de monstruos'
,['Películas de cine de rumberas'] = 'Cine de rumberas'
,['Películas de cine de superhéroes'] = 'Películas de superhéroes'
,['Películas de cine de suspenso'] = 'Películas de suspenso'
,['Películas de cine de terror'] = 'Películas de terror'
,['Películas de sobrenatural'] = 'Películas de terror sobrenatural'
,['Películas de cine de vampiros'] = 'Películas de vampiros'
,['Películas de cine de zombis'] = 'Películas de muertos vivientes'
,['Películas de cine distópico'] = 'Películas distópicas'
,['Películas de cine documental'] = 'Películas documentales'
,['Películas de cine dramático'] = 'Películas dramáticas'
,['Películas de cine dramáticas'] = 'Películas dramáticas'
,['Películas de cine erótico'] = 'Películas eróticas'
,['Películas de cine fantástico'] = 'Películas de fantasía'
,['Películas de cine familiar'] = 'Películas infantiles'
,['Películas de cine lgbt'] = 'Películas de cine LGBT'
,['Películas de cine mudo'] = 'Películas mudas'
,['Películas de cine musical'] = 'Películas musicales'
,['Películas de cine navideño'] = 'Películas navideñas'
,['Películas de cine policíaco'] = 'Películas policíacas'
,['Películas de cine postapocalíptico'] = 'Películas postapocalípticas'
,['Películas de cine romántico'] = 'Películas románticas'
,['Películas de cine wéstern'] = 'Películas de wéstern'
,['Películas de comedia'] = 'Películas cómicas'
,['Películas de comedia de terror'] = 'Películas de terror humorístico'
,['Películas de comedia de acción'] = 'Películas de comedia de acción' -- Evita que le aplique otras correcciones
,['Películas de comedia dramática'] = ''
,['Películas de comedia negra'] = 'Películas de humor negro'
,['Películas de comedia romántica'] = 'Comedias románticas'
,['Películas de cortometraje'] = ''
,['Películas de crimen'] = 'Películas policíacas'
,['Películas de documental'] = 'Películas documentales'
,['Películas de drama histórico'] = 'Películas de drama histórico'
,['Películas de dramáticas'] = 'Películas dramáticas'
,['Películas de dramático'] = 'Películas dramáticas'
,['Películas de erótica'] = 'Películas eróticas'
,['Películas de erótico'] = 'Películas eróticas'
,['Películas de cine independiente'] = 'Películas independientes'
,['Películas de familia'] = 'Películas infantiles'
,['Películas de familiar'] = 'Películas infantiles'
,['Películas de género policíaco'] = 'Películas policíacas'
,['Películas de gore'] = 'Películas gore'
,['Películas de historia'] = 'Películas de cine histórico'
,['Películas de histórica'] = 'Películas de cine histórico'
,['Películas de histórico'] = 'Películas de cine histórico'
,['Películas de melodrama'] = 'Películas melodramáticas'
,['Películas de neo-noir'] = 'Películas neo-noir'
,['Películas de película basada en una novela'] = 'Películas basadas en novelas'
,['Películas de película basada en una obra literaria'] = ''
,['Películas de película basada en un libro'] = 'Películas basadas en libros'
,['Películas de película de animación'] = 'Películas de animación'
,['Películas de película de atracos'] = 'Películas sobre atracos'
,['Películas de película deportiva'] = 'Películas sobre deportes'
,['Películas de película infantil'] = 'Películas infantiles'
,['Películas de policiaco'] = 'Películas policíacas'
,['Películas de policíaco'] = 'Películas policíacas'
,['Películas de road movie'] = 'Road movies'
,['Películas de romántico'] = 'Películas románticas'
,['Películas de slasher'] = 'Películas slasher'
,['Películas de tokusatsu'] = 'Películas tokusatsu'
,['Películas de cine deportivo'] = 'Películas sobre deportes'
,['Películas de deportes'] = 'Películas sobre deportes'
,['Películas de deporte'] = 'Películas sobre deportes'
,['Películas de western'] = 'Películas de wéstern'
,['de drama'] = 'dramáticas'
,['de musical'] = 'musicales'
,['de suspense'] = 'de suspenso'
,['de thriller'] = 'de suspenso'
,['de fantástico'] = 'de fantasía'
,['de romance'] = 'románticas'
,['de horror'] = 'de terror'
,['de infantil'] = 'infantiles'
,['de policial'] = 'policíacas'
,['de romántica'] = 'románticas'
,['de bélico'] = 'de guerra'
,['de biográfica'] = 'biográficas'
,['de biográfico'] = 'biográficas'
,['de bélica'] = 'de guerra'
},
['géneros series tv'] = {
['Series de televisión de romance'] = 'Series de televisión románticas'
,['Series de televisión de telecomedia'] = 'Series de televisión de comedia'
,['Series de televisión de drama televisivo'] = 'Series de televisión de drama'
},
['nombre país'] = {
['USA'] = 'Estados Unidos'
,['E. E. U. U.'] = 'Estados Unidos'
,['Estados Unidos de América'] = 'Estados Unidos'
,['Canada'] = 'Canadá'
,['EE.UU.'] = 'Estados Unidos'
,['Estados unidos'] = 'Estados Unidos'
,['EE. UU.'] = 'Estados Unidos'
,['URSS'] = 'Unión Soviética'
,['United States'] = 'Estados Unidos'
,['Swazilandia'] = 'Suazilandia'
,['Cote d\'Ivoire'] = 'Costa de Marfil'
,['Niger'] = 'Níger'
,['Nígeria'] = 'Nigeria'
,['Benin'] = 'Benín'
,['Gabon'] = 'Gabón'
,['Alemania del Oeste'] = 'Alemania Occidental'
,['Haiti'] = 'Haití'
,['Panama'] = 'Panamá'
,['República Bolivariana de Venezuela'] = 'Venezuela'
,['Estado de Palestina'] = 'Palestina'
},
['nombre idioma'] = {
['idioma '] = ''
,['afrikaans'] = 'afrikáans'
,['idioma alemán'] = 'alemán'
,['alemán de suiza'] = 'alemán de Suiza'
,['idioma bambara'] = 'bambara'
,['bangla'] = 'bengalí'
,['cantones'] = 'cantonés'
,['chino %(cantonés%)'] = 'cantonés'
,['chino cantonés'] = 'cantonés'
,['catalan'] = 'catalán'
,['chino %(mandarín%)'] = 'chino mandarín'
,['mandarín del suroeste'] = 'chino mandarín'
,['mandarín estándar'] = 'chino mandarín'
,['^Películas en mandarín$']= 'Películas en chino mandarín'
,['^Series de televisión en mandarín$'] = 'Series de televisión en chino mandarín'
,['idioma coreano'] = 'coreano'
,['dari'] = 'darí'
,['español castellano'] = 'español'
,['castellano'] = 'español'
,['castellano chileno'] = 'español'
,['idioma español'] = 'español'
,['español latino'] = 'español'
,['español chileno'] = 'español'
,['euskara'] = 'euskera'
,['finlandés'] = 'finés'
,['frances'] = 'francés'
,['idioma francés'] = 'francés'
,['hindú'] = 'hindi'
,['ingles'] = 'inglés'
,['idioma inglés'] = 'inglés'
,['english'] = 'inglés'
,['inglés británico'] = 'inglés'
,['inglés estadounidense'] = 'inglés'
,['gaélico$'] = 'irlandés'
,['japones\b'] = 'japonés'
,['malayalam'] = 'malabar'
,['mapudungún'] = 'mapuche'
,['mapudungun'] = 'mapuche'
,['holandés'] = 'neerlandés'
,['portugues'] = 'portugués'
,['panyabí'] = 'punyabí'
,['punjabi'] = 'punyabí'
,['sioux'] = 'siux'
,['suhajili'] = 'suajili'
,['idioma tailandés'] = 'tailandés'
,['vasco'] = 'euskera'
,['yiddish'] = 'yidis'
,['Películas en (película muda)'] = 'Películas mudas'
,['Películas en muda'] = 'Películas mudas'
,['Películas en mudo'] = 'Películas mudas'
,['Películas en no aplica (cine mudo)'] = 'Películas mudas'
,['Películas en película muda'] = 'Películas mudas'
,['árabe egipcio'] = 'árabe'
,['árabe argelino'] = 'árabe'
},
['nombre productora'] = {
['Películas de MGM'] = 'Películas de Metro-Goldwyn-Mayer'
,['Películas de The Walt Disney Company'] = 'Películas de Disney'
,['Películas de Lionsgate'] = 'Películas de Lions Gate Entertainment'
,['Películas de Searchlight Pictures'] = 'Películas de Fox Searchlight Pictures'
}
}
-- Para poder asignar el frame desde otro módulo y utilizar la categorización
function z.setFrame( frame )
procesador = frame
end
function z.Categorizar( frame )
-- Obtener una copia de los argumentos eliminando los argumentos sin valor
argumento = ModuloArgumentos.obtenerArgumentosConValor( frame )
procesador = frame
local patron = argumento['patrón'] or false -- Patrón que debe cumplir la categoría
local separador = argumento['separador'] or '<br />' -- Separador utilizado en la categoría
local datos = argumento
-- Comprueba si el parámetro test está definido
local opciones = {}
opciones['test'] = (argumento["test"] and argumento["test"] == "sí") or false
opciones['enlace'] = (argumento["enlace"] and argumento["enlace"] == "sí") or false
opciones['filtrar'] = not argumento["filtrar"] or argumento["filtrar"] ~= "no"
opciones['formato'] = argumento["formato"] or ''
opciones['arreglar'] = argumento["arreglar"]
-- Categoriza y devuelve el resultado
return z.categoriza(patron, separador, datos, opciones)
end
function z.categoriza(patron, separador, datos, opciones)
-- Variable donde se van almacenando las categorías válidas
categorias = ''
-- Inicializar la tabla de sustitución en el caso de que sea necesario
local arreglar = (opciones["arreglar"] and arreglarCategorias[opciones["arreglar"]]) or {}
-- Solo categoriza si tanto el patrón como el separador están definidos
-- (aunque el separador no tiene porque estár contenido en el resto de parámetros)
if (patron and separador) then
-- Creo las tablas que almacenarán el resultado final y el valor temporal
resultado = {}
tmp = {}
-- Inicializo el resultado al patrón original
resultado[1] = patron
-- Elimino los parámetros que no tienen valor numérico y divido los numéricos
-- en el separador indicado como parámetro
hayDatos = false
datosLimpios = {}
for k, v in pairs(datos) do
if k and type(k) == 'number' and type(k) ~= 'function' then
datosLimpios[k] = v and mw.text.gsplit(v, '%s*'..separador..'%s*') or ''
hayDatos = true
end
end
if not hayDatos then
return '';
end
-- Recorro todos los argumentos
for parametro, v in pairs(datosLimpios) do
actualizo = false
tmp = {}
-- Actualiza los parámetros en caso de que sea necesario
for trozo in datosLimpios[parametro] or {} do
for clave,cat in pairs(resultado) do
if not trozo:match('^%s*$') then
local status, result = pcall(function() return string.gsub(cat, "$"..parametro, trozo) end)
if status then
tmp[#tmp+1] = result
actualizo = true
end
end
end
end
-- Si se ha realizado algún cambio vuelco los valores nuevos en resultado
if actualizo then
resultado = {}
resultado = tmp
end
end
local prefijo = ''
local sufijo = ''
if opciones['test'] then
prefijo = '«'
sufijo = '»'
elseif opciones['enlace'] then
prefijo = '[[:'
sufijo = ']]'
else
prefijo = '[['
sufijo = ']]'
end
if opciones['formato'] == 'lista' and (opciones['test'] or opciones['enlace']) then
prefijo = '\n* ' .. prefijo
end
-- Compruebo si existen los nombres de las categorías y los añado a la salida
for clave,cat in pairs(resultado) do
if not cat:find("%$") and not cat:find("%[%[:d:") then
cat = procesador:preprocess('{{Desvincular|' .. cat .. '}}')
if cat and cat ~= '' then
-- Aplico el grupo de correcciones correspondiente a los nombres
if arreglar[cat] then
cat = arreglar[cat]
else
for antiguo,nuevo in pairs(arreglar) do
cat = string.gsub(cat, antiguo, nuevo)
end
end
categoria = mw.title.new("Categoría:" .. cat)
if categoria and (not opciones['filtrar'] or categoria.exists) then
categorias = categorias .. prefijo .. categoria.fullText .. sufijo
elseif not categoria and opciones['test'] then
categorias = categorias .. '<span class="error">Error en nombre de categoría: «Categoría:' .. cat .. '»</span>'
end
end
end
end
end
return categorias
end
return z