Module:Infobox Pokémon

De Poképédia
Sauter à la navigation Sauter à la recherche
Miniature 201 ? RS.gifC'est quoi, un modèle ?

L'aide de ce module se trouve sur cette page.

But et contexte

Cette infobox permet de renseigner rapidement et simplement les principales informations concernant un Pokémon.
Elle est à inclure en tête des articles détaillés concernant les Pokémon, juste après le modèle {{Ruban Pokémon}}

Utilisation

Syntaxe

La syntaxe à suivre pour utiliser cette infobox est :

{{#invoke:Infobox Pokémon|infobox
| (paramètre 1)=(valeur 1)
| (paramètre 2)=(valeur 2)
(...)
| (paramètre n)=(valeur n)
}}

Notes :

  • Les majuscules à Infobox et à Pokémon sont obligatoires.
  • Les paramètres possibles sont indiqués sur la page du modèle. Les valeurs attendues sont données en indication sur la même page lorsque c'est ambigu. Attention ! Il ne faut pas mettre les parenthèses autour des noms de paramètre ou de valeur.

Paramètres

Ce modèle prend en compte les paramètres suivants :

Obligatoires

  • nom : Le nom du Pokémon.
  • nom-japonais : Le nom du Pokémon, en japonais.
  • nom-déposé : Le nom déposé officiel du Pokémon. S'il ne correspond pas au nom japonais en caractères latins, ajouter nom-romaji (paramètre optionnel).
  • légende : Légende de l'image.
  • nom-anglais : Le nom du Pokémon, en anglais.
  • ndex : Le numéro du Pokémon dans le Dex National.
  • dex : Les numéros dans les Dex de la série principale, avec les conventions suivantes et à indiquer dans l'ordre suivant :
Les différentes instances sont à séparer par le séparateur //, et une instance est donnée comme Région/Numéro. Exemple :
| dex=Kanto/016//Johto/010//Johto-HGSS/010//Hoenn/218//Kalos (Centre)/017
  • type1 : Le premier type du Pokémon. Si plusieurs formes, utiliser le séparateur /.
  • espèce : La famille du Pokémon. Si plusieurs formes, utiliser le séparateur /.
  • taille : La taille du Pokémon en mètres. Seul un numéro doit être renseigné, et le séparateur décimal est un point (exemple : 1.5). Pour les formes Gigamax, indiquer un + à la fin du nombre (exemple : 12+). Si plusieurs formes, utiliser le séparateur /.
  • poids : Le poids du Pokémon en kilogrammes. Seul un numéro doit être renseigné, et le séparateur décimal est un point (exemple : 20.8). Si plusieurs formes, utiliser le séparateur /.
  • talents : Les talents du Pokémon. Pour un commentaire, utiliser le séparateur /. Pour indiquer plusieurs talents, utiliser le séparateurs //. Exemple :
    | talents=Brasier//Turbo/[[Talent caché]]
  • groupeoeuf1 : Le premier groupe œuf du Pokémon. Autre valeur possible : -.
  • oeufpas : Le nombre de pas avant éclosion.
  • effortval : Les points EV rapportés par le Pokémon. Si plusieurs formes, utiliser le séparateur /.
  • expval : Les points exp de base du Pokémon.
  • expvaldiff : Information particulière concernant l'exp de base (changement entre deux générations, etc.).
  • expmax : L'expérience du Pokémon au niveau 100.
  • fmratio : Le ratio femelle/mâle du Pokémon, compris entre 0 et 1. La valeur spéciale -1 indique un Pokémon asexué. Si plusieurs formes, utiliser le séparateur /.
  • forme : le numéro de la forme du Pokémon. Autre valeur possible : -. Si plusieurs formes, utiliser le séparateur /.
  • couleur : La couleur du Pokémon dans le Pokédex. Autre valeur possible : -. Si plusieurs formes, utiliser le séparateur /.
  • captureval : Le taux de capture. Autre valeur possible : -. Si plusieurs formes, utiliser le séparateur /.

Facultatifs

  • nom-romaji : Transcription en rômaji du nom japonais. Ne mettre que si le nom déposé (nom-déposé) ne correspond pas à la transcription en rômaji.
  • type2 : Le deuxième type du Pokémon.
  • dex-secondaires : Les numéros dans les Dex des jeux secondaires, avec les conventions suivantes et à indiquer dans l'ordre suivant :
  • groupeoeuf1diff : Ajout de détail si groupeoeuf1 a évolué entre deux jeux.
  • groupeoeuf2 : Le deuxième groupe œuf du Pokémon.
  • groupeoeuf2diff : Ajout de détail si groupeoeuf2 a évolué entre deux jeux.
  • catégories (valeur par défaut : oui) : indique si les catégories doivent prises en compte pour la page contenant l'infobox. Si la valeur est différente non, alors les catégories ne sont pas prises en compte.
  • catégorisation-plusieurs-formes (valeur par défaut : oui) : si la valeur est non, permet d'enlever la catégorisation automatique dans "Pokémon à plusieurs formes" si plusieurs artworks sont renseignés.
  • génération : sert à indiquer la génération d'un Pokémon. Doit seulement servir pour les formes alternatives des Pokémon, comme les Méga-Pokémon ou les formes régionales par exemple. Pour les Pokémon "normaux", la génération est calculée automatiquement à partir du numéro dans le Pokédex national.
  • empreinte : sert à indiquer l'empreinte d'un Pokémon, si le fichier correspondant est différent de celui calculé automatiquement. Par défaut, l'empreinte ne sera affichée que si la génération du Pokémon est inférieure ou égale à 5. Renseigner - permet de forcer le fait de ne pas afficher d'empreinte.
  • donnée-sémantique-ndex : sert à indiquer si le numéro dans le Pokédex national soit être mis en donnée sémantique. La valeur par défaut est oui. Toute autre valeur autre que oui ou vide (absence de valeur) empêche la mise en donnée sémantique. Doit seulement servir pour les Méga-Pokémon.
  • cri : si le cri d'un Pokémon est dans un fichier dont le nom n'est pas Fichier:Cri 4 d <ndex>.ogg, la valeur de cri est le nom du fichier sans le préfixe Fichier:-, ni le suffixe -.ogg, de la façon suivante : Fichier:<cri>.ogg. Si plusieurs formes, utiliser le séparateur /.
  • artwork : le nom du fichier de l'artwork si différent du nom. Si plusieurs formes, utiliser le séparateur /.
  • forme-principale : permet de spécifier le numéro de la forme principale si ce n'est pas la première qui est indiquée. Les couleurs de l'infobox suivront le type de la forme indiquée.
  • switch-artworks : permet de rendre aléatoires les couleurs et l'artwork dominant de l'infobox d'un Pokémon à plusieurs formes à types différents dont l'une n'est pas dominante (l'aléatoire suit les types des formes), comme Plumeline mais pas Motisma. Entrer oui pour observer ce changement, la valeur est non par défaut.
  • conditions : pour indiquer les conditions des changements de formes de diverses catégories qui le prennent en charge. Il est également possible d'indiquer des conditions spécifiques à chaque catégorie correspondante via les paramètres respectifs conditions-type, conditions-espèce, conditions-taille, conditions-poids, conditions-effortval, conditions-fmratio, conditions-couleur, conditions-captureval, conditions-forme et conditions-cri. Les valeurs sont à séparer avec /. Par défaut, les valeurs sont égales au paramètre conditions.

Exemple

Le code suivant est un exemple d'utilisation du modèle :

{{#invoke:Infobox Pokémon|infobox
| nom=Bulbizarre
| nom-anglais=Bulbasaur
| nom-japonais=フシギダネ
| nom-déposé=Fushigidane
| légende=Artwork de Bulbizarre pour {{Jeu|RFVF}}.
| ndex=001
| dex=Kanto/001//Johto/226//Johto-HGSS/231//Hoenn/203//Kalos (Centre)/080
| dex-secondaires=Fiore/R-001//Oblivia (Présent)/R-014//Oblivia (Passé)/N-004//PokéPark/P-030//Shuffle/001//Picross/N14-08//Picross (Alternatif)/A14-09
| espèce=Graine
| taille=0.7
| poids=6.9
| fmratio=.125
| oeufpas=5120
| type1=Plante
| type2=Poison
| expval=64
| expmax=1059860
| captureval=45
| groupeoeuf1=Monstrueux
| groupeoeuf2=Végétal
| talents=Engrais (talent){{!}}Engrais//Chlorophylle/[[Talent caché]]
| couleur=Vert
| forme=8
| cri=Cri 6 x 001
}}

Pour le résultat à droite de cette page.

Modifier ce modèle

Note : Pour des raisons de sécurité, ce modèle est partiellement protégé, seuls les contributeurs ayant un compte peuvent le modifier.

Miniature 201 ! RS.gifN'oubliez pas de vous référer à l'aide concernant la création et la modification des modèles ainsi qu'aux conventions !

Voir aussi


local p = {}

function lowercase(str) -- met un mot en lowercase
	return string.lower( string.gsub( str, "É", "é" ) )
