Módulo:Zona de pruebas/Rojasyesid/Fichadepersona

Este módulo no tiene página de documentación[crear]
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 del libro.
--                         Ver Wikidata:WikiProject Books para las propiedades posibles
local algunaPropiedadEnlazaWikidata -- Para alguna propiedad no existe la etiqueta ni el enlace mostrándose algo de la forma d:...
local datosautoridad={}
-- Módulos utilizados
local ModuloArgumentos       = require('Módulo:Argumentos')
local ModuloFicha            = require('Módulo:Ficha')
local ModuloFormatoTexto     = require('Módulo:Formato texto')
local ModuloIdentificadores  = require('Módulo:Identificadores')
local ModuloPaginas          = require('Módulo:Páginas')	
local ModuloWikidataFormatos = require('Módulo:Wikidata/Formatos')	
local ModuloWikidata         = require('Módulo:Wikidata')
local ModuloTablas           = require('Módulo:Tablas')
local ModuloURL              = require('Módulo:URL')
-- Constantes
local enMayusculas    = {['formatoTexto'] = 'mayúscula'}
local contadorocupaciones = 0 --Implementa la lógica de si la persona tiene más de dos ocupaciones la ficha tenga un encabezado estandár
local enMayusculasO   = {['formatoTexto'] = 'mayúscula', ['conjunción']=' o '}
local listaNoOrdenada = {['lista'] = 'no ordenada'} --, ['debeExistir'] = 'sí'
local lugar           = {['conjunción']=' o ', ['valor-función'] = ModuloWikidataFormatos.formatoLugar}
local debeExistir     = {['debeExistir'] = 'sí'}
local conPeriodo      = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = ModuloWikidataFormatos.formatoPeriodo, ordenar='por fecha'}
local conPeriodoDebeExistir = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = ModuloWikidataFormatos.formatoPeriodo, ordenar='por fecha', ['debeExistir'] = 'sí'}
function z.Ficha(frame)
    --  Hacer que funcione la función formatBandera	 y formatoGentilicio
    ModuloWikidata:setFrame(frame)  -- No funciona si se pone ModuloWikidata.setFrame(marco)    
    
    -- Obtener una copia de los argumentos eliminando los argumentos sin valor
    local argumento = ModuloArgumentos.obtenerArgumentosConValor(frame)
    -- Obtener datos complejos
    
    -- Obtener los datos de la página donde se inserta la ficha de Wikidata.
    Entidad = mw.wikibase.getEntityObject() or {}
    
    --if true then
    --	return ModuloTablas.tostring(Entidad)
    --end
    
    educacion = argumento['educación'] or argumento['educacion'] or propiedad('P512',{ ['calificativo'] = 'P512'}) 
    almamater = argumento['alma máter'] or argumento['alma_mater'] or argumento['alma mater'] or argumento['almamáter']
            	propiedad('P69', {['enlace']='sí', ['lista'] = 'no ordenada'})

    if propiedad('P21') == 'femenino' then
    	etiquetaAnyosActivo = 'Años activa'
    	etiquetaConocidoPor = 'Conocida por'
    	etiquetaInfluencias = 'Influida por'
    	funcionOcupacion    = formatoOcupacionFemenino
    else
    	etiquetaAnyosActivo = 'Años activo'
    	etiquetaConocidoPor = 'Conocido por'    	
    	etiquetaInfluencias = 'Influido por'
    	funcionOcupacion    = formatoOcupacionMasculino
    end

    area = argumento['área'] or argumento['area'] or argumento['especialidad']

if argumento['cargo']==nil then
datosautoridad['cargo1']={tipo='sección',{'',''},}
else
saltoautoridad='<hr>'
datosautoridad['cargo1']=generarcargo(argumento,1)
argumento['predecesor']= nil
argumento['sucesor']= nil
end
for i=2, 10 do
	campovacio=0
	if argumento['cargo'..i]==nil and argumento['inicio'..i]==nil  then
	   datosautoridad['cargo'..i]={tipo='sección',{'',''},}
	else
	datosautoridad['cargo'..i]=generarcargo(argumento,i)
	end
