Usuario:Cabeza2000/Módulo:Ficha de Personalidad de YouTube

local z = {}

local argumentos -- Tabla de argumentos con los que se llama a la función local argumento={} -- Argumentos eliminando los argumentos sin datos local Entidad -- Tabla con los datos en Wikidata de la persona. local algunaPropiedadEnlazaWikidata -- Para alguna propiedad no existe la etiqueta ni el enlace mostrándose algo de la forma d:...

local obtenerDatosWikidata -- true si se deben obtener datos de Wikidata

-- Módulos y funciones externas local ModuloFecha = require('Módulo:Fecha') local edad = ModuloFecha.edad local ModuloFicha = require('Módulo:Ficha') local ModuloFormatoTexto = require('Módulo:Formato texto') local enVariasLineas = ModuloFormatoTexto.enVariasLineas local entreParentesis = ModuloFormatoTexto.entreParentesis local ModuloIdentificadores = require('Módulo:Identificadores') local ModuloPaginas = require('Módulo:Páginas') local ModuloWikidataFormatos = require('Módulo:Wikidata/Formatos') local formatoFacebook = ModuloWikidataFormatos.formatoFacebook local formatoTwitter = ModuloWikidataFormatos.formatoTwitter local formatoURL = ModuloWikidataFormatos.formatoURL local formatoPeriodo = ModuloWikidataFormatos.formatoPeriodo local ModuloWikidata = require('Módulo:Wikidata') local lapizWikidata = ModuloWikidata.addLinkback local categorizarWikidata = ModuloWikidata.categorizar local getPropiedadWikidata = ModuloWikidata.getPropiedad local elementoTabla = require('Módulo:Tablas').elemento local enlazarURL = require('Módulo:URL').enlazar local sinBandera = require('Módulo:Bandera').sinBandera

-- Constantes local enMayusculas = {['formatoTexto'] = 'mayúscula', ['linkback']='sí'} local enMayusculasO = {['formatoTexto'] = 'mayúscula', ['conjunción']=' o ', ['linkback']='sí'} local listaNoOrdenada = {['lista'] = 'no ordenada', ['linkback']='sí'} --, ['debeExistir'] = 'sí' --local lugar = {['conjunción']=' o ', ['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback']='sí'} local debeExistir = {['debeExistir'] = 'sí', ['formatoTexto'] = 'mayúscula', ['linkback']='sí'} local conPeriodo = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = formatoPeriodo, ordenar='por fecha', ['linkback']='sí'} local conPeriodoDebeExistir = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = formatoPeriodo, ordenar='por fecha', ['debeExistir'] = 'sí', ['linkback']='sí'} local sinEnlazar = {['enlace']='no', ['linkback']='sí'} local sinLapiz = {} local normal = {['linkback']='sí'}

-- Formatos según el tipo de cabecera

local formatos={ ['por defecto'] = {['tipoCabeceraFicha'] = 'humano fn', ['estiloTituloFicha'] = 'background-color:#8DB1C3;color:#FFF', ['otroColorSiFallecido'] = true}, --['actor'] = {['tipoCabeceraFicha'] = , ['estiloTituloFicha'] = }, ['ajedrecista'] = {['estiloTituloFicha'] = 'background-color:transparent;', ['otroColorSiFallecido'] = true}, ['artista'] = {['estiloTituloFicha'] = 'background-color:#8DB1C3;color:#FFF', ['otroColorSiFallecido'] = true}, ['autoridad'] = {['estiloTituloFicha'] = 'background-color:transparent;', ['estiloTituloSecciones'] ='background-color:#E6E6FA;'}, ['cine'] = {['tipoCabeceraFicha'] = 'cine', ['estiloTituloFicha'] = 'background-color:#f9e999', ['otroColorSiFallecido'] = true}, ['diseñador'] = {['estiloTituloFicha'] = 'background-color:#ED8;color:#000', ['otroColorSiFallecido'] = true}, ['escritor'] = {['tipoCabeceraFicha'] = 'libro', ['estiloTituloFicha'] = 'background-color:#4c6099;color:#FFF', ['otroColorSiFallecido'] = true}, ['militar'] = {['tipoCabeceraFicha'] = 'militar', ['estiloTituloFicha'] = 'background-color:#b0c4de;color:#000', ['otroColorSiFallecido'] = true}, ['modelo'] = {['tipoCabeceraFicha'] = 'hombremujer', ['estiloTituloFicha'] = 'background-color:#9F9;color:#000', ['otroColorSiFallecido'] = true}, -- -- Música -- ['cantante'] = {['tipoCabeceraFicha'] = 'música', ['estiloTituloFicha'] = 'background-color:#f0e68c'}, -- solista de Plantilla:Ficha de artista musical/selección de color ['músico'] = {['tipoCabeceraFicha'] = 'música', ['estiloTituloFicha'] = 'background-color:#F4BF92'}, -- instrumentalista_no_vocal (integrantes de grupos no vocalistas, así como solistas instrumentales y directores de orquesta) ['otro música'] = {['tipoCabeceraFicha'] = 'música', ['estiloTituloFicha'] = 'background-color:#BFE0BF'}, -- otro_personal (productores, compositores, ingenieros) -- ['periodista'] = {['tipoCabeceraFicha'] = 'revista', ['estiloTituloFicha'] = 'background-color:#ED8;color:#000', ['otroColorSiFallecido'] = true}, ['televisión'] = {['tipoCabeceraFicha'] = 'cabecera televisión', ['estiloTituloFicha'] = 'background-color:#ED8;color:#000', ['otroColorSiFallecido'] = true}, ['videojuego'] = {['tipoCabeceraFicha'] = 'cabecera videojuego', ['estiloTituloFicha'] = 'background-color:#CCF;color:#000', ['otroColorSiFallecido'] = true}, }

local nombre =

function fechaiso(x)

return x.time

end

function z.Ficha(frame)

   ModuloWikidata:setFrame(frame)  -- No funciona si se pone ModuloWikidata.setFrame(marco)    
   -- Obtener una copia de los argumentos eliminando los argumentos sin valor
   -- y dejando en blanco (aunque no nil) aquellos que valen "no"
   argumento = obtenerArgumentosConValor(frame) -- No poner local. Es global.
   
   --Determinar si se deben obtener datos de Wikidata
   if argumento['wikidata'] == 'no' and (argumento['fecha de fallecimiento'] or argumento['lugar de fallecimiento']
   	or argumento['fecha de desaparición'] or argumento['lugar de desaparición']
   	) then
       obtenerDatosWikidata = false
     	Entidad = nil
   else
   	obtenerDatosWikidata = true
   	-- Obtener los datos de la página donde se inserta la ficha de Wikidata.
   	Entidad   = mw.wikibase.getEntityObject(argumento['id']) or {}
   end
   --Determinar datos para la ficha
   local educacion = argumento['educación'] or argumento['educacion'] or propiedad('P512',sinEnlazar)
   local almamater = argumento['alma máter'] or argumento['alma_mater'] or argumento['alma mater'] or argumento['almamáter'] or argumento['alma_máter']
           	or propiedad('P69', { ['formatoTexto'] = 'mayúscula', ['lista'] = 'no ordenada', ['valor-función']='educado en', ['valor-módulo'] = 'Wikidata/Formatos educación', ['ordenar'] = 'por fecha', ['linkback']='sí'})
   

