Aller au contenu

Module:Ressources/infosPokemon

De Poképédia

Cette fonction permet de mettre en forme les informations d'un Pokémon à partir de son nom. Il comporte un seul paramètre : le nom du Pokémon et des précisions sur celui-ci au besoin. Six précisions peuvent être données pour le nom d'un Pokémon (forme, sexe, nom, lien, jeu, sup) suivis de la valeur entre parenthèses.

Attention à ne pas le modifier sans savoir précisément ce que l'on fait : il est utilisé sur des milliers de pages (toutes les pages de Pokémon, de capacités et de routes !) et toute modification impacte donc fortement le wiki.

Exemples (mode classique)

[modifier]
  • Avec un Pokémon basique :

ressources.infosPokemon("Mélofée") retourne :

0035
  • Avec un Pokémon dont la forme est précisée :

ressources.infosPokemon("Deoxys forme(Vitesse)") retourne :

0386
Deoxys
Forme Vitesse
  • Avec une Forme d'Alola :

ressources.infosPokemon("Tadmorv forme(Alola)") retourne :

0088
Tadmorv
Forme d'Alola
  • Avec un sexe :

ressources.infosPokemon("Mistigrix sexe(f)") retourne :

0678
Mistigrix
Femelle
  • Avec un sup :

ressources.infosPokemon("Jirachi sup(E)") retourne :

0385
  • Avec une forme, un jeu et un sup :

ressources.infosPokemon("Hoopa forme(Déchaîné) jeu(ROSA) sup(RuO)") retourne :

0720
HoopaRO
Hoopa Déchaîné
  • Avec un Pokémon inexistant :

ressources.infosPokemon("Machinbidule") retourne :

???

Exemples (mode miniature)

[modifier]
  • Avec un Pokémon basique :

ressources.infosPokemon("Mélofée", "miniature") retourne : Mélofée

  • Avec un Pokémon dont la forme est précisée :

ressources.infosPokemon("Deoxys forme(Vitesse)", "miniature") retourne : Deoxys (Forme Vitesse)

  • Avec une Forme d'Alola :

