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

De la Enciclopedia Colchagüina
Diego Grez (discusión | contribs.)
Sin resumen de edición
Diego Grez (discusión | contribs.)
Sin resumen de edición
Etiqueta: Revertido
Línea 2: Línea 2:


local argumentos    -- Tabla de argumentos con los que se llama a la función  
local argumentos    -- Tabla de argumentos con los que se llama a la función  
local argumento={}  -- Argumentos, sin contar los que no tienen datos
local argumento={}  -- Argumentos eliminando los argumentos sin datos
local Entidad      -- Tabla con los datos en Wikidata de la persona.
local Entidad      -- Tabla con los datos en Wikidata del libro.
--                        Ver Wikidata:WikiProject Books para las propicedades posibles
local algunaPropiedadEnlazaWikidata -- Para alguna propiedad no existe la etiqueta ni el enlace mostrándose algo de la forma d:...
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 utilizados
 
-- Módulos y funciones externas
local ModuloFecha            = require('Módulo:Fecha')
local  edad                = ModuloFecha.edad
local ModuloFicha            = require('Módulo:Ficha')
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 ModuloIdentificadores  = require('Módulo:Identificadores')
local ModuloPaginas          = require('Módulo:Páginas')
local ModuloPaginas          = require('Módulo:Páginas')
local elementoTabla          = require('Módulo:Tablas').elemento
local ModuloWikidataFormatos = require('Módulo:Wikidata/Formatos')
local enlazarURL            = require('Módulo:URL').enlazar
local ModuloWikidata        = require('Módulo:Wikidata')
local sinBandera            = require('Módulo:Bandera').sinBandera
local ModuloTablas          = require('Módulo:Tablas')
local ModuloURL              = require('Módulo:URL')


-- Constantes
-- Constantes
local enMayusculas    = {['formatoTexto'] = 'mayúscula', ['linkback']='sí', ['rangoMayor'] = 'sí'}
local enMayusculas    = {['formatoTexto'] = 'mayúscula'}
local enMayusculasO  = {['formatoTexto'] = 'mayúscula', ['conjunción']=' o ', ['linkback']='sí', ['rangoMayor'] = 'sí'}
local enMayusculasO  = {['formatoTexto'] = 'mayúscula', ['conjunción']=' o '}
local enMayusculasSinEnlazar = {['formatoTexto'] = 'mayúscula', ['linkback']='sí', ['rangoMayor'] = 'sí', ['enlace']='no'}
local listaNoOrdenada = {['lista'] = 'no ordenada'} --, ['debeExistir'] = 'sí'
local enMayusculasOSinEnlazar = {['formatoTexto'] = 'mayúscula', ['conjunción']=' o ', ['linkback']='sí', ['rangoMayor'] = 'sí', ['enlace']='no'}
local lugar          = {['conjunción']=' o ', ['valor-función'] = ModuloWikidataFormatos.formatoLugar}
local listaNoOrdenada = {['lista'] = 'no ordenada', ['linkback']='sí', ['rangoMayor'] = 'sí'} --, ['debeExistir'] = 'sí'
local debeExistir    = {['debeExistir'] = 'sí'}
--local lugar          = {['conjunción']=' o ', ['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback']='sí'}
local conPeriodo      = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = ModuloWikidataFormatos.formatoPeriodo}
local debeExistir    = {['debeExistir'] = 'sí', ['formatoTexto'] = 'mayúscula', ['linkback']='sí', ['rangoMayor'] = 'sí'}
local conPeriodo      = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = formatoPeriodo, ordenar='por fecha', ['linkback']='sí', ['rangoMayor'] = 'sí'}
local conPeriodoDebeExistir = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = formatoPeriodo, ordenar='por fecha', ['debeExistir'] = 'sí', ['linkback']='sí', ['rangoMayor'] = 'sí'}
local sinEnlazar = {['enlace']='no', ['linkback']='sí', ['rangoMayor'] = 'sí'}
local sinLapiz  = {['rangoMayor'] = 'sí'}
local normal    = {['linkback']='sí', ['rangoMayor'] = 'sí'}
 
-- Formatos según el tipo de cabecera
 
local formatos={
    ['por defecto'] = {['estiloTituloFicha'] = 'background-color:#8DB1C3;color:#000'},
    ['inherit']    = {['estiloTituloFicha'] = 'background-color:#E6E6FA;color:#000'},   
    --['actor']      = {['estiloTituloFicha'] = ''},
    ['ajedrecista'] = {['estiloTituloFicha'] = 'background-color:#d38d47;color:#FFF'},
    ['artista']    = {['estiloTituloFicha'] = 'background-color:#8DB1C3;color:#000'},
    ['astronauta']  = {['estiloTituloFicha'] = 'background-color:transparent;'},
    ['autoridad']  = {['estiloTituloFicha'] = 'background-color:transparent;', ['estiloTituloSecciones'] ='background-color:#E6E6FA;'},
    ['cine']        = {['estiloTituloFicha'] = 'background-color:#f9e999'},
    ['diseñador']  = {['estiloTituloFicha'] = 'background-color:#ED8;color:#000'},
    ['escritor']    = {['estiloTituloFicha'] = 'background-color:#4c6099;color:#FFF'},
    ['futbolista']  = {['estiloTituloFicha'] = 'background-color:#CC8;color:#000'},
    ['militar']    = {['estiloTituloFicha'] = 'background-color:#b0c4de;color:#000'},
    ['modelo']      = {['estiloTituloFicha'] = 'background-color:#9F9;color:#000'},
    --
    -- Música
    --
    ['cantante']    = {['estiloTituloFicha'] = 'background-color:#f0e68c'}, -- solista de Plantilla:Ficha de artista musical/selección de color
    ['músico']      = {['estiloTituloFicha'] = 'background-color:#F4BF92'}, -- instrumentalista_no_vocal (integrantes de grupos no vocalistas, así como solistas instrumentales y directores de orquesta)
    ['otro música'] = {['estiloTituloFicha'] = 'background-color:#BFE0BF'}, -- otro_personal (productores, compositores, ingenieros)
    --
    ['religioso']  = {['estiloTituloFicha'] = 'background-color:#ffde00; color:#000'},
    ['periodista']  = {['estiloTituloFicha'] = 'background-color:#ED8;color:#000'},
    ['televisión']  = {['estiloTituloFicha'] = 'background-color:#ED8;color:#000'},
    ['torero']      = {['estiloTituloFicha'] = 'background-color: #800000; color: white'},
    ['videojuego']  = {['estiloTituloFicha'] = 'background-color:#CCF;color:#000'},
    ['youtuber']    = {['estiloTituloFicha'] = 'background-color:#B60000;color:#fff'},
}
 
local nombre = ''
 
function fechaiso(x)
return x.time
end
 
 
function z.Ficha(frame)
function z.Ficha(frame)
--  Hacer que funcione la función formatBandera y formatoGentilicio
     ModuloWikidata:setFrame(frame)  -- No funciona si se pone ModuloWikidata.setFrame(marco)     
     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"
     -- Obtener los argumentos con los que se llama a la función
    argumento = obtenerArgumentosConValor(frame) -- No poner local. Es global.
    argumentos = frame and frame.args or {};
 
    if not argumentos[1] then
        local parent  = frame:getParent();
        argumentos    = parent.args;
    end   
   
     -- Eliminar los parámetros vacíos.
    for k,v in pairs(argumentos) do
        if v~='' then
            argumento[k] = argumentos[k]
        end
     end
     end
   
    -- 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 -- ¿No es lo mismo que alma máter??? No, es el título
            argumento['educacion']
    almamater = argumento['alma máter'] or argumento['alma_mater'] or argumento['alma mater'] or
            propiedad('P69', {['enlace']='sí', ['lista'] = 'no ordenada'})


     --Determinar datos para la ficha
     if propiedad('P21') == 'femenino' then
    local educacion = argumento['educación'] or argumento['educacion']
    etiquetaAnyosActivo = 'Años activa'
    local almamater = argumento['alma máter'] or argumento['alma_mater'] or argumento['alma mater'] or argumento['almamáter'] or argumento['alma_máter']
    etiquetaConocidoPor = 'Conocida por'
 
    etiquetaInfluencias = 'Influida por'
