Diferencia entre revisiones de «Módulo:Ficha de videojuego»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
Cambio en cómo se muestra la etiqueta respecto al texto en la fecha de lanzamiento
Más comprobaciones necesarias (que por lo visto no se hacía ninguna)
(No se muestra una edición intermedia del mismo usuario)
Línea 78: Línea 78:
-- Software
-- Software
local Motor = argumento['motor'] or propiedad('P408') or ''
local Motor = argumento['motor'] or propiedad('P408') or ''
local Version = (function()
local Version
local Ver = argumento['versión'] or argumento['version'] or propiedad('P348', {['calificador'] = 'P577', ['uno'] = 'último', ['ordenar'] = 'por fecha'})
local Ver = argumento['versión'] or argumento['version'] or propiedad('P348', {['calificador'] = 'P577', ['uno'] = 'último', ['ordenar'] = 'por fecha'})
local VerFecha = argumento['versión fecha'] or argumento['version fecha']
local VerFecha = argumento['versión fecha'] or argumento['version fecha']
if Ver and VerFecha then return Ver .. '<small>(' .. VerFecha .. ')</small>' end
if Ver then
if VerFecha then
Version = Ver .. '<small>(' .. VerFecha .. ')</small>'
else
return Ver
Version = Ver
end)() or ''
end
local VersionDesa = (function()
else
local Version = argumento['versión desarrollo'] or argumento['versión desarrollo']
Version = ''
local VersionFecha = argumento['versión desarrollo fecha'] or argumento['version desarrollo fecha']
end
if Version and VersionFecha then return Version .. '<small>(' .. VersionFecha .. ')</small>' end
local VersionDesa
return Version
Ver = argumento['versión desarrollo'] or argumento['versión desarrollo']
end)() or ''
VerFecha = argumento['versión desarrollo fecha'] or argumento['version desarrollo fecha']
if Ver then
if VerFecha then
VersionDesa = Ver .. '<small>(' .. VerFecha .. ')</small>'
else
VersionDesa = Ver
end
else
VersionDesa = ''
end
local Plataformas = argumento['plataforma'] or argumento['plataformas'] or propiedad('P400') or ''
local Plataformas = argumento['plataforma'] or argumento['plataformas'] or propiedad('P400') or ''
Línea 289: Línea 301:
if argumento[1] and argumento[2] and argumento[3] then
if argumento[1] and argumento[2] and argumento[3] then
local Valor = '<li style="display:table-row"><span style="display:table-cell;font-size:70%;vertical-align:top">[[' .. argumento[1] .. '|' .. argumento[2] .. ']]</span><span style="display:table-cell">' .. argumento[3] .. '</span></li>'
local Valor = '<li style="display:table-row"><span style="display:table-cell;font-size:70%;vertical-align:top">[[' .. argumento[1] .. '|' .. argumento[2] .. ']]</span><span style="display:table-cell">' .. argumento[3] .. '</span></li>'
local Categoria = (function()
local Categoria
if argumento[4] then return '[[Categoría:Wikipedia:Artículos que transcluyen Plantilla:Lanzamientovj usando una sintaxis incorrecta]]' end
if argumento[4] then
Categoria = '[[Categoría:Wikipedia:Artículos que transcluyen Plantilla:Lanzamientovj usando una sintaxis incorrecta]]'
else
return '[[Categoría:Wikipedia:Artículos que transcluyen Plantilla:Lanzamientovj usando la sintaxis de parámetros posicionales]]'
Categoria = '[[Categoría:Wikipedia:Artículos que transcluyen Plantilla:Lanzamientovj usando la sintaxis de parámetros posicionales]]'
end)()
end
table.insert(Valores, Valor..Categoria)
table.insert(Valores, Valor..Categoria)