ressources.infosPokemon("Tadmorv forme(Alola)", "miniature") retourne : Tadmorv (Forme d'Alola)

  • Avec un sexe :

ressources.infosPokemon("Mistigrix sexe(f)", "miniature") retourne : Mistigrix (Femelle)

  • Avec un sup :

ressources.infosPokemon("Jirachi sup(E)", "miniature") retourne : JirachiE

  • Avec une forme, un jeu et un sup :

ressources.infosPokemon("Hoopa forme(Déchaîné) jeu(ROSA) sup(RuO)", "miniature") retourne : Hoopa (Hoopa Déchaîné)RO

  • Avec un Pokémon inexistant :

ressources.infosPokemon("Machinbidule", "miniature") retourne : Machinbidule


local numeros = mw.loadData("Module:Data/NumérosPokémon")

-- Dictionnaires pour largement simplifier la gestion des formes spéciales
local common_forms = {
	["Alola"] = { "Forme d'Alola", " d'Alola" },
	["Galar"] = { "Forme de Galar", " de Galar" },
	["Hisui"] = { "Forme de Hisui", " de Hisui" },
	["Paldea"] = { "Forme de Paldea", " de Paldea" },
	["Gigamax"] = { "Gigamax", " Gigamax" }
}

-- Lorsque le nom d'affichage = nom des formes, pas de page dédiée
local poke_short_forms = { ["Évoli"] = true, ["Zarbi"] = true, ["Arceus"] = true,
	["Charmilly"] = true, ["Bekaglaçon"] = true, ["Zacian"] = true,
	["Zamazenta"] = true, ["Ursaking"] = true }

-- Lorsque le nom d'affichage = préfix autre que "Forme " + nom des formes, pas de page dédiée
local poke_prefix_forms = {
	["Cheniti"] = "Cape ",
	["Cheniselle"] = "Cape ",
	["Ceriflor"] = "Temps ",
	["Sancoki"] = "Mer ",
	["Tritosor"] = "Mer ",
	["Bargantua"] = "Motif ",
	["Keldeo"] = "Aspect ",
	["Genesect"] = "Module ",
	["Prismillon"] = "Motif ",
	["Flabébé"] = "Fleur ",
	["Florges"] = "Fleur ",
	["Pitrouille"] = "Taille ",
	["Banshitrouye"] = "Taille ",
	["Xerneas"] = "Mode ",
	["Plumeline"] = "Style ",
	["Silvallié"] = "Type : ",
	["Morpeko"] = "Mode ",
	["Famignol"] = "Famille de ",
	["Tapatoès"] = "Plumage ",
}

-- Pokémon avec beaucoup de formes et un pattern utilisable
local other_patterns = {
	["Pikachu"] = function(forme)
		if (forme == "Partenaire") then return { forme, "Pikachu Partenaire" }
		elseif (string.match(forme, "^Casquette ")) then return { forme, "Pikachu" }
		elseif (string.match(forme, "^Halloween")) then return { "Chapeau d'Halloween", "Pikachu" }
		elseif (string.match(forme, "^Fêtes")) then return { "Chapeau rouge", "Pikachu" }
		else return { "Pikachu " .. forme, "Pikachu " .. forme } -- Les Cosplayeurs
		end
	end,
	
	["Floette"] = function(forme)
		if (forme == "Éternelle") then return { "Éternelle", "Floette" }
		else return { "Fleur " .. forme, "Floette" }
		end
	end,
	["Couafarel"] = function(forme)
		if (forme == "Sauvage") then return { "Forme Sauvage", "Couafarel" }
		else return { "Coupe " .. forme, "Couafarel" }
		end
	end,
	["Météno"] = function(forme)
		if (forme == "Météore") then return { "Forme Météore", "Météno" }
		else return { "Noyau " .. forme, "Météno" }
		end
	end
}


-- Toutes les autres formes où le nom d'affichage n'est pas juste "Forme <forme>" ou celles ayant une page dédiée
local other_forms = {
	["Tauros"] = {
		["Paldea Combative"] = { "Forme de Paldea<br>Race Combative", "Tauros de Paldea" },
		["Paldea Flamboyante"] = { "Forme de Paldea<br>Race Flamboyante", "Tauros de Paldea" },
		["Paldea Aquatique"] = { "Forme de Paldea<br>Race Aquatique", "Tauros de Paldea" }
	},
	["Pichu"] = {
		["Troizépi"] = { "Pichu Troizépi", "Pichu" }
	},
	["Dialga"] = {
		["Primal"] = { "Dialga Primal", "Dialga" }
	},
	["Darumacho"] = {
		["Transe"] = { "Mode Transe", "Darumacho" },
		["Galar Transe"] = { "Forme de Galar<br>Mode Transe", "Darumacho de Galar" }
	},
	["Kyurem"] = {
		["Blanc"] = { "Kyurem Blanc", "Kyurem Blanc" },
		["Noir"] = { "Kyurem Noir", "Kyurem Noir" }
	},
	["Magearna"] = {
		["Couleur du Passé"] = { "Couleur du Passé", "Magearna" },
		["Méga"] = { "Méga-Magearna", "Méga-Magearna" },
		["Méga Couleur du Passé"] = { "Méga-Magearna<br>Couleur du Passé", "Méga-Magearna" }
	},
	["Necrozma"] = {
		["Crinière du Couchant"] = { "Crinière du Couchant", "Necrozma Crinière du Couchant" },
		["Ailes de l'Aurore"] = { "Ailes de l'Aurore", "Necrozma Ailes de l'Aurore" },
		["Ultra"] = { "Ultra-Necrozma", "Ultra-Necrozma" }
	},
	["Éthernatos"] = {
		["Infinimax"] = { "Infinimax", "Éthernatos Infinimax" }
	},
	["Shifours"] = {
		["Poing Final"] = { "Style Poing Final", "Shifours" },
		["Mille Poings"] = { "Style Mille Poings", "Shifours" },
		["Gigamax Poing Final"] = { "Gigamax<br>Style Poing Final", "Shifours Gigamax" },
		["Gigamax Mille Poings"] = { "Gigamax<br>Style Mille Poings", "Shifours Gigamax" }
	},
	["Sylveroy"] = {
		["Cavalier d'Effroi"] = { "Cavalier d'Effroi", "Sylveroy, le Cavalier d'Effroi" },
		["Cavalier du Froid"] = { "Cavalier du Froid", "Sylveroy, le Cavalier du Froid" }
	},
	["Koraidon"] = {
		["Finale"] = { "Forme Finale", "Koraidon" },
		["Course"] = { "Forme de Course", "Koraidon" },
		["Nage"] = { "Forme de Nage", "Koraidon" },
		["Vol"] = { "Forme de Vol", "Koraidon" }
	},
	["Miraidon"] = {
		["Ultime"] = { "Mode Ultime", "Miraidon" },
		["Terrestre"] = { "Mode Terrestre", "Miraidon" },
		["Aquatique"] = { "Mode Aquatique", "Miraidon" },
		["Aérien"] = { "Mode Aérien", "Miraidon" }
	},
	["Ogerpon"] = {
		["Turquoise"] = { "Masque Turquoise", "Ogerpon" },
		["Puits"] = { "Masque du Puits", "Ogerpon" },
		["Fourneau"] = { "Masque du Fourneau", "Ogerpon" },
		["Pierre"] = { "Masque de la Pierre", "Ogerpon" }
	}
}

-- Dictionnaire indiquant les jeux pour lesquels il faut rediriger vers une sous-page du Pokémon
local games_with_pages = {
	["PDMRB"] = "Pokémon Donjon Mystère",
	["PDMTOC"] = "Pokémon Donjon Mystère",
	["PDMPI"] = "Pokémon Donjon Mystère",
	["PMDM"] = "Pokémon Donjon Mystère",
	["PDMDX"] = "Pokémon Donjon Mystère",
	["Sleep"] = "Pokémon Sleep"
}

return function ( poke, mode )
	local forme, sexe, nom, lien, jeu, chromatique, sup
	
	-- Fonction qui récupère les détails indiqués d'un Pokémon entre parenthèses
	-- '\' fait office de caractère d'échappement en cas de parenthèse fermante
	local function get_modifier(modifier)
		local regex = modifier .. "%([^)]*[^\\]%)"
		if (string.match(poke, regex)) then
			local ret = string.sub(string.match(poke, regex), string.len(modifier)+2, -2)
			ret = string.gsub(ret, "\\", "")
			poke = string.gsub(poke, regex, "")
			return ret
		else return "" end
	end
	
	-- Récupération des données additionnelles
	forme = get_modifier("forme")
	jeu = get_modifier("jeu")
	sexe = get_modifier("sexe")
	chromatique = get_modifier("chromatique")
	chromatique = chromatique == "oui"
	
	if (sexe == "f") then sexe = "♀" 
	elseif (sexe == "m") then sexe = "♂" end
	sup = get_modifier("sup")
	if (sup ~= "") then sup = mw.getCurrentFrame():expandTemplate{ title = 'Sup', args = { sup } } end
	-- Pour pouvoir overwrite par la suite si nécessaire
	local temp_nom = get_modifier("nom")
	local temp_lien = get_modifier("lien")
	
	-- Gestion du caractère chromatique
	if chromatique and (jeu == "LPA" or jeu == "LPZA")
	then chromatique = " chromatique"
	else chromatique = ""
	end
	
	-- Nettoyage du nom et valeurs par défaut
	poke = mw.text.trim(poke)
	lien = poke
	nom = ""
	local num = numeros[poke] or "???"
		
	if (forme ~= "")
	then
		if common_forms[forme] then
			nom = common_forms[forme][1]
			lien = poke .. common_forms[forme][2]
			
		elseif (forme == "Méga") then
			nom = "Méga-".. poke
			lien = "Méga-" .. poke
			
		elseif (forme == "Primo") then
			nom = "Primo-" .. poke
			lien = "Primo-" .. poke
			
		
		elseif (forme == "Méga X") then
			nom = "Méga-".. poke .. " X"
			lien = "Méga-" .. poke .. " X"
			
		elseif (forme == "Méga Y") then
			nom = "Méga-".. poke .. " Y"
			lien = "Méga-" .. poke .. " Y"

		elseif (forme == "Méga Z") then
			nom = "Méga-".. poke .. " Z"
			lien = "Méga-" .. poke .. " Z"
			
		elseif poke_short_forms[poke] then
			nom = mw.text.trim(forme)
			
		elseif poke_prefix_forms[poke] then
			nom = poke_prefix_forms[poke] .. forme
			
		elseif (poke == "Motisma" or poke == "Hoopa") then
			nom = poke .. " " .. forme
			
		elseif other_patterns[poke] then
			local r = other_patterns[poke](forme)
			nom = r[1]
			lien = r[2]
			
		elseif (other_forms[poke] and other_forms[poke][forme]) then
			local r = other_forms[poke][forme]
			nom = r[1]
			lien = r[2]
			
		else -- Toutes les formes où le nom d'affichage est juste "Forme <forme>" sans redirection
			nom = "Forme " .. forme
			lien = poke
		end
	end
	
	-- Gestion des sous pages pour jeux spécifiques
	if (games_with_pages[jeu]) then
		lien = poke .. "/" .. games_with_pages[jeu]
	end
	
	-- Gestion des formes séxuées
	if (sexe == "♀") then nom = "Femelle" end
	if (sexe == "♂") then nom = "Mâle" end
	
	-- Si "nom" ou "lien" ont été indiqués, on overwrite les valeurs
	if (temp_nom ~= "") then nom = temp_nom end
	if (temp_lien ~= "") then lien = temp_lien end
	
	-- Ajouts d'espaces pour la valeur de retour
	if (forme ~= "") then forme = " " .. forme end
	if (sexe ~= "") then sexe = " " .. sexe end
	if (jeu ~= "") then jeu = " " .. jeu end
	
	-- Retour
	if (mode == "miniature") then
		if (nom ~= "") then nom = " (" .. nom .. ")" end
		return "[[Fichier:Miniature " .. num .. forme .. sexe .. chromatique .. jeu .. ".png|link=" .. lien .. "|alt=" .. poke .. nom .. "|" .. poke .. nom .. "|class=miniature" .. jeu .. "]]" .. sup
	else
		if (nom ~= "") then nom = "<br><div style='font-style: italic; font-size: 90%; line-height: 125%; margin-top: 3px'>" .. nom .. "</div>" end
		return "<span style='white-space: nowrap; vertical-align: center' class='miniat-poke'>" .. num .. " [[Fichier:Miniature " .. num .. forme .. sexe .. chromatique .. jeu .. ".png|link=" .. lien .. "|alt=|class=miniature" .. jeu .. "]] <div style='display: inline-block; vertical-align: center;'>[[" .. lien .. "|" .. poke .. "]]" .. sup .. nom .. "</div></span>"
	end
end