local gender = ''
    funcionOcupacion    = formatoOcupacionFemenino
    if gender and ( mw.ustring.match(gender, 'femenino') or mw.ustring.match(gender, 'mujer') ) 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
     else
        etiquetaAnyosActivo = 'Años activo'
    etiquetaAnyosActivo = 'Años activo'
        etiquetaConocidoPor = 'Conocido por'
    etiquetaConocidoPor = 'Conocido por'  
        etiquetaInfluencias = 'Influido por'
    etiquetaInfluencias = 'Influido por'
        etiquetacampeon    = '[[Campeonato del mundo de ajedrez|Campeón del mundo]]'
    funcionOcupacion    = formatoOcupacionMasculino
        etiquetaAlumnoDe    = 'Alumno de'
        etiquetaEducadoEn  = 'Educado en'
        funcionOcupacion    = formatoOcupacionMasculino
        etiquetaVeneradoEn  = 'Venerado en'
     end
     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
    area = argumento['área'] or argumento['area'] or argumento['especialidad']
        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.
     -- 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  
     -- 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".
     -- tener informada el área con "puntura y escultura".


     local ocupacion = argumento['ocupación'] or argumento['ocupacion'] or  argumento['Ocupación'] or argumento['profesión']
     -- Pendiente averiguar si en algún artículo se informan los campos de área y de ocupación a la vez.
    local area     = argumento['área'] or argumento['area'] or argumento['especialidad'] or argumento['campos']
    -- Si es así mostrar solo uno de los dos.
 
   
     local ocupacionOArea = ocupacion or area
    ocupacion     = argumento['ocupación'] or argumento['Ocupación'] or (not area and propiedad('P106', {['formatoTexto'] = 'mayúscula', ['valor-función']=funcionOcupacion}))
 
     ocupacionOArea = ocupacion or area
     nombre = argumento['nombre'] or argumento['Nombre'] or ModuloPaginas.nombrePagina({desambiguar='sí'})
   
    local nombre_completo  = argumento['nombre completo']
     nombre = argumento['nombre'] or argumento['Nombre'] or
     local nombre_nacimiento = argumento['nombre de nacimiento']
            obtenerEtiquetaWikidata() or
     local nombre_nacimiento_sin_lapiz = argumento['nombre de nacimiento']
            ModuloPaginas.nombrePagina({desambiguar='sí'})
 
           
    -- Nombre en la escritura nativa.
     -- Informar los datos de nacimiento y de fallecimiento
    -- Solo se muestra si no coincide con el nombre o el nombre de nacimiento o el nombre completo
     fechaNacimiento = argumento['fecha de nacimiento'] or argumento['fechadenacimiento'] or
    local nombresNativos={tipo='sección'}
                      argumento['fecha_nacimiento']   or argumento['Fecha_nacimiento'] or
    local nombreNativo, textoNombreNativo, idiomaNombreNativo
                      argumento['fecha nacimiento']   or argumento['fechadenacimiento'] or
 
                      propiedad('P569', enMayusculasO)
    if argumento['nombre nativo'] then
     lugarNacimiento = argumento['lugar de nacimiento'] or argumento['lugardenacimiento'] or
        if argumento['nombre nativo'] ~= nombre and
                      argumento['lugar']               or
          argumento['nombre nativo'] ~= nombre_nacimiento_sin_lapiz and
                      argumento['lugar_nacimiento']    or argumento['Lugar_nacimiento'] or
          argumento['nombre nativo'] ~= nombre_completo then
                      argumento['lugar nacimiento']   or
          table.insert(nombresNativos,{'Nombre nativo', argumento['nombre nativo']})
                      propiedad('P19', lugar)
        end
      
    elseif Entidad then
     if fechaNacimiento and lugarNacimiento then
        -- En el caso de obtener de Wikidata puede haber varios nombres nativos
         nacimiento = fechaNacimiento .. '<br />' .. lugarNacimiento
 
        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']
 
    local lugarDesaparicion  = argumento['lugar de desaparición']
    local fechaFallecimientoTimestamp = elementoTabla(Entidad, 'claims', 'P570', 1, 'mainsnak', 'datavalue', 'value', 'time')
    local lugarFallecimiento = argumento['lugar de fallecimiento']
 
    fallecimiento = enVariasLineas({
        argumento['fecha de fallecimiento'],
        lugarFallecimiento
     })
 
     if fallecimiento then
         desaparicion = enVariasLineas({
            argumento['fecha de desaparición'],
            lugarDesaparicion
        })
     else
     else
        desaparicion = enVariasLineas({
    nacimiento = fechaNacimiento or lugarNacimiento
            argumento['fecha de desaparición'],
            argumento['lugar de desaparición']
        })
     end
     end
 
   
     if fallecimiento or desaparicion then
     fechaFallecimiento = argumento['fecha de fallecimiento'] or argumento['fechadefallecimiento'] or
        nacimiento = enVariasLineas({
                        argumento['fecha fallecimiento']    or argumento['fecha_fallecimiento']  or argumento['Fecha_fallecimiento']  or
            argumento['fecha de nacimiento'],
                        argumento['fecha de defunción']    or
            lugarNacimiento
                        argumento['fecha_muerte']          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
                        propiedad('P20', lugar)
   
    if fechaFallecimiento and lugarFallecimiento then
         fallecimiento = fechaFallecimiento .. '<br />' .. lugarFallecimiento
     else
     else
        nacimiento = enVariasLineas({
    fallecimiento = fechaFallecimiento or lugarFallecimiento
            argumento['fecha de nacimiento'],
            lugarNacimiento
        })
     end
     end
 
   
     if argumento['padres'] then
     if argumento['padres'] then
        padres = argumento['padres']
    padres = estaEnlazado(argumento['padres'])
     else
     else
        if padre and madre then
    padre = propiedad('P22') --, debeExistir)
            padres = padre .. '<br/>' .. madre
    madre = propiedad('P25') --, debeExistir)
            padre = nil
   
            madre = nil
    if padre and madre then
        end
    padres = padre .. '<br/>' .. madre
    else
    padres = padre or madre
    end
     end
     end
 
   
     firma = argumento['firma'] or argumento['Firma'] or ''
     firma = argumento['firma'] or argumento['Firma'] or
     if firma and firma ~= '' then
        propiedad('P109')
    firma = '[[Archivo:' .. firma .. '|175x80px]]'
   
    end
     web = propiedad('P856') or
 
          argumento['web'] or argumento['página web'] or argumento['website'] or argumento['sitio web']
    -- 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
         
 
     twitter  = argumento['twitter'] or argumento['Twitter'] or obtenerTwitter()
    local formato, cabecera
    facebook = argumento['facebook'] or argumento['Facebook'] or obtenerFacebook()
 
   
    if argumento['cabecera'] then
 
        cabecera = argumento['cabecera'] -- Por defecto utilizar el campo cabecera de la plantilla
     -- Título según la ocupación y si la persona ha muerto     
    elseif hayCargos == true then
    -- No mostrar para los artistas ningún icono en la cabecera de la ficha
        cabecera = 'autoridad'
   
     elseif not ocupacionOArea then
     if ocupacionOArea and (ocupacionOArea:find('[Aa]rtista') or ocupacionOArea:find('[Pp]intor') or  
        cabecera = 'por defecto'
    ocupacionOArea:find('[Ee]scultor') or ocupacionOArea:find('[Pp]intura') or ocupacionOArea:find('[Ee]scultura')
    elseif ocupacionOArea:find('[Aa]ctor') or ocupacionOArea:find('[Aa]ctriz') or ocupacionOArea:find('[Pp]roductor de cine')
    or ocupacionOArea:find('[Ff]otograf')
        or ocupacionOArea:find('[Dd]irector de cine') then
    or ocupacionOArea:find('[Aa]rtes visuales')
        cabecera = 'cine'
    ) then
    elseif ocupacionOArea:find('[Aa]jedrecista') or argumento['elo'] or rankingajedrez then
         tipocabecera = ''
        cabecera = 'ajedrecista'
         estilotitulo = 'background-color:#8DB1C3;color:#FFF'
     elseif ocupacionOArea:find('[Aa]stronauta') then
     elseif ocupacionOArea and (ocupacionOArea:find('[Ee]scritor') or ocupacionOArea:find('[Nn]ovelista') or  
        cabecera = 'astronauta'
    ocupacionOArea:find('[Pp]oeta') or ocupacionOArea:find('[Dd]ramaturgo')) then
     elseif ocupacionOArea:find('[Ee]scritor') or ocupacionOArea:find('[Nn]ovelista') or  
         tipocabecera = 'libro'
          ocupacionOArea:find('[Pp]oeta') or ocupacionOArea:find('[Dd]ramaturgo') then
         estilotitulo = 'background-color:#4c6099;color:#FFF'
        cabecera = 'escritor'
     elseif ocupacionOArea and ocupacionOArea:find('[Pp]eriodista') then
    elseif ocupacionOArea:find('[Cc]antante') then
    if fechaFallecimiento or lugarFallecimiento then
        cabecera = 'cantante'
    colorfondo = '#c0c0c0'
    elseif ocupacionOArea:find('[Mm]úsico') then
    else
        cabecera = 'músico'
    colorfondo = '#ed8'
    elseif ocupacionOArea:find('[Cc]ompositor') then
    end
        cabecera = 'otro música'
    tipocabecera  = 'revista'
    elseif ocupacionOArea:find('[Pp]olític[oa]') or argumento['cargo'] then
    estilotitulo  = 'color:#FFF'
        cabecera = 'por defecto'
     elseif ocupacionOArea and ocupacionOArea:find('[Dd]iseñador') then
    elseif ocupacionOArea:find('[Pp]eriodista') then
    estilotitulo     = 'background-color:#ccccff'  
         cabecera = 'periodista'
    mostrarSecciones = true
    elseif ocupacionOArea:find('[Dd]iseñador') then
