Module:Ressources/infosPokemon
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. Cinq précisions peuvent être données pour le nom d'un Pokémon (forme, sexe, nom, lien, jeu) 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)
- Avec un Pokémon basique :
ressources.infosPokemon("Mélofée")
retourne :
0035 Mélofée
- 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 jeu :
ressources.infosPokemon("Jirachi sup(E)")
retourne :
0385 JirachiE
- Avec une forme et un jeu :
ressources.infosPokemon("Hoopa forme(Déchaîné) sup(ROSA)")
retourne :
0720 HoopaROSA
Forme Déchaîné
- Avec un Pokémon inexistant :
ressources.infosPokemon("Machinbidule")
retourne :
???? Machinbidule
Exemples (mode miniature)
- Avec un Pokémon basique :
ressources.infosPokemon("Mélofée", "miniature")
retourne :
- Avec un Pokémon dont la forme est précisée :
ressources.infosPokemon("Deoxys forme(Vitesse)", "miniature")
retourne :
- Avec une Forme d'Alola :
ressources.infosPokemon("Tadmorv forme(Alola)", "miniature")
retourne :
- Avec un sexe :
ressources.infosPokemon("Mistigrix sexe(f)", "miniature")
retourne :
- Avec un jeu :
ressources.infosPokemon("Jirachi sup(E)", "miniature")
retourne : E
- Avec une forme et un jeu :
ressources.infosPokemon("Hoopa forme(Déchaîné) sup(ROSA)", "miniature")
retourne : ROSA
- Avec un Pokémon inexistant :
ressources.infosPokemon("Machinbidule", "miniature")
retourne :
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,
["Magearna"] = 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 ",
["Floette"] = "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,
["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" }
},
["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" }
},
["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"
}
return function ( poke, mode )
local forme, sexe, nom, lien, jeu, 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")
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")
-- 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 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 .. jeu .. ".png|link=" .. lien .. "|alt=" .. poke .. nom .. "|" .. poke .. nom .. "|class=miniature" .. jeu .. "]]" .. sup
else
if (nom ~= "") then nom = "<br><span style='font-style: italic; font-size: 90%;'>" .. nom .. "</span>" end
return "<span style='white-space: nowrap;' class='miniat-poke'>" .. num .. " [[Fichier:Miniature " .. num .. forme .. sexe .. jeu .. ".png|link=" .. lien .. "|alt=|class=miniature" .. jeu .. "]] [[" .. lien .. "|" .. poke .. "]]" .. sup .. "</span>" .. nom
end
end