Ir al contenido

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

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
mostrar la etiqueta "Alumnos" en vez de "Estudiantes" si la persona no es un profesor
Arreglo problema con valores nulos
Línea 564: Línea 564:
--Profesores
--Profesores
{'Estudiantes doctorales', argumento['estudiantes doctorales'] or propiedad('P185', debeExistir)},
{'Estudiantes doctorales', argumento['estudiantes doctorales'] or propiedad('P185', debeExistir)},
{(ocupacionOArea:find('[Pp]rofesor') and 'Estudiantes') or 'Alumnos', argumento['estudiantes'] or propiedad('P802', debeExistir)},
{(ocupacionOArea and ocupacionOArea:find('[Pp]rofesor') and 'Estudiantes') or 'Alumnos', argumento['estudiantes'] or propiedad('P802', debeExistir)},
-- Periodistas, presentadores y videoblogueros
-- Periodistas, presentadores y videoblogueros

Revisión del 21:45 1 jun 2019

Este módulo implementa la plantilla {{Ficha de persona}}.

  • Esta documentación explica el funcionamiento del módulo desde un contexto técnico; para instrucciones de uso de la plantilla, véase la página de documentación sobre la plantilla.
  • La página de discusión de este módulo debe reservarse para cuestiones más técncias sobre el módulo; úsese la discusión de la plantilla para discutir sobre datos y parámetros.

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   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)
	--
	['religioso']  = {['estiloTituloFicha'] = 'background-color:#ffde00; color:#000', ['otroColorSiFallecido'] = true},
	['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},
	['torero'] = {['estiloTituloFicha'] = 'background-color: #800000; color: white', ['otroColorSiFallecido'] = true},
	['videojuego']  = {['tipoCabeceraFicha'] = 'cabecera videojuego', ['estiloTituloFicha'] = 'background-color:#CCF;color:#000', ['otroColorSiFallecido'] = true},
	['youtuber']  = {['tipoCabeceraFicha'] = 'youtuber', ['estiloTituloFicha'] = 'background-color:#B60000;color:#fff', ['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 	= '[[Campeonato del mundo de ajedrez|Campeona del mundo]]'
    	etiquetaAlumnoDe    = 'Alumna de'
    	etiquetaEducadoEn   = 'Educada en'
    	funcionOcupacion    = formatoOcupacionFemenino
    	etiquetaVeneradoEn  = 'Venerada en'
    else
    	etiquetaAnyosActivo = 'Años activo'
    	etiquetaConocidoPor = 'Conocido por'
    	etiquetaInfluencias = 'Influido por'
    	etiquetacampeon		= '[[Campeonato del mundo de ajedrez|Campeón del mundo]]'
    	etiquetaAlumnoDe    = 'Alumno de'
    	etiquetaEducadoEn   = 'Educado en'
    	funcionOcupacion    = formatoOcupacionMasculino
    	etiquetaVeneradoEn  = 'Venerado en'
    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, {'', '<hr>'})
		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 .. '<br/>' .. 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('[Pp]apa') or ocupacionOArea:find('[Oo]bispo') or
    ocupacionOArea:find('[Cc]ardenal') or ocupacionOArea:find('[Pp]atriarca') then
    	cabecera = 'religioso'
    elseif ocupacionOArea:find('[Tt]orero') then
    	cabecera = 'torero'
    elseif ocupacionOArea:find('[Vv]ideojuego') then
    	cabecera = 'videojuego'
    elseif ocupacionOArea:find('[Yy]outuber') then
    	cabecera = 'youtuber'
    else
    	cabecera = 'por defecto'
    end

    local OrdenacionDiaconal
    if argumento['diaconado por'] then
        OrdenacionDiaconal = argumento['diaconado'] .. '<small> por ' ..argumento['diaconado por'].. '</small>'
    else
        OrdenacionDiaconal = argumento['diaconado']
    end

    local OrdenacionSacerdotal -- ?item P793 Q41463697 Q585
    if argumento['presbiterado por'] then
        OrdenacionSacerdotal = argumento['presbiterado'] .. '<small> por ' ..argumento['presbiterado por'].. '</small>'
    else
        OrdenacionSacerdotal = argumento['presbiterado']
    end

    local OrdenacionEpiscopal -- ?item P793 Q125375 Q585
    if argumento['episcopado por'] then -- ?item P793 Q125375 Q1598
        OrdenacionEpiscopal = argumento['episcopado'] .. '<small> por ' ..argumento['episcopado por'].. '</small>'
    else
        OrdenacionEpiscopal = argumento['episcopado']
    end

    local Cardenalato -- ?item P793 Q41154026 Q585
    if argumento['cardenalato por'] then -- ?item P793 Q41154026 Q748
        Cardenalato = argumento['cardenalato'] .. '<small> por ' ..argumento['cardenalato por'].. '</small>'
    else
        Cardenalato = argumento['cardenalato']
    end

    local EscudoTitulo, Escudo
    if cabecera == 'religioso' and argumento['escudo'] or propiedad('P94') then -- ¿deberíamos usar P237 en su lugar?
        Escudo = argumento['escudo'] or propiedad('P94', {})
        EscudoTitulo = 'Escudo'
    else
        EscudoTitulo = ''
    end
    local LemaEscudo = argumento['lema'] or propiedad('P1451')
    if LemaEscudo and argumento['lema traducido'] then
        LemaEscudo = LemaEscudo .. '<small style="display: block;"> por ' ..argumento['lema traducido'].. '</small>'
    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('<ref> [http://ratings.fide.com/toplist.phtml Clasificación FIDE] </ref>')
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 <small> 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,
            {'Nombre religioso', argumento['nombre religioso'] or propiedad('P1635')},
            {'Apodo',              argumento['apodo'] or propiedad('P1449')},
            {'Otros&nbsp;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', {['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback'] = 'sí'}) },

            {'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'},
        	{'Afiliaciones',   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)},
        	{'[[Aumento de mamoplastia|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},
            {etiquetaEducadoEn, 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 argumento['años actividad'] or
        	                   formatoPeriodo({ -- falta que salga el lápiz
        	                   		['P580']={[1]=elementoTabla(Entidad, 'claims','P2031',1,'mainsnak')},
        	                   		['P582']={[1]=elementoTabla(Entidad, 'claims','P2032',1,'mainsnak')}
        	                   	})},
        	{tipo='sección',
            ['título'] = 'Información religiosa',
            {'[[Sacramento del orden|Ordenación diaconal]]', OrdenacionDiaconal},
            {'Ordenación sacerdotal', OrdenacionSacerdotal},
            {'Ordenación episcopal', OrdenacionEpiscopal},
            {'Proclamación cardenalicia', Cardenalato}, 
            {'Título cardenalicio', argumento['título cardenalicio']},
            {'Iglesia', argumento['iglesia']},
            {'[[Secularización]]', argumento['secularización']},
            {'[[Beatificación]]', argumento['beatificación']},
            {'[[Canonización]]', argumento['canonización'] or propiedad('P411')},
            {'Festividad', argumento['festividad'] or propiedad('P841')},
            {'Atributos', argumento['atributos']},
            {etiquetaVeneradoEn, argumento['venerado en'] or propiedad('P1049')},
            {'Patronazgo', argumento['patronazgo'] or propiedad('P417')},
            {'Santuario', argumento['santuario']},
        	},
        	-- Sección artística (actores y ¿presentadores?)
        	{tipo='sección',
        		['titulo']   = seccionartistica,
            	estilotitulo = estiloTituloSecciones,
            	{'Rol debut'    , argumento['rol debut']},
            	{'Año de debut' , argumento['rol debut'] and argumento['año debut']},
            	--{'Año de retiro', argumento['año retiro'] or propiedad('P2032')},
            	{'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)},
            {(ocupacionOArea and ocupacionOArea:find('[Pp]rofesor') and 'Estudiantes') or 'Alumnos', argumento['estudiantes'] or propiedad('P802', debeExistir)},
            
            -- Periodistas, presentadores y videoblogueros
            {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']},
            },
            -- Videoblogueros, en especial youtubers
            {tipo='sección',
            	{'Vídeos', argumento['videos']},
            	{'Suscriptores', argumento['suscriptores']},
            	{'Vistas Totales', argumento['vistas totales']},
            },
            -- 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']},
            {'[[Autor de nombre científico#Abreviatura del autor|Abreviatura en botánica]]',
            	argumento['abreviatura en botánica'] or propiedad('P428')},
            {'[[Autor de nombre científico|Abreviatura en zoología]]',
            	argumento['abreviatura en zoología'] or propiedad('P835')},
            {'[[Autor de nombre científico|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)},
            -- Toreros
            {'Debut becerrista', argumento['debut becerrista']},
            {'Debut [[picador]]', argumento['debut picador']},
            {'Debut [[novillero]]', argumento['debut novillero']},
            {'Alternativa', argumento['alternativa']},
            {'Confirmación de alternativa', argumento['alternativa confirmación']},
            {'Apoderado', argumento['apoderado']},
            {'Escalafón general', argumento['escalafón']},
            {'Invención', argumento['invención']},
            {'Triunfos', argumento['triunfos']},
            {'Retirada definitiva', argumento['retirada']},
            -- Ajedrecistas
            {tipo='sección',
            	{'Título',             	argumento['título']		or argumento['titulo']}, -- <!-- Su majestad, primera dama, etc -->
            	{etiquetacampeon,		argumento['campeón'] 	or argumento['campeon']},
            	{'[[Sistema de puntuación Elo|Elo]]',   		propiedad('P1087',{['formatoUnidad'] = 'número', ['calificativo']   = 'P585', ['linkback']='sí', ['rangoMayor'] = 'sí', ['ordenar'] = 'por fecha', ['uno'] = 'último'}) or argumento['elo'] }, -- 
            	{'[[Sistema de puntuación Elo|Mejor elo]]',   	argumento['mejor elo']},
            	{'Escalafón FIDE',	    rankingajedrez},
            	{'Mejor escalafón',   	argumento['mejor ranking']},
            	{'Término',            	argumento['término'] or -- <!--Años bajo los cuales la persona tuvo el título (el de arriba xD) -->
        	    		               	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']},
            {'[[Premios Globo de Oro|Globos de Oro]]', argumento['premios globo de oro']},
            {'[[Premios BAFTA]]', argumento['premios bafta']},
            {'[[Premios Emmy]]', argumento['premios emmy']},
            {'[[Premios del Sindicato de Actores|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']},
            {'[[TP de Oro]]', argumento['premios tp de oro']},
            {'[[Premios Ondas]]', argumento['premios ondas']},
            {'[[Premios Iris (España)|]]', argumento['premios atv']},
            {'[[Premios Protagonistas]]', argumento['premios protagonistas']},
            {'[[Antena de Oro|Premios Antena de Oro]]', argumento['']},
            {'[[Premios Micrófono de Oro]]', argumento['premios micrófono de oro']},
            {'[[Premio APM al Mejor Periodista del Año|Premio Víctor de la Serna]]', argumento['premios víctor de la serna']},
            {'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 <br> 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 .. '|175x80px]]'))}, -- 150 px como en la ficha de escritor en vez de 128
        -- Web
        {tipo='sección',
            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í'}))},
        },
        {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'}
        },
        -- Sección hipotética, las imágenes inferiores no se muestran dentro de una sección
        {'',
            EscudoTitulo or '',
            estilodatos = 'text-align: center; font-weight: bold;' .. (estiloTituloSecciones or ''),
        },
        imageninferior = Escudo,
        ['tamañoimageninferior'] = '110px',
        pieinferior = LemaEscudo,
        --{'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, '[[Categoría:Wikipedia:Páginas con parámetros a reemplazar de la plantilla ficha de persona ]]')
    end
    
    if (argumento['fecha de nacimiento'] or propiedad('P569', enMayusculasO)) and not fallecimiento then
    	table.insert(categorias, '[[Categoría:Personas vivas]]')
    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]]<br />'..argumento['cargo'..numero] end
	if argumento['distrito'..numero] then titulo = titulo..'<br /><small>por '..argumento['distrito'..numero]..'</small>' end
	if argumento['embajadorde'..numero] then titulo = titulo .. frame:preprocess('{{bandera|'.. argumento['embajadorde'..numero] ..'|tamaño=44x40px}}') end--{{bandera|{{{embajadorde}}}|tamaño=44x40px}} 
	if argumento['país'..numero] then titulo = titulo .. frame:preprocess('{{bandera|'.. argumento['país'..numero] ..'|tamaño=44x40px}}') end
	if argumento['subtítulo'..numero] then titulo = titulo .. '<br /><small>'..argumento['subtítulo'..numero]..'</small>' 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 .. '<br /> <small> Actualmente en el cargo</small>'
		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'] },
    	    {'','<hr>'}
        }
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('{{lista desplegable|título=' .. titulo .. 
		--'|marco_estilo=border:0; padding:0; border-top:1px solid #c0c0c0;' ..
		'|marco_estilo=border:0; padding:0;' ..
		'|título_estilo=background-color:#8DB1C3;color:#FFF; text-align:left|lista_estilo=padding-left:33%;text-align:left; display:none|1='
		.. lista .. '}}')
end
function seccionDesplegable(titulo, lista, frame,estilotitulo)
	if not lista then
		return
	end
	return frame:preprocess('{{Sección desplegable|título=' .. titulo .. 
		--'|marco_estilo=border:0; padding:0; border-top:1px solid #c0c0c0;' ..
		'|datos=<div style="text-align:left;margin: 1px; padding: 2px; border:1px">'.. lista .. '</div>|estilotitulo='.. (estilotitulo or '') ..';}}')
end

function estaEnlazado(que)
	-- De momento devolver siempre que está enlazado pues falla en por ejemplo:
	-- |Hijos = 6{{#tag:ref|Entre ellos [[Catalina Parra|Catalina]], [[Colombina Parra|Colombina]], Juan de Dios y Ricardo Nicanor «Chamaco».<ref>[http://www.caras.cl/libros/nicanor-parra-cronologia-intima/ Nicanor Parra: Cronología íntima]</ref>|group=nota}}
	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',
		['Q2412523' ] = 'matadora',
		['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',
		['Q549322'  ] = 'torera',
		['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) .. '[[Categoría:Wikipedia:Ocupaciones femeninas]]'
	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 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 '<div style="width:14.66em;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;">' .. que .. '</div>'
end

function plural(que, singular, plural, pClase)
	if not que then
		return {}
	elseif que:match(',') or que:match('</li><li>') 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 .. '&nbsp;<small>(' .. mw.text.listToText( categoria.anyo, ', ',' y ' ) .. ')</small>'
				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 .. '&nbsp;<small>(' .. mw.text.listToText( premio.anyo, ', ',' y ' ) .. ')</small>'
			end
			table.insert(premiosFormateados, premioFormateado)
		end
	end
	
	-- No obtener los premios de Wikidata si hay más de media docena.
	if premiosFormateados[7] then
		return
	end
	
	return lapizWikidata('<ul><li>' .. mw.text.listToText( premiosFormateados, '</li><li>','</li><li>' ),Entidad.id,'P166') .. '</li></ul>'
end

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

return z