Usuario:DonBarredora/Taller/Ficha de persona

local z = {}

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

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

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

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

-- Formatos según el tipo de cabecera

local formatos={

   ['por defecto'] = {['estiloTituloFicha'] = 'background-color:#8DB1C3;color:#FFF'},    
   --['actor']       = {['estiloTituloFicha'] = },
   ['ajedrecista'] = {['estiloTituloFicha'] = 'background-color:transparent;'},
   ['artista']     = {['estiloTituloFicha'] = 'background-color:#8DB1C3;color:#FFF'},
   ['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'},
   ['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)

   ModuloWikidata:setFrame(frame)  -- No funciona si se pone ModuloWikidata.setFrame(marco)    
   -- Obtener una copia de los argumentos eliminando los argumentos sin valor
   -- y dejando en blanco (aunque no nil) aquellos que valen "no"
   argumento = obtenerArgumentosConValor(frame) -- No poner local. Es global.
   --Determinar si se deben obtener datos de Wikidata
   if argumento['wikidata'] == 'no' and (argumento['fecha de fallecimiento'] or argumento['lugar de fallecimiento']
       or argumento['fecha de desaparición'] or argumento['lugar de desaparición']
       ) then
       obtenerDatosWikidata = false
       Entidad = nil
   else
       obtenerDatosWikidata = true
       -- Obtener los datos de la página donde se inserta la ficha de Wikidata.
       Entidad   = mw.wikibase.getEntityObject(argumento['id']) or {}
   end
   --Determinar datos para la ficha
   local educacion = argumento['educación'] or argumento['educacion'] or propiedad('P512',sinEnlazar)
   local almamater = argumento['alma máter'] or argumento['alma_mater'] or argumento['alma mater'] or argumento['almamáter'] or argumento['alma_máter']
           or propiedad('P69', { ['formatoTexto'] = 'mayúscula', ['lista'] = 'no ordenada', ['valor-función']='educado en', ['valor-módulo'] = 'Wikidata/Formatos educación', ['ordenar'] = 'por fecha', ['linkback']='sí'})
   if propiedad('P21', sinLapiz) == 'femenino' or propiedad('P21', sinLapiz) == 'mujer transgénero' then
       etiquetaAnyosActivo = 'Años activa'
       etiquetaConocidoPor = 'Conocida por'
       etiquetaInfluencias = 'Influida por'
       etiquetacampeon     = 'Campeona del mundo'
       etiquetaAlumnoDe    = 'Alumna de'
       etiquetaEducadoEn   = 'Educada en'
       funcionOcupacion    = formatoOcupacionFemenino
       etiquetaVeneradoEn  = 'Venerada en'
   else
       etiquetaAnyosActivo = 'Años activo'
       etiquetaConocidoPor = 'Conocido por'
       etiquetaInfluencias = 'Influido por'
       etiquetacampeon     = 'Campeón del mundo'
       etiquetaAlumnoDe    = 'Alumno de'
       etiquetaEducadoEn   = 'Educado en'
       funcionOcupacion    = formatoOcupacionMasculino
       etiquetaVeneradoEn  = 'Venerado en'
   end
   --No entiendo para qué sirve. En principio no se muestra para actores.
   --seccionartistica='Carrera artística'
   -- Generar los cargos
   local hayCargos
   local tablaCargos = {tipo='sección'}
   if argumento['cargo'] then
       hayCargos = true

table.insert(tablaCargos, {, '


'})

       table.insert(tablaCargos, generarcargo(argumento,1,frame))
       argumento['predecesor']= nil
       argumento['predecesora']= nil
       argumento['sucesor']= nil
       argumento['sucesora']= nil
   end
   for i=2, 10 do
       if argumento['cargo'..i] or argumento['inicio'..i] then
           hayCargos = true
           table.insert(tablaCargos, generarcargo(argumento,i,frame))
       end
   end
   -- La ocupación y el área solo se obtienen de Wikidata si no se informan los campos de ocupación y área.
   -- Esto es porque para los artistas puede tener en Wikidata como ocupación "pintor y escultor" y 
   -- tener informada el área con "pintura y escultura".
   local ocupacion = argumento['ocupación'] or argumento['ocupacion'] or  argumento['Ocupación']  or argumento['profesión']
   local area      = argumento['área'] or argumento['area'] or argumento['especialidad'] or argumento['campos']
   if not ocupacion and not area then
       ocupacion = propiedad('P106', {['formatoTexto'] = 'mayúscula', ['valor-función']=funcionOcupacion, ['calificativo'] = formatoPeriodo, ['linkback']='sí'})
       area      = propiedad('P101', enMayusculas) -- Campo de trabajo
   end
   local ocupacionOArea = ocupacion or area
   nombre = argumento['nombre'] or argumento['Nombre'] or
        obtenerEtiquetaWikidata() or 
        ModuloPaginas.nombrePagina({desambiguar='sí'})
   local nombre_completo   = argumento['nombre completo']
   local nombre_nacimiento = argumento['nombre de nacimiento'] or propiedad('P1477')
   local nombre_nacimiento_sin_lapiz = argumento['nombre de nacimiento'] or propiedad('P1477', sinLapiz)
   -- Nombre en la escritura nativa.
   -- Solo se muestra si no coincide con el nombre o el nombre de nacimiento o el nombre completo
   local nombresNativos={tipo='sección'}
   local nombreNativo, textoNombreNativo, idiomaNombreNativo
   if argumento['nombre nativo'] then
       if argumento['nombre nativo'] ~= nombre and 
          argumento['nombre nativo'] ~= nombre_nacimiento_sin_lapiz and
          argumento['nombre nativo'] ~= nombre_completo then
          table.insert(nombresNativos,{'Nombre nativo', argumento['nombre nativo']})
       end
   elseif Entidad then
       -- En el caso de obtener de Wikidata puede haber varios nombres nativos
       local declaracion = elementoTabla(Entidad, 'claims','P1559')
       if declaracion then
           for k,v in pairs(declaracion) do
               nombreNativo = elementoTabla(v, 'mainsnak', 'datavalue', 'value')
               if nombreNativo then
                   textoNombreNativo  = nombreNativo.text
                   idiomaNombreNativo = nombreNativo.language
                   if textoNombreNativo and idiomaNombreNativo and 
                      textoNombreNativo ~= nombre and 
                      textoNombreNativo ~= nombre_nacimiento_sin_lapiz and
                      textoNombreNativo ~= nombre_completo then
                          table.insert(nombresNativos, {
                              'Nombre en ' .. mw.language.fetchLanguageName(idiomaNombreNativo, 'es') , 
                              lapizWikidata(textoNombreNativo,Entidad.id,'P1559')
                          })
                   end
               end
           end
       end
   end
   -- Informar los datos de nacimiento, desaparición y de fallecimiento
   -- No se debe alterar el orden para que en caso de que el lugar de fallecimiento o el de desaparición sea el mismo
   -- que el de nacimiento esté enlazado el lugar de nacimiento
   local nacimiento, desaparicion, fallecimiento
   local fechaNacimientoTimestamp = elementoTabla(Entidad, 'claims', 'P569', 1, 'mainsnak', 'datavalue', 'value', 'time')
   local lugarNacimiento    = argumento['lugar de nacimiento'] or propiedad('P19', {['conjunción']=' o ', ['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback']='sí', fecha=fechaNacimientoTimestamp})
   local lugarDesaparicion  = argumento['lugar de desaparición']
   local fechaFallecimientoTimestamp = elementoTabla(Entidad, 'claims', 'P570', 1, 'mainsnak', 'datavalue', 'value', 'time')
   local lugarFallecimiento = argumento['lugar de fallecimiento'] or propiedad('P20', {['conjunción']=' o ', ['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback']='sí', fecha = fechaFallecimientoTimestamp})
   fallecimiento = enVariasLineas({
       argumento['fecha de fallecimiento'] or (obtenerDatosWikidata and entreParentesis(propiedad('P570', enMayusculasO), obtenerEdadWikidata('P570'))), 
       lugarFallecimiento
   })
   if fallecimiento then
       desaparicion = enVariasLineas({
           argumento['fecha de desaparición'] or propiedad('P746', enMayusculasO), 
           lugarDesaparicion
       })
   else
       desaparicion = enVariasLineas({
           argumento['fecha de desaparición'] or (obtenerDatosWikidata and entreParentesis(propiedad('P746', enMayusculasO), obtenerEdadWikidata('P746'))), 
           argumento['lugar de desaparición']
       })
   end
   if fallecimiento or desaparicion then
       nacimiento = enVariasLineas({
           argumento['fecha de nacimiento'] or propiedad('P569', enMayusculasO), 
           lugarNacimiento
       })
   else
       nacimiento = enVariasLineas({
           argumento['fecha de nacimiento'] or (obtenerDatosWikidata and entreParentesis(propiedad('P569', enMayusculasO), obtenerEdadWikidata())), 
           lugarNacimiento
       })
   end
   if argumento['padres'] then
       padres = estaEnlazado(argumento['padres'])
   else
       padre = propiedad('P22')
       madre = propiedad('P25')
       if padre and madre then
           padres = padre .. '
' .. madre padre = nil madre = nil end end
   firma = argumento['firma'] or argumento['Firma'] or propiedad('P109', {['enlace'] = 'no', ['linkback'] = false, ['rangoMayor'] = 'sí', ['uno'] = 'sí'}) or 
   if firma and firma ~=  then
   	firma = 'Archivo:' .. firma .. ''
   end
   -- Formato del título de la ficha y de las secciones según la ocupación, si la persona tiene cargos o si ha fallecido
   local formato, cabecera
   if argumento['cabecera'] then
       cabecera = argumento['cabecera']  -- Por defecto utilizar el campo cabecera de la plantilla
   elseif hayCargos == true then
       cabecera = 'autoridad'
   elseif not ocupacionOArea then
       cabecera = 'por defecto'
   elseif ocupacionOArea:find('[Aa]ctor') or ocupacionOArea:find('[Aa]ctriz') or ocupacionOArea:find('[Pp]roductor de cine')
       or ocupacionOArea:find('[Dd]irector de cine') then
       cabecera = 'cine'
   elseif ocupacionOArea:find('[Aa]jedrecista') or argumento['elo'] or rankingajedrez then
       cabecera = 'ajedrecista'
   elseif ocupacionOArea:find('[Aa]stronauta') then
       cabecera = 'astronauta'
   elseif ocupacionOArea:find('[Ee]scritor') or ocupacionOArea:find('[Nn]ovelista') or 
          ocupacionOArea:find('[Pp]oeta') or ocupacionOArea:find('[Dd]ramaturgo') then
       cabecera = 'escritor'
   elseif ocupacionOArea:find('[Cc]antante') then
       cabecera = 'cantante'
   elseif ocupacionOArea:find('[Mm]úsico') then
       cabecera = 'músico'
   elseif ocupacionOArea:find('[Cc]ompositor') then
       cabecera = 'otro música'
   elseif ocupacionOArea:find('[Pp]olític[oa]') or argumento['cargo'] then
       cabecera = 'por defecto'
   elseif ocupacionOArea:find('[Pp]eriodista') then
       cabecera = 'periodista'
   elseif ocupacionOArea:find('[Dd]iseñador') then
       cabecera = 'diseñador'
   elseif ocupacionOArea:find('[Pp]resentador') or ocupacionOArea:find('[Cc]onductor') then
       cabecera = 'televisión'
   elseif ocupacionOArea:find('[Mm]odelo') then
       cabecera = 'modelo'
   elseif ocupacionOArea:find('[Mm]ilitar') then
       cabecera = 'militar'
   elseif ocupacionOArea:find('[Pp]apa') or ocupacionOArea:find('[Oo]bispo') or
          ocupacionOArea:find('[Cc]ardenal') or ocupacionOArea:find('[Pp]atriarca') then
       cabecera = 'religioso'
   elseif ocupacionOArea:find('[Tt]orero') then
       cabecera = 'torero'
   elseif ocupacionOArea:find('[Vv]ideojuego') then
       cabecera = 'videojuego'
   elseif ocupacionOArea:find('[Yy]outuber') then
       cabecera = 'youtuber'
   else
       cabecera = 'por defecto'
   end
   local OrdenacionDiaconal
   if argumento['diaconado por'] then
       OrdenacionDiaconal = argumento['diaconado'] .. ' por ' ..argumento['diaconado por'].. ''
   else
       OrdenacionDiaconal = argumento['diaconado']
   end
   local OrdenacionSacerdotal -- ?item P793 Q41463697 Q585
   if argumento['presbiterado por'] then
       OrdenacionSacerdotal = argumento['presbiterado'] .. ' por ' ..argumento['presbiterado por'].. ''
   else
       OrdenacionSacerdotal = argumento['presbiterado']
   end
   local OrdenacionEpiscopal -- ?item P793 Q125375 Q585
   if argumento['episcopado por'] then -- ?item P793 Q125375 Q1598
       OrdenacionEpiscopal = argumento['episcopado'] .. ' por ' ..argumento['episcopado por'].. ''
   else
       OrdenacionEpiscopal = argumento['episcopado']
   end
   local Cardenalato -- ?item P793 Q41154026 Q585
   if argumento['cardenalato por'] then -- ?item P793 Q41154026 Q748
       Cardenalato = argumento['cardenalato'] .. ' por ' ..argumento['cardenalato por'].. ''
   else
       Cardenalato = argumento['cardenalato']
   end
   local EscudoTitulo, Escudo
   if argumento['escudo'] ~=  and (cabecera == 'religioso' and argumento['escudo'] or propiedad('P94')) then -- ¿deberíamos usar P237 en su lugar?
       Escudo = argumento['escudo'] or propiedad('P94', {})
       EscudoTitulo = 'Escudo'
   else
       EscudoTitulo = 
   end
   local LemaEscudo = argumento['lema'] or propiedad('P1451')
   if LemaEscudo and argumento['lema traducido'] then
       LemaEscudo = LemaEscudo .. ' por ' ..argumento['lema traducido'].. ''
   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'] or propiedad('P39', {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', 
           ordenar='por fecha', 
           ['linkback']='sí',
           ['valor-función'] = ModuloWikidataFormatos.formatoCargo
       })
   end

if argumento['ranking'] or argumento['ránking'] then

   rankingajedrez= (argumento['ranking'] or argumento['ránking']) .. frame:preprocess('[1]​')

end

   -- Imagen y pie de la imagen
   local imagen = argumento['imagen']  or argumento['Imagen'] or argumento['foto']
   local pieDeImagen
   if imagen then
       pieDeImagen = argumento['pie de imagen'] or argumento['pieimagen'] or
                     argumento['descripción'] or argumento['descripcion'] or
                     argumento['pie de foto'] or argumento['piedefoto'] or
                     argumento['textoimagen'] or argumento['TextoImagen'] or argumento['texto_imagen'] or
                     argumento['pie de foto']
   else
       imagen, pieDeImagen = obtenerImagenWikidata()
       -- Pendiente obtener el pie del calificativo P2096
   end

local relacionados = argumento['relacionados'] or if relacionados and mw.ustring.len(relacionados) > 200 then relacionados = end

   local Ficha = {
       wikidata        = not obtenerDatosWikidata and 'no',
       clase           = 'biography vcard',
       -- Título
       tipocabecera    = 'persona',
       titulo          = nombre,
       --colorfondo      = colorfondo, -- No se usa
       estilotitulo    = estiloTituloFicha,
       --Imagen
       --De momento no se pone una raya como en la ficha de escritor tras la imagen
       imagen          = imagen,
       ['tamañoimagen']= argumento['tamaño de imagen'] or argumento['tamaño'] or 
                         argumento['tamaño imagen'] or argumento['tamañoimagen'] or argumento['tamañodelaimagen'] or
                         argumento['tamaño de foto'] or 
                         '220px', -- or '200px' en la ficha de escritor, 192 en la ficha de artista. Tomo por defecto 220, el tamaño de thumb
       pie             = pieDeImagen,
       -- Pendiente: en la ficha de escritor el texto se pone entre  y en la de artista se usa el estilo font-size:smaller
       --Etiquetas y datos
       estiloetiqueta  = 'width:33%', -- 25% en la ficha de escritor. Sin especificar en la de persona
                         --'padding:0.2em 1.0em 0.2em 0.2em; background-color:transparent; line-height:1.2em;', -- En la ficha de persona original
       estilodatos     = 'line-height:1.3em; vertical-align:middle;',
       tablaCargos,
       {tipo='sección',
           ['titulo']   = 'Información personal',   -- Ver la ficha de noble o la ficha de diseñador
           estilotitulo = estiloTituloSecciones,
           {'Nombre completo',                                      -- solo si no coincide con:
               (nombre_completo ~= nombre) and                      --    - el nombre que se muestra en el título de la ficha
               (nombre_completo ~= nombre_nacimiento_sin_lapiz) and --    - o con el nombre de nacimiento
               nombre_completo},
           {'Nombre de nacimiento', -- solo si no coincide con el nombre que se muestra en el título de la ficha
               (nombre_nacimiento_sin_lapiz ~= nombre) 
               and nombre_nacimiento},
           nombresNativos,
           {'Nombre religioso', argumento['nombre religioso'] or propiedad('P1635')},
           {'Apodo',              argumento['apodo'] or propiedad('P1449')},
           {'Otros nombres', argumento['otros nombres'] or argumento['alias'], -- ¿No es lo mismo que el apodo?????
                                  clase='nickname'},
           {'Nacimiento',         nacimiento},
           {'Desaparición',       desaparicion},
           {'Fallecimiento',      fallecimiento},
           {'Causa de muerte', siNoEs(argumento['causa muerte'] or
                                  propiedad('P509', enMayusculas) or 
                                  propiedad('P1196', enMayusculas), 'Causas naturales')}, -- circunstancias de la muerte
           {'Sepultura',  argumento['lugar de descanso'] or propiedad('P119', {['valor-módulo'] = 'Wikidata/Formato lugar', ['linkback'] = 'sí'}) },
           {'Residencia',     sinBandera(argumento['residencia'] or 
                              argumento['país_de_residencia'] or argumento['pais_de_residencia'] or
                              argumento['lugar_de_residencia']) or
                              propiedad('P551', {['debeExistir'] = 'sí', ['linkback']='sí', ['rangoMayor'] = 'sí'}),
                              clase='etiqueta'},
           {'Nacionalidad',   sinBandera(argumento['nacionalidad'] or argumento['Nacionalidad'] or argumento['ciudadanías']) or --Pendiente hacer que salga el gentilicio
                              require('Módulo:Wikidata/Formatos país').formatoNacionalidad(elementoTabla(Entidad,'claims','P27'),{ 
                                  ['formatoTexto'] = 'mayúscula',
                                  ['propiedad'] = 'P27', 
                                  ['linkback']='sí', ['entityId']=elementoTabla(Entidad,id)}), 
                              clase='category'},
           {'Ciudadanía',     sinBandera(argumento['ciudadanía'] or -- ¿No es lo mismo que la nacionalidad?
                              argumento['ciudadania']),
                              clase='category'},
           {'Etnia',          --propiedad('P172', enMayusculas) or 
                              argumento['etnia'] or argumento['grupo étnico'],
                              clase='category'},
           {'Religión',       argumento['religión'] or propiedad('P140', debeExistir)},
           {'Lengua materna',  argumento['lengua materna'] or argumento['Lengua_materna'] or argumento['lengua_materna'] or propiedad('P103', enMayusculas)},
       },
       {tipo='sección',
           estilotitulo = estiloTituloSecciones,
           ['titulo']   = 'Características físicas',
           {'Altura',             argumento['altura'] or argumento['estatura'] or propiedad('P2048', {['valor-función']='magnitud', ['valor-módulo'] = 'Wikidata/Formato magnitud', ['linkback']='sí'})},
           {'Peso',               argumento['peso'] or propiedad('P2067', {['valor-función']='magnitud', ['valor-módulo'] = 'Wikidata/Formato magnitud', ['linkback']='sí'})},
           {'Medidas', argumento['medidas']},
           {'Ojos', argumento['color de ojos'] or propiedad('P1340', enMayusculas)},
           {'Cabello', argumento['color de cabello'] or propiedad('P1884', enMayusculas)},
           {'Pecho natural', argumento['busto natural']},
           --{'Orientación sexual', propiedad('P91', enMayusculas) or argumento['orientación sexual'] or argumento['orientación real']}
         },
       {tipo='sección',
           -- Familia. 
           estilotitulo  = estiloTituloSecciones,
           ['titulo']    = 'Familia', -- Ver la ficha de noble
       -- En el caso del cónyuge tiene preferencia el argumento hasta que se muestre los calificativos.
           clase       ='plainlist', -- Mostrar las listas sin viñetas
           {'Familia nobiliaria', propiedad('P53', debeExistir)},
           {(padres and 'Padres') or (padre and 'Padre') or 'Madre', -- Mostrar padres, padre o madre según esté informado ambos o solo uno de ellos
               padres or padre or madre},
           {'Cónyuge',    estaEnlazado(argumento['cónyuge'] or argumento['conyuge'] or argumento['Cónyuge'] or argumento['Conyuge'] or
                          propiedad('P26', conPeriodo))},
           {'Pareja',     estaEnlazado(argumento['pareja'] or propiedad('P451', conPeriodo))},
           {'Hijos',      estaEnlazado(argumento['hijos'] or argumento['Hijos']) or
                          propiedad('P40', {['lista'] = 'no ordenada', ['debeExistir'] = 'sí', ['linkback']='sí'}) or
                          propiedad('P1971', sinEnlazar)
           },
           {'Familiares', estaEnlazado(argumento['familiares'])}, --- ¿¿¿¿¿¿¿¿¿??????????? -- Hermano: P7, padastro: p43, pariente: p1038
       },
       {tipo='sección',
           ['titulo']   = 'Educación',
           estilotitulo = estiloTituloSecciones,
           {'Educación',  educacion},
           {etiquetaEducadoEn, almamater, clase='plainlist'},
           {'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'] or propiedad('P184')},
           {etiquetaAlumnoDe, argumento['alumno de'] or  propiedad('P1066', conPeriodoDebeExistir), clase='plainlist'},
       },
       {tipo='sección',
           ['titulo'] = 'Información profesional',
           estilotitulo = estiloTituloSecciones,
           {'Ocupación',      ocupacion, clase='role'},
           {'Área',           area},
           {etiquetaAnyosActivo,  argumento['años activo'] or argumento['años activa'] or argumento['añosactivo'] or 
                              argumento['periodo'] or argumento['período'] or argumento['Periodo'] or
                              argumento['tiempo'] or argumento['Tiempo'] or argumento['años actividad'] or
                              formatoPeriodo({ -- falta que salga el lápiz
                                  ['P580']={[1]=elementoTabla(Entidad, 'claims','P2031',1,'mainsnak')},
                                  ['P582']={[1]=elementoTabla(Entidad, 'claims','P2032',1,'mainsnak')}
                              })},
           {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, {'Ordenación diaconal', OrdenacionDiaconal}, {'Ordenación sacerdotal', OrdenacionSacerdotal}, {'Ordenación episcopal', OrdenacionEpiscopal}, {'Proclamación cardenalicia', Cardenalato}, {'Título cardenalicio', argumento['título cardenalicio']}, {'Iglesia', argumento['iglesia']}, {'Secularización', argumento['secularización']}, {'Beatificación', argumento['beatificación']}, {'Canonización', argumento['canonización'] or propiedad('P411', enMayusculas)}, {'Festividad', argumento['festividad'] or propiedad('P841')}, {'Atributos', argumento['atributos']}, {etiquetaVeneradoEn, argumento['venerado en'] or propiedad('P1049')}, {'Patronazgo', argumento['patronazgo'] or propiedad('P417')}, {'Santuario', argumento['santuario']},

           },
           -- Sección artística (actores y ¿presentadores?)
           {tipo='sección',
               ['titulo']   = seccionartistica,
               estilotitulo = estiloTituloSecciones,
               {'Rol debut'    , argumento['rol debut']},
               {'Año de debut' , argumento['rol debut'] and argumento['año debut']},
               --{'Año de retiro', argumento['año retiro'] or propiedad('P2032')},
               {'Películas'    , argumento['número de películas']},
               {'Serie'        , argumento['serie']},
           },
           {'Empleador',      argumento['empleador'] or
                              argumento['institución_de_trabajo'] or
                              argumento['nombre_estudio'] or
                              propiedad('P108', conPeriodo),
                              clase       ='plainlist'},
           --Profesores
           {'Estudiantes doctorales',   argumento['estudiantes doctorales'] or propiedad('P185', debeExistir)},
           {(ocupacionOArea and ocupacionOArea:find('[Pp]rofesor') and 'Estudiantes') or 'Alumnos', argumento['estudiantes'] or propiedad('P802', debeExistir)},
           -- Periodistas, presentadores y videoblogueros
           {tipo='sección',
               {'Medio',          argumento['medio de comunicación']}, -- Unas veces informados con el significado de área y otras con el empleador
               {'Canal',          argumento['canal']},
               {'Programas',      argumento['programas'] or argumento['programa']},
           },
           -- Videoblogueros, en especial youtubers
           {tipo='sección',
               {'Vídeos', argumento['videos']},
               {'Suscriptores', argumento['suscriptores']},
               {'Vistas totales', argumento['vistas totales']},
           },
           -- Ocupación (escritores, artistas, periodistas, diseñadores, etc)
           -- Información artística
           {tipo='sección',
               plural(argumento['movimiento'] or argumento['Movimiento'] or argumento['movimientos'] or 
                   propiedad('P135', {
                       ['valor-módulo'] = 'Wikidata/Formato movimiento', 
                       ['valor-función'] = 'formatoMovimiento', 
                       ['linkback']='sí', 
                       ['calificativo'] = formatoPeriodo,
                       ['rangoMayor'] = 'sí',
                       ordenar='por fecha', ['formatoTexto'] = 'mayúscula',}), 'Movimiento', 'Movimientos'),
               {'Seudónimo', argumento['seudónimo'] or argumento['Seudónimo'] or argumento['alias'] or argumento['Alias'] or propiedad('P742')},
               {'Lengua literaria',  argumento['lengua_literaria'] or argumento['Lengua_literaria']},
               plural(argumento['género'] or argumento['Género'] or propiedad('P136', enMayusculas), 'Género', 'Géneros'),
               plural(argumento['instrumento'] or propiedad('P1303', enMayusculas), 'Instrumento', 'Instrumentos'),
               {'Tipo de voz', argumento['voz'] or argumento['tipo de voz'] or argumento['tesitura'] or propiedad('P412', enMayusculas)},
               plural(argumento['compañía discográfica'] or propiedad('P264', conPeriodo), 'Discográfica', 'Discográficas', 'plainlist'),
           },
           -- Obras notables. Se ponen de momento en cursivas pero es incorrecto en el caso de arquitectos.
           {'Obras notables', argumento['obras destacadas'] or
                              argumento['obras notables'] or argumento['obras_notables'] or argumento['Obras notables'] or
                              argumento['obras'] or
                              argumento['proyectos_representativos'] or propiedad('P800',{['enlace']='sí', ['lista'] = 'no ordenada',  ['debeExistir'] = 'sí', ['formatoTexto']='cursivas', ['linkback']='sí'}),
                              clase='plainlist'
           },
           {'Proyectos representativos', argumento['proyectos representativos']},
           {'Artistas relacionados', relacionados},
           {'Abreviatura en botánica',
               argumento['abreviatura en botánica'] or propiedad('P428')},
           {'Abreviatura en zoología',
               argumento['abreviatura en zoología'] or propiedad('P835')},
           {'Abreviatura en astronomía',
               argumento['abreviatura en astronomía']},
               
           --{, listaDesplegable(etiquetaInfluencias, argumento['influenciado por'] or argumento['influido por'] or 
           --         argumento['influencias'] or argumento['Influencias'], frame)},
           --{,         listaDesplegable('Influyó a', argumento['influyó en'] or argumento['influyó'] or argumento['Influyó'], frame)},
           -- Militares
           {'Rama militar', argumento['rama']       or propiedad('P241', enMayusculas)},
           {'Rango militar',        argumento['rango']      or propiedad('P410', conPeriodo), clase='plainlist'},
           {'Conflictos', argumento['conflictos'] or argumento['batallas'] or propiedad('P607', enMayusculas)},
           -- Astronautas (un subtipo de militar)
           {'Misiones espaciales', argumento['misiones espaciales'] or propiedad('P450')},
           {'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']}, -- 
               {etiquetacampeon,       argumento['campeón']    or argumento['campeon']},
               {'Elo',           propiedad('P1087',{['formatoUnidad'] = 'número', ['calificativo']   = 'P585', ['linkback']='sí', ['rangoMayor'] = 'sí', ['ordenar'] = 'por fecha', ['uno'] = 'último'}) or argumento['elo'] }, -- 
               {'Mejor elo',     argumento['mejor elo']},
               {'Escalafón FIDE',     rankingajedrez},
               {'Mejor escalafón',    argumento['mejor ranking']},
               {'Término',             argumento['término'] or -- 
                                       argumento['termino']},
               {'Predecesor',          argumento['predecesor']},
               {'Predecesora',         argumento['predecesora']},
               {'Sucesor',             argumento['sucesor']},
               {'Sucesora',            argumento['sucesora']},
           }, 
           {'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'},
       },
       {tipo='sección',
           ['titulo']   = 'Premios artísticos',   -- Ver la ficha de noble o la ficha de diseñador
           estilotitulo = estiloTituloSecciones,
           {'Premios Óscar', argumento['premios óscar']},
           {'Globos de Oro', argumento['premios globo de oro']},
           {'Premios BAFTA', argumento['premios bafta']},
           {'Premios Emmy', argumento['premios emmy']},
           {'Premios SAG', argumento['premios sag']},
           {'Premios Tony', argumento['premios tony']},
           {'Premios Grammy', argumento['premios grammy']},
           {'Festival de Cannes', argumento['premios cannes']},
           {'Berlinale', argumento['premios berlinale']},
           {'Festival Internacional de San Sebastián', argumento['premios san sebastian']},
           {'Festival Internacional de Cine de Moscú', argumento['premios moscu']},
           {'Premios Goya', argumento['premios goya'] },
           {'Premios César', argumento['premios césar'] or argumento['premios cesar']},
           {'Premios Ariel', argumento['premios ariel']},
           {'Premios Cóndor de Plata', argumento['premios cóndor'] or argumento['premios condor']},
           {'TP de Oro', argumento['premios tp de oro']},
           {'Premios Ondas', argumento['premios ondas']},
           {'Premios Iris', argumento['premios atv']},
           {'Premios Protagonistas', argumento['premios protagonistas']},
           {'Premios Antena de Oro', argumento['premios antena de oro']},
           {'Premios Micrófono de Oro', argumento['premios micrófono de oro']},
           {'Premio Víctor de la Serna', argumento['premios víctor de la serna']},
           {'Otros premios', argumento['otros premios']},
       },
       {tipo='sección',
           ['titulo']   = 'Carrera deportiva',   -- Ver la ficha de noble o la ficha de diseñador
           estilotitulo = estiloTituloSecciones,
           {'Deporte', argumento['deporte'] or propiedad('P641', enMayusculas)},
           {'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 transmisión',  argumento['plataforma']},
       },
       {,seccionDesplegable('Títulos y 
reconocimientos',argumento['títulos'], frame,estiloTituloSecciones)},
-- Los premios pueden ser para varias ocupaciones por lo que se ponen al final -- Premios, condecoraciones, distinciones, etc. {'Distinciones', argumento['premios'] or argumento['Premios'] or argumento['premio'] or argumento['Premio'] or argumento['premios2'] or obtenerPremios(Entidad) , clase ='plainlist'}, -- Mostrar las listas sin viñetas

{tipo='sección', ['titulo'] = 'Medallas', estilotitulo = estiloTituloSecciones, {, argumento['medallas'] }, },

       {tipo='sección',
           ['titulo'] = 'Información criminal',
           estilotitulo = estiloTituloSecciones,
           {'Cargo(s) criminal(es)', argumento['cargos criminales']  or propiedad('P1399'), clase='plainlist'},
           -- P2632 puede ser usado en alguno de los dos parámetros de abajo
           {'Condena',               argumento['condena']},
           {'Situación penal',       argumento['situación penal']},
       },
       -- Con etiqueta/datos como en las fichas de escritor y artista en vez de como en la ficha de persona
       {'Firma', firma },
       -- Web
       {tipo='sección',
           clase       ='plainlinks',
           titulo      ='Web',
           estilotitulo  = estiloTituloSecciones,
           {'Sitio web', noAlargar(enlazarURL(argumento['web'] or argumento['página web'] or argumento['website'] or argumento['sitio web'] or argumento['sitioweb']) or
               propiedad('P856', {['valor-función'] = formatoURL, ['linkback']='sí', ['rangoMayor'] = 'sí'}))},
       },
       {tipo='sección',
           titulo      ='Notas',
           estilotitulo='border-top:1px solid #c0c0c0;text-align:left',
           {, argumento['notas'], estilodatos='text-align:left;font-size:90%; line-height:1.2em'}
       },
       -- Sección hipotética, las imágenes inferiores no se muestran dentro de una sección
       {,
           EscudoTitulo or ,
           estilodatos = 'text-align: center; font-weight: bold;' .. (estiloTituloSecciones or ),
       },
       imageninferior = Escudo,
       ['tamañoimageninferior'] = '110px',
       pieinferior = LemaEscudo,
       --{'Fuente biográfica', argumento['fuentebiográfica']},
       entidad = argumento['id'], -- para el enlace final a wikidata
   }
   categorias = {}
   if  argumento['lugar_de_descanso'] or --renombrado
       argumento['supervisora_doctoral'] or --renombrado
       argumento['supervisores_doctorales'] or --renombrado
       argumento['supervisor_doctoral'] or --renombrado
       argumento['tesis_url'] or --renombrado
       argumento['tesis_título'] or --renombrado
       argumento['tesis_año'] or --renombrado
       argumento['abreviatura en astronomía']
       --or argumento['influyó en'] or argumento['influyó'] or argumento['Influyó'] -- eliminado
       --or argumento['predecesor'] or argumento['sucesor']-- eliminado
       or argumento['fuentebiográfica'] --por eliminar
       or argumento['mail'] --por eliminar
       then
           table.insert(categorias, )
   end

local NF = require('Módulo:NF') -- table.insert(categorias, NF.catLivingStatus(argumento['fecha de nacimiento'], argumento['fecha de fallecimiento'], true ) ) table.insert(categorias, NF.catSexGenderIdentity())

   if argumento['títulos secciones'] ==  then -- "no" al llamar a la ficha
       --if true then return require('Módulo:Tablas').tostring(Ficha) end
       eliminarTitulosSecciones(Ficha)
   end
   namespace = mw.title.getCurrentTitle().namespace
   if categorias[1] and (namespace == 0 or namespace == 104) then
       return ModuloFicha.infobox(Ficha) .. table.concat(categorias)
   else
       return ModuloFicha.infobox(Ficha)
   end

end

function eliminarTitulosSecciones (tabla)

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

end

function generarcargo(argumento,numero,frame)

   dato=numero --se requieren dos variables por el primer parámetro
   if numero == 1 then numero = end --si es el primer cargo, entonces no tiene número
   if argumento ['cargo'..numero] == nil then titulo=
   elseif argumento['escudo'..numero] == nil then titulo=argumento['cargo'..numero] -- si no tiene escudo entonces dejar en blanco, si tiene escudo ponerlo
   else   titulo='[[Archivo:'..argumento['escudo'..numero]..'|44x40px]]
'..argumento['cargo'..numero] end if argumento['distrito'..numero] then titulo = titulo..'
por '..argumento['distrito'..numero]..'' end if argumento['embajadorde'..numero] then titulo = titulo .. frame:preprocess('{{Geodatos '.. argumento['embajadorde'..numero] ..'

| bandera icono | variante = | tamaño = 44x40px }}') end--{{Geodatos {{{embajadorde}}} | bandera icono | variante = | tamaño = 44x40px }}

   if argumento['país'..numero] then titulo = titulo .. frame:preprocess('{{Geodatos '.. argumento['país'..numero] ..'

| bandera icono | variante = | tamaño = 44x40px }}') end

   if argumento['subtítulo'..numero] then titulo = titulo .. '