Línea 304: Línea 318:
else
else
for k, v in pairs(LanzamientoDatos) do
for k, v in pairs(LanzamientoDatos) do
local Valor =
local Valor
for kk, vv in pairs(v[2]) do
(function()
if argumento[vv] then
for kk, vv in pairs(v[2]) do
if argumento[vv] then return argumento[vv] end
Valor = argumento[vv]
break
end
end
if not Valor then
for kk, vv in pairs((v[3] or {})) do
if argumento[vv] then
Valor = argumento[vv]
end
end
end)()
end
or
end
(function()
for kk, vv in pairs((v[3] or {})) do
if argumento[vv] then return argumento[vv] end
end
end)()
if Valor then
if Valor then
if v[1] == 'DESC' then
Etiqueta= (function()
if v[1] == 'DESC' then return '<abbr title="Fecha desconocida">?</abbr>' end
Etiqueta = '<abbr title="Fecha desconocida">?</abbr>'
if v[1] == 'WW' then return '<abbr title="Lanzamiento mundial">WW</abbr>' end
elseif v[1] == 'WW' then
Etiqueta = '<abbr title="Lanzamiento mundial">WW</abbr>'
if v[4] then return '[[' .. v[4] .. '|' .. v[1] ..']]' end
elseif v[4] then
Etiqueta = '[[' .. v[4] .. '|' .. v[1] ..']]'
return v[1]
elseif v[1] then
Etiqueta = v[1]
end)()
else
table.insert(Valores, '<li style="display:table-row"><span style="display:table-cell;font-size:70%;vertical-align:top">' .. Etiqueta .. '</span><span style="display:table-cell">'.. Valor ..'</span></li>')
Etiqueta = nil
end
if Etiqueta then
table.insert(Valores, '<li style="display:table-row"><span style="display:table-cell;font-size:70%;vertical-align:top">' .. Etiqueta .. '</span><span style="display:table-cell">'.. Valor ..'</span></li>')
end
end
end
end
end
Línea 339: Línea 362:
function Lanzamientovj()
function Lanzamientovj()
local Valores = {}
local Valores = {}
if not Entidad then return end
local Obj = elementoTabla(Entidad, 'claims', 'P577')
local Obj = elementoTabla(Entidad, 'claims', 'P577')
if Obj then
if Obj then
for k, v in pairs(Obj) do
for k, v in pairs(Obj) do
Valor = FormatoFechaHora(elementoTabla(v, 'mainsnak', 'datavalue', 'value'), {['enlace']='no'})
local Valor = FormatoFechaHora(elementoTabla(v, 'mainsnak', 'datavalue', 'value'), {['enlace']='no'})
Region = elementoTabla(v, 'qualifiers', 'P291', 1, 'datavalue', 'value', 'id')
local Region = elementoTabla(v, 'qualifiers', 'P291', 1, 'datavalue', 'value', 'id')
local Etiqueta
Etiqueta= (function()
if Region then
if Region then
for kk, vv in pairs(LanzamientoDatos) do
for kk, vv in pairs(LanzamientoDatos) do
if (Region == vv[3][1] or Region == vv[3][2] or Region == vv[3][3]) then return '[[' .. vv[4] .. '|' .. vv[1] ..']]' end
if vv and vv[3] and (Region == vv[3][1] or Region == vv[3][2] or Region == vv[3][3]) then
if vv[4] and vv[1] then
Etiqueta = '[[' .. vv[4] .. '|' .. vv[1] ..']]'
elseif vv[1] then
Etiqueta = vv[1]
end
end
end
end
end
else
return '<abbr title="Lanzamiento mundial">WW</abbr>'
Etiqueta = '<abbr title="Lanzamiento mundial">WW</abbr>'
end)() or ''
end
table.insert(Valores, '<li style="display:table-row"><span style="display:table-cell;font-size:70%;vertical-align:top">' .. Etiqueta .. '</span><span style="display:table-cell">'.. Valor ..'</span></li>')
if Etiqueta and Valor then
table.insert(Valores, '<li style="display:table-row"><span style="display:table-cell;font-size:70%;vertical-align:top">' .. Etiqueta .. '</span><span style="display:table-cell">'.. Valor ..'</span></li>')
end
end
end
end
end
Línea 401: Línea 432:
local Calificador = opciones['calificador']
local Calificador = opciones['calificador']


