Módulu:Ficha de hardware

La documentación pa esti módulu pue crease en Módulu:Ficha de hardware/usu

local p = {}
local ModuloArgumentos	= require('Módulu:Argumentos')
local ModuloFicha		= require('Módulu:Ficha')
local ModuloWikidata	= require('Módulu:Wikidata')
local ModuloPaginas		= require('Módulu:Páxines')
local elementoTabla		= require('Módulu:Tables').elemento
local numeroUnidad		= require('Módulu:Wikidata/Units').numeroUnidad
local formatoNumero		= require('Módulu:Wikidata/Formatos').formatoNumero2
local Entidades			= mw.loadData('Módulu:Ficha de hardware/datos')
local argumentos
local Entidad
local InstanciaDe
local SubclaseDe

function p.Ficha(frame)
	argumentos	= ModuloArgumentos.obtenerArgumentosConValor(frame)
	Entidad		= mw.wikibase.getEntity(argumentos.id) or {}
	
	--InstanciaDe = elementoTabla(Entidad, 'claims', 'P31', 1, 'mainsnak', 'datavalue', 'value', 'id')
	InstanciaDe	= propiedad('P31', {['formato'] = 'entidadID'})
	SubclaseDe	= propiedad('P279', {['formato'] = 'entidadID'})
   
	local Titulo = argumentos['nombre'] or ModuloWikidata.obtenerEtiquetaWikidata() or ModuloPaginas.nombrePagina({desambiguar='sí'})
	local ClaseTitulo = Entidades[SubclaseDe] or Entidades[InstanciaDe] or 'hardware'

	local NombreCompleto = argumentos['nombre completo'] or ''
	local Serie
	if argumentos['serie'] then
		Serie = 'Parte de ' .. argumentos['serie']
	else
		Serie = ''
	end
	
	-- :: Imagen
	local Imagen = argumentos['imagen']
	local Pie
	if Imagen then
		Pie = argumentos['pie de imagen']
	else
		Imagen, Pie = ModuloWikidata.obtenerImagenWikidata('P18')
	end
	
	local Logo = argumentos['logo'] or ModuloWikidata.obtenerImagenWikidata('P154')

	local Imagen2 = argumentos['imagen2'] or ''
	local Pie2 = argumentos['pie de imagen2'] or ''
	local TamanoLogo = argumentos['tamaño de logo'] or '250px'
	local Tamano = argumentos['tamaño'] or argumentos['tamaño de imagen'] or  '250px'
	local Tamano2 = argumentos['tamaño de imagen2']

	-- :: General
	local Tipo = argumentos['tipo']  or propiedad('P31', {['lista'] = 'nobullet', ['linkback'] = 'sí'}) or '' -- Crear switch con varios tipos
	local Generacion = argumentos['generación'] or ''
	local Codigo = argumentos['código'] or propiedad('P1638',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local Creacion = argumentos['fecha de creación'] or propiedad('P571') or ''
	local Desarrollador = argumentos['desarrollador'] or propiedad('P178',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local Fabricantes = argumentos['fabricante'] or (function()
		local Fabricantes = {}
		for i = 1, 9, 1 do
			if argumentos['manuf' .. i] then table.insert(Fabricantes, argumentos['manuf' .. i]) end
		end
		if #Fabricantes > 0 then return listaHTML(Fabricantes) end
	end)() or propiedad('P176', {['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	
	-- :: Fechas y comisión
	local Ubicacion = argumentos['ubicación'] or propiedad('P276',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local Instalacion = argumentos['fecha de instalación'] or ''
	local Lanzamiento = argumentos['lanzamiento'] or propiedad('P5204') or ''
	local Descontinuacion = argumentos['descontinuación'] or argumentos['discontinuación'] or propiedad('P2669') or propiedad('P730') or ''
	local Costo = argumentos['costo'] or propiedad('P2130', {['formato'] = 'moneda'}) or ''
	local ComercializadoPor = argumentos['comercializadores'] or propiedad('P750',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local UnidadesProducidas = argumentos['unidades producidas'] or propiedad('P1092') or ''
	local UnidadesVendidas = argumentos['unidades vendidas'] or propiedad('P2664') or ''

	-- :: Medidas
	local Dimensiones = argumentos['dimensiones'] or ''
	local Peso = argumentos['peso'] or propiedad('P2067', {['formato'] = 'unidad'}) or ''
	local Volumen = argumentos['volumen'] or propiedad('P2234', {['formato'] = 'unidad'}) or ''
	local Superficie = argumentos['superficie'] or propiedad('P2046', {['formato'] = 'unidad'}) or ''
	local Nodos = argumentos['nodos'] or ''
	local Alimentacion = argumentos['alimentación'] or propiedad('P2791', {['formato'] = 'unidad'}) or ''

	-- :: Almacenamiento
	local Codificacion = argumentos['codificación'] or ''
	local Lectura = argumentos['lectura'] or ''
	local Escritura = argumentos['escritura']
	local LecturaEtiqueta = (function()
		if Escritura then return 'Mecanismo de lectura' end
		return 'Mecanismo de lectura/<wbr/>escritura'
	end)() or ''

	-- Computadoras
	local Plataforma	= argumentos['plataforma'] or propiedad('P400',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local Cliente		= argumentos['cliente'] or propiedad('P2360',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local Procesador	= argumentos['procesador'] or propiedad('P880',{['lista'] = 'nobullet', ['linkback']='sí', ['calificador']='P2149'}) or ''
	local Frecuencia	= argumentos['frecuencia'] or propiedad('P2144',{['formato'] = 'unidad'}) or ''
	local Memoria		= argumentos['memoria'] or propiedad('P2928',{['formato'] = 'unidad'}) or ''
	local Almacenamiento= argumentos['almacenamiento'] or propiedad('P3559', {['formato'] = 'unidad'}) or ''
	local TarjetaGrafica= argumentos['gpu'] or propiedad('P2560',{['lista'] = 'nobullet', ['linkback'] = 'sí', ['calificador'] = 'P2149'}) or ''
	local Coprocesador = argumentos['coprocesador'] or ''
	local SoC = argumentos['soc'] or ''
	local Bus = argumentos['bus'] or propiedad('P8107', {['lista'] = 'nobullet'})
	local BusTitulo = '[[Bus (informática)|Buses]]'
	local Conectividad = argumentos['conectividad'] or argumentos['puertos'] or propiedad('P2935',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local Video = argumentos['vídeo'] or propiedad('P6948',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local Audio = argumentos['audio'] or propiedad('P7501',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local Entrada = argumentos['entrada'] or argumentos['control'] or propiedad('P479',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local NumeroProcesadores = argumentos['número de procesadores'] or ''
	local Rendimiento = argumentos['rendimiento'] or propiedad('P7256', {['formato'] = 'unidad'}) or '' -- Hacer función para importar según RMAX y RPEAK y según fecha más reciente
	local ArquitecturaGPGPU = argumentos['arquitectura gpgpu'] or ''
	local ProcesadoresGPGPU = argumentos['procesadores gpgpu'] or ''
	local ProcesadorGPGPU = argumentos['procesador gpgpu'] or ''
	local MemoriaGPGPU = argumentos['memoria gpgpu'] or ''
	local MemoriaExterna = argumentos['memoria externa'] or ''
	
	-- :: Laptops
	local Bateria = argumentos['batería'] or propiedad('P618') or ''
	local Touchpad = argumentos['touchpad'] or ''
	local Bandas = argumentos['bandas'] or propiedad('P8097') or ''
	local TAE = argumentos['sar'] or propiedad('P7080') or ''
	local Soporte = argumentos['soporte'] or ''
	local Resolucion = argumentos['resolución'] or ''

	-- :: Cámaras
	local Camara = argumentos['cámara'] or ''
	local Videocamara = argumentos['videocámara'] or ''
	local VideocamaraTrasera = argumentos['videocamara trasera'] or ''
	local PantallaExterna = argumentos['pantalla externa'] or ''
	local Sensores = argumentos['sensores'] or ''
	local Lente = argumentos['lente'] or ''
	local Obturador = argumentos['obturador'] or ''
	local VelocidadObturacion = argumentos['velocidad de obturación'] or ''
	local Medicion = argumentos['medición'] or ''
	local ModosExposicion = argumentos['modos de exposición'] or ''
	local ModosMedicion = argumentos['modos de medición'] or ''
	local AreasEnfoque = argumentos['áreas de enfoque'] or ''
	local ModosEnfoque = argumentos['modos de enfoque'] or ''
	local DisparoContinuo = argumentos['disparo continuo'] or ''
	local Visor = argumentos['visor'] or ''
	local Sensibilidad = argumentos['sensibilidad'] or ''
	local Flash = argumentos['flash'] or ''
	local FabricanteExif = argumentos['fabricante exif'] or propiedad('P2010',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local ModeloExif = argumentos['modelo exif'] or propiedad('P2009',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local TipoMontura = argumentos['tipo de montura'] or ''
	local DiametroExterno = argumentos['diámetro externo'] or ''
	local DiametroInterno = argumentos['diámetro interno'] or ''
	local Pestanas = argumentos['pestañas'] or ''
	local Brida = argumentos['brida'] or ''

	-- :: Procesadores
	local FrecuenciaReloj = checkParParam('frecuencia mínima', 'frecuencia máxima', propiedad('P2149',{['formato'] = 'unidad'}))  -- Usar getUnit()
	local Zocalos = argumentos['zócalos'] or propiedad('P1041')
	local FSB = checkParParam('velocidad fsb mínima', 'velocidad fsb máxima', propiedad('P2150')) or argumentos['frecuencia fsb']  -- Usar getUnit()
	local HyperTransport = checkParParam('velocidad hypertransport mínima', 'velocidad hypertransport máxima', '')
	local QPI = checkParParam('velocidad qpi mínima', 'velocidad qpi máxima', '')
	local DMI = checkParParam('velocidad dmi mínima', 'velocidad dmi máxima', '')
	local MOSFET = checkParParam('longitud mosfet mínima', 'longitud mosfet máxima', '')
	local ConjuntoInstrucciones = argumentos['arquitectura'] or propiedad('P1068',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local Microarquitectura = argumentos['microarquitectura'] or propiedad('P6889',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local CPUID = argumentos['cpuid'] or propiedad('P7289') or ''
	local NumNucleos = argumentos['número de núcleos'] or propiedad('P1141') or ''

	local L1 = argumentos['caché l1'] or (function()
		local Obj = obtenerValor(Entidad, 'P527', 'Q28972913')[1]
		if Obj then return numeroUnidad(elementoTabla(Obj, 'qualifiers', 'P2928', 1, 'datavalue')) end
	end)() or ''

	local L2 = argumentos['caché l2'] or (function()
		local Obj = obtenerValor(Entidad, 'P527', 'Q12635161')[1]
		if Obj then return numeroUnidad(elementoTabla(Obj, 'qualifiers', 'P2928', 1, 'datavalue')) end
	end)() or ''
	
	local L3 = argumentos['caché l3'] or (function()
		local Obj = obtenerValor(Entidad, 'P527', 'Q28972917')[1]
		if Obj then return numeroUnidad(elementoTabla(Obj, 'qualifiers', 'P2928', 1, 'datavalue')) end
	end)() or ''
	
	local L4 = argumentos['caché l4'] or (function()
		local Obj = obtenerValor(Entidad, 'P527', 'Q76683717')[1]
		if Obj then return numeroUnidad(elementoTabla(Obj, 'qualifiers', 'P2928', 1, 'datavalue')) end
	end)() or ''
	
	local TipoZocalo = argumentos['tipo de zócalo'] or propiedad('P1041', {['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local FactorForma = argumentos['factor de forma'] or ''
	local Contactos = argumentos['contactos'] or ''
	local ProtocoloFSB = argumentos['protocolo fsb'] or ''
	local Tension = argumentos['tensión'] or propiedad('P2436', {['formato'] = 'unidad'}) or ''

	-- :: Buses
	local AnchoBits = argumentos['ancho en bits'] or ''
	local NumeroDispositivos = argumentos['número de dispositivos'] or ''
	local VelocidadTransferencia = argumentos['velocidad de transferencia'] or propiedad('P6711',{['formato'] = 'unidad'}) or ''
	local TipoBus = (function()
		if argumentos['tipo de bus'] == 's' then return '[[Comunicación serie|Serie]]' end
		if argumentos['tipo de bus'] == 'p' then return '[[Comunicación paralela|Paralelo]]' end
	end)() or argumentos['tipo de bus'] or ''
	local ConexionCaliente = argumentos['conexión caliente'] or ''

	-- :: Software
	local InterfazExterna = argumentos['interfaz externa'] or ''
	local SistemaOperativo = argumentos['sistema operativo'] or propiedad('P306',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local Interfaz = argumentos['interfaz'] or ''
	local Java = argumentos['java'] or ''
	local Ringtones = argumentos['tonos de llamada'] or ''
	local Multimedia = argumentos['multimedia'] or ''
	local ServicioEnLinea = argumentos['servicio en línea'] or propiedad('P2361',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''
	local ProgramaMasVendido = argumentos['programa más vendido'] or argumentos['juego más vendido'] or argumentos['videojuego más vendido'] or ''
	local Root = argumentos['rooteado'] or ''
	local Bootloader = argumentos['bootloader'] or ''
	local PosicionTOP = argumentos['posición top500'] or ''
	local MejorTOP = argumentos['mejor top500'] or ''
	local ListasTOP = argumentos['listas top500'] or ''
	local EmpaquetadosTitulo, Empaquetados, NucleosTitulo, Nucleos, SeConectaTitulo, SeConecta1, SeConecta2, SeConecta3, ClasesTitulo, Clases, MarcasComercialesTitulo, MarcasComerciales
	if argumentos['pack1'] then
		EmpaquetadosTitulo = 'Empaquetados'
		Empaquetados = listaHTML({argumentos['pack1'] or '', argumentos['pack2'] or '', argumentos['pack3'] or '', argumentos['pack4'] or '', argumentos['pack5'] or '', argumentos['pack6'] or '', argumentos['pack7'] or '', argumentos['pack8'] or '', argumentos['pack9'] or ''})
	end
	if argumentos['core1'] then
		NucleosTitulo = 'Núcleos'
		Nucleos = listaHTML({argumentos['core1'] or '', argumentos['core2'] or '', argumentos['core3'] or '', argumentos['core4'] or '', argumentos['core5'] or '', argumentos['core6'] or '', argumentos['core7'] or '', argumentos['core8'] or '', argumentos['core9'] or ''})
	end
	if argumentos['conn1'] then
		SeConectaTitulo = 'Se conecta a'
		SeConecta1 = listaHTML({argumentos['via1_1'] or '', argumentos['via1_2'] or '', argumentos['via1_3'] or '', argumentos['via1_4'] or '', argumentos['via1_5'] or '', argumentos['via1_6'] or '', argumentos['via1_7'] or '', argumentos['via1_8'] or '', argumentos['via1_9'] or ''})
	end
	if argumentos['conn2'] then
	   SeConecta2 = listaHTML({argumentos['via2_1'] or '', argumentos['via2_2'] or '', argumentos['via2_3'] or '', argumentos['via2_4'] or '', argumentos['via2_5'] or '', argumentos['via2_6'] or '', argumentos['via2_7'] or '', argumentos['via2_8'] or '', argumentos['via2_9'] or ''})
	end
	if argumentos['conn3'] then
	   SeConecta3 = listaHTML({argumentos['via3_1'] or '', argumentos['via3_2'] or '', argumentos['via3_3'] or '', argumentos['via3_4'] or '', argumentos['via3_5'] or '', argumentos['via3_6'] or '', argumentos['via3_7'] or '', argumentos['via3_8'] or '', argumentos['via3_9'] or ''})
	end
	if argumentos['clase1'] then
		ClasesTitulo = argumentos['clase título'] or 'Clases'
		Clases = listaHTML({argumentos['clase1'] or '', argumentos['clase2'] or '', argumentos['clase3'] or '', argumentos['clase4'] or '', argumentos['clase5'] or '', argumentos['clase6'] or '', argumentos['clase7'] or '', argumentos['clase8'] or '', argumentos['clase9'] or ''})
	end
	if argumentos['marca1'] then
		MarcasComercialesTitulo = 'Marcas comerciales'
		MarcasComerciales = listaHTML({argumentos['marca1'] or '', argumentos['marca2'] or '', argumentos['marca3'] or '', argumentos['marca4'] or '', argumentos['marca5'] or '', argumentos['marca6'] or '', argumentos['marca7'] or '', argumentos['marca8'] or '', argumentos['marca9'] or ''})
	end

	-- :: Adopción
	local ttUsadoEn = argumentos['usado en título'] or 'Usado en'
	local UsadoEn = argumentos['usado en'] or ''
	local Estandar = argumentos['estándar'] or propiedad('P503') or ''
	local Compatibilidad = argumentos['compatibilidad'] or ''
	local Retrocompatibilidad = argumentos['retrocompatibilidad'] or ''
	local Uso = argumentos['uso'] or propiedad('P366') or ''
	local FormatosCompetidores = argumentos['formatos competidores'] or ''

	-- :: Cronología
	local PrecedidoPor = argumentos['precedido por'] or propiedad('P1365') or propiedad('P155') or ''
	local SucedidoPor = argumentos['sucedido por'] or propiedad('P1366') or propiedad('P156') or ''
	local CronologiaTitulo, CronologiaActual
	if PrecedidoPor ~= '' or SucedidoPor ~= '' then
		CronologiaTitulo = argumentos['criterio sucesión'] or 'Cronología'
		CronologiaActual = Titulo
	end

	-- :: Otros
	local ImagendeTarjeta = argumentos['imagen de tarjeta'] or ''
	local TamanoImagendeTarjeta, PieImagendeTarjeta, ImagendeTarjetaTitulo
	if ImagendeTarjeta ~= '' then
		TamanoImagendeTarjeta = argumentos['tamaño imagen de tarjeta'] or '250px'
		PieImagendeTarjeta = argumentos['pie imagen de tarjeta'] or ''
		ImagendeTarjetaTitulo = 'Tarjeta ' .. Titulo
	end
	local OtrosDatosTitulo = argumentos['otros datos título'] or 'Otros datos'
	local OtrosDatos = argumentos['otros datos'] or ''
	local SitioWeb = argumentos['sitio web'] or propiedad('P856',{['lista'] = 'nobullet', ['linkback'] = 'sí'}) or ''

	-- :: La ficha
	local TablaFicha = {
		entidad = argumentos.id,
		titulo = Titulo,
		titulo2 = NombreCompleto,
		subtitulo = Serie,
		clasetitulo = ClaseTitulo,
		estilotitulo = 'background-color: #ccccff; color:#000',
		estilosubtitulo = 'font-style: italic',
		estiloseccion = 'background-color: #ccccff; color:#000',
		estiloetiqueta = 'background-color: #ddddff; width:35%',
		estilodatos = 'width:65%',
		imagen = Logo,
		['tamañoimagen'] = TamanoLogo,
		imagen2 = Imagen,
		['tamañoimagen2'] = Tamano,
		pie2 = Pie,
		estilopie2 = 'font-size:88%',
		imagen3 = Imagen2,
		['tamañoimagen3'] = Tamano2,
		pie3 = Pie2,
		{tipo='sección',
			titulo = 'Información',
			{'Tipo', Tipo},
			{'Generación', Generacion},
			{'Código', Codigo},
			{'Fecha de creación', Creacion},
			{'Fecha de instalación', Instalacion},
			{'Desarrollador', Desarrollador},
			{'Fabricante', Fabricantes},
			-- Para supercomputadoras
			{'Cliente(s)', Cliente},
			{'Ubicación', Ubicacion},
			-- --
			{'Fecha de lanzamiento', Lanzamiento},
			{'Descontinuación', Descontinuacion},
			{'Costo', Costo},
			{'Comercializado por', ComercializadoPor},
			{'Unidades producidas', UnidadesProducidas},
			{'Unidades vendidas', UnidadesVendidas},
		},
		{tipo='sección',
			titulo = 'Datos técnicos',
			-- Datos generales
			{'Plataforma', Plataforma},
			{'Dimensiones', Dimensiones},
			{'Peso', Peso},
			{'Volumen', Volumen},
			{'Superficie', Superficie},
			{'Alimentación', Alimentacion},
			-- Medios de almacenamiento
			{'Codificación', Codificacion},
			{LecturaEtiqueta, Lectura},
			{'Mecanismo de escritura', Escritura},
			-- Computadoras / hardware con procesador/memoria
			{'Número de nodos', Nodos},
			{'Procesador', Procesador},
			{'Frecuencia', Frecuencia},
			{'Memoria', Memoria},
			{'Almacenamiento', Almacenamiento},
			{'[[Unidad de procesamiento gráfico|GPU]]', TarjetaGrafica},
			{'Coprocesador', Coprocesador},
			{'[[System on a chip|SoC]]', SoC},
			{'Conectividad', Conectividad},
			{'Vídeo', Video},
			{'Audio', Audio},
			{'Métodos de entrada', Entrada},
			-- Supercomputadoras
			{'Número de procesadores', NumeroProcesadores},
			{'Rendimiento', Rendimiento},
			{'Arquitectura [[GPGPU]]', ArquitecturaGPGPU},
			{'Número de procesadores GPGPU', ProcesadoresGPGPU},
			{'Procesadores GPGPU', ProcesadorGPGPU},
			{'Memoria GPGPU', MemoriaGPGPU},
			--{'',},
			-- Dispositivos móviles
			{'Memoria externa', MemoriaExterna},
			{'Cámara', Camara},
			{'Videocámara', Videocamara},
			{'Videocámara trasera', VideocamaraTrasera},
			{'Pantalla externa', PantallaExterna},
			{'Batería', Bateria},
			{'Touchpad', Touchpad},
			{'Bandas', Bandas},
			{'[[Tasa de absorción específica]]', TAE},
			-- Consolas
			{'[[Controlador de videojuego|Controles]]', Controles},
			{'Soporte', Soporte},
			-- Cámaras fotográficas
			{'[[Sensor de imagen|Sensor]]', Sensor},
			{'[[Resolución de imagen|Resolución máxima]]', Resolucion},
			{'[[Lente]]', Lente},
			{'[[Obturador]]', Obturador},
			{'Velocidad de obturación', VelocidadObturacion},
			{'Medición', Medicion},
			{'Modos de exposición', ModosExposicion},
			{'Modos de medición', ModosMedicion},
			{'Áreas de enfoque', AreasEnfoque},
			{'Modos de enfoque', ModosEnfoque},
			{'Disparo continuo', DisparoContinuo},
			{'[[Visor (fotografía)|Visor]]', Visor},
			{'[[Escala de sensibilidad fotográfica|Sensibilidad ISO/ASA]]', Sensibilidad},
			{'Flash', Flash},
			{'Etiqueta [[Exif]] de fabricante', FabricanteExif},
			{'Etiqueta [[Exif]] de modelo', ModeloExif},
			-- Monturas de cámaras
			{'Tipo de montura', TipoMontura},
			{'Diámetro externo', DiametroExterno},
			{'Diámetro interno', DiametroInterno},
			{'Pestañas', Pestanas},
			{'[[Distancia de registro]]', Brida},
			-- Microprocesadores
			{'[[Frecuencia de reloj]] de CPU', FrecuenciaReloj},
			{'Zócalos compatibles', Zocalos},
			{'Velocidad de [[Bus de datos|FSB]]', FSB},
			{'Velocidad [[HyperTransport]]', HyperTransport},
			{'Velocidad [[Intel QuickPath Interconnect|QPI]]', QPI},
			{'Velocidad [[Direct Media Interface|DMI]]', DMI},
			{'Longitud del canal [[MOSFET]]', MOSFET},
			{'[[Conjunto de instrucciones]]', ConjuntoInstrucciones},
			{'[[Microarquitectura]]', Microarquitectura},
			{'Código CPUID', CPUID},
			{'Número de núcleos', NumNucleos},
			{'Caché L1', L1},
			{'Caché L2', L2},
			{'Caché L3', L3},
			{'Caché L4', L4},
			-- Zócalos de procesador
			{'Tipo de zócalo', TipoZocalo},
			{'Factor de forma', FactorForma},
			{'Contactos', Contactos},
			{'Protocolo del [[Bus frontal|FSB]]', ProtocoloFSB},
			{'Tensión', Tension},
			-- Buses
			{'Ancho en bits', AnchoBits},
			{'Número de dispositivos', NumeroDispositivos},
			{'[[Tasa de bits|Velocidad]] de transferencia', VelocidadTransferencia},
			{'Tipo de [[bus (informática)|bus]]', TipoBus},
			{'Interfaz de [[conexión en caliente]]', ConexionCaliente},
			{'Interfaz externa', InterfazExterna},
		},
		{tipo='sección',
			titulo = 'Software',
			{'Sistema operativo', SistemaOperativo},
			{'Interfaz', Interfaz},
			{'Java', Java},
			{'Tonos de llamada', Ringtones},
			{'Multimedia', Multimedia},
			{'Servicio en línea', ServicioEnLinea},
			{'Programa más vendido', ProgramaMasVendido},
			{'Acceso root', Root},
			{'Bootloader desbloqueado', Bootloader},
		},
		{tipo='sección',
			titulo = '[[TOP500]]',
			{'Actual', PosicionTOP},
			{'Mejor', MejorTOP},
			{'Listas', ListasTOP},
		},
		{tipo='sección',
			titulo = EmpaquetadosTitulo,
			{'', Empaquetados or ''},
		},
		{tipo='sección',
			titulo = NucleosTitulo,
			{'', Nucleos or ''},
		},
		{tipo='sección',
			titulo = ClasesTitulo,
			{'', Clases or ''},
		},
		{tipo='sección',
			titulo = SeConectaTitulo,
			{argumentos['conn1'] or '', SeConecta1 or ''},
			{argumentos['conn2'] or '', SeConecta2 or ''},
			{argumentos['conn3'] or '', SeConecta3 or ''},
		},
		{tipo='sección',
			titulo = MarcasComercialesTitulo,
			{'', MarcasComerciales or ''},
		},
		{tipo='sección',
			titulo = ttUsadoEn,
			{'', UsadoEn},
		},
		{tipo='sección',
			titulo = 'Estandarización',
			{'[[Estándar internacional|Estándar]]', Estandar},
			{'Compatibilidad', Compatibilidad},
			{'Retrocompatibilidad', Retrocompatibilidad},
			{'Uso', Uso},
			{'Formatos competidores', FormatosCompetidores},
		},
		{tipo = 'sección',
			titulo = CronologiaTitulo,
			{tipo='sucesión',
				anterior = PrecedidoPor or '',
				actual = CronologiaActual or '',
				siguiente = SucedidoPor or '',
			},
		},
		-- Sección hipotética, las imágenes inferiores no se muestran dentro de una sección
		{'',
			ImagendeTarjetaTitulo or '',
			estilodatos = 'text-align: center; font-weight: bold; background-color: #ccccff',
		},
		imageninferior = ImagendeTarjeta,
		['tamañoimageninferior'] = TamanoImagendeTarjeta,
		pieinferior = PieImagendeTarjeta,
		{tipo='sección',
			titulo = OtrosDatosTitulo,
			{'', OtrosDatos},
		},
		piedetabla = SitioWeb,
		estilopiedetabla = 'background:#ddf; font-size: smaller',
	}
	return ModuloFicha.infobox(TablaFicha)
end

function listaHTML(ElementosLista)
	local i = 1
	local j = 1
	local TempTable = {}
	while ElementosLista[i] do
		if ElementosLista[i] then
			TempTable[j] = '<li>' .. ElementosLista[i] .. '</li>'
			j = j + 1
		end
		i = i + 1
	end
	return '<ul>' .. table.concat(TempTable) .. '</ul>'
end

function checkParParam(minimo, maximo, wikidata)
	local valore
	if argumentos[minimo] then
		valore = argumentos[minimo]
		if argumentos[maximo] then
			valore = valore .. ' — ' .. argumentos[maximo]
		end
	elseif wikidata then
		valore = wikidata
	else
		valore = ''
	end
	return valore
end

function obtenerValor(entidad, idPropiedad, idValor)
	local valor = {}
	if not entidad or not idPropiedad or not idValor then
		return valor
	end

	local declaracion = elementoTabla(entidad, 'claims', idPropiedad)
	if declaracion then
		for k, v in pairs(declaracion) do
			local propBuscado = elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'id')
			if propBuscado == idValor then
			   table.insert(valor, v)
			end
		end
	end

	return valor
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 = elementoTabla(Entidad, 'claims', idPropiedad, ValorPosicional)
		if Calificador then
			Obj = elementoTabla(Obj, 'qualifiers', Calificador, ValorPosicionalCalif)
		else
			Obj = elementoTabla(Obj, 'mainsnak')
		end

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

		-- Valores cuya unidad deba ir a la derecha, separada de un espacio
		elseif 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'))
			else
				return numeroUnidad(elementoTabla(Entidad, 'claims', idPropiedad, 1, 'mainsnak', 'datavalue'))
			end
			
		-- Valores cuya unidad deba ir a la izquierda (ej, las monedas o divisas)
		elseif opciones['formato'] == 'moneda' then
			if elementoTabla(Entidad, 'claims', idPropiedad, 2, 'mainsnak', 'datavalue') then
				return numeroUnidad(elementoTabla(Entidad, 'claims', idPropiedad, 1, 'mainsnak', 'datavalue'), false) .. '&nbsp;-&nbsp;' .. numeroUnidad(elementoTabla(Entidad, 'claims', idPropiedad, 2, 'mainsnak', 'datavalue'), false)
			else
				return numeroUnidad(elementoTabla(Entidad, 'claims', idPropiedad, 1, 'mainsnak', 'datavalue'), false)
			end
		
		-- Devolver el ID de la entidad, para propiedades de entidad
		elseif opciones['formato'] == 'entidadID' then
			return elementoTabla(Obj, 'datavalue', 'value', 'id')
		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