else
         cabecera = 'diseñador'
         tipocabecera = 'humano fn'
    elseif ocupacionOArea:find('[Pp]resentador') or ocupacionOArea:find('[Cc]onductor') then
         estilotitulo = 'background-color:#8DB1C3;color:#FFF'
        cabecera = 'televisión'
    end        
     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]ou[Tt]uber') or ocupacionOArea:find('[Vv][Tt]uber') 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
 
    formato = formatos[cabecera] or {}
 
    local estiloTituloFicha, estiloTituloSecciones
 
    estiloTituloFicha    = formato['estiloTituloFicha']
    estiloTituloSecciones = formato['estiloTituloSecciones'] or formato['estiloTituloFicha']
 
    if hayCargos == true then
        cargosocupados        = ''
    else
         cargosocupados = argumento['cargo ocupado']
    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
local sitioWeb
if argumento['web'] or argumento['página web'] or argumento['website'] or argumento['sitio web'] or argumento['sitioweb'] then
sitioWeb = noAlargar(enlazarURL(argumento['web'] or argumento['página web'] or argumento['website'] or argumento['sitio web'] or argumento['sitioweb']))
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']
    end
 
local relacionados = argumento['relacionados'] or ''
if relacionados and mw.ustring.len(relacionados) > 200 then
relacionados = ''
end
     local Ficha = {
     local Ficha = {
        wikidata        = not obtenerDatosWikidata and 'no',
         clase          = 'biography vcard',
         clase          = 'biography vcard',


         -- Título
         -- Título
         tipocabecera    = 'persona',
         tipocabecera    = tipocabecera,                  
         titulo          = nombre,
         titulo          = nombre,
         --colorfondo      = colorfondo, -- No se usa
         colorfondo      = colorfondo,      
         estilotitulo    = estiloTituloFicha,
         estilotitulo    = estilotitulo,
         --Imagen
         --Imagen
         --De momento no se pone una raya como en la ficha de escritor tras la imagen
         --De momento no se pone una raya como en la ficha de escritor tras la imagen
         imagen          = imagen,
         imagen          = argumento['imagen']  or argumento['Imagen'] or
        ['tamañoimagen']= argumento['tamaño de imagen'] or argumento['tamaño'] or  
                          argumento['foto']   or
                          propiedad('P18', {uno='sí'}),
        ['tamañoimagen']= argumento['tamaño']     or  
                           argumento['tamaño imagen'] or argumento['tamañoimagen'] or argumento['tamañodelaimagen'] or
                           argumento['tamaño imagen'] or argumento['tamañoimagen'] or argumento['tamañodelaimagen'] or
                           argumento['tamaño de foto'] 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
                           '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,
         pie            = 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']
                          ,
         -- Pendiente: en la ficha de escritor el texto se pone entre <small> y en la de artista se usa el estilo font-size:smaller
         -- 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
         --Etiquetas y datos                
         estiloetiqueta  = 'width:33%', -- 25% en la ficha de escritor. Sin especificar en la de persona
         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
                           --'padding:0.2em 1.0em 0.2em 0.2em; background-color:transparent; line-height:1.2em;', -- En la ficha de persona original
         estilodatos    = 'line-height:1.3em; vertical-align:middle;',
         estilodatos    = 'padding:0.2em; line-height:1.3em; vertical-align:middle;',
         tablaCargos,
          
         {tipo='sección',
         {tipo='sección',
            ['titulo']  = 'Información personal',  -- Ver la ficha de noble o la ficha de diseñador
        ['titulo']  = mostrarSecciones and 'Información personal',  -- Ver la ficha de noble o la ficha de diseñador
             estilotitulo = estiloTituloSecciones,
             estilotitulo = estilotitulo,
             {'Nombre completo',                                     -- solo si no coincide con:
             {'Nombre de nacimiento', propiedad('P1477') or
                (nombre_completo ~= nombre) and                      --    - el nombre que se muestra en el título de la ficha
                    propiedad('P513') or
                (nombre_completo ~= nombre_nacimiento_sin_lapiz) and --    - o con el nombre de nacimiento
                    argumento['nombre completo']  or argumento['nombre_completo'] or argumento['Nombre_completo'] or
                nombre_completo},
                    argumento['nombre nacimiento'] or argumento['nombredenacimiento'] or argumento['nombre de nacimiento'] or
            {'Nombre de nacimiento', -- solo si no coincide con el nombre que se muestra en el título de la ficha
                    argumento['nombre_real']
                (nombre_nacimiento_sin_lapiz ~= nombre)
        },
                and nombre_nacimiento},
             {'Nombre nativo',     argumento['nombre nativo']}, --????????????
            nombresNativos,
             {'Nombre religioso', argumento['nombre religioso']},
             {'Apodo',              argumento['apodo']},
             {'Apodo',              argumento['apodo']},
             {'Otros&nbsp;nombres', argumento['otros nombres'] or argumento['alias'], -- ¿No es lo mismo que el apodo?????
             {'Otros&nbsp;nombres', argumento['otros nombres'], -- ¿No es lo mismo que el apodo?????
                                  clase='nickname'},
                              clase='nickname'},                        
             {'Nacimiento',        nacimiento},
             {'Nacimiento',        nacimiento},
            {'Desaparición',      desaparicion},
             {'Fallecimiento',      fallecimiento},
             {'Fallecimiento',      fallecimiento},
             {'Causa de muerte', argumento['causa muerte'] },
             {'Causa de muerte',   argumento['causa muerte'] or
            {'Sepultura',  argumento['lugar de descanso'] },
                              propiedad('P509', enMayusculas) or  
            {'Residencia',    sinBandera(argumento['residencia'] or
                              propiedad('P1196', enMayusculas)}, -- circunstancias de la muerte
                              argumento['país_de_residencia'] or argumento['pais_de_residencia'] or
                              argumento['lugar_de_residencia']),
                              clase='etiqueta'},
            {'Nacionalidad',  sinBandera(argumento['nacionalidad'] or argumento['Nacionalidad'] or argumento['ciudadanías']),
                              clase='category'},
            {'Ciudadanía',    sinBandera(argumento['ciudadanía'] or -- ¿No es lo mismo que la nacionalidad?
                              argumento['ciudadania']),
                              clase='category'},
            {'Etnia',          argumento['etnia'] or argumento['grupo étnico'],
                              clase='category'},
            {'Religión',      argumento['religión']},
            {'Lengua materna',  argumento['lengua materna'] or argumento['Lengua_materna'] or argumento['lengua_materna']},
        },
        {tipo='sección',
            estilotitulo = estiloTituloSecciones,
            ['titulo']  = 'Características físicas',
            {'Altura',            argumento['altura'] or argumento['estatura']},
            {'Peso',              argumento['peso']},
            {'Medidas', argumento['medidas']},
            {'Ojos', argumento['color de ojos']},
            {'Cabello', argumento['color de cabello']},
            {'[[Mamoplastia de aumento|Pecho natural]]', argumento['busto natural']},
            --{'[[Orientación sexual]]', 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.
             {'Residencia',     argumento['residencia'] or propiedad('P551'),
            clase      ='plainlist', -- Mostrar las listas sin viñetas
                          clase='etiqueta'},      
             {'Familia', },
             {'Nacionalidad',   argumento['nacionalidad'] or argumento['Nacionalidad'] or --Pendiente hacer que salga el gentilicio
            {(padres and 'Padres') or (padre and 'Padre') or 'Madre', -- Mostrar padres, padre o madre según esté informado ambos o solo uno de ellos
                          propiedad('P27', {['valor-función'] = ModuloWikidataFormatos.formatoGentilicio, ['formatoTexto'] = 'mayúscula'}),  
                padres or padre or madre},
                          clase='category'},       
             {'Cónyuge',   argumento['cónyuge'] or argumento['conyuge'] or argumento['Cónyuge'] or argumento['Conyuge'] },
             {'Etnia',         propiedad('P172') or
             {'Pareja',     argumento['pareja']},
                          argumento['etnia'],
             {'Hijos',     argumento['hijos'] or argumento['Hijos']
                          clase='category'},                            
            },
             {'Ciudadanía',     argumento['ciudadanía'] or -- ¿No es lo mismo que la nacionalidad?
            {'Familiares', argumento['familiares']},
                          argumento['ciudadania'],
                          clase='category'},
         },
         },
         {tipo='sección',
         {tipo='sección',
            ['titulo']  = 'Educación',
        -- Educación
            estilotitulo = estiloTituloSecciones,
       
             {'Educación',  educacion},
             {'Educación',  educacion},
             {etiquetaEducadoEn, almamater, clase='plainlist'},
             {'Alma máter', almamater, clase='plainlist'},
             {'Posgrado',  argumento['posgrado']},
             {'Posgrado',  argumento['posgrado']}
            {'Tesis doctoral',
                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']},
            {etiquetaAlumnoDe, argumento['alumno de'], clase='plainlist'},
         },
         },
         {tipo='sección',
         {tipo='sección',
            ['titulo'] = 'Información profesional',
        ['titulo'] = mostrarSecciones and 'Información profesional',
             estilotitulo = estiloTituloSecciones,
             estilotitulo = estilotitulo,          
           
             {'Ocupación',      ocupacion, clase='role'},
             {'Ocupación',      ocupacion, clase='role'},
            {etiquetaAnyosActivo,  argumento['años activo'] or
                          argumento['periodo'] or argumento['período'] or argumento['Periodo'] or
                          argumento['tiempo'] or argumento['Tiempo']}, -- Periodistas
             {'Área',          area},
             {'Área',          area},
            {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']},
            {etiquetaConocidoPor,  argumento['conocido por'] or argumento['conocido']},
            {'Cargos ocupados',    cargosocupados,clase='plainlist'}, -- políticos o en empresas
            {'Tratamiento',        argumento['tratamiento']},
           
            {'Salario',            argumento['salario']},
            {'Patrimonio',        argumento['patrimonio'] or argumento['fortuna']},
           
            {'Empresa',            argumento['empresa']},
            {'Estudio',            argumento['nombre estudio']}, -- Arquitectos
            {'Restaurantes',      argumento['restaurantes']},  -- Para cocineros. Restaurantes en los que ha trabajado.
            {tipo='sección',
            ['título'] = 'Información religiosa',
            estilotitulo = estiloTituloSecciones,
            {'[[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']},
            {'Festividad', argumento['festividad']},
            {'Atributos', argumento['atributos']},
            {etiquetaVeneradoEn, argumento['venerado en']},
            {'Patronazgo', argumento['patronazgo']},
            {'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']},
                {'Películas'    , argumento['número de películas']},
                {'Serie'        , argumento['serie']},
            },
             {'Empleador',      argumento['empleador'] or
             {'Empleador',      argumento['empleador'] or
                              argumento['institución_de_trabajo'] or
                          argumento['institución_de_trabajo'] or
                              argumento['nombre_estudio'],
                          argumento['nombre_estudio'] or
                          propiedad('P108', {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula'}),
                               clase      ='plainlist'},
                               clase      ='plainlist'},
            --Profesores
             {'Medio',         argumento['medio de comunicación']}, -- Para periodistas. Unas veces informados con el significado de área y otras con el empleador
             {'Estudiantes doctorales',   argumento['estudiantes doctorales']},
             {'Programas',     argumento['programas']}, -- Para periodistas           
             {(ocupacionOArea and ocupacionOArea:find('[Pp]rofesor') and 'Estudiantes') or 'Alumnos', argumento['estudiantes']},


             -- Periodistas, presentadores y videoblogueros
             -- Ocupación (escritores, artistas, periodistas, diseñadores, etc)           
             {tipo='sección',
             {'[[Seudónimo]]', argumento['seudónimo'] or argumento['Seudónimo'] or propiedad('P742')},
                {'Medio',         argumento['medio de comunicación']}, -- Unas veces informados con el significado de área y otras con el empleador
            {'Lengua de producción literaria', argumento['lengua_literaria'] or argumento['Lengua_literaria']},
                {'Canal',          argumento['canal']},
             {'Lengua materna', argumento['lengua_materna'] or argumento['Lengua_materna'] or propiedad('P103', enMayusculas)},
                {'Programas',     argumento['programas'] or argumento['programa']},
            {'Género',         argumento['género'] or argumento['Género'] or propiedad('P136', enMayusculas)},
            },
             {'[[Movimiento artístico|Movimientos]]', argumento['movimiento'] or  
            -- Videoblogueros, en especial youtubers
                                            argumento['Movimiento'] or
             {tipo='sección',
                                            argumento['movimientos'] or
                {'Vídeos', argumento['videos']},
                                            propiedad('P135', enMayusculas)},
                {'Suscriptores', argumento['suscriptores']},
             {'Obras notables', argumento['obras'] or
                {'Vistas totales', argumento['vistas totales']},
                          argumento['obras notables'] or argumento['obras_notables'] or argumento['Obras notables'] or
            },
                          argumento['obras destacadas'] or
            -- Ocupación (escritores, artistas, periodistas, diseñadores, etc)
                          argumento['proyectos_representativos']
            -- Información artística
                              },
             {tipo='sección',
             {'Artistas relacionados', argumento['relacionados']},
              argumento['movimiento'] or argumento['Movimiento'] or argumento['movimientos']
              
            },
            -- 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'],
                              clase='plainlist'
            },
            {'Proyectos representativos', argumento['proyectos representativos']},
             {'Artistas relacionados', relacionados},
            {'[[Autor de nombre científico#Abreviatura del autor|Abreviatura en botánica]]',
                argumento['abreviatura en botánica']},
             {'[[Autor de nombre científico|Abreviatura en zoología]]',
                argumento['abreviatura en zoología']},
            {'[[Autor de nombre científico|Abreviatura en astronomía]]',
                argumento['abreviatura en astronomía']},
               
             --{'', listaDesplegable(etiquetaInfluencias, argumento['influenciado por'] or argumento['influido por'] or  
             --{'', listaDesplegable(etiquetaInfluencias, argumento['influenciado por'] or argumento['influido por'] or  
             --         argumento['influencias'] or argumento['Influencias'], frame)},
             --                   argumento['influencias'] or argumento['Influencias'], frame)},
             --{'',        listaDesplegable('Influyó a', argumento['influyó en'] or argumento['influyó'] or argumento['Influyó'], frame)},
             --{'',        listaDesplegable('Influyó a', argumento['influyó'] or argumento['Influyó'], frame)},
 
            -- Militares
            {'Lealtad', argumento['lealtad']},
            {'Rama militar', argumento['rama']},
            {'Unidad militar', argumento['unidad']},
            {'Mandos', argumento['mandos']},
            {'[[Grado militar|Rango militar]]', argumento['rango'], clase='plainlist'},
            {'Conflictos', argumento['conflictos'] or argumento['batallas']},
            -- Astronautas (un subtipo de militar)
            {'Misiones espaciales', argumento['misiones espaciales']},
            {'Tiempo en el espacio', argumento['tiempo espacio']},
            -- 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']},
            },
            {'Partido político',  argumento['partido político'] or argumento['partido'] or propiedad('P102', conPeriodo), clase='plainlist'},
            {'Orden religiosa', argumento['congregación'] or propiedad('P611', enMayusculas)},
            {'Afiliaciones',  argumento['afiliaciones'] or propiedad('P1416')},
            {'Miembro de', argumento['miembro de'] or argumento['sindicato'] or propiedad('P463', conPeriodoDebeExistir), clase='plainlist'},
            {'Central sindical', argumento['central sindical'], clase='plainlist'},
            -- Web
            {'Sitio web', sitioWeb},
         },
         },


        {'Empresa',            argumento['empresa']},
        {'Salario',            argumento['salario']},
        {'Patrimonio',        argumento['patrimonio']},
        {'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 propiedad('P102')},
        {'Cargos políticos',  propiedad('P39', conPeriodo), clase='plainlist'},
        {'Creencias religiosas', propiedad('P140', enMayusculas) or
                        argumento['religión'] or
                        argumento['creencias']},
         {tipo='sección',
         {tipo='sección',
             ['titulo']  = 'Premios artísticos',  -- Ver la ficha de noble o la ficha de diseñador
             -- Familia.
             estilotitulo = estiloTituloSecciones,
             estilotitulo = estilotitulo,
             {'[[Premios Óscar]]', argumento['premios óscar']},
             ['titulo']   = mostrarSecciones and 'Familia', -- Ver la ficha de noble
            {'[[Premios Globo de Oro|Globos de Oro]]', argumento['premios globo de oro']},
              
             {'[[Premios BAFTA]]', argumento['premios bafta']},
        -- En el caso del cónyuge tiene preferencia el argumento hasta que se muestre los calficativos.
            {'[[Premios Emmy]]', argumento['premios emmy']},
             clase      ='plainlist', -- Mostrar las listas sin viñetas
             {'[[Premios del Sindicato de Actores|Premios SAG]]', argumento['premios sag']},
             {'Familia nobiliaria', propiedad('P53')},
             {'[[Premios Tony]]', argumento['premios tony']},
             {'Padres',     estaEnlazado(padres)},
             {'[[Premios Grammy]]', argumento['premios grammy']},
             {'Cónyuge',   estaEnlazado(argumento['cónyuge'] or argumento['conyuge'] or argumento['Cónyuge'] or argumento['Conyuge'] or
             {'[[Festival de Cannes]]', argumento['premios cannes']},
                      propiedad('P26', conPeriodo))},
            {'[[Berlinale]]', argumento['premios berlinale']},
             {'Pareja',     estaEnlazado(argumento['pareja'] or propiedad('P451', conPeriodo))},
            {'[[Festival Internacional de San Sebastián]]', argumento['premios san sebastian']},
             {'Hijos',     estaEnlazado(argumento['hijos'] or argumento['Hijos']) or
            {'[[Festival Internacional de Cine de Moscú]]', argumento['premios moscu']},
                      propiedad('P40', {['lista'] = 'no ordenada', ['debeExistir'] = ''})},
            {'[[Premios Goya]]', argumento['premios goya'] },
             {'Familiares', estaEnlazado(argumento['familiares'])}, --- ¿¿¿¿¿¿¿¿¿??????????? -- Hermano: P7, padastro: p43, pariente: p1038
             {'[[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)|Premios Iris]]', argumento['premios atv']},
            {'[[Premios Protagonistas]]', argumento['premios protagonistas']},
            {'[[Antena de Oro|Premios Antena de Oro]]', argumento['premios antena de oro']},
            {'[[Premios Micrófono de Oro]]', argumento['premios micrófono de oro']},
             {'[[Premio APM al Mejor Periodista del Año|Premio&nbsp;Víctor de&nbsp;la&nbsp;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)},
            {'Representante de', argumento['representante'] or propiedad('P1532', conPeriodo)},
        },
        {tipo='sección',
            ['titulo']  = 'Perfil de jugador',
            estilotitulo = estiloTituloSecciones,
            {'Juegos', argumento['juegos']  or propiedad('P2416')},
            {'Posición', argumento['posición']  or propiedad('P413')},
            {'Número', argumento['número']  or propiedad('P1618')},
            {'Equipos', argumento['equipos'] or propiedad('P54')},
            {'Ligas',  argumento['ligas']  or propiedad('P118')},
            {'Selección', argumento['selección']},
            {'Medallista', argumento['medallista olímpico']},
            {'Entrenador', argumento['entrenador'] or propiedad('P6087')},
            {'Plataformas de&nbsp;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
         -- Los premios pueden ser para varias ocupaciones por lo que se ponen al final
        -- Premios, condecoraciones, distinciones, etc.
         {'Premios',           argumento['premios'] or argumento['Premios'] or
         {'Distinciones', argumento['premios'] or argumento['Premios'] or
                              argumento['premio']  or argumento['Premio']  or
                        argumento['premio']  or argumento['Premio']  or
                              argumento['premios2'] or
                        argumento['premios2'] or
                              propiedad('P166', {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula'}),
                        obtenerPremios(Entidad)
                              clase       ='plainlist'}, -- Mostrar las listas sin viñetas
                      , clase ='plainlist'}, -- Mostrar las listas sin viñetas
                         
{tipo='sección',
['titulo'] = 'Medallas',
estilotitulo = estiloTituloSecciones,
{'', argumento['medallas'] },
},
}
 
if filterByOccupation( {
'Q931260', -- asesino
'Q484188', -- asesino en serie
'Q1154323', -- asesino relámpago
'Q2159907', -- criminal
'Q14886050', -- terrorista
'Q22962951', -- violador
'Q26267537', -- violador en serie
}, {
argumento['cargos criminales'],
argumento['condena'],
argumento['situación penal'],
argumento['víctimas'],
} ) then
local victimas = argumento['víctimas']
if victimas then
local ocupacionesValidasVictimas = {'Q484188', 'Q14886050', 'Q26267537', 'Q1154323'} -- asesino en serie, terrorista, violador en serie y asesino relámpago
for k,v in pairs(ocupacionesValidasVictimas) do
local snak = propiedad('P106', {['valor-función'] = formatoId})
if snak and snak:match(v) then
victimas = argumento['víctimas']
break
else
victimas = ''
end
end
end
table_merge(Ficha, {
{tipo='sección',
['titulo'] = 'Información criminal',
estilotitulo = estiloTituloSecciones,
{'[[Delito|Cargos criminales]]', argumento['cargos criminales']  or propiedad('P1399'), clase='plainlist'},
-- P2632 puede ser usado en alguno de los dos parámetros de abajo
{'[[Sentencia (derecho)|Condena]]', argumento['condena']},
{'Situación penal', argumento['situación penal']},
{'Víctimas', victimas},
}
})
end
table_merge(Ficha, {
         -- Con etiqueta/datos como en las fichas de escritor y artista en vez de como en la ficha de persona
         -- Con etiqueta/datos como en las fichas de escritor y artista en vez de como en la ficha de persona
         {'Firma', firma },
         {'Firma', (firma and ('[[Archivo:' .. firma .. '|150px]]'))}, -- 150 px como en la ficha de escritor en vez de 128


        {tipo='sección', -- Web
            clase      ='plainlinks',
            {'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
        },
         {tipo='sección',
         {tipo='sección',
             titulo      ='Notas',
             titulo      ='Notas',
             estilotitulo='border-top:1px solid #c0c0c0;text-align:left',
             estilotitulo='border-top:1px solid #c0c0c0;text-align:left',
             {'', argumento['notas'], estilodatos='text-align:left;font-size:90%; line-height:1.2em'}
             {'', argumento['notas'], estilodatos='text-align:left;font-size:90%; line-height:1.2em'}
         },
         },      
         --{'Fuente biográfica', argumento['fuentebiográfica']},
         {'Fuente biográfica', argumento['fuentebiográfica']},
        entidad = argumento['id'], -- para el enlace final a wikidata
    }
})
   
 
     categorias = ''
     categorias = {}
   
 
     if algunaPropiedadEnlazaWikidata then
     if argumento['lugar_de_descanso'] or --renombrado
    categorias = '[[Categoría:Wikipedia:Páginas con propiedades de Wikidata sin etiqueta]]'
        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
     end
 
   
local NF = require('Módulo:NF')
    --if educacion and almamater then
-- table.insert(categorias, NF.catLivingStatus(argumento['fecha de nacimiento'], argumento['fecha de fallecimiento'], true ) )
    -- categorias = categorias .. '[[Categoría:Wikipedia:Páginas que tienen informado el campo educación]]'
table.insert(categorias, NF.catSexGenderIdentity())
    --end
 
      
    if argumento['títulos secciones'] == '' then -- "no" al llamar a la ficha
     return ModuloFicha.infobox(Ficha) .. categorias
        --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
 
 
function table_merge(t1, t2)
for k,v in ipairs(t2) do
if type(k) == 'string' then
t1[k] = v
else
table.insert(t1, v)
end
end
return t1
end
end


function filterByOccupation( wikidataOccupations, localArguments )
if argumento['wikidata'] ~= 'no' then
local id = argumento['id'] or mw.wikibase.getEntityIdForCurrentPage()
if mw.wikibase.isValidEntityId( tostring( id ) ) then
local wd = mw.wikibase.getAllStatements(id, 'P106') -- Occupation
for k,v in pairs(wd) do
local oc = elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'id')
for i,j in pairs( wikidataOccupations ) do
if i == ec then
return true
end
end
end
end
end
for k,v in pairs(localArguments) do
if v and v ~= 'no' then
return true
end
end
return false
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('<br /> {{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},
            {'Junto con', argumento['juntoa'..numero] },
            {'Nominado por', argumento['nominado'..numero] },
            {'Nominada por', argumento['nominada'..numero] },
            {'Designado por', argumento['designado'..numero] },           
            {'Designada por', argumento['designada'..numero] },
            {'[[Monarca]]', argumento['monarca'..numero] },
            {'[[Presidente]]', argumento['presidente'..numero] },
            {'[[Primer ministro]]', argumento['primerministro'..numero] },
            {'[[Canciller]]', argumento['canciller'..numero] },
            {'[[Gobernador]]', argumento['gobernador'..numero] },
            {'[[Alcalde]]', argumento['alcalde'..numero] },
            {'[[Alcalde|Alcaldesa]]', argumento['alcaldesa'..numero] },
            {'[[Jefe de Gobierno]]', argumento['jefe'..numero] },
            {'[[Jefe de Gobierno|Jefa de Gobierno]]', argumento['jefa'..numero] },
            {'[[Gabinete (política)|Gabinete]]', argumento['gabinete'..numero] },         
            {'[[Gabinete (política)|Consejo de Ministros]]', argumento['consejo'..numero] },           
            {'Secretario', argumento['secretario'..numero]},
            {'Secretaria', argumento['secretaria'..numero]},
            {'[[Vicepresidente]]', argumento['vicepresidente'..numero] },
            {'[[Vicepresidente|Vicepresidenta]]', argumento['vicepresidenta'..numero] },
            {'[[Vice primer ministro]]', argumento['viceprimerministro'..numero] },
            {'[[Vice primer ministro|Vice primera ministra]]', argumento['viceprimeraministra'..numero] },
            {'Vicecanciller', argumento['vicecanciller'..numero]},
            {'[[Vicegobernador]]', argumento['vicegobernador'..numero] },
            {'[[Vicegobernador|Vicegobernadora]]', argumento['vicegobernadora'..numero] },           
            {'[[Teniente gobernador]]', argumento['teniente'..numero] },
            {'Vicealcalde', argumento['vicealcalde'..numero] },
            {'Vicejefe de gobierno', argumento['vicejefe'..numero]},
            {'Predecesor', argumento['predecesor'..numero]},
            {'Predecesora', argumento['predecesora'..numero]},
            {'Sucesor', argumento['sucesor'..numero]},
            {'Sucesora', argumento['sucesora'..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
-- Función que devuelve la lista de los valores de una propiedad en Wikidata formateados
function propiedad(idPropiedad,opciones)
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 Entidad and Entidad.claims and Entidad.claims[idPropiedad] then
        if not opciones then
    if not opciones then
            opciones = {['linkback']='sí'}
    opciones = {}
        end
    end
 
    opciones['propiedad'] = idPropiedad
        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
         valorPropiedad = ModuloWikidata.getPropiedad(opciones,Entidad.claims[idPropiedad])
            return
        end


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


        return valorPropiedad
    return valorPropiedad
     end
     end
end
end


function listaDesplegable(titulo, lista, frame)
function obtenerEtiquetaWikidata()
    if not lista then
if Entidad and Entidad.labels and Entidad.labels.es then
         return
         return Entidad.labels.es.value
     end
     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:#000; text-align:left|lista_estilo=padding-left:33%;text-align:left; display:none|1='
        .. lista .. '}}')
end
end


function seccionDesplegable(titulo, lista, frame, estilotitulo)
function listaDesplegable(titulo, lista, frame)
    if not lista then
if not lista then
        return
return
    end
end
    return frame:preprocess('{{Sección desplegable|título=' .. titulo ..  
        --'|marco_estilo=border:0; padding:0; border-top:1px solid #c0c0c0;' ..
return frame:preprocess('{{lista desplegable|título=' .. titulo ..  
        '|datos=<div style="text-align:left;margin: 1px; padding: 2px; border:1px">'.. lista .. '</div>|estilotitulo='.. (estilotitulo or '') ..';}}')
--'|marco_estilo=border:0; padding:0; border-top:1px solid #c0c0c0;' ..
'|marco_estilo=border:0; padding:0;' ..
'|título_estilo=background:transparent; text-align:left|lista_estilo=padding-left:33%;text-align:left; display:none|1='
.. lista .. '}}')
end
end


function estaEnlazado(que)
function estaEnlazado(que)
    -- De momento devolver siempre que está enlazado pues falla en por ejemplo:
if not que then  
    -- |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}}
return
    if true then return que end
end
 
    if not que then  
for contenido in que:gmatch("%[%[(.+)]]") do
        return
if not contenido:match('^:d:') then
    end
return que
 
end
    for contenido in que:gmatch("%[%[(.+)]]") do
end
        if not contenido:match('^:d:') and
          not contenido:match('^Categoría:') then
            return que
        end
    end
end
end


function formatoOcupacionMasculino(valor, opciones, frame, calificativos)
function formatoOcupacionMasculino(valor, opciones, frame)
    local enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion = ModuloWikidataFormatos.obtenerDatos(valor)
local enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion = ModuloWikidataFormatos.obtenerDatos(valor)
     return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion, opciones)
     -- Corregir la ocupación eliminando el femenino
if etiquetaOcupacion then
etiquetaOcupacion = etiquetaOcupacion:match('^(.+)%s*/%s*.+$') or etiquetaOcupacion
end
return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion, opciones)
end
end


function formatoOcupacionFemenino(valor, opciones, frame, calificativos)
function corregirOcupacion(etiquetaOcupacion)
    local enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion = ModuloWikidataFormatos.obtenerDatos(valor)
if not etiquetaOcupacion then
return
end
cadena1 = etiquetaOcupacion:match('^(.+)o%s*/a$') or -- científico/a
      etiquetaOcupacion:match('^(.+)%s*/a$')    -- escritor/a
if cadena1 then
return cadena1 .. 'a'
end


    -- Para las ocupaciones más frecuentes no se accederá a Wikidata
cadena1, cadena2, cadena3 = etiquetaOcupacion:match('^(.+)o(%s*)/a%s+(.+)$') --
    local tablaOcupacionesFemeninas={
        ['Q40348'  ] = 'abogada',
if cadena1 and cadena2 and cadena3 then
        ['Q16631371'] = 'académica',
return cadena1 .. 'a' .. cadena2 .. cadena3
        ['Q15253558'] = 'activista',
end
        ['Q1476215' ] = 'activista por los derechos humanos',
        ['Q33999'  ] = 'actriz',
cadena1, cadena2, cadena3 = etiquetaOcupacion:match('^(.+)%s*/a(%s+)(.+)$') -- escritor/a de literatura infantil
        ['Q10800557'] = 'actriz de cine',
        ['Q11481802'] = 'actriz de doblaje',
if cadena1 and cadena2 and cadena3 then
        ['Q948329'  ] = 'actriz de género',
return cadena1 .. 'a' .. cadena2 .. cadena3
        ['Q2259451' ] = 'actriz de teatro',
end
        ['Q10798782'] = 'actriz de televisión',
        ['Q2405480' ] = 'actriz de voz',
return etiquetaOcupacion:match('^.+%s*/%s*(.+)$') or -- actor/actriz
        ['Q488111'  ] = 'actriz pornográfica',
      etiquetaOcupacion
        ['Q10873124'] = 'ajedrecista',
end
        ['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
function formatoOcupacionFemenino(valor, opciones, frame)
        return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacionCorregida, idEntidadOcupacion, opciones)
local enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion = ModuloWikidataFormatos.obtenerDatos(valor)
    else
        -- La ocupación no está en la tabla anterior. Se intenta obtener de la propiedad P2522 en Wikidata de la ocupación
return ModuloWikidataFormatos.enlazar(enlaceOcupacion, corregirOcupacion(etiquetaOcupacion), idEntidadOcupacion, opciones)
        etiquetaOcupacionCorregida = ModuloWikidata.getPropiedadEnEspanyol(idEntidadOcupacion, 'P2521') or etiquetaOcupacion
        return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacionCorregida, idEntidadOcupacion, opciones)
    end
end
end


function obtenerValorCalificativo(Propiedad, Calificativo, ValorPropiedad)
function obtenerValorCalificativo(Propiedad, Calificativo, ValorPropiedad)
    -- Obtener el valor del primer calificativo de la propiedad con el valor recibido  
-- 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
if not Entidad or not Entidad.claims or not Entidad.claims[Propiedad] then
        return
return
    end
end
 
    for k,v in pairs(Entidad.claims[Propiedad]) do
for k,v in pairs(Entidad.claims[Propiedad]) do
        if v.mainsnak
if     v.mainsnak
          and v.mainsnak.datavalue
  and v.mainsnak.datavalue
          and v.mainsnak.datavalue.value
  and v.mainsnak.datavalue.value
          and v.mainsnak.datavalue.value['numeric-id'] == ValorPropiedad
  and v.mainsnak.datavalue.value['numeric-id'] == ValorPropiedad
          and v.qualifiers
  and v.qualifiers
          and v.qualifiers[Calificativo]
  and v.qualifiers[Calificativo]
          and v.qualifiers[Calificativo][1]
  and v.qualifiers[Calificativo][1]
          and v.qualifiers[Calificativo][1].datavalue then  
  and v.qualifiers[Calificativo][1].datavalue then  
            return v.qualifiers[Calificativo][1].datavalue.value
return v.qualifiers[Calificativo][1].datavalue.value
        end
end
    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' and k ~= 'wikidata' 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 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(p_entidad)
    if not p_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 filtrarDeclaracionPorRango = moduloWikidata.filtrarDeclaracionPorRango
    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 declaracionPremios = elementoTabla(p_entidad, 'claims', 'P166')
 
    if not declaracionPremios then
        return
    end
 
    -- Quedarnos solo con los premios con mayor rango. Ejemplo Bettina Rheims
 
    declaracionPremios = filtrarDeclaracionPorRango(declaracionPremios)
    if not declaracionPremios then
        return
    end
 
    local premios = {}
    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 muchos.
    if premiosFormateados[10] then
        return
    end
 
    -- Añadir el lápiz
    if premiosFormateados[1] then
        return lapizWikidata('<ul><li>' .. mw.text.listToText( premiosFormateados, '</li><li>','</li><li>' ),p_entidad.id,'P166') .. '</li></ul>'
     end
end
end


function siNoEs(que, valor)
function obtenerFacebook()
    if not que then
return obtenerValorCalificativo('P553' -- cuenta en red social
        return
                      , 'P554' --dirección en red social
    end
                      , 355)  -- Facebook
 
            or propiedad('P2013'); -- Ejemplo: Gillian Flynn
    if not que:match(valor) then
        return que
    end
end
end


function z.premios(frame)
function obtenerTwitter()
    local args    = frame.args
return obtenerValorCalificativo('P553' -- cuenta en red social
    local entidad = mw.wikibase.getEntityObject(args.id)
                      , 'P554' --dirección en red social
   
                      , 918)   -- Twitter
    if not entidad then
        return
    end
 
    return obtenerPremios(entidad)
end
end


return z
return z

Revisión del 18:03 14 ene 2024

La documentación para este módulo puede ser creada en Módulo:Ficha de persona/doc

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 propicedades posibles
local algunaPropiedadEnlazaWikidata -- Para alguna propiedad no existe la etiqueta ni el enlace mostrándose algo de la forma d:...

-- Módulos utilizados
local ModuloFicha            = require('Módulo:Ficha')
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 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}
	
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 los argumentos con los que se llama a la función
    argumentos = frame and frame.args or {};
 
    if not argumentos[1] then
        local parent  = frame:getParent();
        argumentos    = parent.args;
    end    
    
    -- Eliminar los parámetros vacíos.
    for k,v in pairs(argumentos) do
        if v~='' then
            argumento[k] = argumentos[k]
        end
    end
    
    -- 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 -- ¿No es lo mismo que alma máter??? No, es el título
        	    argumento['educacion']
    almamater = argumento['alma máter'] or argumento['alma_mater'] or argumento['alma mater'] or
            	propiedad('P69', {['enlace']='sí', ['lista'] = 'no ordenada'})

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

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

    -- 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 "puntura 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}))
    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
                      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
                      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
                         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
                         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']
          
    twitter  = argumento['twitter'] or argumento['Twitter'] or obtenerTwitter()
    facebook = argumento['facebook'] or argumento['Facebook'] or obtenerFacebook()
    
   
    -- 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
        tipocabecera = ''
        estilotitulo = 'background-color:#8DB1C3;color:#FFF'
    elseif ocupacionOArea and (ocupacionOArea:find('[Ee]scritor') or ocupacionOArea:find('[Nn]ovelista') or 
    	ocupacionOArea:find('[Pp]oeta') or ocupacionOArea:find('[Dd]ramaturgo')) then
        tipocabecera = 'libro'
        estilotitulo = 'background-color:#4c6099;color:#FFF'
    elseif ocupacionOArea and ocupacionOArea:find('[Pp]eriodista') then
    	if fechaFallecimiento or lugarFallecimiento then
    		colorfondo = '#c0c0c0'
    	else
    		colorfondo = '#ed8'
    	end
    	tipocabecera   = 'revista'
    	estilotitulo   = 'color:#FFF'
    elseif ocupacionOArea and ocupacionOArea:find('[Dd]iseñador') then
    	estilotitulo     = 'background-color:#ccccff' 
    	mostrarSecciones = true
 	else
        tipocabecera = 'humano fn'
        estilotitulo = 'background-color:#8DB1C3;color:#FFF'
    end          
    
    local Ficha = {
        clase           = 'biography vcard',

        -- Título
        tipocabecera    = tipocabecera,                   
        titulo          = nombre,
        colorfondo      = colorfondo,        
        estilotitulo    = estilotitulo,
        --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']      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['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']
                          ,
        -- 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',
        	['titulo']   = mostrarSecciones and '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']}, --????????????
            {'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'}), 
        	                   clase='category'},        
            {'Etnia',          propiedad('P172') or 
        	                   argumento['etnia'],
        	                   clase='category'},           	                   
            {'Ciudadanía',     argumento['ciudadanía'] or -- ¿No es lo mismo que la nacionalidad?
        	                   argumento['ciudadania'],
        	                  clase='category'},
        },
        {tipo='sección',
        	-- Educación
        	
            {'Educación',  educacion},  
            {'Alma máter', almamater, clase='plainlist'},
            {'Posgrado',   argumento['posgrado']}
        },


        {tipo='sección',
        	['titulo'] = mostrarSecciones and 'Información profesional',
            estilotitulo = estilotitulo,            
            
            {'Ocupación',      ocupacion, clase='role'},
            {etiquetaAnyosActivo,  argumento['años activo'] or 
        	                   argumento['periodo'] or argumento['período'] or argumento['Periodo'] or
        	                   argumento['tiempo'] or argumento['Tiempo']}, -- Periodistas
            {'Área',           area},
            {'Empleador',      argumento['empleador'] or
        	                   argumento['institución_de_trabajo'] or
        	                   argumento['nombre_estudio'] or
        	                   propiedad('P108', {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula'}),
                               clase       ='plainlist'},
            {'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']},
            {'Lengua materna',  argumento['lengua_materna'] or argumento['Lengua_materna'] or propiedad('P103', enMayusculas)},
            {'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']
        	                       },
            {'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)},
        },

        {'Empresa',            argumento['empresa']},
        {'Salario',            argumento['salario']},
        {'Patrimonio',         argumento['patrimonio']},
        {'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 propiedad('P102')},
        {'Cargos políticos',   propiedad('P39', conPeriodo), clase='plainlist'},
        {'Creencias religiosas', propiedad('P140', enMayusculas) or 
        	                 argumento['religión'] or
        	                 argumento['creencias']},
        {tipo='sección',
            -- Familia. 
            estilotitulo  = estilotitulo,
            ['titulo']    = mostrarSecciones and '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
        },

        -- Los premios pueden ser para varias ocupaciones por lo que se ponen al final
        {'Premios',            argumento['premios'] or argumento['Premios'] or
                               argumento['premio']  or argumento['Premio']  or
                               argumento['premios2'] or
                               propiedad('P166', {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula'}),
                               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',
            {'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
        },
        {tipo='sección',
            titulo      ='Notas',
            estilotitulo='border-top:1px solid #c0c0c0;text-align:left',
            {'', argumento['notas'], estilodatos='text-align:left;font-size:90%; line-height:1.2em'}
        },        
        {'Fuente biográfica', argumento['fuentebiográfica']},
    }
    
    categorias = ''
    
    if algunaPropiedadEnlazaWikidata then
    	categorias = '[[Categoría:Wikipedia:Páginas con propiedades de Wikidata sin etiqueta]]'
    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

-- Función que devuelve la lista de los valores de una propiedad en Wikidata formateados
function propiedad(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

    	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
	
	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:transparent; text-align:left|lista_estilo=padding-left:33%;text-align:left; display:none|1='
		.. lista .. '}}')
end

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

function formatoOcupacionMasculino(valor, opciones, frame)
	local enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion = ModuloWikidataFormatos.obtenerDatos(valor)
 
    -- Corregir la ocupación eliminando el femenino 
	
	if etiquetaOcupacion then
		etiquetaOcupacion = etiquetaOcupacion:match('^(.+)%s*/%s*.+$') or etiquetaOcupacion
	end
 
	return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion, opciones)
end

function corregirOcupacion(etiquetaOcupacion)
	if not etiquetaOcupacion then
		return
	end
	
	cadena1 = etiquetaOcupacion:match('^(.+)o%s*/a$') or -- científico/a
		      etiquetaOcupacion:match('^(.+)%s*/a$')     -- escritor/a
	if cadena1 then
		return cadena1 .. 'a'
	end

	cadena1, cadena2, cadena3 = etiquetaOcupacion:match('^(.+)o(%s*)/a%s+(.+)$') -- 
	
	if cadena1 and cadena2 and cadena3 then
		return cadena1 .. 'a' .. cadena2 .. cadena3
	end
	
	cadena1, cadena2, cadena3 = etiquetaOcupacion:match('^(.+)%s*/a(%s+)(.+)$') -- escritor/a de literatura infantil
	
	if cadena1 and cadena2 and cadena3 then
		return cadena1 .. 'a' .. cadena2 .. cadena3
	end
	
	return etiquetaOcupacion:match('^.+%s*/%s*(.+)$') or -- actor/actriz
	       etiquetaOcupacion
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
                      , 918)   -- Twitter
end

return z