Módulo:JCC-utilidades

La documentación para este módulo puede ser creada en Módulo:JCC-utilidades/doc.

local p = {}    -- variable que tendrá todas las funciones accesibles externamente 

--[[
Aquí se ponen las expansiones (nombre del artículo) y metadatos específicos
Si no tienen metadatos, como valor poner true (necesitan tener un valor)
Si tienen metadatos, como por ejemplo marca de regulación, ponerla con propiedades: { ['marca'] = 'A' }
 - marca: Marca de regulación
 - estandar: Permitido en el formato estándar (para los que no tienen marca). Implica que también están permitidos en formato expandido
 - expandido: Permitido en el formato expandido (para los que no tienen marca)
]]--
local _expansiones = {
	['ex (TCG): Rubí & Zafiro'] = true,
	['ex (TCG): Sandstorm'] = true,
	['ex (TCG): Dragon'] = true,
	['ex (TCG): Team Magma vs Team Aqua'] = true,
	['ex (TCG): Hidden Legends'] = true,
	['ex (TCG): FireRed & LeafGreen'] = true,
	['ex (TCG): Team Rocket Returns'] = true,
	['ex (TCG): Deoxys'] = true,
	['ex (TCG): Emerald'] = true,
	['ex (TCG): Fuerzas Ocultas'] = true,
	['ex (TCG): Delta Species'] = true,
	['ex (TCG): Legend Maker'] = true,
	['ex (TCG): Holon Phantoms'] = true,
	['ex (TCG): Crystal Guardians'] = true,
	['ex (TCG): Dragon Frontiers'] = true,
	['ex (TCG): Power Keepers'] = true,
	['Diamante & Perla (TCG): Diamante & Perla'] = true,
	['Diamante & Perla (TCG): Tesoros Misteriosos'] = true,
	['Diamante & Perla (TCG): Maravillas Secretas'] = true,
	['Diamante & Perla (TCG): Grandes Encuentros'] = true,
	['Diamante & Perla (TCG): Majestic Dawn'] = true,
	['Diamante & Perla (TCG): Despertar de las Leyendas'] = true,
	['Diamante & Perla (TCG): Frente Tormentoso'] = true,
	['Platino (TCG): Platino'] = true,
	['Platino (TCG): Rising Rivals'] = true,
	['Platino (TCG): Supreme Victors'] = true,
	['Platino (TCG): Arceus'] = true,
	['HeartGold & SoulSilver (TCG): HeartGold & SoulSilver'] = true,
	['HeartGold & SoulSilver (TCG): Liberados'] = true,
	['HeartGold & SoulSilver (TCG): Intrépidos'] = true,
	['HeartGold & SoulSilver (TCG): Triunfadores'] = true,
	['Llamada de las Leyendas (TCG)'] = true,
	['Negro y Blanco (TCG): Negro y Blanco'] = { ['expandido'] = true },
	["Colección de McDonald's 2011 (TCG)"] = { ['expandido'] = true },
	['Negro y Blanco (TCG): Fuerzas Emergentes'] = { ['expandido'] = true },
	['Negro y Blanco (TCG): Nobles Victorias'] = { ['expandido'] = true },
	['Negro y Blanco (TCG): Próximos Destinos'] = { ['expandido'] = true },
	['Negro y Blanco (TCG): Oscuros Exploradores'] = { ['expandido'] = true },
	["Colección de McDonald's 2012 (TCG)"] = { ['expandido'] = true },
	['Negro y Blanco (TCG): Dragones Majestuosos'] = { ['expandido'] = true },
	['Tesoro de Dragones (TCG)'] = { ['expandido'] = true },
	['Negro y Blanco (TCG): Fronteras Cruzadas'] = { ['expandido'] = true },
	['Negro y Blanco (TCG): Tormenta Plasma'] = { ['expandido'] = true },
	['Negro y Blanco (TCG): Glaciación Plasma'] = { ['expandido'] = true },
	['Negro y Blanco (TCG): Explosión Plasma'] = { ['expandido'] = true },
	["Colección de McDonald's 2013 (TCG)"] = { ['expandido'] = true },
	['Negro y Blanco (TCG): Tesoros Legendarios'] = { ['expandido'] = true },
	['Negro y Blanco (TCG): Kit de entrenamiento'] = { ['expandido'] = true },
	['XY (TCG): Bienvenidos a Kalos'] = { ['expandido'] = true },
	['XY (TCG): XY'] = { ['expandido'] = true },
	['XY (TCG): Destellos de Fuego'] = { ['expandido'] = true },
	["Colección de McDonald's 2014 (TCG)"] = { ['expandido'] = true },
	['XY (TCG): Puños Furiosos'] = { ['expandido'] = true },
	['XY (TCG): Fuerzas Fantasmales'] = { ['expandido'] = true },
	['XY (TCG): Duelos Primigenios'] = { ['expandido'] = true },
	['Doble Crisis (TCG)'] = { ['expandido'] = true },
	['XY (TCG): Cielos Rugientes'] = { ['expandido'] = true },
	['XY (TCG): Antiguos Orígenes'] = { ['expandido'] = true },
	['XY (TCG): TURBOimpulso'] = { ['expandido'] = true },
	["Colección de McDonald's 2015 (TCG)"] = { ['expandido'] = true },
	['XY (TCG): TURBOlímite'] = { ['expandido'] = true },
	['Generaciones (TCG)'] = { ['expandido'] = true },
	['XY (TCG): Destinos Enfrentados'] = { ['expandido'] = true },
	['XY (TCG): Asedio de Vapor'] = { ['expandido'] = true },
	["Colección de McDonald's 2016 (TCG)"] = { ['expandido'] = true },
	['XY (TCG): Evoluciones'] = { ['expandido'] = true },
	['XY (TCG): Kit de entrenamiento'] = { ['expandido'] = true },
	['XY (TCG): Kit de entrenamiento: Bisharp y Wigglytuff'] = { ['expandido'] = true },
	['XY (TCG): Kit de entrenamiento: Latias y Latios'] = { ['expandido'] = true },
	['XY (TCG): Kit de entrenamiento: Pikachu enmascarada y Suicune'] = { ['expandido'] = true },
	['Sol y Luna (TCG): Sol y Luna'] = { ['expandido'] = true },
	['Sol y Luna (TCG): Albor de Guardianes'] = { ['expandido'] = true },
	['Sol y Luna (TCG): Sombras Ardientes'] = { ['expandido'] = true },
	["Colección de McDonald's 2017 (TCG)"] = { ['expandido'] = true },
	['Leyendas Luminosas (TCG)'] = { ['expandido'] = true },
	['Sol y Luna (TCG): Invasión Carmesí'] = { ['expandido'] = true },
	['Sol y Luna (TCG): Ultraprisma'] = { ['expandido'] = true },
	['Sol y Luna (TCG): Luz Prohibida'] = { ['expandido'] = true },
	["Colección de McDonald's 2018 (TCG)"] = { ['expandido'] = true },
	['Sol y Luna (TCG): Tormenta Celestial'] = { ['expandido'] = true },
	['Majestad de Dragones (TCG)'] = { ['expandido'] = true },
	['Sol y Luna (TCG): Truenos Perdidos'] = { ['expandido'] = true },
	['Sol y Luna (TCG): Unión de Aliados'] = { ['expandido'] = true },
	['Detective Pikachu (TCG)'] = { ['expandido'] = true },
	['Sol y Luna (TCG): Vínculos Indestructibles'] = { ['expandido'] = true },
	['Sol y Luna (TCG): Mentes Unidas'] = { ['expandido'] = true },
	['Destinos Ocultos (TCG)'] = { ['expandido'] = true },
	["Colección de McDonald's 2019 (TCG)"] = { ['expandido'] = true },
	['Sol y Luna (TCG): Eclipse Cósmico'] = { ['expandido'] = true },
	['SM Black Star Promos (TCG)'] = { ['expandido'] = true },
	['Sol y Luna (TCG): Kit de entrenamiento: Lycanroc y Raichu de Alola'] = { ['expandido'] = true },
	['Espada y Escudo (TCG): Espada y Escudo'] = { ['marca'] = 'D' },
	['Espada y Escudo (TCG): Choque Rebelde'] = { ['marca'] = 'D' },
	['Espada y Escudo (TCG): Oscuridad Incandescente'] = { ['marca'] = 'D' },
	['Camino de Campeones (TCG)'] = { ['marca'] = 'D' },
	['Espada y Escudo (TCG): Voltaje Vívido'] = { ['marca'] = 'D' },
	['Destinos Brillantes (TCG)'] = { ['expandido'] = true },
	['Espada y Escudo (TCG): Estilos de Combate'] = { ['marca'] = 'E' },
	['Espada y Escudo (TCG): Reinado Escalofriante'] = { ['marca'] = 'E' },
	['Espada y Escudo (TCG): Cielos Evolutivos'] = { ['marca'] = 'E' },
	['Espada y Escudo (TCG): Golpe Fusión'] = { ['marca'] = 'E' },
	['Espada y Escudo (TCG): Astros Brillantes'] = { ['marca'] = 'E' },
	['Espada y Escudo (TCG): Resplandor Astral'] = { ['marca'] = 'F' },
	['Pokémon GO (TCG)'] = { ['marca'] = 'F' },
	['Espada y Escudo (TCG): Origen Perdido'] = { ['marca'] = 'F' },
	['Espada y Escudo (TCG): Tempestad Plateada'] = { ['marca'] = 'F' },
	['Cenit Supremo (TCG)'] = { ['expandido'] = true },
	['SWSH Black Star Promos (TCG)'] = { ['expandido'] = true },
	['Escarlata y Púrpura (TCG): Escarlata y Púrpura'] = { ['marca'] = 'G' },
	['Escarlata y Púrpura (TCG): Evoluciones en Paldea'] = { ['marca'] = 'G' },
	['Escarlata y Púrpura (TCG): Llamas Obsidianas'] = { ['marca'] = 'G' },
	['Escarlata y Púrpura (TCG): 151'] = { ['marca'] = 'G' },
	['Escarlata y Púrpura (TCG): Brecha Paradójica'] = { ['marca'] = 'G' },
	['Escarlata y Púrpura (TCG): Destinos de Paldea'] = { ['marca'] = 'G' },
	['Escarlata y Púrpura (TCG): Fuerzas Temporales'] = { ['marca'] = 'H' },
	['Escarlata y Púrpura (TCG): Mascarada Crepuscular'] = { ['marca'] = 'H' },
	['Escarlata y Púrpura (TCG): Fábula Sombría'] = { ['marca'] = 'H' },
	['SV Black Star Promos (TCG)'] = { ['expandido'] = true },
}

