Ir al contenido

Módulo:Categorizar

De Wikipedia, la enciclopedia libre

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 animación']            = 'Series de televisión animadas'
		,['Series de televisión de aventura']             = 'Series de televisión de aventuras'
		,['Series de televisión de comedia de situación'] = 'Comedias de situación'
		,['Series de televisión de documental']           = 'Series de televisión documentales'
		,['Series de televisión de melodrama']            = 'Series de televisión melodramáticas'
		,['Series de televisión de romance']              = 'Series de televisión románticas'
		,['Series de televisión de sitcom']               = 'Comedias de situación'
		,['Series de televisión de telecomedia']          = 'Series de televisión de comedia'
		,['Series de televisión de telenovela']           = 'Telenovelas'
		,['Series de televisión de drama televisivo']           = 'Telenovelas'
	},

	['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