if propiedad('P21', sinLapiz) == 'femenino' or propiedad('P21', sinLapiz) == 'mujer transgénero' then

   	etiquetaAnyosActivo = 'Años activa'
   	etiquetaConocidoPor = 'Conocida por'
   	etiquetaInfluencias = 'Influida por'
   	etiquetacampeon 	= 'Campeona del mundo'
   	etiquetaAlumnoDe    = 'Alumna de'
   	funcionOcupacion    = formatoOcupacionFemenino
   else
   	etiquetaAnyosActivo = 'Años activo'
   	etiquetaConocidoPor = 'Conocido por'    	
   	etiquetaInfluencias = 'Influido por'
   	funcionOcupacion    = formatoOcupacionMasculino
   	etiquetacampeon		= 'Campeón del mundo'
   	etiquetaAlumnoDe    = 'Alumno de'
   end

--No entiendo para qué sirve. En principio no se muestra para actores. --seccionartistica='Carrera artística'

-- Generar los cargos local hayCargos local tablaCargos = {tipo='sección'}

if argumento['cargo'] then hayCargos = true

table.insert(tablaCargos, {, '


'})

table.insert(tablaCargos, generarcargo(argumento,1,frame))

argumento['predecesor']= nil argumento['predecesora']= nil argumento['sucesor']= nil argumento['sucesora']= nil end for i=2, 10 do if argumento['cargo'..i] or argumento['inicio'..i] then hayCargos = true table.insert(tablaCargos, generarcargo(argumento,i,frame)) end end

   -- La ocupación y el área solo se obtienen de Wikidata si no se informan los campos de ocupación y área.
   -- Esto es porque para los artistas puede tener en Wikidata como ocupación "pintor y escultor" y 
   -- tener informada el área con "pintura y escultura".
   local ocupacion = argumento['ocupación'] or argumento['ocupacion'] or  argumento['Ocupación']  or argumento['profesión']
   local area      = argumento['área'] or argumento['area'] or argumento['especialidad'] or argumento['campos']
   
   if not ocupacion and not area then
   	ocupacion = propiedad('P106', {['formatoTexto'] = 'mayúscula', ['valor-función']=funcionOcupacion, ['calificativo'] = formatoPeriodo, ['linkback']='sí'})
   	area      = propiedad('P101', enMayusculas) -- Campo de trabajo
   end
   local ocupacionOArea = ocupacion or area 
            
   nombre = argumento['nombre'] or argumento['Nombre'] or
        obtenerEtiquetaWikidata() or 
        ModuloPaginas.nombrePagina({desambiguar='sí'})
   local nombre_completo   = argumento['nombre completo']          

local nombre_nacimiento = argumento['nombre de nacimiento'] or propiedad('P1477') local nombre_nacimiento_sin_lapiz = argumento['nombre de nacimiento'] or propiedad('P1477', sinLapiz)

-- Nombre en la escritura nativa. -- Solo se muestra si no coincide con el nombre o el nombre de nacimiento o el nombre completo local nombresNativos={tipo='sección'} local nombreNativo, textoNombreNativo, idiomaNombreNativo

if argumento['nombre nativo'] then if argumento['nombre nativo'] ~= nombre and argumento['nombre nativo'] ~= nombre_nacimiento_sin_lapiz and argumento['nombre nativo'] ~= nombre_completo then table.insert(nombresNativos,{'Nombre nativo', argumento['nombre nativo']}) end elseif Entidad then -- En el caso de obtener de Wikidata puede haber varios nombres nativos

local declaracion = elementoTabla(Entidad, 'claims','P1559')

if declaracion then

for k,v in pairs(declaracion) do nombreNativo = elementoTabla(v, 'mainsnak', 'datavalue', 'value') if nombreNativo then textoNombreNativo = nombreNativo.text idiomaNombreNativo = nombreNativo.language if textoNombreNativo and idiomaNombreNativo and textoNombreNativo ~= nombre and textoNombreNativo ~= nombre_nacimiento_sin_lapiz and textoNombreNativo ~= nombre_completo then table.insert(nombresNativos, { 'Nombre en ' .. mw.language.fetchLanguageName(idiomaNombreNativo, 'es') , lapizWikidata(textoNombreNativo,Entidad.id,'P1559') } ) end end end end

end

   -- Informar los datos de nacimiento, desaparición y de fallecimiento
   -- No se debe alterar el orden para que en caso de que el lugar de fallecimiento o el de desaparición sea el mismo
   -- que el de nacimiento esté enlazado el lugar de nacimiento
   local nacimiento, desaparicion, fallecimiento
   local fechaNacimientoTimestamp = elementoTabla(Entidad, 'claims', 'P569', 1, 'mainsnak', 'datavalue', 'value', 'time')    
   local lugarNacimiento    = argumento['lugar de nacimiento'] or propiedad('P19', {['conjunción']=' o ', ['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback']='sí', fecha=fechaNacimientoTimestamp})
   
   local lugarDesaparicion  = argumento['lugar de desaparición']
   local fechaFallecimientoTimestamp = elementoTabla(Entidad, 'claims', 'P570', 1, 'mainsnak', 'datavalue', 'value', 'time')        
   local lugarFallecimiento = argumento['lugar de fallecimiento'] or propiedad('P20', {['conjunción']=' o ', ['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback']='sí', fecha = fechaFallecimientoTimestamp})
   fallecimiento = enVariasLineas({
   	argumento['fecha de fallecimiento'] or (obtenerDatosWikidata and entreParentesis(propiedad('P570', enMayusculasO), obtenerEdadWikidata('P570'))), 
   	lugarFallecimiento
   })
   if fallecimiento then
   	desaparicion = enVariasLineas({
   					argumento['fecha de desaparición'] or propiedad('P746', enMayusculasO), 
   					lugarDesaparicion

})

   else
   	desaparicion = enVariasLineas({
   					argumento['fecha de desaparición'] or (obtenerDatosWikidata and entreParentesis(propiedad('P746', enMayusculasO), obtenerEdadWikidata('P746'))), 
   					argumento['lugar de desaparición']

})

   end
   
   if fallecimiento or desaparicion then
   	nacimiento = enVariasLineas({
   					argumento['fecha de nacimiento'] or propiedad('P569', enMayusculasO), 
   					lugarNacimiento

})

   else
   	nacimiento = enVariasLineas({
   					argumento['fecha de nacimiento'] or (obtenerDatosWikidata and entreParentesis(propiedad('P569', enMayusculasO), obtenerEdadWikidata())), 
   					lugarNacimiento

})

   end
   
   if argumento['padres'] then
   	padres = estaEnlazado(argumento['padres'])
   else
   	padre = propiedad('P22')
   	madre = propiedad('P25')
   	
   	if padre and madre then
   		padres = padre .. '
' .. madre padre = nil madre = nil end end firma = argumento['firma'] or argumento['Firma'] or propiedad('P109', {['no añadir enlace Wikidata'] = true}) -- Formato del título de la ficha y de las secciones según la ocupación, si la persona tiene cargos o si ha fallecido local formato, cabecera if argumento['cabecera'] then cabecera = argumento['cabecera'] -- Por defecto utilizar el campo cabecera de la plantilla elseif hayCargos == true then cabecera = 'autoridad' elseif not ocupacionOArea then cabecera = 'por defecto' elseif ocupacionOArea:find('[Aa]ctor') or ocupacionOArea:find('[Aa]ctriz') or ocupacionOArea:find('[Pp]roductor de cine') or ocupacionOArea:find('[Dd]irector de cine') then cabecera = 'cine' elseif ocupacionOArea:find('[Aa]jedrecista') or argumento['elo'] or rankingajedrez then cabecera = 'ajedrecista' elseif ocupacionOArea:find('[Ee]scritor') or ocupacionOArea:find('[Nn]ovelista') or ocupacionOArea:find('[Pp]oeta') or ocupacionOArea:find('[Dd]ramaturgo') then cabecera = 'escritor' elseif ocupacionOArea:find('[Cc]antante') then cabecera = 'cantante' elseif ocupacionOArea:find('[Mm]úsico') then cabecera = 'músico' elseif ocupacionOArea:find('[Cc]ompositor') then cabecera = 'otro música' elseif ocupacionOArea:find('[Pp]olític[oa]') or argumento['cargo'] then cabecera = 'por defecto' elseif ocupacionOArea:find('[Pp]eriodista') then cabecera = 'periodista' elseif ocupacionOArea:find('[Dd]iseñador') then cabecera = 'diseñador' elseif ocupacionOArea:find('[Pp]resentador') or ocupacionOArea:find('[Cc]onductor') then cabecera = 'televisión' elseif ocupacionOArea:find('[Mm]odelo') then cabecera = 'modelo' elseif ocupacionOArea:find('[Mm]ilitar') then cabecera = 'militar' elseif ocupacionOArea:find('[Vv]ideojuego') then cabecera = 'videojuego' else cabecera = 'por defecto' end formato = formatos[cabecera] or {} local tipoCabeceraFicha, estiloTituloFicha, estiloTituloSecciones tipoCabeceraFicha = formato['tipoCabeceraFicha']
   if (fallecimiento or desaparicion) and formato['otroColorSiFallecido'] then
   	estiloTituloFicha     = 'background-color:#c0c0c0;color:#000'
   	estiloTituloSecciones = 'background-color:#c0c0c0;color:#000'
   else
   	estiloTituloFicha     = formato['estiloTituloFicha']
   	estiloTituloSecciones = formato['estiloTituloSecciones'] or formato['estiloTituloFicha']
   end
   
   if hayCargos == true then
   	cargosocupados        = 
   else
   	cargosocupados = argumento['cargo ocupado'] or propiedad('P39', {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', 
			ordenar='por fecha', 
			['linkback']='sí',
			['valor-función'] = ModuloWikidataFormatos.formatoCargo
		})    	
   end

if argumento['ranking'] or argumento['ránking'] then rankingajedrez= (argumento['ranking'] or argumento['ránking']) .. frame:preprocess('[1]​') end -- Imagen y pie de la imagen local imagen = argumento['imagen'] or argumento['Imagen'] or argumento['foto'] local pieDeImagen

if imagen then pieDeImagen = argumento['pie de imagen'] or argumento['pieimagen'] or

                     argumento['descripción'] or argumento['descripcion'] or
                     argumento['pie de foto'] or argumento['piedefoto'] or
                     argumento['textoimagen'] or argumento['TextoImagen'] or argumento['texto_imagen'] or
                     argumento['pie de foto']

else imagen, pieDeImagen = obtenerImagenWikidata() -- Pendiente obtener el pie del calificativo P2096 end

   local Ficha = {
   	wikidata        = not obtenerDatosWikidata and 'no',
       clase           = 'biography vcard',
       -- Título
       tipocabecera    = tipoCabeceraFicha,                   
       titulo          = nombre,
       --colorfondo      = colorfondo,        -- No se usa
       estilotitulo    = estiloTituloFicha,
       --Imagen
       --De momento no se pone una raya como en la ficha de escritor tras la imagen
       imagen          = imagen,
       ['tamañoimagen']= argumento['tamaño de imagen'] or argumento['tamaño'] or 
                         argumento['tamaño imagen'] or argumento['tamañoimagen'] or argumento['tamañodelaimagen'] or
                         argumento['tamaño de foto'] or 
                         '220px', -- or '200px' en la ficha de escritor, 192 en la ficha de artista. Tomo por defecto 220, el tamaño de thumb
       pie             = pieDeImagen,
       -- Pendiente: en la ficha de escritor el texto se pone entre  y en la de artista se usa el estilo font-size:smaller
       --Etiquetas y datos                  
       estiloetiqueta  = 'width:33%', -- 25% en la ficha de escritor. Sin especificar en la de persona
                         --'padding:0.2em 1.0em 0.2em 0.2em; background-color:transparent; line-height:1.2em;', -- En la ficha de persona original
       estilodatos     = 'padding:0.2em; line-height:1.3em; vertical-align:middle;',
       tablaCargos,
       {tipo='sección',
       	['titulo']   = 'Información personal',   -- Ver la ficha de noble o la ficha de diseñador
           estilotitulo = estiloTituloSecciones,
           {'Nombre completo',                                      -- solo si no coincide con:
           	(nombre_completo ~= nombre) and                      --    - el nombre que se muestra en el título de la ficha
           	(nombre_completo ~= nombre_nacimiento_sin_lapiz) and --    - o con el nombre de nacimiento
           	 nombre_completo},
           {'Nombre de nacimiento', -- solo si no coincide con el nombre que se muestra en el título de la ficha
           	(nombre_nacimiento_sin_lapiz ~= nombre) 
           	and nombre_nacimiento},
           nombresNativos,
           {'Apodo',              argumento['apodo'] or propiedad('P1449')},
           {'Otros nombres', argumento['otros nombres'] or argumento['alias'], -- ¿No es lo mismo que el apodo?????
       	                       clase='nickname'},        	                   
           {'Nacimiento',         nacimiento},

{'Desaparición', desaparicion},

           {'Fallecimiento',      fallecimiento},
           {'Causa de la muerte', siNoEs(argumento['causa muerte'] or
       	                       propiedad('P509', enMayusculas) or 
       	                       propiedad('P1196', enMayusculas), 'Causas naturales')}, -- circunstancias de la muerte
       	{'Lugar de sepultura',  argumento['lugar de descanso'] or propiedad('P119', debeExistir)},
           {'Residencia',     sinBandera(argumento['residencia'] or 
           	               argumento['país_de_residencia'] or argumento['pais_de_residencia'] or
           	               argumento['lugar_de_residencia']) or
           	               propiedad('P551', {['debeExistir'] = 'sí', ['linkback']='sí', ['rangoMayor'] = 'sí'}),
       	                   clase='etiqueta'},        	
           {'Nacionalidad',   sinBandera(argumento['nacionalidad'] or argumento['Nacionalidad'] or argumento['ciudadanías']) or --Pendiente hacer que salga el gentilicio
       	                   propiedad('P27', {['valor-función'] = ModuloWikidataFormatos.formatoGentilicio, 
       	                   	                 ['formatoTexto'] = 'mayúscula',  
       	                   	                 ['calificativo'] = formatoPeriodo,
       	                   	                 ordenar='por fecha',
       	                   	                 ['linkback']='sí'}), 
       	                   clase='category'},  
           {'Ciudadanía',     sinBandera(argumento['ciudadanía'] or -- ¿No es lo mismo que la nacionalidad?
       	                   argumento['ciudadania']),
       	                   clase='category'},
       	{'Lengua materna',  argumento['lengua materna'] or argumento['Lengua_materna'] or argumento['lengua_materna'] or propiedad('P103', enMayusculas)},
           {'Etnia',          --propiedad('P172', enMayusculas) or 
       	                   argumento['etnia'] or argumento['grupo étnico'],
       	                   clase='category'},
           {'Religión', 		argumento['religión'] or propiedad('P140', debeExistir)},
       	{'Orden religiosa', argumento['congregación'] or propiedad('P611', enMayusculas)},
       	{'Partido político',   argumento['partido político'] or argumento['partido'] or propiedad('P102', conPeriodo), clase='plainlist'},
       	{'Otras afiliaciones políticas',   argumento['afiliaciones'] or propiedad('P1416')},
           
       },
       {tipo='sección',
       	estilotitulo = estiloTituloSecciones,
       	['titulo']   = 'Características físicas',
       	{'Altura',             argumento['altura'] or argumento['estatura'] or propiedad('P2048', {['valor-función']='magnitud', ['valor-módulo'] = 'Wikidata/Formato magnitud', ['linkback']='sí'})},
       	{'Peso',               argumento['peso'] or propiedad('P2067', {['valor-función']='magnitud', ['valor-módulo'] = 'Wikidata/Formato magnitud', ['linkback']='sí'})},
       	{'Medidas', argumento['medidas']},
       	{'Ojos', argumento['color de ojos'] or propiedad('P1340', enMayusculas)},
       	{'Cabello', argumento['color de cabello'] or propiedad('P1884', enMayusculas)},
       	{'Pecho natural', argumento['busto natural']},
       	--{'Orientación sexual', propiedad('P91', enMayusculas) or argumento['orientación sexual'] or argumento['orientación real']}
         },
       {tipo='sección',
           -- Familia. 
           estilotitulo  = estiloTituloSecciones,
           ['titulo']    = 'Familia', -- Ver la ficha de noble
           
       -- En el caso del cónyuge tiene preferencia el argumento hasta que se muestre los calificativos.
           clase       ='plainlist', -- Mostrar las listas sin viñetas
           {'Familia nobiliaria', propiedad('P53', debeExistir)},
           {(padres and 'Padres') or (padre and 'Padre') or 'Madre', -- Mostrar padres, padre o madre según esté informado ambos o solo uno de ellos
           	padres or padre or madre},
           {'Cónyuge',    estaEnlazado(argumento['cónyuge'] or argumento['conyuge'] or argumento['Cónyuge'] or argumento['Conyuge'] or
       	               propiedad('P26', conPeriodo))},
           {'Pareja',     estaEnlazado(argumento['pareja'] or propiedad('P451', conPeriodo))},
           {'Hijos',      estaEnlazado(argumento['hijos'] or argumento['Hijos']) or
       	               propiedad('P40', {['lista'] = 'no ordenada', ['debeExistir'] = 'sí', ['linkback']='sí'}) or
       	               propiedad('P1971', sinEnlazar)

},

           {'Familiares', estaEnlazado(argumento['familiares'])}, --- ¿¿¿¿¿¿¿¿¿??????????? -- Hermano: P7, padastro: p43, pariente: p1038
       },
       {tipo='sección',
       	['titulo']   = 'Educación',
           estilotitulo = estiloTituloSecciones,
           {'Educación',  educacion},
           {'Educado en', almamater, clase='plainlist'},
           {'Posgrado',   argumento['posgrado']},
           {'Tesis', 
           	entreParentesis(
           		(argumento['url tesis'] and enlazarURL(argumento['url tesis'], ModuloFormatoTexto.enCursivas(argumento['título tesis']))-- Si se informa la url
           		) or (not argumento['url tesis'] and ModuloFormatoTexto.enCursivas(argumento['título tesis']) -- Si no se informa la url
           		) 
           	, argumento['año tesis'])
           },
           {'Supervisora doctoral', argumento['supervisora doctoral']},
           {'Supervisores doctorales'  , argumento['supervisores doctorales']},
           {'Supervisor doctoral' , argumento['supervisor doctoral'] or propiedad('P184')},
           {etiquetaAlumnoDe, argumento['alumno de'] or  propiedad('P1066', conPeriodoDebeExistir), clase='plainlist'},
       },
       {tipo='sección',
       	['titulo'] = 'Información profesional',
           estilotitulo = estiloTituloSecciones,
           {'Ocupación',      ocupacion, clase='role'},
           {'Área',           area},
           {etiquetaConocidoPor,  argumento['conocido por'] or argumento['conocido']},
           {'Cargos ocupados',    cargosocupados,clase='plainlist'}, -- políticos o en empresas
       	
       	{'Empresa',            argumento['empresa']},
       	{'Estudio',            argumento['nombre estudio']}, -- Arquitectos
       	{'Restaurantes',       argumento['restaurantes']},   -- Para cocineros. Restaurantes en los que ha trabajado.
       	
       	{'Salario',            argumento['salario']},
       	{'Patrimonio',         argumento['patrimonio'] or argumento['fortuna']},
       	{'Tratamiento',        argumento['tratamiento']},
       	{etiquetaAnyosActivo,  argumento['años activo'] or argumento['años activa'] or
       					   argumento['añosactivo'] or 
       	                   argumento['periodo'] or argumento['período'] or argumento['Periodo'] or
       	                   argumento['tiempo'] or argumento['Tiempo'] or 
       	                   formatoPeriodo({ -- falta que salga el lápiz
       	                   		['P580']={[1]=elementoTabla(Entidad, 'claims','P2031',1,'mainsnak')},
       	                   		['P582']={[1]=elementoTabla(Entidad, 'claims','P2032',1,'mainsnak')}
       	                   	})},
       	
       	-- Sección artística (actores y ¿presentadores?)
       	{tipo='sección',
       		['titulo']   = seccionartistica,
           	estilotitulo = estiloTituloSecciones,
           	{'Rol debut'    , argumento['rol debut']},
           	{'Año de debut' , argumento['año debut']},
           	{'Año de retiro', argumento['año retiro']},
           	{'Películas'    , argumento['número de películas']},
           	{'Serie'        , argumento['serie']},
   		},
   	
           {'Empleador',      argumento['empleador'] or
       	                   argumento['institución_de_trabajo'] or
       	                   argumento['nombre_estudio'] or
       	                   propiedad('P108', conPeriodo),
                              clase       ='plainlist'},
           --Profesores
           {'Estudiantes doctorales',   argumento['estudiantes doctorales'] or propiedad('P185', debeExistir)},
           {'Estudiantes', argumento['estudiantes'] or propiedad('P802', debeExistir)},
           
           -- Periodistas y presentadores
           {tipo='sección',
           	{'Medio',          argumento['medio de comunicación']}, -- Unas veces informados con el significado de área y otras con el empleador
           	{'Canal',          argumento['canal']},
           	{'Programas',      argumento['programas'] or argumento['programa']},
           },
            
           -- Ocupación (escritores, artistas, periodistas, diseñadores, etc)
           -- Información artística
           {tipo='sección',
           	plural(argumento['movimiento'] or argumento['Movimiento'] or argumento['movimientos'] or 
       	                                     propiedad('P135', {
       	                                     	['valor-módulo'] = 'Wikidata/Formato movimiento', 
       	                                     	['valor-función'] = 'formatoMovimiento', 
       	                                     	['linkback']='sí', 
       	                                     	['calificativo'] = formatoPeriodo,
       	                                     	ordenar='por fecha'}), 'Movimiento', 'Movimientos'),
           	{'Seudónimo', argumento['seudónimo'] or argumento['Seudónimo'] or argumento['alias'] or argumento['Alias'] or propiedad('P742')},
           	{'Lengua de producción literaria',  argumento['lengua_literaria'] or argumento['Lengua_literaria']},
           	plural(argumento['género'] or argumento['Género'] or propiedad('P136', enMayusculas), 'Género', 'Géneros'),
           	plural(argumento['instrumento'] or propiedad('P1303', enMayusculas), 'Instrumento', 'Instrumentos'),
           	{'Tipo de voz', argumento['voz'] or argumento['tipo de voz'] or argumento['tesitura'] or propiedad('P412', enMayusculas)},
           	plural(argumento['compañía discográfica'] or propiedad('P264', conPeriodo), 'Discográfica', 'Discográficas', 'plainlist'),
           },        	
       	-- Obras notables. Se ponen de momento en cursivas pero es incorrecto en el caso de arquitectos.
           {'Obras notables', argumento['obras destacadas'] or
       	                   argumento['obras notables'] or argumento['obras_notables'] or argumento['Obras notables'] or
       	                   argumento['obras'] or
       	                   argumento['proyectos_representativos'] or propiedad('P800',{['enlace']='sí', ['lista'] = 'no ordenada',  ['debeExistir'] = 'sí', ['formatoTexto']='cursivas', ['linkback']='sí'}),
       	                   clase='plainlist'
       	                       },
           {'Proyectos representativos', argumento['proyectos representativos']},
           {'Artistas relacionados', argumento['relacionados']},
           {'Abreviatura en botánica',
           	argumento['abreviatura en botánica'] or propiedad('P428')},
           {'Abreviatura en zoología',
           	argumento['abreviatura en zoología'] or propiedad('P835')},
           {'Abreviatura en astronomía',
           	argumento['abreviatura en astronomía']},
           	
           --{, listaDesplegable(etiquetaInfluencias, argumento['influenciado por'] or argumento['influido por'] or 
           --	                  argumento['influencias'] or argumento['Influencias'], frame)},
           --{,         listaDesplegable('Influyó a', argumento['influyó en'] or argumento['influyó'] or argumento['Influyó'], frame)},
           
           -- Militares
           {'Rama militar', argumento['rama']       or propiedad('P241', enMayusculas)},
           {'Rango',        argumento['rango']      or propiedad('P410', conPeriodo), clase='plainlist'},
           {'Participó en', argumento['conflictos'] or argumento['batallas'] or propiedad('P607', enMayusculas)},
           -- Ajedrecistas
           {tipo='sección',
           	{'Título',             	argumento['título']		or argumento['titulo']}, -- 
           	{etiquetacampeon,		argumento['campeón'] 	or argumento['campeon']},
           	{'Elo',   		propiedad('P1087',{['formatoUnidad'] = 'número', ['calificativo']   = 'P585', ['linkback']='sí', ['rangoMayor'] = 'sí'}) or argumento['elo'] }, -- 
           	{'Mejor elo',   	argumento['mejor elo']},
           	{'Escalafón FIDE',	    rankingajedrez},
           	{'Mejor escalafón',   	argumento['mejor ranking']},
           	{'Término',            	argumento['término'] or -- 
       	    		               	argumento['termino']},
           	{'Predecesor',         	argumento['predecesor']},
           	{'Predecesora',         	argumento['predecesora']},
           	{'Sucesor',            	argumento['sucesor']},
           	{'Sucesora',            	argumento['sucesora']},
           }, 
           {'Miembro de', argumento['miembro de'] or argumento['sindicato'] or propiedad('P463', conPeriodoDebeExistir), clase='plainlist'},
           {'Central sindical', argumento['central sindical'], clase='plainlist'},
       },
       {tipo='sección',
       	['titulo']   = 'Premios artísticos',   -- Ver la ficha de noble o la ficha de diseñador
           estilotitulo = estiloTituloSecciones,
           {'Premios Óscar', argumento['premios óscar']},
           {'Globos de Oro', argumento['premios globo de oro']},
           {'Premios BAFTA', argumento['premios bafta']},
           {'Premios Emmy', argumento['premios emmy']},
           {'Premios SAG', argumento['premios sag']},
           {'Premios Tony', argumento['premios tony']},
           {'Premios Grammy', argumento['premios grammy']},
           {'Festival de Cannes', argumento['premios cannes']},
           {'Berlinale', argumento['premios berlinale']},
           {'Festival Internacional de San Sebastián', argumento['premios san sebastian']},
           {'Festival Internacional de Cine de Moscú', argumento['premios moscu']},
           {'Premios Goya', argumento['premios goya'] },
           {'Premios César', argumento['premios césar']   or argumento['premios cesar']},
           {'Premios Ariel', argumento['premios ariel']},
           {'Premios Cóndor de Plata', argumento['premios cóndor'] or argumento['premios condor']},
           {'Otros premios', argumento['otros premios']},
       },
       {tipo='sección',
           ['titulo']   = 'Carrera deportiva',   -- Ver la ficha de noble o la ficha de diseñador
           estilotitulo = estiloTituloSecciones,
           {'Deporte', argumento['deporte'] or propiedad('P641', enMayusculas)},
       },
       {tipo='sección',
           ['titulo'] 	= 'Perfil de jugador',
           estilotitulo = estiloTituloSecciones,
           {'Juegos', 	argumento['juegos'] 	or propiedad('P2416')},
           {'Equipo', 	argumento['equipos'] 	or propiedad('P54')},
           {'Ligas', 	argumento['ligas'] 	or propiedad('P118')},
           {'Plataformas de transmisión', 	argumento['plataforma']},
       },
       {,seccionDesplegable('Títulos y 
reconocimientos',argumento['títulos'], frame,estiloTituloSecciones)},
-- Los premios pueden ser para varias ocupaciones por lo que se ponen al final -- Premios, condecoraciones, medallas, distinciones, etc. {'Distinciones', argumento['premios'] or argumento['Premios'] or argumento['premio'] or argumento['Premio'] or argumento['premios2'] or obtenerPremios() , clase ='plainlist'}, -- Mostrar las listas sin viñetas {tipo='sección', ['titulo'] = 'Información criminal', estilotitulo = estiloTituloSecciones, {'Cargo(s) criminal(es)', argumento['cargos criminales'] or propiedad('P1399'), clase='plainlist'}, -- P2632 puede ser usado en alguno de los dos parámetros de abajo {'Condena', argumento['condena']}, {'Situación penal', argumento['situación penal']}, }, -- Con etiqueta/datos como en las fichas de escritor y artista en vez de como en la ficha de persona {'Firma', (firma and ('Archivo:' .. firma .. ''))}, -- 150 px como en la ficha de escritor en vez de 128
       {tipo='sección', -- Web
           clase       ='plainlinks',
           titulo      ='Web',
           estilotitulo  = estiloTituloSecciones,
           {'Sitio web', noAlargar(enlazarURL(argumento['web'] or argumento['página web'] or argumento['website'] or argumento['sitio web'] or argumento['sitioweb']) or
           	propiedad('P856', {['valor-función'] = formatoURL, ['linkback']='sí', ['rangoMayor'] = 'sí'}))},
           {'Facebook', obtenerFacebook()}, -- Ver la plantilla facebook
           {'Twitter',  obtenerTwitter()},  -- Ver la plantilla twitter
       },
       {tipo='sección',
           titulo      ='Notas',
           estilotitulo='border-top:1px solid #c0c0c0;text-align:left',
           {, argumento['notas'], estilodatos='text-align:left;font-size:90%; line-height:1.2em'}
       },        
       --{'Fuente biográfica', argumento['fuentebiográfica']},
   }
   categorias = {}
   
   if  argumento['lugar_de_descanso'] or --renombrado
   	argumento['supervisora_doctoral'] or --renombrado
   	argumento['supervisores_doctorales'] or --renombrado
   	argumento['supervisor_doctoral'] or --renombrado
   	argumento['tesis_url'] or --renombrado
   	argumento['tesis_título'] or --renombrado
   	argumento['tesis_año'] or --renombrado
   	argumento['abreviatura en astronomía']
   	--or argumento['influyó en'] or argumento['influyó'] or argumento['Influyó'] -- eliminado
   	--or argumento['predecesor'] or argumento['sucesor']-- eliminado
   	or argumento['fuentebiográfica'] --por eliminar
   	or argumento['mail'] --por eliminar
   	then
     	table.insert(categorias, )
   end
   
   if nacimiento and not fallecimiento then
   	table.insert(categorias, )
   end
   
   if Entidad and Entidad.claims and Entidad.claims['P21'] then
   	table.insert(categorias,
   		categorizarWikidata(
   			{['categoría'] = {
   				[6581097] = 'Hombres',
   				[6581072] = 'Mujeres'
   			}
   			}, Entidad.claims['P21'])
   	)
   end
   
   if argumento['títulos secciones'] ==  then -- "no" al llamar a la ficha
   	--if true then return require('Módulo:Tablas').tostring(Ficha) end
   	eliminarTitulosSecciones(Ficha)
   end
   
   namespace = mw.title.getCurrentTitle().namespace
   if categorias[1] and (namespace == 0 or namespace == 104) then
   	return ModuloFicha.infobox(Ficha) .. table.concat(categorias)
   else
   	return ModuloFicha.infobox(Ficha)
   end

end

function eliminarTitulosSecciones (tabla) if tabla.tipo == 'sección' then tabla.titulo = nil end for k, v in pairs( tabla ) do if type(v) == 'table' then eliminarTitulosSecciones(v) end end --if true then return require('Módulo:Tablas').tostring(tabla) end end

function generarcargo(argumento,numero,frame) dato=numero --se requieren dos variables por el primer parámetro if numero == 1 then numero = end --si es el primer cargo, entonces no tiene número if argumento ['cargo'..numero] == nil then titulo= elseif argumento['escudo'..numero] == nil then titulo=argumento['cargo'..numero] -- si no tiene escudo entonces dejar en blanco, si tiene escudo ponerlo else titulo='[[Archivo:'..argumento['escudo'..numero]..'|44x40px]]
'..argumento['cargo'..numero] end if argumento['distrito'..numero] then titulo = titulo..'
por '..argumento['distrito'..numero]..'' end if argumento['embajadorde'..numero] then titulo = titulo .. frame:preprocess('{{Geodatos '.. argumento['embajadorde'..numero] ..' | bandera icono | variante = | tamaño = 44x40px }}') end--{{Geodatos {{{embajadorde}}} | bandera icono | variante = | tamaño = 44x40px }} if argumento['país'..numero] then titulo = titulo .. frame:preprocess('{{Geodatos '.. argumento['país'..numero] ..' | bandera icono | variante = | tamaño = 44x40px }}') end if argumento['subtítulo'..numero] then titulo = titulo .. '
'..argumento['subtítulo'..numero]..'' end periodo = if argumento['inicio'..numero] and argumento['final'..numero] then periodo = argumento['inicio'..numero]..'-'.. argumento['final'..numero] elseif argumento['final'..numero] then periodo = 'Hasta el ' .. argumento['final'..numero] elseif argumento['inicio'..numero] then titulo = titulo .. '
Actualmente en el cargo' periodo = 'Desde el '..argumento['inicio'..numero] end

cadenatexto={tipo='sección',

       	['titulo']=titulo,
           estilotitulo = 'background-color:#E6E6FA;',
           {, periodo},
   	    {'Vicegobernador', argumento['vicegobernador'..numero] },
   	    {'Presidente', argumento['presidente'..numero] },
   	    {'Monarca', argumento['monarca'..numero] },
   	    {'Primer ministro', argumento['primerministro'..numero] },
   	    {'Gobernador', argumento['gobernador'..numero] },
   	    {'Jefe de Gobierno', argumento['jefe'..numero]},
   	    {'Junto a', argumento['juntoa'..numero] },
   	    {'Nominado por', argumento['nominado'..numero] },
   	    {'Designado por', argumento['designado'..numero] },
   	    {'Gabinete', argumento['gabinete'..numero] },
   	    {'Vicepresidente', argumento['vicepresidente'..numero] },
   	    {'Vicepresidenta', argumento['vicepresidenta'..numero] },
   	    {'Viceprimerministro', argumento['viceprimerministro'..numero] },
   	    {'Viceprimerministra', argumento['viceprimerministra'..numero] },
   	    {'Teniente gobernador', argumento['teniente'..numero] },
   	    {'Vicealcalde', argumento['vicealcalde'..numero] },
   	    {'Vicejefe de gobierno', argumento['vicejefe'..numero]},
   	    {'Canciller', argumento['canciller'..numero]},
   	    {'Vicecanciller', argumento['vicecanciller'..numero]},
   	    {'Predecesor', argumento['predecesor'..numero]},
   	    {'Predecesora', argumento['predecesora'..numero]},
   	    {'Sucesor', argumento['sucesor'..numero]},
   	    {'Sucesora', argumento['sucesora'..numero]},
   	    {'Compañero de fórmula', argumento['fórmula'..numero]},
   	    {'Oponente/s', argumento['oponentes'..numero]},
   	    {'En el cargo', argumento['enelcargo'..numero] },
   	    {argumento[dato..'data1'], argumento[dato..'data2'] },
   	    {argumento[dato..'data3'], argumento[dato..'data4'] },

{,'


'}

       }

return cadenatexto

end -- Función que devuelve la lista de los valores de una propiedad en Wikidata formateados function propiedad(idPropiedad,opciones) -- No obtener ninguna propiedad de Wikidata para las personas fallecidas si se accede con el parámetro wikidata=no if not obtenerDatosWikidata then return end

   if Entidad and Entidad.claims and Entidad.claims[idPropiedad] then
   	if not opciones then
   		opciones = {['linkback']='sí'}
   	end
   	
   	opciones.entityId = Entidad.id
   	--if idPropiedad =='P1477' then return require('Módulo:Tablas').tostring(Entidad) end -- FALTA
   	opciones.propiedad = idPropiedad
       valorPropiedad = getPropiedadWikidata(opciones,Entidad.claims[idPropiedad])
       
       if not valorPropiedad then
       	return
       end
       if valorPropiedad:match('%[%[:d:') then
         algunaPropiedadEnlazaWikidata = true
       end
       
      	return valorPropiedad
   end

end

function obtenerEtiquetaWikidata() if Entidad and Entidad.labels and Entidad.labels.es then

       return Entidad.labels.es.value
   end

end

function listaDesplegable(titulo, lista, frame) if not lista then return end formatoprevio='background:transparent'

return frame:preprocess('

' .. titulo .. --'

')

end function seccionDesplegable(titulo, lista, frame,estilotitulo) if not lista then return end

return frame:preprocess('

')

end

function estaEnlazado(que) -- De momento devolver siempre que está enlazado pues falla en por ejemplo: -- |Hijos = 6[nota 1]​ if true then return que end

if not que then return end

for contenido in que:gmatch("%[%[(.+)]]") do if not contenido:match('^:d:') and not contenido:match('^Categoría:') then return que end end end

function formatoOcupacionMasculino(valor, opciones, frame, calificativos) local enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion = ModuloWikidataFormatos.obtenerDatos(valor) return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion, opciones) end

function formatoOcupacionFemenino(valor, opciones, frame, calificativos) local enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion = ModuloWikidataFormatos.obtenerDatos(valor)

-- Para las ocupaciones más frecuentes no se accederá a Wikidata local tablaOcupacionesFemeninas={ ['Q40348' ] = 'abogada', ['Q16631371'] = 'académica', ['Q15253558'] = 'activista', ['Q1476215' ] = 'activista por los derechos humanos', ['Q33999' ] = 'actriz', ['Q10800557'] = 'actriz de cine', ['Q11481802'] = 'actriz de doblaje', ['Q948329' ] = 'actriz de género', ['Q2259451' ] = 'actriz de teatro', ['Q10798782'] = 'actriz de televisión', ['Q2405480' ] = 'actriz de voz', ['Q488111' ] = 'actriz pornográfica', ['Q10873124'] = 'ajedrecista', ['Q4773904' ] = 'antropóloga', ['Q2478141' ] = 'aristócrata', ['Q42973' ] = 'arquitecta', ['Q483501' ] = 'artista', ['Q7019111' ] = 'asistenta social', ['Q11063' ] = 'astrónoma', ['Q18814623'] = 'autobiógrafa', ['Q482980' ] = 'autora', ['Q5716684' ] = 'bailarina', ['Q805221' ] = 'bailarina de ballet', ['Q864503' ] = 'bióloga', ['Q8246794' ] = 'bloguera', ['Q177220' ] = 'cantante', ['Q2865819' ] = 'cantante de ópera', ['Q488205' ] = 'cantautora', ['Q901' ] = 'científica', ['Q15212951'] = 'cineasta', ['Q1086863' ] = 'columnista', ['Q245068' ] = 'comediante', ['Q36834' ] = 'compositora', ['Q2722764' ] = 'conductora radiofónica', ['Q2490358' ] = 'coreógrafa', ['Q18939491'] = 'diarista', ['Q193391' ] = 'diplomática', ['Q2526255' ] = 'directora de cine', ['Q5322166' ] = 'diseñadora', ['Q627325' ] = 'diseñadora gráfica', ['Q462390' ] = 'docente', ['Q214917' ] = 'dramaturga', ['Q188094' ] = 'economista', ['Q974144' ] = 'educadora', ['Q131524' ] = 'emprendedora', ['Q43845' ] = 'empresaria', ['Q186360' ] = 'enfermera', ['Q11774202'] = 'ensayista', ['Q36180' ] = 'escritora', ['Q4853732' ] = 'escritora de literatura infantil', ['Q1281618' ] = 'escultora', ['Q11900058'] = 'exploradora', ['Q13472585'] = 'filántropa', ['Q4964182' ] = 'filósofa', ['Q169470' ] = 'física', ['Q33231' ] = 'fotógrafa', ['Q28389' ] = 'guionista', ['Q201788' ] = 'historiadora', ['Q715301' ] = 'historietista', ['Q82594' ] = 'informática teórica', ['Q16533' ] = 'jueza', ['Q4379701 '] = 'jugadora profesional', ['Q185351' ] = 'jurista', ['Q644687' ] = 'ilustradora', ['Q14467526'] = 'lingüista', ['Q1371925' ] = 'locutora', ['Q2251335' ] = 'maestra', ['Q191633' ] = 'mangaka', ['Q170790' ] = 'matemática', ['Q39631' ] = 'médica', ['Q4610556' ] = 'modelo', ['Q639669' ] = 'música', ['Q6625963' ] = 'novelista', ['Q1930187' ] = 'periodista', ['Q1028181' ] = 'pintora', ['Q728711' ] = 'playmate', ['Q49757' ] = 'poeta', ['Q82955' ] = 'política', ['Q270389' ] = 'presentadora de noticias', ['Q947873' ] = 'presentadora de televisión', ['Q3282637' ] = 'productora de cine', ['Q37226' ] = 'profesora', ['Q121594' ] = 'profesora', ['Q16145150'] = 'profesora de música',

               ['Q1622272' ] = 'profesora de universidad',

['Q212980' ] = 'psicóloga', ['Q3242115' ] = 'revolucionaria', ['Q3068305' ] = 'salonnière', ['Q622807' ] = 'seiyū', ['Q512314' ] = 'socialité', ['Q2306091' ] = 'socióloga', ['Q1141526' ] = 'stripper', ['Q1234713' ] = 'teóloga', ['Q333634' ] = 'traductora', ['Q350979' ] = 'zoóloga', }

local etiquetaOcupacionCorregida = tablaOcupacionesFemeninas[idEntidadOcupacion]

if etiquetaOcupacionCorregida then return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacionCorregida, idEntidadOcupacion, opciones) else -- La ocupación no está en la tabla anterior. Se intenta obtener de la propiedad P2522 en Wikidata de la ocupación etiquetaOcupacionCorregida = ModuloWikidata.getPropiedadEnEspanyol(idEntidadOcupacion, 'P2521') or etiquetaOcupacion return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacionCorregida, idEntidadOcupacion, opciones) .. end end

function obtenerValorCalificativo(Propiedad, Calificativo, ValorPropiedad) -- Obtener el valor del primer calificativo de la propiedad con el valor recibido if not Entidad or not Entidad.claims or not Entidad.claims[Propiedad] then return end

for k,v in pairs(Entidad.claims[Propiedad]) do if v.mainsnak and v.mainsnak.datavalue and v.mainsnak.datavalue.value and v.mainsnak.datavalue.value['numeric-id'] == ValorPropiedad and v.qualifiers and v.qualifiers[Calificativo] and v.qualifiers[Calificativo][1] and v.qualifiers[Calificativo][1].datavalue then return v.qualifiers[Calificativo][1].datavalue.value end

   end		

end

function obtenerFacebook() local Facebook = argumento['facebook'] or argumento['Facebook'] if Facebook then return formatoFacebook(Facebook) end

Facebook = propiedad('P2013', {['valor-función'] = formatoFacebook, ['linkback']='sí'})

if Facebook then return Facebook end

Facebook = obtenerValorCalificativo('P553' -- cuenta en red social

                     , 'P554' --dirección en red social
                     , 2013)   -- Facebook
   
   if Facebook then

return formatoFacebook(Facebook) end end

function obtenerTwitter() local twitter = argumento['twitter'] or argumento['Twitter'] if twitter then return formatoTwitter(twitter) end

twitter = propiedad('P2002', {['valor-función'] = formatoTwitter, ['linkback']='sí'})

if twitter then return twitter end

twitter = obtenerValorCalificativo('P553' -- cuenta en red social

                     , 'P554' --dirección en red social
                     , 2002)   -- Twitter
   
   if twitter then

return formatoTwitter(twitter) end end

function obtenerArgumentosConValor(frame) local original

   if frame == mw.getCurrentFrame() then
       original = frame:getParent().args
   else
       original = frame.args or frame
   end
   

local copia= {}

   for k,v in pairs(original) do
       if v == 'no' then
       	--Si vale "no" dejar en blanco el argumento para no obtener el valor
       	--de Wikidata
       	copia[k] = 
       elseif v~= then
       	--Si está en blanco dejarlo a nil para obtener en su caso el valor de 
       	-- Wikidata si no hay otro argumento con un nombre similar
           copia[k] = original[k]
       end
   end	
   
   return copia

end


function obtenerImagenWikidata() local imagen, valorImagen, piesDeImagen, k, pieDeImagen if not Entidad then return end

-- Obtener la primera imagen en Wikidata de la persona local imagen = elementoTabla(Entidad, 'claims','P18',1)

if not imagen then return end

-- Obtener el nombre de la imagen valorImagen = elementoTabla(imagen, 'mainsnak','datavalue','value') -- Por ejemplo, imagen.jpg

-- Obtener los pies de la imagen, uno por idioma piesDeImagen = elementoTabla(imagen, 'qualifiers','P2096')

-- Encontrar el pie en español (aquel con datavalue.value.language = "es") if piesDeImagen then for k,pieDeImagen in pairs(piesDeImagen) do if pieDeImagen.datavalue.value.language=='es' then -- devolver la imagen y el texto del pie de la imagen en español return valorImagen, pieDeImagen.datavalue.value.text end end end

-- Si no hay pie de imagen en español comprueba si hay fecha especificada para la imagen piesDeImagen = elementoTabla(imagen, 'qualifiers', 'P585')

if piesDeImagen and piesDeImagen[1] then return valorImagen, nombre .. ' en ' .. require('Módulo:Wikidata/Fecha').FormateaFechaHora(piesDeImagen[1].datavalue.value, {['formatoFecha']='año',['enlace']='no'}) end

-- Sin pie de imagen en español return valorImagen end

function obtenerFechaWikidata(propiedad) local declaracionesFecha = elementoTabla(Entidad, 'claims', propiedad)

-- No devolver la edad si no hay ninguna o si hay varias fechas. if not declaracionesFecha or declaracionesFecha[2] then return end

local declaracionFecha = declaracionesFecha[1]

if not declaracionFecha then return end

local valorFecha = elementoTabla(declaracionFecha, 'mainsnak', 'datavalue', 'value')

if not valorFecha then return end

--La precisión debe llegar hasta el día if valorFecha.precision ~= 11 then return end

local iso = valorFecha.time

if not iso then return end

local fecha = {}

fecha.calendario = valorFecha.calendarmodel fecha.anyo = tonumber(iso:sub(2, 5)) fecha.mes = tonumber(iso:sub(7,8)) fecha.dia = tonumber(iso:sub(10,11))

return fecha end

function obtenerEdadWikidata(propiedadFin) local fechaNacimiento = obtenerFechaWikidata('P569')

if not fechaNacimiento then return end

if propiedadFin then local fechaFin = obtenerFechaWikidata(propiedadFin)

if fechaFin and fechaFin.calendario == fechaNacimiento.calendario then

return edad(fechaNacimiento, fechaFin) end else return edad(fechaNacimiento) end end

function noAlargar(que) if not que then return end

return '

' .. que .. '

'

end

function plural(que, singular, plural, pClase) if not que then return {}

elseif que:match(',') or que:match('

  • ') then return {plural, que, clase=pClase} else return {singular, que, clase=pClase} end end function obtenerPremios() if not Entidad then return end local moduloWikidataFormatos = require('Módulo:Wikidata/Formatos') local obtenerDatos = moduloWikidataFormatos.obtenerDatos local enlazar = moduloWikidataFormatos.enlazar local moduloWikidata = require('Módulo:Wikidata') local formatoDatoWikidata = moduloWikidata.formatoDato local moduloTablas = require('Módulo:Tablas') local elementoTabla = moduloTablas.elemento local ordenarTabla = moduloTablas.ordenar local agruparTabla = moduloTablas.agrupar local opcionesFecha= {['formatoTexto']='mayúscula', ['formatoFecha'] = 'año', ['enlace']='no'} local noMostrarPremio={ ['Q11415564'] = true, -- doctor honoris causa } -- Obtenemos los datos primarios (ids y años de los premios) local premios = {} local declaracionPremios = elementoTabla(Entidad, 'claims', 'P166') if not declaracionPremios then return end local premio, idPremio, anyo -- 1. Identificadores de los premios y años -- Se eliminan los premios de la tabla noMostrarPremio for k,v in pairs(declaracionPremios) do idPremio = elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'id') if idPremio and not noMostrarPremio[idPremio] then premio = {} premio.id = idPremio anyo = formatoDatoWikidata(elementoTabla(v, 'qualifiers','P585',1), opcionesFecha , {}) if anyo ~= then premio.anyo = anyo end table.insert(premios, premio) end end ordenarTabla(premios, {'id', 'anyo'}) premios = agruparTabla(premios, 'id', 'anyo') -- 2. Añado el nombre completo del premio, el enlace y la categoría local nombreCompleto, nombre, categoria, enlace for k,v in pairs(premios) do if v.anyo then v.primerAnyo = v.anyo[1] or else v.primerAnyo = end nombreCompleto = (mw.wikibase.label( v.id ) or ):gsub(".", string.upper,1) -- El primer carácter en mayúscula enlace = mw.wikibase.sitelink( v.id ) -- Corregir el nombre del premio nombreCompleto = nombreCompleto:gsub('Premios ', 'Premio ') nombreCompleto = nombreCompleto:gsub('Anexo:', ) -- Determinar si es una categoría de un premio nombre, categoria = nombreCompleto:match('^(.*)%s+(a%s.*)$') -- Ejemplo: Premio Nébula a la mejor novela corta --> Premio Nébula if not nombre then nombre, categoria = nombreCompleto:match('^(.*)%s+(al%s.*)$') -- Ejemplo: Premio Hugo al mejor relato --> Premio Hugo end if nombre then v.nombre = nombre v.categoria = { ['id'] = v.id, ['anyo'] = v.anyo, ['nombre'] = categoria, ['enlace'] = enlace, ['nombreCompleto'] = nombreCompleto, } v.id = nil v.anyo = nil else v.nombre = nombreCompleto v.enlace = enlace end end ordenarTabla(premios, {'nombre', 'primerAnyo'}) premios = agruparTabla(premios, 'nombre', 'categoria') ordenarTabla(premios, {'primerAnyo'}) --if true then return require('Módulo:Tablas').tostring(premios) end -- 3. Doy formato eliminando algunos premios local premiosFormateados = {} local premioFormateado, categoriaFormateada, categoriasPremio local nombrePremio for k,premio in ipairs(premios) do nombrePremio = premio.nombre if nombrePremio:match('^[dD]octor honoris causa') or nombrePremio:match('^[hH]onorary doctor') or (argumento['premios emmy'] and nombrePremio:match('Emmy')) or (argumento['premios grammy'] and nombrePremio:match('Grammy')) or (argumento['premios cannes'] and nombrePremio:match('Cannes')) or (argumento['premios globo de oro'] and nombrePremio:match('Globo')) or (argumento['premios tony'] and nombrePremio:match('Tony')) or (argumento['premios óscar'] and nombrePremio:match('Óscar')) or (argumento['premios bafta'] and nombrePremio:match('BAFTA')) or (argumento['premios sag'] and nombrePremio:match('Sindicato de Actores')) or (argumento['premios san sebastian'] and nombrePremio:match('San Sebastián')) then -- No mostrar elseif premio.categoria then categoriasPremio = {} for k2,categoria in ipairs(premio.categoria) do categoriaFormateada = enlazar(categoria.enlace, categoria.nombre, categoria.id) -- Añadir los años entre paréntesis if categoria.anyo then categoriaFormateada = categoriaFormateada .. ' (' .. mw.text.listToText( categoria.anyo, ', ',' y ' ) .. ')' end table.insert(categoriasPremio, categoriaFormateada) end table.insert(premiosFormateados, premio.nombre .. ' ' .. mw.text.listToText( categoriasPremio, ', ',' y ' )) else premioFormateado = enlazar(premio.enlace, premio.nombre, premio.id) if premio.anyo and premio.anyo[1] then premioFormateado = premioFormateado .. ' (' .. mw.text.listToText( premio.anyo, ', ',' y ' ) .. ')' end table.insert(premiosFormateados, premioFormateado) end end return lapizWikidata('
    • ' .. mw.text.listToText( premiosFormateados, '
    • ','
    • ' ),Entidad.id,'P166') .. '
    '

    end

    function siNoEs(que, valor) if not que then return end

    if not que:match(valor) then return que end end

    return z

    1. Clasificación FIDE
    2. Nicanor Parra: Cronología íntima

    Error en la cita: Existen etiquetas <ref> para un grupo llamado «nota», pero no se encontró la etiqueta <references group="nota"/> correspondiente.