--[[
Los kits de entrenamiento tienen 2 iconos pero 1 solo artículo
Se indican los alias para la página del kit
]]--
local _kitsEntrenamiento = {
	['Kit de entrenamiento EX Latias'] = 'Kit de Entrenador EX (TCG)',
	['Kit de entrenamiento EX Latios'] = 'Kit de Entrenador EX (TCG)',
	['Kit de entrenamiento EX Plusle'] = 'Kit de Entrenador EX 2 (TCG)',
	['Kit de entrenamiento EX Minun'] = 'Kit de Entrenador EX 2 (TCG)',
	['Kit de entrenamiento DP Lucario'] = 'Kit de Entrenador Diamante & Perla (TCG)',
	['Kit de entrenamiento DP Manaphy'] = 'Kit de Entrenador Diamante & Perla (TCG)',
	['Kit de entrenamiento HS Gyarados'] = 'Kit de Entrenador HeartGold & SoulSilver (TCG)',
	['Kit de entrenamiento HS Raichu'] = 'Kit de Entrenador HeartGold & SoulSilver (TCG)',
	['Kit de entrenamiento NB Excadrill'] = 'Kit de Entrenador Negro y Blanco (TCG)',
	['Kit de entrenamiento NB Zoroark'] = 'Kit de Entrenador Negro y Blanco (TCG)',
	['Kit de entrenamiento XY Sylveon'] = 'Kit de Entrenador XY (TCG)',
	['Kit de entrenamiento XY Noivern'] = 'Kit de Entrenador XY (TCG)',
	['Kit de entrenamiento XY Bisharp'] = 'Kit de Entrenador XY: Bisharp y Wigglytuff (TCG)',
	['Kit de entrenamiento XY Wigglytuff'] = 'Kit de Entrenador XY: Bisharp y Wigglytuff (TCG)',
	['Kit de entrenamiento XY Latias'] = 'Kit de Entrenador XY: Latias y Latios (TCG)',
	['Kit de entrenamiento XY Latios'] = 'Kit de Entrenador XY: Latias y Latios (TCG)',
	['Kit de entrenamiento XY Pikachu enmascarada'] = 'Kit de Entrenador XY: Pikachu Enmascarada y Suicune (TCG)',
	['Kit de entrenamiento XY Suicune'] = 'Kit de Entrenador XY: Pikachu Enmascarada y Suicune (TCG)',
	['Kit de entrenamiento SL Lycanroc'] = 'Kit de Entrenador Sol y Luna: Lycanroc y Raichu de Alola (TCG)',
	['Kit de entrenamiento SL Raichu de Alola'] = 'Kit de Entrenador Sol y Luna: Lycanroc y Raichu de Alola (TCG)',
	['Kit de entrenamiento SL Sandslash de Alola'] = 'Kit de Entrenador Sol y Luna: Sandslash de Alola y Ninetales de Alola (TCG)',
	['Kit de entrenamiento SL Ninetales de Alola'] = 'Kit de Entrenador Sol y Luna: Sandslash de Alola y Ninetales de Alola (TCG)'
}