'..argumento['subtítulo'..numero]..'' end periodo = if argumento['inicio'..numero] and argumento['final'..numero] then periodo = argumento['inicio'..numero]..'-'.. argumento['final'..numero] elseif argumento['final'..numero] then periodo = 'Hasta el ' .. argumento['final'..numero] elseif argumento['inicio'..numero] then titulo = titulo .. '
Actualmente en el cargo' periodo = 'Desde el '..argumento['inicio'..numero] end
   cadenatexto={tipo='sección',
           ['titulo']=titulo,
           estilotitulo = 'background-color:#E6E6FA;',
           {, periodo},
           {'Vicegobernador', argumento['vicegobernador'..numero] },
           {'Vicegobernadora', argumento['vicegobernadora'..numero] },
           {'Presidente', argumento['presidente'..numero] },
           {'Monarca', argumento['monarca'..numero] },
           {'Primer ministro', argumento['primerministro'..numero] },
           {'Gobernador', argumento['gobernador'..numero] },
           {'Jefe de Gobierno', argumento['jefe'..numero]},
           {'Junto con', argumento['juntoa'..numero] },
           {'Nominado por', argumento['nominado'..numero] },
           {'Designado por', argumento['designado'..numero] },
           {'Gabinete', argumento['gabinete'..numero] },
           {'Vicepresidente', argumento['vicepresidente'..numero] },
           {'Vicepresidenta', argumento['vicepresidenta'..numero] },
           {'Vice primer ministro', argumento['viceprimerministro'..numero] },
           {'Vice primera ministra', argumento['viceprimeraministra'..numero] },
           {'Teniente gobernador', argumento['teniente'..numero] },
           {'Vicealcalde', argumento['vicealcalde'..numero] },
           {'Vicejefe de gobierno', argumento['vicejefe'..numero]},
           {'Canciller', argumento['canciller'..numero]},
           {'Vicecanciller', argumento['vicecanciller'..numero]},
           {'Predecesor', argumento['predecesor'..numero]},
           {'Predecesora', argumento['predecesora'..numero]},
           {'Sucesor', argumento['sucesor'..numero]},
           {'Sucesora', argumento['sucesora'..numero]},
           {'Compañero de fórmula', argumento['fórmula'..numero]},
           {'Oponente/s', argumento['oponentes'..numero]},
           {'En el cargo', argumento['enelcargo'..numero] },
           {argumento[dato..'data1'], argumento[dato..'data2'] },
           {argumento[dato..'data3'], argumento[dato..'data4'] },

{,'


'}

       }

return cadenatexto

end -- Función que devuelve la lista de los valores de una propiedad en Wikidata formateados function propiedad(idPropiedad,opciones)

   -- No obtener ninguna propiedad de Wikidata para las personas fallecidas si se accede con el parámetro wikidata=no
   if not obtenerDatosWikidata then
       return
   end
   if Entidad and Entidad.claims and Entidad.claims[idPropiedad] then
       if not opciones then
           opciones = {['linkback']='sí'}
       end
       opciones.entityId = Entidad.id
       --if idPropiedad =='P1477' then return require('Módulo:Tablas').tostring(Entidad) end -- FALTA
       opciones.propiedad = idPropiedad
       valorPropiedad = getPropiedadWikidata(opciones,Entidad.claims[idPropiedad])
       if not valorPropiedad then
           return
       end
       if valorPropiedad:match('%[%[:d:') then
         algunaPropiedadEnlazaWikidata = true
       end
       return valorPropiedad
   end

end

function obtenerEtiquetaWikidata()

   if Entidad and Entidad.labels and Entidad.labels.es then
       return Entidad.labels.es.value
   end

end

function listaDesplegable(titulo, lista, frame)

   if not lista then
       return
   end
   formatoprevio='background:transparent'

return frame:preprocess('

' .. titulo .. --'

')

end

function seccionDesplegable(titulo, lista, frame, estilotitulo)

   if not lista then
       return
   end

return frame:preprocess('

')

end

function estaEnlazado(que)

   -- De momento devolver siempre que está enlazado pues falla en por ejemplo:
   -- |Hijos = 6[nota 1]​
   if true then return que end
   if not que then 
       return
   end
   for contenido in que:gmatch("%[%[(.+)]]") do
       if not contenido:match('^:d:') and
          not contenido:match('^Categoría:') then
           return que
       end
   end

end

function formatoOcupacionMasculino(valor, opciones, frame, calificativos)

   local enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion = ModuloWikidataFormatos.obtenerDatos(valor)
   return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion, opciones)

end

function formatoOcupacionFemenino(valor, opciones, frame, calificativos)

   local enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion = ModuloWikidataFormatos.obtenerDatos(valor)
   -- Para las ocupaciones más frecuentes no se accederá a Wikidata
   local tablaOcupacionesFemeninas={
       ['Q40348'   ] = 'abogada',
       ['Q16631371'] = 'académica',
       ['Q15253558'] = 'activista',
       ['Q1476215' ] = 'activista por los derechos humanos',
       ['Q33999'   ] = 'actriz',
       ['Q10800557'] = 'actriz de cine',
       ['Q11481802'] = 'actriz de doblaje',
       ['Q948329'  ] = 'actriz de género',
       ['Q2259451' ] = 'actriz de teatro',
       ['Q10798782'] = 'actriz de televisión',
       ['Q2405480' ] = 'actriz de voz',
       ['Q488111'  ] = 'actriz pornográfica',
       ['Q10873124'] = 'ajedrecista',
       ['Q4773904' ] = 'antropóloga',
       ['Q2478141' ] = 'aristócrata',
       ['Q42973'   ] = 'arquitecta',
       ['Q483501'  ] = 'artista',
       ['Q7019111' ] = 'asistenta social',
       ['Q11063'   ] = 'astrónoma',
       ['Q18814623'] = 'autobiógrafa',
       ['Q482980'  ] = 'autora',
       ['Q5716684' ] = 'bailarina',
       ['Q805221'  ] = 'bailarina de ballet',
       ['Q864503'  ] = 'bióloga',
       ['Q8246794' ] = 'bloguera',
       ['Q177220'  ] = 'cantante',
       ['Q2865819' ] = 'cantante de ópera',
       ['Q488205'  ] = 'cantautora',
       ['Q901'     ] = 'científica',
       ['Q15212951'] = 'cineasta',
       ['Q1086863' ] = 'columnista',
       ['Q245068'  ] = 'comediante',
       ['Q36834'   ] = 'compositora',
       ['Q2722764' ] = 'conductora radiofónica',
       ['Q2490358' ] = 'coreógrafa',
       ['Q18939491'] = 'diarista',
       ['Q193391'  ] = 'diplomática',
       ['Q2526255' ] = 'directora de cine',
       ['Q5322166' ] = 'diseñadora',
       ['Q627325'  ] = 'diseñadora gráfica',
       ['Q462390'  ] = 'docente',
       ['Q214917'  ] = 'dramaturga',
       ['Q188094'  ] = 'economista',
       ['Q974144'  ] = 'educadora',
       ['Q131524'  ] = 'emprendedora',
       ['Q43845'   ] = 'empresaria',
       ['Q186360'  ] = 'enfermera',
       ['Q11774202'] = 'ensayista',
       ['Q36180'   ] = 'escritora',
       ['Q4853732' ] = 'escritora de literatura infantil',
       ['Q1281618' ] = 'escultora',
       ['Q11900058'] = 'exploradora',
       ['Q13472585'] = 'filántropa',
       ['Q4964182' ] = 'filósofa',
       ['Q169470'  ] = 'física',
       ['Q33231'   ] = 'fotógrafa',
       ['Q28389'   ] = 'guionista',
       ['Q201788'  ] = 'historiadora',
       ['Q715301'  ] = 'historietista',
       ['Q82594'   ] = 'informática teórica',
       ['Q16533'   ] = 'jueza',
       ['Q4379701 '] = 'jugadora profesional',
       ['Q185351'  ] = 'jurista',
       ['Q644687'  ] = 'ilustradora',
       ['Q14467526'] = 'lingüista',
       ['Q1371925' ] = 'locutora',
       ['Q2251335' ] = 'maestra',
       ['Q191633'  ] = 'mangaka',
       ['Q2412523' ] = 'matadora',
       ['Q170790'  ] = 'matemática',
       ['Q39631'   ] = 'médica',
       ['Q4610556' ] = 'modelo',
       ['Q639669'  ] = 'música',
       ['Q6625963' ] = 'novelista',
       ['Q1930187' ] = 'periodista',
       ['Q1028181' ] = 'pintora',
       ['Q728711'  ] = 'playmate',
       ['Q49757'   ] = 'poeta',
       ['Q82955'   ] = 'política',
       ['Q270389'  ] = 'presentadora de noticias',
       ['Q947873'  ] = 'presentadora de televisión',
       ['Q3282637' ] = 'productora de cine',
       ['Q37226'   ] = 'profesora',
       ['Q121594'  ] = 'profesora',
       ['Q16145150'] = 'profesora de música',
       ['Q1622272' ] = 'profesora de universidad',
       ['Q212980'  ] = 'psicóloga',
       ['Q3242115' ] = 'revolucionaria',
       ['Q3068305' ] = 'salonnière',
       ['Q622807'  ] = 'seiyū',
       ['Q512314'  ] = 'socialité',
       ['Q2306091' ] = 'socióloga',
       ['Q1141526' ] = 'stripper',
       ['Q1234713' ] = 'teóloga',
       ['Q549322'  ] = 'torera',
       ['Q333634'  ] = 'traductora',
       ['Q350979'  ] = 'zoóloga',
   }
   local etiquetaOcupacionCorregida = tablaOcupacionesFemeninas[idEntidadOcupacion]
   if etiquetaOcupacionCorregida then
       return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacionCorregida, idEntidadOcupacion, opciones)
   else
       -- La ocupación no está en la tabla anterior. Se intenta obtener de la propiedad P2522 en Wikidata de la ocupación
       etiquetaOcupacionCorregida = ModuloWikidata.getPropiedadEnEspanyol(idEntidadOcupacion, 'P2521') or etiquetaOcupacion
       return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacionCorregida, idEntidadOcupacion, opciones) .. 
   end

