Módulo:Categorizar
Ir a la navegación
Ir a la búsqueda
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 basadas en novelas' ,['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 basadas en novelas' ,['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' }, ['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' }, ['nombre idioma'] = { ['idioma '] = '' ,['afrikaans'] = 'afrikáans' ,['idioma alemán'] = 'alemán' ,['alemán de suiza'] = 'alemán de Suiza' ,['idioma bambara'] = 'bambara' ,['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' ,['idioma coreano'] = 'coreano' ,['dari'] = 'darí' ,['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' ,['punyabí'] = 'panyabí' ,['punjabi'] = 'panyabí' ,['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' }, ['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 tmp[#tmp+1] = string.gsub(cat, "$"..parametro, trozo) actualizo = true 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