local function _getNombreCorto( expansion )
	local idxStart, idxEnd
	idxStart, idxEnd = mw.ustring.find( expansion, '(TCG): ', 1, true )
	-- Caso XXX (TCG): Nombre
	if idxEnd then
		return mw.ustring.sub( expansion, idxEnd + 1 )
	end
	idxStart, idxEnd = mw.ustring.find( expansion, ' (TCG)', 1, true )
	if idxStart ~= nil then
		return mw.ustring.sub( expansion, 1, idxStart - 1 )
	end
	return expansion
end

--[[
Retorna una tabla con datos de la expansión

- articulo: (string) Nombre del artículo de la expansión
- corto: (string) Nombre corto
- expandido: (bool) Admitido en formato expandido
- estandar: (bool) Admitido en formato estándar
- marca: (string) Marca de regulación

]]--
function p.datosExpansion( expansion )
	local key, idxStart, idxEnd, expansion2, kit, corto
	
	corto = nil
	kit = _kitsEntrenamiento[expansion]
	if kit then
		corto = expansion
		expansion = kit
	end

	val = _expansiones[expansion]
	if val == nil then
		-- Nombre corto que solo le falta (TCG)?
		expansion2 = string.format( '%s (TCG)', expansion )
		val = _expansiones[expansion2]
		if val then
			expansion = expansion2
		end
	end
	if val == nil and mw.ustring.find( expansion, '(TCG)', 1, true ) == nil then
		-- Traducir nombre corto de expansión con nombre complejo
		for key in pairs( _expansiones ) do
			idxStart, idxEnd = mw.ustring.find( key, '(TCG): ', 1, true )
			-- Caso XXX (TCG): Nombre
			if idxEnd then
				-- Encontrado, llamar ahora sí con los datos de la clave que sabemos que existe
				if mw.ustring.sub( key, idxEnd + 1 ) == expansion then
					return p.datosExpansion( key )
				end
			end
		end
	end

	if val == nil or val == true then
		-- No existe en la tabla. O está mal escrito, o no tiene datos
		val = {}
		if mw.ustring.find( expansion, ' (TCG)', 1, true ) then
			val['articulo'] = expansion
		else
			val['articulo'] = string.format( '%s (TCG)', expansion )
		end
	elseif val == true then
		-- Sin datos relevantes
		val = {}
		val['articulo'] = expansion
	else
		val['articulo'] = expansion
	end

	if corto then
		val['corto'] = corto
	else
		val['corto'] = _getNombreCorto( expansion )
	end
	
	-- Si se admite en estándar, también en expandido
	if val['estandar'] then
		val['expandido'] = true
	end
	-- Si tiene marca de regulación D también se admite en estándar
	-- XX esto se quita porque lo hará la plantilla de carta, para unificar criterios
	--if val['marca'] == 'D' then
	--	val['estandar'] = true
	--end

	return val