end

    -- La ocupación solo se obtiene 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".

    -- Pendiente averiguar si en algún artículo se informan los campos de área y de ocupación a la vez.
    -- Si es así mostrar solo uno de los dos.
    
    ocupacion      = argumento['ocupación'] or argumento['Ocupación']  or (not area and 
    	             propiedad('P106', {['formatoTexto'] = 'mayúscula', ['valor-función']=funcionOcupacion, ['calificativo'] = ModuloWikidataFormatos.formatoPeriodo,eliminar='actor'})) 
    	             or argumento['profesión']
    ocupacionOArea = ocupacion or area 
    
    nombre = argumento['nombre'] or argumento['Nombre'] or
             obtenerEtiquetaWikidata() or 
             ModuloPaginas.nombrePagina({desambiguar='sí'})
             
    -- Informar los datos de nacimiento y de fallecimiento
    fechaNacimiento = argumento['fecha de nacimiento'] or argumento['fechadenacimiento'] or
                      argumento['fecha_nacimiento']    or argumento['Fecha_nacimiento']  or 
                      argumento['fecha nacimiento']    or argumento['fechadenacimiento'] or
                      argumento['fechanac']   or propiedad('P569', enMayusculasO)
    lugarNacimiento = argumento['lugar de nacimiento'] or argumento['lugardenacimiento'] or
                      argumento['lugar']               or 
                      argumento['lugar_nacimiento']    or argumento['Lugar_nacimiento'] or 
                      argumento['lugar nacimiento']    or argumento['lugarnac'] or
                      propiedad('P19', lugar)
    
    if fechaNacimiento and lugarNacimiento then
        nacimiento = fechaNacimiento .. '<br />' .. lugarNacimiento
    else
    	nacimiento = fechaNacimiento or lugarNacimiento
    end
    
    fechaFallecimiento = argumento['fecha de fallecimiento'] or argumento['fechadefallecimiento'] or 
                         argumento['fecha fallecimiento']    or argumento['fecha_fallecimiento']  or argumento['Fecha_fallecimiento']  or
                         argumento['fecha de defunción']     or
                         argumento['fecha_muerte']           or argumento['fechamuerte']           or
                         propiedad('P570', enMayusculasO)
    lugarFallecimiento = argumento['lugar de fallecimiento'] or argumento['lugardefallecimiento'] or
                         argumento['lugar fallecimiento']    or argumento['lugar_fallecimiento']  or argumento['Lugar_fallecimiento']  or
                         argumento['lugar de defunción']     or
                         argumento['lugar_muerte']           or argumento['lugarmuerte']           or
                         propiedad('P20', lugar)
    
    if fechaFallecimiento and lugarFallecimiento then
        fallecimiento = fechaFallecimiento .. '<br />' .. lugarFallecimiento
    else
    	fallecimiento = fechaFallecimiento or lugarFallecimiento
    end
    
    if argumento['padres'] then
    	padres = estaEnlazado(argumento['padres'])
    else
    	padre = propiedad('P22') --, debeExistir)
    	madre = propiedad('P25') --, debeExistir)
    	
    	if padre and madre then
    		padres = padre .. '<br/>' .. madre
    	else
    		padres = padre or madre
    	end
    end
    
    firma = argumento['firma'] or argumento['Firma'] or
        	propiedad('P109')
    
    web = propiedad('P856') or 
          argumento['web'] or argumento['página web'] or argumento['website'] or argumento['sitio web'] or argumento['sitioweb']
          
    twitter           = argumento['twitter']  or argumento['Twitter'] or obtenerTwitter()
    facebook          = argumento['facebook'] or argumento['Facebook'] or obtenerFacebook()
    imdb              = (argumento['imdb'] and ('nm' .. argumento['imdb']))     or propiedad('P345',{uno='sí'})
    catholicHierarchy = propiedad('P1047')
    
    -- Título según la ocupación y si la persona ha muerto      
    -- No mostrar para los artistas ningún icono en la cabecera de la ficha
    
    if ocupacionOArea and (ocupacionOArea:find('[Aa]rtista') or ocupacionOArea:find('[Pp]intor') or 
    	ocupacionOArea:find('[Ee]scultor') or ocupacionOArea:find('[Pp]intura') or ocupacionOArea:find('[Ee]scultura')
    	or ocupacionOArea:find('[Ff]otograf')
    	or ocupacionOArea:find('[Aa]rtes visuales')
    	) then
    	contadorocupaciones=1
        tipocabecera = ''
        estilotitulo = 'background-color:#8DB1C3;color:#FFF'
    end
    if ocupacionOArea and (ocupacionOArea:find('[Ee]scritor') or ocupacionOArea:find('[Nn]ovelista') or 
    	ocupacionOArea:find('[Pp]oeta') or ocupacionOArea:find('[Dd]ramaturgo')) then
    	contadorocupaciones=contadorocupaciones+1
        tipocabecera = 'libro'
        estilotitulo = 'background-color:#4c6099;color:#FFF'
    end
   --Pendiente por poner el estilo de POLITICO!
    if contadorocupaciones~=2 and ocupacionOArea and (ocupacionOArea:find('[Pp]olítico')) then
    	contadorocupaciones=contadorocupaciones+1
        tipocabecera = 'libro'
        estilotitulo = 'background-color:#4c6099;color:#FFF'
    end
    if contadorocupaciones~=2 and ocupacionOArea and ocupacionOArea:find('[Pp]eriodista') then
    	contadorocupaciones=contadorocupaciones+1
    	tipocabecera   = 'revista'
    	estilotitulo   = 'background-color:#ED8;color:#FFF'
   	end
    if contadorocupaciones~=2 and ocupacionOArea and ocupacionOArea:find('[Dd]iseñador') then
    	contadorocupaciones=contadorocupaciones+1
    	estilotitulo     = 'background-color:#ccccff' 
    end
    if contadorocupaciones~=2 and ocupacionOArea and (ocupacionOArea:find('[Aa]ctor') or ocupacionOArea:find('[Aa]ctriz')) then
    	contadorocupaciones=contadorocupaciones+1
    	tipocabecera   = 'cine'
    	estilotitulo = 'background-color:#f9e999'
    end
    if contadorocupaciones == 2 or contadorocupaciones==0 then
    	tipocabecera = 'humano fn'
        estilotitulo = 'background-color:#8DB1C3;color:#FFF'
    end

    if fechaFallecimiento or lugarFallecimiento then
    	estilotitulo = 'background-color:#c0c0c0;color:#000'
    end
    estilocabecera = estilotitulo
    if argumento['cargo'] then
    tipocabecera= nil
    estilocabecera= 'background-color:transparent;'
	--estilotitulo   ='background-color:#8DB1C3;color:#FFF'
     estilotitulo   ='background-color:#E6E6FA;'