end

function obtenerValorCalificativo(Propiedad, Calificativo, ValorPropiedad)

   -- Obtener el valor del primer calificativo de la propiedad con el valor recibido 
   if not Entidad or not Entidad.claims or not Entidad.claims[Propiedad] then
       return
   end
   for k,v in pairs(Entidad.claims[Propiedad]) do
       if v.mainsnak
          and v.mainsnak.datavalue
          and v.mainsnak.datavalue.value
          and v.mainsnak.datavalue.value['numeric-id'] == ValorPropiedad
          and v.qualifiers
          and v.qualifiers[Calificativo]
          and v.qualifiers[Calificativo][1]
          and v.qualifiers[Calificativo][1].datavalue then 
           return v.qualifiers[Calificativo][1].datavalue.value
       end
   end

end

function obtenerArgumentosConValor(frame)

   local original
   if frame == mw.getCurrentFrame() then
       original = frame:getParent().args
   else
       original = frame.args or frame
   end
   
   local copia= {}
   for k,v in pairs(original) do
       if v == 'no' 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 obtenerImagenWikidata()

   local imagen, valorImagen, piesDeImagen, k, pieDeImagen
   if not Entidad then
       return
   end
   --  Obtener la primera imagen en Wikidata de la persona
   local imagen = elementoTabla(Entidad, 'claims','P18',1)
   if not imagen then
       return
   end
   -- Obtener el nombre de la imagen
   valorImagen =  elementoTabla(imagen, 'mainsnak','datavalue','value') -- Por ejemplo, imagen.jpg
   -- Obtener los pies de la imagen, uno por idioma
   piesDeImagen =  elementoTabla(imagen, 'qualifiers','P2096')
   -- Encontrar el pie en español (aquel con datavalue.value.language = "es")
   if piesDeImagen then
       for k,pieDeImagen in pairs(piesDeImagen) do
           if pieDeImagen.datavalue.value.language=='es' then
               -- devolver la imagen y el texto del pie de la imagen en español
               return valorImagen, pieDeImagen.datavalue.value.text
           end
       end
   end
   -- Si no hay pie de imagen en español comprueba si hay fecha especificada para la imagen
   piesDeImagen = elementoTabla(imagen, 'qualifiers', 'P585')
   if piesDeImagen and piesDeImagen[1] then
       return valorImagen, nombre .. ' en ' .. require('Módulo:Wikidata/Fecha').FormateaFechaHora(piesDeImagen[1].datavalue.value, {['formatoFecha']='año',['enlace']='no'})
   end
   -- Sin pie de imagen en español
   return valorImagen