local Obj = (function()
local Obj
local Obj = (function()
local Obj2
local Obj = elementoTabla(entidad, 'claims', idPropiedad)
local Obj3 = elementoTabla(entidad, 'claims', idPropiedad)
if type(ValorPosicional) == 'number' then return elementoTabla(Obj, ValorPosicional) end
if type(ValorPosicional) == 'number' then Obj2 = elementoTabla(Obj3, ValorPosicional) end
if ValorPosicional == 'último' then return elementoTabla(Obj, #Obj) end
if ValorPosicional == 'último' then Obj2 = elementoTabla(Obj3, #Obj3) end
end)()


if Calificador then
if Calificador then
local Obj3 = elementoTabla(Obj2, 'qualifiers', Calificador)
Obj = (function()
local Obj = elementoTabla(Obj, 'qualifiers', Calificador)
if type(ValorPosicionalCalif) == 'number' then Obj2 = elementoTabla(Obj3, ValorPosicionalCalif) end
if type(ValorPosicionalCalif) == 'number' then return elementoTabla(Obj, ValorPosicionalCalif) end
if ValorPosicionalCalif == 'último' then Obj2 = elementoTabla(Obj3, #Obj3) end
end
if ValorPosicionalCalif == 'último' then return elementoTabla(Obj, #Obj) end
Obj = elementoTabla(Obj2, 'mainsnak')
end)()
end
return elementoTabla(Obj, 'mainsnak')
end)()


Tipo = elementoTabla(Obj, 'datavalue', 'type')
Tipo = elementoTabla(Obj, 'datavalue', 'type')

Revisión del 15:13 2 jun 2023

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]


Esta documentación explica el funcionamiento del módulo en un contexto técnico. Para instrucciones sobre el uso de la plantilla asociada, véase la documentación de la misma en {{Ficha de videojuego}}.

Este módulo implementa la plantilla {{Ficha de videojuego}}, y versiones experimentales de {{Clasificaciónvj}} y {{Lanzamientovj}} en {{Clasificaciónvj/zona de pruebas}} y {{Lanzamientovj/zona de pruebas}} respectivamente. El propósito de unificar las tres plantillas en un solo módulo es optimización de recursos al evitrar repetir llamadas a Wikibase para una misma entidad.

Funciones

  • p.clasificacionvj(), función pública para obtener la clasificación de contenido, para ser invocada desde {{Clasificaciónvj/zona de pruebas}} usando datos locales, la cual a su vez llama a Clasificacionvj()
  • Clasificacionvj(), función privada para obtener la clasificación de contenido, para ser llamada dentro del módulo usando Wikidata, o desde la función pública.
  • p.lanzamientovj(), función pública para obtener las fechas de lanzamiento, para ser invocada desde {{Lanzamientovj/zona de pruebas}}, la cual a su vez llama a Lanzamientovj()
  • Lanzamientovj(), función privada para obtener las fechas de lanzamiento, para ser llamada dentro del módulo usando Wikidata, o desde la función pública.
  • obtenerEnlaces(), función para generar enlaces externos.
  • propiedad(), función envoltura para Módulo:Tablas.elemento(), para obtener el valor de la propiedades de clasificaciones.

Agregar clasificaciones de contenido

Véase la documentación de Módulo:Clasificaciónvj/datos.


Esta documentación está transcluida desde Módulo:Ficha de videojuego/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 = {}

-- Cargar módulos
local ModuloWikidata			= require('Módulo:Wikidata')
local ModuloFormatos			= require('Módulo:Wikidata/Formatos')
local ModuloPaginas				= require('Módulo:Páginas')

-- Cargar tablas de datos
local ClasificacionDatos		= mw.loadData('Módulo:Clasificaciónvj/datos')
local LanzamientoDatos			= mw.loadData('Módulo:Lanzamientovj/datos')

-- :: Definir funciones desde módulos
local elementoTabla				= require('Módulo:Tablas').elemento
local FormatoFechaHora			= require('Módulo:Wikidata/Fecha').FormateaFechaHora
local obtenerArgumentosConValor = require('Módulo:Argumentos').obtenerArgumentosConValor
local enlazar					= require('Módulo:URL').enlazar
local formatoNumero				= ModuloFormatos.formatoNumero2
local numeroUnidad				= ModuloFormatos.formatoUnidad2

-- :: Definir variables globales
local Entidad, InstanciaDeID

local argumentos	-- Tabla de argumentos con los que se llama a la función 
local argumento={}	-- Argumentos eliminando los argumentos sin datos

-- :: Estilos por defecto
local EstiloEtiqueta	= 'width:30%;background-color:#EEF'
local EstiloDatos		= 'width:70%;'
local EstiloTitulo		= 'font-weight:bold; background-color:#CCF'

local TipoCabecera		= 'videojuego'

function p.Ficha(frame)
	-- :: Inicializador
	ModuloWikidata:setFrame(frame)
	argumento 		= obtenerArgumentosConValor(frame)
	Entidad			= mw.wikibase.getEntity(argumento.id)
	InstanciaDeID	= propiedad('P31', {['formato'] = 'entidadID'})
	
	-- :: Cabecera
	local Titulo		= argumento['título'] or argumento['nombre'] or ModuloPaginas.nombrePagina({desambiguar='sí'})
	local TituloOrig	= argumento['título original'] or argumento['título_original'] or propiedad('P1476') or ''
	local Eslogan		= argumento['eslogan'] or propiedad('P6291') or ''
	
	--if InstanciaDeID == 'Q653928' then TipoCabecera = 'pinball' end
	--if InstanciaDeID == 'Q192851' then TipoCabecera = 'arcade' end

	local Logo			= argumento['logo'] or ModuloWikidata.obtenerImagenWikidata(Entidad, 'P154') or ''

	local Captura		= argumento['imagen'] or argumento['captura'] or ''
	local Pie
	if not Captura == '' then
		Pie				= argumento['pie'] or ''
	else
		Captura, Pie	= ModuloWikidata.obtenerImagenWikidata(Entidad, 'P18')
	end

	-- General
	local Genero		= argumento['género'] or argumento['genero'] or propiedad('P136') or ''
	local GeneroInic	= argumento['género inicial'] or argumento['género_inicial'] or ''
	local Idiomas		= argumento['idioma'] or argumento['idiomas'] or propiedad('P407') or ''
	local Fabricante	= argumento['fabricante'] or propiedad('P176') or ''
	
	local Desarrollador	= argumento['desarrollador'] or argumento['desarrolladora'] or propiedad('P178') or ''
	local Distribuidor	= argumento['distribuidor'] or argumento['distribuidora'] or propiedad('P123') or ''
	local Editorial		= argumento['editorial'] or propiedad('P750') or ''
	local Creador		= argumento['creador'] or propiedad('P50') or ''
	local Disenador		= argumento['diseñador'] or propiedad('P287') or ''
	local Director		= argumento['director'] or propiedad('P57') or ''
	local Productor		= argumento['productor'] or propiedad('P162') or ''
	local DirectorSon	= argumento['director sonido'] or argumento['director_sonido'] or propiedad('Q986888') or ''
	local Programador	= argumento['programador'] or propiedad('P943') or ''
	local Artista		= argumento['artista'] or ''
	local Escritor		= argumento['escritor'] or propiedad('P58') or ''
	local Compositor	= argumento['compositor'] or propiedad('P86') or ''
	local Modos			= argumento['modo'] or argumento['modos'] or propiedad('P404') or ''

	-- Software
	local Motor			= argumento['motor'] or propiedad('P408') or ''
	local Version
	local Ver           = argumento['versión'] or argumento['version'] or propiedad('P348', {['calificador'] = 'P577', ['uno'] = 'último', ['ordenar'] = 'por fecha'})
    local VerFecha      = argumento['versión fecha'] or argumento['version fecha']
    if Ver then
    	if VerFecha then
    		Version = Ver .. '<small>(' .. VerFecha .. ')</small>'
    	else
			Version = Ver
    	end
    else
    	Version = ''
	end
	local VersionDesa
	Ver					= argumento['versión desarrollo'] or argumento['versión desarrollo']
	VerFecha			= argumento['versión desarrollo fecha'] or argumento['version desarrollo fecha']
    if Ver then
    	if VerFecha then
    		VersionDesa = Ver .. '<small>(' .. VerFecha .. ')</small>'
    	else
			VersionDesa = Ver
    	end
    else
    	VersionDesa = ''
	end
	local Plataformas	= argumento['plataforma'] or argumento['plataformas'] or propiedad('P400') or ''
	
	local PlatafInic	= argumento['plataforma inicial'] or ''
	local Requisitos	= argumento['requisitos'] or ''
	local Licencias		= argumento['licencia'] or argumento['licencias'] or propiedad('P275') or ''
	-- :: Hardware
	local Formato		= argumento['formato'] or propiedad('P437') or ''
	local Mueble		= argumento['mueble'] or ''
	local Hardware		= argumento['hardware'] or ''
	local CPU			= argumento['cpu'] or propiedad('P880') or ''
	local GPU			= argumento['gpu'] or propiedad('P2560') or propiedad('P6948') or ''
	local Audio			= argumento['audio'] or propiedad('P7501') or ''
	local Pantalla		= argumento['pantalla'] or propiedad('P5307') or ''
	local PantallaHardware, PantallaPinball
	if InstanciaDeID == 'Q653928' then
		PantallaPinball = Pantalla
	else
		PantallaHardware = Pantalla
	end
	local Entrada		= argumento['entradas'] or propiedad('P479') or ''
	
	-- :: Mesa de pinball
	local Tecnologia		= argumento['tecnologia'] or ''
	local Lanzador			= argumento['lanzador'] or ''
	local Flippers			= argumento['flippers'] or ''
	local Anchura			= argumento['anchura'] or ''
	local Rampas			= argumento['rampas'] or ''
	local Bucles			= argumento['bucles'] or ''
	local Dianas			= argumento['dianas']
	local DianasAbat		= argumento['dianas abatibles'] or argumento['dianas_abatibles'] or ''
	local Bumpers			= argumento['bumpers'] or ''
	local Slingshots		= argumento['slingshots'] or ''
	local Accesorios		= argumento['accesorios'] or ''
	local UnidadesProducidas= argumento['unidades producidas'] or argumento['unidades_producidas'] or propiedad('P1092', {['formato'] = 'número'}) or ''
	local UnidadesVendidas	= argumento['unidades vendidas'] or argumento['unidades_vendidas'] or propiedad('P2664', {['formato'] = 'número'}) or ''

	-- :: Desarrollo
	local Lanzamiento	= argumento['lanzamiento']  or Lanzamientovj() or ''
	local ZonaPruebas	= argumento['location test'] or ''
	local Estado		= argumento['estado actual'] or ''
	local MotivoEstado	= argumento['motivo estado'] or ''

	local Serie			= argumento['serie'] or propiedad('P179') or 'Serie'
	local Anterior		= argumento['anterior'] or propiedad('P155') or ''
	local Posterior		= argumento['posterior'] or propiedad('P156') or ''
	
	local Primero		= argumento['primero'] or ''
	local PrimeroFecha	= argumento['primero fecha'] or argumento['primero_fecha'] or ''
	if Primero ~= '' and PrimeroFecha ~= '' then Primero = Primero .. ' (' .. PrimeroFecha .. ')' end

	local Ultimo		= argumento['último'] or ''
	local UltimoFecha	= argumento['último fecha'] or argumento['último_fecha'] or ''
	if Ultimo ~= '' and UltimoFecha ~= '' then Ultimo = Ultimo .. ' (' .. UltimoFecha .. ')' end
	
	local Derivadas		= argumento['derivada'] or propiedad('P4969') or ''
	local Expansiones	= argumento['expansión'] or argumento['contenido descargable'] or argumento['dlc'] or ''
	
	local Clasificaciones = argumento['clasificación'] or Clasificacionvj()
	
	local SitiosWeb		= obtenerEnlaces()
	
	local TablaFicha = {
		titulo  			= Titulo,
		subtitulo			= Eslogan,
		tipocabecera		= TipoCabecera,
		clasetitulo			= ClaseTitulo,
		estilotitulo		= EstiloTitulo,
		estiloseccion		= EstiloTitulo,
		estiloetiqueta		= EstiloEtiqueta,
		estilodatos			= EstiloDatos,
		imagen				= Logo,
		['tamañoimagen']	= '250x250px',
		imagen2				= Captura,
		['tamañoimagen2']	= '250x250px',
		pie2				= Pie,
		estilopie			= 'font-size:88%',
		{tipo='sección',
			titulo = 'Información general',
			{'Creador', Creador},
			{'Fabricante', Fabricante},
			{'Desarrollador', Desarrollador},
			{'Distribuidor', (Distribuidor or Editorial)},
			{'Diseñador', Disenador},
			{'Director', Director},
			{'Productor', Productor},
			{'Director de sonido', DirectorSon},
			{'Programador', Programador},
			{'Artista', Artista},
			{'Escritor', Escritor},
			{'Compositor', Compositor},
		},
		{tipo='sección',
			titulo = 'Datos del juego',
			{'Género', Genero},
			{'Género Inicial', GeneroInic},
			{'Primer videojuego', Primero},
			{'Ultimo videojuego', Ultimo},
			{'Idiomas', Idiomas},
			{'Obras derivadas', Derivadas},
			{'Modos de juego', Modos},
			{'Clasificaciones', Clasificaciones},
		},
		{tipo='sección',
			titulo = 'Datos del software',
			{'Motor', Motor},
			{'Versión actual', Version},
			{'Version en desarrollo', VersionDesa},
			{'Plataformas', Plataformas},
			{'Plataforma inicial', PlatafInic},
			Requisitos,
			{'Licencias', Licencias},
		},
		{tipo='sección',
				titulo = 'Datos del la mesa',
				{'Tecnología', Tecnologia},
				{'Tipo de lanzador', Lanzador},
				{'Tipo de pantalla', PantallaPinball},
				{'Anchura', Anchura},
				{"''Flippers''", Flippers},
				{'Rampas', Rampas},
				{'Bucles', Bucles},
				{'Dianas', Dianas},
				{'Bumpers', Bumpers},
				{'Accesorios', Accesorios},
				{'Unidades producidas', UnidadesProducidas},
				{'Unidades comercializadas', UnidadesVendidas},
		},
		{tipo='sección',
			titulo = 'Datos del hardware',
			{'Formato', Formato},
			{'Mueble', Mueble},
			{'Hardware', Hardware},
			{'CPU', CPU},
			{'Video', GPU},
			{'Pantalla', PantallaHardware},
			{'Audio', Audio},
			{'Dispositivos de entrada', Entrada},
		},
		{tipo='sección',
			titulo = 'Desarrollo',
			{'Lanzamiento', Lanzamiento},
			{'Zona de pruebas', ZonaPruebas},
			{'Estado de desarrollo', Estado},
			{'Expansiones', Expansiones},
		},
		{tipo='sección',
			titulo = Serie,
			{tipo='sucesión',
				anterior = Anterior,
				actual = Titulo,
				siguiente = Posterior,
			},
		},
		{tipo='sección',
			titulo = 'Enlaces',
			--estilodatos	= 'text-align:left',
			{'', SitiosWeb}
		},
	}
	
	return require('Módulo:Ficha').infobox(TablaFicha)
end

-- Función p.clasificacionvj() pública para ser llamada desde la plantilla {{clasificaciónvj/zona de pruebas}}
function p.clasificacionvj(frame)
	ModuloWikidata:setFrame(frame)
	argumento = obtenerArgumentosConValor(frame)
	if argumento.id then Entidad = mw.wikibase.getEntity(argumento.id) end
	return Clasificacionvj()
end

-- Función Clasificacionvj() privada para ser incluída llamada desde este módulo
function Clasificacionvj()
	local Salida	= {}
	local apertura	= '<div style="display:table-row">'
	local cierre	= '</div>'
	for k, v in pairs(ClasificacionDatos) do
		local Clasificador = argumento[v[1]] or propiedad(v[3], {['formato'] = 'entidadID'})
		if Clasificador then
			if v[4][Clasificador] then
				table.insert(Salida, '<div style="display:table-row">')
				table.insert(Salida, '<div style="display:table-cell;font-weight:bold;padding-right:0.2em">[[' .. v[2] .. '|' .. v[1] .. ']]</div>')
				table.insert(Salida, '<div style="display:table-cell;">[[Archivo:' .. v[4][Clasificador][1] .. '|' .. v[4][Clasificador][2] .. '|25x30px|link=]]</div>')
				table.insert(Salida, '</div>')
			end
		end
	end
	return table.concat(Salida)
end

-- Función p.lanzamientovj() pública para ser llamada desde la plantilla {{Lanzamientovj/zona de pruebas}}
function p.lanzamientovj(frame)
	argumento = obtenerArgumentosConValor(frame)
	
	local Valores = {}
	
	-- :: Sintraxis alternativa (parámetros posicionales, tres)
	if argumento[1] and argumento[2] and argumento[3] then
		local Valor		= '<li style="display:table-row"><span style="display:table-cell;font-size:70%;vertical-align:top">[[' .. argumento[1] .. '|' .. argumento[2] .. ']]</span><span style="display:table-cell">' .. argumento[3] .. '</span></li>'
		local Categoria
		if argumento[4] then
			Categoria = '[[Categoría:Wikipedia:Artículos que transcluyen Plantilla:Lanzamientovj usando una sintaxis incorrecta]]'
		else
			Categoria = '[[Categoría:Wikipedia:Artículos que transcluyen Plantilla:Lanzamientovj usando la sintaxis de parámetros posicionales]]'
		end
		table.insert(Valores, Valor..Categoria)

	-- :: Sintraxis alternativa (parámetros posicionales, dos)
	elseif argumento[1] and argumento[2] then
		local Valor		= '<li style="display:table-row"><span style="display:table-cell;font-size:70%;vertical-align:top">' .. argumento[1] .. '</span><span style="display:table-cell">' .. argumento[2] .. '</span></li>'
		local Categoria	= '[[Categoría:Wikipedia:Artículos que transcluyen Plantilla:Lanzamientovj usando la sintaxis de parámetros posicionales]]'
		table.insert(Valores, Valor..Categoria)

	-- :: Sintaxis estándar (parámetros nombrados por código de región)
	else
		for k, v in pairs(LanzamientoDatos) do
			local Valor
			for kk, vv in pairs(v[2]) do
				if argumento[vv] then
					Valor = argumento[vv]
					break
				end
			end
			if not Valor then
				for kk, vv in pairs((v[3] or {})) do
					if argumento[vv] then
						Valor = argumento[vv]
					end
				end
			end
	
			if Valor then
				if v[1] == 'DESC' then
					Etiqueta = '<abbr title="Fecha desconocida">?</abbr>'
				elseif v[1] == 'WW'	then
					Etiqueta = '<abbr title="Lanzamiento mundial">WW</abbr>'
				elseif v[4] then
					Etiqueta = '[[' .. v[4] .. '|' ..  v[1] ..']]'
				elseif v[1] then
					Etiqueta = v[1]
				else
					Etiqueta = nil
				end
				if Etiqueta then
					table.insert(Valores, '<li style="display:table-row"><span style="display:table-cell;font-size:70%;vertical-align:top">' .. Etiqueta .. '</span><span style="display:table-cell">'.. Valor ..'</span></li>')
				end
			end
		end
	end
	
	if #Valores > 0 then
		local Apertura	= '<ul style="list-style: none; line-height: inherit; margin: 0px;">'
		local Cierre	= '</ul>'
		return Apertura..table.concat(Valores)..Cierre
	end
end

-- Función privada para ser llamada desde este módulo (solo extraer datos desde Wikidata)
function Lanzamientovj()
	local Valores = {}
	if not Entidad then return end
	local Obj = elementoTabla(Entidad, 'claims', 'P577')
	if Obj then
		for k, v in pairs(Obj) do
			local Valor	= FormatoFechaHora(elementoTabla(v, 'mainsnak', 'datavalue', 'value'), {['enlace']='no'})
			local Region	= elementoTabla(v, 'qualifiers', 'P291', 1, 'datavalue', 'value', 'id')
			local Etiqueta
			if Region then
				for kk, vv in pairs(LanzamientoDatos) do
					if vv and vv[3] and (Region == vv[3][1] or Region == vv[3][2] or Region == vv[3][3]) then
						if vv[4] and vv[1] then
							Etiqueta = '[[' .. vv[4] .. '|' ..  vv[1] ..']]'
						elseif vv[1] then
							Etiqueta = vv[1]
						end
					end
				end
			else
				Etiqueta = '<abbr title="Lanzamiento mundial">WW</abbr>'
			end
			if Etiqueta and Valor then
				table.insert(Valores, '<li style="display:table-row"><span style="display:table-cell;font-size:70%;vertical-align:top">' .. Etiqueta .. '</span><span style="display:table-cell">'.. Valor ..'</span></li>')
			end
		end
	end
	
	if #Valores > 0 then
		local Apertura	= '<ul style="list-style: none; line-height: inherit; margin: 0px;">'
		local Cierre	= '</ul>'
		return Apertura..table.concat(Valores)..Cierre
	end

end

-- :: Función para obtener y formatear enlaces externos
function obtenerEnlaces()
	local SitiosWeb = {}
	
	local SitioWeb	= argumento['sitio_web'] or argumento['sitio web'] or argumento['web'] or propiedad('P856',{['enlace']='no', uno='sí'})
	local Blog		= argumento['blog_oficial'] or propiedad('P1581',{['enlace']='no', uno='sí'})
	local Repo		= argumento['repositorio'] or propiedad('P1324', {['enlace']='no', uno='sí'})
	local SegErrores= argumento['seguimiento_de_errores'] or propiedad('P1401', {['enlace']='no', uno='sí'})

	if SitioWeb then table.insert(SitiosWeb, '<div>' .. enlazar(SitioWeb, 'Sitio web oficial') .. '</div>') end
	if Blog then table.insert(SitiosWeb, '<div>' .. enlazar(Blog, 'Blog') .. '</div>') end
	if Repo then table.insert(SitiosWeb, '<div>' .. enlazar(Repo, 'Repositorio de código') .. '</div>') end
	if SegErrores then table.insert(SitiosWeb, '<div>' .. enlazar(SegErrores, 'Seguimiento de errores') .. '</div>') end

	return table.concat(SitiosWeb, '\n')
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
		local Obj2
		local Obj3 = elementoTabla(entidad, 'claims', idPropiedad)
		if type(ValorPosicional) == 'number' then Obj2 = elementoTabla(Obj3, ValorPosicional) end
		if ValorPosicional == 'último' then Obj2 = elementoTabla(Obj3, #Obj3) end

		if Calificador then
			local Obj3 = elementoTabla(Obj2, 'qualifiers', Calificador)
			if type(ValorPosicionalCalif) == 'number' then Obj2 = elementoTabla(Obj3, ValorPosicionalCalif) end
			if ValorPosicionalCalif == 'último' then Obj2 = elementoTabla(Obj3, #Obj3) end
		end
		Obj = elementoTabla(Obj2, 'mainsnak')

		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

return p