end
    if argumento['premios globo de oro'] then
    	eliminarpremio='lobo de Oro'
    end
    
    local Ficha = {
        clase           = 'biography vcard',

        -- Título
        tipocabecera    = tipocabecera,                   
        titulo          = nombre,
        colorfondo      = colorfondo,        
        estilotitulo    = estilocabecera,
        --Imagen
        --De momento no se pone una raya como en la ficha de escritor tras la imagen
        imagen          = argumento['imagen']  or argumento['Imagen'] or 
                          argumento['foto']    or 
                          propiedad('P18', {uno='sí'}),
        ['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             = argumento['pie de imagen'] or argumento['descripción'] or
                          argumento['pie de foto'] or argumento['piedefoto'] or
                          argumento['textoimagen'] or argumento['TextoImagen'] or argumento['texto_imagen'] or
                          argumento['pie de foto'] or argumento['pieimagen']
                          ,
        -- 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;',
        {tipo='sección',
            {'', saltoautoridad},
        },
       	datosautoridad['cargo1'],
 		datosautoridad['cargo2'],
 		datosautoridad['cargo3'],
 		datosautoridad['cargo4'],
 		datosautoridad['cargo5'],
 		datosautoridad['cargo6'],
 		datosautoridad['cargo7'],
 		datosautoridad['cargo8'],
 		datosautoridad['cargo9'],
 		datosautoridad['cargo10'],
        {tipo='sección',
        	['titulo']   = 'Información personal',   -- Ver la ficha de noble o la ficha de diseñador
            estilotitulo = estilotitulo,
            {'Nombre de nacimiento', propiedad('P1477') or 
        	            propiedad('P513')  or
        	            argumento['nombre completo']   or argumento['nombre_completo'] or argumento['Nombre_completo'] or
        	            argumento['nombre nacimiento'] or argumento['nombredenacimiento'] or argumento['nombre de nacimiento'] or
        	            argumento['nombre_real']
    	    },
            {'Nombre nativo',      argumento['nombre nativo'] or propiedad('P1559')}, -- Es para el nombre en la escritura nativa
            																		  -- Habría que coger también el idioma
            {'Apodo',              argumento['apodo']},
            {'Otros&nbsp;nombres', argumento['otros nombres'], -- ¿No es lo mismo que el apodo?????
        	                       clase='nickname'},        	                   
            {'Nacimiento',         nacimiento},
            {'Fallecimiento',      fallecimiento},
            {'Causa de muerte',    argumento['causa muerte'] or
        	                       propiedad('P509', enMayusculas) or 
        	                       propiedad('P1196', enMayusculas)}, -- circunstancias de la muerte

            {'Residencia',     argumento['residencia'] or propiedad('P551'),
        	                   clase='etiqueta'},        	
            {'Nacionalidad',   argumento['nacionalidad'] or argumento['Nacionalidad'] or --Pendiente hacer que salga el gentilicio
        	                   propiedad('P27', {['valor-función'] = ModuloWikidataFormatos.formatoGentilicio, 
        	                   	                 ['formatoTexto'] = 'mayúscula',  
        	                   	                 ['calificativo'] = ModuloWikidataFormatos.formatoPeriodo,
        	                   	                 ordenar='por fecha'}), 
        	                   clase='category'},        
            {'Ciudadanía',     argumento['ciudadanía'] or -- ¿No es lo mismo que la nacionalidad?
        	                   argumento['ciudadania'],
        	                   clase='category'},        	                   
            {'Etnia',          propiedad('P172') or 
        	                   argumento['etnia'],
        	                   clase='category'},           	                   
            {'Creencias religiosas', propiedad('P140', enMayusculas) or 
        	                   argumento['religión'] or
        	                   argumento['creencias']}, 
            {'Lengua materna',  argumento['lengua_materna'] or argumento['Lengua_materna'] or propiedad('P103', enMayusculas)},
        },
        {tipo='sección',
        	-- Educación
        	
            {'Educación',  educacion},  
            {'Alma máter', almamater, clase='plainlist'},
            {'Posgrado',   argumento['posgrado']}
        },
        {tipo='sección',
            -- Familia. 
            estilotitulo  = estilotitulo,
            ['titulo']    = 'Familia', -- Ver la ficha de noble
            
        -- En el caso del cónyuge tiene preferencia el argumento hasta que se muestre los calficativos.
            clase       ='plainlist', -- Mostrar las listas sin viñetas
            {'Familia nobiliaria', propiedad('P53')},
            {'Padres',     estaEnlazado(padres)},
            {'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í'})},
            {'Familiares', estaEnlazado(argumento['familiares'])}, --- ¿¿¿¿¿¿¿¿¿??????????? -- Hermano: P7, padastro: p43, pariente: p1038
        },
        {tipo='sección',
        	['titulo'] = 'Información profesional',
            estilotitulo = estilotitulo,            
            
            {'Ocupación',      ocupacion, clase='role'},
            {etiquetaAnyosActivo,  argumento['años activo'] or argumento['años activa'] or
        	                   argumento['periodo'] or argumento['período'] or argumento['Periodo'] or
        	                   argumento['tiempo'] or argumento['Tiempo']}, -- Periodistas
            {'Área',           area or 
                               propiedad('P101', enMayusculas)}, -- Campo de trabajo.
            {'Empleador',      argumento['empleador'] or
        	                   argumento['institución_de_trabajo'] or
        	                   argumento['nombre_estudio'] or
        	                   propiedad('P108', conPeriodo),
                               clase       ='plainlist'},
            {'Restaurantes',   argumento['restaurantes']}, -- Para cocineros. Restaurantes en los que ha trabajado.
            {'Medio',          argumento['medio de comunicación']}, -- Para periodistas. Unas veces informados con el significado de área y otras con el empleador
            {'Programas',      argumento['programas']}, -- Para periodistas            

            -- Ocupación (escritores, artistas, periodistas, diseñadores, etc)            
            {'[[Seudónimo]]', argumento['seudónimo'] or argumento['Seudónimo'] or propiedad('P742')},
            {'Lengua de producción literaria',  argumento['lengua_literaria'] or argumento['Lengua_literaria']},
            {'Género',          argumento['género'] or argumento['Género'] or propiedad('P136', enMayusculas)},
            {'[[Movimiento artístico|Movimientos]]', argumento['movimiento'] or 
        	                                     argumento['Movimiento'] or
        	                                     argumento['movimientos'] or 
        	                                     propiedad('P135', enMayusculas)}, 
            {'Obras notables', argumento['obras'] or
        	                   argumento['obras notables'] or argumento['obras_notables'] or argumento['Obras notables'] or
        	                   argumento['obras destacadas'] or
        	                   argumento['proyectos_representativos'] or propiedad('P800',{['enlace']='sí', ['lista'] = 'no ordenada',   ['debeExistir'] = 'sí',    ['formatoTexto']='cursivas'}),
        	                   clase='plainlist'
        	                       },
            {'Artistas relacionados', argumento['relacionados']},
            
            --{'', listaDesplegable(etiquetaInfluencias, argumento['influenciado por'] or argumento['influido por'] or 
            --	                  argumento['influencias'] or argumento['Influencias'], frame)},
            --{'',         listaDesplegable('Influyó a', 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)},
        },

        {'Empresa',            argumento['empresa']},
        {'Salario',            argumento['salario']},
        {'Patrimonio',         argumento['patrimonio'] or argumento['fortuna']},
        {'Tratamiento',            argumento['tratamiento']},
        {'Altura',             argumento['altura']},
        {'Peso',               argumento['peso']},
        {etiquetaConocidoPor,  argumento['conocido'] or
        	                   argumento['conocido por']},
        {'Título',             argumento['título'] or -- <!-- Su majestad, primera dama, etc -->
        	                   argumento['titulo']},
        {'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']},
        {'Sucesor',            argumento['sucesor']},
        {'Partido político',   argumento['partido político'] or argumento['partido'] or propiedad('P102')},
        {'Otras afiliaciones políticas',   argumento['afiliaciones'] or propiedad('P1416')},
        {'Cargos ocupados',    propiedad('P39', conPeriodo), clase='plainlist'}, -- políticos o en empresas
        {'Miembro de', propiedad('P463', conPeriodoDebeExistir), clase='plainlist'},
        {tipo='sección',
        	['titulo']   = 'Premios artísticos',   -- Ver la ficha de noble o la ficha de diseñador
            estilotitulo = estilotitulo,
            {'[[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']},
            {'Otros premios', argumento['otros premios']},
        },
        {tipo='sección',
        	['titulo']   = 'Carrera deportiva',   -- Ver la ficha de noble o la ficha de diseñador
            estilotitulo = estilotitulo,
            {'Deporte', argumento['deporte']},
        },
        {'',seccionDesplegable('Títulos y <br> reconocimientos deportivos',argumento['títulos'], frame,estilotitulo)},
        -- 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
                               propiedad('P166', {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo']   = 'P585', ordenar='por fecha',eliminar=eliminarpremio}),
                               clase       ='plainlist'}, -- Mostrar las listas sin viñetas
        	                   
        -- 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 .. '|150px]]'))}, -- 150 px como en la ficha de escritor en vez de 128

        {tipo='sección', -- Web
            clase       ='plainlinks',
            titulo      ='Web',
            estilotitulo  = estilotitulo,
            {'Sitio web', ModuloURL.enlazar(web)}, 
            {'Facebook', facebook and ('[http://www.facebook.com/' .. facebook .. ' ' .. facebook .. ']')}, -- Ver la plantilla facebook
            {'Twitter',  twitter  and ('[http://www.twitter.com/'  .. twitter  .. ' ' .. twitter .. ']')},  -- Ver la plantilla twitter
            {'Ficha',    ModuloFormatoTexto.enVariasLineas({
            	  imdb              and ('[http://www.imdb.com/name/' .. imdb  .. ' Ficha] en [[Internet Movie Database|IMDb]]') -- Ver la ficha de actor
            	, catholicHierarchy and ('[http://www.catholic-hierarchy.org/bishop/b' .. catholicHierarchy .. ".html Ficha] en ''catholic-hierarchy.org''") -- Ver la Ficha de líder religioso
            	})}
        },
        {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 = ''
    
    -- Ahora la categoría se informa en Módulo:Wikidata/Formatos
    --if algunaPropiedadEnlazaWikidata then
    --	categorias = '[[Categoría:Wikipedia:Páginas con propiedades de Wikidata sin etiqueta]]'
    --end
    
    if (fechaNacimiento or lugarNacimiento) and not (fechaFallecimiento or lugarFallecimiento) then
    	categorias = categorias .. '[[Categoría:Personas vivas]]'
    end
    
    --if educacion and almamater then
    -- 	categorias = categorias .. '[[Categoría:Wikipedia:Páginas que tienen informado el campo educación]]'
    --end
    
    return ModuloFicha.infobox(Ficha) .. categorias
end

function generarcargo(argumento,numero)
	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='' end --para casos donde hay reelección
	if 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]..'|40px]]<br />'..argumento['cargo'..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 .. '<br /> <small> Actualmente en el cargo</small>'
		periodo = 'Desde el '..argumento['inicio'..numero]
	end
	
	cadenatexto={tipo='sección',
        	['titulo']=titulo,
            estilotitulo = 'background-color:#E6E6FA; font-size:110%',
            {'', periodo, estilotitulo = 'background-color:#E6E6FA; font-size:110%; border-top:1px solid;'},
    	    {'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] },
    	    {'Viceprimerministro', argumento['viceprimerministro'..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]},
    	    {'Sucesor', argumento['sucesor'..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 propiedad1(idPropiedad,opciones)
    if Entidad and Entidad.claims and Entidad.claims[idPropiedad] then
    	if not opciones then
    		opciones = {}
    	end
    	opciones['propiedad'] = idPropiedad

        valorPropiedad = ModuloWikidata.getPropiedad(opciones,Entidad.claims[idPropiedad])

        if valorPropiedad and valorPropiedad:match('%[%[:d:') then
          algunaPropiedadEnlazaWikidata = true
        end
        tipov=''
	


if Entidad.claims[idPropiedad][1]['mainsnak']['datavalue']['value']['numeric-id'] then
	 tipov=Entidad.claims[idPropiedad][1]['mainsnak']['datavalue']['value']['numeric-id']
 end
 
		
			--if type(v)=='string' then
			--tipov=tipov..'indice'..k..'valor'..v .. '<br>'
	--	else
	--		if type(v
   	--		for klave, valor in pairs(Entidad.claims[idPropiedad][v]) do
   	--			if type(valor)=='string' then
   	--			tipov = tipov.. '<br>'..k..v
   	--			end
   	--		end
   	--	end
   	--	end
		
		--if type(Entidad.claims[idPropiedad]) then
		--	tipov=type(Entidad.claims[idPropiedad])
		--end
    	return valorpropiedad
    end
end
function propiedad(idPropiedad,opciones)
    if Entidad and Entidad.claims and Entidad.claims[idPropiedad] then
    	if not opciones then
    		opciones = {}
    	end
    	opciones['propiedad'] = idPropiedad
	salida = ''
	tipov=''
	declaracion = Entidad.claims[idPropiedad]
	valorPropiedad = ModuloWikidata.getPropiedad(opciones,declaracion)
	if opciones.eliminar5 then
		for k, v in pairs(valorPropiedad) do
			tipov= tipov..'<br>'..k
			if type(v) == 'string' or type(v) == 'number' then
			tipov=tipov..': '..v
			end
			if type(v) == 'table' then
				tipov= tipov..'{ PRIMER NIVEL<br>'
					for clave,valor in pairs(valorPropiedad[k]) do
					tipov= tipov..'<br>'..clave
					if type(valor) == 'string' or type(valor) == 'number' then
						tipov=tipov..': '..valor
					end
					if type(valor) == 'table' then
						tipov= tipov..'{SEGUNDO NIVEL<br>'
						for clave1,valor1 in pairs(valorPropiedad[k][clave]) do
							tipov= tipov..'<br>'..clave1
							if type(valor1) == 'string' or type(valor1) == 'number' then
								tipov=tipov..': '..valor1
							end
							if type(valor1) == 'table' then
								tipov= tipov..'{TERCER NIVEL<br>'
								for clave2,valor2 in pairs(valorPropiedad[k][clave][clave1]) do
									tipov= tipov..'<br>'..clave2 
									if type(valor2) == 'string' or type(valor2) == 'number' then
									tipov=tipov..': '.. valor2 
									end
									if type(valor2) == 'table' then
										tipov= tipov..'{ CUARTO NIVEL<br>'
										for clave3,valor3 in pairs(valorPropiedad[k][clave][clave1][clave2]) do
											tipov= tipov..'<br>'..clave3
											if type(valor3) == 'string' or type(valor3) == 'number' then
											tipov=tipov..': '.. valor3
											end
										end
										tipov=tipov..'<br>SALI DEL CUARTO NIVEL}'	
									end	
								end
							tipov=tipov..'<br> SALI DEL TERCER NIVEL}'
							end
						end
					tipov=tipov..'<br> SALI DEL SEGUNDO NIVEL<br>}'
					end
				end
			tipov=tipov..'<br> SALI DEL PRIMER NIVEL<br>}'
			end
		end
		return tipov
	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 ..';}}')
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)
	local enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion = ModuloWikidataFormatos.obtenerDatos(valor)
	
	-- Corregir la ocupación.
	-- Ejemplos:
	--    - "actor/actriz"            --> "actor"
	--    - "informático/a teórico/a" --> "informático teórico"
	
	if etiquetaOcupacion then
		etiquetaOcupacion = etiquetaOcupacion:gsub('([^%s]+)(/[^%s]+)', '%1')
	end

	return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion, opciones)
end

function corregirOcupacion(etiquetaOcupacion)
	if not etiquetaOcupacion or not etiquetaOcupacion:find('/') then
		return etiquetaOcupacion
	end
	
	local palabrasCorregidas={}
	local palabraCorregida
	
	for palabra in etiquetaOcupacion:gmatch("[^%s]+") do
		palabraCorregida = 	
		   palabra:match('^(.+)o/a$') or -- científico/a --> científic
		   palabra:match('^(.+)/a$')     -- escritor/a   --> escritor
	    
	    if palabraCorregida then
	    	table.insert(palabrasCorregidas, palabraCorregida .. 'a')
	    else
	    	table.insert(palabrasCorregidas,
	    		palabra:match('^.+/(.+)$')  or -- actor/actriz
	    		palabra                        -- de, literatura, infantil
			)
		end
	end

	return table.concat(palabrasCorregidas, ' ')
end

function formatoOcupacionFemenino(valor, opciones, frame)
	local enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion = ModuloWikidataFormatos.obtenerDatos(valor)
 
	return ModuloWikidataFormatos.enlazar(enlaceOcupacion, corregirOcupacion(etiquetaOcupacion), idEntidadOcupacion, opciones)
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()
	return obtenerValorCalificativo('P553' -- cuenta en red social
                      , 'P554' --dirección en red social
                      , 355)   -- Facebook
            or propiedad('P2013'); -- Ejemplo: Gillian Flynn
end

function obtenerTwitter()
	return obtenerValorCalificativo('P553' -- cuenta en red social
                      , 'P554' --dirección en red social
                      , 2002)   -- Twitter
end

return z