end
	
	function firstToUpper(str) -- met une majuscule au mot
    return (str:gsub("^%l", string.upper))
end

function separate_thousands(amount)
	local formatted = amount
	while true do
		formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1 %2')
		if (k==0) then
			break
		end
	end
	return formatted
end

function nil_to_string(str)
	if str == nil
	then return ''
	else return str
	end
end

function association_region(frame, region)
	-- Jeux principaux

	if region == 'Kanto'					then return '[[Liste des Pokémon dans l\'ordre du Pokédex de Kanto|Kanto]]'
	elseif region == 'Kanto-LGPE'			then return '[[Liste des Pokémon dans l\'ordre du Pokédex de Kanto|Kanto]]' .. frame:expandTemplate{title='Sup', args={'LGPE'}}
	elseif region == 'Johto'				then return '[[Liste des Pokémon dans l\'ordre du Pokédex de Johto|Johto]]' .. frame:expandTemplate{title='Sup', args={'OAC'}}
	elseif region == 'Johto-HGSS'			then return '[[Liste des Pokémon dans l\'ordre du Pokédex de Johto (Pokémon Or HeartGold et Argent SoulSilver)|Johto]]' .. frame:expandTemplate{title='Sup', args={'HGSS'}}
	elseif region == 'Hoenn'				then return '[[Liste des Pokémon dans l\'ordre du Pokédex de Hoenn|Hoenn]]' .. frame:expandTemplate{title='Sup', args={'RSE'}}
	elseif region == 'Hoenn-ROSA'			then return '[[Liste des Pokémon dans l\'ordre du Pokédex de Hoenn (Pokémon Rubis Oméga et Saphir Alpha)|Hoenn]]' .. frame:expandTemplate{title='Sup', args={'ROSA'}}
	elseif region == 'Sinnoh'				then return '[[Liste des Pokémon dans l\'ordre du Pokédex de Sinnoh|Sinnoh]]'
	elseif region == 'Sinnoh-Pt'			then return '[[Liste des Pokémon dans l\'ordre du Pokédex de Sinnoh|Sinnoh]]' .. frame:expandTemplate{title='Sup', args={'Pt'}}
	elseif region == 'Unys'					then return '[[Liste des Pokémon dans l\'ordre du Pokédex d\'Unys|Unys]]' .. frame:expandTemplate{title='Sup', args={'NB'}}
	elseif region == 'Unys-NB2'				then return '[[Liste des Pokémon dans l\'ordre du Pokédex d\'Unys (Pokémon Noir et Blanc 2)|Unys]]' .. frame:expandTemplate{title='Sup', args={'NB2'}}
	elseif region == 'Kalos (Centre)'		then return '[[Liste des Pokémon dans l\'ordre du Pokédex de Kalos|Kalos]]<br/><small><b>(Centre)</b></small>'
	elseif region == 'Kalos (Côtes)'		then return '[[Liste des Pokémon dans l\'ordre du Pokédex de Kalos|Kalos]]<br/><small><b>(Côtes)</b></small>'
	elseif region == 'Kalos (Monts)'		then return '[[Liste des Pokémon dans l\'ordre du Pokédex de Kalos|Kalos]]<br/><small><b>(Monts)</b></small>'
	elseif region == 'Alola'				then return '[[Liste des Pokémon dans l\'ordre du Pokédex d\'Alola|Alola]]' .. frame:expandTemplate{title='Sup', args={'SL'}}
	elseif region == 'Alola-USUL'			then return '[[Liste des Pokémon dans l\'ordre du Pokédex d\'Alola (Pokémon Ultra-Soleil et Ultra-Lune)|Alola]]' .. frame:expandTemplate{title='Sup', args={'USUL'}}
	elseif region == 'Galar'				then return '[[Liste des Pokémon dans l\'ordre du Pokédex de Galar|Galar]]'

	-- Jeux secondaires

	elseif region == 'Fiore'				then return '[[Liste des Pokémon dans l\'ordre du Navigateur de Fiore|Fiore]]'
	elseif region == 'Almia'				then return '[[Liste des Pokémon dans l\'ordre du Navigateur d\'Almia|Almia]]'
	elseif region == 'Oblivia (Présent)'	then return '[[Liste des Pokémon dans l\'ordre du Navigateur d\'Oblivia (Présent)|Oblivia]]<br/><small><b>(Présent)</b></small>'
	elseif region == 'Oblivia (Passé)'		then return '[[Liste des Pokémon dans l\'ordre du Navigateur d\'Oblivia (Passé)|Oblivia]]<br/><small><b>(Passé)</b></small>'
	elseif region == 'Ransei'				then return '[[Liste des Pokémon de la région de Ransei|Ransei]]'
	elseif region == 'PokéPark'				then return '[[Liste des Pokémon de PokéPark Wii : La Grande Aventure de Pikachu|PokéPark]]'
	elseif region == 'PokéPark 2'			then return 'PokéPark 2'
	elseif region == 'Shuffle'				then return '[[Liste des Pokémon dans l\'ordre du Pokédex de Pokémon Shuffle|Shuffle]]'
	elseif region == 'Picross'				then return '[[Liste des niveaux de Pokémon Picross|Picross]]'
	elseif region == 'Picross (Alternatif)'	then return '[[Liste des niveaux de Pokémon Picross|Picross]]<br/><small><b>(Alternatif)</b></small>'
	else return '<i>' .. region .. '</i>'
	end
end