end

function obtenerFechaWikidata(propiedad)

   local declaracionesFecha = elementoTabla(Entidad, 'claims', propiedad)
   -- No devolver la edad si no hay ninguna o si hay varias fechas.
   if not declaracionesFecha or declaracionesFecha[2] then
       return
   end
   local declaracionFecha = declaracionesFecha[1]
   if not declaracionFecha then
       return
   end
   local valorFecha = elementoTabla(declaracionFecha, 'mainsnak', 'datavalue', 'value')
   if not valorFecha then
       return
   end
   --La precisión debe llegar hasta el día
   if valorFecha.precision ~= 11 then
       return
   end
   local iso = valorFecha.time
   if not iso then
       return
   end
   local fecha = {}
   fecha.calendario = valorFecha.calendarmodel
   fecha.anyo       = tonumber(iso:sub(2, 5))
   fecha.mes        = tonumber(iso:sub(7,8))
   fecha.dia        = tonumber(iso:sub(10,11))
   return fecha

end

function obtenerEdadWikidata(propiedadFin)

   local fechaNacimiento = obtenerFechaWikidata('P569')
   if not fechaNacimiento then
       return
   end
   if propiedadFin then
       local fechaFin = obtenerFechaWikidata(propiedadFin)
       if fechaFin and
          fechaFin.calendario == fechaNacimiento.calendario then
           return edad(fechaNacimiento, fechaFin)
       end
   else
       return edad(fechaNacimiento)
   end

