Módulo:Ficha de libro
Ir a la navegación
Ir a la búsqueda
La documentación para este módulo puede ser creada en Módulo:Ficha de libro/doc
Error de secuencia de órdenes: Error de Lua: Error interno: El intérprete ha finalizado con la señal "-129".
local z = {} local argumentos -- Tabla de argumentos con los que se llama a la función local argumento={} -- Argumentos eliminando los argumentos sin datos local Entidad -- Tabla con los datos en Wikidata del libro. -- Ver Wikidata:WikiProject Books para las propicedades posibles local etiqueta -- Módulos y funciones externas local ModuloArgumentos = require('Módulo:Argumentos') local ModuloFicha = require('Módulo:Ficha') local ModuloIdentificadores = require('Módulo:Identificadores') local ModuloPaginas = require('Módulo:Páginas') local ModuloWikidataFormatos = require('Módulo:Wikidata/Formatos') local formatoObraAnyo = ModuloWikidataFormatos.formatoObraAnyo local ModuloWikidata = require('Module:Wikidata') local addLinkbackWikidata = ModuloWikidata.addLinkback local categorizarWikidata = ModuloWikidata.categorizar local formatoIdEntidad = ModuloWikidata.formatoIdEntidad local getPropiedadWikidata= ModuloWikidata.getPropiedad local ModuloTablas = require('Module:Tablas') local elementoTabla = ModuloTablas.elemento local enTabla = ModuloTablas.en local insertarEn = ModuloTablas.insertar local ModuloFormatoTexto = require('Módulo:Formato texto') local enlazarTexto = ModuloFormatoTexto.enlazar local enVariasLineasTexto = ModuloFormatoTexto.enVariasLineas local sinBandera = require('Módulo:Bandera').sinBandera -- Constantes local debeExistir = {['debeExistir'] = 'sí', ['formatoTexto'] = 'mayúscula', ['linkback']='sí'} local enMayusculas = {['formatoTexto'] = 'mayúscula', ['linkback']='sí'} local enlazar = {['enlace']='sí', ['linkback']='sí'} local normal = {['linkback']='sí'} local listaNoOrdenadaEnlazada = {['enlace']='sí', ['lista'] = 'no ordenada', ['linkback']='sí'} local categoriasGeneros2 = { [693 ] = 'Fábulas' , [1072723] = 'Libros de viajes' -- literatura de viajes , [1164267] = 'Libros de viajes' -- libro de viajes , [131539 ] = 'Obras infantiles' -- literatura infantil , [995600 ] = 'Libros de divulgación científica' -- divulgación científica , [254554 ] = 'Álbumes ilustrados' -- álbum ilustrado } local tablaGeneros={ -- Tabla de géneros exceptuando los subgéenros. 'Q8261' -- Novela , 'Q482' -- Poesía , 'Q49084' -- Cuento , 'Q11635' -- Teatro , 'Q1279564' -- Colección de cuentos , 'Q37484' -- Epopeyas , 'Q213051' -- No ficción } local categoriasGenerosNovelas = { [3056541] = 'Novelas autobiográficas' ,[4184 ] = 'Novelas autobiográficas' --autobiografía ,[908667 ] = 'Novelas bélicas' ,[4914883] = 'Novelas biográficas' ,[174526 ] = 'Novelas ciberpunk' ,[26228231] = 'Novelas ciberpunk' -- novela ciberpunk ,[1077883] = 'Novelas ciberpunk' -- biopunk ,[26228228] = 'Novelas ciberpunk' -- novela biopunk ,[1341831] = 'Novelas ciberpunk' -- postciberpunk ,[27022710] = 'Novelas ciberpunk' -- novela postciberpunk ,[223945 ] = 'Novelas de aprendizaje' ,[1312571] = 'Novelas de aprendizaje' -- novela de desarrollo ,[319226 ] = 'Novelas de aventuras' ,[1436734] = 'Novelas de aventuras' -- aventura. FALTA corregir el enlace par que enlace a novela de aventuras. ,[24925 ] = 'Novelas de ciencia ficción' ,[12132683]= 'Novelas de ciencia ficción' ,[3238422]= 'Novelas de ciencia ficción' -- literatura de ciencia ficción ,[905770 ] = 'Novelas de ciencia ficción' -- ciencia ficción blanda ,[725757 ] = 'Ciencia ficción dura' -- ciencia ficción dura ,[2435402] = 'Novelas de ciencia ficción feministas' -- ciencia ficción feminista ,[2561390] = 'Novelas de humor' ,[40831 ] = 'Novelas de humor' -- Comedia ,[6585139] = 'Novelas de misterio' ,[182015 ] = 'Novelas de suspenso' ,[193606 ] = 'Novelas de terror' -- literatura de terror ,[16575965 ] = 'Novelas de terror' -- ficción de terror ,[20667180] = 'Novelas de terror' -- novela de terror ,[1425557] = 'Novelas de vampiros' ,[10453828] = 'Novelas de viajes en el tiempo'-- novela de viajes en el tiempo ,[253732 ] = 'Novelas de viajes en el tiempo' -- Viaje en el tiempo en la ficción ,[182154 ] = 'Novelas de viajes en el tiempo' -- Viaje a través del tiempo ,[180774 ] = 'Novelas distópicas' -- Distopía ,[20443047] = 'Novelas distópicas' -- literatura distópica ,[26928598 ] = 'Novelas distópicas' -- novela distópica ,[25372 ] = 'Novelas dramáticas' ,[465821 ] = 'Novelas epistolares' ,[747483 ] = 'Novelas eróticas' -- literatura erótica ,[11452132 ] = 'Novelas eróticas' -- novela erótica ,[1426213] = 'Novelas de espionaje' ,[11825887]= 'Novelas fantásticas' -- novela fantástica ,[10992055]= 'Novelas fantásticas' -- novela fantástica ,[132311 ] = 'Novelas fantásticas' -- Género fantástico ,[1057172] = 'Novelas fantásticas' -- Literatura fantástica ,[603291 ] = 'Novelas fantásticas' -- fantasía histórica ,[794912 ] = 'Novelas fantásticas' -- dark fantasy/fantasía oscura ,[2625243] = 'Novelas fantásticas' -- fantasía heroica ,[2016518] = 'Novelas filosóficas' ,[20669641]= 'Novelas góticas' -- Ficción gótica ,[192782 ] = 'Novelas góticas' -- Narrativa gótica ,[276709 ] = 'Novelas góticas' -- Gótico sureño ,[1196408] = 'Novelas históricas' -- Ficción histórica ,[192239 ] = 'Novelas históricas' ,[131539] = 'Novelas infantiles' -- Literatura infantil ,[21615367] = 'Novelas infantiles' -- novela infantil ,[11825892] = 'Novelas juveniles' -- novela juvenil ,[1233720] = 'Novelas juveniles' -- Literatura juvenil ,[1940294] = 'Novela negra' ,[1619888] = 'Novelas pastoriles' ,[208505 ] = 'Novelas policíacas' ,[186424 ] = 'Novelas policíacas' -- El detective de ficción ,[26906554] = 'Novelas posapocalípticas' -- novela posapocalíptica ,[197949] = 'Novelas posapocalípticas' -- ficción posapocalíptica ,[113013 ] = 'Novelas posmodernas' -- Literatura posmoderna ,[286328 ] = 'Novelas psicológicas' ,[147516] = 'Novelas de realismo mágico' ,[858330 ] = 'Novelas románticas' ,[6045975] = 'Novelas satíricas' -- novela satírica ,[128758 ] = 'Novelas satíricas' -- Sátira ,[7225114] = 'Novelas satíricas' -- Sátira política ,[223685] = 'Novelas steampunk' -- steampunk ,[27020789] = 'Novelas steampunk' -- novela steampunk ,[3440959] = 'Novelas de suspenso' -- Novela de suspense ,[2490520] = 'Novelas de thriller legal' -- thriller legal ,[590103] = 'Novelas de suspenso psicológico' -- suspense psicológico, thriller psicológico ,[580850 ] = 'Novelas tecno-thriller' -- tecno-thriller ,[224989 ] = 'Novelas ucrónicas' ,[16681629 ] = 'Novelas ucrónicas' --literatura ucrónica ,[26225470 ] = 'Novelas ucrónicas' --Novela ucrónica ,[667661] = 'Novelas del Realismo' --realismo literario ,[3940779] = 'Novelas del Realismo' --novela realista ,[26987767] = 'Novelas feministas' ,[26987750] = 'Novelas feministas' --literatura feminista ,[7252] = 'Novelas feministas' --feminismo } local categoriasTemasNovelas = { [2763] = 'Novelas sobre el Holocausto' , [180046] = 'Novelas de exploración espacial' -- exploración espacial , [362 ] = 'Novelas de la Segunda Guerra Mundial' -- Segunda Guerra Mundial , [10453828] = 'Novelas de viajes en el tiempo'-- novela de viajes en el tiempo , [253732] = 'Novelas de viajes en el tiempo' --viaje en el tiempo en la ficción , [182154] = 'Novelas de viajes en el tiempo' --viaje a través del tiempo , [10859 ] = 'Novelas sobre la guerra civil española' } function z.Ficha(frame) -- Hacer que funcione la función formatBandera ModuloWikidata:setFrame(frame) -- No funciona si se pone ModuloWikidata.setFrame(marco) --Obtener una copia de los argumentos eliminando los argumentos sin valor local argumento = ModuloArgumentos.obtenerArgumentosConValor(frame) -- Obtener los datos de la página donde se inserta la ficha de Wikidata. Entidad = mw.wikibase.getEntityObject(argumento.id) or {} --if true then return ModuloTablas.tostring(Entidad) end corregirIdiomaWikidata(Entidad, 'P364') -- Obsoleto corregirIdiomaWikidata(Entidad, 'P407') local generoWikidata, subgeneroWikidata, temaWikidata = obtenerGeneroWikidata() if generoWikidata then genero = generoWikidata subgenero = subgeneroWikidata else genero = argumento['género'] or argumento['genero'] or argumento['Género'] subgenero = argumento['subgénero'] or argumento['subgenero'] or argumento['Subgénero'] end -- Comprobar que la instancia es una serie o un libro local declaracionesInstancias = elementoTabla(Entidad, 'claims', 'P31') local identificadorInstancia, esUnaSerie, esUnLibro, esUnLibroDeCuentos if declaracionesInstancias then for k,v in pairs(declaracionesInstancias) do identificadorInstancia = elementoTabla(v, 'mainsnak', 'datavalue','value','id') if identificadorInstancia == 'Q277759' or -- serie de libros identificadorInstancia == 'Q2475679' or -- ciclo literario. Ekumen identificadorInstancia == 'Q1667921' then -- serie de novelas esUnaSerie = true end if identificadorInstancia == 'Q571' or -- libro identificadorInstancia == 'Q12106333' then -- poemario esUnLibro = true end if identificadorInstancia == 'Q1279564' or -- libro de cuentos identificadorInstancia == 'Q27560760' then -- libro de cuentos de hadas esUnLibroDeCuentos = true esUnLibro = true end end end if esUnaSerie then ColorFondoTitulos = '#C63A3A' ColorTitulos = '#ffffff' -- blanco ColorFondoSubtitulo = '#F49494' elseif not genero then ColorFondoTitulos = 'LightSteelBlue' ColorTitulos = '#000' ColorFondoSubtitulo = '#d8e2ee' elseif genero:find('[Rr]elato') or genero:find('[Cc]uento') or genero:find('[Ll]eyenda') or genero:find('[Aa]ntología') then ColorFondoTitulos = 'LightSalmon' ColorTitulos = '#000' ColorFondoSubtitulo = '#f9d9cb' elseif genero:find('[Tt]eatro') then ColorFondoTitulos = '#FBCEB1' ColorTitulos = '#000' ColorFondoSubtitulo = '#f9d9cb' elseif genero:find('didáctico') or genero:find('[Ee]nsayo') or genero:find('[Dd]ivulgación') or genero:find('[Cc]rítica') or genero:find('[Tt]ratado') or genero:find('[Cc]rónica') then ColorFondoTitulos = 'NavajoWhite' ColorTitulos = '#000' ColorFondoSubtitulo = '#FBE7C9' elseif genero:find('[Pp]oesía') or genero:find('[Ee]popeya') or genero:find('[Ll]írico') or genero:find('[Ll]írica') or genero:find('[Pp]oema') then ColorFondoTitulos = 'darkseagreen' ColorTitulos = '#000' ColorFondoSubtitulo = '#afdeaf' else ColorFondoTitulos = 'LightSteelBlue' ColorTitulos = '#000' ColorFondoSubtitulo = '#d8e2ee' end Autor = propiedad('P50',{['enlace']='sí', ['calificativo'] = 'P742' -- seudónimo , ['linkback']='sí' }) or argumento['autor'] or argumento['autores'] or argumento['Autor'] or argumento['Autores'] if Autor and argumento['Acotaciones al autor'] then Autor = Autor .. '<br /><small>' .. argumento['Acotaciones al autor'] .. '</small>' end if argumento['publicación original'] or argumento['tipo original'] or argumento['tipo de publicación original'] or argumento['editorial original'] or argumento['ilustrador original'] or argumento['ciudad original'] or argumento['país original'] or argumento['fecha original'] or argumento['formato original'] or argumento['páginas original'] or argumento['Año original'] or argumento['Año de publicación original'] or argumento['Ilustrador original'] or argumento['Ilustrador de la publicación original'] or argumento['Artista de cubierta original'] or argumento['Artista de cubierta de la publicación original'] or argumento['Editorial original'] or argumento['Editorial de publicación original'] or argumento['Ciudad original'] or argumento['Ciudad de publicación original'] or argumento['País original'] or argumento['País de publicación original'] or argumento['Formato original'] or argumento['Páginas original'] then EdicionOriginal = true end if argumento['Título traducción'] or argumento['Título de la traducción'] or argumento['Año traducción'] or argumento['Año de publicación de la traducción'] or argumento['Traductor'] or argumento['traductor'] or argumento['Ilustrador traducción'] or argumento['Ilustrador de la traducción'] or argumento['Artista de cubierta traducción'] or argumento['Artista de cubierta de la traducción'] or argumento['Editorial traducción'] or argumento['Editorial de la traducción'] or argumento['Ciudad traducción'] or argumento['Ciudad de publicación de la traducción'] or argumento['País traducción'] or argumento['País de publicación de la traducción'] or argumento['Formato traducción'] or argumento['Formato de la traducción'] or argumento['Páginas traducción'] or argumento['Número de páginas de la traducción'] then EdicionTraduccion = true end if EdicionOriginal or EdicionTraduccion then IdiomaOriginal = propiedad('P407',{['enlace']='sí', ['linkback']='sí'}) or propiedad('P364',{['enlace']='sí', ['linkback']='sí'}) or -- Obsoleto enlazarIdioma( argumento['lengua'] or argumento['idioma'] or argumento['idioma original'] or argumento['Idioma original'], 'no') IlustradorOriginal = propiedad('P110',enlazar) or argumento['ilustrador original'] or argumento['Ilustrador original'] or argumento['Ilustrador de la publicación original'] ArtistaOriginal = propiedad('P736',enlazar) or argumento['artista original'] or argumento['Artista de cubierta original'] or argumento['Artista de cubierta de la publicación original'] PublicacionOriginal = propiedad('P1433',enlazar) or argumento['Publicación original'] or argumento['publicación original'] TipoPublicacionOriginal = argumento['Tipo de publicación original'] or argumento['tipo de publicación original'] or argumento['tipo original'] EditorialOriginal = propiedad('P123',listaNoOrdenadaEnlazada) or argumento['editorial original'] or argumento['Editorial original'] or argumento['Editorial de publicación original'] LugarPublicacionOriginal = propiedad('P291') or argumento['ciudad original'] or argumento['Ciudad original'] or argumento['Ciudad de publicación original'] PaisOriginal = propiedad('P495') or sinBandera(argumento['país original'] or argumento['País original'] or argumento['País de publicación original']) AnyoOriginal = argumento['Año original'] or argumento['Año de publicación original'] FechaOriginal = propiedad('P577', {['formatoTexto'] = 'mayúscula', ['linkback']='sí', ['calificativo'] = 'P437', -- distribución ['lista'] = 'no ordenada', ['enlace'] = 'no' }) or argumento['Fecha original'] or argumento['fecha original'] or AnyoOriginal FormatoOriginal = propiedad('P437', enMayusculas) or -- Distribución (cartoné, etc) argumento['formato original'] or argumento['Formato original'] PaginasOriginal = propiedad('P1104') or argumento['páginas original'] or argumento['Número de páginas original'] PremiosOriginal = propiedad('P166', { ['lista'] = 'no ordenada', ['valor-módulo'] = 'Wikidata/Formato premio', ['valor-función'] = 'formatoPremio', ['calificativo'] = 'P585', -- Fecha de ocurrencia ['enlace'] = 'sí', ['ordenar'] = 'por fecha', ['linkback']='sí'}) or argumento['Premios'] or argumento['premios'] Artista = argumento['artista_cubierta'] or argumento['artista'] or argumento['Artista de cubierta traducción'] or argumento['Artista de cubierta de la traducción'] Ilustrador = argumento['ilustrador'] or argumento['Ilustrador traducción'] or argumento['Ilustrador de la traducción'] Editorial = argumento['editorial'] or argumento['Editorial traducción'] or argumento['Editorial de la traducción'] LugarPublicacion = argumento['ciudad'] or argumento['Ciudad traducción'] or argumento['Ciudad de publicación de la traducción'] Publicacion = argumento['publicación'] Pais = sinBandera(argumento['país'] or argumento['pais'] or argumento['País traducción'] or argumento['País de publicación de la traducción']) Fecha = argumento['fecha_publicación'] or argumento['fecha publicacion'] or argumento['fecha'] or argumento['Año traducción'] or argumento['Año de publicación de la traducción'] Paginas = argumento['páginas'] or argumento['Páginas traducción'] or argumento['Páginas de la traducción'] if IdiomaOriginal then if IdiomaOriginal:find('[e]spañol') or IdiomaOriginal:find('[Cc]astellano') then WikisourceOriginal = obtenerWikisource('español') else WikisourceOriginal = obtenerWikisource(IdiomaOriginal) Wikisource = obtenerWikisource('español') end end else IdiomaOriginal = propiedad('P407',enMayusculas) or propiedad('P364',enMayusculas) or -- Obsoleto enlazarIdioma(argumento['lengua'] or argumento['idioma'] or argumento['idioma original'], 'sí') Artista = propiedad('P736',enlazar) or argumento['artista_cubierta'] or argumento['artista'] Ilustrador = propiedad('P110',enlazar) or argumento['ilustrador'] Editorial = propiedad('P123',listaNoOrdenadaEnlazada) or argumento['editorial'] LugarPublicacion = propiedad('P291',enlazar) or argumento['ciudad'] Publicacion = propiedad('P1433',enlazar) or argumento['publicación'] Pais = propiedad('P495') or sinBandera(argumento['país'] or argumento['pais']) Fecha = propiedad('P577', {['formatoTexto'] = 'mayúscula', ['enlace']='no', ['linkback']='sí'}) or argumento['fecha_publicación'] or argumento['fecha publicacion'] or argumento['fecha'] Formato = propiedad('P437', enMayusculas) or -- Distribución (cartoné, etc) argumento['formato'] or argumento['tipo_medio'] or argumento['Formato traducción'] or argumento['Formato de la traducción'] Paginas = propiedad('P1104') or argumento['páginas'] or argumento['paginas'] Premios = propiedad('P166', { ['lista'] = 'no ordenada', ['valor-módulo'] = 'Wikidata/Formato premio', ['valor-función'] = 'formatoPremio', ['calificativo'] = 'P585', -- Fecha de ocurrencia ['enlace'] = 'sí', ['ordenar'] = 'por fecha', ['linkback']='sí'}) or argumento['premios'] if IdiomaOriginal and (IdiomaOriginal:find('[Ee]spañol') or IdiomaOriginal:find('[Cc]astellano')) then -- Libro en español Wikisource = obtenerWikisource('español') elseif IdiomaOriginal then -- Libro no en español sin datos de la edición en español WikisourceOriginal = obtenerWikisource(IdiomaOriginal) Wikisource = obtenerWikisource('español') end end -- Titulo --> Título del libro en español -- TituloOriginal --> Título original del libro si no está en español etiquetaWikidata = obtenerEtiquetaWikidata() if IdiomaOriginal and (IdiomaOriginal:find('[Ee]spañol') or IdiomaOriginal:find('[Cc]astellano')) then --Libro escrito en español Titulo = propiedad('P1476') or etiquetaWikidata or argumento['título original'] or argumento['título_orig'] or argumento['titulo_orig'] or argumento['título orig'] or argumento['Título original'] or argumento['título'] or argumento['nombre'] or ModuloPaginas.nombrePagina({desambiguar='sí'}) else --Libro no escrito en español -- o del que se desconoce el idioma TituloOriginal = obtenerTitulo() or argumento['título original'] or argumento['título_orig'] or argumento['titulo_orig'] or argumento['título orig'] or argumento['Título original'] Titulo = etiquetaWikidata or argumento['título'] or argumento['nombre'] or ModuloPaginas.nombrePagina({desambiguar='sí'}) end local Contenido = argumento['Contenido'] or argumento['contenido'] if Contenido and (Contenido == '' or Contenido == 'no') then Contenido = '' elseif not Contenido then Contenido = propiedad('P527',{['enlace']='sí', ['lista'] = 'no ordenada', ['valor-función'] = formatoObraAnyo,}) end local FichaLibro = { entidad = argumento.id, titulo = Titulo, clasetitulo = 'libro', estilotitulo = 'background-color:' .. ColorFondoTitulos .. '; color:' .. ColorTitulos .. '; font-style:italic', subtitulo = Autor and '<small>de</small> ' .. "'''" .. Autor .. "'''", estilosubtitulo = 'font-size:105%; background-color:' .. ColorFondoSubtitulo .. ';', estiloseccion = 'background-color:' .. ColorFondoTitulos .. '; color:' .. ColorTitulos .. ';', estiloetiqueta = 'width:35%', estilodatos = 'width:65%', imagen = argumento['imagen'] or argumento['Imagen'] or propiedad('P18', {uno='sí'}), ['tamañoimagen']= argumento['Tamaño de imagen'] or '220px', -- FALTA {{px|{{{Tamaño de imagen}}}}} pie = argumento['texto_imagen'] or argumento['texto imagen'] or argumento['pie de imagen'] or argumento['Pie de imagen'], estilopie = 'font-size:88%', {'Editor(es)', propiedad('P98') or argumento['Editor'] or argumento['editor'] or argumento['Editores'] or argumento['editores'] }, {'Fotografía', argumento['Fotografía'] or argumento['fotografía']}, {'Género' , genero}, {'Subgénero' , subgenero}, {'Basado en' , propiedad('P144', {['formatoTexto'] = 'cursivas',['enlace']='sí', ['debeExistir'] = 'sí',['linkback']='sí'})}, {'Tema(s)' , temaWikidata or argumento['tema'] or argumento['Tema'] }, {'Universo ficticio', propiedad('P1434', debeExistir)}, {'Ambientada en', enVariasLineasTexto({propiedad('P2408', enMayusculas),propiedad('P840', enMayusculas)})}, {tipo='sección', -- El título de la sección solo se muestra si hay datos de las dos ediciones. titulo = (EdicionOriginal or EdicionTraduccion) and IdiomaOriginal and 'Edición original en ' .. IdiomaOriginal, {'Idioma', not EdicionOriginal and not EdicionTraduccion and IdiomaOriginal}, {'Título original' , TituloOriginal, estilodatos='font-style:italic'}, {'Ilustrador', IlustradorOriginal}, -- FALTA si enlazar {'Cubierta' , ArtistaOriginal}, {'Publicado en' , PublicacionOriginal , estilodatos='font-style:italic'}, {'Tipo de publicación' , TipoPublicacionOriginal}, {'Editorial' , EditorialOriginal, clase='plainlist'}, {'Ciudad' , LugarPublicacionOriginal}, {'País' , PaisOriginal}, {'Fecha de publicación', FechaOriginal, clase='plainlist'}, {'Formato' , FormatoOriginal}, {'Páginas' , PaginasOriginal}, {'Premios' , PremiosOriginal, clase='plainlist'}, {'Texto original' , WikisourceOriginal} }, {tipo='sección', -- El título de la sección solo se muestra si hay datos de las dos ediciones. titulo = (EdicionOriginal or EdicionTraduccion) and 'Edición traducida al [[idioma español|español]]', {'Título' ,argumento['Título traducción'] or argumento['Título de la traducción'], estilodatos='font-style:italic'}, {'Traducido por' , argumento['traductor'] or argumento['Traductor']}, {'Adaptación' , argumento['adaptación'] or argumento['adaptador']}, {'Ilustrador' , Ilustrador}, {'Artista de la cubierta', Artista}, {'Publicado en' , Publicacion , estilodatos='font-style:italic'}, {'Tipo de publicación' , argumento['tipo de publicación'] or argumento['tipo']}, {'Editorial', Editorial, clase='plainlist'}, {'Ciudad' , LugarPublicacion}, {'País' , Pais}, {'Fecha de publicación', Fecha}, {'Formato' , Formato}, {'Páginas' , Paginas}, --{'Tamaño y peso', argumento['tamano_peso']}, -- Usar los parámetros para el formato {'Premios' , Premios, clase='plainlist'}, {'Texto en español' , Wikisource} }, {tipo='sección', titulo = 'Contenido', {'', Contenido, clase='plainlist'} } } -- Series de libros if Entidad and Entidad.claims and Entidad.claims.P179 and Entidad.claims.P179[1] then declaracionSerie1 = Entidad.claims.P179[1] tituloSerie = "''" .. formatoIdEntidad('Q' .. declaracionSerie1.mainsnak.datavalue.value['numeric-id'], {['enlace'] = 'sí'}) .. "''" if declaracionSerie1.qualifiers and declaracionSerie1.qualifiers.P155 and declaracionSerie1.qualifiers.P155[1] and declaracionSerie1.qualifiers.P155[1].datavalue then precedidaPor = formatoIdEntidad('Q' .. declaracionSerie1.qualifiers.P155[1].datavalue.value['numeric-id'], {['enlace'] = 'sí'}) end if declaracionSerie1.qualifiers and declaracionSerie1.qualifiers.P156 and declaracionSerie1.qualifiers.P156[1] and declaracionSerie1.qualifiers.P156[1].snaktype == 'value' then sucedidaPor = formatoIdEntidad('Q' .. declaracionSerie1.qualifiers.P156[1].datavalue.value['numeric-id'], {['enlace'] = 'sí'}) end if precedidaPor or sucedidaPor then serieConCualificador = true table.insert(FichaLibro, {tipo = 'sección', titulo = tituloSerie, {tipo = 'sucesión', anterior = precedidaPor, siguiente = sucedidaPor, color = ColorFondoSubtitulo, ['estilo fuente'] = 'italic' } } ) end end if not serieConCualificador then table.insert(FichaLibro, {tipo='sección', titulo = propiedad('P179',{['formatoTexto'] = 'cursivas',['enlace']='sí'}) or argumento['serie'] or argumento['Serie de libros'] or 'Serie', {tipo = 'sucesión', anterior = propiedad('P155',enlazar) or argumento['precedido_por'] or -- FALTA ver El Mago de la Serpiente argumento['anterior'] or argumento['Libro que le precede'] or argumento['Libro que le precede en la serie'] , siguiente = propiedad('P156',enlazar) or argumento['seguido_por'] or argumento['posterior'] or argumento['siguiente'] or argumento['Libro que le sigue'] or argumento['Libro que le sigue en la serie'] , color = ColorFondoSubtitulo, ['estilo fuente'] = 'italic' } } ) end table.insert(FichaLibro, {tipo='sección', titulo = argumento['Serie de libros 2'] or 'Serie', {tipo = 'sucesión', anterior = argumento['Libro que le precede 2'] or argumento['Libro que le precede en la serie 2'], siguiente = argumento['Libro que le sigue 2'] or argumento['Libro que le sigue en la serie 2'], color = ColorFondoSubtitulo, ['estilo fuente'] = 'italic' } } ) table.insert(FichaLibro, {tipo='sección', titulo = argumento['Autor'] and 'Cronología de ' .. argumento['Autor'], {tipo = 'sucesión', anterior = argumento['Libro anterior'] or argumento['Libro que le precede en la cronología'], siguiente = argumento['Libro posterior'] or argumento['Libro que le sigue en la cronología'], ['año anterior'] = argumento['Año anterior'] or argumento['Año del libro que le precede en la cronología'], ['año'] = AnyoOriginal, ['año siguiente'] = argumento['Año posterior'] or argumento['Año del libro que le sigue en la cronología'], color = ColorFondoSubtitulo, ['estilo fuente'] = 'italic' } } ) -- Añadir categorías si es posible if not ModuloPaginas.sePuedeCategorizar() then return ModuloFicha.infobox(FichaLibro) end local categorias = '' -- Errores if etiquetaWikidata and etiquetaWikidata:match('%(') then categorias=categorias .. '[[Categoría:Wikipedia:Páginas con etiquetas de Wikidata con paréntesis]]' end -- Géneros local categoriasGeneros = {} if Entidad and Entidad.claims then if generoWikidata then if generoWikidata:find('[Cc]uento') or esUnLibroDeCuentos then if esUnLibro then esUnLibroDeCuentos = true end -- Cuentos del autor if esUnLibroDeCuentos then table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Libros de cuentos de $1'},Entidad.claims['P50'])) else table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Cuentos de $1'},Entidad.claims['P50'])) end -- Cuentos de un año if esUnLibroDeCuentos then table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Libros de cuentos de $1', ['formatoFecha']='año'},Entidad.claims['P577'])) else table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Cuentos de $1', ['formatoFecha']='año'},Entidad.claims['P577'])) end -- Cuentos de un país if esUnLibroDeCuentos then table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Libros de cuentos de $1'},Entidad.claims['P495'])) else table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Cuentos de $1'},Entidad.claims['P495'])) end -- Cuentos de un idioma if esUnLibroDeCuentos then table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Libros de cuentos en $1'}, Entidad.claims['P407'] or Entidad.claims['P364'])) else table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Cuentos en $1'}, Entidad.claims['P407'] or Entidad.claims['P364'])) end if subgeneroWikidata then if subgeneroWikidata:find('[Cc]iencia ficción') then if esUnLibroDeCuentos then table.insert(categoriasGeneros, '[[Categoría:Libros de cuentos de ciencia ficción]]') else table.insert(categoriasGeneros, '[[Categoría:Cuentos de ciencia ficción]]') end end if subgeneroWikidata:find('[Ff]antástica') or subgeneroWikidata:find('[Ff]antasía') then if esUnLibroDeCuentos then table.insert(categoriasGeneros, '[[Categoría:Libros de cuentos de fantasía]]') else table.insert(categoriasGeneros, '[[Categoría:Cuentos fantásticos]]') end end if subgeneroWikidata:find('[Hh]orror') or subgeneroWikidata:find('[Tt]error') then if esUnLibroDeCuentos then table.insert(categoriasGeneros, '[[Categoría:Libros de cuentos de terror]]') else table.insert(categoriasGeneros, '[[Categoría:Cuentos de terror]]') end end end end if generoWikidata:find('[Tt]eatro') then -- Obras de teatro por autor table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Obras de teatro de $1'},Entidad.claims['P50'])) -- Obras de teatro de un año table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Obras de teatro de $1', ['formatoFecha']='año'},Entidad.claims['P577'])) -- Obras de teatro de un país table.insert(categoriasGeneros, categorizarWikidata( {['categoría'] = 'Obras de teatro de $1' },Entidad.claims['P495'])) -- Obras de teatro de un idioma table.insert(categoriasGeneros, categorizarWikidata( {['categoría'] = 'Obras de teatro en $1', },Entidad.claims['P407'] or Entidad.claims['P364'])) end if generoWikidata:find('[Nn]ovela') then table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = categoriasGenerosNovelas},Entidad.claims['P136'])) -- Novelas por tema table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = categoriasTemasNovelas},Entidad.claims['P921'])) -- Novelas del autor table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Novelas de $1'},Entidad.claims['P50'])) -- Novelas de un año table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Novelas de $1', ['formatoFecha']='año'},Entidad.claims['P577'])) -- Novelas ambientadas en una ubicación table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Novelas ambientadas en $1'},Entidad.claims['P840'])) -- Novelas de un país table.insert(categoriasGeneros, categorizarWikidata( {['categoría'] = 'Novelas de $1' },Entidad.claims['P495'])) -- Novelas de un idioma table.insert(categoriasGeneros, categorizarWikidata( {['categoría'] = 'Novelas en $1', }, Entidad.claims['P407'] or Entidad.claims['P364'])) end if generoWikidata:find('[Pp]oesía') then -- Poemas del autor table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Poemas de $1'},Entidad.claims['P50'])) -- Poemas de un año table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Poemas de $1', ['formatoFecha']='año'},Entidad.claims['P577'])) -- Poemas de un país table.insert(categoriasGeneros, categorizarWikidata( {['categoría'] = 'Poemas de $1' },Entidad.claims['P495'])) -- Pendiente si categorizar por el idioma. -- Poemas de un idioma table.insert(categoriasGeneros, categorizarWikidata( {['categoría'] = 'Poemas en $1', }, Entidad.claims['P407'] or Entidad.claims['P364'])) end if generoWikidata:find('[Nn]o ficción') then -- Libros de no ficción por autor table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Libros de no ficción de $1'},Entidad.claims['P50'])) -- Libros de no ficción de un año table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Libros de no ficción de $1', ['formatoFecha']='año'},Entidad.claims['P577'])) -- Libros de no ficción de un país table.insert(categoriasGeneros, categorizarWikidata( {['categoría'] = 'Libros de no ficción de $1' },Entidad.claims['P495'])) -- Libros de no ficción de un idioma table.insert(categoriasGeneros, categorizarWikidata( {['categoría'] = 'Libros de no ficción en $1', },Entidad.claims['P407'] or Entidad.claims['P364'])) end end if not categoriasGeneros[1] then -- Libros de un año table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Libros de $1', ['formatoFecha']='año'},Entidad.claims['P577'])) -- Libros de un país table.insert(categoriasGeneros, categorizarWikidata( {['categoría'] = 'Libros de $1'} ,Entidad.claims['P495'])) end if categoriasGeneros[1] then categorias = categorias .. table.concat(categoriasGeneros) end -- Obras infantiles, fábulas, etc. categorias=categorias .. categorizarWikidata({['categoría'] = categoriasGeneros2},Entidad.claims['P136']) -- Premios categorias = categorias .. categorizarWikidata({['categoría'] = '$1'}, Entidad.claims['P166']) end return ModuloFicha.infobox(FichaLibro) .. categorias end function enlazarIdioma(idioma, mayuscula) if not idioma then return idioma else inicio, medio, fin=idioma:match('(%[[^|%]]*|)(.)(.*)') if inicio and medio and fin then if mayuscula == 'sí' then return inicio .. medio:upper() .. fin else return inicio .. medio:lower() .. fin end end if idioma:find('%[') then return idioma end idioma= idioma:lower() if mayuscula == 'sí' then return '[[idioma ' .. idioma .. '|' .. idioma:gsub("%a", string.upper,1) .. ']]' else return '[[idioma ' .. idioma .. '|' .. idioma .. ']]' end end end -- Función que devuelve la lista de los valores de una propiedad en Wikidata formateados function propiedad(idPropiedad,opciones) if Entidad and Entidad.claims and Entidad.claims[idPropiedad] then if not opciones then opciones = normal end opciones.entityId = Entidad.id opciones.propiedad = idPropiedad valorPropiedad = getPropiedadWikidata(opciones,Entidad.claims[idPropiedad]) return valorPropiedad end end -- Función que devuelve el género y el subgénero de Wikidata. -- La novela, novela corta o cuento, se devolverán siempre en el género. -- El resto de géneros se devolverán como subgénero o como género dependiendo de -- si en Wikidata se utiliaz uno de los géneros anteriores. -- Por ejemplo: -- - En Wikidata Novela + ciencia ficción --> género = Novela, subgénero = Ciencia ficción -- - En Wikidata ciencia ficción --> género = Ciencia ficción function obtenerGeneroWikidata() if not Entidad or not Entidad.claims then return end -- Subgéneros de novelas sin un artículo en la Wikipedia y que se reemplazan por el subgénero que existe local subgenerosNovelas = { ['Q3056541' ] = 'Q4184' , -- novela autobiográfica / autobiografía ['Q26228228'] = 'Q1077883', -- novela biopunk / biopunk ['Q26228231'] = 'Q174526' , -- novela ciberpunk / ciberpunk ['Q12132683'] = 'Q24925' , -- novela de ciencia ficción / ['Q10992055'] = 'Q1057172', -- novela fantástica / literatura fantástica ['Q11825892'] = 'Q1233720', -- novela juvenil / literatura juvenil ['Q26906554'] = 'Q197949' , -- novela posapocalíptica / ficción posapocalíptica ['Q27022710'] = 'Q1341831', -- novela postciberpunk / postciberpunk ['Q27020789'] = 'Q223685' , -- novela steampunk / steampunk ['Q3440959' ] = 'Q182015' , -- novela de suspense / suspense ['Q26225470'] = 'Q224989' , -- novela ucrónica / ucronía ['Q21616374'] = 'Q1425557', -- novela de vampiros / literatura de vampiros ['Q21615367'] = 'Q131539' , -- novela infantil / literatura infantil } local subgenerosCuentos = { ['Q21905924'] = 'Q24925' , -- cuento de ciencia ficción / ciencia ficción } local subgenerosGeneros = { ['Q132311' ] = 'Q1057172', -- Género fantástico / Literatura fantástica ['Q16681629'] = 'Q224989' , -- literatura ucrónica / Ucronía ['Q516626' ] = 'Q193606' , -- Terror (sentimiento de miedo o fobia en su escala máxima) / Terror (género literario) } local temasGeneros = { ['Q1481165' ] = 'Q2763' , -- literatura del Holocausto / Holocausto ['Q182154' ] = 'Q253732' , -- viaje a través del tiempo / viaje en el tiempo en la ficción ['Q253732' ] = 'Q253732' , -- viaje en el tiempo en la ficción / viaje en el tiempo en la ficción } local declaracionesGeneros = Entidad.claims['P136'] local declaracionesInstancias = Entidad.claims['P31'] local declaracionesTemas = Entidad.claims['P921'] local identificadorGenero, identificadorTema local generos = {} local subgeneros = {} local temas = {} if declaracionesTemas then for k,v in pairs(declaracionesTemas) do identificadorTema = 'Q' .. v.mainsnak.datavalue.value['numeric-id'] if identificadorTema == 'Q182154' then -- viaje a través del tiempo insertarEn(temas, 'Q253732') -- viaje en el tiempo en la ficción else insertarEn(temas, identificadorTema) end end end if declaracionesInstancias then for k,v in pairs(declaracionesInstancias) do identificadorGenero = 'Q' .. v.mainsnak.datavalue.value['numeric-id'] if insertarEn(subgeneros, subgenerosNovelas[identificadorGenero]) or identificadorGenero == 'Q8261' or -- novela identificadorGenero == 'Q149537' then -- novela corta insertarEn(generos, 'Q8261') -- novela elseif insertarEn(subgeneros, subgenerosCuentos[identificadorGenero]) or identificadorGenero == 'Q49084' or -- cuento identificadorGenero == 'Q1279564' or -- libro de cuentos identificadorGenero == 'Q27560760' or -- libro de cuentos de hadas identificadorGenero == 'Q7679101' or -- conte identificadorGenero == 'Q17991521' or -- tale identificadorGenero == 'Q5457615' or -- microrelato identificadorGenero == 'Q472808' then -- cuento largo insertarEn(generos, 'Q49084') -- cuento elseif identificadorGenero == 'Q5185279' or -- poema identificadorGenero == 'Q482' or -- poesia identificadorGenero == 'Q12106333' then -- poemario insertarEn(generos, 'Q482') -- poesia elseif identificadorGenero == 'Q25379' then -- obra teatral insertarEn(generos, 'Q11635') -- teatro end end end if declaracionesGeneros then for k,v in pairs(declaracionesGeneros) do identificadorGenero = 'Q' .. v.mainsnak.datavalue.value['numeric-id'] if insertarEn(subgeneros, subgenerosNovelas[identificadorGenero]) then insertarEn(generos, 'Q8261') -- novela elseif insertarEn(subgeneros, subgenerosGeneros[identificadorGenero]) or insertarEn(temas, temasGeneros[identificadorGenero])then elseif identificadorGenero == 'Q3547700' then -- ucronía de fantasía insertarEn(subgeneros, 'Q224989') -- Ucronía insertarEn(subgeneros, 'Q1057172') -- Literatura fantástica elseif insertarEn(subgeneros, subgenerosCuentos[identificadorGenero]) or identificadorGenero == 'Q5457615' or -- microrelato identificadorGenero == 'Q472808' then -- cuento largo insertarEn(generos, 'Q49084') -- cuento elseif identificadorGenero == 'Q149537' then -- novela corta insertarEn(generos, 'Q8261') -- novela elseif identificadorGenero == 'Q3326349' then -- lirica insertarEn(generos, 'Q482') -- poesia elseif identificadorGenero == 'Q5185279' then -- poema insertarEn(generos, 'Q482') -- poesia elseif identificadorGenero == 'Q25379' then -- Obra teatral insertarEn(generos, 'Q11635') -- Teatro elseif identificadorGenero == 'Q1347298' then -- novela por entregas -- No es un género en sí. No mostrarlo. elseif identificadorGenero == 'Q10453828' then -- novela de viajes en el tiempo insertarEn(generos, 'Q8261') -- novela insertarEn(temas, 'Q253732') -- viaje en el tiempo en la ficción elseif identificadorGenero == 'Q26928598' or -- novela distópica identificadorGenero == 'Q20443047' then -- Literatura distópica insertarEn(generos, 'Q8261') -- novela insertarEn(temas, 'Q180774') -- Distopía elseif identificadorGenero == 'Q3238422' then -- literatura de ciencia ficción insertarEn(subgeneros, 'Q24925') -- ciencia ficción elseif ModuloTablas.en(tablaGeneros, identificadorGenero) then insertarEn(generos, identificadorGenero) else insertarEn(subgeneros, identificadorGenero) end end end for k,v in pairs(subgeneros) do if enTabla(generos, 'Q8261') and -- novela v == 'Q193606' then -- literatura de terror subgeneros[k] = 'Q20667180' -- novela de terror end end local subgenerosConFormato = formatear(subgeneros) -- Reemplazar en los géneros "novela de ciencia ficción" por "ciencia ficción" y similares if subgenerosConFormato then subgenerosConFormato = subgenerosConFormato:gsub('|novela de ', '|') subgenerosConFormato = subgenerosConFormato:gsub('|Novela de ciencia ficción', '|Ciencia ficción') subgenerosConFormato = subgenerosConFormato:gsub('%[%[Novela de terror%]%]', '[[Novela de terror|Terror]]') subgenerosConFormato = subgenerosConFormato:gsub('|Novela de terror', '|Terror') subgenerosConFormato = subgenerosConFormato:gsub('%[%[Literatura de ficción%]%]', '[[Literatura de ficción|Ficción]]') subgenerosConFormato = subgenerosConFormato:gsub('%[%[literatura de ficción%]%]', '[[Literatura de ficción|ficción]]') end if generos[1] then return addLinkbackWikidata(formatear(generos), Entidad.id, 'P136') , addLinkbackWikidata(subgenerosConFormato, Entidad.id, 'P136') , addLinkbackWikidata(formatear(temas), Entidad.id, 'P921') else return addLinkbackWikidata(subgenerosConFormato, Entidad.id, 'P136') , nil , addLinkbackWikidata(formatear(temas), Entidad.id, 'P921') end end -- Formatear una tabla de identificadores de entidades de Wikidata function formatear(identificadores) local identificadoresFormateados = {} local primero = true for k,v in pairs(identificadores) do if primero then table.insert(identificadoresFormateados, formatoIdEntidad(v,{['mayúscula'] = 'sí', ['enlace'] = 'sí'})) primero = false else table.insert(identificadoresFormateados, formatoIdEntidad(v, {['mayúscula'] = 'no', ['enlace'] = 'sí'})) end end -- No devolver nada si la lista no tiene elementos if not primero then return mw.text.listToText(identificadoresFormateados) end end function obtenerEtiquetaWikidata() if Entidad and Entidad.labels and Entidad.labels.es then return Entidad.labels.es.value end end function obtenerWikisource(idioma) if not idioma or not Entidad or not Entidad.sitelinks then return end if idioma:find('[Ee]spañol') then if not Entidad.sitelinks.eswikisource or not Entidad.sitelinks.eswikisource.title then return end tituloWikiSource = Entidad.sitelinks.eswikisource.title --[[Archivo:Wikisource-logo.svg|15px| ]] return "''[[s:" .. tituloWikiSource .. "|" .. tituloWikiSource .. "]]'' en [[Wikisource]]" elseif idioma:find('[Ii]nglés') then if not Entidad.sitelinks.enwikisource or not Entidad.sitelinks.enwikisource.title then return end tituloWikiSource = Entidad.sitelinks.enwikisource.title return "''[[:en:s:" .. tituloWikiSource .. "|" .. tituloWikiSource .. "]]'' en [[Wikisource]]" elseif idioma:find('[Ff]rancés') then if not Entidad.sitelinks.frwikisource or not Entidad.sitelinks.frwikisource.title then return end tituloWikiSource = Entidad.sitelinks.frwikisource.title return "''[[:fr:s:" .. tituloWikiSource .. "|" .. tituloWikiSource .. "]]'' en [[Wikisource]]" end end function corregirIdiomaWikidata(entidad, idPropiedad) if not entidad or not idPropiedad then return end local declaracion= elementoTabla(entidad, 'claims', idPropiedad) local idIdioma if not declaracion then return end for k,v in pairs(declaracion) do idIdioma=elementoTabla(v,'mainsnak','datavalue','value','id') if idIdioma == 'Q7979' or -- inglés británico idIdioma == 'Q44676' or -- inglés canadiense idIdioma == 'Q7976' or -- inglés estadounidense idIdioma == 'Q665624' then -- inglés en Irlanda v.mainsnak.datavalue.value.id='Q1860' v.mainsnak.datavalue.value['numeric-id']=1860 end end end function obtenerTitulo() --De momento solo obtener el título de Wikidata si solo hay definido uno. --if true then return ModuloTablas.tostring(Entidad) end if not elementoTabla(Entidad, 'claims', 'P1476', 2) then return propiedad('P1476') end end return z