function p.infobox( frame )
	local resultat = {}

	local nom = frame.args['nom']
	if nom == nil or nom == '' then nom = frame:getParent():getTitle() end
	local nom_anglais = frame.args['nom-anglais']
	if nom_anglais == nil or nom_anglais == '' then nom_anglais = '<i>Information manquante</i>' end
	local nom_japonais = frame.args['nom-japonais']
	local nom_romaji = frame.args['nom-romaji']
	local nom_depose = frame.args['nom-déposé']
	if nom_depose == nil or nom_depose == '' then nom_depose = '<i>Information manquante</i>' end
	local artwork = frame.args['artwork']
	if artwork == nil or artwork == '' then artwork = nom end
	artwork = mw.text.split(artwork, "/")
	local forme_principale = frame.args['forme-principale']

	local legende = frame.args['légende']

	local type1 = frame.args['type1']
	if type1 == nil or type1 == '' then type1 = "inconnu" end
	type1 = mw.text.split(type1, "/")
	local type2 = frame.args['type2']
	if type2 == '' or type2 == '-' or type2 == nil then type2 = {} else type2 = mw.text.split(type2, "/") end --on accepte que type2 soit nil
	local switch_artworks = frame.args['switch-artworks'] == 'oui'

	local ndex = frame.args['ndex']
	if ndex == nil or ndex == '' then ndex = "—" end
	local dex = frame.args['dex']
	local dex_secondaires = frame.args['dex-secondaires']
	local donnees = frame.args['données']
	donnees = donnees ~= 'non'
	local donnee_semantique_ndex = frame.args['donnée-sémantique-ndex']
	donnee_semantique_ndex = donnee_semantique_ndex ~= 'non'
	local categories = frame.args['catégories']
	categories = categories ~= 'non'
	local categorisation_plusieurs_formes = frame.args['catégorisation-plusieurs-formes']
	categorisation_plusieurs_formes = categorisation_plusieurs_formes ~= 'non'
	local generation = frame.args['génération']

	generation = tonumber(generation)
	if generation == nil and tonumber(ndex)
	then if tonumber(ndex) <= 151 then generation = 1
		elseif tonumber(ndex) <= 251 then generation = 2
		elseif tonumber(ndex) <= 386 then generation = 3
		elseif tonumber(ndex) <= 493 then generation = 4
		elseif tonumber(ndex) <= 649 then generation = 5
		elseif tonumber(ndex) <= 721 then generation = 6
		elseif tonumber(ndex) <= 809 then generation = 7
		else generation = 8
		end
	end

	-- Calcul automatique du nombre de formes et changement optionnel automatique d'artworks
	local nombre_formes = 1
	local couleur_principale
	local couleur_secondaire = nil
	while artwork[nombre_formes + 1] do
		nombre_formes = nombre_formes + 1
	end

	if nombre_formes > 1 and categories and categorisation_plusieurs_formes then table.insert(resultat, '[[Catégorie:Pokémon à plusieurs formes]]') end
	if tonumber(forme_principale) and nombre_formes >= tonumber(forme_principale)
	then forme_principale = tonumber(forme_principale)
	elseif nombre_formes > 1 and switch_artworks
		then forme_principale = (math.floor(os.time()) % nombre_formes) + 1
	else forme_principale = 1
	end
	if forme_principale > 1
	then if type1[forme_principale] then couleur_principale = type1[forme_principale] else couleur_principale = type1[1] end
		if type2 ~= {}
		then if type2[forme_principale] ~= nil and type2[forme_principale] ~= '' and type2[forme_principale] ~= '-'
				then couleur_secondaire = type2[forme_principale]
			elseif type2[forme_principale] == nil
				then if type2[1] == '' or type2[1] == '-'
					then couleur_secondaire = nil
					else couleur_secondaire = type2[1]
					end
			else couleur_secondaire = nil
			end
		end
		if forme_principale > 1
		then for i = forme_principale, 2, -1 do
			artwork[i], artwork[i-1] = artwork[i-1], artwork[i]
			end
		end
	else couleur_principale = type1[1]
		couleur_secondaire = type2[1]
	end
	if couleur_secondaire ~= nil then couleur_secondaire = frame:expandTemplate{title='Couleur', args={couleur_secondaire}} end

	-- Conditions de forme
	local conditions = frame.args['conditions']
	if conditions == nil then conditions = '' end
	conditions = mw.text.split(conditions, "/")
	local conditions_type = frame.args['conditions-type']
	if conditions_type == nil then conditions_type = '' end
	conditions_type = mw.text.split(conditions_type, "/")
	local conditions_espece = frame.args['conditions-espèce']
	if conditions_espece == nil then conditions_espece = '' end
	conditions_espece = mw.text.split(conditions_espece, "/")
	local conditions_taille = frame.args['conditions-taille']
	if conditions_taille == nil then conditions_taille = '' end
	conditions_taille = mw.text.split(conditions_taille, "/")
	local conditions_poids = frame.args['conditions-poids']
	if conditions_poids == nil then conditions_poids = '' end
	conditions_poids = mw.text.split(conditions_poids, "/")
	local conditions_effortval = frame.args['conditions-effortval']
	if conditions_effortval == nil then conditions_effortval = '' end
	conditions_effortval = mw.text.split(conditions_effortval, "/")
	local conditions_fmratio = frame.args['conditions-fmratio']
	if conditions_fmratio == nil then conditions_fmratio = '' end
	conditions_fmratio = mw.text.split(conditions_fmratio, "/")
	local conditions_couleur = frame.args['conditions-couleur']
	if conditions_couleur == nil then conditions_couleur = '' end
	conditions_couleur = mw.text.split(conditions_couleur, "/")
	local conditions_captureval = frame.args['conditions-captureval']
	if conditions_captureval == nil then conditions_captureval = '' end
	conditions_captureval = mw.text.split(conditions_captureval, "/")
	local conditions_forme = frame.args['conditions-forme']
	if conditions_forme == nil then conditions_forme = '' end
	conditions_forme = mw.text.split(conditions_forme, "/")
	local conditions_cri = frame.args['conditions-cri']
	if conditions_cri == nil then conditions_cri = '' end
	conditions_cri = mw.text.split(conditions_cri, "/")
	local i = 1
	while conditions[i] do
		if conditions_type[i] == nil or conditions_type[i] == '' then conditions_type[i] = conditions[i] end
		if conditions_espece[i] == nil or conditions_espece[i] == '' then conditions_espece[i] = conditions[i] end
		if conditions_taille[i] == nil or conditions_taille[i] == '' then conditions_taille[i] = conditions[i] end
		if conditions_poids[i] == nil or conditions_poids[i] == '' then conditions_poids[i] = conditions[i] end
		if conditions_effortval[i] == nil or conditions_effortval[i] == '' then conditions_effortval[i] = conditions[i] end
		if conditions_fmratio[i] == nil or conditions_fmratio[i] == '' then conditions_fmratio[i] = conditions[i] end
		if conditions_couleur[i] == nil or conditions_couleur[i] == '' then conditions_couleur[i] = conditions[i] end
		if conditions_captureval[i] == nil or conditions_captureval[i] == '' then conditions_captureval[i] = conditions[i] end
		if conditions_forme[i] == nil or conditions_forme[i] == '' then conditions_forme[i] = conditions[i] end
		if conditions_cri[i] == nil or conditions_cri[i] == '' then conditions_cri[i] = conditions[i] end
		i = i + 1
	end

	local espece = frame.args['espèce']
	local poids = frame.args['poids']
	local taille = frame.args['taille']

	local talents = frame.args['talents']
	local groupeoeuf1 = frame.args['groupeoeuf1']
	local groupeoeuf1diff = frame.args['groupeoeuf1diff']
	local groupeoeuf2 = frame.args['groupeoeuf2']
	local groupeoeuf2diff = frame.args['groupeoeuf2diff']
	local oeufpas = frame.args['oeufpas']
	local effortval = frame.args['effortval']
	local expval = frame.args['expval']
	local expvaldiff = frame.args['expvaldiff']
	local expmax = frame.args['expmax']
	local fmratio = frame.args['fmratio']
	local couleur = frame.args['couleur']
	local captureval = frame.args['captureval']
	local empreinte = frame.args['empreinte']
	local forme = frame.args['forme']
	local cri = frame.args['cri']

	-- EN-TÊTE
	table.insert(resultat, '<table class="tableaustandard ficheinfo ' .. lowercase(couleur_principale) .. '"><thead><tr><th class="entêtesection"')
	if couleur_secondaire ~= nil then table.insert(resultat, ' style="background: ' .. couleur_secondaire .. ' !important"') end
	table.insert(resultat, '><big><span class="explain" title="Numérotation nationale">№ ')
	if donnee_semantique_ndex
	then table.insert(resultat, '[[Numéro National::' .. ndex .. ']]')
	else table.insert(resultat, ndex)
	end
	table.insert(resultat, '</span></big></th><th class="entêtesection" colspan="3">' .. nom .. '<br/>')
	if nom_japonais ~= nil then table.insert(resultat, '<span lang="ja">' .. nom_japonais ..'</span> ') end
	if nom_romaji ~= nil and nom_romaji ~= '' then table.insert(resultat, '<span lang="ja" title="Transcription en romaji"><i>(' .. nom_romaji ..')</i></span>') end
	table.insert(resultat, ' <span title="Nom déposé officiel"><i>' .. nom_depose .. '</i></span></th></thead>')

	-- ARTWORK
	table.insert(resultat, '<tbody><tr><td class="illustration" colspan="4">[[Fichier:' .. artwork[1] .. '.png|250px]]')
	local i = 2
	while artwork[i] and artwork[i+1] and artwork[i+2] and artwork[i+3] and artwork[i+4] do
		table.insert(resultat, '<br/><br/>[[Fichier:' .. artwork[i] .. '.png|80px]] [[Fichier:' .. artwork[i+1] .. '.png|80px]] [[Fichier:' .. artwork[i+2] .. '.png|80px]]')
		i = i + 3
	end
	if artwork[i] and artwork[i+1] and artwork[i+2] and artwork[i+3]
		then table.insert(resultat, '<br/><br/>[[Fichier:' .. artwork[i] .. '.png|120px]] [[Fichier:' .. artwork[i+1] .. '.png|120px]]<br/><br/>[[Fichier:' .. artwork[i+2] .. '.png|120px]] [[Fichier:' .. artwork[i+3] .. '.png|120px]]')
	elseif artwork[i] and artwork[i+1] and artwork[i+2]
		then table.insert(resultat, '<br/><br/>[[Fichier:' .. artwork[i] .. '.png|80px]] [[Fichier:' .. artwork[i+1] .. '.png|80px]] [[Fichier:' .. artwork[i+2] .. '.png|80px]]')
	elseif artwork[i] and artwork[i+1]
		then table.insert(resultat, '<br/><br/>[[Fichier:' .. artwork[i] .. '.png|120px]] [[Fichier:' .. artwork[i+1] .. '.png|120px]]')
	elseif artwork[i]
		then table.insert(resultat, '<br/><br/>[[Fichier:' .. artwork[i] .. '.png|150px]]')
	end
	if legende ~= nil then table.insert(resultat, '<br/><small>' .. legende .. '</small>') end
	table.insert(resultat, '</td></tr>')

	-- NOM ANGLAIS
	table.insert(resultat, '<tr><th>Nom anglais</th><td colspan="3">' .. nom_anglais .. '</td></tr>')

	-- NUMÉROS DE POKÉDEX
	table.insert(resultat, '<tr><th colspan="4" style="text-align:center;">[[Liste des Pokémon dans l\'ordre du Pokédex National|Numéros de Pokédex]] régionaux</th></tr>')
	if dex == nil or dex == ''
	then table.insert(resultat, '<tr><td colspan="4" style="text-align:center;"><i>Ce Pokémon n\'apparaît dans aucun Pokédex régional.</i></td></tr>')
	else if dex ~= nil and dex ~= ''
		then table.insert(resultat, '<tr><td colspan="4" style="padding:0px;"><table style="width:100%;text-align:center;background-color:white;border-radius:3px;">') -- on fait une sous-table pour les dex
			dex = mw.text.split(dex, "//")
			local i = 1
			local infos_region1 = {}
			local infos_region2 = {}
			local infos_region3 = {}
			local infos_region4 = {}
			while dex[i] and dex[i+1] and dex[i+2] and dex[i+3] do -- on regroupe les régions par 4 jusqu'à ce qu'il en reste moins que 4
				infos_region1 = mw.text.split(dex[i], "/")
				infos_region2 = mw.text.split(dex[i+1], "/")
				infos_region3 = mw.text.split(dex[i+2], "/")
				infos_region4 = mw.text.split(dex[i+3], "/")
				table.insert(resultat, '<tr>')
				table.insert(resultat, '<td style="line-height:8pt;width:25%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region1[1]) .. '</strong></small></em></td>')
				table.insert(resultat, '<td style="line-height:8pt;width:25%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region2[1]) .. '</strong></small></em></td>')
				table.insert(resultat, '<td style="line-height:8pt;width:25%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region3[1]) .. '</strong></small></em></td>')
				table.insert(resultat, '<td style="line-height:8pt;width:25%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region4[1]) .. '</strong></small></em></td>')
				table.insert(resultat, '</tr><tr>')
				if infos_region1[2] ~= nil then table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">' .. infos_region1[2] .. '</td>') else table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">—</td>') end
				if infos_region2[2] ~= nil then table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">' .. infos_region2[2] .. '</td>') else table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">—</td>') end
				if infos_region3[2] ~= nil then table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">' .. infos_region3[2] .. '</td>') else table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">—</td>') end
				if infos_region4[2] ~= nil then table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">' .. infos_region4[2] .. '</td>') else table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">—</td>') end
				table.insert(resultat, '</tr>')
				i = i + 4
			end
			if dex[i] and dex[i+1] and dex[i+2] -- il ne reste plus que 3 régions
			then local infos_region1 = mw.text.split(dex[i], "/")
				local infos_region2 = mw.text.split(dex[i+1], "/")
				local infos_region3 = mw.text.split(dex[i+2], "/")
				table.insert(resultat, '<td style="line-height:8pt;width:25%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region1[1]) .. '</strong></small></em></td>')
				table.insert(resultat, '<td colspan="2" style="line-height:8pt;width:50%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region2[1]) .. '</strong></small></em></td>')
				table.insert(resultat, '<td style="line-height:8pt;width:25%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region3[1]) .. '</strong></small></em></td>')
				table.insert(resultat, '</tr><tr>')
				if infos_region1[2] ~= nil then table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">' .. infos_region1[2] .. '</td>') else table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">—</td>') end
				if infos_region2[2] ~= nil then table.insert(resultat, '<td colspan="2" style="line-height:10pt;padding: 2px;">' .. infos_region2[2] .. '</td>') else table.insert(resultat, '<td colspan="2" style="line-height:10pt;padding: 2px;">—</td>') end
				if infos_region3[2] ~= nil then table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">' .. infos_region3[2] .. '</td>') else table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">—</td>') end
				table.insert(resultat, '</tr>')
			elseif dex[i] and dex[i+1] -- il ne reste plus que 2 régions
			then local infos_region1 = mw.text.split(dex[i], "/")
				local infos_region2 = mw.text.split(dex[i+1], "/")
				table.insert(resultat, '<td colspan="2" style="line-height:8pt;width:50%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region1[1]) .. '</strong></small></em></td>')
				table.insert(resultat, '<td colspan="2" style="line-height:8pt;width:50%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region2[1]) .. '</strong></small></em></td>')
				table.insert(resultat, '</tr><tr>')
				if infos_region1[2] ~= nil then table.insert(resultat, '<td colspan="2" style="line-height:10pt;padding: 2px;">' .. infos_region1[2] .. '</td>') else table.insert(resultat, '<td colspan="2" style="line-height:10pt;padding: 2px;">—</td>') end
				if infos_region2[2] ~= nil then table.insert(resultat, '<td colspan="2" style="line-height:10pt;padding: 2px;">' .. infos_region2[2] .. '</td>') else table.insert(resultat, '<td colspan="2" style="line-height:10pt;padding: 2px;">—</td>') end
				table.insert(resultat, '</tr>')
			elseif dex[i] -- il ne reste plus qu'1 région
			then local infos_region1 = mw.text.split(dex[i], "/")
				table.insert(resultat, '<tr><td colspan="4" style="line-height:8pt;width:100%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region1[1]) .. '</strong></small></em></td></tr><tr><td colspan="4" style="line-height:10pt;padding: 2px;">')
				if infos_region1[2] ~= nil then table.insert(resultat, infos_region1[2] .. '</td></tr>') else table.insert(resultat, '—</td></tr>') end
			end
			table.insert(resultat, '</table></td></tr>')
		end
		dex = nil
	end
	-- meme chose pour les dex_secondaires : copier/coller en remplacant dex par dex_secondaires
	if dex_secondaires ~= nil and dex_secondaires ~= ''
	then table.insert(resultat, '<tr><th colspan="4" style="text-align:center;">[[Capstick#Autres fonctions|Navigateurs]] et autres numérotations</th></tr><tr><td colspan="4" style="padding:0px;"><table style="width:100%;text-align:center;background-color:white;border-radius:3px;">') -- on fait une sous-table pour les dex_secondaires
		dex_secondaires = mw.text.split(dex_secondaires, "//")
		local i = 1
		local infos_region1 = {}
		local infos_region2 = {}
		local infos_region3 = {}
		local infos_region4 = {}
		while dex_secondaires[i] and dex_secondaires[i+1] and dex_secondaires[i+2] and dex_secondaires[i+3] do
			infos_region1 = mw.text.split(dex_secondaires[i], "/")
			infos_region2 = mw.text.split(dex_secondaires[i+1], "/")
			infos_region3 = mw.text.split(dex_secondaires[i+2], "/")
			infos_region4 = mw.text.split(dex_secondaires[i+3], "/")
			table.insert(resultat, '<tr>')
			table.insert(resultat, '<td style="line-height:8pt;width:25%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region1[1]) .. '</strong></small></em></td>')
			table.insert(resultat, '<td style="line-height:8pt;width:25%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region2[1]) .. '</strong></small></em></td>')
			table.insert(resultat, '<td style="line-height:8pt;width:25%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region3[1]) .. '</strong></small></em></td>')
			table.insert(resultat, '<td style="line-height:8pt;width:25%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region4[1]) .. '</strong></small></em></td>')
			table.insert(resultat, '</tr><tr>')
			if infos_region1[2] ~= nil then table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">' .. infos_region1[2] .. '</td>') else table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">—</td>') end
			if infos_region2[2] ~= nil then table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">' .. infos_region2[2] .. '</td>') else table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">—</td>') end
			if infos_region3[2] ~= nil then table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">' .. infos_region3[2] .. '</td>') else table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">—</td>') end
			if infos_region4[2] ~= nil then table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">' .. infos_region4[2] .. '</td>') else table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">—</td>') end
			table.insert(resultat, '</tr>')
			i = i + 4
		end
		if dex_secondaires[i] and dex_secondaires[i+1] and dex_secondaires[i+2] -- il ne reste plus que 3 régions
		then local infos_region1 = mw.text.split(dex_secondaires[i], "/")
			local infos_region2 = mw.text.split(dex_secondaires[i+1], "/")
			local infos_region3 = mw.text.split(dex_secondaires[i+2], "/")
			table.insert(resultat, '<td style="line-height:8pt;width:25%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region1[1]) .. '</strong></small></em></td>')
			table.insert(resultat, '<td colspan="2" style="line-height:8pt;width:50%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region2[1]) .. '</strong></small></em></td>')
			table.insert(resultat, '<td style="line-height:8pt;width:25%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region3[1]) .. '</strong></small></em></td>')
			table.insert(resultat, '</tr><tr>')
			if infos_region1[2] ~= nil then table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">' .. infos_region1[2] .. '</td>') else table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">—</td>') end
			if infos_region2[2] ~= nil then table.insert(resultat, '<td colspan="2" style="line-height:10pt;padding: 2px;">' .. infos_region2[2] .. '</td>') else table.insert(resultat, '<td colspan="2" style="line-height:10pt;padding: 2px;">—</td>') end
			if infos_region3[2] ~= nil then table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">' .. infos_region3[2] .. '</td>') else table.insert(resultat, '<td style="line-height:10pt;padding: 2px;">—</td>') end
			table.insert(resultat, '</tr>')
		elseif dex_secondaires[i] and dex_secondaires[i+1] -- il ne reste plus que 2 régions
		then local infos_region1 = mw.text.split(dex_secondaires[i], "/")
			local infos_region2 = mw.text.split(dex_secondaires[i+1], "/")
			table.insert(resultat, '<td colspan="2" style="line-height:8pt;width:50%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region1[1]) .. '</strong></small></em></td>')
			table.insert(resultat, '<td colspan="2" style="line-height:8pt;width:50%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region2[1]) .. '</strong></small></em></td>')
			table.insert(resultat, '</tr><tr>')
			if infos_region1[2] ~= nil then table.insert(resultat, '<td colspan="2" style="line-height:10pt;padding: 2px;">' .. infos_region1[2] .. '</td>') else table.insert(resultat, '<td colspan="2" style="line-height:10pt;padding: 2px;">—</td>') end
			if infos_region2[2] ~= nil then table.insert(resultat, '<td colspan="2" style="line-height:10pt;padding: 2px;">' .. infos_region2[2] .. '</td>') else table.insert(resultat, '<td colspan="2" style="line-height:10pt;padding: 2px;">—</td>') end
			table.insert(resultat, '</tr>')
		elseif dex_secondaires[i] -- il ne reste plus qu'1 région
		then local infos_region1 = mw.text.split(dex_secondaires[i], "/")
			table.insert(resultat, '<tr><td colspan="4" style="line-height:8pt;width:100%;padding: 2px;"><em><small><strong>' .. association_region(frame, infos_region1[1]) .. '</strong></small></em></td></tr><tr><td colspan="4" style="line-height:10pt;padding: 2px;">')
			if infos_region1[2] ~= nil then table.insert(resultat, infos_region1[2] .. '</td></tr>') else table.insert(resultat, '—</td></tr>') end
		end
		table.insert(resultat, '</table></td></tr>')
	end
	dex_secondaires = nil

	-- TYPES
	if not type1[2]
	-- Une seule forme
	then if type2[1] == nil
		then table.insert(resultat, '<tr><th>[[Type]]</th><td colspan="3">[[Fichier:Miniature Type ' .. firstToUpper(type1[1]) .. '.png|68px|link=' .. type1[1] .. ' (type)]][[Premier type::' .. type1[1] .. '|]]')
			if categories then table.insert(resultat, '[[Catégorie:Pokémon de type ' .. type1[1] .. ']]') end
		else table.insert(resultat, '<tr><th>[[Type]]s</th><td colspan="3">[[Fichier:Miniature Type ' .. firstToUpper(type1[1]) .. '.png|68px|link=' .. type1[1] .. ' (type)]] - [[Fichier:Miniature Type ' .. firstToUpper(type2[1]) .. '.png|68px|link=' .. type2[1] .. ' (type)]][[Premier type::' .. type1[1] .. '|]][[Second type::' .. type2[1] ..'|]]')
			if categories then table.insert(resultat, '[[Catégorie:Pokémon de type ' .. type1[1] .. ']][[Catégorie:Pokémon de type ' .. type2[1] .. ']]') end
		end
		table.insert(resultat, '</td></tr>')
	-- Plusieurs formes
	else table.insert(resultat, '<tr><th colspan="4" style="text-align:center;">[[Type]]s</th></tr>')
		local i = 1
		while type1[i] and type1[i+1] do
			if type2 ~= {} then if type2[i] == nil then type2[i] = type2[1] end end
			if type2[i] == nil or type2[i] == '' or type2[i] == '-'
			then table.insert(resultat, '<tr><td colspan="2" style="text-align:center;">[[Fichier:Miniature Type ' .. firstToUpper(type1[i]) .. '.png|68px|link=' .. type1[i] .. ' (type)]][[Premier type::' .. type1[i] .. '|]]')
				if categories then table.insert(resultat, '[[Catégorie:Pokémon de type ' .. type1[i] .. ']]') end
			else table.insert(resultat, '<tr><td colspan="2" style="text-align:center;">[[Fichier:Miniature Type ' .. firstToUpper(type1[i]) .. '.png|68px|link=' .. type1[i] .. ' (type)]] - [[Fichier:Miniature Type ' .. firstToUpper(type2[i]) .. '.png|68px|link=' .. type2[i] .. ' (type)]][[Premier type::' .. type1[i] .. '|]][[Second type::' .. type2[i] ..'|]]')
				if categories then table.insert(resultat, '[[Catégorie:Pokémon de type ' .. type1[i] .. ']][[Catégorie:Pokémon de type ' .. type2[i] .. ']]') end
			end
			table.insert(resultat, '<br/><small><i>(' .. nil_to_string(conditions_type[i]) .. ')</i></small></td>')
			if type2 ~= {} then if type2[i+1] == nil then type2[i+1] = type2[1] end end
			if type2[i+1] == nil or type2[i+1] == '' or type2[i+1] == '-'
			then table.insert(resultat, '<td colspan="2" style="text-align:center;">[[Fichier:Miniature Type ' .. firstToUpper(type1[i+1]) .. '.png|68px|link=' .. type1[i+1] .. ' (type)]][[Premier type::' .. type1[i+1] .. '|]]')
				if categories then table.insert(resultat, '[[Catégorie:Pokémon de type ' .. type1[i+1] .. ']]') end
			else table.insert(resultat, '<td colspan="2" style="text-align:center;">[[Fichier:Miniature Type ' .. firstToUpper(type1[i+1]) .. '.png|68px|link=' .. type1[i+1] .. ' (type)]] - [[Fichier:Miniature Type ' .. firstToUpper(type2[i+1]) .. '.png|68px|link=' .. type2[i+1] .. ' (type)]][[Premier type::' .. type1[i+1] .. '|]][[Second type::' .. type2[i+1] ..'|]]')
				if categories then table.insert(resultat, '[[Catégorie:Pokémon de type ' .. type1[i+1] .. ']][[Catégorie:Pokémon de type ' .. type2[i+1] .. ']]') end
			end
			table.insert(resultat, '<br/><small><i>(' .. nil_to_string(conditions_type[i+1]) .. ')</i></small></td></tr>')
			i = i + 2
		end
		if type1[i]
		then if type2[i] == nil or type2[i] == '' or type2[i] == '-'
			then table.insert(resultat, '<tr><td colspan="4" style="text-align:center;">[[Fichier:Miniature Type ' .. firstToUpper(type1[i]) .. '.png|68px|link=' .. type1[i] .. ' (type)]][[Premier type::' .. type1[i] .. '|]]')
				if categories then table.insert(resultat, '[[Catégorie:Pokémon de type ' .. type1[i] .. ']]') end
			else table.insert(resultat, '<tr><td colspan="4" style="text-align:center;">[[Fichier:Miniature Type ' .. firstToUpper(type1[i]) .. '.png|68px|link=' .. type1[i] .. ' (type)]] - [[Fichier:Miniature Type ' .. firstToUpper(type2[i]) .. '.png|68px|link=' .. type2[i] .. ' (type)]][[Premier type::' .. type1[i] .. '|]][[Second type::' .. type2[i] ..'|]]')
				if categories then table.insert(resultat, '[[Catégorie:Pokémon de type ' .. type1[i] .. ']][[Catégorie:Pokémon de type ' .. type2[i] .. ']]') end
			end
			table.insert(resultat, '<br/><small><i>(' .. nil_to_string(conditions_type[i]) .. ')</i></small></td></tr>')
		end
	end

	-- CATÉGORIE/ESPÈCE
	if espece == nil then espece = {} else espece = mw.text.split(espece, "/") end
	if espece[2] == nil
	then table.insert(resultat, '<tr><th>[[Famille|Catégorie]]</th><td colspan="3">')
		if espece[1] == nil or espece[1] == ''
		then table.insert(resultat, '—')
		else table.insert(resultat, '[[Pokémon (créature)|Pokémon]] [[Famille::' .. espece[1] .. ']]')
		end
		table.insert(resultat, '</td></tr>')
	else table.insert(resultat, '<tr><th colspan="4" style="text-align:center;>[[Famille|Catégories]]</th></tr>')
		local i = 1
		while espece[i] and espece[i+1] do
			table.insert(resultat, '<tr><td colspan="2" style="text-align:center;>[[Pokémon (créature)|Pokémon]] [[Famille::' .. espece[i] .. ']]<br/><small><i>(' .. nil_to_string(conditions_espece[i]) .. ')</i></small></td>')
			table.insert(resultat, '<td colspan="2" style="text-align:center;>[[Pokémon (créature)|Pokémon]] [[Famille::' .. espece[i+1] .. ']]<br/><small><i>(' .. nil_to_string(conditions_espece[i+1]) .. ')</i></small></td></tr>')
			i = i + 2
		end
		if espece[i] then table.insert(resultat, '<tr><td colspan="4" style="text-align:center;>[[Pokémon (créature)|Pokémon]] [[Famille::' .. espece[i] .. ']]<br/><small><i>(' .. nil_to_string(conditions_espece[i]) .. ')</i></small></td></tr>') end
	end
	espece = nil

	-- TAILLE
	if taille == nil then taille = {} else taille = mw.text.split(taille, "/") end
	if taille[2] == nil
	-- Une seule forme
	then table.insert(resultat, '<tr><th>[[Liste des Pokémon par taille|Taille]]</th><td colspan="3">')
		if taille[1] == nil or taille[1] == ''
		then table.insert(resultat, '???,? m')
		else local taille_plus = false
			if string.sub(taille[1], -1, -1) == '+'
			then taille[1] = string.sub(taille[1], 1, -2)
				taille_plus = true
			end
			if tonumber(taille[1])
			then taille[1] = tonumber(taille[1])
				if taille_plus then table.insert(resultat, 'Plus de ') end
				table.insert(resultat, '[[Taille::' .. math.floor(taille[1]) .. ',' .. math.floor(10*(taille[1]%1)+0.5) .. ']] m, soit ') -- on change la notation de type '0.2' en '0,2'.
				local taille_pieds = math.floor((taille[1] * 3.2808)*10+0.5)/10
				if taille_pieds <= 1.0
				then table.insert(resultat, math.floor(taille_pieds) .. ',' .. math.floor(10*(taille_pieds%1)+0.5) .. ' pied')
				else table.insert(resultat, math.floor(taille_pieds) .. ',' .. math.floor(10*(taille_pieds%1)+0.5) .. ' pieds')
				end
			else table.insert(resultat, '<i>' .. taille[1] .. '</i>[[Catégorie:Pokémon dont la taille est mal indiquée]]')
			end
			table.insert(resultat, '</td></tr>')
		end
	-- Plusieurs formes
	else table.insert(resultat, '<tr><th colspan="4" style="text-align:center;">[[Liste des Pokémon par taille|Tailles]]</th></tr>')
		local i = 1
		local taille_pieds
		while taille[i] and taille[i+1] do
			table.insert(resultat, '<tr><td colspan="2" style="text-align:center;">')
			local taille_plus = false
			if string.sub(taille[i], -1, -1) == '+'
			then taille[i] = string.sub(taille[i], 1, -2)
				taille_plus = true
			end
			if tonumber(taille[i])
			then taille[i] = tonumber(taille[i])
				if taille_plus then table.insert(resultat, 'Plus de ') end
				table.insert(resultat, '[[Taille::' .. math.floor(taille[i]) .. ',' .. math.floor(10*(taille[i]%1)+0.5) .. ']] m, soit<br/>') -- on change la notation de type '0.2' en '0,2'.
				local taille_pieds = math.floor((taille[i] * 3.2808)*10+0.5)/10
				if taille_pieds <= 1.0
				then table.insert(resultat, math.floor(taille_pieds) .. ',' .. math.floor(10*(taille_pieds%1)+0.5) .. ' pied')
				else table.insert(resultat, math.floor(taille_pieds) .. ',' .. math.floor(10*(taille_pieds%1)+0.5) .. ' pieds')
				end
			elseif taille[i] == '' or taille[i] == '-'
				then table.insert(resultat, '???,? m')
			else table.insert(resultat, '<i>' .. taille[i] .. '</i>[[Catégorie:Pokémon dont la taille est mal indiquée]]')
			end
			table.insert(resultat, '<br/><small><i>(' .. nil_to_string(conditions_taille[i]) .. ')</i></small></td><td colspan="2" style="text-align:center;">')
			local taille_plus = false
			if string.sub(taille[i+1], -1, -1) == '+'
			then taille[i+1] = string.sub(taille[i+1], 1, -2)
				taille_plus = true
			end
			if tonumber(taille[i+1])
			then taille[i+1] = tonumber(taille[i+1])
				if taille_plus then table.insert(resultat, 'Plus de ') end
				table.insert(resultat, '[[Taille::' .. math.floor(taille[i+1]) .. ',' .. math.floor(10*(taille[i+1]%1)+0.5) .. ']] m, soit<br/>') -- on change la notation de type '0.2' en '0,2'.
				local taille_pieds = math.floor((taille[i+1] * 3.2808)*10+0.5)/10
				if taille_pieds <= 1.0
				then table.insert(resultat, math.floor(taille_pieds) .. ',' .. math.floor(10*(taille_pieds%1)+0.5) .. ' pied')
				else table.insert(resultat, math.floor(taille_pieds) .. ',' .. math.floor(10*(taille_pieds%1)+0.5) .. ' pieds')
				end
			elseif taille[i+1] == '' or taille[i+1] == '-'
				then table.insert(resultat, '???,? m')
			else table.insert(resultat, '<i>' .. taille[i+1] .. '</i>[[Catégorie:Pokémon dont la taille est mal indiquée]]')
			end
			table.insert(resultat, '<br/><small><i>(' .. nil_to_string(conditions_taille[i+1]) .. ')</i></small></td></tr>')
			i = i + 2
		end
		if taille[i]
		then local taille_plus = false
			if string.sub(taille[i], -1, -1) == '+'
			then taille[i] = string.sub(taille[i], 1, -2)
				taille_plus = true
			end
			table.insert(resultat, '<tr><td colspan="4" style="text-align:center;">')
			if tonumber(taille[i])
			then taille[i] = tonumber(taille[i])
				if taille_plus then table.insert(resultat, 'Plus de ') end
				table.insert(resultat, '[[Taille::' .. math.floor(taille[i]) .. ',' .. math.floor(10*(taille[i]%1)+0.5) .. ']] m, soit ') -- on change la notation de type '0.2' en '0,2'.
				local taille_pieds = math.floor((taille[i] * 3.2808)*10+0.5)/10
				if taille_pieds <= 1.0
				then table.insert(resultat, math.floor(taille_pieds) .. ',' .. math.floor(10*(taille_pieds%1)+0.5) .. ' pied')
				else table.insert(resultat, math.floor(taille_pieds) .. ',' .. math.floor(10*(taille_pieds%1)+0.5) .. ' pieds')
				end
			elseif taille[i] == '' or taille[i] == '-'
				then table.insert(resultat, '???,? m')
			else table.insert(resultat, '<i>' .. taille[i] .. '</i>[[Catégorie:Pokémon dont la taille est mal indiquée]]')
			end
			table.insert(resultat, '<br/><small><i>(' .. nil_to_string(conditions_taille[i]) .. ')</i></small></td></tr>')
		end
	end
	taille = nil

	-- POIDS
	if poids == nil then poids = {} else poids = mw.text.split(poids, "/") end
	if poids[2] == nil
	-- Une seule forme
	then table.insert(resultat, '<tr><th>[[Liste des Pokémon par poids|Poids]]</th><td colspan="3">')
		if poids[1] == nil or poids[1] == ''
		then table.insert(resultat, '???,? kg')
		else if tonumber(poids[1])
			then poids[1] = tonumber(poids[1])
				table.insert(resultat, '[[Poids::' .. math.floor(poids[1]) .. ',' .. math.floor(10*(poids[1]%1)+0.5) .. ']] kg, soit ') -- on change la notation de type '0.2' en '0,2'.
				local poids_livres = math.floor((poids[1] * 2.2046)*10+0.5)/10
				if poids_livres <= 1.0
				then table.insert(resultat, math.floor(poids_livres) .. ',' .. math.floor(10*(poids_livres%1)+0.5) .. ' livre')
				else table.insert(resultat, math.floor(poids_livres) .. ',' .. math.floor(10*(poids_livres%1)+0.5) .. ' livres')
				end
			else table.insert(resultat, '<i>' .. poids[1] .. '</i>[[Catégorie:Pokémon dont le poids est mal indiqué]]')
			end
			table.insert(resultat, '</td></tr>')
		end
	-- Plusieurs formes
	else table.insert(resultat, '<tr><th colspan="4" style="text-align:center;">[[Liste des Pokémon par poids|Poids]]</th></tr>')
		local i = 1
		local poids_livres
		while poids[i] and poids[i+1] do
			table.insert(resultat, '<tr><td colspan="2" style="text-align:center;">')
			if tonumber(poids[i])
			then poids[i] = tonumber(poids[i])
				table.insert(resultat, '[[Poids::' .. math.floor(poids[i]) .. ',' .. math.floor(10*(poids[i]%1)+0.5) .. ']] kg, soit<br/>') -- on change la notation de type '0.2' en '0,2'.
				local poids_livres = math.floor((poids[i] * 2.2046)*10+0.5)/10
				if poids_livres <= 1.0
				then table.insert(resultat, math.floor(poids_livres) .. ',' .. math.floor(10*(poids_livres%1)+0.5) .. ' livre')
				else table.insert(resultat, math.floor(poids_livres) .. ',' .. math.floor(10*(poids_livres%1)+0.5) .. ' livres')
				end
			elseif poids[i] == '' or poids[i] == '-'
				then table.insert(resultat, '???,? kg')
			else table.insert(resultat, '<i>' .. poids[1] .. '</i>[[Catégorie:Pokémon dont le poids est mal indiqué]]')
			end
			table.insert(resultat, '<br/><small><i>(' .. nil_to_string(conditions_poids[i]) .. ')</i></small></td><td colspan="2" style="text-align:center;">')
			if tonumber(poids[i+1])
			then poids[i+1] = tonumber(poids[i+1])
				table.insert(resultat, '[[Poids::' .. math.floor(poids[i+1]) .. ',' .. math.floor(10*(poids[i+1]%1)+0.5) .. ']] kg, soit<br/>') -- on change la notation de type '0.2' en '0,2'.
				local poids_livres = math.floor((poids[i+1] * 2.2046)*10+0.5)/10
				if poids_livres <= 1.0
				then table.insert(resultat, math.floor(poids_livres) .. ',' .. math.floor(10*(poids_livres%1)+0.5) .. ' livre')
				else table.insert(resultat, math.floor(poids_livres) .. ',' .. math.floor(10*(poids_livres%1)+0.5) .. ' livres')
				end
			elseif poids[i+1] == '' or poids[i+1] == '-'
				then table.insert(resultat, '???,? kg')
			else table.insert(resultat, '<i>' .. poids[i+1] .. '</i>[[Catégorie:Pokémon dont le poids est mal indiqué]]')
			end
			table.insert(resultat, '<br/><small><i>(' .. nil_to_string(conditions_poids[i+1]) .. ')</i></small></td></tr>')
			i = i + 2
		end
		if poids[i]
		then table.insert(resultat, '<tr><td colspan="4" style="text-align:center;">')
			if tonumber(poids[i])
			then poids[i] = tonumber(poids[i])
				table.insert(resultat, '[[Poids::' .. math.floor(poids[i]) .. ',' .. math.floor(10*(poids[i]%1)+0.5) .. ']] kg, soit ') -- on change la notation de type '0.2' en '0,2'.
				local poids_livres = math.floor((poids[i] * 2.2046)*10+0.5)/10
				if poids_livres <= 1.0
				then table.insert(resultat, math.floor(poids_livres) .. ',' .. math.floor(10*(poids_livres%1)+0.5) .. ' livre')
				else table.insert(resultat, math.floor(poids_livres) .. ',' .. math.floor(10*(poids_livres%1)+0.5) .. ' livres')
				end
			elseif poids[i] == '' or poids[i] == '-'
				then table.insert(resultat, '???,? kg')
			else table.insert(resultat, '<i>' .. poids[i] .. '</i>[[Catégorie:Pokémon dont le poids est mal indiqué]]')
			end
			table.insert(resultat, '<br/><small><i>(' .. nil_to_string(conditions_poids[i]) .. ')</i></small></td></tr>')
		end
	end
	poids = nil

	-- TALENTS
	if talents == nil or talents == ''
	then table.insert(resultat, '<tr><th>[[Talent]]s</th><td colspan="3">—</td></tr>')
	else talents = mw.text.split(talents, "//")
		if not talents[2]
		then infos_talent = mw.text.split(talents[1], "/")
			table.insert(resultat, '<tr><th>[[Talent]]</th><td colspan="3"> [[' .. infos_talent[1] .. ']]')
			if infos_talent[2] ~= nil and infos_talent[2] ~= "" then
				table.insert(resultat, '<br/><small>(' .. infos_talent[2] .. ')</small>')
			end
		else table.insert(resultat, '<tr><th>[[Talent]]s</th><td colspan="3">')
			local i = 1
			local infos_talent = {}
			local init = true
			while talents[i] do
				infos_talent = mw.text.split(talents[i], "/")
				if infos_talent[1] ~= nil and infos_talent[1] ~= "" then
					if init	then init = false else table.insert(resultat, '<br/>') end
					table.insert(resultat, i .. '. [[' .. infos_talent[1] .. ']]')
					if infos_talent[2] ~= nil and infos_talent[2] ~= "" then
						table.insert(resultat, '<small> <i>(' .. infos_talent[2] .. ')</i></small>')
					end
				end
				i = i + 1
			end
		end
		table.insert(resultat, '</td></tr>')
	end
	talents = nil

	-- GROUPES ŒUF
	table.insert(resultat, '<tr><th>[[Liste des Pokémon par groupe d\'œuf|Groupe œuf]]</th><td colspan="3">')
	if groupeoeuf1 == nil or groupeoeuf1 == '' or groupeoeuf1 == '-'
	then table.insert(resultat, '—')
	else table.insert(resultat, '[[:Catégorie:Pokémon du groupe ' .. groupeoeuf1 .. '|' .. groupeoeuf1 .. ']]')
		if groupeoeuf1diff ~= nil
		then table.insert(resultat, ' (' .. groupeoeuf1diff .. ')')
		end
		if categories then table.insert(resultat, '[[Catégorie:Pokémon du groupe ' .. groupeoeuf1 .. ']]') end
		if groupeoeuf2 ~= nil and groupeoeuf2 ~= '' and groupeoeuf2 ~= '-'
		then table.insert(resultat, ' / [[:Catégorie:Pokémon du groupe ' .. groupeoeuf2 .. '|' .. groupeoeuf2 .. ']]')
			if groupeoeuf2diff ~= nil
			then table.insert(resultat, ' (' .. groupeoeuf2diff .. ')')
			end
			if categories then table.insert(resultat, '[[Catégorie:Pokémon du groupe ' .. groupeoeuf2 .. ']]') end
		end
	end
	table.insert(resultat, '</td></tr>')

	-- ÉCLOSION
	table.insert(resultat, '<tr><th>Éclosion</th><td colspan="3">')
	if not tonumber(oeufpas)
	then table.insert(resultat, '—')
	else local oeufcycles = math.floor(oeufpas/255) - 1
		if oeufcycles > 1
		then table.insert(resultat, oeufcycles .. ' cycles – [[Éclosion::' .. separate_thousands(oeufpas) .. ']] pas')
		else table.insert(resultat, oeufcycles .. ' cycle – [[Éclosion::' .. separate_thousands(oeufpas) .. ']] pas')
		end
	end
	table.insert(resultat, '</td></tr>')

	-- EV
	if effortval == nil then effortval = {} else effortval = mw.text.split(effortval, "/") end
	if effortval[2] == nil
	then table.insert(resultat, '<tr><th>[[EV|Points effort]]</th><td colspan="3">')
		if effortval[1] == nil or effortval[1] == ''
		then table.insert(resultat, '—')
		else table.insert(resultat, '[[Points effort::' .. effortval[1] .. ']]')
		end
		table.insert(resultat, '</td></tr>')
	else table.insert(resultat, '<tr><th colspan="4" style="text-align:center;>[[EV|Points effort]]</th></tr>')
		local i = 1
		while effortval[i] and effortval[i+1] do
			table.insert(resultat, '<tr><td colspan="2" style="text-align:center;>[[Points effort::' .. effortval[i] .. ']]<br/><small><i>(' .. nil_to_string(conditions_effortval[i]) .. ')</i></small></td>')
			table.insert(resultat, '<td colspan="2" style="text-align:center;>[[Points effort::' .. effortval[i+1] .. ']]<br/><small><i>(' .. nil_to_string(conditions_effortval[i+1]) .. ')</i></small></td></tr>')
			i = i + 2
		end
		if effortval[i] then table.insert(resultat, '<tr><td colspan="4" style="text-align:center;>[[Points effort::' .. effortval[i] .. ']]<br/><small><i>(' .. nil_to_string(conditions_effortval[i]) .. ')</i></small></td></tr>') end
	end
	effortval = nil

	-- POINTS EXP
	table.insert(resultat, '<tr><th>[[Expérience|Points exp.]]</th><td colspan="3">')
	if expval == nil or expval == ''
	then table.insert(resultat, '—')
	else table.insert(resultat, '[[Points exp::' .. expval .. ']] exp.')
		if expvaldiff ~= nil
		then table.insert(resultat, ' (' .. expvaldiff .. ')')
		end
	end
	table.insert(resultat, '</td></tr>')

	-- EXPÉRIENCE AU NIVEAU 100
	table.insert(resultat, '<tr><th>[[Expérience|Exp au niveau 100]]</th><td colspan="3">')
	if not tonumber(expmax)
	then table.insert(resultat, '—')
	else expmax = separate_thousands(expmax)
		table.insert(resultat, '[[Exp au niveau 100::' .. expmax .. ']] exp.')
	end
	table.insert(resultat, '</td></tr>')

	-- SEXE
	table.insert(resultat, '<tr><th>[[Liste des Pokémon par répartition des sexes|Sexe]]</th><td colspan="3">')
	if fmratio == nil or fmratio == '' or fmratio == '-'
	then table.insert(resultat, '<i>Répartition inconnue</i>')
	else fmratio = mw.text.split(fmratio, "/")
		local i = 1
		local init = true
		while fmratio[i] do
			if tonumber(fmratio[i])
			then fmratio[i] = tonumber(fmratio[i])
				if init then init = false else table.insert(resultat, '<br/>') end
				if fmratio[i] == -1
				then table.insert(resultat, 'Asexué')
					if fmratio[2] then table.insert(resultat, ' <i><small>(' .. nil_to_string(conditions_fmratio[i]) .. ')</small></i>') end
					if categories then table.insert(resultat, '[[Catégorie:Pokémon asexué]]') end
				else table.insert(resultat, fmratio[i]*100 .. ' % femelle ; ' .. 100-fmratio[i]*100 .. ' % mâle<br/><div style="border-radius: 10px;overflow: hidden;line-height: 15px;"><div style="background-color:pink;display:inline-block;width:' .. fmratio[i]*100 .. '%">&nbsp;</div><div style="background-color:lightblue;display:inline-block;width:' .. 100-fmratio[i]*100 .. '%">&nbsp;</div></div>')
					if fmratio[2] then table.insert(resultat, '<i><small>(' .. nil_to_string(conditions_fmratio[i]) .. ')</small></i>') end
					if categories and fmratio[i] == 1 then table.insert(resultat, '[[Catégorie:Pokémon uniquement femelle]]')
					elseif categories and fmratio[i] == 0 then table.insert(resultat, '[[Catégorie:Pokémon uniquement mâle]]') end
				end
			end
			i = i + 1
		end
	end
	table.insert(resultat, '</td></tr>')

	-- COULEUR
	if couleur == nil or couleur == '' or couleur == '-'
	then if categories then table.insert(resultat, '[[Catégorie:Pokémon dont la couleur est inconnue]]') end
		-- En commentaire : un code pour mettre la couleur "Inconnu" par défaut. Actuellement, on retire complètement la section.
		-- table.insert(resultat, '<tr><th>[[Liste des Pokémon par couleur|Couleur (Pokédex)]]</th><td colspan="3">—')
		-- table.insert(resultat, '</th></tr>')
	else couleur = mw.text.split(couleur, "/")
		local i = 1
		local init = true
		if couleur[2]
		then table.insert(resultat, '<tr><th>[[Liste des Pokémon par couleur|Couleurs (Pokédex)]]</th><td colspan="3">')
		else table.insert(resultat, '<tr><th>[[Liste des Pokémon par couleur|Couleur (Pokédex)]]</th><td colspan="3">')
		end
		while couleur[i] do
			if init then init = false else table.insert(resultat, '<br/>') end
			table.insert(resultat, '[[Couleur::' .. couleur[i] .. ']]')
			if categories and couleur[i] ~= "Inconnue" then table.insert(resultat, '[[Catégorie:Pokémon listé comme ' .. couleur[i] .. ']]') end
			if couleur[2] then table.insert(resultat, ' <i><small>(' .. nil_to_string(conditions_couleur[i]) .. ')</small></i>') end
			i = i + 1
		end
		table.insert(resultat, '</td></tr>')
	end
	couleur = nil

	-- TAUX DE CAPTURE
	table.insert(resultat, '<tr><th>[[Capture des Pokémon|Taux de capture]]</th><td colspan="3">')
	if captureval == nil or captureval == '' or captureval == '-'
	then table.insert(resultat, '—')
	else captureval = mw.text.split(captureval, "/")
		local i = 1
		local init = true
		while captureval[i] do
			if init then init = false else table.insert(resultat, '<br/>') end
			table.insert(resultat, '[[Taux de capture::' .. captureval[i] .. ']]')
			if captureval[2] then table.insert(resultat, ' <i><small>(' .. nil_to_string(conditions_captureval[i]) .. ')</small></i>') end
			i = i + 1
		end
	end
	table.insert(resultat, '</td></tr>')

	-- EMPREINTE
	table.insert(resultat, '<tr><th>Empreinte</th><td colspan="3">')
	if (empreinte ~= '-' and (empreinte == nil or empreinte == '')) and tonumber(ndex) and generation <= 5
	then table.insert(resultat, '[[Fichier:' .. ndex .. 'empreinte.png|x22px]]')
	elseif empreinte == nil or empreinte == '' or empreinte == '-' then table.insert(resultat, '—')
	else table.insert(resultat, '[[Fichier:' .. empreinte .. '.png|x22px]]')
	end
	table.insert(resultat, '</td></tr>')

	-- FORME DU CORPS
	if forme == nil or forme == '' or forme == '-'
	then table.insert(resultat, '<tr><th>[[Liste des Pokémon par forme du corps|Forme du corps]]</th><td colspan="3">—')
	else forme = mw.text.split(forme, "/")
		local i = 1
		local init = true
		if forme[2]
		then table.insert(resultat, '<tr><th>[[Liste des Pokémon par forme du corps|Formes du corps]]</th><td colspan="3">')
		else table.insert(resultat, '<tr><th>[[Liste des Pokémon par forme du corps|Forme du corps]]</th><td colspan="3">')
		end
		while forme[i] do
			if init then init = false else table.insert(resultat, '<br/>') end
			table.insert(resultat, '[[Fichier:Miniat forme ' .. forme[i] .. '.png]]')
			if forme[2] then table.insert(resultat, ' <i><small>(' .. nil_to_string(conditions_forme[i]).. ')</small></i>') end
			i = i + 1
		end
	end
	table.insert(resultat, '</td></tr>')

	-- CRI
	if cri == '' then cri = nil end
	if cri == nil and not tonumber(ndex)
	then table.insert(resultat, '<tr><th colspan="4" style="text-align:center;">[[Cri]]</th></tr><tr><td colspan="4" style="text-align:center;">—</td></tr>')
	elseif cri ~= nil
	then cri = mw.text.split(cri, "/")
		if cri[2]
		then table.insert(resultat, '<tr><th colspan="4" style="text-align:center;">[[Cri]]s</th></tr>')
		else table.insert(resultat, '<tr><th colspan="4" style="text-align:center;">[[Cri]]</th></tr>')
		end
		local i = 1
		while cri[i] do
			table.insert(resultat, '<tr><td colspan="4" style="text-align:center;"><center>[[Fichier:' .. cri[i] .. '.ogg|noicon]]</center>')
			if cri[2] then table.insert(resultat, '<small><i>(' .. nil_to_string(conditions_cri[i]) .. ')</i></small>') end
			table.insert(resultat, '</td></tr>')
			i = i + 1
		end
	else table.insert(resultat, '<tr><th colspan="4" style="text-align:center;">[[Cri]]</th></tr><tr><td colspan="4" style="text-align:center;"><center>')
		if tonumber(ndex) <= 493 then table.insert(resultat, '[[Fichier:Cri 4 d ' .. ndex .. '.ogg|noicon]]')
		elseif tonumber(ndex) <= 649 then table.insert(resultat, '[[Fichier:Cri 5 n ' .. ndex .. '.ogg|noicon]]')
		elseif tonumber(ndex) <= 721 then table.insert(resultat, '[[Fichier:Cri 6 x ' .. ndex .. '.ogg|noicon]]')
		elseif tonumber(ndex) <= 809 then table.insert(resultat, '[[Fichier:Cri 7 s ' .. ndex .. '.ogg|noicon]]')
		else table.insert(resultat, '[[Fichier:Cri ' .. ndex .. ' EB.ogg|noicon]]')
		end
		table.insert(resultat, '</center></td></tr>')
	end
	cri = nil

	-- GESTION CATÉGORISATION GÉNÉRATION ET DONNÉES
	table.insert(resultat, '<tr><td style="width:30%; height: 0px; padding: 0px;">')
	if categories
	then table.insert(resultat, '[[Catégorie:Pokémon]]')

		if generation == 1 then table.insert(resultat, '[[Catégorie:Pokémon de la première génération]]')
		elseif generation == 2 then table.insert(resultat, '[[Catégorie:Pokémon de la deuxième génération]]')
		elseif generation == 3 then table.insert(resultat, '[[Catégorie:Pokémon de la troisième génération]]')
		elseif generation == 4 then table.insert(resultat, '[[Catégorie:Pokémon de la quatrième génération]]')
		elseif generation == 5 then table.insert(resultat, '[[Catégorie:Pokémon de la cinquième génération]]')
		elseif generation == 6 then table.insert(resultat, '[[Catégorie:Pokémon de la sixième génération]]')
		elseif generation == 7 then table.insert(resultat, '[[Catégorie:Pokémon de la septième génération]]')
		elseif generation == 8 then table.insert(resultat, '[[Catégorie:Pokémon de la huitième génération]]')
		end

		if fmratio == -1 then table.insert(resultat, '[[Catégorie:Pokémon asexué]]')
		elseif fmratio == 1 then table.insert(resultat, '[[Catégorie:Pokémon uniquement femelle]]')
		elseif fmratio == 0 then table.insert(resultat, '[[Catégorie:Pokémon uniquement mâle]]')
		end
	end

	if donnees
	then if generation == 1 then table.insert(resultat, '[[Génération du Pokémon::Première génération|]]')
		elseif generation == 2 then table.insert(resultat, '[[Génération du Pokémon::Deuxième génération|]]')
		elseif generation == 3 then table.insert(resultat, '[[Génération du Pokémon::Troisième génération|]]')
		elseif generation == 4 then table.insert(resultat, '[[Génération du Pokémon::Quatrième génération|]]')
		elseif generation == 5 then table.insert(resultat, '[[Génération du Pokémon::Cinquième génération|]]')
		elseif generation == 6 then table.insert(resultat, '[[Génération du Pokémon::Sixième génération|]]')
		elseif generation == 7 then table.insert(resultat, '[[Génération du Pokémon::Septième génération|]]')
		elseif generation == 8 then table.insert(resultat, '[[Génération du Pokémon::Huitième génération|]]')
		end
	end

	table.insert(resultat, '</td><td style="width:20%; height: 0px; padding: 0px;"></td><td style="width:20%; height: 0px; padding: 0px;"></td><td style="width:30%; height: 0px; padding: 0px;"></td></tbody>')
	table.insert(resultat, '</table>')
	return table.concat(resultat, "")
end

return p