end

function noAlargar(que)

   if not que then
       return
   end

return '

' .. que .. '

'

end

function plural(que, singular, plural, pClase)

   if not que then
       return {}

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

  • ') then return {plural, que, clase=pClase} else return {singular, que, clase=pClase} end end function obtenerPremios(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 .. ' (' .. mw.text.listToText( categoria.anyo, ', ',' y ' ) .. ')' end table.insert(categoriasPremio, categoriaFormateada) end table.insert(premiosFormateados, premio.nombre .. ' ' .. mw.text.listToText( categoriasPremio, ', ',' y ' )) else premioFormateado = enlazar(premio.enlace, premio.nombre, premio.id) if premio.anyo and premio.anyo[1] then premioFormateado = premioFormateado .. ' (' .. mw.text.listToText( premio.anyo, ', ',' y ' ) .. ')' end table.insert(premiosFormateados, premioFormateado) end end -- 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('
    • ' .. mw.text.listToText( premiosFormateados, '
    • ','
    • ' ),p_entidad.id,'P166') .. '
    '
       end
    

    end

    function siNoEs(que, valor)

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

    end

    function z.premios(frame)

       local args    = frame.args
       local entidad = mw.wikibase.getEntityObject(args.id)
       
       if not entidad then
           return
       end
    
       return obtenerPremios(entidad)
    

    end

    return z

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

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