Módulo:Ficha de personaje

Icono de documentación de módulo Documentación del módulo[ver] [editar] [historial] [purgar]

A continuación se muestra la documentación transcluida desde la subpágina /doc. [salta a la caja de código]


Este es un módulo que pretende reemplazar a la actual plantilla {{Ficha de personaje}}, con el propósito de hacer labores más complejas, como la integración con Wikidata, además de fusionar {{Ficha de pokémon}} aquí, e interoperabilidad con Módulo:Ficha animanga/Ficha. Este módulo es usado por {{Ficha de personaje/zona de pruebas}}.

Uso

{{#invoke:Ficha de personaje|Ficha}}

Transclusión con diferentes ejemplos

La plantilla {{Ficha de personaje/zona de pruebas}} es usada en los siguientes artículos:

Además, se proveen los siguientes ejemplos:

Pikachu (Q9351)

Al ser un Pokémon (instancia de (P31)Pokémon de tipo eléctrico (Q25930719)subclase de (P279)especie de Pokémon (Q3966183)), el módulo toma valores específicos y los formatea de manera específica, para imitar el comportamiento de la plantilla {{Ficha de pokémon}}, solo que los datos de la Pokédex se muestran debajo, y el color de la ficha se basa en el tipo primario (Q25931659) (en base a instancia de (P31) → Pokémon de cierto tipo → subclase de (P279)especie de Pokémon (Q3966183)), definido en Módulo:Ficha de personaje/Pokémon. En otros casos específicos, el color de la ficha se basa en el color de pelo (P1884) (véase el ejemplo sobre Vocaloid).

La clase CSS para esto es animanga.

Original
Pikachu
Pokédex Nacional
Arbok - Pikachu (#25) - Raichu

Pokédex Johto
Pichu - Pikachu (#22) - Raichu

Pokédex Hoenn
Pichu - Pikachu (#156) - Raichu

Pokédex Sinnoh
Ning - Pikachu (#104) - Raichu

Pokédex Kalos Centro
Pichu - Pikachu (#36) - Raichu

Pokédex Alola
Pichu - Pikachu (#25) - Raichu
N. japonés ピカチュウ (Pikachu)
Etapa 0
Preevolución Pichu
Evolución Raichu
Generación Primera
Especie Pokémon ratón
Tipo
Altura 0.4 m
Peso 6 kg
Habilidad Electricidad estática, cuando entra en contacto corporal con el rival, a veces lo paraliza.
Propuesta
Pikachu
Pokémon
Creador(es) Ken Sugimori Ver y modificar los datos en Wikidata
Voz original Ikue Ōtani y Ryan Reynolds Ver y modificar los datos en Wikidata
Primera aparición Pokémon Rojo y Azul
Datos del Pokémon
Nombre original ピカチュウ (Pikachu)
Estatura 0,4 m
Pesokg
Equipamiento Pikastal Z y Ash-Pikastal Z Ver y modificar los datos en Wikidata
Especie Pokémon ratón
Tipo eléctrico
Habilidades Electricidad estática, cuando entra en contacto corporal con el rival, a veces lo paraliza.
Linea evolutiva (Básico)
Pichu
Pikachu
Raichu
Pokédex nacional / Kanto (#25)
Arbok
Pikachu
Raichu
Pokédex de Johto (#22)
Pichu
Pikachu
Raichu
Pokédex de Hoenn (#156)
Pichu
Pikachu
Raichu
Pokédex de Sinnoh (#104)
Pichu
Pikachu
Raichu
Pokédex de Kalos Centro (#36)
Pichu
Pikachu
Raichu
Pokédex de Alola (#25)
Pichu
Pikachu
Raichu
Pokédex de Galar (#194)
Pichu
Pikachu
Raichu
Ficha en IMDb
Propuesta (sin datos locales)
Pikachu
Pokémon
Creador(es) Ken Sugimori Ver y modificar los datos en Wikidata
Voz original Ikue Ōtani y Ryan Reynolds Ver y modificar los datos en Wikidata
Primera aparición Pokémon Rojo y Pokémon Azul y primera generación de Pokémon Ver y modificar los datos en Wikidata
Datos del Pokémon
Nombre original ピカチュウ (Pikachu)
Estatura 40 cm
Pesokg
Equipamiento Pikastal Z y Ash-Pikastal Z Ver y modificar los datos en Wikidata
Tipo eléctrico
Linea evolutiva (Básico)
Pichu
Pikachu
Raichu
Pokédex nacional / Kanto (#25)
Arbok
Pikachu
Raichu
Pokédex de Johto (#22)
Pichu
Pikachu
Raichu
Pokédex de Hoenn (#163)
Pichu
Pikachu
Raichu
Pokédex de Sinnoh (#104)
Pichu
Pikachu
Raichu
Pokédex de Kalos Centro (#36)
Pichu
Pikachu
Raichu
Pokédex de Galar (#194)
Pichu
Pikachu
Raichu
Ficha en IMDb

Mew (Q12342580)

Original
Ficha de personaje
Pokédex Nacional
Mewtwo - Ficha de personaje (#151) - Chikorita

Pokédex Johto
Mewtwo - Ficha de personaje (#250) - Celebi

Pokédex Sinnoh
- Ficha de personaje (#20) -
N. japonés ミュウ (Miyuu)
Etapa Básica
Preevolución No tiene
Evolución No tiene
Generación Primera
Especie Pokémon psi
Tipo
Altura 0,4 m
Peso 4,0 kg
Habilidad Sincronía
Propuesta (con datos locales)
Mew
Pokémon
Creador(es) Shigeki Morimoto Ver y modificar los datos en Wikidata
Primera aparición primera generación de Pokémon Ver y modificar los datos en Wikidata
Datos del Pokémon
Nombre original ミュウ (Miyuu)
Género sexo desconocido
Estatura 0,4 m
Peso 4,0 kg
Equipamiento Mewstal Z Ver y modificar los datos en Wikidata
Tipo psíquico
Habilidades Sincronía
Pokédex nacional / Kanto (#151)
Mewtwo
Mew
Chikorita
Pokédex de Johto (#250)
Mewtwo
Mew
Celebi
Ficha en IMDb
Propuesta (sin datos locales)
Mew
Pokémon
Creador(es) Shigeki Morimoto Ver y modificar los datos en Wikidata
Primera aparición primera generación de Pokémon Ver y modificar los datos en Wikidata
Datos del Pokémon
Género sexo desconocido
Estatura 41 cm
Pesokg
Equipamiento Mewstal Z Ver y modificar los datos en Wikidata
Tipo psíquico
Pokédex nacional / Kanto (#151)
Mewtwo
Mew
Chikorita
Pokédex de Johto (#255)
Mewtwo
Mew
Celebi
Pokédex de Hoenn (#306)
Mewtwo
Mew
Chikorita
Ficha en IMDb

Bart Simpson (Q5480)

Original
Bart Simpson
Personaje de Los Simpson
Primera aparición Good Night (corto de The Tracey Ullman Show)
Creado por Matt Groening
Voz original Nancy Cartwright
Doblador en España Sara Vivas
Doblador en Hispanoamérica Bandera de México Marina Huerta (temp. 1-9, 16-presente), Claudia Mota (temp. 9-15), Maggie Vera (canciones; temp. 30-presente)
Información personal
Nombre de nacimiento Bartholomew Jo-Jo Simpson
Nacimiento 23 de febrero de 1979
Edad 10 años
Nacionalidad Estadounidense
Religión Protestante
Características físicas
Sexo Masculino
Color de pelo Rubio encrestado, con nueve puntas
Familia y relaciones
Familia Simpson
Padres Homer (padre), Marge (madre)
Cónyuge Jenda (en el futuro)
Otros familiares Lisa y Maggie (hermanas), Abraham (abuelo), Mona (abuela paterna), Jacqueline Bouvier (abuela materna), Patty y Selma Bouvier (tías), Herbert Powell (medio-tío), Ling Bouvier (prima).
Información profesional
Ocupación Estudiante de la escuela primaria de Springfield
Aliados Lisa Simpson
Milhouse Van Houten
Krusty el payaso
Martin Prince
Nelson Muntz
Ned Flanders
Seymour Skinner(Algunos Capítulos)
Enemigos Sideshow Bob
Nelson Muntz (al comienzo)
Jimbo Jones
Seymour Skinner
Sherri y Terri
Montgomery Burns
Russ Cargill
Perfil en IMDb
Propuesta
Bart Simpson
Personaje de Los Simpson
Creador(es) Matt Groening
Voz original Nancy Cartwright
Doblaje

Bandera de México Marina Huerta (temp. 1-9, 16-presente), Claudia Mota (temp. 9-15), Maggie Vera (canciones; temp. 30-presente)

Sara Vivas
Primera aparición Good Night Ver y modificar los datos en Wikidata
Información
Nombre original Bartholomew Jo-Jo Simpson
Nacionalidad Estadounidense
Residencia Springfield Ver y modificar los datos en Wikidata
Religión Protestante
Fecha de nacimiento 23 de febrero de 1979
Género Masculino
Edad 10 años
Cabello Rubio encrestado, con nueve puntas
Ocupacion Estudiante de la escuela primaria de Springfield
Familia Simpson
Conyuge Jenda (en el futuro)
Padres Homer (padre), Marge (madre)
Familiares Lisa y Maggie (hermanas), Abraham (abuelo), Mona (abuela paterna), Jacqueline Bouvier (abuela materna), Patty y Selma Bouvier (tías), Herbert Powell (medio-tío), Ling Bouvier (prima).
Aliados Lisa Simpson
Milhouse Van Houten
Krusty el payaso
Martin Prince
Nelson Muntz
Ned Flanders
Seymour Skinner(Algunos Capítulos)
Enemigos Sideshow Bob
Nelson Muntz (al comienzo)
Jimbo Jones
Seymour Skinner
Sherri y Terri
Montgomery Burns
Russ Cargill
Ficha en IMDb
Propuesta (sin datos locales)
Bart Simpson
Personaje de Los Simpson
Creador(es) Matt Groening Ver y modificar los datos en Wikidata
Voz original Nancy Cartwright, Nathalie Bienaimé y Claudia Motta Ver y modificar los datos en Wikidata
Primera aparición Good Night Ver y modificar los datos en Wikidata
Información
Nombre original Bartholomew JoJo Simpson
Nacionalidad Estados Unidos Ver y modificar los datos en Wikidata
Residencia Springfield Ver y modificar los datos en Wikidata
Fecha de nacimiento 23 de febrero de 1979
Género masculino
Edad 10 años
Ocupacion alumno, Presidente de la Corte Suprema de los Estados Unidos y presentador de noticias Ver y modificar los datos en Wikidata
Familia familia Simpson Ver y modificar los datos en Wikidata
Padres Homer Simpson y Montgomery Burns Ver y modificar los datos en Wikidata
Marge Simpson Ver y modificar los datos en Wikidata
Familiares Abraham Simpson, Mona Simpson, Clancy Bouvier, Jacqueline Bouvier, Herb Powell, Abbie Simpson, Selma Bouvier, Patty Bouvier, Bill Simpson, Cyrus Simpson, Orville Simpson, Yuma Hickman, Pépé Bouvier, Bambi Bouvier, Gladys Gurney y Alvarine Gurney Ver y modificar los datos en Wikidata
Enemigos Actor secundario Bob, Nelson Muntz y Jimbo Jones Ver y modificar los datos en Wikidata
Ficha en IMDb

Son Gokū (Q2142)

Este ejemplo ilustra la fusión de {{Ficha de personaje de manga y anime}}.

Estándar
Son Gokū

Figura de Son Gokū según su apariencia en sus primeras aventuras.
そん 悟空ごくう
(Son Gokū)
SexoMasculino
Fecha de nacimiento16 de abril de 736
Origen enManga
Primera apariciónVolumen 1 Capítulo 1(manga)
Episodio 1 de Dragon Ball (1986 anime; 1984 manga)
Dragon Ball
Edad 3 (Dragon Ball Minus)
13-20 (Dragon Ball)
25-48 (Dragon Ball Z)
40 (Gokū y sus Amigos Regresan)
42-44 (Dragon Ball Super)
44 (Super Dragon Ball Heroes (anime))
53-54 (Dragon Ball GT)
Peso89 kg
OcupacionArtista marcial
RelevanciaProtagonista de la serie
ProcedenciaPlaneta Vegeta
Monte Paozu
Maestro
EquipoZ-Fighters
Familia
Página no enlazada a Wikidata y añade el enlace en español: Módulo:Ficha de personaje.
Propuesta
Son Gokū
Personaje de Dragon Ball
Creador(es) Akira Toriyama Ver y modificar los datos en Wikidata
Interpretado porJustin Chatwin
Voz original Masako Nozawa, Sean Schemmel y Lex Lang Ver y modificar los datos en Wikidata
Primera aparición Dragon Ball Ver y modificar los datos en Wikidata
Información
Nombre originalそん 悟空ごくう
Residencia Kame House Ver y modificar los datos en Wikidata
GéneroMasculino
Cabellocabello negro
Ocupacion luchador, artista marcial, agricultor y guerrero Ver y modificar los datos en Wikidata
Conyuge Chichi Ver y modificar los datos en Wikidata
Padres Bardock Ver y modificar los datos en Wikidata
Gine Ver y modificar los datos en Wikidata
Hijos Son Gohan y Son Goten Ver y modificar los datos en Wikidata
Familiares Ox-King, Videl, Pan y Mr. Satán Ver y modificar los datos en Wikidata
Miembros Z-Fighters Ver y modificar los datos en Wikidata
Enemigos Freeza, Garlic Jr., Ejército Red Ribbon, Piccolo Daimaō, Célula y Majin Buu Ver y modificar los datos en Wikidata
Ficha en IMDb
Dragon Ball
Edad 3 (Dragon Ball Minus)
13-20 (Dragon Ball)
25-48 (Dragon Ball Z)
40 (Gokū y sus Amigos Regresan)
42-44 (Dragon Ball Super)
44 (Super Dragon Ball Heroes (anime))
53-54 (Dragon Ball GT)
Peso89 kg
OcupacionArtista marcial
RelevanciaProtagonista de la serie
ProcedenciaPlaneta Vegeta
Monte Paozu
Maestro
EquipoZ-Fighters
Familia
Página no enlazada a Wikidata y añade el enlace en español: Módulo:Ficha de personaje.

Hatsune Miku (Q552682)

Este ejemplo ilustra la fusión de {{Infobox animanga vocaloid}}, junto con establecer el color de la ficha en base al color de pelo (P1884) del personaje, siempre que sea animanga.

  • Estándar: {{Ficha de software}} (la mayoría de los artículos sobre personajes de Vocaloid)
  • Propuesta: {{Infobox animanga vocaloid}} fue fusionada en este módulo, integrando tanto los datos del personaje como los del software de banco de voz. Usada solo por dos páginas.

El color de la ficha se determina por el color de pelo (P1884) del personaje, listado en Módulo:Ficha_de_personaje/Colores, siempre que se establezca el parámetro |color auto=, de lo contrario, se mostrará el color estándar.

La clase CSS para esto es animanga.

Estándar
Hatsune Miku (初音ミク)
Información general
Desarrollador Crypton Future Media
Lanzamiento inicial

31 de agosto del 2007

  • 30 de abril de 2010 (Hatsune Miku Append) - VOCALOID2
  • 31 de agosto de 2013 (Hatsune Miku V3 English) - VOCALOID3
  • 26 de septiembre de 2013 (Hatsune Miku V3) - VOCALOID3
  • 31 de agosto de 2016 (Hatsune Miku V4X) - VOCALOID4
  • 10 de septiembre de 2017 (Hatsune Miku V4C) - VOCALOID4
Licencia Propietaria
Idiomas Japonés, inglés, chino
Información técnica
Plataformas admitidas

VOCALOID2 , VOCALOID3, VOCALOID3 English VOCALOID4XB Beta VOCALOID4X VOCALOID4X English VOCALOID4XChinese

Piapro Studio
Enlaces
Propuesta
Hatsune Miku
Personaje de pop'n music
Interpretado por Saki Fujita
Información
Nombre original 初音ミク
Género femenino
Estatura 158 cm
Peso 42 kg
Cabello turquoise hair
Datos del banco de voz
Plataforma

VOCALOID2 , VOCALOID3, VOCALOID3 English VOCALOID4XB Beta VOCALOID4X VOCALOID4X English VOCALOID4XChinese

Piapro Studio
licencia Propietaria
Idiomas Japonés, inglés, chino

Esta documentación está transcluida desde Módulo:Ficha de personaje/doc.
Por favor, añade las categorías en la subpágina de documentación y los interwikis en Wikidata. Subpáginas de este módulo.

local p = {}

local ModuloWikidata			= require('Módulo:Wikidata')
local ModuloFormatos			= require('Módulo:Wikidata/Formatos')
local ModuloPaginas				= require('Módulo:Páginas')
local ModuloArgs    			= require('Módulo:Argumentos')
local elementoTabla				= require('Módulo:Tablas').elemento
local formatoNumero				= ModuloFormatos.formatoNumero2
local numeroUnidad				= ModuloFormatos.formatoUnidad2
local obtenerEtiquetaWikidata	= ModuloWikidata.obtenerEtiquetaWikidata
local argumentos				= ModuloArgs.obtenerValorDeArgumentos
local ModuloFicha				-- El módulo se define más abajo
local Entidad
local InstanciaDeID

-- :: Estilos por defecto
local EstiloTabla		= 'border-spacing:2px;padding:2px;'
local EstiloEtiqueta	= 'width:30%;'
local EstiloDatos		= 'width:70%;'
local anchoImagen		= '245px'
local ColorTituloFondo	= '#69A0F3'
local ColorTituloTexto	= '#ffffff'
local ColorEtiqueta		= '#e7f0fd'
local EstiloTitulo		= 'font-weight:bold;'

-- :: Tablas
local DatosPokemon		= mw.loadData('Módulo:Ficha de personaje/Pokémon')
local ColoresCabello	= mw.loadData('Módulo:Ficha de personaje/Colores')

-- La función Ficha()
function p.Ficha(frame)
	-- :: Inicializardor
	ModuloWikidata:setFrame(frame)
	ModuloArgs.obtenerTablaDeArgumentos(frame)

	Entidad		= mw.wikibase.getEntityObject(argumentos{'id'}) or mw.wikibase.getEntityObject(argumentos{'entidad'}) or {}

	local InstanciaDe	= elementoTabla(Entidad, 'claims', 'P31', 1)
	if InstanciaDe then InstanciaDeID = elementoTabla(InstanciaDe, 'mainsnak', 'datavalue', 'value', 'id') end

	-- Para incluir a Módulo:Ficha o Módulo:Ficha animanga según corresponda
	local Integrada	= argumentos{'uni', 'child', 'integrada'}
	local Animanga	= argumentos{'animanga'}
	if Integrada or Animanga then
		ModuloFicha = require('Módulo:Ficha animanga')
		TipoFicha	= 'cabecera'
		Integrada	= 'sí'
		ClaseTitulo	= 'animanga'
	else
		ModuloFicha = require('Módulo:Ficha/pruebas')
	end

	-- :: Cabecera ficha
	local Titulo		= argumentos{'nombre', 'nombre_personaje'} or obtenerEtiquetaWikidata(Entidad) or ModuloPaginas.nombrePagina({desambiguar='sí'})
	local Subtitulo

	-- :: Datos personales
	local NombreOrig			= argumentos{'nombre_original', 'nombre original', 'real', 'nombrejapon', 'japanname', 'namejapon', 'nombre_ja', 'nombre_co'}
	local NombreTransliterado	= argumentos{'nombre_ja_trad', 'ja_romaji'}
	if not NombreOrig then
		local NO				= elementoTabla(Entidad, 'claims', 'P1559', 1) or elementoTabla(Entidad, 'claims', 'P1705', 1)
		if NO then
			NombreOrig			= elementoTabla(NO, 'mainsnak', 'datavalue', 'value', 'text') or NombreOrig
			NombreTransliterado = elementoTabla(NO, 'qualifiers', 'P2440', 1, 'datavalue', 'value') or NombreTransliterado
		end
	end
	
	if NombreOrig then
		--if Animanga then Titulo = Titulo .. '<br><span style="font-size:70%">' .. NombreOrig .. '</span>' end
		if NombreTransliterado then NombreOrig = NombreOrig .. ' (' .. NombreTransliterado .. ')' end
	end

	local Alias			= argumentos{'sobrenombre', 'alias', {propiedad, 'P1449'}}
	local OtrosNombres	= argumentos{'otrosnombres', {propiedad, 'P4970'}}

	-- :: Datos generales
	local FechaNac		= argumentos{'nacido', {propiedad, 'P569', {['uno'] = 'sí'}}}
	local FechaFall		= argumentos{'fallecido', {propiedad, 'P570', {['uno'] = 'sí'}}}
	local Raza			= argumentos{'raza', {propiedad, 'P4743', {['uno'] = 'sí'}}}
	local Genero		= argumentos{'sexo', 'género', {propiedad, 'P21', {['uno'] = 'sí'}}}

	local Edad			= argumentos{'edad', {propiedad, 'P6249', {['formato'] = 'unidad'}}}

	local Estatura		= argumentos{'altura', 'metricheight'}
	if Estatura then
		Estatura 		= Estatura .. ' [[Metro|m]]'
	else
		Estatura 		= argumentos{{propiedad, 'P2048', {['formato'] = 'unidad'}}}
	end	

	local Peso			= argumentos{'peso', 'metricweight'}
	if Peso then
		Peso 			= Peso .. ' [[kg]]'
	else
		Peso 			= argumentos{{propiedad, 'P2067', {['formato'] = 'unidad'}}}
	end		

	local Cabello		= argumentos{'pelo', 'cabello', {propiedad, 'P1884', {['uno'] = 'sí'}}}
	local Ojos			= argumentos{'ojos', {propiedad, 'P1340', {['uno'] = 'sí'}}}

	-- :: Datos familiares, gremio y actividades
	local Ocupacion		= argumentos{'ocupación', {propiedad, 'P106'}}
	local TituloCortes	= argumentos{'título', {propiedad, 'P1035'}}
	local Equipamiento	= argumentos{'equipamiento', {propiedad, 'P2283'}, {propiedad, 'P2283'}, {propiedad, 'P520'}}
	local Miembros		= argumentos{'miembros', {propiedad, 'P463'}}
	local ExMiembros	= argumentos{'exmiembros'}
	local Aliados		= argumentos{'aliados', {propiedad, 'P399'}, {propiedad, 'P2546'}}
	local Enemigos		= argumentos{'enemigos', {propiedad, 'P7047'}}
	local Afiliaciones	= argumentos{'afiliaciones', {propiedad, 'P1416'}}
	local AfilAnt		= argumentos{'afiliaciones_anteriores'}

	local Familia		= argumentos{'familia', {propiedad, 'P53'}}
	local Conexiones	= argumentos{'conexiones'}
	local Conyuge		= argumentos{'cónyuge', {propiedad, 'P26'}}
	local Pareja		= argumentos{'pareja', {propiedad, 'P451'}}
	local Padres		= argumentos{'padres'}
	local Padre
	local Madre
	if not Padres then
		Padres			= {}
		Padre			= argumentos{'padre', {propiedad, 'P22'}}
		Madre			= argumentos{'madre', {propiedad, 'P25'}}
		if Padre then table.insert(Padres, Padre) end
		if Madre then table.insert(Padres, Madre) end
		Padres			= table.concat(Padres, '<br>')
	end

	local Hijos			= argumentos{'hijos', {propiedad, 'P40'}}
	local Familiares	= argumentos{'familiares', 'parientes', {propiedad, 'P1038'}}
	local Residencia	= argumentos{'residencia', {propiedad, 'P551'}}
	local Religion		= argumentos{'religión', 'credo', {propiedad, 'P140'}}
	local Nacionalidad	= argumentos{'nacionalidad', {propiedad, 'P27'}}
	local EstadoActual	= argumentos{'estatus', 'status', 'estado'}
	
	-- Poderes y habilidades
	local PoderesTitulo		= 'Poderes'
	local Poderes			= argumentos{'especialidad', 'poderes'} or ''
	if string.len(Poderes) > 342 then
		Poderes				= Poderes:gsub('<div [%w%"%%:;=%s]*>\n<div [%w%"%%:;=%s]*>[%w%s]*</div>',''):gsub('</div>\n</div>','</div>')
		Poderes				= seccionDesplegable(frame, PoderesTitulo, Poderes)
	else
		PoderesEtiqueta		= PoderesTitulo
	end
	
	local HabilidadesTitulo	= 'Habilidades'
	local Habilidades		= argumentos{'habilidad', 'ability'} or ''
	if string.len(Habilidades) > 342 then
		Habilidades			= Habilidades:gsub('<div [%w%"%%:;=%s]*>\n<div [%w%"%%:;=%s]*>[%w%s]*</div>',''):gsub('</div>\n</div>','</div>')
		Habilidades			= seccionDesplegable(frame, HabilidadesTitulo, Habilidades)
	else
		HabilidadesEtiqueta	= HabilidadesTitulo
	end

	-- :: Autoría, sindicación y doblaje
	local Autor			= argumentos{'creador', 'autor', {propiedad, 'P170'}}
	local Interprete	= argumentos{'actor', {propiedad, 'P175', {['lista'] = 'nobullet'}}}
	local Voz			= argumentos{'voz', 'doblador', 'seiyu', {propiedad, 'P725'}}
	local VozPersonaje, VozVocaloid, InterpretePersonaje, InterpreteVocaloid
	local VozLatam		= argumentos{'doblador_hispanoamérica', 'doblador hispanoamérica'} or ''
	local VozEsp		= argumentos{'doblador_españa', 'doblador españa'} or ''
	local Doblaje		= {}
	if string.len(VozLatam) > 0	then 
		if string.len(VozLatam) > 300 then
			VozLatam	= seccionDesplegable(frame, '[[Hispanoamérica]]', VozLatam, true)
		else
			VozLatam	= '<div style="font-weight:bold;background-color:' .. ColorEtiqueta .. '">[[Hispanoamérica]]</div>\n' .. VozLatam
		end
		table.insert(Doblaje, VozLatam)
	end
	if string.len(VozEsp) > 0	then 
		if string.len(VozEsp) > 300 then
			VozEsp	= seccionDesplegable(frame, '[[España]]', VozEsp, true)
		else
			VozEsp	= '<div style="font-weight:bold;background-color:' .. ColorEtiqueta .. '">[[España]]</div>\n' .. VozEsp
		end
		table.insert(Doblaje, VozEsp)
	end
	Doblaje				= table.concat(Doblaje, '<br>\n')
	
	local Editorial		= argumentos{'editorial', {propiedad, 'P123'}}

	-- :: Fechas
	local Debut			= argumentos{'primera aparición', 'primera', 'debut', 'fecha salida', 'lanzamiento', {propiedad, 'P4584'}, {propiedad, 'P580'}, {propiedad, 'P577'}, {propiedad, 'P5204'}}
	local Retiro		= argumentos{'última aparición', 'ultima', 'última', {propiedad, 'P582'}}
	local MotivoRetiro	= argumentos{'última aparición causa', 'causa'}
	if MotivoRetiro then Retiro = Retiro .. '<small>(' .. MotivoRetiro .. ')</small>' end
	local WebLanzamineto= argumentos{'web_lanzamiento'}
	
	-- :: Datos externos
	local imdbId, filmaffinityId, seccionEnlacesExternos
	if argumentos{'test'} == 'sí' then
		seccionEnlacesExternos = frame:preprocess('<small>{{#Invoke:listas|listahtml|clase=hlist'..
			'|'..((propiedad('P3593', {['uno'] = 'sí'}) and '[http://www.afi.com/members/catalog/DetailView.aspx?s=&Movie='..propiedad('P3593', {['uno'] = 'sí'})..' AFI]') or '')..
			'|'..((propiedad('P1562', {['uno'] = 'sí'}) and '[http://www.allmovie.com/movie/'..propiedad('P1562', {['uno'] = 'sí'})..' AllMovie]') or '')..
			'|'..((propiedad('P1237', {['uno'] = 'sí'}) and '[http://www.boxofficemojo.com/movies/?id='..propiedad('P1237', {['uno'] = 'sí'})..' Box Office Mojo]') or '')..
			'|'..((propiedad('P480', {['uno'] = 'sí'}) and '[https://www.filmaffinity.com/es/film'..propiedad('P480', {['uno'] = 'sí'})..'.html FilmAffinity]') or '')..
			'|'..((propiedad('P345', {['uno'] = 'sí'}) and '[https://www.imdb.com/title/'..propiedad('P345', {['uno'] = 'sí'})..'/ IMDb]') or '')..
			'|'..((propiedad('P1712', {['uno'] = 'sí'}) and '[http://www.metacritic.com/'..propiedad('P1712', {['uno'] = 'sí'})..' Metacritic]') or '')..
			'|'..((propiedad('P3302', {['uno'] = 'sí'}) and '[https://www.omdb.org/movie/'..propiedad('P3302', {['uno'] = 'sí'})..' omdb]') or '')..
			'|'..((propiedad('P1258', {['uno'] = 'sí'}) and '[https://www.rottentomatoes.com/'..propiedad('P1258', {['uno'] = 'sí'})..' Rotten Tomatoes]') or '')..
			'|'..((propiedad('P1265', {['uno'] = 'sí'}) and '[http://www.sensacine.com/film/fichefilm_gen_cfilm='..propiedad('P1265', {['uno'] = 'sí'})..'.html SensaCine]') or '')..
			'|'..((propiedad('P2631', {['uno'] = 'sí'}) and '[http://tcmdb.com/title/title.jsp?stid='..propiedad('P2631', {['uno'] = 'sí'})..' TCM]') or '')..
			'|'..((propiedad('P2638', {['uno'] = 'sí'}) and '[http://www.tv.com/'..propiedad('P2638', {['uno'] = 'sí'})..' TV.com]') or '')..'}}</small>')
	else
		imdbId = argumentos{'imdbid', 'imdbId', {propiedad, 'P345', {['uno'] = 'sí'}}}
		filmaffinityId = argumentos{'filmaffinityid', 'filmaffinityId', {propiedad, 'P480', {['uno'] = 'sí'}}}
	end

	local enlaceImdb = imdbId and '[https://www.imdb.com/title/'..imdbId..'/ Ficha] en [[Internet Movie Database|IMDb]]'
	local enlaceFilmaffinity = filmaffinityId and '[https://www.filmaffinity.com/es/film'..filmaffinityId..'.html Ficha] en [[FilmAffinity]]'
	local identificadoresExternos
	
	if imdbId and filmaffinityId then
		identificadoresExternos = enlaceImdb..'<br />'..enlaceFilmaffinity
	elseif imdbId or filmaffinityId then 
		identificadoresExternos = enlaceImdb or enlaceFilmaffinity
	end

	-- :: Específicos de Pokémon
	local Pokedex			= obtenerPokedex(frame)
	local PokemonTipo		= Pokedex['tipo']
	local PokemonEspecie	= Pokedex['especie']
	local PokemonEtapa		= Pokedex['etapa']
	local DifrenciaGenero	= Pokedex['dif_genero'] or ''
	local Generacion		= Pokedex['generacion'] or argumentos{'generación', 'generation'}
	if not Debut == '' and Generacion then
		Debut = Debut .. '<br>(' .. Generacion .. ' generación)'
	elseif not Debut and Generacion then
		Debut = Generacion .. 'generación'
	end

	local Preevolucion		= Pokedex['preevolución']
	if Preevolucion then Preevolucion = enlazar(frame, Preevolucion) end
	
	local Evolucion			= Pokedex['evolución']
	if Evolucion then Evolucion = enlazar(frame, Evolucion) end

	-- Nacional / Kanto
	local PokedexNacNum		= Pokedex['pokedex_nac']
	local PokedexNacAnt		= Pokedex['anterior_nac'] or ''
	local PokedexNacSig		= Pokedex['siguiente_nac'] or ''
	local KantoTitulo		= '[[Pokédex#Pokédex_Nacional|Pokédex nacional]] / [[Anexo:Lugares_de_Pokémon#Kanto|Kanto]]'
	if PokedexNacNum then KantoTitulo = KantoTitulo .. ' (#' .. formatoNumero(PokedexNacNum) .. ')' end

	-- Johto
	local PokedexJotNum		= Pokedex['pokedex_jot']
	local PokedexJotAnt		= Pokedex['anterior_jot'] or ''
	local PokedexJotSig		= Pokedex['siguiente_jot'] or ''
	local JohtoTitulo		= '[[Pokédex]] de [[Anexo:Lugares_de_Pokémon#Johto|Johto]]'
	if PokedexJotNum then JohtoTitulo = JohtoTitulo .. ' (#' ..  formatoNumero(PokedexJotNum) .. ')' end

	-- Hoenn
	local PokedexHoeNum		= Pokedex['pokedex_hoe']
	local PokedexHoeAnt		= Pokedex['anterior_hoe'] or ''
	local PokedexHoeSig		= Pokedex['siguiente_hoe'] or ''
	local HoennTitulo		= '[[Pokédex]] de [[Anexo:Lugares_de_Pokémon#Hoenn|Hoenn]]'
	if PokedexHoeNum then HoennTitulo = HoennTitulo .. ' (#' ..  formatoNumero(PokedexHoeNum) .. ')' end

	-- Sinnoh
	local PokedexSinNum		= Pokedex['pokedex_sin']
	local PokedexSinAnt		= Pokedex['anterior_sin'] or ''
	local PokedexSinSig		= Pokedex['siguiente_sin'] or ''
	local SinnohTitulo		= '[[Pokédex]] de [[Anexo:Lugares_de_Pokémon#Sinnoh|Sinnoh]]'
	if PokedexSinNum then SinnohTitulo = SinnohTitulo .. ' (#' ..  formatoNumero(PokedexSinNum) .. ')' end

	-- Teselia
	local PokedexTesNum		= Pokedex['pokedex_tes']
	local PokedexTesAnt		= Pokedex['anterior_tes'] or ''
	local PokedexTesSig		= Pokedex['siguiente_tes'] or ''
	local TeseliaTitulo		= '[[Pokédex]] de [[Anexo:Lugares_de_Pokémon#Teselia|Teselia]]'
	if PokedexTesNum then TeseliaTitulo = TeseliaTitulo .. ' (#' ..  formatoNumero(PokedexTesNum) .. ')' end

	local PokedexTes2Num	= Pokedex['pokedex_te2']
	local PokedexTes2Ant	= Pokedex['anterior_te2'] or ''
	local PokedexTes2Sig	= Pokedex['siguiente_te2'] or ''
	local Teselia2Titulo	= '[[Pokédex]] de [[Anexo:Lugares_de_Pokémon#Teselia|Teselia]] ([[Pokémon negro 2 y Pokémon blanco 2|NB2]])'
	if PokedexTes2Num then Teselia2Titulo = Teselia2Titulo .. ' (#' ..  formatoNumero(PokedexTes2Num) .. ')' end

	-- Kalos
	local PokedexKalMonNum	= Pokedex['pokedex_kal_mon']
	local PokedexKalMonAnt	= Pokedex['anterior_kal_mon'] or ''
	local PokedexKalMonSig	= Pokedex['siguiente_kal_mon'] or ''
	local KalosMonTitulo	= '[[Pokédex]] de [[Anexo:Lugares_de_Pokémon#Kalos|Kalos Montaña]]'
	if PokedexKalMonNum then KalosMonTitulo = KalosMonTitulo .. ' (#' ..  formatoNumero(PokedexKalMonNum) .. ')' end

	local PokedexKalCenNum	= Pokedex['pokedex_kal_cen']
	local PokedexKalCenAnt	= Pokedex['anterior_kal_cen'] or ''
	local PokedexKalCenSig	= Pokedex['siguiente_kal_cen'] or ''
	local KalosCenTitulo	= '[[Pokédex]] de [[Anexo:Lugares_de_Pokémon#Kalos|Kalos Centro]]'
	if PokedexKalCenNum then KalosCenTitulo = KalosCenTitulo .. ' (#' ..  formatoNumero(PokedexKalCenNum) .. ')' end
	
	local PokedexKalCosNum	= Pokedex['pokedex_kal_cos']
	local PokedexKalCosAnt	= Pokedex['anterior_kal_cos'] or ''
	local PokedexKalCosSig	= Pokedex['siguiente_kal_cos'] or ''
	local KalosCosTitulo	= '[[Pokédex]] de [[Anexo:Lugares_de_Pokémon#Kalos|Kalos Costa]]'
	if PokedexKalCosNum then KalosCosTitulo = KalosCosTitulo .. ' (#' ..  formatoNumero(PokedexKalCosNum) .. ')' end

	-- Alola
	local PokedexAloNum		= Pokedex['pokedex_alo']
	local PokedexAloAnt		= Pokedex['anterior_alo'] or ''
	local PokedexAloSig		= Pokedex['siguiente_alo'] or ''
	local AlolaTitulo		= '[[Pokédex]] de [[Anexo:Lugares_de_Pokémon#Alola|Alola]]'
	if PokedexAloNum then AlolaTitulo = AlolaTitulo .. ' (#' ..  formatoNumero(PokedexAloNum) .. ')' end

	-- Galar
	local PokedexGalNum		= Pokedex['pokedex_gal']
	local PokedexGalAnt		= Pokedex['anterior_gal'] or ''
	local PokedexGalSig		= Pokedex['siguiente_gal'] or ''
	local GalarTitulo		= '[[Pokédex]] de [[Anexo:Lugares_de_Pokémon#Galar|Galar]]'
	if PokedexGalNum then GalarTitulo = GalarTitulo .. ' (#' ..  formatoNumero(PokedexGalNum) .. ')' end

	local TituloPersonaje
	if next(Pokedex) then
		TituloPersonaje = "Datos del Pokémon"
	else
		TituloPersonaje = "Información"
	end
	
	local TituloEtapa	= "Linea evolutiva"
	if PokemonEtapa then TituloEtapa = TituloEtapa .. ' (' .. PokemonEtapa .. ')' end
	
	-- :: Software (Vocaloid y otros)
	local Motor				= argumentos{'motor', {propiedad, 'P408'}}
	local GeneroMusical		= argumentos{'género', 'genero', {propiedad, 'P136'}}
	local Tempo				= argumentos{'tempo', {propiedad, 'P1725'}}
	local RangoDinamico		= argumentos{'rango'}
	local Desarrollador		= argumentos{'desarrollador', {propiedad, 'P178'}}
	local ModeloDesarrollo	= argumentos{'modelo_desarrollo'}
	local Plataforma		= argumentos{'plataforma', {propiedad, 'P400'}}
	local licencia			= argumentos{'licencia', {propiedad, 'P275'}}
	local EstadoSoftware	= argumentos{'estado'}
	local Idioma			= argumentos{'idioma', 'idiomas', {propiedad, 'P407'}}

	local Franquicia	= argumentos{'obra', {propiedad, 'P8345', {['uno'] = 'sí', ['link'] = 'sí'}}, {propiedad, 'P1441', {['uno'] = 'sí', ['link'] = 'sí'}}}
	if InstanciaDeID == 'Q550596' then
		Subtitulo = 'Banco de voz de [[Vocaloid]]'
		VozVocaloid		= Voz or Interprete
		ClaseTitulo	= 'animanga'
	elseif next(Pokedex) then
		Subtitulo = '[[Pokémon]]'
		VozPersonaje		= Voz
		InterpretePersonaje	= Interprete
		ClaseTitulo			= 'animanga'
	elseif Franquicia then
		Subtitulo = 'Personaje de ' .. Franquicia
		VozPersonaje		= Voz
		InterpretePersonaje	= Interprete
	end
	
	-- :: Datos extra
	local DatosExtra = {tipo="sección",titulo = "Datos extra"}
	for i=21,25 do
		if not argumentos{'etiqueta'..i, 'lbl'..i} and not argumentos{'datos'..i, 'data'..i} then break end
		table.insert(DatosExtra, {argumentos{'etiqueta'..i, 'lbl'..i}, argumentos{'datos'..i, 'data'..i}})
	end
	for i=21,25 do
		if not argumentos{'etiqueta'..i, 'lbl'..i} and not argumentos{'datos'..i, 'data'..i} then break end
		table.insert(DatosExtra, {argumentos{'etiqueta'..i, 'lbl'..i}, argumentos{'datos'..i, 'data'..i}})
	end

	local Imagen		= argumentos{'imagen', 'image', 'logo'}
	local TamanoImagen	= argumentos{'image_width', 'tamaño imagen', 'tamaño_imagen'} or '250px'
	local Pie
	if Imagen then
		Pie				= argumentos{'pie', 'image_caption'}
	else
		Imagen, Pie		= ModuloWikidata.obtenerImagenWikidata(Entidad, 'P18') or ModuloWikidata.obtenerImagenWikidata(Entidad, 'P154')
	end

	-- Colores de la ficha en base al color de cabello del personaje
	local ColorAuto		= argumentos{'color auto', 'color_auto'}
	local ColorCabello	= elementoTabla(Entidad, 'claims', 'P1884', 1, 'mainsnak', 'datavalue', 'value', 'id')
	if ColoresCabello[ColorCabello] and ColorAuto then
		ColorTituloFondo= ColoresCabello[ColorCabello][1]
		ColorTituloTexto= ColoresCabello[ColorCabello][3]
		ColorEtiqueta	= ColoresCabello[ColorCabello][2]
	end
	
	-- :: Estilos
	ColorTituloFondo	= argumentos{'piel', 'colorfondo'} or Pokedex['colortitulo'] or ColorTituloFondo
	ColorTituloTexto	= argumentos{'colortexto'} or Pokedex['colortexto'] or ColorTituloTexto
	ColorEtiqueta		= argumentos{'coloretiqueta'} or Pokedex['coloretiqueta'] or ColorEtiqueta
	EstiloTitulo		= 'background-color:' .. ColorTituloFondo .. ';color:' .. ColorTituloTexto
	EstiloEtiqueta		= argumentos{'estiloetiqueta'} or EstiloEtiqueta .. ';background-color:' .. ColorEtiqueta

	local TablaFicha = {
		uni					= Integrada,
		tipo				= TipoFicha,
		titulo  			= Titulo,
		subtitulo			= Subtitulo,
		estilo				= EstiloTabla,
		clasetitulo			= ClaseTitulo,
		estilotitulo		= EstiloTitulo,
		estiloseccion		= EstiloTitulo,
		estiloetiqueta		= EstiloEtiqueta,
		imagen				= Imagen,
		["tamañoimagen"]	= TamanoImagen,
		pie					= Pie,
		estilopie			= "font-size:88%",

		-- :: General
		{tipo="sección",
			{'Creador(es)', Autor},
			{'Interpretado&nbsp;por', InterpretePersonaje},
			{'Voz original', VozPersonaje},
			{'Doblaje', Doblaje},
			--{'Doblador en [[Hispanoamérica]]', VozLatam},
			--{'Doblador en [[España]]', VozEsp},
			{'Primera&nbsp;aparición', Debut},
			{'Última&nbsp;aparición', Retiro},
			{'Motivo de retiro', MotivoRetiro},
			{'Editorial', Editorial},
		},

		{tipo="sección",
			titulo = TituloPersonaje,
			{'Nombre&nbsp;original', NombreOrig},
			{'Otros&nbsp;Nombres', OtrosNombres},
			{'Alias', Alias},
			{'Nacionalidad', Nacionalidad},
			{'Residencia', Residencia},
			{'Religión', Religion},
			{'Estado&nbsp;actual', EstadoActual},
			{'Fecha de nacimiento', FechaNac},
			{'Fecha de fallecimiento', FechaFall},
			{'Raza', Raza}, -- Para Pokémon, véase PokemonEspecie
			{'Género', Genero},
			{'Diferencia de género', DifrenciaGenero},
			{'Edad', Edad},
			{'Estatura', Estatura},
			{'Peso', Peso},
			{'Cabello', Cabello},
			{'Ojos', Ojos},
			{PoderesEtiqueta, Poderes}, -- Para Pokémon, véase Habilidades
			{'Ocupacion', Ocupacion},
			{'Título', TituloCortes},
			{'Equipamiento', Equipamiento},
		},

		{tipo="sección",
			--titulo = "Información familiar",
			{'Familia', Familia},
			{'Conexiones', Conexiones},
			{'Conyuge', Conyuge},
			{'Pareja', Pareja},
			{'Padres', Padres},
			{'Hijos', Hijos},
			{'Familiares', Familiares},
		},

		{tipo="sección",
			--titulo = "Afiliaciones",
			{'Miembros', Miembros},
			{'Ex miembros', ExMiembros},
			{'Aliados', Aliados},
			{'Enemigos', Enemigos},
			{'Afiliaciones', Afiliaciones},
			{'Afiliaciones anteriores', AfilAnt},
		},

		-- :: Específicos de Pokémon
		{tipo="sección",
			{'Especie', PokemonEspecie},
			{'Tipo', PokemonTipo},
			{HabilidadesEtiqueta, Habilidades},
		},
		{tipo="sección",
			titulo = TituloEtapa,
			estilotitulo			= EstiloTabla,
			estiloseccion			= EstiloTitulo,
			['ocultar_vacíos']		= 'sí',
			{
				color				= ColorEtiqueta,
				['tipo']			= 'sucesión',
				['anterior']		= Preevolucion,
				['siguiente']		= Evolucion,
			},
		},
		{tipo="sección",
			titulo					= KantoTitulo,
			estilotitulo			= EstiloTabla,
			['ocultar_vacíos']		= 'sí',
			{
				color				= ColorEtiqueta,
				['tipo']			= 'sucesión',
				['anterior']		= PokedexNacAnt,
				['siguiente']		= PokedexNacSig,
			},
		},
		{tipo="sección",
			titulo					= JohtoTitulo,
			estilotitulo			= EstiloTabla,
			['ocultar_vacíos']		= 'sí',
			{
				color				= ColorEtiqueta,
				['tipo']			= 'sucesión',
				['anterior']		= PokedexJotAnt,
				['siguiente']		= PokedexJotSig,
			},
		},
		{tipo="sección",
			titulo					= HoennTitulo,
			estilotitulo			= EstiloTabla,
			['ocultar_vacíos']		= 'sí',
			{
				color				= ColorEtiqueta,
				['tipo']			= 'sucesión',
				['anterior']		= PokedexHoeAnt,
				['siguiente']		= PokedexHoeSig,
			},
		},
		{tipo="sección",
			titulo					= SinnohTitulo,
			estilotitulo			= EstiloTabla,
			['ocultar_vacíos']		= 'sí',
			{
				color				= ColorEtiqueta,
				['tipo']			= 'sucesión',
				['anterior']		= PokedexSinAnt,
				['siguiente']		= PokedexSinSig,
			},
		},
		{tipo="sección",
			titulo					= TeseliaTitulo,
			estilotitulo			= EstiloTabla,
			['ocultar_vacíos']		= 'sí',
			{
				color				= ColorEtiqueta,
				['tipo']			= 'sucesión',
				['anterior']		= PokedexTesAnt,
				['siguiente']		= PokedexTesSig,
			},
		},
		{tipo="sección",
			titulo 					= Teselia2Titulo,
			estilotitulo			= EstiloTabla,
			['ocultar_vacíos']		= 'sí',
			{
				color				= ColorEtiqueta,
				['tipo']			= 'sucesión',
				['anterior']		= PokedexTes2Ant,
				['siguiente']		= PokedexTes2Sig,
			},
		},
		{tipo="sección",
			titulo 					= KalosMonTitulo,
			estilotitulo			= EstiloTabla,
			['ocultar_vacíos']		= 'sí',
			{
				color				= ColorEtiqueta,
				['tipo']			= 'sucesión',
				['anterior']		= PokedexKalMonAnt,
				['siguiente']		= PokedexKalMonSig,
			},
		},
		{tipo="sección",
			titulo 					= KalosCenTitulo,
			estilotitulo			= EstiloTabla,
			['ocultar_vacíos']		= 'sí',
			{
				color				= ColorEtiqueta,
				['tipo']			= 'sucesión',
				['anterior']		= PokedexKalCenAnt,
				['siguiente']		= PokedexKalCenSig,
			},
		},
		{tipo="sección",
			titulo 					= KalosCosTitulo,
			estilotitulo			= EstiloTabla,
			['ocultar_vacíos']		= 'sí',
			{'Número', PokedexKalCosNum},
			{
				color				= ColorEtiqueta,
				['tipo']			= 'sucesión',
				['anterior']		= PokedexKalCosAnt,
				['siguiente']		= PokedexKalCosSig,
			},
		},
		{tipo="sección",
			titulo 					= AlolaTitulo,
			estilotitulo			= EstiloTabla,
			['ocultar_vacíos']		= 'sí',
			{
				color				= ColorEtiqueta,
				['tipo']			= 'sucesión',
				['anterior']		= PokedexAloAnt,
				['siguiente']		= PokedexAloSig,
			},
		},
		{tipo="sección",
			titulo 					= GalarTitulo,
			estilotitulo			= EstiloTabla,
			['ocultar_vacíos']		= 'sí',
			{
				color				= ColorEtiqueta,
				['tipo']			= 'sucesión',
				['anterior']		= PokedexGalAnt,
				['siguiente']		= PokedexGalSig,
			},
		},
	
		{tipo="sección",
			titulo 					= 'Datos del banco de voz',
			['ocultar_vacíos']		= 'sí',
			{'[[Género musical|Género]]', GeneroMusical},
			{'[[Tempo|Tempo Óptimo]]', Tempo},
			{'[[Rango dinámico|Rango]]', RangoDinamico},
			{'Intérprete de voz', VozVocaloid},
			{'Desarrollador', Desarrollador},
			{'Plataforma', Plataforma},
			{'Motor', Motor},
			{'licencia', licencia},
			{'Estado', EstadoSoftware},
			{'Idiomas', Idioma},
		},
		DatosExtra,
		piedetabla		= identificadoresExternos,
		estilopiedetabla= 'padding-top:10px'
	}

	return ModuloFicha.infobox(TablaFicha)
end

-- Función para obtener datos de Pokémon desde Wikidata
function obtenerPokedex(frame)
	local Pokedex		= {} -- Valores a devolver a la ficha
	local PokedexDatos	= {} -- Datos de la Pokédex por catálogo
	
	-- Etapas evolutivas
	local Preevolucion
	local Evolucion
	local Etapa
	
	-- Nacional / Kanto
	local PokedexNacNum
	local PokedexNacAnt
	local PokedexNacSig

	-- Johto
	local PokedexJotNum
	local PokedexJotAnt
	local PokedexJotSig

	-- Hoenn
	local PokedexHoeNum
	local PokedexHoeAnt
	local PokedexHoeSig

	-- Sinnoh
	local PokedexSinNum
	local PokedexSinAnt
	local PokedexSinSig

	-- Teselia
	local PokedexTesNum
	local PokedexTesAnt
	local PokedexTesSig

	local PokedexTes2Num
	local PokedexTes2Ant
	local PokedexTes2Sig

	-- Kalos
	local PokedexKalMonNum
	local PokedexKalMonAnt
	local PokedexKalMonSig

	local PokedexKalCenNum
	local PokedexKalCenAnt
	local PokedexKalCenSig
	
	local PokedexKalCosNum
	local PokedexKalCosAnt
	local PokedexKalCosSig

	-- Alola
	local PokedexAloNum
	local PokedexAloAnt
	local PokedexAloSig

	-- Galar
	local PokedexGalNum
	local PokedexGalAnt
	local PokedexGalSig
	
	-- Obtener el número en la Pokédex según el catálogo
	local PN = elementoTabla(Entidad, 'claims', 'P1685')
	if PN then
		for i,v in pairs(PN) do
			Numero		= elementoTabla(v, 'mainsnak', 'datavalue', 'value')
			Catalogo	= elementoTabla(v, 'qualifiers','P972', 1, 'datavalue', 'value', 'id')
			Anterior	= obtenerEtiquetaWikidata(mw.wikibase.getEntity(elementoTabla(v, 'qualifiers','P155', 1, 'datavalue', 'value', 'id')))
			if Anterior then 
				Anterior = enlazar(frame, Anterior)
			else
				Anterior = '--'
			end
			Siguiente	= obtenerEtiquetaWikidata(mw.wikibase.getEntity(elementoTabla(v, 'qualifiers','P156', 1, 'datavalue', 'value', 'id')))
			if Siguiente then 
				Siguiente = enlazar(frame, Siguiente)
			else
				Siguiente = '--'
			end
			PokedexDatos[Catalogo] = {Numero, Anterior, Siguiente}
		end
	end

	-- Pokédex Nacional
	if PokedexDatos['Q18086661'] then
		PokedexNacNum	= PokedexDatos['Q20005020'][1]
		PokedexNacAnt	= PokedexDatos['Q20005020'][2]
		PokedexNacSig	= PokedexDatos['Q20005020'][3]
	end
	
	-- Pokédex de Kanto
	if PokedexDatos['Q20005020'] then
		PokedexNacNum	= PokedexDatos['Q20005020'][1]
		PokedexNacAnt	= PokedexDatos['Q20005020'][2]
		PokedexNacSig	= PokedexDatos['Q20005020'][3]
	end

	-- Pokédex de Johto
	if PokedexDatos['Q11310550'] then
		PokedexJotNum	= PokedexDatos['Q11310550'][1]
		PokedexJotAnt	= PokedexDatos['Q11310550'][2]
		PokedexJotSig	= PokedexDatos['Q11310550'][3]
	end
	
	-- Pokédex de Johto revisada
	if PokedexDatos['Q18099930'] then
		PokedexJotNum	= PokedexDatos['Q18099930'][1]
		PokedexJotAnt	= PokedexDatos['Q18099930'][2]
		PokedexJotSig	= PokedexDatos['Q18099930'][3]
	end

	-- Pokédex de Hoenn
	if PokedexDatos['Q18086665'] then
		PokedexHoeNum	= PokedexDatos['Q18086665'][1]
		PokedexHoeAnt	= PokedexDatos['Q18086665'][2]
		PokedexHoeSig	= PokedexDatos['Q18086665'][3]
	end
	
	-- Pokédex de Hoenn revisada
	if PokedexDatos['Q18922463'] then
		PokedexHoeNum	= PokedexDatos['Q18922463'][1]
		PokedexHoeAnt	= PokedexDatos['Q18922463'][2]
		PokedexHoeSig	= PokedexDatos['Q18922463'][3]
	end

	-- Pokedex de Sinnoh
	if PokedexDatos['Q18086666'] then
		PokedexSinNum	= PokedexDatos['Q18086666'][1]
		PokedexSinAnt	= PokedexDatos['Q18086666'][2]
		PokedexSinSig	= PokedexDatos['Q18086666'][3]
	end

	-- Pokédex de Teselia
	if PokedexDatos['Q18086667'] then
		PokedexTesNum	= PokedexDatos['Q18086667'][1]
		PokedexTesAnt	= PokedexDatos['Q18086667'][2]
		PokedexTesSig	= PokedexDatos['Q18086667'][3]
	end
	
	-- Pokédex de Teselia revisada
	if PokedexDatos['Q18100125'] then
		PokedexTesNum	= PokedexDatos['Q18100125'][1]
		PokedexTesAnt	= PokedexDatos['Q18100125'][2]
		PokedexTesSig	= PokedexDatos['Q18100125'][3]
	end

	-- Kalos Montaña
	if PokedexDatos['Q18089575'] then
		PokedexKalMonNum= PokedexDatos['Q18089575'][1]
		PokedexKalMonAnt= PokedexDatos['Q18089575'][2]
		PokedexKalMonSig= PokedexDatos['Q18089575'][3]
	end

	-- Kalos Centro
	if PokedexDatos['Q18086671'] then
		PokedexKalCenNum= PokedexDatos['Q18086671'][1]
		PokedexKalCenAnt= PokedexDatos['Q18086671'][2]
		PokedexKalCenSig= PokedexDatos['Q18086671'][3]
	end

	-- Kalos Costa
	if PokedexDatos['Q18089574'] then
		PokedexKalCosNum= PokedexDatos['Q18089574'][1]
		PokedexKalCosAnt= PokedexDatos['Q18089574'][2]
		PokedexKalCosSig= PokedexDatos['Q18089574'][3]
	end

	-- Alola
	if PokedexDatos['Q25336664'] then
		PokedexAloNum	= PokedexDatos['Q25336664'][1]
		PokedexAloAnt	= PokedexDatos['Q25336664'][2]
		PokedexAloSig	= PokedexDatos['Q25336664'][3]
	end

	-- Galar
	if PokedexDatos['Q75387698'] then
		PokedexGalNum	= PokedexDatos['Q75387698'][1]
		PokedexGalAnt	= PokedexDatos['Q75387698'][2]
		PokedexGalSig	= PokedexDatos['Q75387698'][3]
	end

	-- Obtener las etapas evolutivas
	local FPD			= elementoTabla(Entidad, 'claims', 'P361') or {}
	for i,v in ipairs(FPD) do
		FormaParteDe			= mw.wikibase.getEntity(elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'id'))
		if FormaParteDe then
			if elementoTabla(FormaParteDe, 'claims', 'P31', 1, 'mainsnak', 'datavalue', 'value', 'id') == 'Q15795637' then
				Preevolucion	= obtenerEtiquetaWikidata(mw.wikibase.getEntity(elementoTabla(v, 'qualifiers','P155', 1, 'datavalue', 'value', 'id')))
				Evolucion		= obtenerEtiquetaWikidata(mw.wikibase.getEntity(elementoTabla(v, 'qualifiers','P156', 1, 'datavalue', 'value', 'id')))
				Etapa			= elementoTabla(v, 'qualifiers','P1545', 1, 'datavalue', 'value') or argumentos{'etapa', 'stage'}
				if DatosPokemon['etapas'][Etapa] then Etapa = DatosPokemon['etapas'][Etapa] end
				break
			end
		end
	end

	-- Obtener el tipo de Pokémon
	local PokemonTipo		= {}
	local TipoPrimario		= argumentos{'tipo', 'type'}
	local TipoSecundario	= argumentos{'tipo2', 'type2'}
	local TipoTerciario		= argumentos{'tipo3', 'type3'}
	local ColorFondoPrimario
	local ColorTextoPrimario
	local ColorEtiquetaPrimario
	local ColorFondoSecundario
	local ColorTextoSecundario
	local ColorEtiquetaSecundario
	local ColorFondoTerciario
	local ColorTextoTerciario
	local ColorEtiquetaTerciario

	if not TipoPrimario then
		local PT			= elementoTabla(Entidad, 'claims', 'P31')
		if PT then
			for i,v in ipairs(PT) do
				Tipo	= elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'id')
	
				if elementoTabla(v, 'qualifiers','P518', 1, 'datavalue', 'value', 'id') == 'Q25931659' then
					TipoPrimario = Tipo
				end
	
				if elementoTabla(v, 'qualifiers','P518', 1, 'datavalue', 'value', 'id') == 'Q25931668' then
					TipoSecundario = Tipo
				end
			end
		end
	end

	if DatosPokemon['tipos'][TipoPrimario]  then
		TipoPrimario			= DatosPokemon['tipos'][TipoPrimario][1]
		ColorFondoPrimario		= DatosPokemon['tipos'][TipoPrimario][2]
		ColorTextoPrimario		= DatosPokemon['tipos'][TipoPrimario][3]
		ColorEtiquetaPrimario	= DatosPokemon['tipos'][TipoPrimario][4]
		table.insert(PokemonTipo,'<span style="border-radius:8px;padding:4px;background-color:' .. ColorFondoPrimario .. ';color:' .. ColorTextoPrimario .. ';" title="Pokémon tipo ' .. TipoPrimario .. '">' .. TipoPrimario)
	end
	
	if DatosPokemon['tipos'][TipoSecundario]  then
		TipoSecundario			= DatosPokemon['tipos'][TipoSecundario][1]
		ColorFondoSecundario	= DatosPokemon['tipos'][TipoSecundario][2]
		ColorTextoSecundario	= DatosPokemon['tipos'][TipoSecundario][3]
		ColorEtiquetaSecundario	= DatosPokemon['tipos'][TipoSecundario][4]
		table.insert(PokemonTipo,'<span style="border-radius:8px;padding:5px;background-color:' .. ColorFondoSecundario .. ';color:' .. ColorTextoSecundario .. ';" title="Pokémon tipo ' .. TipoSecundario .. '">' .. TipoSecundario)
	end
	
	if DatosPokemon['tipos'][TipoTerciario]  then
		TipoTerciario			= DatosPokemon['tipos'][TipoTerciario][1]
		ColorFondoTerciario		= DatosPokemon['tipos'][TipoTerciario][2]
		ColorTextoTerciario		= DatosPokemon['tipos'][TipoTerciario][3]
		ColorEtiquetaTerciario	= DatosPokemon['tipos'][TipoTerciario][4]
		table.insert(PokemonTipo,'<span style="border-radius:8px;padding:5px;background-color:' .. ColorFondoTerciario .. ';color:' .. ColorTextoTerciario .. ';" title="Pokémon tipo ' .. TipoTerciario .. '">' .. TipoTerciario)
	end

	if next(PokemonTipo) then Pokedex['tipo'] = table.concat(PokemonTipo, '&nbsp;') end

	-- :: General
	Pokedex['generacion']		= argumentos{'generación', 'generation'}
	Pokedex['especie']			= argumentos{'especie', 'species'}
	Pokedex['preevolución']		= argumentos{'preevolución', 'evolvesfrom'} or Preevolucion
	Pokedex['evolución']		= argumentos{'evolución', 'evolvesto'} or Evolucion
	Pokedex['etapa']			= Etapa
	Pokedex['dif_genero']		= argumentos{'diferencia'}
	
	-- :: Colores
	Pokedex['colortitulo']		= ColorFondoPrimario
	Pokedex['colortexto']		= ColorTextoPrimario
	Pokedex['coloretiqueta']	= ColorEtiquetaPrimario

	-- :: Catálogo
	Pokedex['pokedex_nac']		= argumentos{'numero', 'número', 'number'} or PokedexNacNum
	Pokedex['anterior_nac']		= argumentos{'anterior', 'preceding'} or PokedexNacAnt
	Pokedex['siguiente_nac']	= argumentos{'siguiente', 'following'} or PokedexNacSig

	Pokedex['pokedex_jot']		= argumentos{'johtonumero'} or PokedexJotNum
	Pokedex['anterior_jot']		= argumentos{'johtoanterior'} or PokedexJotAnt
	Pokedex['siguiente_jot']	= argumentos{'johtosiguiente'} or PokedexJotSig

	Pokedex['pokedex_hoe']		= argumentos{'hoennumero'} or PokedexHoeNum
	Pokedex['anterior_hoe']		= argumentos{'hoennanterior'} or PokedexHoeAnt
	Pokedex['siguiente_hoe']	= argumentos{'hoennsiguiente'} or PokedexHoeSig

	Pokedex['pokedex_sin']		= argumentos{'shinounumero'} or PokedexSinNum
	Pokedex['anterior_sin']		= argumentos{'shinouanterior'} or PokedexSinAnt
	Pokedex['siguiente_sin']	= argumentos{'shinousiguiente'} or PokedexSinSig
	
	Pokedex['pokedex_tes']		= argumentos{'unovanumero', 'teselianumero'} or PokedexTesNum
	Pokedex['anterior_tes']		= argumentos{'unovaanterior', 'teseliaanterior'} or PokedexTesAnt
	Pokedex['siguiente_tes']	= argumentos{'unovasiguiente', 'teseliasiguiente'} or PokedexTesSig
	
	Pokedex['pokedex_te2']		= argumentos{'unovanumero2', 'teselianumero2'} or PokedexTes2Num
	Pokedex['anterior_te2']		= argumentos{'unovaanterior2', 'teseliaanterior2'} or PokedexTes2Ant
	Pokedex['siguiente_te2']	= argumentos{'unovasiguiente2', 'teseliasiguiente2'} or PokedexTes2Sig
	
	Pokedex['pokedex_kal_mon']	= argumentos{'kalosmontañanumero'} or PokedexKalMonNum
	Pokedex['anterior_kal_mon']	= argumentos{'kalosmontañaanterior'} or PokedexKalMonAnt
	Pokedex['siguiente_kal_mon']= argumentos{'kalosmontañasiguiente'} or PokedexKalMonSig
	
	Pokedex['pokedex_kal_cen']	= argumentos{'kaloscentronumero'} or PokedexKalCenNum
	Pokedex['anterior_kal_cen']	= argumentos{'kaloscentroanterior'} or PokedexKalCenAnt
	Pokedex['siguiente_kal_cen']= argumentos{'kaloscentrosiguiente'} or PokedexKalCenSig
	
	Pokedex['pokedex_kal_cos']	= argumentos{'kaloscostanumero'} or PokedexKalCosNum
	Pokedex['anterior_kal_cos']	= argumentos{'kaloscostaanterior'} or PokedexKalCosAnt
	Pokedex['siguiente_kal_cos']= argumentos{'kaloscostasiguiente'} or PokedexKalCosSig
	
	Pokedex['pokedex_alo']		= argumentos{'alolanumero'} or PokedexAloNum
	Pokedex['anterior_alo']		= argumentos{'alolaanterior'} or PokedexAloAnt
	Pokedex['siguiente_alo']	= argumentos{'alolasiguiente'} or PokedexAloSig
	
	Pokedex['pokedex_gal']		= argumentos{'galarnumero'} or PokedexGalNum
	Pokedex['anterior_gal']		= argumentos{'galaranterior'} or PokedexGalAnt
	Pokedex['siguiente_gal']	= argumentos{'galarsiguiente'} or PokedexGalSig

	return Pokedex
end

-- Función, propiedad() personalizada
function propiedad(idPropiedad, opciones, entidad)
	if not entidad then entidad = Entidad end

	if entidad and entidad.claims and entidad.claims[idPropiedad] then
		if not opciones then
			opciones = {['linkback']='sí'}
		end
		
		opciones['idioma'] = 'es'

		local ValorPosicional = 1
		if type(opciones['valor_posicional']) == 'number' then ValorPosicional = opciones['valor_posicional'] end
		
		local ValorPosicionalCalif = 1
		if type(opciones['valor_posicional_calif']) == 'number' then ValorPosicional = opciones['valor_posicional_calif'] end

		local Calificador = opciones['calificador']

		local Obj = (function()
			local Obj = (function()
				local Obj = elementoTabla(entidad, 'claims', idPropiedad)
				if type(opciones['valor_posicional']) == 'number' then return elementoTabla(Obj, opciones['valor_posicional']) end
				if opciones['valor_posicional'] == 'último' then return elementoTabla(Obj, #Obj) end
			end)()

			if Calificador then
				Obj = (function()
					local Obj = elementoTabla(Obj, 'qualifiers', Calificador)
					if type(opciones['valor_posicional_calif']) == 'number' then return elementoTabla(Obj, opciones['valor_posicional_calif']) end
					if opciones['valor_posicional_calif'] == 'último' then return elementoTabla(Obj, #Obj) end
				end)()
			end
		end)()

		Tipo	= elementoTabla(Obj, 'datavalue', 'type')
		
		if opciones['formato'] == 'archivo' then
			if not opciones['uno'] then opciones['uno'] = 'último' end
			opciones['ordenar'] = 'por fecha'
			if Calificador then return elementoTabla(Obj, 'datavalue', 'value') end
		end

		-- Devolver el ID de la entidad, para propiedades de entidad
		if opciones['formato'] == 'entidadID' then
			return elementoTabla(Obj, 'datavalue', 'value', 'id')
		end

		if opciones['formato'] == 'cadena' then
			opciones['linkback'] = 'no'
			if Tipo == 'string' then
				return elementoTabla(Obj, 'datavalue', 'value')
			end
		end

		if opciones['formato'] == 'número' then
			if Tipo == 'quantity' then
				return formatoNumero(elementoTabla(Obj, 'datavalue', 'value', 'amount'))
			end
		end

		-- Valores cuya unidad deba ir a la derecha, separada de un espacio
		if opciones['formato'] == 'unidad' then
			if elementoTabla(entidad, 'claims', idPropiedad, 2, 'mainsnak', 'datavalue') then
				return formatoNumero(elementoTabla(entidad, 'claims', idPropiedad, 1, 'mainsnak', 'datavalue', 'value', 'amount')) .. '&nbsp;-&nbsp;' .. numeroUnidad(elementoTabla(entidad, 'claims', idPropiedad, 2, 'mainsnak', 'datavalue'), opciones)
			else
				return numeroUnidad(elementoTabla(entidad, 'claims', idPropiedad, 1, 'mainsnak', 'datavalue'), opciones)
			end
		end

		-- Invocar a la función fallback si no se cumplen las condiciones anteriores
		opciones.entityId  = entidad.id
		opciones.propiedad = idPropiedad
		return ModuloWikidata.getPropiedad(opciones, entidad.claims[idPropiedad])
	end
end

function seccionDesplegable(frame, titulo, lista, expandir)
	if not lista then
		return
	end
	
	local expandir = desplegar or ''
	if expandir then expandir = 'sí' end
	
	return frame:preprocess('{{Sección desplegable|estilotitulo=text-align:left;background-color:#eeeeff;padding:2px 0 2px 0|estilodatos=text-align:left|título=' .. titulo .. '|datos='.. lista .. '|expandir=' .. expandir .. '}}')
end

-- Quick-and-dirty
function enlazar(frame, enlace)
	if frame:preprocess('{{#ifexist:' .. enlace .. '|1}}') == '1' then enlace = '[[' .. enlace .. ']]' end
	return enlace
end

return p