Module:Infobox Pokémon/test

De Poképédia
Sauter à la navigation Sauter à la recherche

La documentation pour ce module peut être créée à Module:Infobox Pokémon/test/doc

local p = {}

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]]'
	elseif region == 'Isolarmure'			then return '[[Liste des Pokémon dans l\'ordre du Pokédex d\'Isolarmure|Isolarmure]]'
	elseif region == 'Couronneige'			then return '[[Liste des Pokémon dans l\'ordre du Pokédex de Couronneige|Couronneige]]'

	-- 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 == 'Ransei (Reshiram)'	then return '[[Liste des Pokémon de la région de Ransei|Ransei]]<br/><small><b>(DLC Reshiram)</b></small>'
	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 '[[Liste des Pokémon de PokéPark 2 : Le Monde des Vœux|PokéPark 2]]'
	elseif region == 'Google Maps'			then return '[[Liste des Pokémon dans l\'ordre du Pokédex de Google Maps: Pokémon Challenge|Google Maps:<br/><small>Pokémon Challenge]]</small>'
	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 Set (list)
  local set = {}
  for _, l in ipairs(list) do set[l] = true end
  return set
end

local regions_navigateur = Set {'Fiore', 'Almia', 'Oblivia (Présent)', 'Oblivia (Passé)'}

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_oeufpas = frame.args['conditions-oeufpas']
	if conditions_oeufpas == nil then conditions_oeufpas = '' end
	conditions_oeufpas = mw.text.split(conditions_oeufpas, "/")
	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_apparence = frame.args['conditions-apparence']
	if conditions_apparence == nil then conditions_apparence = conditions_forme
	else conditions_apparence = mw.text.split(conditions_apparence, "/") end
	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_oeufpas[i] == nil or conditions_oeufpas[i] == '' then conditions_oeufpas[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_apparence[i] == nil or conditions_apparence[i] == '' then conditions_apparence[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 taille = frame.args['taille']
	local poids = frame.args['poids']

	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 apparence = frame.args['apparence']
	local forme = frame.args['forme']
	local cri = frame.args['cri']

	-- EN-TÊTE
	table.insert(resultat, '<table class="tableaustandard ficheinfo ' .. mw.ustring.lower(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]) if infos_region1[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region1[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region2[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region2[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region3[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region3[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region4[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region4[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region1[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region1[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region2[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region2[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region3[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region3[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region1[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region1[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region2[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region2[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region1[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region1[3] .. '">*</span>') end table.insert(resultat, '</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 dex_secondaires = mw.text.split(dex_secondaires, "//")
		table.insert(resultat, '<tr><th colspan="4" style="text-align:center;">')
		local i = 1
		local region_avec_navigateur = false
		local region_sans_navigateur = false
		while dex_secondaires[i] do
			local b = false
			infos_region = mw.text.split(dex_secondaires[i], "/")
			if regions_navigateur[infos_region[1]]
			then region_avec_navigateur = true
			else region_sans_navigateur = true
			end
			i = i + 1
		end
		if region_avec_navigateur
		then if region_sans_navigateur
			then table.insert(resultat, '[[Capstick#Autres fonctions|Navigateurs]] et autres numérotations')
			else table.insert(resultat, '[[Capstick#Autres fonctions|Navigateurs]]')
			end
		else table.insert(resultat, 'Autres numérotations')
		end
		table.insert(resultat, '</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
		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]) if infos_region1[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region1[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region2[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region2[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region3[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region3[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region4[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region4[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region1[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region1[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region2[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region2[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region3[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region3[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region1[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region1[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region2[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region2[3] .. '">*</span>') end table.insert(resultat, '</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]) if infos_region1[3] ~= nil then table.insert(resultat, '<span class="explain" title="' .. infos_region1[3] .. '">*</span>') end table.insert(resultat, '</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 ' .. mw.getContentLanguage():ucfirst(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 ' .. mw.getContentLanguage():ucfirst(type1[1]) .. '.png|68px|link=' .. type1[1] .. ' (type)]] - [[Fichier:Miniature Type ' .. mw.getContentLanguage():ucfirst(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 ' .. mw.getContentLanguage():ucfirst(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 ' .. mw.getContentLanguage():ucfirst(type1[i]) .. '.png|68px|link=' .. type1[i] .. ' (type)]] - [[Fichier:Miniature Type ' .. mw.getContentLanguage():ucfirst(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 ' .. mw.getContentLanguage():ucfirst(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 ' .. mw.getContentLanguage():ucfirst(type1[i+1]) .. '.png|68px|link=' .. type1[i+1] .. ' (type)]] - [[Fichier:Miniature Type ' .. mw.getContentLanguage():ucfirst(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 ' .. mw.getContentLanguage():ucfirst(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 ' .. mw.getContentLanguage():ucfirst(type1[i]) .. '.png|68px|link=' .. type1[i] .. ' (type)]] - [[Fichier:Miniature Type ' .. mw.getContentLanguage():ucfirst(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, '[[Fichier:Panneau Attention.png|x20px|Erreur dans la saisie de la taille.]] <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, '[[Fichier:Panneau Attention.png|x20px|Erreur dans la saisie de la taille.]] <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, '[[Fichier:Panneau Attention.png|x20px|Erreur dans la saisie de la taille.]] <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, '[[Fichier:Panneau Attention.png|x20px|Erreur dans la saisie de la taille.]] <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, '[[Fichier:Panneau Attention.png|x20px|Erreur dans la saisie du poids.]] <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, '[[Fichier:Panneau Attention.png|x20px|Erreur dans la saisie du poids.]] <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, '[[Fichier:Panneau Attention.png|x20px|Erreur dans la saisie du poids.]] <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, '[[Fichier:Panneau Attention.png|x20px|Erreur dans la saisie du poids.]] <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
	if oeufpas == nil then oeufpas = {} else oeufpas = mw.text.split(oeufpas, "/") end
	if oeufpas[2] == nil
	then if tonumber(oeufpas[1])
		then table.insert(resultat, '<tr><th>Éclosion</th><td colspan="3">')
		local oeufcycles = math.floor(oeufpas[1]/255) - 1
		
		if oeufcycles > 1
		then table.insert(resultat, oeufcycles .. ' cycles – [[Éclosion::' .. separate_thousands(oeufpas[1]) .. ']] pas')
		else table.insert(resultat, oeufcycles .. ' cycle – [[Éclosion::' .. separate_thousands(oeufpas[1]) .. ']] pas')
		end
		
		table.insert(resultat, '</td></tr>')
		end
	else table.insert(resultat, '<tr><th colspan="4" style="text-align:center">Éclosion</th></tr>')
		local i = 1
		while oeufpas[i] and tonumber(oeufpas[i]) and oeufpas[i+1] and tonumber(oeufpas[i+1]) do
			local oeufcycles0 = math.floor(oeufpas[i]/255) - 1
			local oeufcycles1 = math.floor(oeufpas[i+1]/255) - 1
		
			if oeufcycles0 > 1
			then table.insert(resultat, '<tr><td colspan="2" style="text-align:center">' .. oeufcycles0 .. ' cycles – [[Éclosion::' .. separate_thousands(oeufpas[i])
				.. ']] pas<br><small><i>(' .. nil_to_string(conditions_oeufpas[i]) .. ')</i></small></td>')
			else table.insert(resultat, '<tr><td colspan="2" style="text-align:center">' .. oeufcycles0 .. ' cycle – [[Éclosion::' .. separate_thousands(oeufpas[i])
				.. ']] pas<br><small><i>(' .. nil_to_string(conditions_oeufpas[i]) .. ')</i></small></td>')
			end
			if oeufcycles1 > 1
			then table.insert(resultat, '<td colspan="2" style="text-align:center">' .. oeufcycles1 .. ' cycles – [[Éclosion::' .. separate_thousands(oeufpas[i+1])
				.. ']] pas<br><small><i>(' .. nil_to_string(conditions_oeufpas[i+1]) .. ')</i></small></td></tr>')
			else table.insert(resultat, '<td colspan="2" style="text-align:center">' .. oeufcycles1 .. ' cycle – [[Éclosion::' .. separate_thousands(oeufpas[i+1])
				.. ']] pas<br><small><i>(' .. nil_to_string(conditions_oeufpas[i+1]) .. ')</i></small></td></tr>')
			end
			i = i + 2
		end
		if oeufpas[i]
		then local oeufcycles = math.floor(oeufpas[i]/255) - 1
		
			if oeufcycles > 1
			then table.insert(resultat, '<tr><td colspan="4" style="text-align:center">' .. oeufcycles .. ' cycles – [[Éclosion::' .. separate_thousands(oeufpas[i])
				.. ']] pas<br><small><i>(' .. nil_to_string(conditions_oeufpas[i]) .. ')</i></small></td></tr>')
			else table.insert(resultat, '<tr><td colspan="4" style="text-align:center">' .. oeufcycles .. ' cycle – [[Éclosion::' .. separate_thousands(oeufpas[i])
				.. ']] pas<br><small><i>(' .. nil_to_string(conditions_oeufpas[i]) .. ')</i></small></td></tr>')
			end
			
		end
	end
	

	-- 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 expmax then expmax = expmax:gsub(" ", "") end -- Pour permettre la saisie de données sous la forme "1 000 000"
	
	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
	if not(captureval == nil or captureval == '' or captureval == '-')
	then 
		table.insert(resultat, '<tr><th>[[Capture des Pokémon|Taux de capture]]</th><td colspan="3">')
		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
		table.insert(resultat, '</td></tr>')
	end

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

	-- APPARENCE DU CORPS
	if apparence == nil then apparence = forme end
	if apparence == nil or apparence == '' or apparence == '-'
	then table.insert(resultat, '<tr><th>[[Liste des Pokémon par apparence du corps|Apparence<br/>du corps]]</th><td colspan="3">—')
	else apparence = mw.text.split(apparence, "/")
		local i = 1
		local init = true
		if apparence[2]
		then table.insert(resultat, '<tr><th>[[Liste des Pokémon par apparence du corps|Apparences<br/>du corps]]</th><td colspan="3">')
		else table.insert(resultat, '<tr><th>[[Liste des Pokémon par apparence du corps|Apparence<br/>du corps]]</th><td colspan="3">')
		end
		while apparence[i] do
			if init then init = false else table.insert(resultat, '<br/>') end
			table.insert(resultat, '[[Fichier:Corps ' .. apparence[i] .. ' HOME.png|x40px]]')
			if apparence[2] then table.insert(resultat, ' <i><small>(' .. nil_to_string(conditions_apparence[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