Module:Ficha de persona

local z = {}

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 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:#d38d47;color:#FFF'}, ['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 = '' 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]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'] .. ' 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(' ') 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'])) else sitioWeb = propiedad('P856', {['valor-función'] = formatoURL, ['linkback']='sí', ['rangoMayor'] = 'sí'}) 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', 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, {'Cargos criminales', 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', sitioWeb}, },       {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=' '..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('') end-- if argumento['país'..numero] then titulo = titulo .. frame:preprocess('') 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('') 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 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 if piesDeImagen[1].datavalue and piesDeImagen[1].datavalue.value then return valorImagen, nombre .. ' en ' .. require('Módulo:Wikidata/Fecha').FormateaFechaHora(piesDeImagen[1].datavalue.value, {['formatoFecha']='año',['enlace']='no'}) else return valorImagen, nombre end 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(1, 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