end

-- Retorna el enlace hacia el artículo de la expansión a partir del nombre corto (sin prefijo ni sufijo TCG) o largo
function p.enlaceExpansion( expansion )
	local val = p.datosExpansion( expansion )
	return string.format( '[[%s|%s]]', val['articulo'], val['corto'] )
end

-- Métodos para usarse directamente desde un {{#invoke:}}, llevan el prefijo wiki
-- Desde el #invoke: el único argumento es frame, hay que sacar el parámetro de sus args
function p.wikiEnlaceExpansion( frame )
	return p.enlaceExpansion( frame.args[1] )
end

return p     -- Todos los módulos terminan retornando la variable que contiene las funciones

--[==[

Pruebas

=p.enlaceExpansion( 'Vínculos Indestructibles' )
[[Sol y Luna (TCG): Vínculos Indestructibles|Vínculos Indestructibles]]
=p.enlaceExpansion( 'Llamada de las Leyendas' )
[[Llamada de las Leyendas (TCG)|Llamada de las Leyendas]]
=p.enlaceExpansion( 'Sol y Luna (TCG): Vínculos Indestructibles' )
[[Sol y Luna (TCG): Vínculos Indestructibles|Vínculos Indestructibles]]
=p.enlaceExpansion( 'Diamante & Perla' )
[[Diamante & Perla (TCG): Diamante & Perla|Diamante & Perla]]
=p.enlaceExpansion( 'Kit de entrenamiento DP Lucario' )
[[Diamante & Perla (TCG): Kit de entrenamiento|Kit de entrenamiento DP Lucario]]

]==]--