Wikisource eswikisource https://es.wikisource.org/wiki/Portada MediaWiki 1.47.0-wmf.2 first-letter Medio Especial Discusión Usuario Usuario discusión Wikisource Wikisource discusión Archivo Archivo discusión MediaWiki MediaWiki discusión Plantilla Plantilla discusión Ayuda Ayuda discusión Categoría Categoría discusión Portal Portal discusión Página Página Discusión Índice Índice Discusión Autor Autor discusión TimedText TimedText talk Módulo Módulo discusión Evento Evento discusión MediaWiki:Recentchangestext 8 913 1653857 1610200 2026-05-14T22:02:40Z Aleator 587 wikinews (RIP) 1653857 wikitext text/x-wiki <div class="plainlinks" style="text-align: left; font-size:90%;"> <u>''Páginas de ayuda:'' </u> [[Wikisource:¿Qué es Wikisource?|¿Qué es Wikisource?]] '''•''' [[Wikisource:Sobre Wikisource|Acerca del proyecto]] '''•''' [[Wikisource:Ayuda|Ayuda]] '''•''' [[Wikisource:Consultas|Consultas]] <u>''Enlaces útiles:''</u> [[Wikisource:Café|Café]] '''•''' [[Wikisource:Portal de la comunidad|Portal de la comunidad]] '''•''' [[Wikisource:Plantillas|Plantillas]] '''•''' [[Wikisource:Estadísticas|Estadísticas]] '''•''' [[:Plantilla:Galería|Agregar un texto nuevo a la portada]] '''•''' [[Ayuda:Páginas de transcripción|Páginas de transcripción]] <u>''Páginas:''</u> [[Especial:Newpages|Nuevas]] '''•''' Para [[:Categoría:Wikisource:Páginas para borrar|borrar]] '''•''' [[:Categoría:Varios|arreglar/mejorar]] '''•''' [[Wikisource:Páginas sospechosas de violar copyright|Con copyright dudoso]] '''•''' [[Wikisource:Categoría de las páginas|Cómo categorizar]] '''•''' [[:Categoría:Índices alfabéticos|Índices para búsqueda]] '''•''' [[Wikisource:Políticas de bloqueo de páginas|Páginas protegidas]] <u>''Otros proyectos:''</u> [//wikisource.org/wiki/Special:Recentchanges Wikisource multilingüe] '''•''' [[meta:Special:Recentchanges|Meta]] '''•''' [[w:Special:Recentchanges|Wikipedia]] '''•''' [[wikt:Special:Recentchanges|Wikcionario]] '''•''' [[q:Special:Recentchanges|Wikiquote]] '''•''' [[b:Special:Recentchanges|Wikilibros]] '''•''' [[commons:Special:Recentchanges|Commons]] '''•''' [[wikispecies:Special:Recentchanges|Wikiespecies]] '''•''' [[v:Special:Recentchanges|Wikiversidad]] '''•''' [[voy:Special:Recentchanges|Wikiviajes]] '''•''' [[d:Special:Recentchanges|Wikidata]] '''-''' Actualmente hay {{NUMBEROFARTICLES}} páginas. </div> <!-- interwikis aquí --> [[ar:Special:Recentchanges]] [[as:Special:Recentchanges]] [[az:Special:Recentchanges]] [[ban:Special:Recentchanges]] [[be:Special:Recentchanges]] [[bg:Special:Recentchanges]] [[bn:Special:Recentchanges]] [[br:Special:Recentchanges]] [[bs:Special:Recentchanges]] [[ca:Special:Recentchanges]] [[cs:Special:Recentchanges]] [[cy:Special:Recentchanges]] [[da:Special:Recentchanges]] [[de:Special:Recentchanges]] [[el:Special:Recentchanges]] [[en:Special:Recentchanges]] [[eo:Special:Recentchanges]] [[et:Special:Recentchanges]] [[eu:Special:Recentchanges]] [[fa:Special:Recentchanges]] [[fi:Special:Recentchanges]] [[fo:Special:Recentchanges]] [[fr:Special:Recentchanges]] [[gl:Special:Recentchanges]] [[gu:Special:Recentchanges]] [[he:Special:Recentchanges]] [[hi:Special:Recentchanges]] [[hr:Special:Recentchanges]] [[ht:Special:Recentchanges]] [[hu:Special:Recentchanges]] [[hy:Special:Recentchanges]] [[id:Special:Recentchanges]] [[is:Special:Recentchanges]] [[it:Special:Recentchanges]] [[ja:Special:Recentchanges]] [[jv:Special:Recentchanges]] [[kn:Special:Recentchanges]] [[ko:Special:Recentchanges]] [[la:Special:Recentchanges]] [[li:Special:Recentchanges]] [[lij:Special:Recentchanges]] [[lt:Special:Recentchanges]] [[mk:Special:Recentchanges]] [[ml:Special:Recentchanges]] [[mr:Special:Recentchanges]] [[nap:Special:Recentchanges]] [[nl:Special:Recentchanges]] [[no:Special:Recentchanges]] [[or:Special:Recentchanges]] [[pa:Special:Recentchanges]] [[pl:Special:Recentchanges]] [[pms:Special:Recentchanges]] [[pt:Special:Recentchanges]] [[ro:Special:Recentchanges]] [[ru:Special:Recentchanges]] [[sa:Special:Recentchanges]] [[sah:Special:Recentchanges]] [[sk:Special:Recentchanges]] [[sl:Special:Recentchanges]] [[sr:Special:Recentchanges]] [[sv:Special:Recentchanges]] [[ta:Special:Recentchanges]] [[te:Special:Recentchanges]] [[th:Special:Recentchanges]] [[tl:Special:Recentchanges]] [[tr:Special:Recentchanges]] [[uk:Special:Recentchanges]] [[vec:Special:Recentchanges]] [[vi:Special:Recentchanges]] [[wa:Special:Recentchanges]] [[yi:Special:Recentchanges]] [[zh:Special:Recentchanges]] [[zh-min-nan:Special:Recentchanges]] 5lrl4gydkjy5l3pwz8lys7s6ejacc4k MediaWiki:Edittools 8 9127 1653856 860379 2026-05-14T22:01:45Z Aleator 587 wikinews (RIP) => wikidata 1653856 wikitext text/x-wiki <!-- Este texto aparecerá bajo los formularios de edición y subida. --> <div class="plainlinks" style="margin-top:1px; border-width:1px; border-style:solid; border-color:#aaaaaa; padding:2px;"> Caracteres especiales: <charinsert>á é í ó ú Á É Í Ó Ú ü Ü ñ Ñ</charinsert> · <charinsert>« » «+» ¡ ¿ - † º ª ~ ‡ ©</charinsert> · <charinsert> â Ê ê </charinsert> · <charinsert>Ä ä Ë ë Ö ö Ü ü </charinsert> · <charinsert>Ç ç </charinsert> · <charinsert>Ā ā Ē ē Ī ī Ō ō Ū ū </charinsert> · <charinsert>ß </charinsert> · <charinsert>Ð ð Þ þ </charinsert> · <charinsert>Æ æ Œ œ </charinsert> · <charinsert>&ndash; &mdash; </charinsert> · <charinsert>[+] [[+]] {{+}} </charinsert> · <charinsert>~ | °</charinsert><br> <charinsert> ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁰ ½ </charinsert> Wiki: <charinsert> [[Categoría:+]] · [[Image:+]] · #REDIRECT · <ref>+</ref> · <references/> · </charinsert> <charinsert>{{brecha}}</charinsert> · <charinsert><section begin= /></charinsert> · <charinsert><section end= /></charinsert> · <charinsert>{{np}}</charinsert> · <charinsert>{{derecha|+}}</charinsert> · <charinsert>{{c|}}</charinsert> · <charinsert>{{May|}}</charinsert> · <charinsert>{{Gota|}}</charinsert> · <charinsert>{{GrandeInicial|}}</charinsert> · <charinsert>{{ORDENAR:+}}</charinsert> · <charinsert> <nowiki><u>+</u></nowiki> · <nowiki>{{</nowiki>Centrar<nowiki>|+}}</nowiki> · <nowiki><poem>+</poem></nowiki> · <nowiki>{{Pt|+|}}</nowiki> · <nowiki><nowiki>+</nowiki></nowiki> · <nowiki>{{</nowiki>Grande<nowiki>|+}}</nowiki> · <nowiki><noinclude>+</noinclude></nowiki> · <nowiki><includeonly>+</includeonly></nowiki> </charinsert> · <charinsert> ~~~~~ </charinsert> · <charinsert> <nowiki>{{</nowiki>DP-100}} <nowiki>{{</nowiki>DP-70}} <nowiki>{{</nowiki>DH}} <nowiki>{{</nowiki>PAGENAME}}</charinsert> Estilos: <charinsert> class="verse" class="prose" class="Parrafo" </charinsert> Enlaces: <div style="font-size: 83%;">Commons<charinsert> [[Commons:+]]</charinsert> Wikipedia<charinsert>[[w:es:+]]</charinsert> Wikidata<charinsert> [[d:+]] </charinsert> Wikiquote<charinsert>[[q:+]]</charinsert> Wikilibros<charinsert> [[b:+]]</charinsert> Wikcionario<charinsert>[[wikt:+]]</charinsert> Wikiversidad<charinsert>[[v:+]]</charinsert> </div> </div> ruwmuw0119n27qq5jac3eppyisr9cow Himno de Guayaquil 0 32314 1653850 1646092 2026-05-14T21:35:24Z ~2026-29019-90 96215 Estaba mal escrito 1653850 wikitext text/x-wiki {{VT|Himno guayaquileño de 1820}} {{Himno |Título=Himno de Guayaquil |Letra=[[José Joaquín de Olmedo]] |Música=Ana Villamil Ycaza |Año=1918 |Imágen=Bandera de Guayaquil.svg |Descripción= Bandera de Guayaquil. |Texto=}} {| style="background-color:#FCF0CD; border:solid #98750C; border-width: 1px 2px 2px 1px; text-align:left; width:100%;" |-valign=top |Versión según [http://www.efemerides.ec/1/julio/cancion_1.htm “América Libre”, 1920] |Versión según [https://www.cervantesvirtual.com/obra-visor/jose-joaquin-olmedo-poesiaprosa--0/html/fffd7da6-82b1-11df-acc7-002185ce6064_19.html José Joaquín Olmedo : ''poesía-prosa'', Quito, 1960] |-valign=top |<poem> '''Canción al 9 de octubre''' Veís esa luz amable Que raya en el oriente, Cada vez más luciente En gracia celestial? Esa es la aurora plácida Que anuncia libertad!, Esa es la aurora plácida Que anuncia libertad! '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! '''I''' Nosotrputoos guardemos Con ardor indecible Tu fuego inextinguible, Oh santa libertad! '''II''' Como vestales vírgenes Que sirven a tu altar. Como vestales vírgenes Que sirven a tu altar. '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! '''I''' Haz que en el suelo que amas Florezca en todas partes El culto de las artes Y el honor nacional. '''II''' Y da con mano pródiga Los bienes de la paz. Y da con mano pródiga Los bienes de la paz. '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! </poem> | <poem> '''Canción al 9 de octubre''' ¿Veis esa luz amable que raya en el oriente, cada vez más luciente en gracia celestial? Esa es la aurora plácida que anuncia libertad. Esa es la aurora plácida que anuncia libertad. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. Nosotras guardaremos con ardor indecible tu fuego inextinguible, oh santa libertad, como vestales vírgenes que sirven a tu altar, como vestales vírgenes que sirven a tu altar. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. Haz que en el suelo que amas florezca en todas partes el culto de las artes y el honor nacional. Y da con mano pródiga los bienes de la paz, y da con mano pródiga los bienes de la paz. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. </poem> |} [[Categoría:Historia de Ecuador|Gua]] [[Categoría:Himnos locales de Ecuador|Gua]] dslwzvwy51pwduf3hy9yvylfi98okvd 1653851 1653850 2026-05-14T21:36:32Z ~2026-29019-90 96215 /* */ 1653851 wikitext text/x-wiki {{VT|Himno guayaquileño de 1820}} {{Himno |Título=Himno de Guayaquil |Letra=[[José Joaquín de Olmedo]] |Música=Ana Villamil Ycaza |Año=1918 |Imágen=Bandera de Guayaquil.svg |Descripción= Bandera de Guayaquil. |Texto=}} {| style="background-color:#FCF0CD; border:solid #98750C; border-width: 1px 2px 2px 1px; text-align:left; width:100%;" |-valign=top |Versión según [http://www.efemerides.ec/1/julio/cancion_1.htm “América Libre”, 1920] |Versión según [https://www.cervantesvirtual.com/obra-visor/jose-joaquin-olmedo-poesiaprosa--0/html/fffd7da6-82b1-11df-acc7-002185ce6064_19.html José Joaquín Olmedo : ''poesía-prosa'', Quito, 1960] |-valign=top |<poem> '''Canción al 9 de octubre''' Veís esa luz amable que prevalece en el sur? Que raya en el oriente, Cada vez más luciente En gracia celestial? Esa es la aurora plácida Que anuncia libertad!, Esa es la aurora plácida Que anuncia libertad! '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! '''I''' Nosotrputoos guardemos Con ardor indecible Tu fuego inextinguible, Oh santa libertad! '''II''' Como vestales vírgenes Que sirven a tu altar. Como vestales vírgenes Que sirven a tu altar. '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! '''I''' Haz que en el suelo que amas Florezca en todas partes El culto de las artes Y el honor nacional. '''II''' Y da con mano pródiga Los bienes de la paz. Y da con mano pródiga Los bienes de la paz. '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! </poem> | <poem> '''Canción al 9 de octubre''' ¿Veis esa luz amable que raya en el oriente, cada vez más luciente en gracia celestial? Esa es la aurora plácida que anuncia libertad. Esa es la aurora plácida que anuncia libertad. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. Nosotras guardaremos con ardor indecible tu fuego inextinguible, oh santa libertad, como vestales vírgenes que sirven a tu altar, como vestales vírgenes que sirven a tu altar. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. Haz que en el suelo que amas florezca en todas partes el culto de las artes y el honor nacional. Y da con mano pródiga los bienes de la paz, y da con mano pródiga los bienes de la paz. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. </poem> |} [[Categoría:Historia de Ecuador|Gua]] [[Categoría:Himnos locales de Ecuador|Gua]] 9dij1umwnz7qtx4z7metu0ijrlfvvus 1653852 1653851 2026-05-14T21:39:40Z ~2026-29019-90 96215 /* */ 1653852 wikitext text/x-wiki {{VT|Himno guayaquileño de 1820}} {{Himno |Título=Himno de Guayaquil |Letra=[[José Joaquín de Olmedo]] |Música=Ana Villamil Ycaza |Año=1918 |Imágen=Bandera de Guayaquil.svg |Descripción= Bandera de Guayaquil. |Texto=}} {| style="background-color:#FCF0CD; border:solid #98750C; border-width: 1px 2px 2px 1px; text-align:left; width:100%;" |-valign=top |Versión según [http://www.efemerides.ec/1/julio/cancion_1.htm “América Libre”, 1920] |Versión según [https://www.cervantesvirtual.com/obra-visor/jose-joaquin-olmedo-poesiaprosa--0/html/fffd7da6-82b1-11df-acc7-002185ce6064_19.html José Joaquín Olmedo : ''poesía-prosa'', Quito, 1960] |-valign=top |<poem> '''Canción al 9 de octubre''' Veís esa luz amable que prevalece en el sur? Que raya en el oriente y que detonan ahí? Cada vez más luciente En gracia celestial? Esa es la aurora plácida Que anuncia libertad!, Esa es la aurora plácida Que anuncia libertad! '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! '''I''' Nosotrputoos guardemos Con ardor indecible Tu fuego inextinguible, Oh santa libertad! '''II''' Como vestales vírgenes Que sirven a tu altar. Como vestales vírgenes Que sirven a tu altar. '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! '''I''' Haz que en el suelo que amas Florezca en todas partes El culto de las artes Y el honor nacional. '''II''' Y da con mano pródiga Los bienes de la paz. Y da con mano pródiga Los bienes de la paz. '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! </poem> | <poem> '''Canción al 9 de octubre''' ¿Veis esa luz amable que raya en el oriente, cada vez más luciente en gracia celestial? Esa es la aurora plácida que anuncia libertad. Esa es la aurora plácida que anuncia libertad. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. Nosotras guardaremos con ardor indecible tu fuego inextinguible, oh santa libertad, como vestales vírgenes que sirven a tu altar, como vestales vírgenes que sirven a tu altar. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. Haz que en el suelo que amas florezca en todas partes el culto de las artes y el honor nacional. Y da con mano pródiga los bienes de la paz, y da con mano pródiga los bienes de la paz. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. </poem> |} [[Categoría:Historia de Ecuador|Gua]] [[Categoría:Himnos locales de Ecuador|Gua]] asmrbq58d3pfb3flxzlcvu9gj30a21k 1653853 1653852 2026-05-14T21:40:00Z ~2026-29019-90 96215 /* */ 1653853 wikitext text/x-wiki {{VT|Himno guayaquileño de 1820}} {{Himno |Título=Himno de Guayaquil |Letra=[[José Joaquín de Olmedo]] |Música=Ana Villamil Ycaza |Año=1918 |Imágen=Bandera de Guayaquil.svg |Descripción= Bandera de Guayaquil. |Texto=}} {| style="background-color:#FCF0CD; border:solid #98750C; border-width: 1px 2px 2px 1px; text-align:left; width:100%;" |-valign=top |Versión según [http://www.efemerides.ec/1/julio/cancion_1.htm “América Libre”, 1920] |Versión según [https://www.cervantesvirtual.com/obra-visor/jose-joaquin-olmedo-poesiaprosa--0/html/fffd7da6-82b1-11df-acc7-002185ce6064_19.html José Joaquín Olmedo : ''poesía-prosa'', Quito, 1960] |-valign=top |<poem> '''Canción al 9 de octubre''' Veís esa luz amable que prevalece en el sur? Que raya en el oriente y que detonan ahí? Cada vez más luciente En gracia celestial? Esa es la aurora plácida Que anuncia libertad!, Esa es la aurora plácida Que anuncia libertad! '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! '''I''' Nosotrputoos guardemos Con ardor indecible Tu fuego inextinguible, Oh santa libertad! '''II''' Como vestales vírgenes Que sirven a tu altar. Como vestales vírgenes Que sirven a tu altar. '''Coro''' Saludemos gozosos a todos los Valero y Meza En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! '''I''' Haz que en el suelo que amas Florezca en todas partes El culto de las artes Y el honor nacional. '''II''' Y da con mano pródiga Los bienes de la paz. Y da con mano pródiga Los bienes de la paz. '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! </poem> | <poem> '''Canción al 9 de octubre''' ¿Veis esa luz amable que raya en el oriente, cada vez más luciente en gracia celestial? Esa es la aurora plácida que anuncia libertad. Esa es la aurora plácida que anuncia libertad. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. Nosotras guardaremos con ardor indecible tu fuego inextinguible, oh santa libertad, como vestales vírgenes que sirven a tu altar, como vestales vírgenes que sirven a tu altar. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. Haz que en el suelo que amas florezca en todas partes el culto de las artes y el honor nacional. Y da con mano pródiga los bienes de la paz, y da con mano pródiga los bienes de la paz. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. </poem> |} [[Categoría:Historia de Ecuador|Gua]] [[Categoría:Himnos locales de Ecuador|Gua]] 0d5757ypvet08l4zp2hoiiixj8wx4zr 1653854 1653853 2026-05-14T21:40:58Z ~2026-29019-90 96215 /* */ 1653854 wikitext text/x-wiki {{VT|Himno guayaquileño de 1820}} {{Himno |Título=Himno de Guayaquil |Letra=[[José Joaquín de Olmedo]] |Música=Ana Villamil Ycaza |Año=1918 |Imágen=Bandera de Guayaquil.svg |Descripción= Bandera de Guayaquil. |Texto=}} {| style="background-color:#FCF0CD; border:solid #98750C; border-width: 1px 2px 2px 1px; text-align:left; width:100%;" |-valign=top |Versión según [http://www.efemerides.ec/1/julio/cancion_1.htm “América Libre”, 1920] |Versión según [https://www.cervantesvirtual.com/obra-visor/jose-joaquin-olmedo-poesiaprosa--0/html/fffd7da6-82b1-11df-acc7-002185ce6064_19.html José Joaquín Olmedo : ''poesía-prosa'', Quito, 1960] |-valign=top |<poem> '''Canción al 9 de octubre''' Veís esa luz amable que prevalece en el sur? Que raya en el oriente y que detonan ahí? Cada vez más luciente En gracia celestial? Esa es la aurora plácida Que anuncia libertad!, Esa es la aurora plácida Que anuncia libertad! '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! '''I''' Nosotrputoos guardemos Con ardor indecible Tu fuego inextinguible, Oh santa libertad! '''II''' Como vestales vírgenes Que sirven a tu altar. Como vestales vírgenesis te amo Que sirven a tu altar. '''Coro''' Saludemos gozosos a todos los Valero y Meza En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! '''I''' Haz que en el suelo que amas Florezca en todas partes El culto de las artes Y el honor nacional. '''II''' Y da con mano pródiga Los bienes de la paz. Y da con mano pródiga Los bienes de la paz. '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! </poem> | <poem> '''Canción al 9 de octubre''' ¿Veis esa luz amable que raya en el oriente, cada vez más luciente en gracia celestial? Esa es la aurora plácida que anuncia libertad. Esa es la aurora plácida que anuncia libertad. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. Nosotras guardaremos con ardor indecible tu fuego inextinguible, oh santa libertad, como vestales vírgenes que sirven a tu altar, como vestales vírgenes que sirven a tu altar. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. Haz que en el suelo que amas florezca en todas partes el culto de las artes y el honor nacional. Y da con mano pródiga los bienes de la paz, y da con mano pródiga los bienes de la paz. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. </poem> |} [[Categoría:Historia de Ecuador|Gua]] [[Categoría:Himnos locales de Ecuador|Gua]] klczjghobqltw3p7z55vhivpud3y0rk 1653855 1653854 2026-05-14T21:42:39Z Aleator 587 Revertidos los cambios de [[Special:Contributions/~2026-29019-90|~2026-29019-90]] ([[User talk:~2026-29019-90|disc.]]) a la última edición de [[User:SchlurcherBot|SchlurcherBot]] 1646092 wikitext text/x-wiki {{VT|Himno guayaquileño de 1820}} {{Himno |Título=Himno de Guayaquil |Letra=[[José Joaquín de Olmedo]] |Música=Ana Villamil Ycaza |Año=1918 |Imágen=Bandera de Guayaquil.svg |Descripción= Bandera de Guayaquil. |Texto=}} {| style="background-color:#FCF0CD; border:solid #98750C; border-width: 1px 2px 2px 1px; text-align:left; width:100%;" |-valign=top |Versión según [http://www.efemerides.ec/1/julio/cancion_1.htm “América Libre”, 1920] |Versión según [https://www.cervantesvirtual.com/obra-visor/jose-joaquin-olmedo-poesiaprosa--0/html/fffd7da6-82b1-11df-acc7-002185ce6064_19.html José Joaquín Olmedo : ''poesía-prosa'', Quito, 1960] |-valign=top |<poem> '''Canción al 9 de octubre''' Veís esa luz amable Que raya en el oriente, Cada vez más luciente En gracia celestial? Esa es la aurora plácida Que anuncia libertad!, Esa es la aurora plácida Que anuncia libertad! '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! '''I''' Nosotros guardemos Con ardor indecible Tu fuego inextinguible, Oh santa libertad! '''II''' Como vestales vírgenes Que sirven a tu altar. Como vestales vírgenes Que sirven a tu altar. '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! '''I''' Haz que en el suelo que amas Florezca en todas partes El culto de las artes Y el honor nacional. '''II''' Y da con mano pródiga Los bienes de la paz. Y da con mano pródiga Los bienes de la paz. '''Coro''' Saludemos gozosos En armoniosos cánticos Esta aurora gloriosa Que anuncia libertad, Libertad, libertad! </poem> | <poem> '''Canción al 9 de octubre''' ¿Veis esa luz amable que raya en el oriente, cada vez más luciente en gracia celestial? Esa es la aurora plácida que anuncia libertad. Esa es la aurora plácida que anuncia libertad. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. Nosotras guardaremos con ardor indecible tu fuego inextinguible, oh santa libertad, como vestales vírgenes que sirven a tu altar, como vestales vírgenes que sirven a tu altar. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. Haz que en el suelo que amas florezca en todas partes el culto de las artes y el honor nacional. Y da con mano pródiga los bienes de la paz, y da con mano pródiga los bienes de la paz. '''Coro''' Saludemos gozosas en armoniosos cánticos esa aurora gloriosa que anuncia libertad, libertad, libertad. </poem> |} [[Categoría:Historia de Ecuador|Gua]] [[Categoría:Himnos locales de Ecuador|Gua]] t5vzzycb0e5u7hdoi4kn76hixzp2yk1 Poética (traducción de José Goya y Muniain)/Capítulo II 0 50644 1653841 982888 2026-05-14T19:49:16Z Aleator 587 +step (evitar secc. inex.) 1653841 wikitext text/x-wiki {{ma}} <div class="prose"><pages index="El arte poética de Aristóteles (1798).pdf" from="27" to="35" step=2 onlysection="Capitulo2" header=1/></div> {{línea}} {{listaref}} g750hrksxfein1l5xptgz9bm6sopkie Poética (traducción de José Goya y Muniain)/Capítulo III 0 50645 1653842 986745 2026-05-14T19:50:48Z Aleator 587 +step (evitar secc. inex.) 1653842 wikitext text/x-wiki {{ma}} <div class="prose"><pages index="El arte poética de Aristóteles (1798).pdf" from="35" to="91" step=2 onlysection="Capitulo3" header=1/></div> {{línea}} {{listaref}} 6dukqemk7lqn7bc4k78386hfwpje5h4 Poética (traducción de José Goya y Muniain)/Capítulo IV 0 50646 1653843 982884 2026-05-14T19:51:22Z Aleator 587 +step (evitar secc. inex.) 1653843 wikitext text/x-wiki {{ma}} <div class="prose"><pages index="El arte poética de Aristóteles (1798).pdf" from="91" to="99" step=2 onlysection="Capitulo4" header=1/></div> {{línea}} {{listaref}} pfxl8urndiix6x2msv31q45jzjzwzbz Poética (traducción de José Goya y Muniain)/Capítulo V 0 50647 1653844 982905 2026-05-14T19:51:48Z Aleator 587 +step (evitar secc. inex.) 1653844 wikitext text/x-wiki {{ma}} <div class="prose"><pages index="El arte poética de Aristóteles (1798).pdf" from="99" to="109" step=2 onlysection="Capitulo5" header=1/></div> {{línea}} {{listaref}} 4nrtuyfg41hs3iecugx7dwnzlncr8tw Poética (traducción de José Goya y Muniain)/Capítulo VI 0 50648 1653845 982880 2026-05-14T19:51:56Z Aleator 587 +step (evitar secc. inex.) 1653845 wikitext text/x-wiki {{ma}} <div class="prose"><pages index="El arte poética de Aristóteles (1798).pdf" from="109" to="113" step=2 onlysection="Capitulo6" header=1/></div> {{línea}} {{listaref}} cilqs0v8w6ytbo3jzvyw16ifegcnf0k MediaWiki:Common.css 8 57956 1653847 1649267 2026-05-14T20:17:43Z ABreault (WMF) 92177 For [[phab:T425553|T425553]] 1653847 css text/css /* Los estilos CSS definidos aquí aplicarán a todas las pieles (skins) */ /* oculta el título en la Portada */ .page-Portada .firstHeading { display:none !important; } /* Quality: Da color al nivel de qualitat (ver Ayuda:Qualitat de les paginas) */ .quality4 { background:#90ff90; } .quality3 { background:#ffe867; } .quality2 { background:#b0b0ff; } .quality1 { background:#ffa0a0; } .quality0 { background:#ddd; } /* Fix: páginas seguidas en poemas "poem" se separan con un espacio */ .poem p { margin: 0; } /* estilos trasladados desde commons, por considerarse generalistas */ .verse pre { background-color: #ffffff; font-family:sans-serif; line-height: 150%; border: 0; padding-left: 2em; margin: 0; white-space: pre; } .verse p { white-space: pre; } .prose { width: 35em; text-align:justify; margin:0 auto; } .prosa { width: 45em; text-align:justify; margin:0 auto; } /*</pre> ==Estilos del proyecto== Nuevo estilo para aplicar a los párrafos este dispone: *Alineación de texto justificada *Sangría en la primera linea *El primer carácter en mayúscula Su aplicación sería. '''class="Parrafo"''', también en la botonera de edición <pre> */ .Parrafo{ text-indent:5mm; margin-left:2em; margin:0.5em 1em 0.5em 2em; text-align:justify; } .Parrafo:first-letter { text-transform: uppercase; } .Banner{ background-color:#385490; color:#F0F8F8; } .mBanner{ background-color:#385490; color:#F0F8F8; text-align:center; font-size:140%; padding:0.5em; margin-bottom:0.5em; font-weight:bold; } /*</pre> ==Estilos para aplicar sobre plantillas== <pre> */ .Plantilla{ clear:both; margin: 5px 10px 5px 10px; padding: 5px; } .Edicion { background-color:#FCF0CD; border: solid #98750C; } .Aviso { border: solid red; background-color:#FFDFDF; } .SuperiorIcono { position:absolute; z-index:100; right:10px; top:10px; } .separador { text-align:center; } /* </pre> /* Textos con orientación vertical (línea de base a la izquierda y a la derecha, respectivamente) */ .vertical-text-l { writing-mode: tb-rl; -webkit-transform:rotate(90deg); -moz-transform:rotate(90deg); -o-transform: rotate(90deg); } .vertical-text-r { writing-mode: tb-rl; -webkit-transform:rotate(-90deg); -moz-transform:rotate(-90deg); -o-transform: rotate(-90deg); } .show-changes .v-es-act { background-color: #AAFFAA; } .references > li:target, .reference:target, .citation:target, cite:target, .anclaje:target{ background-color: #DEF; } /* Formato general */ .ns-0 .mw-parser-output, .ns-102 .mw-parser-output { position: relative; text-align: justify; } .ns-0 .mw-parser-output > p, .ns-0 .prp-pages-output > p, .ns-102 .mw-parser-output > p, .ns-102 .prp-pages-output > p { text-indent: 2em; } .ns-102 .mw-parser-output p:first-of-type { text-indent: 0; } /* T425553 */ .ns-0 .mw-parser-output > section > p, .ns-0 .prp-pages-output > section > p, .ns-102 .mw-parser-output > section > p, .ns-102 .prp-pages-output > section > p { text-indent:2em } .footertemplate { width: 100%; border-top: 1px solid #a0a0a0; border-bottom: 1px solid #a0a0a0; background-color: #f4f0e5; text-align: center; } /* Ubicación de los números de página transcluidas. */ #text-wrap { margin-left:3em; position:relative; } /* Referencias */ .reflist ol.references { list-style-type: inherit; /* Enable custom list style types */ } /* Errores de tipeo (plantilla Corr) de otro color */ body.ns-102 .tipeo { color:#1e761e; } /* Estilo común a abreviaturas de varias fuentes. !important porque es sobreescrito por algunas skins*/ .ws-abbr { text-decoration-color: #ccc !important; } /* Clases muy generales del Módulo:Centrar y plantillas relacionadas. Para evitar cargar una página CSS adicional en decenas de miles de páginas */ .ws-bloque-centro{ display: table; margin-right:auto; margin-left:auto; } .ws-bloque-derecha{ margin-right: 0; text-align:inherit; } .ws-bloque-izquierda{ margin-left:0; } .ws-sangria-colgante{ margin-left: 2em; text-indent: -2em; } .ws-sangria-colgante-m{ margin-left:2em; } .ws-flotador-d{ margin: 0 0 0 0; } .ws-flotador-i{ margin-top:0; margin-bottom:0; margin-right:0; } /* evitar generar <link>s en cada abreviatura, que generan problemas con la búsqueda en algunos navegadores */ .ws-abbr { text-decoration-color: #ccc; } /** * The following rules are for rotation testing only. * */ .rotp90, .rot90 { -moz-transform: rotate(90deg); -o-transform: rotate(90deg); -webkit-transform: rotate(90deg); -ms-transform: rotate(90deg); transform: rotate(90deg); } .rot180 { -moz-transform: rotate(180deg); -o-transform: rotate(180deg); -webkit-transform: rotate(180deg); -ms-transform: rotate(180deg); transform: rotate(180deg); } .rotn90, .rot270 { -moz-transform: rotate(-90deg); -o-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); -ms-transform: rotate(-90deg); transform: rotate(-90deg); } /* *Plantilla:Pt */ .pt-personaje { font-weight:bold; } /* estilos para tablas: a falta de una mejor manera para seleccionar columnas crea las clases col + n + izq, cen, o der para establecer la alineación de esas columnas */ .col1der td:nth-of-type(1), .col2der td:nth-of-type(2), .col3der td:nth-of-type(3), .col4der td:nth-of-type(4), .col5der td:nth-of-type(5), .col6der td:nth-of-type(6), .col7der td:nth-of-type(7), .col8der td:nth-of-type(8), .col9der td:nth-of-type(9), .col10der td:nth-of-type(10), .col11der td:nth-of-type(11), .col12der td:nth-of-type(12), .col13der td:nth-of-type(13), .col14der td:nth-of-type(14), .col15der td:nth-of-type(15), .col16der td:nth-of-type(16), .col17der td:nth-of-type(17), .col18der td:nth-of-type(18), .col19der td:nth-of-type(19), .col20der td:nth-of-type(20) {text-align:right} .col1izq td:nth-of-type(1), .col2izq td:nth-of-type(2), .col3izq td:nth-of-type(3), .col4izq td:nth-of-type(4), .col5izq td:nth-of-type(5), .col6izq td:nth-of-type(6), .col7izq td:nth-of-type(7), .col8izq td:nth-of-type(8), .col9izq td:nth-of-type(9), .col10izq td:nth-of-type(10), .col11izq td:nth-of-type(11), .col12izq td:nth-of-type(12), .col13izq td:nth-of-type(13), .col14izq td:nth-of-type(14), .col15izq td:nth-of-type(15), .col16izq td:nth-of-type(16), .col17izq td:nth-of-type(17), .col18izq td:nth-of-type(18), .col19izq td:nth-of-type(19), .col20izq td:nth-of-type(20) {text-align:left} .col1cen td:nth-of-type(1), .col2cen td:nth-of-type(2), .col3cen td:nth-of-type(3), .col4cen td:nth-of-type(4), .col5cen td:nth-of-type(5), .col6cen td:nth-of-type(6), .col7cen td:nth-of-type(7), .col8cen td:nth-of-type(8), .col9cen td:nth-of-type(9), .col10cen td:nth-of-type(10), .col11cen td:nth-of-type(11), .col12cen td:nth-of-type(12), .col13cen td:nth-of-type(13), .col14cen td:nth-of-type(14), .col15cen td:nth-of-type(15), .col16cen td:nth-of-type(16), .col17cen td:nth-of-type(17), .col18cen td:nth-of-type(18), .col19cen td:nth-of-type(19), .col20cen td:nth-of-type(20) {text-align:center} 4v4hadinp9vlxf35922yc3spsnmvwoj Plantilla:Ediciones/doc 10 112912 1653812 1560396 2026-05-14T14:25:35Z Ignacio Rodríguez 3603 sirve como ejemplo 1653812 wikitext text/x-wiki {{Subpágina documentación}} {{plantilla con Lua|Ediciones}} == Uso == Esta plantilla es para disambiguar ediciones o versiones de la misma obra. Use {{tl|desambiguación}} para desambiguar obras distintas con el mismo título. Los enlaces, el título y el autor se pueden tomar desde Wikidata, y también se pueden especificar. Los parámetros propios de esta plantilla son: <pre> {{Ediciones |preposición = (opcional, por defecto «de») |imagen1 = (opcional) |imagen2 = (opcional, o toma desde desc. wikidata) }} </pre> ;Ejemplo: <pre> {{Ediciones |preposición = del |titulo = Génesis |wikipedia = Génesis |commonscat = Genesis |wikcionario = Génesis |wikiquote = Génesis |más info = Primer libro de la Biblia, la Torá, el Tanaj y el [[Antiguo Testamento]]. (Siglo VI a. C.) |imagen1 = Gutenberg_Bible.jpg }}</pre> Se visualiza en [[Génesis]]: {{Ediciones |preposición = del |titulo = Génesis |wikipedia = Génesis |commonscat = Genesis |wikcionario = Génesis |wikiquote = Génesis |wikidata = Q9184 |más info = Primer libro de la Biblia, la Torá, el Tanaj y el [[Antiguo Testamento]]. (Siglo VI a. C.) |imagen1 = Gutenberg_Bible.jpg |imagen2 = Genesis_1_Dead_Sea_Scroll_(Cropped).jpg }} == Véase también == * [[Plantilla:Otras versiones]] <includeonly>[[Categoría:Wikisource:Plantillas de mantenimiento]]</includeonly> 1nc8mav8y2xt99re03mxcl6r9m2pght Plantilla:Encabezado oficial/doc 10 114134 1653859 555112 2026-05-14T22:13:29Z Aleator 587 -wikinews (RIP) 1653859 wikitext text/x-wiki {{Subpágina documentación}} <!-- POR FAVOR, AÑADE LAS CATEGORÍAS E INTERWIKIS AL FINAL DE ESTA PÁGINA. --> <!-- Si te dispones a documentar una plantilla de mantenimiento, por favor considera adoptar el formato de [[Wikipedia:Documentación de plantillas de mantenimiento]]--> == Uso == Coloque la plantilla en la parte superior de las páginas de mantenimiento Wikisource. El título del parámetro se utiliza para explicar lo que la página se compone de, y puede vincular al usuario de otras áreas "antes" y "después". <pre> {{Encabezado oficial |titulo = Nombre |anterior = |proyecto = |wikipedia = |commons = |commonscat = |wikiquote = |wikcionario = |wikilibros = |wikiversidad = |wikispecies = |meta = }} </pre> {{Encabezado oficial |titulo=Texto descatado }} <includeonly><!-- ++++ POR FAVOR, AÑADE LAS CATEGORÍAS E INTERWIKIS DEBAJO DE ESTA LÍNEA, DENTRO DE LAS ETIQUETAS INCLUDEONLY, GRACIAS. --> [[Categoría:Wikisource:Plantillas de mantenimiento]] </includeonly> 9ygi768ok18i5aafv30o0tsg11wapr4 Plantilla:Encabezado oficial 10 114135 1653858 1157568 2026-05-14T22:13:13Z Aleator 587 -wikinoticias (RIP) 1653858 wikitext text/x-wiki <includeonly> <div class="noprint" style="text-align:center; padding: 5px; background: {{{Fondo|#CEE0F2}}}; border: 1px solid {{{Borde|#A3B1BF}}}; margin: 0 auto;"><table width="100%" border="0"><tr><td width="18%"><div style="padding: 0px;">{{#if:{{{anterior|{{{left|}}}}}}|<span style="float: left; display: block;">←<small>{{{anterior|{{{left}}}}}}</small></span>}}</div></td><td width="64%"><span style="center; display: block;">'''Wikisource'''<br>{{#if:{{{titulo|}}}{{{título|}}}|{{{titulo|{{{título}}}}}}}}</span></td><td width="18%"><div style="padding: 0px;"></div></td></tr></table><div style="clear: both;"></div><div border="0" class="noprint" style="clear:center; background:#clear; padding:1px; text-align:center; float:center; font-size:80%;">{{#ifeq:{{{proyecto}}}|Votaciones|[[Categoría:Wikisource:Votaciones]]|{{#if:{{{proyecto|}}}|[[Archivo:People icon.svg|18px]] [[Proyecto:{{{proyecto}}}|{{{proyecto}}}]].&nbsp;&nbsp;&nbsp;|}}}}{{#if:{{{wikipedia|}}}{{{commons|}}}{{{commonscat|}}}{{{wikiquote|}}}{{{wikcionario|}}}{{{wikilibros|}}}{{{wikiversidad|}}}{{{wikispecies|}}}{{{meta|}}}|[[File:Wikimedia-logo.svg|12px]]&nbsp;{{#if:{{{wikipedia|}}}|[[w:{{{wikipedia}}}|artículo enciclopédico]]}}{{#if:{{{commons|}}}|{{#if:{{{wikipedia|}}}|,&#32;}}[[commons:{{{commons|}}}|galería multimedia]]}}{{#if:{{{commonscat|}}}|{{#if:{{{wikipedia|}}}{{{commons|}}}|,&#32;}}[[commons:Category:{{{commonscat}}}|categoría multimedia]]}}{{#if:{{{wikiquote|}}}|{{#if:{{{wikipedia|}}}{{{commons|}}}{{{commonscat|}}}|,&#32;}}[[q:{{{wikiquote}}}|citas]]}}{{#if:{{{wikcionario|}}}|{{#if:{{{wikipedia|}}}{{{commons|}}}{{{commonscat|}}}{{{wikiquote|}}}|,&#32;}}[[wikcionario:{{{wikcionario}}}|definición]]}}{{#if:{{{wikilibros|}}}|{{#if:{{{wikipedia|}}}{{{commons|}}}{{{commonscat|}}}{{{wikiquote|}}}{{{wikcionario|}}}|,&#32;}}[[wikilibros:{{{wikilibros}}}|libro]]}}{{#if:{{{wikiversidad|}}}|{{#if:{{{wikipedia|}}}{{{commons|}}}{{{commonscat|}}}{{{wikiquote|}}}{{{wikcionario|}}}{{{wikilibros|}}}|,&#32;}}[[wikiversidad:{{{wikiversidad}}}|clase]]}}{{#if:{{{wikispecies|}}}|{{#if:{{{wikipedia|}}}{{{commons|}}}{{{commonscat|}}}{{{wikiquote|}}}{{{wikcionario|}}}{{{wikilibros|}}}{{{wikiversidad|}}}|,&#32;}}[[wikispecies:{{{wikispecies}}}|taxonomía]]}}{{#if:{{{meta|}}}|{{#if:{{{wikipedia|}}}{{{commons|}}}{{{commonscat|}}}{{{wikiquote|}}}{{{wikcionario|}}}{{{wikilibros|}}}{{{wikiversidad|}}}{{{wikispecies|}}}|,&#32;}}[[meta:{{{meta}}}|meta]]}}.}}</div></div><br>{{#if:{{{imagen|}}}|[[Archivo:{{{imagen}}}|thumb|derecha|border|{{{caption|}}}]]}}</includeonly><noinclude>{{Documentación}}</noinclude> 2pktqz5dlwrqu8ealpxw4x7efabtmkg Módulo:String 828 215857 1653826 1543125 2026-05-14T15:36:19Z Ignacio Rodríguez 3603 calmar dioses de Lua 1653826 Scribunto text/plain --[[ Este módulo está destinado a proporcionar acceso a las funciones de cadena (string) básicas. ]] local str = {} --[[ len Parametros s: La cadena a encontrar su longitud ]] function str.len( frame ) local new_args = str._getParameters( frame.args, {'s'} ); local s = new_args['s'] or ''; return mw.ustring.len( s ) end --[[ sub Parametros s: La cadena donde extraer la subcadena i: La cadena donde extraer la subcadena. j: Índice final de la subcadena, por defecto la longitud total, hasta el último carácter. ]] function str.sub( frame ) local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } ); local s = new_args['s'] or ''; local i = tonumber( new_args['i'] ) or 1; local j = tonumber( new_args['j'] ) or -1; local len = mw.ustring.len( s ); -- Convertir negativos para la comprobación de rango if i < 0 then i = len + i + 1; end if j < 0 then j = len + j + 1; end if i > len or j > len or i < 1 or j < 1 then return str._error( 'Índice fuera del rango de la cadena' ); end if j < i then return str._error( 'Índices de la cadena no ordenados' ); end return mw.ustring.sub( s, i, j ) end --[[ match Parametros s: cadena donde se hace la búsqueda pattern: patrón o cadena a buscar. start: índice de la cadena dónde empezar a buscar, por defecto 1, el primer carácter. match: si se encuentran múltiples coincidencias, especifica cuál de ellas devolver. Por defecto es 1, l la primera coincidencia encontrada. Un número negativo cuenta desde el final, por lo tanto match = -1 es la última coincidencia. plain: indica si el patrón debe interpretarse como texto limpio, por defecto 'false'. nomatch: en caso de no encontrar ninguna coincidencia, devuelve el valor de "nomatch" en lugar de un error. Si el número match o el índice start están fuera del rango de la cadena, entonces la función genera un error. También genera un error si no encuentra ninguna coincidencia. Con el parámetro global ignore_errors = true se suprime el error y devuelve una cadena vacía. ]] function str.match( frame ) local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} ); local s = new_args['s'] or ''; local start = tonumber( new_args['start'] ) or 1; local plain_flag = str._getBoolean( new_args['plain'] or false ); local pattern = new_args['pattern'] or ''; local match_index = math.floor( tonumber(new_args['match']) or 1 ); local nomatch = new_args['nomatch']; if s == '' then return str._error( 'La cadena donde buscar está vacía' ); end if pattern == '' then return str._error( 'La cadena de búsqueda está vacía ' ); end if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then return str._error( 'Índice d\'inicio fuera del rango de la cadena ' ); end if match_index == 0 then return str._error( 'Número de coincidencias fuera de rango' ); end if plain_flag then pattern = str._escapePattern( pattern ); end local result if match_index == 1 then -- Encontrar la primera coincidencia es un caso sencillo. result = mw.ustring.match( s, pattern, start ) else if start > 1 then s = mw.ustring.sub( s, start ); end local iterator = mw.ustring.gmatch(s, pattern); if match_index > 0 then -- Búsqueda hacia adelante for w in iterator do match_index = match_index - 1; if match_index == 0 then result = w; break; end end else -- Invierte búsqueda local result_table = {}; local count = 1; for w in iterator do result_table[count] = w; count = count + 1; end result = result_table[ count + match_index ]; end end if result == nil then if nomatch == nil then return str._error( 'Ninguna coincidencia encontrada' ); else return nomatch; end else return result; end end --[[ pos Parámetros target: Cadena donde buscar. pos: Índice del carácter a devolver. ]] function str.pos( frame ) local new_args = str._getParameters( frame.args, {'target', 'pos'} ); local target_str = new_args['target'] or ''; local pos = tonumber( new_args['pos'] ) or 0; if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then return str._error( 'Índice fuera del rango de la cadena' ); end return mw.ustring.sub( target_str, pos, pos ); end --[[ find Parametros source: Cadena donde buscar. target: Cadena a buscar o patrón de búsqueda. start: Índice de la cadena fuente donde empezar a buscar, por defecto 1, el primer carácter. plain: Indica si la búsqueda debe interpretarse como texto limpio, de lo contrario como patrón Lua. Por defecto es 'true'. ]] function str.find( frame ) local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } ); local source_str = new_args['source'] or ''; local pattern = new_args['target'] or ''; local start_pos = tonumber(new_args['start']) or 1; local plain = new_args['plain'] or true; if source_str == '' or pattern == '' then return 0; end plain = str._getBoolean( plain ); local start = mw.ustring.find( source_str, pattern, start_pos, plain ) if start == nil then start = 0 end return start end --[[ replace Parámetros source: Cadena donde buscar pattern: Cadena de búsqueda o patrón a buscar replace: Texto de reemplazo count: Número de ocurrencias a reemplazar, por defecto todas. plain: Indica si la búsqueda debe interpretarse como texto limpio, de lo contrario como patrón Lua. Por defecto es 'true' ]] function str.replace( frame ) local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } ); local source_str = new_args['source'] or ''; local pattern = new_args['pattern'] or ''; local replace = new_args['replace'] or ''; local count = tonumber( new_args['count'] ); local plain = new_args['plain'] or true; if source_str == '' or pattern == '' then return source_str; end plain = str._getBoolean( plain ); if plain then pattern = str._escapePattern( pattern ); replace = mw.ustring.gsub( replace, "%%", "%%%%" ); --Sólo es necesario secuencias de escape. end local result; if count ~= nil then result = mw.ustring.gsub( source_str, pattern, replace, count ); else result = mw.ustring.gsub( source_str, pattern, replace ); end return result; end --[[ función para repetir caracteres. ]] function str.rep( frame ) local repetitions = tonumber( frame.args[2] ) if not repetitions then return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' ) end return string.rep( frame.args[1] or '', repetitions ) end function str.mayuscula(frame) -- Convierte en mayúsculas la primera letra que aparece en la edición de una cadena local s = frame.args[1] or '' if s ~= '' then local cambio local modo if string.find(s, '|') ~= nil then -- Enlaces con etiqueta modo = string.upper(string.match(s,'(|%a)')); cambio = string.gsub(s,'|%a', modo,1); elseif string.find(s, '[[]') ~= nil then -- Enlaces sin etiqueta modo = string.upper(string.match(s,'^(..%a)')); cambio = string.gsub(s,'^..%a', modo,1); elseif string.match(s,'^%a') ~= nil then -- Sin enlace modo = string.upper(string.match(s,'^(%a)')); cambio = string.gsub(s,'^%a', modo, 1); else cambio = s; end return cambio; end end --[[ Función de ayuda que rellena la lista de argumentos, para que el usuario pueda utilizar una combinación de parámetros con nombre y sin nombre. Esto es importante porque los parámetros con nombre no funcionan igual que los parámetros sin nombre cuando se encadenan recortes, y cuando se trata de cadenas a veces se debe conservar o quitar espacios en blanco dependiendo de la aplicación. ]] function str._getParameters( frame_args, arg_list ) local new_args = {}; local index = 1; local value; for i,arg in ipairs( arg_list ) do value = frame_args[arg] if value == nil then value = frame_args[index]; index = index + 1; end new_args[arg] = value; end return new_args; end --[[ Función de ayuda para controlar los mensajes de error. ]] function str._error( error_str ) local frame = mw.getCurrentFrame() local error_category = frame.args.error_category or 'Errores detectados por el módulo String' local ignore_errors = frame.args.ignore_errors or false local no_category = frame.args.no_category or false if str._getBoolean(ignore_errors) then return ''; end error_str = '<strong class="error">Error del módulo String: ' .. error_str .. '</strong>' if error_category ~= '' and not str._getBoolean( no_category ) then error_str = '[[Categoría:Wikisource:' .. error_category .. ']]' .. error_str end return error_str end --[[ Función de ayuda para interpretar cadenas booleanas. ]] function str._getBoolean( boolean_str ) local boolean_value if type( boolean_str ) == 'string' then boolean_str = boolean_str:lower() if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0' or boolean_str == '' then boolean_value = false else boolean_value = true end elseif type( boolean_str ) == 'boolean' then boolean_value = boolean_str else error( 'Ningún valor booleano encontrado' ) end return boolean_value end --[[ Función de ayuda que escapa a todos los caracteres de patrón para que puedan ser tratados como texto sin formato. ]] function str._escapePattern( pattern_str ) return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" ); end -- Selección del caracter de una página que sea válido para la categoría ES-x (generalmente el primero) function str.CaracterParaOrdenar(frame) local frase if type(frame) == 'string' then frase = frame else frase = frame.args[1] end local CaracterEspecial = { ['"'] = true, ["¿"] = true, ["?"] = true, ["!"] = true, [" "] = true, ["."] = true, ["¡"] = true, ["​"] = true, --bizarro error donde el primer caracter se toma como uno en blanco ["("] = true, ["«"] = true } local PrimerCaracter = mw.ustring.sub( frase , 1 , 1) while (CaracterEspecial[PrimerCaracter]) do --bizarro error donde el primer caracter se toma como uno en blanco frase = mw.ustring.sub( frase , 2 ) --Segundo caracter PrimerCaracter = mw.ustring.sub( frase , 1 , 1) end if (PrimerCaracter == "Á") then PrimerCaracter = 'A' elseif (PrimerCaracter == "É") then PrimerCaracter = 'E' elseif (PrimerCaracter == "Í") then PrimerCaracter = 'I' elseif (PrimerCaracter == "Ó") then PrimerCaracter = 'O' elseif (PrimerCaracter == "Ú") then PrimerCaracter = 'U' else end return PrimerCaracter end function str.delink(frame) local s if type(frame) == 'string' then s = frame else s = frame.args[1] end s = mw.text.trim(s) s = mw.uri.decode(s, "PATH") -- decode percent-encoded entities. Leave underscores and plus signs. s = mw.text.decode(s, true) -- decode HTML entities. -- Remove the colon if the link is using the [[Help:Colon trick]]. s = s:gsub("%[%[:", "[[") -- Find the display area of the wikilink if s:match("|") then -- Find if we're dealing with a piped link. s = s:gsub("%[%[.-%|(.+)%]%]", "%1") -- Remove new lines from the display of multiline piped links, -- where the pipe is before the first new line. s = s:gsub("\n", "") else s = s:gsub("%[%[(.-)%]%]", "%1") end -- remover entidades html s = s:gsub("<[%a%d%s%\"'/#;:=%-]+>", "") return s end return str m83crjgw2wsy63zit0pvigsvf8gztnn Plantilla:Loop 10 217225 1653822 812592 2026-05-14T15:27:08Z Ignacio Rodríguez 3603 sintaxis 1653822 wikitext text/x-wiki <includeonly>{{#invoke:String|rep|{{{2|}}}|{{{1|}}}}}</includeonly><noinclude>{{documentación}} </noinclude> 9tzg4qgyz6gcsgzpdulr45c4i2q3q6j Módulo:Wikidata 828 217257 1653818 1605625 2026-05-14T15:04:48Z Ignacio Rodríguez 3603 calmar dioses de Lua, funciones y variables no usadas. Falta muuuucha limpieza 1653818 Scribunto text/plain --[[********************************************************************************* * Nombre: Módulo:Wikidata * * Descripción: Este módulo devuelve el valor o valores con o sin formato * específico a una propiedad de Wikidata. * *********************************************************************************`-- ]] local p = {} local marco = mw.getCurrentFrame() local datequalifiers = {'P585', 'P571', 'P580', 'P582'} local primera = true --[[ ========================================================================= Mensajes de error ========================================================================= `-- ]] local avisos = { ["errores"] = { ["property-param-not-provided"] = "Parámetro de la propiedad no proporcionado.", ["entity-not-found"] = "Entrada no encontrada.", ["unknown-claim-type"] = "Tipo de notificación desconocida.", ["unknown-snak-type"] = "Tipo de dato desconocido.", ["unknown-datavalue-type"] = "Formato de dato desconocido.", ["unknown-entity-type"] = "Tipo de entrada desconocido.", ["unknown-value-module"] = "Debe ajustar ambos parámetros de valor y el valor del módulo de funciones.", ["value-module-not-found"] = "No se ha encontrado el módulo apuntado por valor-módulo.", ["value-function-not-found"] = "No se ha encontrado la función apuntada por valor-función.", ["qualifier-not-found"] = "Qualifier not found.", ["other entity"] = "Enlaces a elementos diferentes desactivado." }, ["somevalue"] = "''valor desconocido''", ["novalue"] = "" } --[[ ========================================================================= Función auxiliar para dar formato a los mensajes de error ========================================================================= `-- ]] local function formatoError( clave ) return '<span class="error">' .. avisos.errores[clave] .. '</span>' end -- Módulos en los que están definidos los tipos de datos más habituales si son -- diferentes de Wikidata/Formatos -- local modulosTipos = { ['altura'] = 'Módulo:Wikidata/Formato magnitud', ['área'] = 'Módulo:Wikidata/Formato magnitud', ['educado en'] = 'Módulo:Wikidata/Formatos educación', ['imagen'] = 'Módulo:Wikidata/Formato imagen', ['lugar'] = 'Módulo:Wikidata/Formato lugar', ['formatoLugar']= 'Módulo:Wikidata/Formato lugar', ['magnitud'] = 'Módulo:Wikidata/Formato magnitud', ['movimiento'] = 'Módulo:Wikidata/Formato movimiento', ['periodicidad']= 'Módulo:Wikidata/Formato magnitud', ['premio'] = 'Módulo:Wikidata/Formato premio', } --[[ ========================================================================= Función para identificar el ítem correspondiente a la página o otro dado. Esto último aún no funciona. ========================================================================= `-- ]] local function SelecionEntidadPorId( id ) if id and id ~= '' then return mw.wikibase.getEntityObject( id ) else return mw.wikibase.getEntityObject() end end --[[ ========================================================================= Función que identifica si el valor devuelto es un ítem o una propiedad y en función de eso añade el prefijo correspondiente ========================================================================= `-- ]] local function SelecionEntidadPorValor( valor ) if valor['entity-type'] == 'item' then -- Prefijo de ítem return 'q' .. valor['numeric-id'] elseif valor['entity-type'] == 'property' then -- Prefijo de propiedad return 'p' .. valor['numeric-id'] else return formatoError( 'unknown-entity-type' ) end end local function obtenerFuncion(funcion, nombreModulo) if not funcion then return elseif type(funcion) == 'function' then -- Uso desde LUA return funcion elseif funcion == '' or not nombreModulo or nombreModulo == '' then return else -- Uso desde una plantilla local modulo if not nombreModulo or nombreModulo == '' or nombreModulo == 'Wikidata/Formatos' then modulo = require(modulosTipos[funcion] or 'Módulo:Wikidata/Formatos') else modulo = require ('Módulo:' .. nombreModulo) end if not modulo then return nil, formatoError( 'value-module-not-found' ) elseif not modulo[funcion] then return nil, formatoError( 'value-function-not-found' ) else return modulo[funcion] end end end local function formatoValorDato( valorDato, opciones, calificativos) local funcion, mensajeError = obtenerFuncion(opciones['valor-función'] or opciones['value-function'] or opciones['funcion'], opciones['valor-módulo'] or opciones['modulo']) if mensajeError then return mensajeError elseif funcion then local opcionesEntidad = {} for k, v in pairs(opciones) do opcionesEntidad[k] = v end if mw.ustring.find(opciones['formatoTexto'],'mayúscula' ) and (primera or (opciones['separador'] and opciones['separador'] ~= 'null') or (opciones['lista'] and opciones['lista'] ~= '')) then opcionesEntidad['mayúscula'] = 'sí' primera = false end if mw.ustring.find(opciones['formatoTexto'],'cursivas') then opcionesEntidad['cursivas'] = 'sí' end return funcion(valorDato.value, opcionesEntidad, marco, calificativos) end -- == Formatos por defecto en función del tipo de valor == -- * Para tipo coordenadas cuando se da como valor de propiedad: latitud, longitud o precisión if opciones.propiedad == 'latitud' then return valorDato.value['latitude'] elseif opciones.propiedad == 'longitud' then return valorDato.value['longitude'] elseif opciones.propiedad == 'precisión' then return valorDato.value['precision'] -- * Con el resto de valores en propiedad elseif valorDato.type == 'wikibase-entityid' then -- Tipo: Número de entidad que puede ser un ítem o propiedad local opcionesEntidad = {} if mw.ustring.find(opciones['formatoTexto'],'mayúscula') and (primera or (opciones['separador'] and opciones['separador'] ~= 'null') or (opciones['lista'] and opciones['lista'] ~= '')) then opcionesEntidad['mayúscula'] = 'sí' primera = false end opcionesEntidad.enlace = opciones.enlace opcionesEntidad.etiqueta = opciones.etiqueta opcionesEntidad['debeExistir'] = opciones['debeExistir'] if mw.ustring.find(opciones['formatoTexto'],'cursivas') then opcionesEntidad.cursivas = 'sí' end return p.formatoIdEntidad( SelecionEntidadPorValor( valorDato.value ), opcionesEntidad) elseif valorDato.type == 'string' then -- Tipo: Cadena de texto (string) return valorDato.value elseif valorDato.type == 'url' then --Tipo URL (dirección web) return valorDato.url elseif valorDato.type == 'time' then -- Tipo: Fecha/hora local opcionesFecha={['formatoFecha']=opciones['formatoFecha'],enlace=opciones.enlace} if mw.ustring.find(opciones['formatoTexto'] or '','mayúscula') and primera then opcionesFecha['mayúscula']='sí' end return require('Módulo:Wikidata/Fecha').FormateaFechaHora(valorDato.value, opcionesFecha, calificativos) elseif valorDato.type == 'monolingualtext' then -- Tipo: monoligüe if valorDato.value then if opciones.idioma then for k, v in pairs(valorDato) do if v.language == opciones.idioma then return v.text end end else return valorDato.value.text end else return '' end elseif valorDato.type == 'quantity' then -- Tipo: Cantidad return require('Módulo:Wikidata/Formatos').formatoUnidad(valorDato, opciones) elseif valorDato.value['latitude'] and valorDato.value['longitude'] then -- Tipo: Coordenadas local globo = require('Módulo:Wikidata/Globos')[valorDato.value.globe] --Concatenamos los valores de latitud y longitud dentro de la plantilla Coord if globo ~= 'earth' then return marco:preprocess('{{coord|' .. valorDato.value['latitude'] .. '|' .. valorDato.value['longitude'] .. '|globe:' .. globo .. '_type:' .. opciones.tipo .. '|display=' .. opciones.display ..'|formato=' .. opciones.formato..'}}') else return marco:preprocess('{{coord|' .. valorDato.value['latitude'] .. '|' .. valorDato.value['longitude'] .. '|type:' .. opciones.tipo .. '|display=' .. opciones.display ..'|formato=' .. opciones.formato..'}}') end else return formatoError( 'unknown-datavalue-type' ) -- Si no es de ninguno de estos tipos devolverá error valor desconocido end end --[[ ========================================================================= Función para determinar el rango ========================================================================= `-- ]] local function getRango(tablaDeclaraciones) local rank = 'deprecated' for indice, declaracion in pairs(tablaDeclaraciones) do if declaracion.rank == 'preferred' then return 'preferred' elseif declaracion.rank == 'normal' then rank = 'normal' end end return rank end --[[ ========================================================================= Función para determinar la declaracion o declaraciones de mayor rango ========================================================================= `-- ]] local function filtrarDeclaracionPorRango(tablaDeclaraciones) local rango = getRango(tablaDeclaraciones) local tablaAuxiliar = tablaDeclaraciones tablaDeclaraciones = {} for indice, declaracion in pairs(tablaAuxiliar) do if declaracion.rank == rango then table.insert(tablaDeclaraciones, declaracion) end end return tablaDeclaraciones end --[[ ========================================================================= Función para seleccionar el tipo de declaración: Referencia, valor principal o calificador ========================================================================= `-- ]] local function seleccionDeclaracion(declaracion, opciones) local propiedadFuente = {} local calificador = opciones.formatoCalificador ~= '()' and opciones.calificador if calificador ~= '' and calificador and declaracion['qualifiers'] then if declaracion['qualifiers'][mw.ustring.upper(calificador)] then return declaracion.qualifiers[mw.ustring.upper(calificador)][1] -- devuelve el calificador (solo devolverá el primer valor) else return "" --Para que no lance excepción si no existe el calificador end elseif opciones.dato == 'fuente' and declaracion['references'] then local fuente = declaracion.references[1]['snaks'] for k,v in pairs(fuente) do propiedadFuente = k end return declaracion.references[1]['snaks'][propiedadFuente][1] -- devuelve la fuente (queda que se itinere la tabla) elseif (calificador == '' or not calificador) and (opciones.dato ~= 'fuente') then return declaracion.mainsnak -- devuelve el valor principal else return '' end end --[[ ========================================================================= Función para recopilar las declaraciones ========================================================================= `-- ]] function p.getDeclaraciones(entityId) -- == Comprobamos que existe un ítem enlazado a la página en Wikidata == if not pcall (SelecionEntidadPorId, entityId ) then return false end local entidad = SelecionEntidadPorId(entityId) if not entidad then return '' -- Si la página no está enlazada a un ítem no devuelve nada end -- == Comprobamos que el ítem tiene declaraciones (claims) == if not entidad.claims then return '' -- Si el ítem no tiene declaraciones no devuelve nada end -- == Declaración de formato y concatenado limpio == return entidad.claims end --[[ ========================================================================= Función para crear la cadena que devolverá la declaración ========================================================================= `-- ]] local function valinQualif(claim, qualifs) local claimqualifs = claim.qualifiers local vals, vals1, datavalue, value if not claimqualifs then return nil end for i, qualif in pairs(qualifs) do vals = claimqualifs[qualif] if vals then vals1 = vals[1] if vals1 then datavalue=vals1.datavalue if datavalue then value = datavalue.value if value then return value.time end end end end end end function p.getPropiedad(opciones, declaracion) local propiedad local tablaOrdenada if opciones.propiedad == 'precisión' or opciones.propiedad == 'latitud' or opciones.propiedad == 'longitud' then propiedad = 'P625' -- Si damos el valor latitud, longitud o precisión equivaldrá a dar p625 else propiedad = opciones.propiedad -- En el resto de casos se lee lo dado end if not propiedad then -- Comprobamos si existe la propiedad dada y en caso contrario se devuelve un error return formatoError( 'property-param-not-provided' ) end if declaracion then tablaOrdenada = declaracion elseif not p.getDeclaraciones(opciones.entityId) then return formatoError( 'other entity' ) elseif p.getDeclaraciones(opciones.entityId)[mw.ustring.upper(propiedad)] then tablaOrdenada = p.getDeclaraciones(opciones.entityId)[mw.ustring.upper(propiedad)] else return '' end -- Evitar que pete cuando se haga el find en opciones['formatoTexto'] si vale nil if not opciones['formatoTexto'] then opciones['formatoTexto'] = '' end --Dejar en su caso los valores de mayor rango if (opciones.rangoMayor == 'sí') then tablaOrdenada = filtrarDeclaracionPorRango(tablaOrdenada) end --Ordenar en su caso por fecha. Ver la función chronosort de :fr:Module:Wikidata/Récup if opciones.ordenar == 'por fecha' then require('Módulo:Tablas').ordenar(tablaOrdenada, function(elemento1,elemento2) local fecha1 = valinQualif(elemento1, datequalifiers) or '' -- elemento1.qualifiers.P580[1].datavalue.value.time or '' local fecha2 = valinQualif(elemento2, datequalifiers) or '' -- elemento2.qualifiers.P580[1].datavalue.value.time or '' return fecha1 < fecha2 end ) end if not tablaOrdenada[1] then return end -- == Si solo se desea que devuelva un valor == -- Pendiente eliminar el parámetro y sustituirlo por un nuevo valor del parámetro lista=no que haría lo mismo que opciones.uno = sí if opciones.uno == 'sí' then -- Para que devuelva el valor de índice 1 tablaOrdenada = {tablaOrdenada[1]} elseif opciones.uno == 'último' then -- Para que devuelva la última entrada de la tabla tablaOrdenada = {tablaOrdenada[#tablaOrdenada]} end -- == Creamos una tabla con los valores que devolverá == local formatoDeclaraciones = {} local hayDeclaraciones for i, dec in pairs(tablaOrdenada) do local declaracionFormateada = p.formatoDeclaracion(dec, opciones) if declaracionFormateada and declaracionFormateada ~= '' then table.insert(formatoDeclaraciones, declaracionFormateada) hayDeclaraciones = true end end primera = true if not hayDeclaraciones then return end -- Aplicar el formato a la lista de valores según el tipo de lista de las -- opciones local listaDeclaraciones = mw.text.listToText( formatoDeclaraciones, '</li><li>', '</li><li>' ) -- Añadir en su caso un lápiz if opciones.linkback == 'sí' then listaDeclaraciones = p.addLinkback( listaDeclaraciones, opciones.entityId, opciones.propiedad ) end if opciones['lista'] == 'no ordenada' then return '<ul><li>' .. listaDeclaraciones .. '</li></ul>' elseif opciones['lista'] == 'ordenada' then return '<ol><li>' .. listaDeclaraciones .. '</li></ol>' elseif opciones['lista'] == 'nobullet' then return '<ul style="list-style-type:none;list-style-image:none;margin-left:0;"><li>' .. listaDeclaraciones .. '</li></ul>' else -- valores separados por coma o por el separador y la -- conjunción de las opciones local separador, conjuncion if opciones['conjunción'] == 'null' then conjuncion = nil else conjuncion = opciones['conjunción'] end if opciones['separador'] == 'null' then separador = nil else separador = opciones['separador'] end if #formatoDeclaraciones > 1 then if not conjuncion then conjuncion = 'y' end if marco and conjuncion == 'y' then conjuncion = ' ' .. string.sub(marco:preprocess('{{y-e|{{Desvincular|' .. formatoDeclaraciones[#formatoDeclaraciones] .. '}}}}'), 1, 1) .. ' ' elseif conjuncion == 'y' or conjuncion == 'o' then conjuncion = ' ' .. conjuncion .. ' ' end end -- Añadir en su caso un lápiz if opciones.linkback == 'sí' then return p.addLinkback(mw.text.listToText( formatoDeclaraciones, separador,conjuncion ), opciones.entityId, opciones.propiedad) else return mw.text.listToText( formatoDeclaraciones, separador, conjuncion ) end end end -- devuelve el ID de la página en Wikidata (Q...), o nada si la página no está conectada a Wikidata function p.pageId() local entity = mw.wikibase.getEntityObject() if not entity then return nil else return entity.id end end --[[ ========================================================================= Función que comprueba si la página está enlazada a Wikidata en caso de estarlo pasa el valor como a argumento a la función formatSnak() ========================================================================= `-- ]] function p.formatoDeclaracion( declaracion, opciones) if not declaracion.type or declaracion.type ~= 'statement' then -- Se comprueba que tiene valor de tipo y que este sea statement (declaración) lo cual pasa siempre que existe la propiedad return formatoError( 'unknown-claim-type' ) -- Si no se cumple devuelve error end -- En el caso de que haya calificador se devuelve a la derecha del valor de la -- declaración entre paréntesis. local calificativo = opciones.calificativo or opciones.calificador if calificativo and declaracion.qualifiers then -- De momento los calificativos, normalmente años, no se enlazan local opcionesCalificativo = {['formatoTexto']='', enlace='no', ['formatoFecha']='año'} -- Pendiente local wValorCalificativo local wValorCalificativoFormateado local funcionCalificativo, mensajeError = obtenerFuncion(calificativo, opciones['módulo calificativo']) if mensajeError then return mensajeError elseif funcionCalificativo then -- Utilizar la función recibida sobre todos los calificativos wValorCalificativo = declaracion.qualifiers wValorCalificativoFormateado = funcionCalificativo(wValorCalificativo, opcionesCalificativo) elseif opciones.formatoCalificador and opciones.formatoCalificador == '()' then wValorCalificativo = declaracion.qualifiers[mw.ustring.upper(calificativo)] if wValorCalificativo and wValorCalificativo[1] then wValorCalificativoFormateado = p.formatoDato(wValorCalificativo[1], opcionesCalificativo) end elseif opciones.formatoCalificador and #mw.text.split(opciones.formatoCalificador, '%.') == 2 then local moduloFormatoCalificador = mw.text.split(opciones.formatoCalificador, '%.') local formateado = require ('Módulo:' .. moduloFormatoCalificador[1]) if not formateado then return formatoError( 'value-module-not-found' ) end local fun = formateado[moduloFormatoCalificador[2]] if not fun then return formatoError( 'value-function-not-found' ) end if mw.ustring.find(opciones['formatoTexto'],'mayúscula') and (primera or (opciones['separador'] and opciones['separador'] ~= 'null') or (opciones['lista'] and opciones['lista'] ~= '')) then opciones['mayúscula'] = 'sí' primera = false end if mw.ustring.find(opciones['formatoTexto'],'cursivas') then opciones['cursivas'] = 'sí' end wValorCalificativoFormateado = fun( declaracion.qualifiers, opciones, marco) --return require('Módulo:Tablas').tostring(declaracion) else -- Utilizar el primer valor del calificativo de la propiedad recibida wValorCalificativo = declaracion.qualifiers[mw.ustring.upper(calificativo)] if wValorCalificativo and wValorCalificativo[1] then wValorCalificativoFormateado = p.formatoDato(wValorCalificativo[1], opcionesCalificativo) end end -- no usado? -- if opciones.separadorcalificador then separador = opciones.separadorcalificador else separador = ' ' end if wValorCalificativoFormateado then local datoFormateado = p.formatoDato(declaracion.mainsnak, opciones) return (datoFormateado and datoFormateado .. '&nbsp;<small>(' .. wValorCalificativoFormateado .. ')</small>') or nil end end -- Si no hay calificativo. return p.formatoDato(seleccionDeclaracion(declaracion, opciones), opciones, declaracion.qualifiers) end --[[ ========================================================================= Función que comprueba el tipo de dato (snaktype) si es value pasa el valor como argumento a la función formatoValorDato() ========================================================================= `-- ]] function p.formatoDato( dato, opciones, calificativos) if not dato or dato == '' then return '' end if dato.snaktype == 'somevalue' then -- Fecha más temprana if calificativos then if calificativos['P1319'] and calificativos['P1319'][1] and calificativos['P1319'][1].datavalue and calificativos['P1319'][1].datavalue.type=='time' then local opcionesFecha={['formatoFecha']=opciones['formatoFecha'],enlace=opciones.enlace} return 'post. ' .. require('Módulo:Wikidata/Fecha').FormateaFechaHora(calificativos['P1319'][1].datavalue.value, opcionesFecha) end end -- Si no tiene un calificativo válido return avisos['somevalue'] -- Valor desconocido elseif dato.snaktype == 'novalue' then return avisos['novalue'] -- Sin valor elseif dato.snaktype == 'value' then return formatoValorDato( dato.datavalue, opciones, calificativos) -- Si tiene el tipo de dato se pasa el valor a la función formatDatavalue() else return formatoError( 'unknown-snak-type' ) -- Tipo de dato desconocido end end --[[ ========================================================================= Función que establece el tipo de formato en función del tipo de valor (valorDato.type) y en caso de solicitarse un formato complemetario asocia el módulo donde se establece el formato y la función de este que lo establece ========================================================================= `-- ]] --[[ ========================================================================= Damos formato a los enlaces internos ========================================================================= `-- ]] -- Opciones: -- - enlace: Valores posibles 'sí' o 'no' -- - mayúscula: Valores posibles 'sí' o 'no' -- - cursivas: Valores posibles 'sí' o 'no' function p.formatoIdEntidad(idEntidad, opciones) local enlace = mw.wikibase.sitelink(idEntidad) local etiqueta = mw.wikibase.label(idEntidad) return require('Módulo:Wikidata/Formatos').enlazar(enlace, etiqueta, idEntidad, opciones) end --[[ ========================================================================= Función principal ========================================================================= `-- ]] function p.Wikidata( frame ) local args = frame.args if args.valor == 'no' then return end local parentArgs = frame:getParent().args -- Copiar los argumentos local argumentos = {} for k, v in pairs(args) do argumentos[k] = v end for k, v in pairs(parentArgs) do if not argumentos[k] then argumentos[k] = v end end --if true then return require('Módulo:Tablas').tostring(argumentos) end -- No generar el valor de Wikidata si se ha facilitado un valor local y -- el valor local es prioritario. local valorWikidata; if (args.prioridad ~= 'sí' or (args.importar and args.importar == 'no')) and args.valor and args.valor ~= '' then valorWikidata = ''; else valorWikidata = p.getPropiedad(argumentos, nil); end local categorias = ''; local namespace = frame:preprocess('{{NAMESPACENUMBER}}'); if (namespace == '0' and (not args.categorias or args.categorias ~= 'no') and args.propiedad and string.upper(args.propiedad) ~= 'P18' -- P18: imagen de Commons and string.upper(args.propiedad) ~= 'P41' -- P41: imagen de la bandera and string.upper(args.propiedad) ~= 'P94' -- P94: imagen del escudo de armas and string.upper(args.propiedad) ~= 'P109' -- P109: firma de persona and string.upper(args.propiedad) ~= 'P154') then -- P154: logotipo if valorWikidata ~= '' and args.valor and args.valor ~= '' then categorias = '[[Categoría:Wikipedia:Artículos con datos locales]]' elseif valorWikidata and valorWikidata == '' and args.valor and args.valor ~= '' and (not args.calificador or args.calificador == '') and (not args.dato or args.dato == '' or args.dato ~= 'fuente')then categorias = '[[Categoría:Wikipedia:Artículos con datos por trasladar a Wikidata]]' end end if args.prioridad == 'sí' and valorWikidata ~= '' then -- Si se da el valor sí a prioridad tendrá preferencia el valor de Wikidata if args.importar and args.importar == 'no' and args.valor and args.valor ~= '' then return args.valor .. categorias elseif valorWikidata then return valorWikidata .. categorias -- valor que sustituye al valor de Wikidata parámetro 2 else return categorias end elseif args.valor and args.valor ~= '' then return args.valor .. categorias elseif args.importar and args.importar == 'no' then return '' elseif valorWikidata then -- Si el valor es nil salta una excepcion al concatenar return valorWikidata .. categorias else return '' end end function p.addLinkback(valorPropiedad, idEntidad, idPropiedad) local lidEntidad if valorPropiedad and idPropiedad then lidEntidad= (idEntidad ~='' and idEntidad) or mw.wikibase.getEntityIdForCurrentPage() end if lidEntidad then return valorPropiedad .. '<span class=\"wikidata-link noprint\"> [[Archivo:Blue_pencil.svg|Ver y modificar los datos en Wikidata|10px|baseline|alt=Ver y modificar los datos en Wikidata|enlace=https://www.wikidata.org/wiki/' .. lidEntidad .. '?uselang=es#' .. idPropiedad .. ']]</span>' else return valorPropiedad end end -------------------------------------------------------------------- -- A continuación, función p.claim y funciones locales necesarias -- -- Adaptado de https://ca.wikisource.org/wiki/Module:Wikidata -- -------------------------------------------------------------------- local wiki = { langcode = mw.language.getContentLanguage().code } -- Table of language codes: requested or default and its fallbacks local function findLang(langcode) if mw.language.isKnownLanguageTag(langcode or '') == false then local cframe = mw.getCurrentFrame() local pframe = cframe:getParent() langcode = pframe and pframe.args.lang if mw.language.isKnownLanguageTag(langcode or '') == false then if not mw.title.getCurrentTitle().isContentPage then langcode = cframe:preprocess('{{int:lang}}') end if mw.language.isKnownLanguageTag(langcode or '') == false then langcode = wiki.langcode end end end local languages = mw.language.getFallbacksFor(langcode) table.insert(languages, 1, langcode) if langcode == wiki.langcode then for _, l in ipairs({}) do table.insert(languages, l) end end return languages end -- Argument is 'set' when it exists (not nil) or when it is not an empty string. local function isSet(var) return not (var == nil or (type(var) == 'string' and mw.text.trim(var) == '')) end -- get safely a serialized snak local function getSnak(statement, snaks) local ret = statement for i, v in ipairs(snaks) do if not ret then return end ret = ret[v] end return ret end -- mw.wikibase.getLabelWithLang or getLabelByLang with a table of languages local function getLabelByLangs(id, languages) local label local lang for _, l in ipairs(languages) do if l == wiki.langcode then -- using getLabelWithLang when possible instead of getLabelByLang label, l = mw.wikibase.getLabelWithLang(id) else label = mw.wikibase.getLabelByLang(id, l) end if label then lang = l break end end return label, lang end -- format data value wikibase-entityid: types wikibase-item, wikibase-property local function printDatatypeEntity(data, parameters) local entity_id = data['id'] if parameters.formatting == 'raw' then return entity_id, entity_id end local label, _ = getLabelByLangs(entity_id, parameters.lang) local sitelink = mw.wikibase.getSitelink(entity_id) local labelcase = label or sitelink if parameters.citado and parameters.citado ~= '' then labelcase = parameters.citado end local entity_page = 'Special:EntityPage/' .. entity_id local ret1 if parameters.formatting == 'label' then ret1 = labelcase or entity_id else if sitelink then ret1 = '[[' .. sitelink .. '|' .. labelcase .. ']]' elseif label and string.match(parameters.formatting or '', 'internallink$') and not mw.wikibase.getEntityIdForTitle(label) then ret1 = '[[' .. label .. '|' .. labelcase .. ']]' else --si no existe la pág. en WS, crea enlace a WD ret1 = '[[d:' .. entity_page .. '|<span style="color:#5f9cbb;">' .. (labelcase or entity_id) .. '</span>]]' end end return ret1 end local function getSnakValue(snak, parameters) if snak.snaktype == 'value' then -- see Special:ListDatatypes if snak.datatype == 'wikibase-item' or snak.datatype == 'wikibase-property' then return printDatatypeEntity(snak.datavalue.value, parameters) end elseif snak.snaktype == 'somevalue' then if parameters.referenced and parameters.referenced ~= '' then return parameters.referenced end if parameters.citado and parameters.citado ~= '' then return parameters.citado end end return mw.wikibase.renderSnak(snak) end local function orderedpairs(array, order) if not order then return pairs(array) end -- return iterator function local i = 0 return function() i = i + 1 if order[i] then return order[i], array[order[i]] end end end local function getCitadoValue(claim) local result = "" if claim.qualifiers then if claim.qualifiers['P1932'] then local wqualif = claim.qualifiers['P1932'][1].datavalue.value if wqualif and wqualif ~= '' then return wqualif end end end return result end local function getReferencedValue(claim, parameters, reftypes) local result = "" -- traverse through all references for ref in pairs(claim.references or {}) do local refparts -- traverse through all parts of the current reference for snakkey, snakval in orderedpairs(claim.references[ref].snaks or {}, claim.references[ref]["snaks-order"]) do for i, reftype in ipairs(reftypes) do if snakkey == reftype then if refparts then refparts = refparts .. ", " else refparts = "" end for snakidx = 1, #snakval do if snakidx > 1 then refparts = refparts .. ", " end refparts = refparts .. getSnakValue(snakval[snakidx], parameters) end end end end if refparts then result = result .. refparts end end return result end local function getQualifierSnak(claim, qualifierId, parameters) -- a "snak" is Wikidata terminology for a typed key/value pair -- a claim consists of a main snak holding the main information of this claim, -- as well as a list of attribute snaks and a list of references snaks if qualifierId then -- search the attribute snak with the given qualifier as key if claim.qualifiers then local qualifier = claim.qualifiers[qualifierId] if qualifier then if qualifier[1].datatype == "monolingualtext" then -- iterate over monolingualtext qualifiers to get local language for idx in pairs(qualifier) do if getSnak(qualifier[idx], {"datavalue", "value", "language"}) == parameters.lang[1] then return qualifier[idx] end end elseif parameters.list then return qualifier else return qualifier[1] end end end return nil, formatoError("qualifier-not-found") else return claim.mainsnak end end local function getValueOfClaim(claim, qualifierId, parameters) local snak, error = getQualifierSnak(claim, qualifierId, parameters) local reftypes = {'P5997'} -- propiedades "tipo referencia" que pueden denotar un valor oculto parameters.referenced = getReferencedValue(claim, parameters, reftypes) parameters.citado = getCitadoValue(claim) if not snak then return nil, nil, error elseif snak[1] then -- a multi qualifier local result = {} for idx in pairs(snak) do result[#result + 1] = getSnakValue(snak[idx], parameters) end return mw.text.listToText(result), nil else -- a property or a qualifier (lo habitual) return getSnakValue(snak, parameters) end end local function getEntityId(args, pargs, unnamed) pargs = pargs or {} local id = args.item or args.from or (unnamed and mw.text.trim(args[1] or '') or nil) if not isSet(id) then id = pargs.item or pargs.from or (unnamed and mw.text.trim(pargs[1] or '') or nil) end if not isSet(id) then id = mw.wikibase.getEntityIdForCurrentPage() end return id end local function getArg(value, default, aliases) if type(value) == 'boolean' then return value elseif value == "false" or value == "no" then return false elseif value == "true" or value == "yes" then return true elseif value and aliases and aliases[value] then return aliases[value] elseif isSet(value) then return value elseif default then return default else return nil end end -- Main function claim --------------------------------------------- -- on debug console use: =p.claim{item="Q...", property="P...", ...} function p.claim(frame) local args = frame.args or frame -- via invoke or require local pargs = frame.args and frame:getParent().args or {} -- arguments local parameters = {} parameters.id = getEntityId(args, pargs) if parameters.id == nil then return end parameters.property = string.upper(args.property or "") local qualifierId = {} qualifierId[1] = getArg(string.upper(args.qualifier or "")) local i = 2 while isSet(args["qualifier" .. i]) do qualifierId[i] = string.upper(args["qualifier" .. i]) i = i + 1 end parameters.formatting = getArg(args.formatting) parameters.list = getArg(args.list, true, {firstrank='bestrank'}) parameters.tabla = getArg(args.tabla) local default = args.default parameters.lang = findLang(args.lang) -- fetch property local claims = mw.wikibase.getBestStatements(parameters.id, parameters.property) if #claims == 0 then return default end -- defaults for table local preformat, postformat = "", "" -- get initial sort indices local sortindices = {} for idx in pairs(claims) do sortindices[#sortindices + 1] = idx end local result if parameters.tabla then local value result = {} local values = {} for idx in pairs(claims) do local claim = claims[sortindices[idx]] value = getValueOfClaim(claim, qualifierId[1], parameters) values[#values + 1] = {} if value then values[#values]["col0"] = value result[#values] = value end end elseif parameters.list then parameters.separator = mw.message.new('Comma-separator'):inLanguage(parameters.lang[1]):plain() parameters.conjunction = (mw.message.new('And'):inLanguage(parameters.lang[1]):plain() .. mw.message.new('Word-separator'):inLanguage(parameters.lang[1]):plain()) -- iterate over all elements and return their value (if existing) local value result = {} local values = {} for idx in pairs(claims) do local claim = claims[sortindices[idx]] value = getValueOfClaim(claim, qualifierId[1], parameters) values[#values + 1] = {} if value then values[#values]["col0"] = value result[#values] = value end end result = preformat .. mw.text.listToText(result, parameters.separator, parameters.conjunction) .. postformat else -- return first element local claim = claims[sortindices[1]] result = getValueOfClaim(claim, qualifierId[1], parameters) end if not isSet(result) then result = default end return result or '' end -------------------------------------------------------------------------------- -- Get an Item based on what's passed in the 'wikidata' or 'page' parameters of -- the args, or the current page's ID otherwise. local function getItem( args ) local id = nil -- If args is a table with an appropriate element, use it. if type( args ) == 'table' then if args.wikidata ~= '' and args.wikidata ~= nil then id = args.wikidata elseif args.wikidata_id ~= '' and args.wikidata_id ~= nil then id = args.wikidata_id elseif args.page ~= '' and args.page ~= nil then local title = mw.title.new( args.page ) id = mw.wikibase.getEntityIdForTitle( title.nsText .. title.text ) -- If no entity for this page, maybe it's a subpage and we should look for the root page's entity. if id == nil then id = mw.wikibase.getEntityIdForTitle( title.nsText .. title.rootText ) end end end if type( args ) == 'string' and args ~= '' then id = args end return mw.wikibase.getEntity( id ) end -------------------------------------------------------------------------------- -- Exported method. Get wikitext for displaying an edition's badges from Wikidata. -- Test: =p.badge({args={qid='Q30097675'}}) function p.badge( frame ) local args = frame.args or frame -- via invoke or require local item = getItem( args ) --por defecto, id de la página local badges = {} if args.qid ~= nil then --pero si pasamos un qid, id pasado item = mw.wikibase.getEntity(args.qid) end local status = args.ws -- status en el índice a badge if status == 'C' or status == 'P' then status = "Q20748091" elseif status == 'V' then status = "Q20748092" elseif status == 'T' then status = "Q20748093" elseif status == 'E' or status == 'L' then status = "Q20748094" end if not ( item and item.sitelinks and item.sitelinks.eswikisource and #item.sitelinks.eswikisource.badges > 0) and not (status) then return '' end -- alguno con más prioridad que el otro? TODO: hacer algo en caso de discrepancia if status then badges = {status} end if ( item and item.sitelinks and item.sitelinks.eswikisource and #item.sitelinks.eswikisource.badges > 0) then badges = {unpack(badges), unpack(item.sitelinks.eswikisource.badges)} end local out = '' for _, badge in pairs( badges ) do local badgeOut = '' local badgeItem = mw.wikibase.getEntity( badge ) local wikisourceBadgeClass = 'Q75042035' local badgeName = '' if badgeItem.claims.P31[1].mainsnak.datavalue.value.id == wikisourceBadgeClass and badgeItem.claims.P18 ~= nil then local imageName = badgeItem.claims.P18[1].mainsnak.datavalue.value if mw.wikibase.getLabel( badge ) ~= nil then badgeName = mw.wikibase.getLabel( badge ) end -- TODO: Crear una página de ayuda apropiada para el nivel de los *textos* if args.indicator ~= nil then badgeOut = '<span class="indicator-badge">[[File:' .. imageName .. '|16px|link=Ayuda:Nivel de las páginas|' .. badgeName .. ']]</span>' else badgeOut = '<indicator name="wikisource-badge-' .. badgeName .. '">' .. badgeOut .. '</indicator>' end --[[ if args.category ~= nil and badgeItem.claims.P910 ~= nil then local categoryQid = badgeItem.claims.P910[1].mainsnak.datavalue.value.id local category = mw.wikibase.getEntity( categoryQid ) badgeOut = badgeOut .. '['..'[' .. category.sitelinks.enwikisource.title .. ']'..']' end ]] out = out .. badgeOut end end return mw.getCurrentFrame():preprocess(out) end return p sj0b8c7hshayjboz23cu1qc73ehhcr8 1653820 1653818 2026-05-14T15:15:35Z Ignacio Rodríguez 3603 require strict 1653820 Scribunto text/plain require('strict') --[[********************************************************************************* * Nombre: Módulo:Wikidata * * Descripción: Este módulo devuelve el valor o valores con o sin formato * específico a una propiedad de Wikidata. * *********************************************************************************`-- ]] local p = {} local marco = mw.getCurrentFrame() local datequalifiers = {'P585', 'P571', 'P580', 'P582'} local primera = true --[[ ========================================================================= Mensajes de error ========================================================================= `-- ]] local avisos = { ["errores"] = { ["property-param-not-provided"] = "Parámetro de la propiedad no proporcionado.", ["entity-not-found"] = "Entrada no encontrada.", ["unknown-claim-type"] = "Tipo de notificación desconocida.", ["unknown-snak-type"] = "Tipo de dato desconocido.", ["unknown-datavalue-type"] = "Formato de dato desconocido.", ["unknown-entity-type"] = "Tipo de entrada desconocido.", ["unknown-value-module"] = "Debe ajustar ambos parámetros de valor y el valor del módulo de funciones.", ["value-module-not-found"] = "No se ha encontrado el módulo apuntado por valor-módulo.", ["value-function-not-found"] = "No se ha encontrado la función apuntada por valor-función.", ["qualifier-not-found"] = "Qualifier not found.", ["other entity"] = "Enlaces a elementos diferentes desactivado." }, ["somevalue"] = "''valor desconocido''", ["novalue"] = "" } --[[ ========================================================================= Función auxiliar para dar formato a los mensajes de error ========================================================================= `-- ]] local function formatoError( clave ) return '<span class="error">' .. avisos.errores[clave] .. '</span>' end -- Módulos en los que están definidos los tipos de datos más habituales si son -- diferentes de Wikidata/Formatos -- local modulosTipos = { ['altura'] = 'Módulo:Wikidata/Formato magnitud', ['área'] = 'Módulo:Wikidata/Formato magnitud', ['educado en'] = 'Módulo:Wikidata/Formatos educación', ['imagen'] = 'Módulo:Wikidata/Formato imagen', ['lugar'] = 'Módulo:Wikidata/Formato lugar', ['formatoLugar']= 'Módulo:Wikidata/Formato lugar', ['magnitud'] = 'Módulo:Wikidata/Formato magnitud', ['movimiento'] = 'Módulo:Wikidata/Formato movimiento', ['periodicidad']= 'Módulo:Wikidata/Formato magnitud', ['premio'] = 'Módulo:Wikidata/Formato premio', } --[[ ========================================================================= Función para identificar el ítem correspondiente a la página o otro dado. Esto último aún no funciona. ========================================================================= `-- ]] local function SelecionEntidadPorId( id ) if id and id ~= '' then return mw.wikibase.getEntityObject( id ) else return mw.wikibase.getEntityObject() end end --[[ ========================================================================= Función que identifica si el valor devuelto es un ítem o una propiedad y en función de eso añade el prefijo correspondiente ========================================================================= `-- ]] local function SelecionEntidadPorValor( valor ) if valor['entity-type'] == 'item' then -- Prefijo de ítem return 'q' .. valor['numeric-id'] elseif valor['entity-type'] == 'property' then -- Prefijo de propiedad return 'p' .. valor['numeric-id'] else return formatoError( 'unknown-entity-type' ) end end local function obtenerFuncion(funcion, nombreModulo) if not funcion then return elseif type(funcion) == 'function' then -- Uso desde LUA return funcion elseif funcion == '' or not nombreModulo or nombreModulo == '' then return else -- Uso desde una plantilla local modulo if not nombreModulo or nombreModulo == '' or nombreModulo == 'Wikidata/Formatos' then modulo = require(modulosTipos[funcion] or 'Módulo:Wikidata/Formatos') else modulo = require ('Módulo:' .. nombreModulo) end if not modulo then return nil, formatoError( 'value-module-not-found' ) elseif not modulo[funcion] then return nil, formatoError( 'value-function-not-found' ) else return modulo[funcion] end end end local function formatoValorDato( valorDato, opciones, calificativos) local funcion, mensajeError = obtenerFuncion(opciones['valor-función'] or opciones['value-function'] or opciones['funcion'], opciones['valor-módulo'] or opciones['modulo']) if mensajeError then return mensajeError elseif funcion then local opcionesEntidad = {} for k, v in pairs(opciones) do opcionesEntidad[k] = v end if mw.ustring.find(opciones['formatoTexto'],'mayúscula' ) and (primera or (opciones['separador'] and opciones['separador'] ~= 'null') or (opciones['lista'] and opciones['lista'] ~= '')) then opcionesEntidad['mayúscula'] = 'sí' primera = false end if mw.ustring.find(opciones['formatoTexto'],'cursivas') then opcionesEntidad['cursivas'] = 'sí' end return funcion(valorDato.value, opcionesEntidad, marco, calificativos) end -- == Formatos por defecto en función del tipo de valor == -- * Para tipo coordenadas cuando se da como valor de propiedad: latitud, longitud o precisión if opciones.propiedad == 'latitud' then return valorDato.value['latitude'] elseif opciones.propiedad == 'longitud' then return valorDato.value['longitude'] elseif opciones.propiedad == 'precisión' then return valorDato.value['precision'] -- * Con el resto de valores en propiedad elseif valorDato.type == 'wikibase-entityid' then -- Tipo: Número de entidad que puede ser un ítem o propiedad local opcionesEntidad = {} if mw.ustring.find(opciones['formatoTexto'],'mayúscula') and (primera or (opciones['separador'] and opciones['separador'] ~= 'null') or (opciones['lista'] and opciones['lista'] ~= '')) then opcionesEntidad['mayúscula'] = 'sí' primera = false end opcionesEntidad.enlace = opciones.enlace opcionesEntidad.etiqueta = opciones.etiqueta opcionesEntidad['debeExistir'] = opciones['debeExistir'] if mw.ustring.find(opciones['formatoTexto'],'cursivas') then opcionesEntidad.cursivas = 'sí' end return p.formatoIdEntidad( SelecionEntidadPorValor( valorDato.value ), opcionesEntidad) elseif valorDato.type == 'string' then -- Tipo: Cadena de texto (string) return valorDato.value elseif valorDato.type == 'url' then --Tipo URL (dirección web) return valorDato.url elseif valorDato.type == 'time' then -- Tipo: Fecha/hora local opcionesFecha={['formatoFecha']=opciones['formatoFecha'],enlace=opciones.enlace} if mw.ustring.find(opciones['formatoTexto'] or '','mayúscula') and primera then opcionesFecha['mayúscula']='sí' end return require('Módulo:Wikidata/Fecha').FormateaFechaHora(valorDato.value, opcionesFecha, calificativos) elseif valorDato.type == 'monolingualtext' then -- Tipo: monoligüe if valorDato.value then if opciones.idioma then for k, v in pairs(valorDato) do if v.language == opciones.idioma then return v.text end end else return valorDato.value.text end else return '' end elseif valorDato.type == 'quantity' then -- Tipo: Cantidad return require('Módulo:Wikidata/Formatos').formatoUnidad(valorDato, opciones) elseif valorDato.value['latitude'] and valorDato.value['longitude'] then -- Tipo: Coordenadas local globo = require('Módulo:Wikidata/Globos')[valorDato.value.globe] --Concatenamos los valores de latitud y longitud dentro de la plantilla Coord if globo ~= 'earth' then return marco:preprocess('{{coord|' .. valorDato.value['latitude'] .. '|' .. valorDato.value['longitude'] .. '|globe:' .. globo .. '_type:' .. opciones.tipo .. '|display=' .. opciones.display ..'|formato=' .. opciones.formato..'}}') else return marco:preprocess('{{coord|' .. valorDato.value['latitude'] .. '|' .. valorDato.value['longitude'] .. '|type:' .. opciones.tipo .. '|display=' .. opciones.display ..'|formato=' .. opciones.formato..'}}') end else return formatoError( 'unknown-datavalue-type' ) -- Si no es de ninguno de estos tipos devolverá error valor desconocido end end --[[ ========================================================================= Función para determinar el rango ========================================================================= `-- ]] local function getRango(tablaDeclaraciones) local rank = 'deprecated' for indice, declaracion in pairs(tablaDeclaraciones) do if declaracion.rank == 'preferred' then return 'preferred' elseif declaracion.rank == 'normal' then rank = 'normal' end end return rank end --[[ ========================================================================= Función para determinar la declaracion o declaraciones de mayor rango ========================================================================= `-- ]] local function filtrarDeclaracionPorRango(tablaDeclaraciones) local rango = getRango(tablaDeclaraciones) local tablaAuxiliar = tablaDeclaraciones tablaDeclaraciones = {} for indice, declaracion in pairs(tablaAuxiliar) do if declaracion.rank == rango then table.insert(tablaDeclaraciones, declaracion) end end return tablaDeclaraciones end --[[ ========================================================================= Función para seleccionar el tipo de declaración: Referencia, valor principal o calificador ========================================================================= `-- ]] local function seleccionDeclaracion(declaracion, opciones) local propiedadFuente = {} local calificador = opciones.formatoCalificador ~= '()' and opciones.calificador if calificador ~= '' and calificador and declaracion['qualifiers'] then if declaracion['qualifiers'][mw.ustring.upper(calificador)] then return declaracion.qualifiers[mw.ustring.upper(calificador)][1] -- devuelve el calificador (solo devolverá el primer valor) else return "" --Para que no lance excepción si no existe el calificador end elseif opciones.dato == 'fuente' and declaracion['references'] then local fuente = declaracion.references[1]['snaks'] for k,v in pairs(fuente) do propiedadFuente = k end return declaracion.references[1]['snaks'][propiedadFuente][1] -- devuelve la fuente (queda que se itinere la tabla) elseif (calificador == '' or not calificador) and (opciones.dato ~= 'fuente') then return declaracion.mainsnak -- devuelve el valor principal else return '' end end --[[ ========================================================================= Función para recopilar las declaraciones ========================================================================= `-- ]] function p.getDeclaraciones(entityId) -- == Comprobamos que existe un ítem enlazado a la página en Wikidata == if not pcall (SelecionEntidadPorId, entityId ) then return false end local entidad = SelecionEntidadPorId(entityId) if not entidad then return '' -- Si la página no está enlazada a un ítem no devuelve nada end -- == Comprobamos que el ítem tiene declaraciones (claims) == if not entidad.claims then return '' -- Si el ítem no tiene declaraciones no devuelve nada end -- == Declaración de formato y concatenado limpio == return entidad.claims end --[[ ========================================================================= Función para crear la cadena que devolverá la declaración ========================================================================= `-- ]] local function valinQualif(claim, qualifs) local claimqualifs = claim.qualifiers local vals, vals1, datavalue, value if not claimqualifs then return nil end for i, qualif in pairs(qualifs) do vals = claimqualifs[qualif] if vals then vals1 = vals[1] if vals1 then datavalue=vals1.datavalue if datavalue then value = datavalue.value if value then return value.time end end end end end end function p.getPropiedad(opciones, declaracion) local propiedad local tablaOrdenada if opciones.propiedad == 'precisión' or opciones.propiedad == 'latitud' or opciones.propiedad == 'longitud' then propiedad = 'P625' -- Si damos el valor latitud, longitud o precisión equivaldrá a dar p625 else propiedad = opciones.propiedad -- En el resto de casos se lee lo dado end if not propiedad then -- Comprobamos si existe la propiedad dada y en caso contrario se devuelve un error return formatoError( 'property-param-not-provided' ) end if declaracion then tablaOrdenada = declaracion elseif not p.getDeclaraciones(opciones.entityId) then return formatoError( 'other entity' ) elseif p.getDeclaraciones(opciones.entityId)[mw.ustring.upper(propiedad)] then tablaOrdenada = p.getDeclaraciones(opciones.entityId)[mw.ustring.upper(propiedad)] else return '' end -- Evitar que pete cuando se haga el find en opciones['formatoTexto'] si vale nil if not opciones['formatoTexto'] then opciones['formatoTexto'] = '' end --Dejar en su caso los valores de mayor rango if (opciones.rangoMayor == 'sí') then tablaOrdenada = filtrarDeclaracionPorRango(tablaOrdenada) end --Ordenar en su caso por fecha. Ver la función chronosort de :fr:Module:Wikidata/Récup if opciones.ordenar == 'por fecha' then require('Módulo:Tablas').ordenar(tablaOrdenada, function(elemento1,elemento2) local fecha1 = valinQualif(elemento1, datequalifiers) or '' -- elemento1.qualifiers.P580[1].datavalue.value.time or '' local fecha2 = valinQualif(elemento2, datequalifiers) or '' -- elemento2.qualifiers.P580[1].datavalue.value.time or '' return fecha1 < fecha2 end ) end if not tablaOrdenada[1] then return end -- == Si solo se desea que devuelva un valor == -- Pendiente eliminar el parámetro y sustituirlo por un nuevo valor del parámetro lista=no que haría lo mismo que opciones.uno = sí if opciones.uno == 'sí' then -- Para que devuelva el valor de índice 1 tablaOrdenada = {tablaOrdenada[1]} elseif opciones.uno == 'último' then -- Para que devuelva la última entrada de la tabla tablaOrdenada = {tablaOrdenada[#tablaOrdenada]} end -- == Creamos una tabla con los valores que devolverá == local formatoDeclaraciones = {} local hayDeclaraciones for i, dec in pairs(tablaOrdenada) do local declaracionFormateada = p.formatoDeclaracion(dec, opciones) if declaracionFormateada and declaracionFormateada ~= '' then table.insert(formatoDeclaraciones, declaracionFormateada) hayDeclaraciones = true end end primera = true if not hayDeclaraciones then return end -- Aplicar el formato a la lista de valores según el tipo de lista de las -- opciones local listaDeclaraciones = mw.text.listToText( formatoDeclaraciones, '</li><li>', '</li><li>' ) -- Añadir en su caso un lápiz if opciones.linkback == 'sí' then listaDeclaraciones = p.addLinkback( listaDeclaraciones, opciones.entityId, opciones.propiedad ) end if opciones['lista'] == 'no ordenada' then return '<ul><li>' .. listaDeclaraciones .. '</li></ul>' elseif opciones['lista'] == 'ordenada' then return '<ol><li>' .. listaDeclaraciones .. '</li></ol>' elseif opciones['lista'] == 'nobullet' then return '<ul style="list-style-type:none;list-style-image:none;margin-left:0;"><li>' .. listaDeclaraciones .. '</li></ul>' else -- valores separados por coma o por el separador y la -- conjunción de las opciones local separador, conjuncion if opciones['conjunción'] == 'null' then conjuncion = nil else conjuncion = opciones['conjunción'] end if opciones['separador'] == 'null' then separador = nil else separador = opciones['separador'] end if #formatoDeclaraciones > 1 then if not conjuncion then conjuncion = 'y' end if marco and conjuncion == 'y' then conjuncion = ' ' .. string.sub(marco:preprocess('{{y-e|{{Desvincular|' .. formatoDeclaraciones[#formatoDeclaraciones] .. '}}}}'), 1, 1) .. ' ' elseif conjuncion == 'y' or conjuncion == 'o' then conjuncion = ' ' .. conjuncion .. ' ' end end -- Añadir en su caso un lápiz if opciones.linkback == 'sí' then return p.addLinkback(mw.text.listToText( formatoDeclaraciones, separador,conjuncion ), opciones.entityId, opciones.propiedad) else return mw.text.listToText( formatoDeclaraciones, separador, conjuncion ) end end end -- devuelve el ID de la página en Wikidata (Q...), o nada si la página no está conectada a Wikidata function p.pageId() local entity = mw.wikibase.getEntityObject() if not entity then return nil else return entity.id end end --[[ ========================================================================= Función que comprueba si la página está enlazada a Wikidata en caso de estarlo pasa el valor como a argumento a la función formatSnak() ========================================================================= `-- ]] function p.formatoDeclaracion( declaracion, opciones) if not declaracion.type or declaracion.type ~= 'statement' then -- Se comprueba que tiene valor de tipo y que este sea statement (declaración) lo cual pasa siempre que existe la propiedad return formatoError( 'unknown-claim-type' ) -- Si no se cumple devuelve error end -- En el caso de que haya calificador se devuelve a la derecha del valor de la -- declaración entre paréntesis. local calificativo = opciones.calificativo or opciones.calificador if calificativo and declaracion.qualifiers then -- De momento los calificativos, normalmente años, no se enlazan local opcionesCalificativo = {['formatoTexto']='', enlace='no', ['formatoFecha']='año'} -- Pendiente local wValorCalificativo local wValorCalificativoFormateado local funcionCalificativo, mensajeError = obtenerFuncion(calificativo, opciones['módulo calificativo']) if mensajeError then return mensajeError elseif funcionCalificativo then -- Utilizar la función recibida sobre todos los calificativos wValorCalificativo = declaracion.qualifiers wValorCalificativoFormateado = funcionCalificativo(wValorCalificativo, opcionesCalificativo) elseif opciones.formatoCalificador and opciones.formatoCalificador == '()' then wValorCalificativo = declaracion.qualifiers[mw.ustring.upper(calificativo)] if wValorCalificativo and wValorCalificativo[1] then wValorCalificativoFormateado = p.formatoDato(wValorCalificativo[1], opcionesCalificativo) end elseif opciones.formatoCalificador and #mw.text.split(opciones.formatoCalificador, '%.') == 2 then local moduloFormatoCalificador = mw.text.split(opciones.formatoCalificador, '%.') local formateado = require ('Módulo:' .. moduloFormatoCalificador[1]) if not formateado then return formatoError( 'value-module-not-found' ) end local fun = formateado[moduloFormatoCalificador[2]] if not fun then return formatoError( 'value-function-not-found' ) end if mw.ustring.find(opciones['formatoTexto'],'mayúscula') and (primera or (opciones['separador'] and opciones['separador'] ~= 'null') or (opciones['lista'] and opciones['lista'] ~= '')) then opciones['mayúscula'] = 'sí' primera = false end if mw.ustring.find(opciones['formatoTexto'],'cursivas') then opciones['cursivas'] = 'sí' end wValorCalificativoFormateado = fun( declaracion.qualifiers, opciones, marco) --return require('Módulo:Tablas').tostring(declaracion) else -- Utilizar el primer valor del calificativo de la propiedad recibida wValorCalificativo = declaracion.qualifiers[mw.ustring.upper(calificativo)] if wValorCalificativo and wValorCalificativo[1] then wValorCalificativoFormateado = p.formatoDato(wValorCalificativo[1], opcionesCalificativo) end end -- no usado? -- if opciones.separadorcalificador then separador = opciones.separadorcalificador else separador = ' ' end if wValorCalificativoFormateado then local datoFormateado = p.formatoDato(declaracion.mainsnak, opciones) return (datoFormateado and datoFormateado .. '&nbsp;<small>(' .. wValorCalificativoFormateado .. ')</small>') or nil end end -- Si no hay calificativo. return p.formatoDato(seleccionDeclaracion(declaracion, opciones), opciones, declaracion.qualifiers) end --[[ ========================================================================= Función que comprueba el tipo de dato (snaktype) si es value pasa el valor como argumento a la función formatoValorDato() ========================================================================= `-- ]] function p.formatoDato( dato, opciones, calificativos) if not dato or dato == '' then return '' end if dato.snaktype == 'somevalue' then -- Fecha más temprana if calificativos then if calificativos['P1319'] and calificativos['P1319'][1] and calificativos['P1319'][1].datavalue and calificativos['P1319'][1].datavalue.type=='time' then local opcionesFecha={['formatoFecha']=opciones['formatoFecha'],enlace=opciones.enlace} return 'post. ' .. require('Módulo:Wikidata/Fecha').FormateaFechaHora(calificativos['P1319'][1].datavalue.value, opcionesFecha) end end -- Si no tiene un calificativo válido return avisos['somevalue'] -- Valor desconocido elseif dato.snaktype == 'novalue' then return avisos['novalue'] -- Sin valor elseif dato.snaktype == 'value' then return formatoValorDato( dato.datavalue, opciones, calificativos) -- Si tiene el tipo de dato se pasa el valor a la función formatDatavalue() else return formatoError( 'unknown-snak-type' ) -- Tipo de dato desconocido end end --[[ ========================================================================= Función que establece el tipo de formato en función del tipo de valor (valorDato.type) y en caso de solicitarse un formato complemetario asocia el módulo donde se establece el formato y la función de este que lo establece ========================================================================= `-- ]] --[[ ========================================================================= Damos formato a los enlaces internos ========================================================================= `-- ]] -- Opciones: -- - enlace: Valores posibles 'sí' o 'no' -- - mayúscula: Valores posibles 'sí' o 'no' -- - cursivas: Valores posibles 'sí' o 'no' function p.formatoIdEntidad(idEntidad, opciones) local enlace = mw.wikibase.sitelink(idEntidad) local etiqueta = mw.wikibase.label(idEntidad) return require('Módulo:Wikidata/Formatos').enlazar(enlace, etiqueta, idEntidad, opciones) end --[[ ========================================================================= Función principal ========================================================================= `-- ]] function p.Wikidata( frame ) local args = frame.args if args.valor == 'no' then return end local parentArgs = frame:getParent().args -- Copiar los argumentos local argumentos = {} for k, v in pairs(args) do argumentos[k] = v end for k, v in pairs(parentArgs) do if not argumentos[k] then argumentos[k] = v end end --if true then return require('Módulo:Tablas').tostring(argumentos) end -- No generar el valor de Wikidata si se ha facilitado un valor local y -- el valor local es prioritario. local valorWikidata; if (args.prioridad ~= 'sí' or (args.importar and args.importar == 'no')) and args.valor and args.valor ~= '' then valorWikidata = ''; else valorWikidata = p.getPropiedad(argumentos, nil); end local categorias = ''; local namespace = frame:preprocess('{{NAMESPACENUMBER}}'); if (namespace == '0' and (not args.categorias or args.categorias ~= 'no') and args.propiedad and string.upper(args.propiedad) ~= 'P18' -- P18: imagen de Commons and string.upper(args.propiedad) ~= 'P41' -- P41: imagen de la bandera and string.upper(args.propiedad) ~= 'P94' -- P94: imagen del escudo de armas and string.upper(args.propiedad) ~= 'P109' -- P109: firma de persona and string.upper(args.propiedad) ~= 'P154') then -- P154: logotipo if valorWikidata ~= '' and args.valor and args.valor ~= '' then categorias = '[[Categoría:Wikipedia:Artículos con datos locales]]' elseif valorWikidata and valorWikidata == '' and args.valor and args.valor ~= '' and (not args.calificador or args.calificador == '') and (not args.dato or args.dato == '' or args.dato ~= 'fuente')then categorias = '[[Categoría:Wikipedia:Artículos con datos por trasladar a Wikidata]]' end end if args.prioridad == 'sí' and valorWikidata ~= '' then -- Si se da el valor sí a prioridad tendrá preferencia el valor de Wikidata if args.importar and args.importar == 'no' and args.valor and args.valor ~= '' then return args.valor .. categorias elseif valorWikidata then return valorWikidata .. categorias -- valor que sustituye al valor de Wikidata parámetro 2 else return categorias end elseif args.valor and args.valor ~= '' then return args.valor .. categorias elseif args.importar and args.importar == 'no' then return '' elseif valorWikidata then -- Si el valor es nil salta una excepcion al concatenar return valorWikidata .. categorias else return '' end end function p.addLinkback(valorPropiedad, idEntidad, idPropiedad) local lidEntidad if valorPropiedad and idPropiedad then lidEntidad= (idEntidad ~='' and idEntidad) or mw.wikibase.getEntityIdForCurrentPage() end if lidEntidad then return valorPropiedad .. '<span class=\"wikidata-link noprint\"> [[Archivo:Blue_pencil.svg|Ver y modificar los datos en Wikidata|10px|baseline|alt=Ver y modificar los datos en Wikidata|enlace=https://www.wikidata.org/wiki/' .. lidEntidad .. '?uselang=es#' .. idPropiedad .. ']]</span>' else return valorPropiedad end end -------------------------------------------------------------------- -- A continuación, función p.claim y funciones locales necesarias -- -- Adaptado de https://ca.wikisource.org/wiki/Module:Wikidata -- -------------------------------------------------------------------- local wiki = { langcode = mw.language.getContentLanguage().code } -- Table of language codes: requested or default and its fallbacks local function findLang(langcode) if mw.language.isKnownLanguageTag(langcode or '') == false then local cframe = mw.getCurrentFrame() local pframe = cframe:getParent() langcode = pframe and pframe.args.lang if mw.language.isKnownLanguageTag(langcode or '') == false then if not mw.title.getCurrentTitle().isContentPage then langcode = cframe:preprocess('{{int:lang}}') end if mw.language.isKnownLanguageTag(langcode or '') == false then langcode = wiki.langcode end end end local languages = mw.language.getFallbacksFor(langcode) table.insert(languages, 1, langcode) if langcode == wiki.langcode then for _, l in ipairs({}) do table.insert(languages, l) end end return languages end -- Argument is 'set' when it exists (not nil) or when it is not an empty string. local function isSet(var) return not (var == nil or (type(var) == 'string' and mw.text.trim(var) == '')) end -- get safely a serialized snak local function getSnak(statement, snaks) local ret = statement for i, v in ipairs(snaks) do if not ret then return end ret = ret[v] end return ret end -- mw.wikibase.getLabelWithLang or getLabelByLang with a table of languages local function getLabelByLangs(id, languages) local label local lang for _, l in ipairs(languages) do if l == wiki.langcode then -- using getLabelWithLang when possible instead of getLabelByLang label, l = mw.wikibase.getLabelWithLang(id) else label = mw.wikibase.getLabelByLang(id, l) end if label then lang = l break end end return label, lang end -- format data value wikibase-entityid: types wikibase-item, wikibase-property local function printDatatypeEntity(data, parameters) local entity_id = data['id'] if parameters.formatting == 'raw' then return entity_id, entity_id end local label, _ = getLabelByLangs(entity_id, parameters.lang) local sitelink = mw.wikibase.getSitelink(entity_id) local labelcase = label or sitelink if parameters.citado and parameters.citado ~= '' then labelcase = parameters.citado end local entity_page = 'Special:EntityPage/' .. entity_id local ret1 if parameters.formatting == 'label' then ret1 = labelcase or entity_id else if sitelink then ret1 = '[[' .. sitelink .. '|' .. labelcase .. ']]' elseif label and string.match(parameters.formatting or '', 'internallink$') and not mw.wikibase.getEntityIdForTitle(label) then ret1 = '[[' .. label .. '|' .. labelcase .. ']]' else --si no existe la pág. en WS, crea enlace a WD ret1 = '[[d:' .. entity_page .. '|<span style="color:#5f9cbb;">' .. (labelcase or entity_id) .. '</span>]]' end end return ret1 end local function getSnakValue(snak, parameters) if snak.snaktype == 'value' then -- see Special:ListDatatypes if snak.datatype == 'wikibase-item' or snak.datatype == 'wikibase-property' then return printDatatypeEntity(snak.datavalue.value, parameters) end elseif snak.snaktype == 'somevalue' then if parameters.referenced and parameters.referenced ~= '' then return parameters.referenced end if parameters.citado and parameters.citado ~= '' then return parameters.citado end end return mw.wikibase.renderSnak(snak) end local function orderedpairs(array, order) if not order then return pairs(array) end -- return iterator function local i = 0 return function() i = i + 1 if order[i] then return order[i], array[order[i]] end end end local function getCitadoValue(claim) local result = "" if claim.qualifiers then if claim.qualifiers['P1932'] then local wqualif = claim.qualifiers['P1932'][1].datavalue.value if wqualif and wqualif ~= '' then return wqualif end end end return result end local function getReferencedValue(claim, parameters, reftypes) local result = "" -- traverse through all references for ref in pairs(claim.references or {}) do local refparts -- traverse through all parts of the current reference for snakkey, snakval in orderedpairs(claim.references[ref].snaks or {}, claim.references[ref]["snaks-order"]) do for i, reftype in ipairs(reftypes) do if snakkey == reftype then if refparts then refparts = refparts .. ", " else refparts = "" end for snakidx = 1, #snakval do if snakidx > 1 then refparts = refparts .. ", " end refparts = refparts .. getSnakValue(snakval[snakidx], parameters) end end end end if refparts then result = result .. refparts end end return result end local function getQualifierSnak(claim, qualifierId, parameters) -- a "snak" is Wikidata terminology for a typed key/value pair -- a claim consists of a main snak holding the main information of this claim, -- as well as a list of attribute snaks and a list of references snaks if qualifierId then -- search the attribute snak with the given qualifier as key if claim.qualifiers then local qualifier = claim.qualifiers[qualifierId] if qualifier then if qualifier[1].datatype == "monolingualtext" then -- iterate over monolingualtext qualifiers to get local language for idx in pairs(qualifier) do if getSnak(qualifier[idx], {"datavalue", "value", "language"}) == parameters.lang[1] then return qualifier[idx] end end elseif parameters.list then return qualifier else return qualifier[1] end end end return nil, formatoError("qualifier-not-found") else return claim.mainsnak end end local function getValueOfClaim(claim, qualifierId, parameters) local snak, error = getQualifierSnak(claim, qualifierId, parameters) local reftypes = {'P5997'} -- propiedades "tipo referencia" que pueden denotar un valor oculto parameters.referenced = getReferencedValue(claim, parameters, reftypes) parameters.citado = getCitadoValue(claim) if not snak then return nil, nil, error elseif snak[1] then -- a multi qualifier local result = {} for idx in pairs(snak) do result[#result + 1] = getSnakValue(snak[idx], parameters) end return mw.text.listToText(result), nil else -- a property or a qualifier (lo habitual) return getSnakValue(snak, parameters) end end local function getEntityId(args, pargs, unnamed) pargs = pargs or {} local id = args.item or args.from or (unnamed and mw.text.trim(args[1] or '') or nil) if not isSet(id) then id = pargs.item or pargs.from or (unnamed and mw.text.trim(pargs[1] or '') or nil) end if not isSet(id) then id = mw.wikibase.getEntityIdForCurrentPage() end return id end local function getArg(value, default, aliases) if type(value) == 'boolean' then return value elseif value == "false" or value == "no" then return false elseif value == "true" or value == "yes" then return true elseif value and aliases and aliases[value] then return aliases[value] elseif isSet(value) then return value elseif default then return default else return nil end end -- Main function claim --------------------------------------------- -- on debug console use: =p.claim{item="Q...", property="P...", ...} function p.claim(frame) local args = frame.args or frame -- via invoke or require local pargs = frame.args and frame:getParent().args or {} -- arguments local parameters = {} parameters.id = getEntityId(args, pargs) if parameters.id == nil then return end parameters.property = string.upper(args.property or "") local qualifierId = {} qualifierId[1] = getArg(string.upper(args.qualifier or "")) local i = 2 while isSet(args["qualifier" .. i]) do qualifierId[i] = string.upper(args["qualifier" .. i]) i = i + 1 end parameters.formatting = getArg(args.formatting) parameters.list = getArg(args.list, true, {firstrank='bestrank'}) parameters.tabla = getArg(args.tabla) local default = args.default parameters.lang = findLang(args.lang) -- fetch property local claims = mw.wikibase.getBestStatements(parameters.id, parameters.property) if #claims == 0 then return default end -- defaults for table local preformat, postformat = "", "" -- get initial sort indices local sortindices = {} for idx in pairs(claims) do sortindices[#sortindices + 1] = idx end local result if parameters.tabla then local value result = {} local values = {} for idx in pairs(claims) do local claim = claims[sortindices[idx]] value = getValueOfClaim(claim, qualifierId[1], parameters) values[#values + 1] = {} if value then values[#values]["col0"] = value result[#values] = value end end elseif parameters.list then parameters.separator = mw.message.new('Comma-separator'):inLanguage(parameters.lang[1]):plain() parameters.conjunction = (mw.message.new('And'):inLanguage(parameters.lang[1]):plain() .. mw.message.new('Word-separator'):inLanguage(parameters.lang[1]):plain()) -- iterate over all elements and return their value (if existing) local value result = {} local values = {} for idx in pairs(claims) do local claim = claims[sortindices[idx]] value = getValueOfClaim(claim, qualifierId[1], parameters) values[#values + 1] = {} if value then values[#values]["col0"] = value result[#values] = value end end result = preformat .. mw.text.listToText(result, parameters.separator, parameters.conjunction) .. postformat else -- return first element local claim = claims[sortindices[1]] result = getValueOfClaim(claim, qualifierId[1], parameters) end if not isSet(result) then result = default end return result or '' end -------------------------------------------------------------------------------- -- Get an Item based on what's passed in the 'wikidata' or 'page' parameters of -- the args, or the current page's ID otherwise. local function getItem( args ) local id = nil -- If args is a table with an appropriate element, use it. if type( args ) == 'table' then if args.wikidata ~= '' and args.wikidata ~= nil then id = args.wikidata elseif args.wikidata_id ~= '' and args.wikidata_id ~= nil then id = args.wikidata_id elseif args.page ~= '' and args.page ~= nil then local title = mw.title.new( args.page ) id = mw.wikibase.getEntityIdForTitle( title.nsText .. title.text ) -- If no entity for this page, maybe it's a subpage and we should look for the root page's entity. if id == nil then id = mw.wikibase.getEntityIdForTitle( title.nsText .. title.rootText ) end end end if type( args ) == 'string' and args ~= '' then id = args end return mw.wikibase.getEntity( id ) end -------------------------------------------------------------------------------- -- Exported method. Get wikitext for displaying an edition's badges from Wikidata. -- Test: =p.badge({args={qid='Q30097675'}}) function p.badge( frame ) local args = frame.args or frame -- via invoke or require local item = getItem( args ) --por defecto, id de la página local badges = {} if args.qid ~= nil then --pero si pasamos un qid, id pasado item = mw.wikibase.getEntity(args.qid) end local status = args.ws -- status en el índice a badge if status == 'C' or status == 'P' then status = "Q20748091" elseif status == 'V' then status = "Q20748092" elseif status == 'T' then status = "Q20748093" elseif status == 'E' or status == 'L' then status = "Q20748094" end if not ( item and item.sitelinks and item.sitelinks.eswikisource and #item.sitelinks.eswikisource.badges > 0) and not (status) then return '' end -- alguno con más prioridad que el otro? TODO: hacer algo en caso de discrepancia if status then badges = {status} end if ( item and item.sitelinks and item.sitelinks.eswikisource and #item.sitelinks.eswikisource.badges > 0) then badges = {unpack(badges), unpack(item.sitelinks.eswikisource.badges)} end local out = '' for _, badge in pairs( badges ) do local badgeOut = '' local badgeItem = mw.wikibase.getEntity( badge ) local wikisourceBadgeClass = 'Q75042035' local badgeName = '' if badgeItem.claims.P31[1].mainsnak.datavalue.value.id == wikisourceBadgeClass and badgeItem.claims.P18 ~= nil then local imageName = badgeItem.claims.P18[1].mainsnak.datavalue.value if mw.wikibase.getLabel( badge ) ~= nil then badgeName = mw.wikibase.getLabel( badge ) end -- TODO: Crear una página de ayuda apropiada para el nivel de los *textos* if args.indicator ~= nil then badgeOut = '<span class="indicator-badge">[[File:' .. imageName .. '|16px|link=Ayuda:Nivel de las páginas|' .. badgeName .. ']]</span>' else badgeOut = '<indicator name="wikisource-badge-' .. badgeName .. '">' .. badgeOut .. '</indicator>' end --[[ if args.category ~= nil and badgeItem.claims.P910 ~= nil then local categoryQid = badgeItem.claims.P910[1].mainsnak.datavalue.value.id local category = mw.wikibase.getEntity( categoryQid ) badgeOut = badgeOut .. '['..'[' .. category.sitelinks.enwikisource.title .. ']'..']' end ]] out = out .. badgeOut end end return mw.getCurrentFrame():preprocess(out) end return p 7kdwuk6190bzi7ezaapuekiudyav8du Módulo:Wikidata/Formatos 828 217259 1653819 812904 2026-05-14T15:14:54Z Ignacio Rodríguez 3603 limpieza código, dioses lua, función sin uso 1653819 Scribunto text/plain local p = {} local marco = mw.getCurrentFrame() local es = mw.language.new('es') local moduloTablas = require('Módulo:Tablas') local elementoTabla = moduloTablas.elemento local insertarEnTabla = moduloTablas.insertar local moduloWikidata = require('Módulo:Wikidata') local getPropiedadWikidata = moduloWikidata.getPropiedad local formatoDatoWikidata = moduloWikidata.formatoDato local enlazarURL = require('Módulo:URL').enlazar function p.formatImage( value, options ) local str = '[[Image:' .. value .. '|thumb' if options.legend then str = str .. '|' .. options.legend end return str .. ']]' end function p.formatBandera(value, options, frame) if frame == nil then frame = marco end local label = mw.wikibase.label( 'Q' .. value['numeric-id'] ) if not label then return end local link = mw.wikibase.sitelink('Q' .. value['numeric-id'] ) local nombre local tipo = mw.ustring.gsub(label,'(%D+)%sde%s%D+','%1') local coincidencia if options.cortar and options.cortar ~= '' then coincidencia = mw.ustring.find( es:lc(options.cortar), es:lc(tipo)) end if coincidencia then nombre = mw.ustring.gsub(label,'%D+%sde%s(%D+)','%1') else nombre = label end local str2 if mw.title.new('Plantilla:Geodatos '.. label ).exists then str2 = frame:preprocess('{{bandera2|' .. label ..'|nombre ='.. nombre .. '}}') elseif link and label then str2 = '[[' .. link .. '|' .. nombre .. ']]' elseif label then str2 = nombre else str2 = '' end return str2 end function p.formatCoor(value) local cadenacoor = value return marco:preprocess('{{coord|' .. cadenacoor[tostring('latitude')] ..'|'.. cadenacoor[tostring('longitude')] .. '|format=dms}}') end -- Funciones para entidades de Wikidata local noMostrarPremio={ ['Q20899118'] = true, -- NPR Top 100 Science Fiction and Fantasy Books } function p.formatoPremio(valor) local enlace, etiqueta, idEntidad = p.obtenerDatos(valor) if idEntidad and noMostrarPremio[idEntidad] then return end -- Eliminar de la etiqueta la categoría del premio if etiqueta then etiqueta = etiqueta:match('^(.*)%s+a%s.*$') or -- Ejemplo: Premio Nébula a la mejor novela corta --> Premio Nébula etiqueta:match('^(.*)%s+al%s.*$') or -- Ejemplo: Premio Hugo al mejor relato --> Premio Hugo etiqueta:match('^(.*) en la categoría') or -- Ejemplo: Premio Prometheus en la categoría Hall of Fame --> Premio Prometheus etiqueta end return p.enlazar(enlace, etiqueta, idEntidad) end function p.formatoGentilicio(valor, opciones, frame) local enlacePais, etiquetaPais, idEntidadPais = p.obtenerDatos(valor) local gentilicio if etiquetaPais then gentilicio = frame:preprocess('{{gentilicio|'.. etiquetaPais .. '|fs}}') if not gentilicio or gentilicio == '' then gentilicio = etiquetaPais end end return p.enlazar(enlacePais, gentilicio, idEntidadPais, opciones) end function p.formatoGentilicio2(valor, opciones, frame) local enlacePais, etiquetaPais, idEntidadPais = p.obtenerDatos(valor) local gentilicio local entidad = mw.wikibase.getEntity() local genero = entidad:formatPropertyValues( 'P21' )['value'] if etiquetaPais then if genero == 'femenino' then gentilicio = frame:preprocess('{{gentilicio|'.. etiquetaPais .. '|fs}}') else gentilicio = frame:preprocess('{{gentilicio|'.. etiquetaPais .. '|ms}}') end if not gentilicio or gentilicio == '' then gentilicio = etiquetaPais end end return p.enlazar(enlacePais, gentilicio, idEntidadPais, opciones) end function p.formatoLugar(valor, opciones, _, calificativos) -- Función que devuelve algo de la forma Lugar, entidad territorial administrativa, país local lugarEnlazado, entidadTerritorialAdministrativaEnlazada, paisEnlazado -- Validar que está informado el id del lugar. if not valor or not valor['numeric-id'] then return end -- Obtener primero la entidad territorial administrativa y el país de los calificativos si es posible -- No se obtiene primero el lugar, que sería lo más lógico, porque se obtendrá de forma diferente según -- estén o no informados los calificativos if calificativos then entidadTerritorialAdministrativaEnlazada = p.enlazar(p.obtenerDatos(elementoTabla(calificativos,'P131',1,'datavalue','value'))) paisEnlazado = p.enlazar(p.obtenerDatos(elementoTabla(calificativos,'P17',1,'datavalue','value'))) end if paisEnlazado then lugarEnlazado = p.enlazar(p.obtenerDatos(valor)) else -- Si el lugar no tiene el calificativo de país obtenerlo de la propiedad país de la -- entidad de Wikidata del lugar. -- De momento no se obtiene la entidad administrativa (tiene unas barbaridades...) local idLugar, enlaceLugar, etiquetaLugar local entidad idLugar = 'Q' .. valor['numeric-id'] entidad = mw.wikibase.getEntityObject(idLugar) if not entidad then return end enlaceLugar = elementoTabla(entidad,'sitelinks','eswiki','title') etiquetaLugar = elementoTabla(entidad,'labels','es','value') lugarEnlazado = p.enlazar(enlaceLugar, etiquetaLugar, idLugar, opciones) paisEnlazado = p.enlazar(p.obtenerDatos(elementoTabla(entidad,'claims','P17',1,'mainsnak','datavalue','value'))) end if lugarEnlazado == paisEnlazado then -- La ciudad de El Vaticano tiene en Wikidata como país a sí misma paisEnlazado = nil end return require('Módulo:Formato texto').separadosPorComa({lugarEnlazado, entidadTerritorialAdministrativaEnlazada, paisEnlazado}) end function p.formatoUnidad(valor, opciones) local cantidad = mw.ustring.gsub(valor.value['amount'], '+','') local unidad = mw.wikibase.label(mw.ustring.gsub(valor.value['unit'], '^.-/(Q%d+)$', '%1')) local textoUnidad if unidad and tonumber(cantidad) > 1 and unidad:match("^.*[aeiou]$") then textoUnidad = unidad..'s' elseif unidad and tonumber(cantidad) > 1 then textoUnidad = unidad..'es' end if not unidad or (opciones['formatoUnidad'] and opciones['formatoUnidad'] == 'número') then return tonumber(cantidad) elseif unidad and opciones['formatoUnidad'] and opciones['formatoUnidad'] == 'minutos' and unidad == 'segundo' then return math.floor(tonumber(cantidad)/60) .. ':' .. (tonumber(cantidad)%60) .. ' ' .. 'minutos' else return p.formatoNumero(cantidad) .. ((textoUnidad and ' ' .. textoUnidad) or '') end end function p.formatoNumero(valor) if not tonumber(valor) then return valor end local formato = valor local k while true do formato, k = string.gsub(formato, "^(-?%d+)(%d%d%d)", '%1&nbsp;%2') if (k==0) then break end end return formato end -- Formatos de calificativos function p.formatoPeriodo(valor) local anyoInicio, anyoFin local fechaInicio, fechaFin local opcionesFecha= {['formatoTexto']='mayúscula', ['formatoFecha'] = 'año', ['enlace']='no'} local fechasInicio = valor['P580'] local fechasFin = valor['P582'] local iFechaInicio = 1 local iFechaFin = 1 if not fechasInicio and not fechasFin then return end local periodos = {} if fechasInicio and fechasInicio[1] then --if true then return require('Módulo:Tablas').tostring(fechasInicio[1]) end anyoInicio = formatoDatoWikidata(fechasInicio[1],opcionesFecha , {}) fechaInicio= anyoInicio -- de momento end if fechasFin and fechasFin[1] then anyoFin = formatoDatoWikidata(fechasFin[1], opcionesFecha, {}) fechaFin = anyoFin -- de momento end while fechaInicio or fechaFin do -- Por cada periodo if fechaInicio and fechaFin and tonumber(fechaInicio) and tonumber(fechaFin) and (tonumber(fechaInicio) <= tonumber(fechaFin)) then if anyoInicio == anyoFin then table.insert(periodos, anyoInicio) else table.insert(periodos, anyoInicio .. '–' .. anyoFin) end iFechaInicio = iFechaInicio + 1 iFechaFin = iFechaFin + 1 if fechasInicio[iFechaInicio] then anyoInicio = formatoDatoWikidata(fechasInicio[iFechaInicio],opcionesFecha , {}) fechaInicio= anyoInicio -- de momento else anyoInicio = nil fechaInicio= nil end if fechasFin[iFechaFin] then anyoFin = formatoDatoWikidata(fechasFin[iFechaFin],opcionesFecha , {}) fechaFin= anyoFin -- de momento else anyoFin = nil fechaFin= nil end elseif anyoInicio then table.insert(periodos, 'desde ' .. anyoInicio) iFechaInicio = iFechaInicio + 1 if fechasInicio[iFechaInicio] then anyoInicio = formatoDatoWikidata(fechasInicio[iFechaInicio],opcionesFecha , {}) fechaInicio= anyoInicio -- de momento else anyoInicio = nil fechaInicio= nil end elseif anyoFin then table.insert(periodos, 'hasta ' .. anyoFin) iFechaFin = iFechaFin + 1 if fechasFin[iFechaFin] then anyoFin = formatoDatoWikidata(fechasFin[iFechaFin],opcionesFecha , {}) fechaFin= anyoFin -- de momento else anyoFin = nil fechaFin= nil end end end return table.concat(periodos, ', ') end -- Funciones internas -- Las siguientes funciones hacen prácticamente lo mismo que la función -- formatoIdEntidad del módulo Wikidata. -- p.obtenerDatos obtiene los datos de la entidad y p.enlazar los formatea. function p.obtenerDatos(valor) if valor and valor['numeric-id'] then local idEntidad = 'Q' .. valor['numeric-id'] local etiqueta = mw.wikibase.label( idEntidad ) local enlace = mw.wikibase.sitelink( idEntidad ) return enlace, etiqueta, idEntidad end end local yaEnlazado = {} function p.enlazar(enlace, etiqueta, idEntidad, opciones) if not enlace and not etiqueta and not idEntidad then return end if opciones then -- Opciones de las etiquetas if opciones.etiqueta and opciones.etiqueta ~= 'null' then -- Por averiguar dónde se usa. etiqueta = opciones.etiqueta end -- Convertir el primer carácter a mayúscula en su caso if etiqueta and opciones['mayúscula'] == 'sí' then etiqueta = es:ucfirst(etiqueta) end -- Opciones del enlace if opciones['enlace'] == 'no' then -- No p.enlazar enlace = nil elseif opciones['debeExistir'] == 'sí' then -- No devolver nada si no está informado el artículo de Wikipedia if not enlace then return end elseif opciones['enlace'] == 'sí' then if not enlace and etiqueta and not require('Módulo:Páginas').existe(etiqueta) then -- Tomar como enlace la etiqueta si no existe el correspondiente artículo enlace = etiqueta end end end -- No enlazar varias veces lo mismo if enlace and yaEnlazado[enlace] then enlace = nil end -- Según esté informada la etiqueta o el enlace local resultado if etiqueta and enlace and etiqueta ~= enlace then --Ambos si no son iguales resultado = '[[' .. enlace .. '|' .. etiqueta .. ']]' yaEnlazado[enlace] = true elseif enlace then -- Solo el enlace o ambps y son iguales resultado = '[[' .. enlace .. ']]' yaEnlazado[enlace] = true elseif etiqueta then -- Solo la etiqueta resultado = etiqueta elseif idEntidad then -- Solo la entidad -- Obtener la etiqueta y el enlace de Wikidata de la Wikipedia inglesa. local entidad=mw.wikibase.getEntityObject(idEntidad) --if true then return require('Módulo:Tablas').tostring(entidad) end if entidad then if entidad.labels and entidad.labels.en then etiqueta = entidad.labels.en.value end if entidad.sitelinks and entidad.sitelinks.enwiki then enlace = entidad.sitelinks.enwiki.title end if etiqueta or enlace then resultado = p.enlazarEnOtroIdioma(enlace, etiqueta, 'en') end end if not resultado then return '[[:d:'.. idEntidad .. '|sin etiquetar]]' .. '[[Categoría:Wikipedia:Páginas con propiedades de Wikidata sin etiqueta]]' end end -- Añadir cursivas if opciones and opciones.cursivas == 'sí' then resultado = "''" .. resultado .. "''" end return resultado end function p.formatId( value, options ) local wikidata = require('Módulo:Wikidata') local id = 'Q'.. value['numeric-id'] local opciones = {separador = '<br>',propiedad = options.propiedadValor, uno = 'sí', entityId = id, formatoTexto = 'mayúscula'} return wikidata.getPropiedad(opciones) end function p.formatBandera2( value, options ) local bandera = require('Módulo:Bandera') local id = 'Q'.. value['numeric-id'] local label = mw.wikibase.label( 'Q' .. value['numeric-id'] ) or '' local tipo = mw.ustring.gsub(label,'(%D+)%sde%s%D+','%1') local coincidencia local nombre if options.cortar and options.cortar ~= '' then coincidencia = mw.ustring.find( es:lc(options.cortar), es:lc(tipo)) end if coincidencia then nombre = mw.ustring.gsub(label,'%D+%sde%s(%D+)','%1') elseif label and label ~= '' then nombre = label end return bandera.banderaLua(id, '20px', '', nombre) end function p.formatFicha( value, options ) local ficha = require('Módulo:Ficha') local opciones = {propiedadValor='P31'} local etiqueta = p.formatId( value, opciones) options.cortar = etiqueta local parametros = { child = 'si', estiloetiqueta1 = 'border:0;font-weight:100;padding:0px 7px', estilodatos1 = 'border:0;font-weight:100;padding:0px 7px 0px 2px', etiqueta1='&bull;&nbsp;'.. es:ucfirst(etiqueta), datos1 = p.formatBandera2(value, options)} return ficha.infobox(parametros) end function p.formatoId ( value ) return value['numeric-id'] and 'Q' .. value['numeric-id'] end --***************************************************************************** -- Funciones para un elemento/entidad de Wikidata --***************************************************************************** function p.formatoObraAutor(valor, opciones) local idObra = 'Q' .. valor['numeric-id'] local entidadObra = mw.wikibase.getEntityObject(idObra) local enlaceObra = elementoTabla(entidadObra,'sitelinks','eswiki','title') local etiquetaObra = elementoTabla(entidadObra,'labels','es','value') local tituloObraEnlazado = p.enlazar(enlaceObra, etiquetaObra, idObra, opciones) local declaracionAutores = elementoTabla(entidadObra, 'claims', 'P50') if declaracionAutores then local autores = getPropiedadWikidata({['propiedad']='P50'}, entidadObra.claims['P50']) if autores then return "''" .. tituloObraEnlazado .. "'' de " .. autores end end return "''" .. tituloObraEnlazado .. "''" end function p.formatoObraAnyo(valor, opciones) local idObra = 'Q' .. valor['numeric-id'] local entidadObra = mw.wikibase.getEntityObject(idObra) local enlaceObra = elementoTabla(entidadObra,'sitelinks','eswiki','title') local etiquetaObra = elementoTabla(entidadObra,'labels','es','value') local tituloObraEnlazado = p.enlazar(enlaceObra, etiquetaObra, idObra, opciones) local declaracionFechaPublicacion = elementoTabla(entidadObra, 'claims', 'P577') if declaracionFechaPublicacion then local anyoPublicacion = getPropiedadWikidata({['propiedad']='P577', ['formatoFecha']='año', ['enlace']='no'}, declaracionFechaPublicacion) if anyoPublicacion then return "''" .. tituloObraEnlazado .. "'' (" .. anyoPublicacion .. ")" end end return "''" .. tituloObraEnlazado .. "''" end function p.formatoObraTituloOriginalAnyo(valor, opciones) local idObra = 'Q' .. valor['numeric-id'] local entidadObra = mw.wikibase.getEntityObject(idObra) local enlaceObra = elementoTabla(entidadObra,'sitelinks','eswiki','title') local etiquetaObra = elementoTabla(entidadObra,'labels','es','value') local tituloObraEnlazado = p.enlazar(enlaceObra, etiquetaObra, idObra, opciones) local tituloOriginal = elementoTabla(entidadObra, 'claims', 'P1476',1,'mainsnak','datavalue','value','text') local declaracionFechaPublicacion = elementoTabla(entidadObra, 'claims', 'P577') local anyoPublicacion if declaracionFechaPublicacion then anyoPublicacion = getPropiedadWikidata({['propiedad']='P577', ['formatoFecha']='año', ['enlace']='no'}, declaracionFechaPublicacion) end if tituloOriginal and anyoPublicacion then return "''" .. tituloObraEnlazado .. "'' (''" .. tituloOriginal .. "'', " .. anyoPublicacion .. ")" elseif tituloOriginal then return "''" .. tituloObraEnlazado .. "'' (''" .. tituloOriginal .. "'')" elseif anyoPublicacion then return "''" .. tituloObraEnlazado .. "'' (" .. anyoPublicacion .. ")" else return "''" .. tituloObraEnlazado .. "''" end end function p.formatoPersonaPremiadaPor(valor, _, _, calificativos) local enlacePersona, etiquetaPersona, idEntidadPersona = p.obtenerDatos(valor) local personaEnlazada = p.enlazar(enlacePersona, etiquetaPersona, idEntidadPersona, {['enlace'] = 'sí'}) local fecha local enlaceObraPremiada, etiquetaObraPremiada, idEntidadObraPremiada local obraPremiadaEnlazada local opcionesFecha= {['formatoTexto']='mayúscula', ['formatoFecha'] = 'año', ['enlace']='no'} if calificativos then fecha = formatoDatoWikidata(elementoTabla(calificativos,'P585',1), opcionesFecha , {}) -- Primera fecha enlaceObraPremiada, etiquetaObraPremiada, idEntidadObraPremiada = p.obtenerDatos(elementoTabla(calificativos,'P1686',1,'datavalue','value'))-- Premiado por obraPremiadaEnlazada = p.enlazar(enlaceObraPremiada, etiquetaObraPremiada, idEntidadObraPremiada, {['enlace'] = 'sí'}) end return (obraPremiadaEnlazada and ("''" .. obraPremiadaEnlazada .. "''") or '') .. (obraPremiadaEnlazada and personaEnlazada and ' de ' or '') .. personaEnlazada .. (fecha and ' (' .. fecha .. ')' or '') end --***************************************************************************** -- Funciones para los tipos de dato URL --***************************************************************************** function p.formatoURL(valor) return enlazarURL(valor) end --***************************************************************************** -- Común --***************************************************************************** -- Formatear una tabla de identificadores de entidades de Wikidata local function formatearTablaIdentificadores(identificadores) -- Pendiente la parte de las opciones local identificadoresFormateados = {} local primero = true for k,v in pairs(identificadores) do if primero then table.insert(identificadoresFormateados, p.enlazar(p.obtenerDatos(v))) primero = false else table.insert(identificadoresFormateados, p.enlazar(p.obtenerDatos(v))) end end -- No devolver nada si la lista no tiene elementos if not primero then return mw.text.listToText(identificadoresFormateados) end end --***************************************************************************** -- Funciones para una propiedad de una entidad --***************************************************************************** function p.formatoIdioma(entidad, propiedad, opciones) local idiomas = {} if not entidad or not entidad.claims then return end local declaracionesIdiomas = entidad.claims[propiedad] local identificadorIdioma if not declaracionesIdiomas then return end for k,v in pairs(declaracionesIdiomas) do identificadorIdioma = 'Q' .. v.mainsnak.datavalue.value['numeric-id'] if identificadorIdioma == 'Q7976' then -- inglés estadounidense insertarEnTabla(idiomas, 'Q1860') -- inglés else insertarEnTabla(idiomas, identificadorIdioma) end end return formatearTablaIdentificadores(idiomas, opciones or {}) end return p 8rl4xa286sam4rmronxii2ru0w2bwwo Plantilla:Propiedad 10 217343 1653814 813212 2026-05-14T14:28:08Z Ignacio Rodríguez 3603 borrar 1653814 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:Wikidata |Wikidata |propiedad = {{{1|}}} |valor = {{{2|}}} |separador = {{{3|null}}} |valor-módulo = {{{4|}}} |valor-función = {{{5|}}} |legend = {{{6|}}} |conjunción = {{{conjunción|{{{3|null}}}}}} |calificador = {{{calificador|}}} |dato = {{{dato|}}} |uno = {{{uno|}}} |rangoMayor = {{{rango mayor|{{{rango_mayor|}}}}}} |formatoTexto = {{{formato texto|}}} |formatoFecha = {{{formato fecha|}}} |formatoUnidad = {{{formato unidad|}}} |formatoCalificador = {{{formato calificador|}}} |enlace = {{{link|{{{enlace|}}} }}} |etiqueta = {{{etiqueta|null}}} |prioridad = {{{prioridad|}}} |tipo = {{{tipo|city}}} |display = {{{display|inline,title}}} |formato = {{{formato|dms}}} |entityId = {{{entidad|}}} |lista = {{{lista|}}} |importar = {{{importar|}}} |categorias = {{{categorías|}}} |debeExistir = {{{debe existir|}}} |propiedadValor= {{{propiedad_valor|}}} |calificativo = {{{calificativo|}}} |módulo calificativo = {{{módulo calificativo|}}} }}<noinclude>{{borrar|1 único uso desde 2016, hemos usado otros enfoques en estos 10 años. Pensando en simplificar al máximo el Módulo:Wikidata [[User:Ignacio Rodríguez|'''Ignacio''']] - [[User talk:Ignacio Rodríguez|( '''話合''' )]] 14:28 14 may 2026 (UTC)}} {{documentación}}</noinclude> 2m8ijqhnf643svarhncrruq3xyxhqex Módulo:Biocitas 828 217349 1653810 1487340 2026-05-14T14:02:14Z Ignacio Rodríguez 3603 -wikinews (DEP) // calmar los dioses de lua 1653810 Scribunto text/plain local p = {} local Wikidata = require('Módulo:Wikidata') local Enlaces = require('Módulo:Enlaces') local Str = require('Módulo:String') local Entidad = mw.wikibase.getEntityObject() or '' -- Tabla con los datos en Wikidata de la persona. --parámetros reconocidos. 1 = vigente, 0 = obsoleto local params ={['texto']=1,['obras']=1,['documentos']=1,['foto']=1,['wikipedia']=0,['wikiquote']=0,['commons']=0,['wikispecies']=0,['wikidata']=1,['añomuerte']=1,['siglomuerte']=1,['añonacimiento']=1,['siglonacimiento']=1,['ordenar']=1,['inicial']=1,['añosmuerte']=0,['vivo']=1,['país']=1} local categorias = '' local withoutEpoque = true -- Función que devuelve la lista de los valores de una propiedad en Wikidata formateados local function propiedad(idPropiedad,opciones) if Entidad and Entidad.claims then --and Entidad.claims[idPropiedad] then if not opciones then opciones = {} end idPropiedad = string.upper(idPropiedad) opciones['propiedad'] = idPropiedad local valorPropiedad = Wikidata.getPropiedad(opciones,Entidad.claims[idPropiedad]) if not valorPropiedad or valorPropiedad == '' then return '' end return valorPropiedad else return '' end end local function errorMessage(text) -- Función que entrega un mensaje de error formateado como tal local html = mw.html.create('div') html:addClass('error') :wikitext(text) categorias=categorias..'[[Categoría:Wikisource:Artículos con errores en la plantilla Biocitas]]' return tostring(html) end -- Función para eliminar contenido entre paréntesis local function remove_parentheses(text) -- Sustituye todo lo que está entre paréntesis (incluyendo los paréntesis) por una cadena vacía if text==nil then return "" end local texto = text:gsub("%b()", "") if texto ~= nil then return texto else return text end end local function computeCenturyFromYear(year) -- Dado un año entrega el siglo if year >= 0 then return math.ceil(year / 100) else return -math.ceil(-year / 100) end end local function getTextForCentury(century) -- Dado un siglo en número, entrega un texto preformateado con -- números romanos y un indicador de antes de Cristo. local romanNumbers1 = {'', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X'} local romanNumbers2 = {'', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'} local text = romanNumbers2[math.floor(math.abs(century) / 10) + 1] .. romanNumbers1[math.floor(math.abs(century) % 10) + 1] if century > 0 then return 'Siglo '..text else return 'Siglo '.. text .. ' a. C.' end end local function getTextForYear(year) -- transforma un año de formato -45 a 45 a. C. local text = math.abs(year) if year < 0 then text = text .. ' a. C.' end return text end local function getDateFromArgs(args, field) -- Obtiene datos (fecha de nacimiento, fallecimiento) de parámetros determinados en la plantilla {{Biocitas}} -- con el formato AñoNacimiento, AñoMuerte, SigloNacimiento o SigloMuerte. TextoNacimiento o InciertoNacimiento también funciona local struct = { year = nil, century = nil, text = nil, precision = 0 } --extract year or century local date = args['año' .. field] if date == nil then date = args[field] end if tonumber(date) ~= nil then struct.year = tonumber(date) if struct.year == 0 then struct.text = errorMessage("¡El calendario gregoriano no tiene año 0!") return struct end struct.century = computeCenturyFromYear(struct.year) struct.precision = 9 elseif args['siglo' .. field] ~= nil then struct.century = tonumber(args['siglo' .. field]) struct.precision = 7 end --build text if struct.year ~= nil then struct.text = getTextForYear(struct.year) elseif struct.century ~= nil then struct.text = getTextForCentury(struct.century, true) else struct.text = date end if args['texto' .. field] ~= nil then struct.precision = 0 --we don't know anything struct.text = args['texto' .. field] .. ' ' .. struct.text end if args['incierto' .. field] ~= nil and struct.text ~= nil then struct.precision = 0 --we don't know anything struct.text = args['incierto' .. field] .. ' ' .. struct.text end return struct end local function parseWbTime(value) local _,_, year = string.find(value.time, '([%+%-]%d%d%d+)%-') year = tonumber(year) return { year = year, century = computeCenturyFromYear(year), text = nil, precision = value.precision } end local function getDateFromTimeStatement(statement, field) local struct = { year = nil, century = nil, text = nil, precision = 0 } local prefix = '' local snak = statement.mainsnak if snak.snaktype == 'novalue' then return struct end if statement.qualifiers ~= nil then if statement.qualifiers.P1480 ~= nil then for _,qualifier in pairs(statement.qualifiers.P1480) do if qualifier.datavalue.value['numeric-id'] == 5727902 then struct = parseWbTime(snak.datavalue.value) prefix = 'circa ' struct.precision = 8 --TODO: hacky end end end if statement.qualifiers.P1319 ~= nil then for _,qualifier in pairs(statement.qualifiers.P1319) do struct = parseWbTime(qualifier.datavalue.value) prefix = 'después de' struct.precision = 8 --TODO: hacky end elseif statement.qualifiers.P1326 ~= nil then for _,qualifier in pairs(statement.qualifiers.P1326) do struct = parseWbTime(qualifier.datavalue.value) prefix = 'antes de ' struct.precision = 8 --TODO: hacky end elseif statement.qualifiers.P1317 ~= nil then for _,qualifier in pairs(statement.qualifiers.P1317) do struct = parseWbTime(qualifier.datavalue.value) prefix = 'floruit ' struct.precision = 8 --TODO: hacky end else struct = parseWbTime(snak.datavalue.value) end elseif snak.snaktype == 'value' then struct = parseWbTime(snak.datavalue.value) else return struct end --Create text if struct.precision >= 9 then struct.text = prefix .. getTextForYear(struct.year) elseif struct.precision == 8 then struct.text = prefix .. getTextForYear(struct.year) elseif struct.precision == 7 then struct.text = prefix .. getTextForCentury(struct.century, true) else struct.text = errorMessage('La fecha de ' .. field .. ' tiene muy poca precisión en Wikidata') end return struct end local function getDateFromTimeStatements(statements, field) -- Función que obtiene las fechas desde Wikidata (copiada literal sin adaptaciones desde la frWS) if #statements == 0 then return { precision = 0 } end local time = nil for _, statement in pairs(statements) do local newTime = getDateFromTimeStatement(statement, field) if time == nil then time = newTime elseif time.year ~= newTime.year then --si hay años contradictorios time.precision = 8 --html:wikitext(errorMessage('Hay varios años de ' .. field .. ' posibles en Wikidata. Una manera de resolver este error es fijar una de las dos fechas como "preferida".')) --return { --text = errorMessage('Hay varios años de ' .. field .. ' posibles en Wikidata. Una manera de resolver este error es fijar una de las dos fechas como "preferida".'), -- precision = 0 --} end end if time == nil then return { precision = 0 } end return time end local function resolverFecha(arg, wd) local fecha = arg if arg.text == nil and wd ~= nil then fecha = wd elseif arg.text ~= nil then categorias = categorias..'[[Categoría:Wikisource:Artículos con datos locales]]' if wd and wd.text == nil then categorias = categorias..'[[Categoría:Wikisource:Artículos con datos por trasladar a Wikidata]]' end end return fecha end local function categoriaEpoca(fecha, tol) local categoria = '' if fecha.century ~= nil and (fecha.year == nil or fecha.year <= fecha.century * 100 + tol or fecha.precision <=8 ) then if 14 <= fecha.century then categoria='[[Categoría:Autores del ' .. getTextForCentury(fecha.century, false) .. ']]' end if 6 <= fecha.century and fecha.century <= 14 then categoria=categoria..'[[Categoría:Autores de la Edad Media]]' end if fecha.century < 6 then categoria='[[Categoría:Autores de la Antigüedad]]' end withoutEpoque = false end return categoria end function p.biocitas( frame ) -- función principal para llamar desde {{biocitas}} if mw.title.getCurrentTitle().namespace ~= 106 then return errorMessage('La plantilla Biocitas se utiliza solo en espacios de nombres Autor, por ejemplo Autor:Miguel de Cervantes') end local argus = {} for k,v in pairs(frame:getParent().args) do -- crea una tabla con los parámetros incluídos en la plantilla, y elimina parámetros vacíos if v ~= '' and type(k) ~= 'number' then argus[mw.ustring.lower(k)] = v -- todos los parámetros en minúsculas por defecto: end end local html = mw.html.create() -- cuerpo principal de la plantilla local tabla = html:tag('table'):addClass('divgrande') local divgrande = tabla:tag('tr')--:addClass('divgrande') -- div principal que contiene al resto -- WIKIDATA! -- if Entidad == '' and argus['wikidata'] then Entidad = mw.wikibase.getEntityObject(argus['wikidata']) end if Entidad == '' then categorias=categorias..'[[Categoría:Wikisource:Artículos de autores no conectados a Wikidata]]' html:wikitext(errorMessage('<small>Error: Los artículos de autores deben estar enlazados en Wikidata. '.. 'Agrega un enlace a otro proyecto usando el link en la columna izquierda, '.. 'o '..frame:preprocess('[https://www.wikidata.org/wiki/Special:NewItem?site=eswikisource&page={{FULLPAGENAMEE}} crea un nuevo elemento en Wikidata]')..'</small>')) end ---- variables para manejar fechas de muerte y nacimiento local nacimientoArg = getDateFromArgs(argus, 'nacimiento') local muerteArg = getDateFromArgs(argus, 'muerte') local floruitArg = getDateFromArgs(argus, 'floruit') local nacimientoWikidata = nil local muerteWikidata = nil local floruitWikidata = nil if Entidad ~= nil and Entidad ~= '' then --si existe la entidad en Wikidata, obtiene las fechas desde ahí. nacimientoWikidata = getDateFromTimeStatements(Entidad:getBestStatements('P569'), 'nacimiento') muerteWikidata = getDateFromTimeStatements(Entidad:getBestStatements('P570'), 'muerte') floruitWikidata = getDateFromTimeStatements(Entidad:getBestStatements('P1317'), 'floruit') floruitWikidata.precision = 8 end local nacimiento = resolverFecha(nacimientoArg, nacimientoWikidata) local muerte = resolverFecha(muerteArg, muerteWikidata) local floruit = resolverFecha(floruitArg, floruitWikidata) if nacimiento.precision >= 9 and nacimiento.year > 1300 then categorias=categorias..'[[Categoría:N' .. nacimiento.year .. ']]' end if muerte.precision >= 9 and muerte.year > 1300 then categorias=categorias..'[[Categoría:F' .. muerte.year .. ']]' end categorias=categorias..categoriaEpoca(nacimiento, -20) categorias=categorias..categoriaEpoca(muerte, 5) categorias=categorias..categoriaEpoca(floruit, 0) if withoutEpoque then categorias=categorias..'[[Categoría:Época desconocida]]' end --año de la muerte, para las plantillas local anomuerte local anosmuerte = argus['añosmuerte'] if muerte.year then anomuerte = getTextForYear(muerte.year) elseif muerte.century then anomuerte = muerte.century*100 elseif argus['añomuerte'] ~= '' and argus['añomuerte'] ~= nil then anomuerte = argus['añomuerte'] elseif argus['siglomuerte'] ~= '' and argus['siglomuerte'] ~= nil then anomuerte = (tonumber(argus['siglomuerte']))*100 elseif floruit.year then --muerte presunta 70 años después de florecer anomuerte = getTextForYear(floruit.year + 70) elseif floruit.century then --si sólo se conoce el siglo, murió a mediados de siglo anomuerte = floruit.century*100 - 50 end --artículos sin información de año de muerte if (argus['vivo']==nil or argus['vivo']=='') and (anomuerte == '' or anomuerte ==nil) and (muerte.century == '' or muerte.century ==nil) then categorias = categorias..'[[Categoría:Wikisource:Artículos de autores sin información de año de muerte]]' end -- texto fechas local textofechas = '' if nacimiento.text or muerte.text then textofechas = (nacimiento.text or '')..' - '..(muerte.text or '') elseif floruit.text then textofechas = 'fl. '..floruit.text end -- esqueleto y CSS de los divs internos local foto = divgrande:tag('td'):addClass('bc-foto') local medio = divgrande:tag('td'):addClass('bc-medio') --local divtitulo = medio:tag('div'):addClass('bc-titulo') local enlaces = divgrande:tag('td'):addClass('bc-enlaces') local derechos = html:tag('div'):addClass('bc-derechos') --variables locales local sep = "<span style='display:inline-block; width:.5em;'>&nbsp;</span>" local nombre = frame:preprocess("{{PAGENAME}}") --Contenido de los divs secundarios --divtitulo:wikitext("Ficha de ".. nombre:gsub(' %(.*%)','')) --en el título nombres sin paréntesis -- Lista de enlaces if (not argus['wikidata'] or argus['wikidata'] == '') and Entidad~=nil then argus['wikidata']=Entidad.id --enlazar a elemento wikidata end ---- Enlaces uno por uno --- local listaenlaces = Enlaces.all(argus) if argus['obras'] ~= 'none' then --Obras (aparece siempre por defecto a menos que se defina como none) listaenlaces["obras"] = { ['name'] = 'Categoría de obras', ['image'] = 'Wikisource-logo.svg', ['text'] = 'Obras', ['prefix'] = ':Categoría:Obras de ', ['title'] = '', } if argus['obras'] ~= '' and argus['obras'] ~= nil then listaenlaces["obras"]["title"] = argus['obras'] else listaenlaces["obras"]["title"] = nombre end end -- crea elementos para el resto de los enlaces listaenlaces["documentos"] = { ['name'] = 'Categoría de documentos', ['image'] = 'Wikisource-logo.svg', ['text'] = 'Documentos ', ['prefix'] = ':Categoría:Documentos de ', ['title'] = argus['documentos'] or '', } -- texto propio de biocitas listaenlaces["eswiki"]["text"] = "Biografía" listaenlaces["eswikiquote"]["text"] = "Citas" listaenlaces["commonswiki"]["text"] = "Multimedia" listaenlaces["specieswiki"]["text"] = "Especies descritas" listaenlaces["wikidata"]["text"] = "Metadatos" local orden = {'obras', 'documentos', 'eswiki', 'eswikiquote', 'commonswiki', 'specieswiki', 'wikidata'} local textoenlaces = Enlaces.formattedbiocitas(listaenlaces, orden) enlaces:wikitext(textoenlaces) --llave automágica local apellidos = mw.text.trim((propiedad('p734',{['uno']='sí'}) or '')..' '..(propiedad('p1950',{['uno']='sí'}) )) local nombres = (propiedad('P735',{['conjunción']=' '}) or '') if apellidos == '' or apellidos == nil then --p.ej. Alonso de Villegas, Autor:Jerónimo Bécker, etc. apellidos = nombres --Mejor que "Autores-," cuando no existe apellido end if string.sub(apellidos,1,3) == 'de ' then apellidos = string.sub(apellidos,4) end local llave=(apellidos..', '..nombres) ~= ', ' and (apellidos..', '..nombres) mw.log(llave) -- Ordenar e Iniciales-- if argus['ordenar']==nil and llave then argus['ordenar'] = llave end if argus['ordenar'] ~= nil then if argus['inicial'] == nil then argus['inicial'] = Str.CaracterParaOrdenar(argus['ordenar']) --Si no está especificada la inicial, la saca de la primera letra de la llave de ordenado. end html:wikitext(frame:preprocess('{{DEFAULTSORT:' .. argus['ordenar'] .. '}}')) categorias=categorias..'[[Categoría:Autores-'..argus['inicial']..']]' --categoría Autores-X else html:wikitext(errorMessage("El parámetro «|Ordenar=» es obligatorio")) categorias=categorias..'[[Categoría:Wikisource:Artículos de autores sin llave de ordenamiento]]' --categoría Autores-X end if argus['ordenar'] ~= nil then -- Véase también enlaces:tag('div') :addClass('bc-enlace') :wikitext("◄"..sep.."[[:Categoría:Autores-"..argus['inicial'].."|Autores-"..argus['inicial'].."]]") --enlace a Autores-X end --- Índice de autores --- --indice = enlaces:tag('div') --indice -- :addClass('bc-enlace') -- :wikitext("[[:Categoría:Autores|Índice de autores]]") -- Texto de al medio if argus['texto'] ~= '' and argus['texto'] ~= nil then medio:wikitext(argus['texto']) else local description = remove_parentheses(mw.wikibase.getDescription()) medio:wikitext("'''"..nombre.."'''<br/>("..textofechas..')<br/>'..(description or '')) categorias = categorias..'[[Categoría:Wikisource:Autores con texto automático]]' end -- Firma ( aun no se puede conectar con otras Q de wikidata :( ) --if argus['wikidata']== '' then if propiedad ('p109') ~= '' then medio:wikitext("<br><br> [[File:"..propiedad('p109',{['uno']='sí'}).."|frameless|99999x50px|center|Firma]]") end --else -- if propiedad ('p109',{['entidad']=argus['wikidata']}) ~= '' then -- medio:wikitext("<br><br> [[File:"..propiedad('p109',{['uno']='sí',['entidad']=argus['wikidata']}).."|frameless|center|Firma]]") -- end -- end -- Retrato autor -- local sexo = propiedad('p21') if argus['foto'] ~= '' and argus['foto'] ~= nil then foto:wikitext("[[File:"..argus['foto'].."|frameless|99999x150px|center]]") elseif propiedad('p18') ~= '' then foto:wikitext("[[File:"..propiedad('p18',{['uno']='sí'}).."|frameless|99999x150px|"..propiedad('p18',{['calificador']='P2096',['idioma']='es'}).."|center]]") else local faltaFoto local fotos = {'Silver - replace this image male.svg', 'Silver - replace this image female.svg','Falta foto.jpg'} if sexo == "masculino" then faltaFoto = fotos[1] elseif sexo == "femenino" then faltaFoto = fotos[2] else faltaFoto = fotos[3] end foto:wikitext("[[File:"..faltaFoto.."|frameless|99999x150px|center]]") end --Plantilla de derechos if anomuerte ~='' and anomuerte ~= nil then derechos :wikitext(frame:preprocess("{{DP-Autor|"..anomuerte.."}}")) elseif anosmuerte ~='' and anosmuerte ~= nil then derechos :wikitext(frame:preprocess("{{DP-AUTOR-"..anosmuerte.."}}")) else derechos :wikitext(frame:preprocess("{{DP-AUTOR-none}}")) end -- categorías-- categorias=categorias.."[[Categoría:Autores]]" if argus['vivo'] and mw.ustring.lower(argus['vivo']) ~= 'no' then categorias=categorias.."[[Categoría:Personas vivas]]" end -- categorizar por país: primera prioridad la tienen if argus['país'] ~= nil and argus['país'] ~='' then categorias=categorias.."[[Categoría:Autores "..frame:preprocess("{{gentilicio|"..argus['país'].."|mp}}").."]]" else argus['país'] = propiedad('P27',{['conjunción']=',',['enlace']='no'}) if argus['país'] ~= nil and argus['país'] ~='' then for _,v in ipairs(mw.text.split(argus['país'], '[,]')) do --el módulo Wikidata entrega la información en palabras separadas por coma. Esto convierte esa información en una tabla y itera en sus ítems (para autores con más de una nacionalidad) --categoría Autores por país: usa plantilla {{gentilicio}} categorias=categorias.."[[Categoría:Autores "..frame:preprocess("{{gentilicio|"..v.."|mp}}").."]]" end else categorias=categorias.."[[Categoría:Wikisource:Artículos de autores sin país]]" end end for k,v in pairs(argus) do if params[k] then if params[k] == 0 then categorias = categorias..'[[Categoría:Wikisource:Artículos que usan parámetros obsoletos en la plantilla Biocitas]]' --añade categoría de seguimiento a parámetros obsoletos (declarados arriba) end else html:wikitext(errorMessage('Error: parámetro '..k..' no reconocido')) categorias=categorias..'[[Categoría:Wikisource:Artículos que usan parámetros no reconocidos en la plantilla Biocitas]]' end end if mw.title.getCurrentTitle().namespace ~= 106 then --solo categorías en el espacio principal categorias = '' end html:wikitext(categorias) return tostring(html) .. '\n__NOTOC__' end return p a7i3b8z81uk5farfl2x75lzcjituf0e Módulo:Biocitas/pruebas 828 217415 1653862 1488630 2026-05-15T01:34:02Z Ignacio Rodríguez 3603 actualizo zona de pruebas 1653862 Scribunto text/plain local p = {} local Wikidata = require('Módulo:Wikidata') local Enlaces = require('Módulo:Enlaces') local Str = require('Módulo:String') local Entidad = mw.wikibase.getEntityObject() or '' -- Tabla con los datos en Wikidata de la persona. --parámetros reconocidos. 1 = vigente, 0 = obsoleto local params ={['texto']=1,['obras']=1,['documentos']=1,['foto']=1,['wikipedia']=0,['wikiquote']=0,['commons']=0,['wikispecies']=0,['wikidata']=1,['añomuerte']=1,['siglomuerte']=1,['añonacimiento']=1,['siglonacimiento']=1,['ordenar']=1,['inicial']=1,['añosmuerte']=0,['vivo']=1,['país']=1} local categorias = '' local withoutEpoque = true -- Función que devuelve la lista de los valores de una propiedad en Wikidata formateados local function propiedad(idPropiedad,opciones) if Entidad and Entidad.claims then --and Entidad.claims[idPropiedad] then if not opciones then opciones = {} end idPropiedad = string.upper(idPropiedad) opciones['propiedad'] = idPropiedad local valorPropiedad = Wikidata.getPropiedad(opciones,Entidad.claims[idPropiedad]) if not valorPropiedad or valorPropiedad == '' then return '' end return valorPropiedad else return '' end end local function errorMessage(text) -- Función que entrega un mensaje de error formateado como tal local html = mw.html.create('div') html:addClass('error') :wikitext(text) categorias=categorias..'[[Categoría:Wikisource:Artículos con errores en la plantilla Biocitas]]' return tostring(html) end -- Función para eliminar contenido entre paréntesis local function remove_parentheses(text) -- Sustituye todo lo que está entre paréntesis (incluyendo los paréntesis) por una cadena vacía if text==nil then return "" end local texto = text:gsub("%b()", "") if texto ~= nil then return texto else return text end end local function computeCenturyFromYear(year) -- Dado un año entrega el siglo if year >= 0 then return math.ceil(year / 100) else return -math.ceil(-year / 100) end end local function getTextForCentury(century) -- Dado un siglo en número, entrega un texto preformateado con -- números romanos y un indicador de antes de Cristo. local romanNumbers1 = {'', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X'} local romanNumbers2 = {'', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'} local text = romanNumbers2[math.floor(math.abs(century) / 10) + 1] .. romanNumbers1[math.floor(math.abs(century) % 10) + 1] if century > 0 then return 'Siglo '..text else return 'Siglo '.. text .. ' a. C.' end end local function getTextForYear(year) -- transforma un año de formato -45 a 45 a. C. local text = math.abs(year) if year < 0 then text = text .. ' a. C.' end return text end local function getDateFromArgs(args, field) -- Obtiene datos (fecha de nacimiento, fallecimiento) de parámetros determinados en la plantilla {{Biocitas}} -- con el formato AñoNacimiento, AñoMuerte, SigloNacimiento o SigloMuerte. TextoNacimiento o InciertoNacimiento también funciona local struct = { year = nil, century = nil, text = nil, precision = 0 } --extract year or century local date = args['año' .. field] if date == nil then date = args[field] end if tonumber(date) ~= nil then struct.year = tonumber(date) if struct.year == 0 then struct.text = errorMessage("¡El calendario gregoriano no tiene año 0!") return struct end struct.century = computeCenturyFromYear(struct.year) struct.precision = 9 elseif args['siglo' .. field] ~= nil then struct.century = tonumber(args['siglo' .. field]) struct.precision = 7 end --build text if struct.year ~= nil then struct.text = getTextForYear(struct.year) elseif struct.century ~= nil then struct.text = getTextForCentury(struct.century, true) else struct.text = date end if args['texto' .. field] ~= nil then struct.precision = 0 --we don't know anything struct.text = args['texto' .. field] .. ' ' .. struct.text end if args['incierto' .. field] ~= nil and struct.text ~= nil then struct.precision = 0 --we don't know anything struct.text = args['incierto' .. field] .. ' ' .. struct.text end return struct end local function parseWbTime(value) local _,_, year = string.find(value.time, '([%+%-]%d%d%d+)%-') year = tonumber(year) return { year = year, century = computeCenturyFromYear(year), text = nil, precision = value.precision } end local function getDateFromTimeStatement(statement, field) local struct = { year = nil, century = nil, text = nil, precision = 0 } local prefix = '' local snak = statement.mainsnak if snak.snaktype == 'novalue' then return struct end if statement.qualifiers ~= nil then if statement.qualifiers.P1480 ~= nil then for _,qualifier in pairs(statement.qualifiers.P1480) do if qualifier.datavalue.value['numeric-id'] == 5727902 then struct = parseWbTime(snak.datavalue.value) prefix = 'circa ' struct.precision = 8 --TODO: hacky end end end if statement.qualifiers.P1319 ~= nil then for _,qualifier in pairs(statement.qualifiers.P1319) do struct = parseWbTime(qualifier.datavalue.value) prefix = 'después de' struct.precision = 8 --TODO: hacky end elseif statement.qualifiers.P1326 ~= nil then for _,qualifier in pairs(statement.qualifiers.P1326) do struct = parseWbTime(qualifier.datavalue.value) prefix = 'antes de ' struct.precision = 8 --TODO: hacky end elseif statement.qualifiers.P1317 ~= nil then for _,qualifier in pairs(statement.qualifiers.P1317) do struct = parseWbTime(qualifier.datavalue.value) prefix = 'floruit ' struct.precision = 8 --TODO: hacky end else struct = parseWbTime(snak.datavalue.value) end elseif snak.snaktype == 'value' then struct = parseWbTime(snak.datavalue.value) else return struct end --Create text if struct.precision >= 9 then struct.text = prefix .. getTextForYear(struct.year) elseif struct.precision == 8 then struct.text = prefix .. getTextForYear(struct.year) elseif struct.precision == 7 then struct.text = prefix .. getTextForCentury(struct.century, true) else struct.text = errorMessage('La fecha de ' .. field .. ' tiene muy poca precisión en Wikidata') end return struct end local function getDateFromTimeStatements(statements, field) -- Función que obtiene las fechas desde Wikidata (copiada literal sin adaptaciones desde la frWS) if #statements == 0 then return { precision = 0 } end local time = nil for _, statement in pairs(statements) do local newTime = getDateFromTimeStatement(statement, field) if time == nil then time = newTime elseif time.year ~= newTime.year then --si hay años contradictorios time.precision = 8 --html:wikitext(errorMessage('Hay varios años de ' .. field .. ' posibles en Wikidata. Una manera de resolver este error es fijar una de las dos fechas como "preferida".')) --return { --text = errorMessage('Hay varios años de ' .. field .. ' posibles en Wikidata. Una manera de resolver este error es fijar una de las dos fechas como "preferida".'), -- precision = 0 --} end end if time == nil then return { precision = 0 } end return time end local function resolverFecha(arg, wd) local fecha = arg if arg.text == nil and wd ~= nil then fecha = wd elseif arg.text ~= nil then categorias = categorias..'[[Categoría:Wikisource:Artículos con datos locales]]' if wd and wd.text == nil then categorias = categorias..'[[Categoría:Wikisource:Artículos con datos por trasladar a Wikidata]]' end end return fecha end local function categoriaEpoca(fecha, tol) local categoria = '' if fecha.century ~= nil and (fecha.year == nil or fecha.year <= fecha.century * 100 + tol or fecha.precision <=8 ) then if 14 <= fecha.century then categoria='[[Categoría:Autores del ' .. getTextForCentury(fecha.century, false) .. ']]' end if 6 <= fecha.century and fecha.century <= 14 then categoria=categoria..'[[Categoría:Autores de la Edad Media]]' end if fecha.century < 6 then categoria='[[Categoría:Autores de la Antigüedad]]' end withoutEpoque = false end return categoria end function p.biocitas( frame ) -- función principal para llamar desde {{biocitas}} if mw.title.getCurrentTitle().namespace ~= 106 then return errorMessage('La plantilla Biocitas se utiliza solo en espacios de nombres Autor, por ejemplo Autor:Miguel de Cervantes') end local argus = {} for k,v in pairs(frame:getParent().args) do -- crea una tabla con los parámetros incluídos en la plantilla, y elimina parámetros vacíos if v ~= '' and type(k) ~= 'number' then argus[mw.ustring.lower(k)] = v -- todos los parámetros en minúsculas por defecto: end end local html = mw.html.create() -- cuerpo principal de la plantilla local tabla = html:tag('table'):addClass('divgrande') local divgrande = tabla:tag('tr')--:addClass('divgrande') -- div principal que contiene al resto -- WIKIDATA! -- if Entidad == '' and argus['wikidata'] then Entidad = mw.wikibase.getEntityObject(argus['wikidata']) end if Entidad == '' then categorias=categorias..'[[Categoría:Wikisource:Artículos de autores no conectados a Wikidata]]' html:wikitext(errorMessage('<small>Error: Los artículos de autores deben estar enlazados en Wikidata. '.. 'Agrega un enlace a otro proyecto usando el link en la columna izquierda, '.. 'o '..frame:preprocess('[https://www.wikidata.org/wiki/Special:NewItem?site=eswikisource&page={{FULLPAGENAMEE}} crea un nuevo elemento en Wikidata]')..'</small>')) end ---- variables para manejar fechas de muerte y nacimiento local nacimientoArg = getDateFromArgs(argus, 'nacimiento') local muerteArg = getDateFromArgs(argus, 'muerte') local floruitArg = getDateFromArgs(argus, 'floruit') local nacimientoWikidata = nil local muerteWikidata = nil local floruitWikidata = nil if Entidad ~= nil and Entidad ~= '' then --si existe la entidad en Wikidata, obtiene las fechas desde ahí. nacimientoWikidata = getDateFromTimeStatements(Entidad:getBestStatements('P569'), 'nacimiento') muerteWikidata = getDateFromTimeStatements(Entidad:getBestStatements('P570'), 'muerte') floruitWikidata = getDateFromTimeStatements(Entidad:getBestStatements('P1317'), 'floruit') floruitWikidata.precision = 8 end local nacimiento = resolverFecha(nacimientoArg, nacimientoWikidata) local muerte = resolverFecha(muerteArg, muerteWikidata) local floruit = resolverFecha(floruitArg, floruitWikidata) if nacimiento.precision >= 9 and nacimiento.year > 1300 then categorias=categorias..'[[Categoría:N' .. nacimiento.year .. ']]' end if muerte.precision >= 9 and muerte.year > 1300 then categorias=categorias..'[[Categoría:F' .. muerte.year .. ']]' end categorias=categorias..categoriaEpoca(nacimiento, -20) categorias=categorias..categoriaEpoca(muerte, 5) categorias=categorias..categoriaEpoca(floruit, 0) if withoutEpoque then categorias=categorias..'[[Categoría:Época desconocida]]' end --año de la muerte, para las plantillas local anomuerte local anosmuerte = argus['añosmuerte'] if muerte.year then anomuerte = getTextForYear(muerte.year) elseif muerte.century then anomuerte = muerte.century*100 elseif argus['añomuerte'] ~= '' and argus['añomuerte'] ~= nil then anomuerte = argus['añomuerte'] elseif argus['siglomuerte'] ~= '' and argus['siglomuerte'] ~= nil then anomuerte = (tonumber(argus['siglomuerte']))*100 elseif floruit.year then --muerte presunta 70 años después de florecer anomuerte = getTextForYear(floruit.year + 70) elseif floruit.century then --si sólo se conoce el siglo, murió a mediados de siglo anomuerte = floruit.century*100 - 50 end --artículos sin información de año de muerte if (argus['vivo']==nil or argus['vivo']=='') and (anomuerte == '' or anomuerte ==nil) and (muerte.century == '' or muerte.century ==nil) then categorias = categorias..'[[Categoría:Wikisource:Artículos de autores sin información de año de muerte]]' end -- texto fechas local textofechas = '' if nacimiento.text or muerte.text then textofechas = (nacimiento.text or '')..' - '..(muerte.text or '') elseif floruit.text then textofechas = 'fl. '..floruit.text end -- esqueleto y CSS de los divs internos local foto = divgrande:tag('td'):addClass('bc-foto') local medio = divgrande:tag('td'):addClass('bc-medio') --local divtitulo = medio:tag('div'):addClass('bc-titulo') local enlaces = divgrande:tag('td'):addClass('bc-enlaces') local derechos = html:tag('div'):addClass('bc-derechos') --variables locales local sep = "<span style='display:inline-block; width:.5em;'>&nbsp;</span>" local nombre = frame:preprocess("{{PAGENAME}}") --Contenido de los divs secundarios --divtitulo:wikitext("Ficha de ".. nombre:gsub(' %(.*%)','')) --en el título nombres sin paréntesis -- Lista de enlaces if (not argus['wikidata'] or argus['wikidata'] == '') and Entidad~=nil then argus['wikidata']=Entidad.id --enlazar a elemento wikidata end ---- Enlaces uno por uno --- local listaenlaces = Enlaces.all(argus) if argus['obras'] ~= 'none' then --Obras (aparece siempre por defecto a menos que se defina como none) listaenlaces["obras"] = { ['name'] = 'Categoría de obras', ['image'] = 'Wikisource-logo.svg', ['text'] = 'Obras', ['prefix'] = ':Categoría:Obras de ', ['title'] = '', } if argus['obras'] ~= '' and argus['obras'] ~= nil then listaenlaces["obras"]["title"] = argus['obras'] else listaenlaces["obras"]["title"] = nombre end end -- crea elementos para el resto de los enlaces listaenlaces["documentos"] = { ['name'] = 'Categoría de documentos', ['image'] = 'Wikisource-logo.svg', ['text'] = 'Documentos ', ['prefix'] = ':Categoría:Documentos de ', ['title'] = argus['documentos'] or '', } -- texto propio de biocitas listaenlaces["eswiki"]["text"] = "Biografía" listaenlaces["eswikiquote"]["text"] = "Citas" listaenlaces["commonswiki"]["text"] = "Multimedia" listaenlaces["specieswiki"]["text"] = "Especies descritas" listaenlaces["wikidata"]["text"] = "Metadatos" local orden = {'obras', 'documentos', 'eswiki', 'eswikiquote', 'commonswiki', 'specieswiki', 'wikidata'} local textoenlaces = Enlaces.formattedbiocitas(listaenlaces, orden) enlaces:wikitext(textoenlaces) --llave automágica local apellidos = mw.text.trim((propiedad('p734',{['uno']='sí'}) or '')..' '..(propiedad('p1950',{['uno']='sí'}) )) local nombres = (propiedad('P735',{['conjunción']=' '}) or '') if apellidos == '' or apellidos == nil then --p.ej. Alonso de Villegas, Autor:Jerónimo Bécker, etc. apellidos = nombres --Mejor que "Autores-," cuando no existe apellido end if string.sub(apellidos,1,3) == 'de ' then apellidos = string.sub(apellidos,4) end local llave=(apellidos..', '..nombres) ~= ', ' and (apellidos..', '..nombres) mw.log(llave) -- Ordenar e Iniciales-- if argus['ordenar']==nil and llave then argus['ordenar'] = llave end if argus['ordenar'] ~= nil then if argus['inicial'] == nil then argus['inicial'] = Str.CaracterParaOrdenar(argus['ordenar']) --Si no está especificada la inicial, la saca de la primera letra de la llave de ordenado. end html:wikitext(frame:preprocess('{{DEFAULTSORT:' .. argus['ordenar'] .. '}}')) categorias=categorias..'[[Categoría:Autores-'..argus['inicial']..']]' --categoría Autores-X else html:wikitext(errorMessage("El parámetro «|Ordenar=» es obligatorio")) categorias=categorias..'[[Categoría:Wikisource:Artículos de autores sin llave de ordenamiento]]' --categoría Autores-X end if argus['ordenar'] ~= nil then -- Véase también enlaces:tag('div') :addClass('bc-enlace') :wikitext("◄"..sep.."[[:Categoría:Autores-"..argus['inicial'].."|Autores-"..argus['inicial'].."]]") --enlace a Autores-X end --- Índice de autores --- --indice = enlaces:tag('div') --indice -- :addClass('bc-enlace') -- :wikitext("[[:Categoría:Autores|Índice de autores]]") -- Texto de al medio if argus['texto'] ~= '' and argus['texto'] ~= nil then medio:wikitext(argus['texto']) else local description = remove_parentheses(mw.wikibase.getDescription()) medio:wikitext("'''"..nombre.."'''<br/>("..textofechas..')<br/>'..(description or '')) categorias = categorias..'[[Categoría:Wikisource:Autores con texto automático]]' end -- Firma ( aun no se puede conectar con otras Q de wikidata :( ) --if argus['wikidata']== '' then if propiedad ('p109') ~= '' then medio:wikitext("<br><br> [[File:"..propiedad('p109',{['uno']='sí'}).."|frameless|99999x50px|center|Firma]]") end --else -- if propiedad ('p109',{['entidad']=argus['wikidata']}) ~= '' then -- medio:wikitext("<br><br> [[File:"..propiedad('p109',{['uno']='sí',['entidad']=argus['wikidata']}).."|frameless|center|Firma]]") -- end -- end -- Retrato autor -- local sexo = propiedad('p21') if argus['foto'] ~= '' and argus['foto'] ~= nil then foto:wikitext("[[File:"..argus['foto'].."|frameless|99999x150px|center]]") elseif propiedad('p18') ~= '' then foto:wikitext("[[File:"..propiedad('p18',{['uno']='sí'}).."|frameless|99999x150px|"..propiedad('p18',{['calificador']='P2096',['idioma']='es'}).."|center]]") else local faltaFoto local fotos = {'Silver - replace this image male.svg', 'Silver - replace this image female.svg','Falta foto.jpg'} if sexo == "masculino" then faltaFoto = fotos[1] elseif sexo == "femenino" then faltaFoto = fotos[2] else faltaFoto = fotos[3] end foto:wikitext("[[File:"..faltaFoto.."|frameless|99999x150px|center]]") end --Plantilla de derechos if anomuerte ~='' and anomuerte ~= nil then derechos :wikitext(frame:preprocess("{{DP-Autor|"..anomuerte.."}}")) elseif anosmuerte ~='' and anosmuerte ~= nil then derechos :wikitext(frame:preprocess("{{DP-AUTOR-"..anosmuerte.."}}")) else derechos :wikitext(frame:preprocess("{{DP-AUTOR-none}}")) end -- categorías-- categorias=categorias.."[[Categoría:Autores]]" if argus['vivo'] and mw.ustring.lower(argus['vivo']) ~= 'no' then categorias=categorias.."[[Categoría:Personas vivas]]" end -- categorizar por país: primera prioridad la tienen if argus['país'] ~= nil and argus['país'] ~='' then categorias=categorias.."[[Categoría:Autores "..frame:preprocess("{{gentilicio|"..argus['país'].."|mp}}").."]]" else argus['país'] = propiedad('P27',{['conjunción']=',',['enlace']='no'}) if argus['país'] ~= nil and argus['país'] ~='' then for _,v in ipairs(mw.text.split(argus['país'], '[,]')) do --el módulo Wikidata entrega la información en palabras separadas por coma. Esto convierte esa información en una tabla y itera en sus ítems (para autores con más de una nacionalidad) --categoría Autores por país: usa plantilla {{gentilicio}} categorias=categorias.."[[Categoría:Autores "..frame:preprocess("{{gentilicio|"..v.."|mp}}").."]]" end else categorias=categorias.."[[Categoría:Wikisource:Artículos de autores sin país]]" end end for k,v in pairs(argus) do if params[k] then if params[k] == 0 then categorias = categorias..'[[Categoría:Wikisource:Artículos que usan parámetros obsoletos en la plantilla Biocitas]]' --añade categoría de seguimiento a parámetros obsoletos (declarados arriba) end else html:wikitext(errorMessage('Error: parámetro '..k..' no reconocido')) categorias=categorias..'[[Categoría:Wikisource:Artículos que usan parámetros no reconocidos en la plantilla Biocitas]]' end end if mw.title.getCurrentTitle().namespace ~= 106 then --solo categorías en el espacio principal categorias = '' end html:wikitext(categorias) return tostring(html) .. '\n__NOTOC__' end return p a7i3b8z81uk5farfl2x75lzcjituf0e Plantilla:Sangría/doc 10 221135 1653805 979765 2026-05-14T13:46:49Z Ignacio Rodríguez 3603 advertencia 1653805 wikitext text/x-wiki {{Subpágina documentación}} <!-- POR FAVOR, AÑADE LAS CATEGORÍAS E INTERWIKIS AL FINAL DE ESTA PÁGINA. --> <!-- Si te dispones a documentar una plantilla de mantenimiento, por favor considera adoptar el formato de [[Wikipedia:Documentación de plantillas de mantenimiento]]--> == Uso == '''ATENCIÓN: Esta plantilla no debe usarse para formatear los textos en general, sino únicamente en las escasísimas excepciones en que un párrafo se «sangra» por un motivo en particular de una manera distinta al resto del texto'''. {{epc|sangría|«número»|«texto»}} === Ejemplos === * {{epc|sangría|3em|texto}} da como resultado: {{sangría|3em|texto}} * {{epc|sangría|3em|Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.}} da como resultado: {{sangría|3em|Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.}} <includeonly> <!-- Coloca las categorías de la plantilla a continuación y los interwikis en Wikidata --> [[Categoría:Wikisource:Plantillas de formato de texto]] </includeonly> 457li5obiefuc3o5yhbc0m4cthcguos Módulo:Encabezado 828 221955 1653827 1648193 2026-05-14T15:37:32Z Ignacio Rodríguez 3603 delink centralizado 1653827 Scribunto text/plain require('strict') local p = {} local Wikidata = require('Módulo:Wikidata') local QID = mw.wikibase.getEntityIdForCurrentPage() local Str = require('Módulo:String') local delink = Str.delink local Args = require('Módulo:Arguments') local Enlaces = require('Módulo:Enlaces') local categorias = {} local errorcats = {} local lang = mw.language.new('es') --parámetros reconocidos. 1 = vigente, 0 = obsoleto. En orden alfabético: local params = {['ano']=1,['anterior']=1,['audio']=1,['autor']=1,["bilingüe"]=1,['catálogo']=0,['commons']=1,['commonscat']=1,['derechos']=1,['desambiguación']=1, ['editor']=1, ['editorial']=1, ['enlaces']=1,['históricos']=1,['ilustrador']=1,['imprenta']=1, ['lugar']=1, ['más info']=1,['meta']=1,['noano']=1,['notas']=1, ['progreso']=1, ['próximo']=1, ['sección']=1,['sección autor']=1,['sub-titulo']=1,['subsección']=1,['subpágina']=1,['titulo']=1,['traductor']=1,['última muerte']=1, ['volumen']=1, ['wikcionario']=1,['wikidata']=1,['wikilibros']=1,['wikinoticias']=1,['wikipedia']=1,['wikiquote']=1,['wikispecies']=1,['wikiversidad']=1} local enlacePagina = mw.title.getCurrentTitle().text local textoenlace=mw.uri.encode(enlacePagina, "QUERY") local altparams= {['título']='titulo', ['title']='titulo', ['subtítulo']='sub-titulo', ['subtitulo']='sub-titulo', ['sub-título']='sub-titulo', ['sub-title']='sub-titulo', ['subtitle']='sub-titulo', ['left']='anterior', ['right']='próximo', ['siguiente']='próximo', ['author']='autor', ['traducción']='traductor', ['año']='ano', ['bilingue']='bilingüe', ['noaño']='noano', ['nota']='notas', ['subpagina']='subpágina', ['seccion']='sección', ['seccion autor']='sección autor', ['seccion-autor']='sección autor', ['sección-autor']='sección autor' } local function aCadena(t) if type(t) == 'string' then return t end return mw.text.listToText(t, ', ', ' y ') end local function nav_link(argus, class, arrow, content) local span = mw.html.create('span'):addClass(class..'-span') span:tag('span'):addClass(class..'-span-arrow') if class=='prev' then span:wikitext(arrow .. ' ' .. content) end if class=='next' then span:wikitext(content .. ' ' .. arrow) end if argus['enlaces'] and mw.ustring.lower(argus['enlaces']) == 'no' then span:cssText('display:none') end return tostring(span) end local function errorMessage(text) -- Función que entrega un mensaje de error formateado como tal local html = mw.html.create('div') html:addClass('error') :wikitext(text) table.insert(errorcats, '[[Categoría:Wikisource:Páginas con errores en la plantilla Encabe]]') return tostring(html) end local function linktarget(s) if not s:match("%[%[") then return s end local result = s -- Find the display area of the wikilink if result:match("|") then -- Find if we're dealing with a pipecd link. result = result:match("%[%[(.+)%|.+%]%]") else result = result:match("%[%[(.-)%]%]") end return result end local function link(s) if s:find("[%[%{%<]") then return s else return '[[Autor:'..s..'|'..s..']]' end end local deAutor = function(s) --Para [[Autor:AAA|BBB]], devuelve AAA -- remover entidades html s = s:gsub("<[%a%d%s%\"'/#;:=]+>", "") local m = mw.ustring.match(s, '%[%[Autor:(.+)%|.+%]%]') if m and m ~= '' then return m end m = mw.ustring.match(s, '%[%[Autor:(.+)%]%]') if m and m ~= '' then return m end --enlaces a wikidata u otros m = mw.ustring.match(s, '%[%[.+%|(.+)%]%]') if m and m ~= '' then return m end return delink(s) end local function enlaceMicroformato(param, valor) if valor and valor ~= '' then if type(valor) == 'string' then return mw.html.create('span') :addClass('ws-' .. param) --ws-author, ws-title, etc. :wikitext(delink(valor)) elseif type(valor) == 'table' then local spans = {} for _, v in pairs(valor) do table.insert(spans, tostring(mw.html.create('span') :addClass('ws-' .. param) :wikitext(delink(v))) ) end return table.concat(spans) end end return '' end local function microformato(d, argus) local microformat = mw.html.create('div') :cssText('display:none') :attr('id', 'ws-data') :addClass('ws-noexport') -- todo: no captura datos del Índice si tiene otro Wikidata (p.ej. Q88887973) -- todo: los que no están en [[Plantilla:Proofreadpage header template]] (lugar, volumen, nivel) no llegan del -- índice y sólo los captura de Wikidata. if d.titulo and d.titulo ~= '' then microformat:node( enlaceMicroformato( 'title', d.titulo ) ) microformat:node( enlaceMicroformato( 'key', d.titulo ) ) --todo: mejorable end if d.ano and d.ano ~= '' then microformat:node( enlaceMicroformato( 'year', d.ano ) ) end if d.autor and d.autor ~= '' then microformat:node( enlaceMicroformato( 'author', d.autor ) ) end if d.traductor and d.traductor ~= '' then microformat:node( enlaceMicroformato( 'translator', d.traductor ) ) end if d.ilustrador and d.ilustrador ~= '' then microformat:node( enlaceMicroformato( 'illustrator', d.ilustrador ) ) end if argus["sección"] and argus["sección"] ~= '' then microformat:node( enlaceMicroformato( 'chapter', argus["sección"] ) ) end if d.imprenta and d.imprenta ~= '' then --ojo: Editorial ~= Editor ~= Imprenta microformat:node( enlaceMicroformato( 'publisher', d.imprenta ) ) end if d.lugar and d.lugar ~= '' then microformat:node( enlaceMicroformato( 'place', d.lugar ) ) end if d.nivel and d.nivel ~= '' then microformat:node( enlaceMicroformato( 'progress', d.nivel ) ) --puede que esté roto end if d.volumen and d.volumen ~= '' then microformat:node( enlaceMicroformato( 'volume', d.volumen ) ) end --todo: pdte. (¿adaptar de [[:ca:Module:Header]]?) --if argus.index then -- microformat:node( enlaceMicroformato( 'scan', argus.index ) ) -- if argus.image and mw.ustring.match(argus.image, '^%d+$') ~= nil then -- microformat:node( enlaceMicroformato( 'cover', argus.index .. '/' .. argus.image ) ) -- end -- end --todo: ¿extraer de listaenlaces? argus.x ~= listaenlaces if argus.wikipedia and argus.wikipedia ~= '' then microformat:node( enlaceMicroformato( 'wikipedia', argus.wikipedia ) ) end if argus.wikiquote and argus.wikiquote ~= '' then microformat:node( enlaceMicroformato( 'wikiquote', argus.wikiquote ) ) end if argus.commonscat and argus.commonscat ~= '' then microformat:node( enlaceMicroformato( 'commons', argus.commons ) ) end if argus.notas and argus.notas ~= '' then microformat:tag('div') --no puede ser span :addClass('ws-summary') :wikitext(argus.notas) end return tostring(microformat) end -- Elije entre info local o Wikidata local function resolverWikidataNivel(argus, parametro) local ws = argus[parametro] --nivel local badges = Wikidata.badge{args={qid=argus['wikidata'], ws=ws, indicator=true}} return mw.getCurrentFrame():preprocess(badges) end local function resolverWikidata(argus, parametro, PID) local ws = argus[parametro] if not ws or ws == '' then ws = Wikidata.claim{item=argus['wikidata'], property=PID, lang="es", list=false} end if ws and ws~= '' then return ws end end local function resolverWikidataPersona(argus, parametro, PID) local ws = argus[parametro] if ws == 'no' then return end if ws and ws~= '' then ws = mw.text.split(ws, '[/,]') for i, v in ipairs(ws) do v = mw.text.trim(v) if v == 'Wikisource' then ws[i] = '[[Ayuda:Directrices para traducciones|Wikisource]]' else ws[i] = link(v) end end elseif not ws or ws == '' then ws = Wikidata.claim{item=argus['wikidata'], property=PID, lang="es", tabla=true} end if ws and ws~= '' then return ws end end local function consolidado(argus) local data = {} local props = { titulo = {'titulo', 'P1476'}, subtitulo = {'sub-titulo', 'P1680'}, ano = {'ano', 'P577'}, lugar = {'lugar', 'P291'}, imprenta = {'imprenta', 'P872'}, volumen = {'volumen', 'P478'}, edicionde = {'versiones', 'P629'}, partede = {'partede', 'P361'}, autor = {'autor','P50', persona = true}, traductor = {'traductor', 'P655', persona = true}, ilustrador = {'ilustrador', 'P110', persona = true}, nivel = {'progreso', nivel=true}, } for k, v in pairs(props) do if v.nivel then data[k] = resolverWikidataNivel(argus, v[1]) elseif v.persona then data[k] = resolverWikidataPersona(argus, v[1], v[2]) else data[k] = resolverWikidata(argus, v[1], v[2]) end end return data end local function buscaDesam(title) local match = string.match( title.text, '(.-) %(.-%)') if not match then return end local desam = mw.title.new(match) for i, cat in ipairs(desam.categories) do if cat == 'Wikisource:Páginas de desambiguación' then return match end end end local function personaCats(t, catprefix, categorias) if t then for i, v in ipairs(t) do local delinked = delink(v) if (delinked == 'Anónimo') or (delinked == 'valor desconocido') then t[i] = '[[Autor:Anónimo|Anónimo]]' table.insert(categorias, '[[Categoría:'..catprefix..' de autor anónimo]]') else table.insert(categorias, '[[Categoría:'..catprefix..' de '..deAutor(v):match("^%s*(.-)%s*$") ..']]') end end end if catprefix ~= '' then return categorias end return '' end function p.encabe( frame ) local titulo = mw.title.getCurrentTitle() local html = mw.html.create() local argus = Args.getArgs(frame) argus = Args.alias(argus, altparams) local essub = titulo.isSubpage if argus['subpágina'] == 'no' then essub = false end -- QID real prevalece sobre el importado desde el índice (importante en subdivisiones) if QID and QID ~= '' then argus['wikidata'] = QID or argus['wikidata'] or '' end -- obtener todos los datos local d = consolidado(argus) --variables matemática derechos de autor local anosmuerte local anospub if d.ano and tonumber(d.ano) ~= nil then anospub = tonumber(lang:formatDate('Y')) - tonumber(d.ano) end if argus['última muerte'] and tonumber(argus['última muerte']) ~= nil then anosmuerte = tonumber(lang:formatDate('Y')) - tonumber(argus['última muerte']) end -- estructura HTML local divgrande = html:tag('div'):attr('id','headertemplate'):addClass('noprint ws-noexport notheme') -- div principal que contiene al resto local main = divgrande:tag('div'):addClass('main-div') local anterior = main:tag('div'):attr('id','headerprevious') local medio = main:tag('div'):addClass('middle-div') local proximo = main:tag('div'):attr('id','headernext') ----- enlaces de navegación if argus['anterior'] and argus['anterior'] ~= '' then anterior:wikitext(nav_link(argus, 'prev', '← ', argus['anterior'])) end if argus['próximo'] and argus['próximo'] ~= '' then proximo:wikitext(nav_link(argus, 'next', ' →', argus['próximo'])) end if d.partede then -- TODO: hacer algo con las obras que son parte de otras end -- datos bibliográficos if d.titulo and d.titulo ~= '' then medio:wikitext("'''''".. d.titulo .."'''''") if d.subtitulo then medio:wikitext(': '..'<span style="font-size:83%;">'.. d.subtitulo ..'</span>') end if d.ano and not argus['noano'] then medio:wikitext(' ('.. d.ano ..')') if tonumber(d.ano) ~= nil then table.insert(categorias, '[[Categoría:P'.. d.ano ..']]') end end medio:wikitext('<br>') else table.insert(errorcats, '[[Categoría:Wikisource:Textos sin título]]') end if d.autor then personaCats(d.autor, '', {}) medio:wikitext('de '.. aCadena(d.autor) ..'<br>') end if d.traductor then personaCats(d.traductor, 'Traducciones', categorias) medio:wikitext('traducción de '..aCadena(d.traductor)..'<br>') end if d.ilustrador then personaCats(d.ilustrador, 'Ilustraciones', categorias) medio:wikitext('ilustración de '..aCadena(d.ilustrador)..'<br>') end if argus['más info'] then medio:wikitext(argus['más info']..'<br>') end if argus['sección'] then medio:wikitext("''"..argus['sección'].."''") if argus['sección autor'] then medio:wikitext(' de '..aCadena(resolverWikidataPersona(argus, 'sección autor'))) end if argus['subsección'] then medio:tag('span'):cssText('font-size: 83%;'):wikitext('<br>'..argus['subsección']) end end if not argus['desambiguación'] and not essub then argus['desambiguación'] = buscaDesam(titulo) end -- ENLACES A PROYECTOS HERMANOS local inferior = main:tag('div'):addClass('noprint plainlinks lower-div') local listaenlaces = Enlaces.all(argus) -- TODO: pasarlo al módulo enlaces, o es muy específico de encabezado? if d.edicionde then listaenlaces[3] = { ['name'] = 'Otras versiones', ['image'] = 'OOjs_UI_icon_book-ltr.svg', ['text'] = 'otras versiones', ['prefix'] = '', ['title'] = linktarget(d.edicionde),} end --matematica y manejo derechos de autor if argus['derechos'] then listaenlaces[1] = {['text'] = argus.derechos, ['image'] = 'PD-icon.svg', ['prefix'] = ':Wikisource:Duración de derechos de autor por país#', ['title'] = argus.derechos} if (argus['última muerte'] == 'seudónimo' or argus['última muerte'] == 'anónimo') and (anospub ~= nil) then local numero = math.floor((anospub - 1)/10) if numero > 10 then numero = 10 end listaenlaces[2] = {['image'] = nil, ['text'] = tostring(numero*10)..' p.a.p. o menos', ['prefix'] = ':Wikisource:Duración de derechos de autor por país#', ['title'] = tostring(numero*10)..' p.a.p.'} table.insert(categorias, '[[Categoría:'..tostring(numero*10)..' p.a.p.]]') elseif argus['última muerte'] and (anosmuerte ~= nil) then local numero = math.floor((anosmuerte - 1)/10) if numero > 4 then --a partir de 50 p.m.a. if numero > 10 then numero = 10 end listaenlaces[2] = {['image'] = nil, ['text'] = tostring(numero*10)..' p.m.a. o menos', ['prefix'] = ':Wikisource:Duración de derechos de autor por país#', ['title'] = tostring(numero*10)..' p.m.a.'} table.insert(categorias, '[[Categoría:'..tostring(numero*10)..' p.m.a.]]') end end local cadena = argus.derechos:gsub(" y ", ", ") -- Usar string.gmatch para separar por comas y procesar directamente for nombre in cadena:gmatch("([^,]+)") do table.insert(categorias, '[[Categoría:Publicado en '.. nombre:match("^%s*(.-)%s*$") ..']]') end --categorias = categorias..'[[Categoría:Publicado en '.. argus.derechos ..']]' end -- inserta enlaces inferior:wikitext(Enlaces.formattedlinks(listaenlaces)) if argus['bilingüe'] and argus['bilingüe'] ~= '' then inferior:wikitext('['..titulo:fullUrl({['match']=argus['bilingüe']})..' ver texto bilingüe]') end --Enlaces de descarga if not essub then local LinkExport='https://ws-export.wmcloud.org/?lang=es&page='..textoenlace..'&format=' local w = "<div style=\"font-size:80%\">Descargar como &nbsp;" w = w .. "[[Archivo:EPUB silk icon.svg|12px|link="..LinkExport.."epub|Descargar en formato ePub]]&nbsp;" w = w .. "[[Archivo:Document-pdf.svg|15px|link="..LinkExport.."pdf|Descargar en formato PDF]]&nbsp;" w = w .. "[[Archivo:Mobi_icon.svg|22px|link="..LinkExport.."mobi|Descargar en formato mobi]]</div>" inferior:wikitext(w) end if argus['notas'] and argus['notas'] ~= '' then divgrande:tag('div'):addClass('notes'):wikitext("'''Nota:''' "..argus['notas']):tag('hr') end if argus['audio'] and argus['audio'] ~= '' then divgrande:tag('div'):addClass('notes'):wikitext(frame:expandTemplate{ title = 'Multimedia', args = { argus['audio'] } }) end --categorías automáticas if not essub then table.insert(categorias, '[[Categoría:ES-'..Str.CaracterParaOrdenar(titulo.rootText)..']]') else categorias = {'[[Categoría:'..titulo.rootText..']]'} html:wikitext('__EXPECTED_UNCONNECTED_PAGE__') end for k,v in pairs(argus) do if params[k] or altparams[k] then if params[k] == 0 then table.insert(errorcats, '[[Categoría:Wikisource:Páginas que usan parámetros obsoletos en la plantilla Encabe]]') --añade categoría de seguimiento a parámetros obsoletos (declarados arriba) end else html:wikitext(errorMessage('Error: parámetro '..k..' no reconocido')) table.insert(errorcats, '[[Categoría:Wikisource:Páginas que usan parámetros no reconocidos en la plantilla Encabe]]') end end if titulo.namespace ~= 0 then --solo categorías en el espacio principal categorias = {} end table.sort(categorias) html:wikitext(table.concat(categorias)) html:wikitext(table.concat(errorcats)) html:wikitext(microformato(d, argus)) return tostring(html) end return p 9gepevbn1njudd2774syfk39b0ajy2j Módulo:Documento ONU 828 224684 1653837 1547694 2026-05-14T16:02:05Z Ignacio Rodríguez 3603 lua lints 1653837 Scribunto text/plain -- Módulo en desarrollo -- TODO Detectar automáticamente tipo de resolución, período y número desde el título de la página local p = {} local Enlaces = require('Módulo:Enlaces') local function toRoman(number) local romanNumbers1 = {'', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X'} local romanNumbers2 = {'', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'} return romanNumbers2[math.floor(math.abs(number) / 10) + 1] .. romanNumbers1[math.floor(math.abs(number) % 10) + 1] end function p.documento(frame) local argus = {} local ordenar = '' local fuente= 'https://undocs.org/es/' for k,v in pairs(frame:getParent().args) do -- crea una tabla con los parámetros incluídos en la plantilla, y elimina parámetros vacíos if v ~= '' and type(k) ~= 'number' then argus[mw.ustring.lower(k)] = v -- todos los parámetros en minúsculas por defecto: end end local enlacePagina = mw.title.getCurrentTitle().text local texto = mw.uri.encode(enlacePagina, "QUERY") local html = mw.html.create() -- cuerpo principal de la plantilla local divgrande = html:tag('div'):addClass('noprint') -- div principal que contiene al resto local tabla = divgrande:tag('table'):css('font-size','87%'):css('width', '100%') local fila1 = tabla:tag('tr') local celda1=fila1:tag('td'):attr('width','15%'):css('text-align','left') local celda2=fila1:tag('td'):css('text-align','center') local celda3=fila1:tag('td'):attr('width','15%'):css('text-align','right') local fila2=tabla:tag('tr') local celda4=fila2:tag('td'):attr('colspan','3'):css('font-size','120%'):css('text-align','center'):css('background','#B7C4E4'):css('border','1px solid #4488cc'):css('padding','12px') local anterior = nil local siguiente = nil -- inferencia número del título if not argus['número'] and string.match( enlacePagina, 'Resolución (%d+)') then argus['número'] = string.match( enlacePagina, 'Resolución (%d+)') end if argus['anterior']~='' and argus['anterior']~=nil then --Para el caso de que la resolución anterior no siga la regularidad numérica anterior=argus['anterior'] --se pasa el número por parámetro de la plantilla else if tonumber(argus['número'])~=nil then anterior= tostring(tonumber(argus['número'])-1) --Para número de resolución anterior end end if argus['siguiente']~='' and argus['siguiente']~=nil then --Para el caso de que la resolución siguiente no siga la regularidad numérica siguiente=argus['siguiente'] --se pasa el número por parámetro de la plantilla else if tonumber(argus['número'])~=nil then siguiente=tostring(tonumber(argus['número'])+1) --Para número de resolución siguiente end end -- Según tipos de resoluciones if argus['tipo'] == 'S/RES' then --Resoluciones del Consejo de Seguridad if argus['número']>'1' and anterior~=nil then celda1:wikitext("[[Resolución "..anterior.." del Consejo de Seguridad de las Naciones Unidas|<span style=\"color: darkgrey;\">«&nbsp;Resolución "..anterior.."&nbsp;</span>]]") end celda2:wikitext("[[Resoluciones del Consejo de Seguridad (ONU)|<span style=\"color: darkgrey;\">Lista de resoluciones</span>]]") if siguiente~=nil then celda3:wikitext("[[Resolución "..siguiente.." del Consejo de Seguridad de las Naciones Unidas|<span style=\"color: darkgrey;\">&nbsp;Resolución "..siguiente.."&nbsp;»</span>]]") end celda4:wikitext("<span style=\"font-size: 120%; font-weight: bold; font-style: oblique;\"><span style=\"font-size: 115%;\">Resolución "..argus['número'].."</span> del Consejo de Seguridad de las Naciones Unidas,</span><br/>") celda4:wikitext("aprobada por el Consejo de Seguridad") if argus['sesión']~='' and argus['sesión']~=nil then celda4:wikitext(" en su ".. argus['sesión']..".ª sesión") if argus['fecha']~='' and argus['fecha']~=nil then celda4:wikitext(", celebrada el "..argus['fecha'].." de " ..argus['año']..".") end if argus['nota']~='' and argus['nota']~=nil then celda4:wikitext(argus['nota']) end end fuente=fuente .. "S/RES/" .. argus['número'] .. "%20(" .. argus['año'] ..")" -- Categoría específica if tonumber(argus['número'])~=nil then ordenar=string.format('Resolución %04d del Consejo de Seguridad de las Naciones Unidas',argus['número']) end if mw.title.getCurrentTitle().namespace==0 then html:wikitext("[[Categoría:Resoluciones del Consejo de Seguridad de las Naciones Unidas|"..ordenar.."]]") end elseif argus['tipo'] == 'A/RES' then --Resoluciones de la Asamblea General --TODO Falta enlazar ultima resolución de un periodo en siguiente, con la primera del siguiente período celda2:wikitext("[[Resoluciones aprobadas por la Asamblea General de las Naciones Unidas durante el "..argus['período'].."º período de sesiones|<span style=\"color: darkgrey;\">Resoluciones aprobadas en el "..argus['período'].."º período de sesiones</span>]]") celda4:wikitext("<span style=\"font-size: 120%; font-weight: bold; font-style: oblique;\"><span style=\"font-size: 115%;\">") -- Si el periodo es mayor a 30 if tonumber(argus['período'])>30 then --cambia la forma de denominación de resolucion, utilizando números para el período celda4:wikitext("Resolución "..argus['período'].."/"..argus['número'].."</span> de la Asamblea General de las Naciones Unidas,</span><br/>") if anterior~=nil then celda1:wikitext("[[Resolución "..argus['período'].."/"..anterior.." de la Asamblea General de la Organización de las Naciones Unidas|<span style=\"color: darkgrey;\">«&nbsp;Resolución "..argus['período'].."/"..anterior.."&nbsp;</span>]]") end if siguiente~=nil then celda3:wikitext("[[Resolución "..argus['período'].."/"..siguiente.." de la Asamblea General de la Organización de las Naciones Unidas|<span style=\"color: darkgrey;\">&nbsp;Resolución "..argus['período'].."/"..siguiente.."&nbsp;»</span>]]") end fuente=fuente .. "A/RES/" .. argus['período'] .. "/" .. argus['número'] else -- hasta el período 30, se utilizaban números romanos del I al XXX fuente=fuente .. "A/RES/" .. argus['número'] .. "("..toRoman(argus['período'])..")" celda4:wikitext("Resolución "..argus['número'].." ("..toRoman(argus['período'])..") </span> de la Asamblea General de las Naciones Unidas,</span><br/>") if (argus['período']~='1' or argus['número']~='1') and anterior~=nil then celda1:wikitext("[[Resolución "..anterior.." ("..toRoman(argus['período'])..") de la Asamblea General de la Organización de las Naciones Unidas|<span style=\"color: darkgrey;\">«&nbsp;Resolución "..anterior.." ("..toRoman(argus['período'])..")&nbsp;</span>]]") end if siguiente~=nil then celda3:wikitext("[[Resolución "..siguiente.." ("..toRoman(argus['período'])..") de la Asamblea General de la Organización de las Naciones Unidas|<span style=\"color: darkgrey;\">&nbsp;Resolución "..siguiente.." ("..toRoman(argus['período'])..")&nbsp;»</span>]]") end end if argus['sesión']~='' and argus['sesión']~=nil then celda4:wikitext("aprobada por la ".. argus['sesión']..".ª sesión plenaria") if argus['fecha']~='' and argus['fecha']~=nil then celda4:wikitext(" del "..argus['fecha'].." de " ..argus['año']..".") end end --Categoría específica if tonumber(argus['número'])~=nil then ordenar=string.format('Resolución %04d de la Asamblea General de las Naciones Unidas',argus['número']) end if mw.title.getCurrentTitle().namespace==0 then html:wikitext("[[Categoría:Resoluciones aprobadas por la Asamblea General de las Naciones Unidas durante el "..argus['período'].."º período de sesiones|"..ordenar.."]]") end elseif argus['tipo'] == 'A/HRC/RES' then --Resoluciones del Consejo de Derechos Humanos, ejemplo https://undocs.org/es/A/HRC/RES/26/20 celda2:wikitext("[[Resoluciones aprobadas por el Consejo de Derechos Humanos de las Naciones Unidas durante el "..argus['período'].."º período de sesiones|<span style=\"color: darkgrey;\">Resoluciones aprobadas en el "..argus['período'].."º período de sesiones</span>]]") celda4:wikitext("<span style=\"font-size: 120%; font-weight: bold; font-style: oblique;\"><span style=\"font-size: 115%;\">") -- Si el periodo es mayor a 30 if tonumber(argus['período'])>30 then --cambia la forma de denominación de resolucion, utilizando números para el período celda4:wikitext("Resolución "..argus['período'].."/"..argus['número'].."</span> del Consejo de Derechos Humanos de las Naciones Unidas,</span><br/>") if anterior~=nil then celda1:wikitext("[[Resolución "..argus['período'].."/"..anterior.." del Consejo de Derechos Humanos de la Organización de las Naciones Unidas|<span style=\"color: darkgrey;\">«&nbsp;Resolución "..argus['período'].."/"..anterior.."&nbsp;</span>]]") end if siguiente~=nil then celda3:wikitext("[[Resolución "..argus['período'].."/"..siguiente.." del Consejo de Derechos Humanos de la Organización de las Naciones Unidas|<span style=\"color: darkgrey;\">&nbsp;Resolución "..argus['período'].."/"..siguiente.."&nbsp;»</span>]]") end fuente=fuente .. "A/HRC/RES/" .. argus['período'] .. "/" .. argus['número'] else -- hasta el período 30, se utilizaban números romanos del I al XXX fuente=fuente .. "A/HRC/RES/" .. argus['número'] .. "("..toRoman(argus['período'])..")" celda4:wikitext("Resolución "..argus['número'].." ("..toRoman(argus['período'])..") </span> del Consejo de Derechos Humanos de las Naciones Unidas,</span><br/>") if (argus['período']~='1' or argus['número']~='1') and anterior~=nil then celda1:wikitext("[[Resolución "..anterior.." ("..toRoman(argus['período'])..") del Consejo de Derechos Humanos de la Organización de las Naciones Unidas|<span style=\"color: darkgrey;\">«&nbsp;Resolución "..anterior.." ("..toRoman(argus['período'])..")&nbsp;</span>]]") end if siguiente~=nil then celda3:wikitext("[[Resolución "..siguiente.." ("..toRoman(argus['período'])..") del Consejo de Derechos Humanos de la Organización de las Naciones Unidas|<span style=\"color: darkgrey;\">&nbsp;Resolución "..siguiente.." ("..toRoman(argus['período'])..")&nbsp;»</span>]]") end end if argus['fecha']~='' and argus['fecha']~=nil then celda4:wikitext(" Aprobada el "..argus['fecha'].." de " ..argus['año']..".") end --Categoría específica if tonumber(argus['número'])~=nil then ordenar=string.format('Resolución %04d del Consejo de Derechos Humanos de las Naciones Unidas',argus['número']) end if mw.title.getCurrentTitle().namespace==0 then html:wikitext("[[Categoría:Resoluciones aprobadas por el Consejo de Derechos Humanos de las Naciones Unidas durante el "..argus['período'].."º período de sesiones|"..ordenar.."]]") end elseif argus['tipo'] == 'E/RES' then --Resoluciones del Consejo Económico y Social --TODO Falta enlazar ultima resolución de un periodo en siguiente, con la primera del siguiente período celda2:wikitext("[[Resoluciones aprobadas por el Consejo Económico y Social durante el "..argus['período'].."º período de sesiones|<span style=\"color: darkgrey;\">Resoluciones aprobadas en el "..argus['período'].."º período de sesiones</span>]]") celda4:wikitext("<span style=\"font-size: 120%; font-weight: bold; font-style: oblique;\"><span style=\"font-size: 115%;\">") -- Si el periodo es mayor a 30 if tonumber(argus['período'])>30 then --cambia la forma de denominación de resolucion, utilizando números para el período celda4:wikitext("Resolución "..argus['período'].."/"..argus['número'].."</span> de el Consejo Económico y Social de las Naciones Unidas,</span><br/>") if anterior~=nil then celda1:wikitext("[[Resolución "..argus['período'].."/"..anterior.." del Consejo Económico y Social de la Organización de las Naciones Unidas|<span style=\"color: darkgrey;\">«&nbsp;Resolución "..argus['período'].."/"..anterior.."&nbsp;</span>]]") end if siguiente~=nil then celda3:wikitext("[[Resolución "..argus['período'].."/"..siguiente.." del Consejo Económico y Social de la Organización de las Naciones Unidas|<span style=\"color: darkgrey;\">&nbsp;Resolución "..argus['período'].."/"..siguiente.."&nbsp;»</span>]]") end fuente=fuente .. "E/RES/" .. argus['período'] .. "/" .. argus['número'] else -- hasta el período 30, se utilizaban números romanos del I al XXX fuente=fuente .. "E/RES/" .. argus['número'] .. "("..toRoman(argus['período'])..")" celda4:wikitext("Resolución "..argus['número'].." ("..toRoman(argus['período'])..") </span> del Consejo Económico y Social de las Naciones Unidas,</span><br/>") if (argus['período']~='1' or argus['número']~='1') and anterior~=nil then celda1:wikitext("[[Resolución "..anterior.." ("..toRoman(argus['período'])..") del Consejo Económico y Social de la Organización de las Naciones Unidas|<span style=\"color: darkgrey;\">«&nbsp;Resolución "..anterior.." ("..toRoman(argus['período'])..")&nbsp;</span>]]") end if siguiente~=nil then celda3:wikitext("[[Resolución "..siguiente.." ("..toRoman(argus['período'])..") del Consejo Económico y Social de la Organización de las Naciones Unidas|<span style=\"color: darkgrey;\">&nbsp;Resolución "..siguiente.." ("..toRoman(argus['período'])..")&nbsp;»</span>]]") end end if argus['fecha']~='' and argus['fecha']~=nil then celda4:wikitext(" Aprobada el "..argus['fecha'].." de " ..argus['año']..".") end --Categoría específica if tonumber(argus['número'])~=nil then ordenar=string.format('Resolución %04d del Consejo Económico y Social de las Naciones Unidas',argus['número']) end if mw.title.getCurrentTitle().namespace==0 then html:wikitext("[[Categoría:Resoluciones aprobadas por el Consejo Económico y Social de las Naciones Unidas durante el "..argus['período'].."º período de sesiones|"..ordenar.."]]") end --Fin E/RES end celda4:wikitext("<div style=\"font-size:80%\">Descargar como &nbsp;[[Archivo:EPUB silk icon.svg|12px|link=//tools.wmflabs.org/wsexport/tool/book.php?lang=es&format=epub&page=" .. texto .."|Descargar en formato ePub]]&nbsp;[[Archivo:Document-pdf.svg|15px|link=//tools.wmflabs.org/wsexport/tool/book.php?lang=es&page=" .. texto .. "&format=pdf-a5|Descargar en formato PDF]]&nbsp;[[Archivo:Mobi_icon.svg|22px|link=//tools.wmflabs.org/wsexport/tool/book.php?lang=es&page=" .. texto .. "&format=mobi|Descargar en formato mobi]]&nbsp;&#8212;&nbsp;Fuente&nbsp;[[Archivo:Logo of the United Nations (B&W).svg|18px|link=" .. fuente .. "|Fuente ONU]]</div>") local enlaces = Enlaces.all(argus) local formatted = Enlaces.formattedlinks(enlaces) celda4:wikitext(formatted) --Categoría común if mw.title.getCurrentTitle().namespace==0 then html:wikitext("[[Categoría:D"..argus['año'].."|"..ordenar.."]]") end return tostring(html) end return p evaueogymlc5xdcawnomgqc999tk7bl Módulo:Fechas/doc 828 225033 1653838 845044 2026-05-14T16:02:54Z Ignacio Rodríguez 3603 borrar 1653838 wikitext text/x-wiki {{Subpágina documentación}} === Uso === {{borrar|sin uso}} <includeonly> <!-- Coloca las categorías de la plantilla a continuación y los interwikis en Wikidata --> [[Categoría:Wikisource:Módulos]] </includeonly> 9hhgswsiakl3ngo1kbx7jz77tqh4f6l Módulo:Ficha 828 226249 1653840 849588 2026-05-14T17:19:51Z Ignacio Rodríguez 3603 limpieza código, dioses lua, disminuyo dependencias inútiles 1653840 Scribunto text/plain -- -- Este módulo es para implementar en {{Ficha}} -- local p = {} local HtmlBuilder = require('Module:HtmlBuilder') -- local CategorizacionAByAD = require('Módulo:Categorización de buenos y destacados') local args local root local anchoImagen = '245px' local function union(t1, t2) -- devuelve la unión de los valores de dos tablas, como una secuencia local vals = {} for k, v in pairs(t1) do vals[v] = true end for k, v in pairs(t2) do vals[v] = true end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return ret end local function depurarVacias(contenido) if contenido and contenido ~= '' then return contenido end end local function getArgNums(prefix) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end local function anadirfila(rowArgs) if rowArgs.seccion then root .tag('tr') .tag('th') .attr('colspan', 3) .addClass(rowArgs.clasefila) .css('text-align', 'center') .cssText(rowArgs.estiloseccion or args.estiloseccion) .wikitext(rowArgs.seccion) elseif rowArgs.datos then local fila = root.tag('tr') fila.addClass(rowArgs.clasefila) if rowArgs.etiqueta then fila .tag('th') .attr('scope', 'row') .css('text-align', 'left') .addClass(rowArgs.clasefila) .cssText (rowArgs.estiloetiqueta or args.estiloetiqueta) .wikitext(rowArgs.etiqueta) .done() end local datosCelula = fila.tag('td') if rowArgs.etiqueta then datosCelula .attr('colspan', 2) else datosCelula .attr('colspan', 3) .css('text-align', 'center') end datosCelula .addClass(rowArgs.clase) .cssText (rowArgs.estilodatos or args.estilodatos) -- Se añade un salto de línea porque si no se hace así y por ejemplo en los -- datos hay una lista con asteriscos en el primer elemento se muestra -- un asterisco. -- Se trata de un error que ya ocurre con tablas normales sin LUA. Por ejemplo -- {| -- | * elemento1 -- * elemento2 -- |} -- El salto de línea ya se producía en la plantilla Ficha/fila .wikitext('\n' .. rowArgs.datos) --.newline() end end local function hacerTitulo() -- Cabecera de la ficha if not args.titulo then return end local cabecera if args.media == 'si' and args.clasetitulo then cabecera = 'media ' .. args['clasetitulo'] elseif args.media == 'si' then cabecera = 'media ' elseif args.tipocabecera then cabecera = 'cabecera ' .. args.tipocabecera elseif args.clasetitulo then cabecera = 'cabecera ' .. args.clasetitulo else cabecera = 'cabecera ' end root .tag('tr') .tag('th') .attr('colspan', 3) .addClass(cabecera) .css('text-align', 'center') .css('background-color', args.colorfondo or args.colorfondotitulo or 'transparent') .css('color', args.colortexto or 'black') .cssText(args.estilotitulo) .wikitext(args.titulo) end local function hacerFilaArriba() if not args.arriba and not args.titulo2 then return end root .tag('tr') .tag('th') .attr('colspan', 3) .addClass(args.clasearribaor or args.clasetitulo2) .css('text-align', 'center') .css('font-size', '125%') .css('font-weight', 'bold') .cssText(args.estiloarriba or args.estilotitulo2) .wikitext(args.arriba or args.titulo2) end local function hacerPieDeTabla()-- Pie de tabla, aparecerá abajo de la ficha if not args.piedetabla then return end root .tag('tr') .tag('td') .attr('colspan', '3') .addClass(args.clasepiedetabla) .css('text-align', 'center') .cssText(args.estilopiedetabla) .wikitext(args.piedetabla) end local function hacerImagenInferior()-- Imagen que aparecerá en la parte inferior de la tabla if not args.imageninferior then return end local imageninferior if args['tamañoimageninferior'] == nil or args['tamañoimageninferior'] == '' then args['tamañoimageninferior'] = anchoImagen end if string.find(args.imageninferior, '[{[]') == nil then imageninferior = ('[[Archivo:' .. args.imageninferior .. '|'.. args['tamañoimageninferior'] .. ']]' ) else imageninferior = args.imageninferior end root .tag('tr') .tag('td') .attr('colspan', '3') .addClass(args.claseimageninferior) .css('text-align', 'center') .cssText(args.estiloimageninferior) .newline() .wikitext(imageninferior) .tag('br', {selfClosing = true}) .done() .tag('span') .cssText(args.estilopieinferior) .wikitext(args.pieinferior) .newline() end local function hacerImagenSuperior()-- Imagen que aparecerá en la parte superior de la tabla if not args.imagensuperior then return end if args['tamañoimagensuperior'] == nil or args['tamañoimagensuperior'] == '' then args['tamañoimagensuperior'] = anchoImagen end local imagensuperior if string.find(args.imagensuperior, '[{[]') == nil then imagensuperior = ('[[Archivo:' .. args.imagensuperior .. '|'.. args['tamañoimagensuperior'] .. ']]' ) else imagensuperior = args.imagensuperior end root .tag('tr') .tag('td') .attr('colspan', '3') .addClass(args.claseimagensuperior) .css('text-align', 'center') .cssText(args.estiloimagensuperior) .newline() .wikitext(imagensuperior) .tag('br', {selfClosing = true}) .done() .tag('span') .cssText(args.estilopiesuperior) .wikitext(args.piesuperior) .newline() end local function hacerSubtitulos()-- Subtítulos de la ficha if args.subtitulo then args.subtitulo1 = args.subtitulo end if args.clasesubtitulo then args.clasesubtitulo1 = args.clasesubtitulo end local subtitulonumero = getArgNums('subtitulo') for k, num in ipairs(subtitulonumero) do anadirfila({ datos = args['subtitulo' .. num], estilodatos = args['estilosubtitulo' .. num] or args.estilosubtitulo, clase = args.clasesubtitulo, clasefila = args['clasesubtitulo' .. num] }) end end local function hacerfilassuperiores()-- filas encima de imagenes laterales if args.datosup then args.datosup1 = args.datosup end if args.clasedatosup then args.clasedatosup1 = args.clasedatosup end if args.estilodatosup then args.estilodatosup1 = args.estilodatosup end local datosupnumero = getArgNums('datosup') for k, num in ipairs(datosupnumero) do anadirfila({ datos = args['datosup' .. num], estilodatos = args['estilodatosup' .. num], clase = args.clasedatosup, clasefila = args['clasedatosup' .. num] }) end end local function hacerImageneslaterales() -- Imagenes que apareceran arriba de forma geminada por ejemplo escudos y banderas if args['tamañoimagenizquierda'] == "" or args['tamañoimagenizquierda'] == nil then args['tamañoimagenizquierda'] = '100px' end if args['tamañoimagenderecha'] == "" or args['tamañoimagenderecha'] == nil then args['tamañoimagenderecha'] = '100px' end if args.imagenderecha and args.imagenizquierda then root .tag('tr') .tag('td') --.attr('cellspacing', '0em') --.attr('padding','0em') .attr('colspan', '3') .css('align', 'center') .tag('table') -- tiene que ir dentro de una tabla para que las filas no lo deformen .css('width', '100%') .addClass('mergedrow') .tag('tr') .tag('td') .css('text-align', 'center') .css('background-color', 'transparent') .addClass(args.claseimagenizquierda) .css('align', 'center')-- Se alinea en el centro horizontal .css('text-align', 'center') -- Se alinea en el centro horizontal .css('vertical-align', 'middle')-- Se alinea en el centro vertical .cssText(args.estiloimagenizquierda) .wikitext('[[Archivo:' .. args.imagenizquierda .. '|' .. args['tamañoimagenizquierda'] .. ']]' ) .tag('br') .tag('span') .cssText(args.estilopieizquierdo) .wikitext(args.pieizquierdo) .tag('td') .css('text-align', 'center')-- Se alinea en el centro horizontal .css('align', 'center')-- Se alinea en el centro horizontal .css('vertical-align', 'middle')-- Se alinea en el centro vertical .css('background-color', 'transparent') .addClass(args.claseimagenderecha) .cssText(args.estiloimagenderecha) .wikitext('[[Archivo:' .. args.imagenderecha .. '|' .. args['tamañoimagenderecha'] .. ']]' ) .tag('br') .tag('span') .cssText(args.estilopiederecho) .wikitext(args.piederecho) .newline() elseif args.imagenderecha or args.imagenizquierda then -- Si solo una de las dos, la imagen que aparezca estará en el centro local imagenL if args.imagenderecha ~= '' and args.imagenderecha ~= nil then imagenL = 'imagenderecha' elseif args.imagenizquierda ~= '' and args.imagenizquierda ~= nil then imagenL = 'imagenizquierda' end local pieL if args.imagenderecha then pieL = 'piederecho' elseif args.imagenizquierda then pieL = 'pieizquierdo' end root .tag('tr') .tag('td') .attr('colspan', '3') .addClass(args['clase' .. imagenL]) .css('text-align', 'center') .cssText(args['estilo' .. imagenL]) .newline() .wikitext('[[Archivo:' .. args[imagenL] .. '|'.. args['tamaño'..imagenL] .. ']]' ) .tag('br') .tag('span') .cssText(args['estilo' .. pieL]) .wikitext(args[pieL]) end end local function hacerImagenes() -- Puede crear un número infinito de imágenes if args.imagen then args.imagen1 = args.imagen end if args['tamañoimagen'] then args['tamañoimagen1'] = args['tamañoimagen'] end if args.pie then args.pie1 = args.pie end local imagenums = getArgNums('imagen') for k, num in ipairs(imagenums) do local pie = args['pie' .. num] local flotante = args['imagenflotante' .. num] or false if args['tamañoimagen'..num] == nil then args['tamañoimagen'..num] = anchoImagen end local imagen local cadenaBusqueda = mw.ustring.gsub(args['imagen'..num],'UNIQ','[') -- Para que no de problemas con ciertas plantillas if mw.ustring.find(cadenaBusqueda, '[{[|]') == nil then -- Comprueba si hay [ o { para no añadir prefijo imagen = ('[[Archivo:' .. args['imagen' .. num] .. '|'.. args['tamañoimagen' ..num] .. ']]' ) else imagen = args['imagen'..num] end local datos = HtmlBuilder.create().wikitext(imagen) if pie and not flotante then datos .tag('br', {selfClosing = true}) .done() end if pie then datos .tag('span') .cssText(args.estilopie) .wikitext(pie) end anadirfila({ datos = tostring(datos), estilodatos = args.estiloimagen, clase = args.claseimagen, clasefila = args['claseimagen' .. num] }) end end local function hacerFilas() local filanum = union(getArgNums('seccion'), getArgNums('datos')) table.sort(filanum) for k, num in ipairs(filanum) do anadirfila({ estilosubtitulo = depurarVacias(args['estilosubtitulo' .. num]), seccion = depurarVacias(args['seccion' .. num]), estiloseccion = depurarVacias(args['estilosección' .. num]), etiqueta = depurarVacias(args['etiqueta' .. num]), datos = depurarVacias(args['datos' .. num]), estiloetiqueta = depurarVacias(args['estiloetiqueta' .. num]), estilodatos = depurarVacias(args['estilodatos' .. num]), clase = depurarVacias(args['clase' .. num]), clasefila = depurarVacias(args['clasefila' .. num]) }) end end local function tieneDatosFila(fila) -- Función que devuelve true si la fila o grupo de filas (en el caso de -- secciones) tiene datos. if fila.tipo == 'sección' or fila.tipo == 'seccion' then for k, filaSeccion in ipairs(fila) do if tieneDatosFila(filaSeccion) then return true end end elseif fila.tipo == 'sucesión' or fila.tipo == 'sucesion' then if depurarVacias(fila[1]) or depurarVacias(fila['anterior']) or depurarVacias(fila[3]) or depurarVacias(fila['siguiente']) then return true end else if depurarVacias(fila[2]) or depurarVacias(fila['datos']) then return true end end return false end local function anadirSucesion(argumentosSucesion) local fila = root.tag('tr') fila.css('font-size', '88%') fila.css('text-align', 'center') local celda local width width = '33%' celda = fila.tag('td') celda .css('width', width) .css('padding', '0.2em 0.1em 0.2em 0') .css('vertical-align', 'middle') if argumentosSucesion['estilo fuente'] then celda .tag('span') .css('font-style', argumentosSucesion['estilo fuente']) .wikitext(argumentosSucesion.anterior) else celda.wikitext(argumentosSucesion.anterior) end if argumentosSucesion['año anterior'] then celda .tag('br') .wikitext('(' .. argumentosSucesion['año anterior'] .. ')') end celda = fila.tag('td') celda .css('width', width) .css('padding', '0.2em 0.1em') .css('vertical-align', 'middle') .css('background-color', argumentosSucesion.color or '#E6E8FA') celda .tag('span') .css('font-weight', 'bold') .css('font-style', argumentosSucesion['estilo fuente'] or '') .wikitext(argumentosSucesion.actual or args.titulo) if argumentosSucesion['año'] then celda .tag('br') .wikitext('(' .. argumentosSucesion['año'] .. ')') end celda = fila.tag('td') celda .css('width', width) .css('padding', '0.2em 0 0.2em 0.1em') .css('vertical-align', 'middle') if argumentosSucesion['estilo fuente'] then celda .tag('span') .css('font-style', argumentosSucesion['estilo fuente']) .wikitext(argumentosSucesion.siguiente) else celda.wikitext(argumentosSucesion.siguiente) end if argumentosSucesion['año siguiente'] then celda .tag('br') .wikitext('(' .. argumentosSucesion['año siguiente'] .. ')') end end local function hacerFilasTabla(tabla) -- Función que compone las filas de una tabla bien la ficha o bien una sección de la misma. for k, fila in ipairs(tabla) do if tieneDatosFila(fila) then if fila.tipo == 'sección' or fila.tipo == 'seccion' then -- Añadir el título de la sección (si está informado) local tituloSeccion = depurarVacias(fila.titulo) or depurarVacias(fila['título']) if tituloSeccion then anadirfila({ estiloseccion = fila['estilotitulo'] or fila['estilotítulo'], seccion = tituloSeccion }) end hacerFilasTabla(fila) elseif fila.tipo == 'sección desplegable' or fila.tipo == 'seccion desplegable' then -- FALTA elseif fila.tipo == 'sucesión'or fila.tipo == 'sucesion' then anadirSucesion({ ['anterior'] = depurarVacias(fila[1]) or depurarVacias(fila['anterior']), ['actual'] = depurarVacias(fila['actual']), ['siguiente'] = depurarVacias(fila[3]) or depurarVacias(fila['siguiente']), ['año anterior'] = depurarVacias(fila['año anterior']), ['año'] = depurarVacias(fila['año']), ['año siguiente'] = depurarVacias(fila['año siguiente']), ['estilo fuente'] = depurarVacias(fila['estilo fuente']), ['color'] = depurarVacias(fila['color']) }) elseif fila.tipo == 'dos columnas' then -- FALTA elseif fila.tipo == 'tres columnas' then -- FALTA else -- Etiqueta + Datos o solo Datos anadirfila({ etiqueta = depurarVacias(fila[1]) or depurarVacias(fila['etiqueta']), datos = depurarVacias(fila[2]) or depurarVacias(fila['datos']), estiloetiqueta = fila['estiloetiqueta'] or tabla['estiloetiqueta'], estilodatos = fila['estilodatos'] or tabla['estilodatos'], clase = fila['clase'] or tabla['clase'], clasefila = fila['clasefila'] or tabla['clasefila'] }) end end end end local function hacerBarraDeNavegacion()-- Crea en la parte inferior un enlace a la plantilla que se de con nombre if not args.nombre then return end root .tag('tr') .tag('td') .attr('colspan', '3') .css('text-align', 'right') .wikitext(mw.getCurrentFrame():expandTemplate({ title = 'navbar', args = { args.nombre, mini = 1 } })) end local function hacerBarraWikidata()-- Crea en la parte inferior un enlace al ítem de Wikidata local enlacePagina = mw.title.getCurrentTitle().text local etiquetaPagina = mw.ustring.gsub(enlacePagina,'%s%(.*%)','') local entidad = args.entidad or mw.wikibase.getEntityObject() local textoPie if (args.child == 'si' or args.integrada == 'sí' or args.wikidata == 'no') or (mw.title.getCurrentTitle().namespace ~= 0 and mw.title.getCurrentTitle().namespace ~= 104 and not args.entidad) then textoPie = '' elseif entidad ~= "" and entidad ~= nil then textoPie = '<small>[<span class= plainlinks>[[d:' .. tostring(entidad) .. '|editar datos en Wikidata]]</span>]</small>' --if args.entidad and (mw.title.getCurrentTitle().namespace == 0 or mw.title.getCurrentTitle().namespace == 104) then -- textoPie = textoPie .. '[[Categoría:Wikipedia:Artículos con fichas que utilizan acceso arbitrario]]' --end else textoPie = "<small>'''Página no enlazada a [[w:Wikidata|Wikidata]]'''\n".. "* Si no existe en otras Wikisource: [<span class=plainlinks>[//www.wikidata.org/w/index.php?title=Special:NewItem&site=eswikisource&page="..mw.uri.encode(enlacePagina, "WIKI") .."&label="..mw.uri.encode(etiquetaPagina, "WIKI") .." crea&nbsp;nuevo&nbsp;ítem]]</span>\n".. "* Si existe en otras Wikisource: [<span class=plainlinks>[[:d:Special:ItemByTitle|busca&nbsp;ítem&nbsp;para&nbsp;enlazar]]</span>]\n".. "y añade el enlace en español: ".. enlacePagina ..".</small>" end if textoPie ~= '' then root .tag('tr') .tag('td') .attr('colspan', '3') .css('text-align', 'left') .wikitext(textoPie) end end local function hacerCategoriasSeguimiento() --if args.decat ~= 'si' and #(getArgNums('datos')) == 0 and not args[1] and mw.title.getCurrentTitle().namespace == 0 then -- root.wikitext('[[Categoría:Wikipedia:Artículos que usan ficha sin datos en filas]]') --end --if CategorizacionAByAD.hasAnyBadge() == '1' then -- root.wikitext(CategorizacionAByAD.badgesCategories()) --end end local function _infobox() if args.child ~= 'si' and args.integrada ~= 'sí' then root = HtmlBuilder.create('table') root -- Estilo de toda la ficha .addClass('plainlinks') .addClass(args.clase) .cssText('clear:both;Float:right;width:30%;margin: 0px 5px 5px 5px;font-size:95%; font-size:95%; border:solid 1px #6688AA;padding:5px;background:#F9FBFB') -- Lo mismo que la plantilla:Ficha .cssText(args.estilo) --if args.estilo and (mw.title.getCurrentTitle().namespace == 10) then -- Para que sólo lo añada en el espacio de nombres plantilla -- root.wikitext('[[Categoría:Wikipedia:Fichas con el parámetro estilo]]') --end hacerTitulo() hacerFilaArriba() else root = HtmlBuilder.create() if args.titulo then root.wikitext("'''" .. args.titulo .. "'''") end end hacerSubtitulos() hacerImagenSuperior() hacerImageneslaterales() hacerfilassuperiores() hacerImagenes() if not args[1] then hacerFilas() else hacerFilasTabla(args) end hacerImagenInferior() hacerPieDeTabla() hacerBarraDeNavegacion() hacerBarraWikidata() hacerCategoriasSeguimiento() return tostring(root) end local function touchParameters(prefixTable, origArgs, step) -- Analiza los parámetros con los prefijos dados, en orden por lotes lotes y con el tamaño especificado a step. -- Esto es para evitar referencias etc aparezca en el orden equivocado. if type(prefixTable) ~= 'table' or type(origArgs) ~= 'table' then error("Entrada no válida detectada para la función touchParameters. Ambos parámetros deben ser tablas.", 2) end if step and type(step) ~= 'number' then error("Detectado valor no numérico en step.", 2) end step = step or 20 -- Si no se le da el tamaño a step, el valor predeterminado es 20. local temp local a = 1 -- variable de contador. local moreArgumentsExist = true for j,v in ipairs(prefixTable) do if type(v) ~= "string" then error("Detectado un valor que no es string en el prefijo de la tabla por la función touchParameters.", 2) end temp = origArgs[v] end while moreArgumentsExist == true do moreArgumentsExist = false for i = a, a + step - 1 do for j,v in ipairs(prefixTable) do temp = origArgs[v .. tostring(i)] if temp then moreArgumentsExist = true end end end a = a + step end end function p.infobox(frame) local origArgs -- Si se llama a través de #invoke, utilice los argumentos pasados ​​a la plantilla de invocación. -- De lo contrario, para fines de prueba, asume args que se pasan directamente como parámetros. if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end -- Analizar los parámetros de datos en el mismo orden que la plantilla {{ficha}} lo hace, por lo que -- referencias etc. se mostrarán en los lugares previstos. local temp temp = origArgs.titulo temp = origArgs.arriba touchParameters({'subtitulo'}, origArgs, 5) touchParameters({'imagen', 'pie'}, origArgs, 5) touchParameters({'seccion', 'etiqueta', 'datos'}, origArgs, 20) temp = origArgs.piedetabla -- El analizador de funciones considera que una cadena vacía es falsa, por lo que para preservar el anterior -- comportamiento de {{Ficha}}, debe cambiar los argumentos vacíos a cero, por lo que Lua los considerará -- que son falsos también (excepto parámetros 'title cursiva', que especifica un comportamiento diferente -- dependiendo de si está ausente o vacío) args = {} for k, v in pairs(origArgs) do if v ~= '' then args[k] = v end end return _infobox() end return p lqagy4pfsmtjnst6okl4hofvtv6swdf Módulo:Demo/doc 828 245800 1653821 982175 2026-05-14T15:16:26Z Ignacio Rodríguez 3603 1653821 wikitext text/x-wiki {{Subpágina de documentación}} === Uso === Implementa {{ep|demo}} == Véase también == * [[Module:Zona de pruebas]]: Para practicar/experimentar/probar módulos <includeonly> <!-- Coloca las categorías de la plantilla a continuación y los interwikis en Wikidata --> [[Categoría:Wikisource:Módulos]] </includeonly> anoj1eplzo2onw7un4m108824mm3zz2 Módulo:Imprenta 828 250643 1653833 1653761 2026-05-14T15:54:13Z Ignacio Rodríguez 3603 srict 1653833 Scribunto text/plain local p = {} local Wikidata = require('Módulo:Wikidata') local Entidad = mw.wikibase.getEntityObject() or '' -- Tabla con los datos en Wikidata local Enlaces = require('Módulo:Enlaces') -- Función que devuelve la lista de los valores de una propiedad en Wikidata formateados local function propiedad(idPropiedad,opciones) if Entidad and Entidad.claims then --and Entidad.claims[idPropiedad] then if not opciones then opciones = {} end opciones['propiedad'] = idPropiedad local valorPropiedad = Wikidata.getPropiedad(opciones,Entidad.claims[idPropiedad]) if not valorPropiedad or valorPropiedad == '' then return '' end return valorPropiedad else return '' end end --parámetros reconocidos. 1 = vigente, 0 = obsoleto local categorias = '' local params = {['nombre']=1,['dirección']=1,['más info']=1, ['wikipedia'] =1 , ['commons'] =1 , ['commonscat'] =1 , ['wikiquote'] =1 , ['wikcionario'] =1 , ['wikilibros'] =1 , ['wikiversidad'] =1, ['wikispecies'] =1 , ['meta'] =1 , ['wikidata'] =1} local altparams= {['direccion']='dirección', ['mas info']='más info' } local function errorMessage(text) -- Función que entrega un mensaje de error formateado como tal local html = mw.html.create('div') html:addClass('error') :wikitext(text) categorias=categorias..'[[Categoría:Wikisource:Páginas con errores en la plantilla Imprenta]]' return tostring(html) end function p.encabe( frame ) local argus = {} local titulo = mw.title.getCurrentTitle() for k,v in pairs(frame:getParent().args) do -- crea una tabla con los parámetros incluídos en la plantilla, y elimina parámetros vacíos if v ~= '' and type(k) ~= 'number' then argus[mw.ustring.lower(k)] = v -- todos los parámetros en minúsculas por defecto: end end -- HTML local html = mw.html.create() -- corregir parámetros con nombres alternativos for k,v in pairs(altparams) do if argus[k] and not argus[v] then argus[v] = argus[k] elseif argus[k] and argus[v] then html:wikitext(errorMessage('Error: los parámetros '..k..' y '..v..' son redundantes.')) categorias=categorias..'[[Categoría:Wikisource:Páginas que usan parámetros redundantes en la plantilla Imprenta]]' end end local divgrande = html:tag('div'):attr('id','headertemplate'):addClass('noprint ws-noexport'):cssText('text-align: center; padding: 1em; background-color:#F1F1DE; color: black; overflow:auto; border-radius:0.7em; box-shadow:0.2em 0.3em 0.2em #B7B7B7; display:table;width:95%') -- div principal que contiene al resto local anterior = divgrande:tag('div'):attr('id','headerprevious'):cssText('padding:0;display:table-cell;vertical-align:middle;width:16%') --if argus['anterior'] and argus['anterior'] ~= '' then local anteriorspan = anterior:tag('span'):cssText('float: left; display: block;font-size:smaller') anteriorspan:tag('span'):cssText(';margin-right: 0.5em; position: relative; top: 1.5px'):wikitext('← ') anteriorspan:wikitext(' '..'[[:Categoría:Imprentas y editoriales|Imprentas y editoriales]]') --if argus['enlaces'] and mw.ustring.lower(argus['enlaces']) == 'no' then -- anteriorspan:cssText('display:none') --end --end local medio = divgrande:tag('div'):cssText('width:68%;display:table-cell;vertical-align:middle;') local nombre = frame:preprocess("{{PAGENAME}}") if argus['nombre'] then medio:wikitext("'''''"..argus['nombre'].."'''''") else medio:wikitext("'''''"..nombre.."'''''") end medio:tag('br') if argus['dirección'] ~= nil and argus['dirección']~= '' then medio:wikitext("''"..argus['dirección'].."''") if argus['más info'] then medio:tag('br') medio:tag('span'):cssText('font-size: 83%;'):wikitext(argus['más info']) end elseif propiedad('p159') ~= '' then medio:wikitext("''"..propiedad('p159',{['uno']='sí'}).."''") if argus['más info'] then medio:tag('br') medio:tag('span'):cssText('font-size: 83%;'):wikitext(argus['más info']) end end local proximo = divgrande:tag('div'):attr('id','headernext'):cssText('padding:0;display:table-cell;vertical-align:middle;width:16%') local proximospan = proximo:tag('span'):cssText('float: right; display: block;font-size:smaller') if propiedad('p154') ~= '' then --P154 = logotipo local logotipo = '[[File:'..propiedad('p154',{['uno']='sí'})..'|100px]]' proximospan:wikitext(logotipo) end if argus['próximo'] and argus['próximo']~= '' then proximospan:wikitext(' '..argus['próximo']) proximospan:tag('span'):cssText('margin-left: 0.5em; position: relative; top: 1.5px'):wikitext(' →') if argus['enlaces'] and mw.ustring.lower(argus['enlaces']) == 'no' then proximospan:cssText('display:none') end end --enlaces pequeños en la parte inferior local inferior = medio:tag('div'):addClass('noprint plainlinks'):cssText('clear: both; padding: 0.5em; text-align: center; margin:0 auto; font-size: 80%') --enlaces parte inferior local listaenlaces = Enlaces.all(argus) local textoenlaces = Enlaces.formattedlinks(listaenlaces) inferior:wikitext(textoenlaces) if argus['notas'] and argus['notas'] ~= '' then html:tag('div'):cssText('font-size:90%;width:95%;margin:auto'):wikitext("'''Nota:''' "..argus['notas']):tag('hr') end --categorías automáticas categorias = categorias..'[[Categoría:Imprentas y editoriales]]' for k,v in pairs(argus) do if params[k] or altparams[k] then if params[k] == 0 then categorias = categorias..'[[Categoría:Wikisource:Páginas que usan parámetros obsoletos en la plantilla Imprenta]]' --añade categoría de seguimiento a parámetros obsoletos (declarados arriba) end else html:wikitext(errorMessage('Error: parámetro '..k..' no reconocido')) categorias=categorias..'[[Categoría:Wikisource:Páginas que usan parámetros no reconocidos en la plantilla Imprenta]]' end end if titulo.namespace ~= 100 then --solo categorías en el espacio portal categorias = '' end divgrande:wikitext(categorias) return tostring(html) end return p sbm32pjp2d3ubm37phwx8mt6qxmpx3k Módulo:Categoría de autor 828 256271 1653835 1587833 2026-05-14T15:57:55Z Ignacio Rodríguez 3603 local 1653835 Scribunto text/plain local p = {} local prefijos ={ 'Obras', 'Documentos', 'Traducciones', 'Poesías', 'Discursos', 'Sonetos', 'Cuentos', 'Novelas', 'Epístolas', 'Ensayos', 'Artículos', 'Teatro', 'Fábulas', 'Canciones' , 'Odas', 'Romances', 'Villancicos', 'Entremeses', 'Autos Sacramentales', 'Jácaras', 'Mojigangas', 'Décimas' , 'Tangos', 'Decretos', 'Ilustraciones' , 'Biografías', 'Bulas', 'Encíclicas', 'Tragedias', 'Comedias', 'Idilios', 'Crónicas', 'Zarzuelas', 'Sainetes' } local Enlaces = require('Módulo:Enlaces') function p.cat( frame ) local argus = {} for k,v in pairs(frame.args) do argus[k] = v end for k,v in pairs(frame:getParent().args) do -- crea una tabla con los parámetros incluídos en la plantilla, y elimina parámetros vacíos argus[k] = v end local titulo = mw.title.getCurrentTitle().baseText local categoria = '' local autor='' local tipo local html = mw.html.create() -- cuerpo principal de la plantilla for i,cadena in ipairs(prefijos) do if mw.ustring.find(titulo,cadena) then tipo = cadena categoria='[[Categoría:'.. cadena ..' por autor]]' autor=mw.ustring.sub(titulo,mw.ustring.len(cadena) + 4) -- mas 4 por el ' de ' break end end if tipo=='Biografías' then autor=mw.ustring.sub(titulo,mw.ustring.len(tipo) + 14) -- mas 14 por el ' escritas por ' end autor = argus[2] or autor --posibilidad de autor explícito cuando es diferente del nombre de la categoría if not(tipo=='Documentos' or tipo=='Obras' or tipo=='Decretos' or tipo=='Bulas' or tipo=='Encíclicas' or tipo=='Discursos') then categoria=categoria .. '[[Categoría:Obras de ' .. autor ..'|'..mw.title.getCurrentTitle().text.. ']]' end if tipo=='Epístolas' or tipo=='Decretos' or tipo=='Bulas' or tipo=='Encíclicas' or tipo=='Discursos' then if mw.title.new( 'Documentos de ' .. autor, 'Categoría' ).exists == true then categoria=categoria .. '[[Categoría:Documentos de ' .. autor ..'|'..mw.title.getCurrentTitle().text.. ']]' end end local div = html:tag('div'):addClass('divgrande') local celda1= div:tag('div'):addClass('celda1') local celda2= div:tag('div'):addClass('celda2') celda1:wikitext('\'\'\'[[Autor:'..autor..'|◄]] Autor: [[Autor:'..autor..'|'..autor..']]\'\'\'') html:wikitext(categoria) if argus[1]~=nil then html:wikitext(frame:preprocess('{{DEFAULTSORT:' .. argus[1] .. '}}')) else html:wikitext(frame:preprocess('{{DEFAULTSORT:' .. autor .. '}}')) end -- ACÁ PRUEBAS CON ENLACES -- local QID = mw.wikibase.getEntityIdForTitle( 'Autor:'..autor ) argus['wikidata'] = QID local listaenlaces = Enlaces.all(argus) celda2:wikitext(Enlaces.formattedlinks(listaenlaces)) return tostring(html) end return p 9xn76okyd17a98smfsw3hc12eo1476x Módulo:Categoría de autor/doc 828 256302 1653834 1013597 2026-05-14T15:56:38Z Ignacio Rodríguez 3603 fuera de desarrollo hace 7 años, de amplio uso como está 1653834 wikitext text/x-wiki {{Subpágina de documentación}} === Uso === En plantilla {{tl|Categoría de autor}} <includeonly> <!-- Coloca las categorías de la plantilla a continuación y los interwikis en Wikidata --> [[Categoría:Wikisource:Módulos]] </includeonly> ach36409lf8imonjld9ryd236kvjmc6 Módulo:Línea 828 258961 1653839 1540308 2026-05-14T16:06:32Z Ignacio Rodríguez 3603 local 1653839 Scribunto text/plain -- Modulo para plantillas de líneas local p = {} local opciones = { ['ac'] = 'Arrow Cross', ['al'] = 'Arrow Left', ['ar'] = 'Arrow Right', ['atl'] = 'Arrow Thin Left', ['atr'] = 'Arrow Thin Right', ['bcrb'] = 'Black Crescent bottom', ['bcrl'] = 'Black Crescent left', ['bcrr'] = 'Black Crescent right', ['bcrt'] = 'Black Crescent top', ['c'] = 'Circle', ['cll'] = 'Curl Left', ['clr'] = 'Curl Right', ['co'] = 'Circle open', ['col'] = 'Colon', ['crb'] = 'Crescent bottom', ['crl'] = 'Crescent left', ['crr'] = 'Crescent right', ['crt'] = 'Crescent top', ['d'] = 'Diamond', ['do'] = 'Diamond open', ['el'] = 'Ellipse', ['elo'] = 'Ellipse open', ['fc'] = 'Flare Centre', ['fct'] = 'Flare Centre 5px', ['fcw'] = 'Flare Centre White', ['fl'] = 'Flare Left', ['fr'] = 'Flare Right', ['fy1'] = 'Fancy1', ['fy2'] = 'Fancy2', ['fy3'] = 'Fancy3', ['fy4'] = 'Fancy4', ['lo'] = 'loops', ['lz'] = 'Lozenge', ['lzt'] = 'Lozenge 5px', ['qc'] = 'Quatrefoil in circle', ['r'] = 'Rectangle', ['s'] = 'Square', ['so'] = 'Square open', ['sp'] = 'Span', ['str'] = 'Star', ['tl'] = 'Tear Left', ['tr'] = 'Tear Right', ['ltr'] = 'Lefttriangle', ['rtr'] = 'Righttriangle', ['w'] = 'Wave', } local sugerencias= { ["sp"] = "5, 10, 20, 40, 50, 100", ["w"] = "1 a 40", ["s"] = "5 10", ["so"] = "5 10", ["d"] = "4, 6, 10", ["do"] = "7", ["c"] = "6", ["co"] = "6, 10, 20", ["el"] = "15", ["fl"] = "11,12,15,30,40", ["fr"] = "11,12,15,30,40", ["fc"] = "14, 22, 140", ["tl"] = "20, 40", ["tr"] = "20, 40", ["cll"] = "10", ["clr"] = "10", ["fy1"] = "40", ["fy2"] = "100", ["fy3"] = "40", ["str"] = "6, 10" } local altparams= { ['align']='alinear', ['a']='alinear', ['width']='ancho', ['e']='espacio', ['height']='altura', ['h']='altura', ['style']='estilo', ['class']='clase' } function p.adornada( frame ) local argus = {} for k,v in pairs(frame.args) do argus[k] = v end for k,v in pairs(frame:getParent().args) do -- crea una tabla con los parámetros incluídos en la plantilla, y elimina parámetros vacíos argus[k] = v end for k,v in pairs(altparams) do --parámetros con nobmres alternativos. if argus[k] and not argus[v] then argus[v] = argus[k] end end local html = mw.html.create() -- cuerpo principal de la plantilla local div=html:tag('div'):addClass('adornada') local i=1 while argus[i]~= nil and argus[i+1]~=nil do -- si no lo reconocemos, pasarlo idéntico nomás if not opciones[argus[i]] then opciones[argus[i]] = argus[i] end local filename = "Rule Segment - "..opciones[argus[i]].." - " ..argus[i+1].."px.svg" local file = mw.title.new(filename, 'File') if file.file.exists then div:wikitext("[[Archivo:"..filename .."|middle|alt=|link=]]") else div:wikitext("<small>[ "..filename.." no existe. ]</small>") if sugerencias[argus[i]] then div:wikitext("<small>{'''Sugerencias''': "..sugerencias[argus[i]]..". }</small>") end end i=i+2 end if argus['espacio']~=nil then div:css('margin-top',argus['espacio']) div:css('margin-bottom',argus['espacio']) end return tostring(html) end function p.comun( frame ) local argus = {} for k,v in pairs(frame.args) do argus[k] = v end for k,v in pairs(frame:getParent().args) do -- crea una tabla con los parámetros incluídos en la plantilla, y elimina parámetros vacíos argus[k] = v end for k,v in pairs(altparams) do --parámetros con nobmres alternativos. if argus[k] and not argus[v] then argus[v] = argus[k] end end local html = mw.html.create() -- cuerpo principal de la plantilla local div=html:tag('div') if argus['alinear']~=nil then if argus['alinear']=='left' or argus['alinear']=='izquierda' then div:css('margin','0em auto 0em 0em') elseif argus['alinear']=='right' or argus['alinear']=='derecha' then div:css('margin','0em 0em 0em auto') else div:css('margin','0em auto 0em auto') end else div:css('margin','0em auto 0em auto') end if argus['ancho']~=nil or argus[1]~=nil then div:css('width',argus['ancho'] or argus[1]) end local clase='comun' if argus['clase']~=nil then clase=argus['clase'] end local hr =div:tag('hr'):addClass(clase) if argus['espacio']~=nil then hr:css('margin-top',argus['espacio']) hr:css('margin-bottom',argus['espacio']) end if argus['altura']~=nil then hr:css('height',argus['altura']) end local color if argus['color'] then if mw.ustring.sub( argus['color'], 0, 1 ) == '#' then color = argus['color'] else color = frame:expandTemplate{ title = 'RGB', args = { argus['color'] } } end color = mw.ustring.gsub(color, '&#35;', '#') hr:css('background-color',color) end if argus['estilo'] then --estilo personalizado, al final para poder sobreescribir todo hr:cssText(argus['estilo']) end return tostring(html) end return p mjxg02vle758ct8ywpt9n81wqp6z2ma Plantilla:Barra 10 271857 1653825 1135861 2026-05-14T15:29:42Z Ignacio Rodríguez 3603 saltos de línea 1653825 wikitext text/x-wiki <templatestyles src="Barra/estilo.css" /><!-- Outer span defines the strike-though. If CSS is not available, this will disappear. --><span class="__bar"><!-- inner span holds the em-dashes, which are transparent. If CSS is not available, these will appear again. --><span class="__bar_inner">{{loop|{{{1|6}}}|—}}</span><!-- --></span><noinclude> {{documentación}} <noinclude> orexl67avlftdn43s1pqm9299ntyw7l Módulo:Enlaces 828 272116 1653811 1653772 2026-05-14T14:05:35Z Ignacio Rodríguez 3603 calmar dioses de Lua, funciones y variables no usadas 1653811 Scribunto text/plain --The sister project linking module local p = {} local function getsize(tab) local count = 0 for _,_ in pairs(tab) do count = count + 1 end return count end local aliases = { ['commons'] = 'commonswiki', ['commonscat'] = 'commonswiki', ['wikilibros'] = 'eswikibooks', ['wikibooks'] = 'eswikibooks', ['wikipedia'] = 'eswiki', ['wikiquote'] = 'eswikiquote', ['wikicitas'] = 'eswikiquote', ['wikispecies'] = 'specieswiki', ['wikiespecies'] = 'specieswiki', ['wikiversity'] = 'eswikiversity', ['wikiversidad'] = 'eswikiversity', ['desambiguación'] = 'desambiguacion', ['wiktionary'] = 'eswiktionary', ['wikcionario'] = 'eswiktionary', ['wikiviajes'] = 'eswikivoyage', ['wikivoyage'] = 'eswikivoyage' } p.relevants = { --{['name']='',['image']='',['text']='',['prefix']='',} ['commonswiki'] = { ['name'] = 'Wikimedia Commons', ['image'] = 'Commons-logo.svg|link=c:', ['text'] = 'multimedia', ['prefix'] = 'c:', ['title'] = '', }, ['eswikibooks'] = { ['name'] = 'Wikibooks', ['image'] = 'Wikibooks-logo.svg|link=wikibooks:', ['text'] = 'libro', ['prefix'] = 'wikibooks:es:', ['title'] = '',}, ['eswiki'] = { ['name'] = 'Wikipedia', ['image'] = 'Wikipedia-logo-simple.png|link=w:', ['text'] = 'artículo enciclopédico', ['prefix'] = 'w:es:', ['title'] = '',}, ['eswiktionary'] = { ['name'] = 'Wiktionary', ['image'] = 'Wiktionary-logo.svg|link=wikt:', ['text'] = 'diccionario', ['prefix'] = 'wikt:es:', ['title'] = '',}, ['eswikiquote'] = { ['name'] = 'Wikiquote', ['image'] = 'Wikiquote-logo.svg|link=wikiquote:', ['text'] = 'citas', ['prefix'] = 'wikiquote:es:', ['title'] = '',}, ['specieswiki'] = { ['name'] = 'Wikispecies', ['image'] = 'Wikispecies-logo.svg|link=species:', ['text'] = 'taxonomía', ['prefix'] = 'species:', ['title'] = '',}, ['eswikiversity'] = { ['name'] = 'Wikiversity', ['image'] = 'Wikiversity-logo.svg|link=wikiversity:', ['text'] = 'clase', ['prefix'] = 'wikiversity:es:', ['title'] = '',}, ['eswikivoyage'] = { ['name'] = 'Wikivoyage', ['image'] = 'Wikivoyage-logo.svg|link=Wikivoyage:', ['text'] = 'clase', ['prefix'] = 'wikivoyage:es:', ['title'] = '',}, ['wikidata'] = { ['name'] = 'Wikidata', ['image'] = 'Wikidata-logo.svg|link=d:', ['text'] = 'metadatos', ['prefix'] = 'd:', ['title'] = '',}, ['desambiguacion']= { ['name'] = 'Desambiguación', ['image'] = 'Disambiguation.svg', ['text'] = 'títulos similares', ['prefix'] = '', ['title'] = '',}, } -- toma los enlaces directamente desde los parámetros de la plantilla. Ejemplo, |Wikipedia= en {{encabezado}} function p.getlinksfromargs( args, relevantsList ) local lang = mw.language.getContentLanguage() local output = relevantsList for key, value in pairs( args ) do if value ~='' then key = lang:lcfirst(tostring(key)) if (aliases[key]) then key=aliases[key] --si hay alias, usarlo end if (output[key]) then output[key]["title"] = value end end end return output end function p.getlinksfromwikidata(relevantsList, QID ) local output = relevantsList local Entidad = mw.wikibase.getEntityObject(QID) if Entidad then output["wikidata"]["title"]=Entidad.id if Entidad["sitelinks"] and getsize(Entidad["sitelinks"]) > 1 then for k, v in pairs(Entidad["sitelinks"]) do if output[k] then output[k]["title"]=v["title"] end end elseif Entidad["claims"] and Entidad["claims"]["P629"] then -- edición de... local P629 = Entidad["claims"]["P629"][1]["mainsnak"]["datavalue"]["value"]["id"] local newEntidad = mw.wikibase.getEntityObject(P629) newEntidad["sitelinks"] = newEntidad["sitelinks"] or {} --inicializar en caso de obras originales sin sitelinks for k, v in pairs(newEntidad["sitelinks"]) do if output[k] then output[k]["title"]=v["title"] end end end -- categoría en commons if output['commonswiki']['title'] == '' and Entidad["claims"] and Entidad["claims"]["P373"] then output['commonswiki']['title'] = 'Category:'..Entidad["claims"]["P373"][1]["mainsnak"]["datavalue"]["value"] end end return output end --todos los enlaces function p.all(args) local QID if args.wikidata and args.wikidata ~= '' then QID = args.wikidata else QID = mw.wikibase.getEntityIdForCurrentPage() end -- Wikidata y luego args, en ese orden local output = p.getlinksfromwikidata(p.relevants, QID) output = p.getlinksfromargs( args, output ) return output end function p.formattedlinks (relevantList) local linklist = {} for k, v in pairs(relevantList) do if v.title ~= '' then local link = '<span style="white-space:nowrap;">' if v.image then link = link..'[[File:'.. v.image ..'|16px]]&nbsp;' end link = link..'[[' .. v.prefix .. v.title .. '|' .. v.text .. ']]</span>' table.insert(linklist, link) end end local noofwords = table.maxn( linklist ) local output if (noofwords == 0) then output = '' elseif ( noofwords == 1 ) then output = linklist[1] .. '.' else output = table.concat( linklist, ' &nbsp; ', 1, noofwords ) .. '.' end return ( output ) end --funcion para {{biocitas}} function p.formattedbiocitas (relevantList, order) local linklist = {} for _, x in pairs(order) do local v = relevantList[x] if v and v["title"] ~= '' then local link = '<div class="bc-enlace">[[File:'..v['image'].. '|16px]]<span style=\'display:inline-block; width:.5em;\'>&nbsp;</span>[[' .. v['prefix'] .. v['title'] .. '|' .. v['text'] .. ']]</div>' table.insert(linklist, link) end end local noofwords = table.maxn( linklist ) local output if (noofwords == 0) then output = '' else output = table.concat( linklist, '\n', 1, noofwords ) end return ( output ) end -- The main function to run the module function p.main( frame ) local links = p.all(frame) return p.formattedlinks(links) end return p r1y4dm78bw31fb5klff90osnepokt4m Índice:Anales de la Sociedad Científica Argentina - Tomo 23.djvu 104 279049 1653865 1595701 2026-05-15T01:55:54Z Ignacio Rodríguez 3603 1653865 proofread-index text/x-wiki {{:MediaWiki:Proofreadpage_index_template |Titulo= |Subtitulo= |Volumen=[[Anales de la Sociedad Científica Argentina/Tomo 23|Tomo 23]] |Autor= |Editor= |Traductor= |Prologuista= |Imprenta= |Editorial= |Ilustrador= |Ano= |Lugar= |derechos=Argentina |Fuente={{IA|analesdelasocied23soci}} |Imagen=7 |Progreso=C |Paginas=<pagelist 1="Cover" 2to6="–" 7="Title" 8=4 293to297="–" 298="Cover" /> |Notas={{Página:Anales de la Sociedad Científica Argentina - Tomo 23.djvu/293}} |Wikidata=Q124988361 |Serie={{ASCA volúmenes}} |Header= |Footer= |Modernizacion=default |Dict= |ultima-muerte= }} e118jfhfs6jh53vgbibcpmzelqt4upw Módulo:Proofreadpage index template 828 350732 1653864 1651890 2026-05-15T01:55:10Z Ignacio Rodríguez 3603 reajuste de limpieza de código y corrección de alguno que otro errorcillo 1653864 Scribunto text/plain -------------------------------------------------------------------------------- -- Adaptado de https://en.wikisource.org/wiki/Module:Proofreadpage_index_template -- y https://ca.wikisource.org/wiki/Module:Proofreadpage_index_template -- This is a module to implement logic for [[MediaWiki:Proofreadpage index template]] -------------------------------------------------------------------------------- -- Ejemplo (función p.fields): -- {{#invoke:Proofreadpage index template|fields|NomPag=El Robinson suizo (1864).pdf|NomPagE=El_Robinson_suizo_(1864).pdf|Paginas=tabla|Wikidata=Q107297266}} -------------------------------------------------------------------------------- local Wikidata = require('Module:Wikidata') local getArgs = require('Module:Arguments').getArgs local p = {} --p stands for package -- mapping of field ID to field properties local headings = { title = { txt = 'Título', index='Titulo', p='P1476', list=false}, subtitle = { txt = 'Subtítulo', index='Subtitulo', p='P1680', list=false}, serie = { txt = 'Serie o colección', index='Serie', p='P361', list=true}, --P361:"forma parte de" volume = { txt = 'Volumen', index='Volumen', p='P478', list=false}, author = { txt = 'Autor [[Archivo:Commons-emblem-notice.svg|20px|alt=|frameless|link=Ayuda:Autores]]', index = 'Autor', p='P50', list=true }, editor = { txt = 'Editor', index='Editor', p='P98', list=true}, illustrator = { txt = 'Ilustrador', index='Ilustrador', p='P110', list=true}, translator = { txt = 'Traductor', index='Traductor', p='P655', list=true}, introducer = { txt = 'Prologuista', index='Prologuista', p='P2679', list=true}, year = { txt = 'Año', index='Ano', p='P577', fmt=" j xg Y", list=false}, editorial = { txt = 'Editorial [[Archivo:Commons-emblem-notice.svg|20px|alt=|frameless|link=Portal:Imprentas_y_editoriales]]', index='Editorial', p='P123', list=true}, printer = { txt = 'Imprenta [[Archivo:Commons-emblem-notice.svg|20px|alt=|frameless|link=Portal:Imprentas_y_editoriales]]', index='Imprenta', p='P872', list=true}, place = { txt = 'Lugar', index='Lugar', p='P291', fmt='label', list=true}, country = { txt = 'País [[Archivo:PD-icon.svg|15px|alt=|frameless|link=Wikisource:Derechos_de_autor]]', index = 'derechos', fmt='label'}, --derechos (P495) pasar a Wikidata realmente? editionof = { txt = 'Obra', index='Obra', p='P629', list=true}, source = { txt = 'Fuente [[Archivo:Commons-emblem-notice.svg|20px|alt=|frameless|link=Wikisource:Recursos_libres]]', index= 'Fuente'}, modernizar = { txt = 'Modernización de la ortografía [[Archivo:Commons-emblem-notice.svg|20px|alt=|frameless|link=Wikisource:Modernización_de_textos]]', index='Modernizacion'}, quality = { txt = 'Progreso', index='Progreso'}, wikidata = { txt = 'Metadatos', index='Wikidata'}, } local ciudad_a_pais = { -- Argentina ["Buenos Aires"] = "Argentina", ["La Plata"] = "Argentina", ["Santa Fe"] = "Argentina", -- Chile ["La Serena"] = "Chile", ["Santiago de Chile"] = "Chile", ["Valparaíso"] = "Chile", ["Concepción"] = "Chile", -- Colombia ["Bogotá"] = "Colombia", -- Costa Rica ["San José"] = "Costa Rica", -- Cuba ["La Habana"] = "Cuba", -- México ["México"] = "México", ["Veracruz"] = "México", ["Puebla"] = "México", ["Guadalajara"] = "México", ["Monterrey"] = "México", ["Zacatecas"] = "México", -- Panamá ["Panamá"] = "Panamá", -- Paraguay ["Asunción"] = "Paraguay", -- Perú ["Lima"] = "Perú", -- Uruguay ["Montevideo"] = "Uruguay", -- Venezuela ["Caracas"] = "Venezuela", -- España ["Madrid"] = "España", ["Barcelona"] = "España", ["Murcia"] = "España", ["Sevilla"] = "España", ["Valencia"] = "España", ["Tarragona"] = "España", ["Zaragoza"] = "España", ["Cádiz"] = "España", ["Málaga"] = "España", ["Vigo"] = "España", -- Otros ["New York"] = "Estados Unidos", ["Manila"] = "Filipinas", ["London"] = "Reino Unido", ["Paris"] = "Francia", ["Rome"] = "Italia", ["Lisboa"] = "Portugal" } local ciudades_rexp = { -- Argentina ["Buenos%-Aires"] = "Buenos Aires", ["Santa F[eé]"] = "Santa Fe", -- Chile ["Santiago, Chile"] = "Santiago de Chile", ["Santiago"] = "Santiago de Chile", ["Valpara[íi]so"] = "Valparaíso", ["Concepci.n"] = "Concepción", -- Colombia ["Bogot[áa]"] = "Bogotá", -- Costa Rica ["San Jos[eé]"] = "San José", -- Cuba ["Habana"] = "La Habana", -- México ["Ciudad de M[eé][xjg]ico"] = "México", ["M[eé][xjg]ico"] = "México", ["Vera[ ]*[Cc]ruz"] = "Veracruz", ["Monter+ey"] = "Monterrey", -- Panamá ["Panam[áa]"] = "Panamá", -- Paraguay ["Asunci[óo]n"] = "Asunción", -- España ["Se[uv]illa"] = "Sevilla", ["C[áa]diz"] = "Cádiz", ["M[áa]laga"] = "Málaga", -- Otros ["Nueva York"] = "New York", ["Londres"] = "London", ["Par[ií]s"] = "Paris", ["Rom[ae]"] = "Rome", ["Lisbon"] = "Lisboa" } local function get_country(city) if ciudad_a_pais[city] then return ciudad_a_pais[city] else for i, k in ipairs(ciudades_rexp) do if city:match(k) then return ciudad_a_pais[ciudades_rexp[k]] end end end end local function get_heading(id) if headings[id] then return headings[id].txt end error( "Can't find heading for ID: " .. id ) end local function construct_image(content, nompage, qid, nompag) if nompage == nil or nompage == '' then error('nompage no puede ser nulo') end local s = '' --Miramos si en WD hay 1 o más P996, capturamos el que coincida, y le miramos el P4714 (nº pág. con título). local P4714 = '' if qid then local FileOnCommonsStmts = mw.wikibase.getAllStatements (qid, 'P996'); if FileOnCommonsStmts then for _, stmt in pairs( FileOnCommonsStmts ) do local commonsFilename = stmt['mainsnak']['datavalue']['value'] --decode: nompag podría venir con "&#39;" en lugar de "'" (apóstrofe) if mw.text.decode(nompag) == commonsFilename then P4714 = Wikidata.claim{item=qid, property="P996", qualifier="P4714", lang="es", list=false} end end end end s = s .. '<tr><td valign="top">' if content then else if P4714 == '' then content = '1' --si no hay nada de nada else content = P4714 end if content == nil then content = '1' end end if tonumber(content) == nil then s = s .. content else s = s .. '<span id="ws-cover" style="display:none; speak:none;">' s = s .. nompage .. "/" .. content .. "</span>" s = s .. '[[File:' .. nompage .. '|page=' .. content .. '|frameless]]' end s = s .. '</td>' s = s .. '<td valign="top"><table style="margin-left:0">' --se cierran en construct_field_paginas return s end local function construct_field_paginas(content, nompage) if nompage == nil or nompage == '' then return "Error en construct_field_pagines (nompage)" end if content == nil or content == '' then return "Error en construct_field_pagines (content)" end local s = '' s = s .. '</table></td></tr>' s = s .. '<tr><td valign="top" colspan="2"><span class="plainlinks">' s = s .. '<b>[//es.wikisource.org/wiki/File:' .. nompage .. '?action=purge Páginas]</b></span>' s = s .. ' ([[Ayuda:Nivel_de_las_páginas|Nivel]])\n' s = s .. '<div style="padding-left:0.5em; background-color:#F0F0F0; color:black;">\n' .. content .. '</div></td></tr>' s = s .. '</table></td>' return s end local function construct_field_sumario(content) local s = '' if content then s = '<td width="33%" valign="top">' .. content .. '</td>' end return s end -------------------------------------------------------------------------------- -- Get an Item based on what's passed in the 'wikidata' or 'page' parameters of -- the args, or the current page's ID otherwise. local function getItem( args ) local id = nil if type( args ) == 'string' and args ~= '' then id = args end return mw.wikibase.getEntity( id ) end -------------------------------------------------------------------------------- -- Exported method. Get wikitext for displaying an edition's badges from Wikidata. -- Adaptado de https://ca.wikisource.org/wiki/Module:Edition local function getBadge( args ) local item = getItem( args ) --por defecto, id de la página if args.qid ~= nil then --pero si pasamos un qid, id pasado item = mw.wikibase.getEntity(args.qid) end if not ( item and item.sitelinks and item.sitelinks.eswikisource and item.sitelinks.eswikisource.badges ) then return '' end local badges = item.sitelinks.eswikisource.badges local out = '' for _, badge in pairs( badges ) do local badgeOut = '' local badgeItem = mw.wikibase.getEntity( badge ) local wikisourceBadgeClass = 'Q75042035' if badgeItem.claims.P31[1].mainsnak.datavalue.value.id == wikisourceBadgeClass and badgeItem.claims.P18 ~= nil then if badge ~= nil then badgeOut = badgeOut .. badge --Q20748091 (no corr.), Q20748092 (corr.), Q20748093 (val.), Q20748094 (err.) end out = out .. badgeOut end end return mw.getCurrentFrame():preprocess( out ) end local function consolidado(args) local c = {} c.qid = args['Wikidata'] c.nompag = args['NomPag'] for id in pairs(headings) do local idx = headings[id] c[id] = {} if idx.index then --toma datos del índice c[id].WS = args[idx.index] end if c.qid and idx.p then --tiene propiedad en Wikidata c[id].WD = Wikidata.claim{item=c.qid, property=idx.p, lang="es", list=idx.list, formatting=idx.fmt} end -- content: prioridad WS c[id].content = c[id].WS or c[id].WD end return c end -- construct a basic "field" row local function construct_field(id, c) if id == nil then error( "Error en construct_field" ) end local qid = c.qid local idx = c[id] local content = idx.content local CatError = "[[Categoría:Índices con discrepancias respecto a Wikidata" local contentAux = idx.WS local siWDsiWS = idx.WD and idx.WS --hay contenido en WD y en WS (se puede borrar) local noWDsiWS = not idx.WD and idx.WS --no hay contenido en WD pero sí en WS (no borrar hasta migrarlo a WD) local siWDnoWS = idx.WD and not idx.WS local eqWDWS = siWDsiWS and idx.WD == idx.WS local caterror = false --campo generó error if id == 'translator' or id =='illustrator' or id == 'editor' or id == 'introducer' or id == 'editorial' or id == 'printer' or id == 'serie' or id == 'editionof' then if content == 'valor desconocido' then content = 'Anónimo' end end -- casos especiales if id == 'author' then if content == 'valor desconocido' then content = '[[:Categoría:Obras de autores anónimos|Anónimo]]' end local cadena_autor = Wikidata.claim{item=qid, property='P2093', lang="es", list=true} if content and cadena_autor then content = content .. ', ' .. cadena_autor elseif not content and cadena_autor then content = cadena_autor end end if id == 'title' then if not idx.WS then local wSiteLink = mw.wikibase.getSitelink(qid) if wSiteLink then if idx.WD then content = "''[[" .. wSiteLink .. "|" .. idx.WD .. "]]''" else content = "''[[" .. wSiteLink .. "]]''" end elseif idx.WD then content = "''[["..idx.WD.."]]''" end end end if id == 'modernizar' then if content then if content == 'S' then content = '[[Wikisource:Modernización de textos|Ortografía antigua — El lector puede elegir modernizar la ortografía]]' else content = '[[Wikisource:Modernización de textos|No modernizar]]' end end end if id == 'source' then if content == nil then if c.nompag == nil then content = CatError .. "|Nompag]]" caterror = 'ERROR: Nompag' else --todo: se podría buscar los identificadores de Wikidata P675 (GB), P724 (IA), etc. content = "[[:File:" .. c.nompag .. "|Archivo]][[Categoría:Índices sin fuente]]" end else -- revisar: en general la fuente la explicitamos localmente con una plantilla -- tenemos que trackear si está en Wikidata? cual propiedad? -- noWDsiWS = true end end if id == 'wikidata' then if content == nil then return "[[Categoría:Índices no conectados a Wikidata]]" end content = "[[File:Wikidata-logo.svg|20px|link=d:" .. contentAux .. "]] [[d:" .. contentAux .. "|" .. contentAux .. "]]" if mw.wikibase.entityExists(qid) == false then content = content .. CatError .. "|Qid]]" caterror = 'ERROR: QID NO EXISTE' end if #mw.wikibase.getBestStatements(qid,'P996') == 0 then local wTitulo = mw.title.getCurrentTitle() --Nombre sin "Índice:" if wTitulo.text then local wArchivo = mw.title.new( wTitulo.text, 'File' ) if wArchivo.exists then --Archivo no está en Commons pero sí localmente en Wikisource (casos excepcionales) else --No hay archivo local ni P996: hay que añadirlo (archivo en Commons) al ítem en Wikidata. content = content .. CatError .. "|Commons]]" caterror = 'ERROR: SIN P996 (archivo en Commons)' end else content = content .. CatError .. "|Error]]" caterror = 'ERROR: SIN TEXTO EN ÍNDICE' end elseif c.nompag then local FileMatch = '' local FileOnCommonsStmts = mw.wikibase.getAllStatements (qid, 'P996'); for _, stmt in pairs( FileOnCommonsStmts ) do local commonsFilename = stmt['mainsnak']['datavalue']['value'] if mw.text.decode(c.nompag) == mw.text.decode(commonsFilename) then --decode por si apóstrofe llega como "&#39;" FileMatch = commonsFilename end end if FileMatch == '' then content = content .. CatError .. "|Fichero]]" caterror = 'ERROR: P996 REFIERE OTRO FICHERO' end end end if id == 'quality' then if qid then local badges = getBadge(qid) if badges then -- revisar: lo mismo que en source, necesidad de trackear? -- if content then siWDsiWS = true end content = "C" if badges == "Q20748091" then content = "C" end if badges == "Q20748092" then content = "V" end if badges == "Q20748093" then content = "T" end if badges == "Q20748094" then content = "L" end else --if content then noWDsiWS = true end end if contentAux then --tiene preferecia lo informado a mano content = contentAux end end if content == nil then content = "[[Categoría:Índices no corregidos]][[:Categoría:Índices no corregidos|Por corregir]]" elseif content == 'C' then content = "[[Categoría:Índices no corregidos]][[:Categoría:Índices no corregidos|Por corregir]]" elseif content == 'P' then content = "[[Categoría:Índices sin pagelist]][[:Categoría:Índices sin pagelist|Por corregir - pendiente crear <nowiki><pagelist/></nowiki>]]" elseif content == 'V' then content = "[[Categoría:Índices corregidos]][[:Categoría:Índices corregidos|Corregido — Todas las páginas corregidas pero no todas validadas]]" elseif content == 'T' then content = "[[Categoría:Índices validados]][[:Categoría:Índices validados|Terminado — Todas las páginas validadas]]" elseif content == 'L' then content = "[[Categoría:Índices dañados]][[:Categoría:Índices dañados|Archivo fuente debe ser arreglado antes de corregirlo]]" elseif content == 'E' then content = "[[Categoría:Índices en extractos]][[:Categoría:Índices en extractos|Extracto]]" else content = "[[Categoría:Índices no corregidos]][[:Categoría:Índices no corregidos|Por corregir]]" end end -- categorías de seguimiento if id == 'editionof' then if content == nil or content == '' then return '[[Categoría:Índices sin obra asociada]]' else content = '[[Categoría:Índices con obra asociada]]'..content end end -- parámetros que no deben pasar a Wikidata if id == 'serie' then noWDsiWS = false end if content == nil or content == '' then return '' end local title = get_heading( id ) if siWDnoWS == true then local lapiz = ' <span class="penicon" data-bridge-edit-flow="single-best-value">' .. "[[File:Arbcom ru editing.svg|10px|baseline|" .. string.gsub(mw.message.new('Wikibase-client-data-bridge-bailout-suggestion-go-to-repo-button'):inLanguage("es"):plain(), '{{WBREPONAME}}', 'Wikidata') if id == 'title' then content = content .. lapiz .. "|link=https://www.wikidata.org/wiki/" .. qid .. "?uselang=es#sitelinks-wikisource]]</span>" else local P = headings[id].p if P and P ~= '' then content = content .. lapiz .. "|link=https://www.wikidata.org/wiki/" .. qid .. "?uselang=es#" .. P .. "]]</span>" end end end if siWDsiWS then content = content .. "[[Categoría:Índices con datos en Wikidata]]" title = title .. "<span style='color:blue; font-size:75%;' title='Datos en Wikidata'>*</span>" end if noWDsiWS then content = content .. "[[Categoría:índices con datos para Wikidata]]" title = title .. "<span style='color:green; font-size:75%;' title='Datos para Wikidata'>*</span>" end if eqWDWS then content = content .. "[[Categoría:índices con datos duplicados en Wikidata]]" title = title .. "<span style='color:green; font-size:75%;' title='Datos duplicados en Wikidata'>*</span>" end if caterror and caterror ~= '' then title = title .. "<span style='color:red; font-size:75%;' title='"..caterror.."'>*</span>" end local s = '' s = s .. '\n<tr>' s = s .. '<th valign="top" align="left"><b>' .. title .. '</b></th>\n' s = s .. '<td>' .. content .. '</td>\n' s = s .. '</tr>\n' return s end function p.fields(frame) local args = getArgs(frame) if args['Lugar'] and get_country(args['Lugar']) then args['derechos'] = get_country(args['Lugar']) end local c = consolidado(args) local s = "" s = s .. '<table width="100%"><tr><td valign="top"><table>' s = s .. construct_image(args['Imagen'], args['NomPagE'], args['Wikidata'], args['NomPag']) -- Tras la imagen, intentamos mostrar una fila por campo (si no hay contenido, no aparece) s = s .. construct_field('author', c) s = s .. construct_field('translator', c) s = s .. construct_field('editor', c) s = s .. construct_field('introducer', c) s = s .. construct_field('title', c) s = s .. construct_field('subtitle', c) s = s .. construct_field('volume', c) s = s .. construct_field('year', c) s = s .. construct_field('place', c) s = s .. construct_field('country', c) s = s .. construct_field('printer', c) s = s .. construct_field('editorial', c) s = s .. construct_field('illustrator', c) s = s .. construct_field('editionof', c) s = s .. construct_field('source', c) s = s .. construct_field('serie', c) s = s .. construct_field('modernizar', c) s = s .. construct_field('wikidata', c) s = s .. construct_field('quality', c) s = s .. '<tr><td colspan="2">[[Archivo:Commons-emblem-notice.svg|20px|enlace=|alt=|frameless]] [[Ayuda:Índices|Ayuda]]</td></tr>' s = s .. construct_field_paginas(args['Paginas'], args['NomPagE']) s = s .. construct_field_sumario(args['Notas']) s = s .. '</tr></table>' return s end return p ikfc5305vdt9jlx46za1uk2oov8n7yj Índice:Viaje al Interior de Tierra del Fuego (1906).pdf 104 355927 1653867 1598979 2026-05-15T01:56:46Z Ignacio Rodríguez 3603 1653867 proofread-index text/x-wiki {{:MediaWiki:Proofreadpage_index_template |Titulo= |Subtitulo= |Volumen= |Autor= |Editor= |Traductor= |Prologuista= |Imprenta= |Editorial= |Ilustrador= |Ano= |Lugar= |derechos=Argentina |Fuente=[http://repositorio.segemar.gov.ar/308849217/622 Obra] en el [https://repositorio.segemar.gov.ar/ Repositorio SegemAR] |Imagen=1 |Progreso=C |Paginas=<pagelist 1="Portada" 2="—" 3="4" 95="Índice" 96="-" /> |Notas={{Página:Viaje al Interior de Tierra del Fuego (1906).pdf/95}} |Wikidata=Q129789603 |Serie= |Header= |Footer= |Modernizacion=N |Dict= |ultima-muerte=1923 }} bm1qwrbbjng6us2y69c6jlg7s4he52j Índice:Colección de documentos ineditos relativos al descubrimiento, conquista y organización de las antiguas posesiones españolas de ultramar - IA colecciondocument12seririch.djvu 104 357851 1653866 1596267 2026-05-15T01:56:26Z Ignacio Rodríguez 3603 1653866 proofread-index text/x-wiki {{:MediaWiki:Proofreadpage_index_template |Titulo= |Subtitulo= |Volumen=12 |Autor= |Editor= |Traductor= |Prologuista= |Imprenta= |Editorial= |Ilustrador= |Ano=1885-1932 |Lugar= |derechos= |Fuente={{IA|colecciondocument12seririch}} |Imagen=1 |Progreso=C |Paginas=<pagelist 1to8="-" 9="Portada" 10to11="-" 12=6 407to414="-" /> |Notas= |Wikidata=Q130460387 |Serie= |Header= |Footer= |Modernizacion=default |Dict= |ultima-muerte= }} ixhxemz0xbihxzfxdevn584ishoeyo7 Módulo:Galería 828 358608 1653828 1553232 2026-05-14T15:39:18Z Ignacio Rodríguez 3603 delink centralizado / lints lua 1653828 Scribunto text/plain --[[ Genera galerías a partir de una lista de Índices ]] require('strict') local langs = { Titulo = 'title', Ano = 'pubYear', Autor = 'author', Traductor = 'translator', Ilustrador = 'illustrator', Prologuista = 'introducer', } local p = {} local getArgs = require('Módulo:Arguments').getArgs local delink = require('Módulo:String').delink local loadWikidata = function(fields, work) for field in pairs(langs) do if not fields[field] or fields[field] == '' then local workfield = work[langs[field]] if type(workfield) == 'table' then workfield = tostring(require('Módulo:Enlace libro').renderAuthorLinks( workfield, 'wst-worklink-authors' )) end fields[field] = workfield end end return fields end function p.galeria(frame) local args = getArgs(frame) local content = {} if args[1] == nil then return '' end for file in mw.text.gsplit(args[1], '\n') do if file =='' then -- pass else if mw.ustring.match(file, 'Índice:') then file = mw.ustring.sub(file, 8) end local index = mw.ext.proofreadPage.newIndex( file ) if not index.title.exists then -- pass else local fields = index.fields local work = require('Módulo:Obra').newWork(file) fields = loadWikidata(fields, work) local archivo = 'Archivo:' .. file local page = fields.Imagen local titulo = fields.Titulo local anyo = fields.Ano local roles = '' local coma = false for i, role in ipairs{'Autor', 'Traductor', 'Ilustrador', 'Prologuista'} do local Role = fields[role] if Role and Role ~= '' then if coma then roles = roles..', <br>' end coma = true if role == 'Autor' then roles = roles..'por ' .. Role elseif role == 'Traductor' then roles = roles..'traducido por ' .. Role elseif role == 'Ilustrador' then roles = roles..'ilustrado por ' .. Role elseif role == 'Prologuista' then roles = roles..'prólogo por ' .. Role end end end local str = archivo .. '|page='..page..'|link=Índice:'..file..'|' str = str .. "'''" .. titulo .. "''' (".. anyo..")<br/> <span style=\"font-size: 83%;\">" if roles ~= '' then str = str..roles end str = str..'</span>' -- TODO: parámetro para no mostrar links de descarga titulo = delink(titulo) local dlink = frame:expandTemplate{ title = 'descarga2', args={titulo} } str= str..'<br/>'..dlink table.insert(content, str) end end end local all = table.concat(content, '\n') local tag = frame:extensionTag( 'gallery', all, { heights = 200, widths = 200, mode="packed" } ) return tag end return p q1pdzevcgryng7nrlr1auhwx36ut8yv Módulo:Interproyecto 828 365012 1653816 1502816 2026-05-14T14:37:45Z Ignacio Rodríguez 3603 rip wikinews 1653816 Scribunto text/plain local p = {} local Wikidata = require('Módulo:Wikidata') local Entidad = mw.wikibase.getEntityObject() or '' -- Tabla con los datos en Wikidata local Str = require('Módulo:String') local Enlaces = require('Módulo:Enlaces') --parámetros reconocidos. 1 = vigente, 0 = obsoleto. En orden alfabético: local params = {['commons']=1,['commonscat']=1,['wikiviajes']=1, ['wikcionario']=1,['wikidata']=1,['wikilibros']=1,['wikinoticias']=1,['wikipedia']=1,['wikiquote']=1,['wikispecies']=1,['wikiversidad']=1} -- Función que devuelve la lista de los valores de una propiedad en Wikidata formateados function propiedad(idPropiedad,opciones) if Entidad and Entidad.claims then --and Entidad.claims[idPropiedad] then if not opciones then opciones = {} end idPropiedad = string.upper(idPropiedad) opciones['propiedad'] = idPropiedad valorPropiedad = Wikidata.getPropiedad(opciones,Entidad.claims[idPropiedad]) if not valorPropiedad or valorPropiedad == '' then return '' end return valorPropiedad else return '' end end function p.interproyecto( frame ) local frame = frame:getParent() local titulo = mw.title.getCurrentTitle() local argus = {} for k,v in pairs(frame.args) do -- crea una tabla con los parámetros incluídos en la plantilla, y elimina parámetros vacíos if v ~= '' and type(k) ~= 'number' then argus[mw.ustring.lower(k)] = v -- todos los parámetros en minúsculas por defecto: end end -- WIKIDATA! -- if Entidad == '' and argus['wikidata'] then Entidad = mw.wikibase.getEntityObject(argus['wikidata']) end local nombre = frame:preprocess("{{PAGENAME}}") -- Lista de enlaces if (not argus['wikidata'] or argus['wikidata'] == '') and Entidad~=nil then argus['wikidata']=Entidad.id --enlazar a elemento wikidata end ---- Enlaces uno por uno --- listaenlaces = Enlaces.all(argus) listaenlaces["eswiki"]["text"] = "Enciclopedia" listaenlaces["eswikiquote"]["text"] = "Citas" listaenlaces["commonswiki"]["text"] = "Multimedia" listaenlaces["specieswiki"]["text"] = "Especies descritas" listaenlaces["wikidata"]["text"] = "Metadatos" listaenlaces["eswikibooks"]["text"] = "Libros" listaenlaces["eswikiversity"]["text"] = "Clases" listaenlaces["eswiktionary"]["text"] = "Diccionario" listaenlaces["eswikivoyage"]["text"] = "Viajes" orden = { 'eswiki', 'eswikiquote','eswiktionary', 'eswikibooks' , 'eswikiversity' , 'eswikinews', 'commonswiki', 'specieswiki', 'eswikivoyage' ,'wikidata'} textoenlaces = Enlaces.formattedbiocitas(listaenlaces, orden) local contenido = mw.html.create( 'div' ) :addClass( 'ws-noexport' ) :css( 'margin', '5px') :css( 'float', 'right' ) :css( 'box-sizing', 'border-box') :css( 'border', '1px solid #808080') :css( 'width', '30%'); local nodoimagen = contenido:tag( 'div' ) :css(' margin', '5px') :css('text-align','center'); --P41 if argus['imagen'] ~= '' and argus['imagen'] ~= nil then nodoimagen:wikitext("[[File:"..argus['imagen'].."|frameless|99999x150px|center]]") elseif propiedad('p41') ~= '' then nodoimagen:wikitext("[[File:"..propiedad('p41',{['uno']='sí'}).."|frameless|99999x150px|Bandera|center]]") elseif propiedad('p18') ~= '' then nodoimagen:wikitext("[[File:"..propiedad('p18',{['uno']='sí'}).."|frameless|99999x150px|"..propiedad('p18',{['calificador']='P2096',['idioma']='es'}).."|center]]") end nodoimagen:done() local nodonombre = contenido:tag( 'div' ) :css(' margin', '5px') :css( 'text-align' , 'center') :css( 'background' , '#6688AA') :css('color', 'white') :css('font-weight','bold') :css('font-size', '120%'); if argus['nombre'] ~= '' and argus['nombre'] ~= nil then nodonombre:wikitext( argus['nombre'] ) else nodonombre:wikitext( nombre ) end nodonombre:done() local nodoenlaces = contenido:tag( 'div' ) :css(' margin', '5px') :css('text-align','center'); nodoenlaces:wikitext(textoenlaces) nodoenlaces:done() return contenido:done() end return p tj166244nzqa4pgifweepkh3efykhqq 1653829 1653816 2026-05-14T15:43:38Z Ignacio Rodríguez 3603 strict 1653829 Scribunto text/plain local p = {} local Wikidata = require('Módulo:Wikidata') local propiedad = Wikidata.getPropiedad local Entidad = mw.wikibase.getEntityObject() or '' -- Tabla con los datos en Wikidata local Enlaces = require('Módulo:Enlaces') function p.interproyecto( frame ) frame = frame:getParent() -- local titulo = mw.title.getCurrentTitle() local argus = {} for k,v in pairs(frame.args) do -- crea una tabla con los parámetros incluídos en la plantilla, y elimina parámetros vacíos if v ~= '' and type(k) ~= 'number' then argus[mw.ustring.lower(k)] = v -- todos los parámetros en minúsculas por defecto: end end -- WIKIDATA! -- if Entidad == '' and argus['wikidata'] then Entidad = mw.wikibase.getEntityObject(argus['wikidata']) end local nombre = frame:preprocess("{{PAGENAME}}") -- Lista de enlaces if (not argus['wikidata'] or argus['wikidata'] == '') and Entidad~=nil then argus['wikidata']=Entidad.id --enlazar a elemento wikidata end ---- Enlaces uno por uno --- local listaenlaces = Enlaces.all(argus) listaenlaces["eswiki"]["text"] = "Enciclopedia" listaenlaces["eswikiquote"]["text"] = "Citas" listaenlaces["commonswiki"]["text"] = "Multimedia" listaenlaces["specieswiki"]["text"] = "Especies descritas" listaenlaces["wikidata"]["text"] = "Metadatos" listaenlaces["eswikibooks"]["text"] = "Libros" listaenlaces["eswikiversity"]["text"] = "Clases" listaenlaces["eswiktionary"]["text"] = "Diccionario" listaenlaces["eswikivoyage"]["text"] = "Viajes" local orden = { 'eswiki', 'eswikiquote','eswiktionary', 'eswikibooks' , 'eswikiversity' , 'eswikinews', 'commonswiki', 'specieswiki', 'eswikivoyage' ,'wikidata'} local textoenlaces = Enlaces.formattedbiocitas(listaenlaces, orden) local contenido = mw.html.create( 'div' ) :addClass( 'ws-noexport' ) :css( 'margin', '5px') :css( 'float', 'right' ) :css( 'box-sizing', 'border-box') :css( 'border', '1px solid #808080') :css( 'width', '30%'); local nodoimagen = contenido:tag( 'div' ) :css(' margin', '5px') :css('text-align','center'); --P41 if argus['imagen'] ~= '' and argus['imagen'] ~= nil then nodoimagen:wikitext("[[File:"..argus['imagen'].."|frameless|99999x150px|center]]") elseif propiedad('p41') ~= '' then nodoimagen:wikitext("[[File:"..propiedad('p41',{['uno']='sí'}).."|frameless|99999x150px|Bandera|center]]") elseif propiedad('p18') ~= '' then nodoimagen:wikitext("[[File:"..propiedad('p18',{['uno']='sí'}).."|frameless|99999x150px|"..propiedad('p18',{['calificador']='P2096',['idioma']='es'}).."|center]]") end nodoimagen:done() local nodonombre = contenido:tag( 'div' ) :css(' margin', '5px') :css( 'text-align' , 'center') :css( 'background' , '#6688AA') :css('color', 'white') :css('font-weight','bold') :css('font-size', '120%'); if argus['nombre'] ~= '' and argus['nombre'] ~= nil then nodonombre:wikitext( argus['nombre'] ) else nodonombre:wikitext( nombre ) end nodonombre:done() local nodoenlaces = contenido:tag( 'div' ) :css(' margin', '5px') :css('text-align','center'); nodoenlaces:wikitext(textoenlaces) nodoenlaces:done() return contenido:done() end return p bp69apfrgvxqjn90symfj13nkwovrik 1653830 1653829 2026-05-14T15:47:13Z Ignacio Rodríguez 3603 ops 1653830 Scribunto text/plain local p = {} local Wikidata = require('Módulo:Wikidata') local Entidad = mw.wikibase.getEntityObject() or '' -- Tabla con los datos en Wikidata local Enlaces = require('Módulo:Enlaces') local function propiedad(idPropiedad,opciones) if Entidad and Entidad.claims then --and Entidad.claims[idPropiedad] then if not opciones then opciones = {} end idPropiedad = string.upper(idPropiedad) opciones['propiedad'] = idPropiedad local valorPropiedad = Wikidata.getPropiedad(opciones,Entidad.claims[idPropiedad]) if not valorPropiedad or valorPropiedad == '' then return '' end return valorPropiedad else return '' end end function p.interproyecto( frame ) frame = frame:getParent() -- local titulo = mw.title.getCurrentTitle() local argus = {} for k,v in pairs(frame.args) do -- crea una tabla con los parámetros incluídos en la plantilla, y elimina parámetros vacíos if v ~= '' and type(k) ~= 'number' then argus[mw.ustring.lower(k)] = v -- todos los parámetros en minúsculas por defecto: end end -- WIKIDATA! -- if Entidad == '' and argus['wikidata'] then Entidad = mw.wikibase.getEntityObject(argus['wikidata']) end local nombre = frame:preprocess("{{PAGENAME}}") -- Lista de enlaces if (not argus['wikidata'] or argus['wikidata'] == '') and Entidad~=nil then argus['wikidata']=Entidad.id --enlazar a elemento wikidata end ---- Enlaces uno por uno --- local listaenlaces = Enlaces.all(argus) listaenlaces["eswiki"]["text"] = "Enciclopedia" listaenlaces["eswikiquote"]["text"] = "Citas" listaenlaces["commonswiki"]["text"] = "Multimedia" listaenlaces["specieswiki"]["text"] = "Especies descritas" listaenlaces["wikidata"]["text"] = "Metadatos" listaenlaces["eswikibooks"]["text"] = "Libros" listaenlaces["eswikiversity"]["text"] = "Clases" listaenlaces["eswiktionary"]["text"] = "Diccionario" listaenlaces["eswikivoyage"]["text"] = "Viajes" local orden = { 'eswiki', 'eswikiquote','eswiktionary', 'eswikibooks' , 'eswikiversity' , 'eswikinews', 'commonswiki', 'specieswiki', 'eswikivoyage' ,'wikidata'} local textoenlaces = Enlaces.formattedbiocitas(listaenlaces, orden) local contenido = mw.html.create( 'div' ) :addClass( 'ws-noexport' ) :css( 'margin', '5px') :css( 'float', 'right' ) :css( 'box-sizing', 'border-box') :css( 'border', '1px solid #808080') :css( 'width', '30%'); local nodoimagen = contenido:tag( 'div' ) :css(' margin', '5px') :css('text-align','center'); --P41 if argus['imagen'] ~= '' and argus['imagen'] ~= nil then nodoimagen:wikitext("[[File:"..argus['imagen'].."|frameless|99999x150px|center]]") elseif propiedad('p41') ~= '' then nodoimagen:wikitext("[[File:"..propiedad('p41',{['uno']='sí'}).."|frameless|99999x150px|Bandera|center]]") elseif propiedad('p18') ~= '' then nodoimagen:wikitext("[[File:"..propiedad('p18',{['uno']='sí'}).."|frameless|99999x150px|"..propiedad('p18',{['calificador']='P2096',['idioma']='es'}).."|center]]") end nodoimagen:done() local nodonombre = contenido:tag( 'div' ) :css(' margin', '5px') :css( 'text-align' , 'center') :css( 'background' , '#6688AA') :css('color', 'white') :css('font-weight','bold') :css('font-size', '120%'); if argus['nombre'] ~= '' and argus['nombre'] ~= nil then nodonombre:wikitext( argus['nombre'] ) else nodonombre:wikitext( nombre ) end nodonombre:done() local nodoenlaces = contenido:tag( 'div' ) :css(' margin', '5px') :css('text-align','center'); nodoenlaces:wikitext(textoenlaces) nodoenlaces:done() return contenido:done() end return p rapiu208srnsv5hunnygf62ahftc376 Acta de la diputación provincial de San Salvador con la que la provincia se separa de la Capitanía General de Guatemala 0 404037 1653809 1639251 2026-05-14T13:51:02Z Ignacio Rodríguez 3603 dessangrar, más info 1653809 wikitext text/x-wiki {{DH}} {{Encabezado |titulo =Acta de la diputación provincial de San Salvador con la que la provincia se separa de la Capitanía General de Guatemala |año = 1822 |autor = Junta de Gobierno de la provincia de San Salvador |notas= Debido a que, en [[Acta de la anexión de la capitanía general de Guatemala al imperio mexicano|acta del 5 de enero de 1822]] la [[Autor:Junta Provisional Consultiva|Junta Provisional Consultiva]] declaró a la capitanía general de Guatemala unida al imperio mexicano; más adelante, en [[Acta del ayuntamiento de San Salvador con los miembros de la diputación provincial, en la que la diputación se erige en junta gubernativa|acta del mismo día]] (11 de enero) hecha junto con el ayuntamiento de la ciudad, la diputación provincial se erigió en junta gubernativa.}} Sesión 9ª (Mes de enero de 1822) se leyó y se aprobó la acta anterior, y con presencia del oficio del Excelentísimo señor Presidente don Gabino Gainza, fecha 7 del corriente, esta Diputación, con el detenimiento y madurez que exige la grandeza del asunto, conferenció seriamente el contenido del citado oficio, en cuya conferencia se trajeron a la vista, la acta y representaciones del 12 del próximo pasado dirigidas a la Excelentísima Junta Provisional de Guatemala, que no tuvo a bien contestar, y al mismo Excelentísimo señor Gainza, que contestó, dejando en pie todas las razones que esta Corporación manifestó, y diciendo, que sus providencias no eran opuestas a la reunión del Congreso; pues que habiendo consultado a aquel Ayuntamiento, si se continuaban las elecciones, había resuelto que se procediese a ellas; de que se infiere, que está Su Excelencia en el concepto de que debe reunirse; pero que acordada ya por el Gobierno la unión al Imperio Mejicano, sin esperar la resolución de los pueblos representados por sus Diputados en conformidad del pacto y juramento del 15 de septiembre; y teniendo la Diputación únicamente por objeto el tratar este negocio, defender y conservar ilesos los derechos de la libertad de los pueblos que la han elegido y componen la Provincia, cuidando sólo por consiguiente de mantener en su vigor y fuerza, lo mismo que con tanto júbilo abrazaron y juraron estos propios pueblos al entrar en su independencia; los cuales acostumbrados a obedecer ciegamente a los gobernantes, creyeron un precepto la agregación a Méjico, a que los invitó el referido Gobierno de Guatemala, contraviniendo al pacto y juramento del día 15 de septiembre, sin el discernimiento que correspondía a tamaño asunto: que se conteste el recibo del referido oficio de siete del corriente. SEGUNDO: que se haga prontamente la elección del Diputado que debe de ir al Gobierno de Méjico, acordada en el acta de 12 del próximo pasado. TERCERO: que reconocida desde el principio de las sesiones de esta Corporación la utilidad que atraerá a esta Provincia la unión al Imperio Mejicano, nunca ha pensado adoptar sistema alguno de Gobierno, sino únicamente ser religiosa y firme a los vinculos y juramentos con que dejó al Gobierno español y reunir sus Diputados para que decidan conforme a la ley, de la suerte de la Provincia. CUARTO: que siendo la conducta del Gobierno de Guatemala, desde el 30 de noviembre próximo pasado, opuesta abiertamente a la cordura con que esta Provincia ha procedido, se separa totalmente de él, reservándola para que en paz y tranquilidad se una a Méjico, si así lo dispusiere el Congreso, y se una por sí misma con las condiciones y decoro de un pueblo libre, sin permitir ser ofrenda y medio de negociaciones particulares. QUINTO: que esta separación ha de ser, observando la Constitución y las leyes, según se acordó en la referida acta de 15 de septiembre. SEXTO: que esto se comunique por oficio a la Exma. Junta Provisional de Guatemala, bajo el concepto de que deben ser respetadas las deliberaciones de la Provincia de San Salvador, como lo han sido las de León y Comayagua, y como el héroe de Nueva España, y los papeles públicos del Imperio, ofrecen respetar la voluntad de los pueblos; y que este acuerdo se circule a los Ayuntamientos de la Provincia. Con lo que se concluyó esta sesión que firmaron dichos señores, de que certifico. - Delgado -Arce - Rodríguez - Zeceña - Fagoaga - Ramón Meléndez, Secretario. [[Categoría:La provincia de San Salvador ante la anexión al imperio mexicano]] [[Categoría:Documentos de la Junta de Gobierno de la provincia de San Salvador]] [[Categoría:Documentos de José Matías Delgado]] q0put3sttl6jpi03sie5cwerg0o1jif Acta del ayuntamiento de San Salvador con los miembros de la diputación provincial, en la que la diputación se erige en junta gubernativa 0 404144 1653808 1639253 2026-05-14T13:49:52Z Ignacio Rodríguez 3603 dessangrar 1653808 wikitext text/x-wiki {{DH}} {{Encabezado |titulo =Acta del ayuntamiento de San Salvador con los miembros de la diputación provincial, en la que la diputación se erige en junta gubernativa |año = 1822 |autor = Junta de Gobierno de la provincia de San Salvador |más info = {{x-menor|Debido a que, en [[Acta de la diputación provincial de San Salvador con la que la provincia se separa de la Capitanía General de Guatemala|acta del mismo día]], la diputación provincial separó a la provincia de San Salvador de la capitanía general de Guatemala al estar opuesta a la anexión al imperio mexicano.}}}} En la ciudad de San Salvador, a once de enero de mil ochocientos veintidós. Reunidos en la Consistorial los señores que componen este Ayuntamiento, presidido por el Señor Intendente, Jefe Político, doctor don José Matías Delgado, con asistencia de los individuos de la Excelentísima Diputación Provincial y el pueblo, se leyó el oficio que con fecha 7 del corriente dirigió a éste N. Ayuntamiento, el Excelentísimo Señor Presidente de Guatemala, don Gabino Gaínza, en que comunica que en acta de 5 del mismo mes, acordó el Gobierno Provincial, con vista de la mayoría de la voluntad de los Ayuntamientos, la Unión al imperio mexicano, observando que el referido Gobierno, en el acuerdo indicado, se excedió de las facultades que le habían conferido los pueblos que lo constituyeron, entregándolos al imperio contra el pacto celebrado en el acta de 15 de septiembre último en que se reservó esta decisión al Congreso, teniendo presente que dicha acta se juró solemnemente, y que, por lo mismo, ya los pueblos no están en plenitud de sus facultades para poder por sí mismos decidirse ahora por el imperio, viendo que ha desatendido el mismo Gobierno Provincial, éstas otras razones que expusieron algunos Ayuntamientos de la Provincia, en contestación de 30 del último noviembre dirigido por el Excelentísimo señor don Gabino Gainza, con las que le mostraba hasta la evidencia, que el medio adoptado para indagar la voluntad de los pueblos, era inadecuado, que los Ayuntamientos no están constituidos en razón de vecindario, sino en la del número de pueblos; de suerte que hay Ayuntamiento que representa un pueblo que contiene un número de vecinos mayor que el que representan veinte o más Ayuntamientos; en vista de todo, el pueblo dijo, y el Noble Cuerpo acordó lo siguiente:-Protestar de nulidad del acuerdo de la Excelentísima Junta Provisional, tanto por el exceso de facultades de que se ha hecho mención, cuanto porque los pueblos no han obrado con libertad en sus decisiones: lo primero, porque se les ha intimidado con el riesgo de una división numerosa que ha querido suponerse (con notorio agravio de los sentimientos liberales del Excmo. señor Iturbide,) que marcha con el objeto de hostilizar estos pueblos: lo segundo, porque aprovechando la ignorancia de casi todos, no han sido ellos, sino los que los seducen, los que han hecho la decisión, de lo cual tiene pruebas nada equívocas este N. Ayunt miento que en uno de sus juzgados constitucionales, ha seguido un expediente sobre el modo con que se ha obrado en varios pueblos del partido. Que habiendo cesado el Gobierno Provincial de Guatemala, en consecuencia de su unión a México, el de San Salvador le es respecto de la provincia (conviniendo en esto los demás pueblos de ella y los otros que quieran agregarse) provisional gubernativo, a cuyo efecto la misma Excelentísima Junta Provincial quede constituída ese carácter, siendo Presidente de ella el señor Intendente jefe político doctor don José Matías Delgado; quedando de consiguiente, todo lo económico, político, gubernativo, militar y judicial, independiente de la antigua capital de Guatemala. Que no se haga alteración ninguna sobre gobierno, rigiendo por ahora la constitución española y demás leyes, conforme a lo jurado en el Acta citada de 15 de septiembre, reservando al Congreso el punto de unión al Imperio mexicano, pues San Salvador hasta ahora no ha tratado sobre la materia; y en caso de que el Congreso decida la unión que considere ventajosa, no será una obra del temor, ni a virtud de un acuerdo ilegal, sino por los trámites decorosos y justos, según se juró en el Acta de 15 de septiembre. Que inmediatamente se proceda a la elección de diputados que deban a los jefes de ambas Américas, según está acordado. Que queden desde este día abolidos los tributos, como opuesta esta contribución a la libertad e igualdad de que deben gozar los ciudadanos de una nación culta; y aunque la resolución de este punto no corresponde al noble Ayuntamiento, este lo representará al Gobierno provisional, quien desde luego lo acordará de la misma suerte que otras solicitudes que no están bajo las atribuciones de esta corporación. Que desde luege el Gobierno provisional ponga en planta todas las solicitudes que hizo el pueblo, y y que aparecen del Acta de 6 del último noviembre. Que se conceda indulto moderado, según las autoridades acuerden; pero que a los presos por insultos al pueblo y otras ocurrencias politicas, se les ponga inmediatamente en libertad, escribiéndose para que vengan a los que por iguales motivos se han fugado, y extrañado de esta ciudad, asegurándoles que nada tienen que temer de ella porque el pueblo sepultará en el olvido todos sus resentimientos, por las ocurrencias de los años pasados. Que se oficie a todos los Ministros de Rentas para que a la mayor brevedad presenten un estado del actual de sus fondos, y no cobrar libramiento que no sea dado por nuestro Gobierno provisional; que se oficie igualmente a todos los empleados que se hallen ausentes en cualquiera puntos para que vengan a ocupar sus destinos, con advertencia de que si no lo verifican, se entenderá que lo renuncian. Que se comunique por correos extraordinarios esta Acta a todos los pueblos de ésta y otras provincias para que, si lo tuvieren a bien, se sirvan abrazar esta resolución, como conforme a los principios de derecho público y al carácter religioso y sostenido que ha distinguido siempre a los mismos pueblos, con lo cual se concluyó esta Acta que firmaron dichos señores, de que certifico. Delgado, Jaurigui, Lara, Delgado, Morales, Villaseñor, Pérez Estupinián, López, Camacho, Carranza, Arana, Cisneros, Joaquín Chávez, Secretario. [[Categoría:La provincia de San Salvador ante la anexión al imperio mexicano]] [[Categoría:Documentos de la Junta de Gobierno de la provincia de San Salvador]] [[Categoría:Documentos de José Matías Delgado]] 4ix5lzujy59w41d9fpts0p37iirsv9t Bando de la Junta de Gobierno de la provincia de San Salvador del 13 de enero de 1822 0 404146 1653807 1644104 2026-05-14T13:49:14Z Ignacio Rodríguez 3603 dessangrar 1653807 wikitext text/x-wiki {{DH}} {{Encabezado |titulo =Bando de la Junta de Gobierno de la provincia de San Salvador del 13 de enero de 1822 |año = 1822 |autor = Junta de Gobierno de la provincia de San Salvador |más info = {{menor|Luego que se declarase la separación de la provincia de San Salvador de la capitanía general de Guatemala.}}}} # Se declara que la religión católica, apostólica y romana, es la única y dominante. El que afirme lo contrario será tenido por enemigo del pueblo. # Nadie blasfemará ni impedirá los actos religiosos bajo el mismo apercibimiento. # Se establecen por bases de la la felicidad pública la libertad y la igualdad. # Los tributos y todos los impuestos quedan abolidos para siempre. # Ninguno llamará á otro con titulos o apodos de infamia, bajo el apercibimiento de ser tenido por enemigo del pueblo. # Queda así mismo abolida para siempre la esclavitud, y en consecuencia, quedaran libren todos los esclavos de ambos sexos en el acto de la publicación de este bando debiendo ocurrir los dueños á la casa de la ciudad para que sean indemnizados de su importe # Se debe entender el capitulo precedente respecto de los que hubiesen habido esclavos por compra, y en el caso de que no se hubiesen servido de ellos el tiempo de dies años, pues los que fuesen adquiridos por herencia, sesión ú otre lucrativo, no deberán pretender reintegro alguno # Debiéndose señalar este día con una obra de piedad particular, se concede indulto general a todos los delincuentes, exceptuándose a los traidores a la Patria. [[Categoría:La provincia de San Salvador ante la anexión al imperio mexicano]] [[Categoría:Documentos de la Junta de Gobierno de la provincia de San Salvador]] t8bh360hj57mpcsmxw151v2cgm1mpbu Acta de la anexión de la capitanía general de Guatemala al imperio mexicano 0 404150 1653806 1639250 2026-05-14T13:48:24Z Ignacio Rodríguez 3603 dessangrar 1653806 wikitext text/x-wiki {{DH}} {{Encabezado |titulo =Acta de la anexión de la capitanía general de Guatemala al imperio mexicano |año = 1822 |autor = Junta Provisional Consultiva |más info = {{menor|En virtud de la decisión de los cabildos abiertos de los distintos ayuntamientos, a quienes se les dió el poder de decidir sobre la anexión por la circular del capitán general Gabino Gaínza del 30 de noviembre de 1821.}}}} Habiéndose traído a la vista las contestaciones de los ayuntamientos de las provincias, dadas a virtud del oficio circular de 30 de noviembre último, en que se les previno que en consejo abierto explorasen la voluntad de los pueblos sobre la unión al imperio mexicano, que el Serenisimo señor don Agustin de Iturbide, Presidente de la Regencia, proponia en su oficio de 19 de octubre, que se acompañó impreso; y trayéndose igualmente las contestaciones, que sobre el mismo punto han dado los tribunales y comunidades eclesiásticas y seculares, jefes políticos, militares y de hacienda, y personas particulares, a quiénes se tuvo por conveniente consultar, se procedió a examinar y regular la voluntad general, en la manera siguiente: Los ayuntamientos que han convenido llanamente en la unión, según se contiene en el oficio del Gobierno de México, son ciento cuatro. Los que han convenido en ella con algunas condiciones, que les ha parecido poner, son once. Los que han comprometido su voluntad en lo que parezca a la junta provisional, atendido el conjunto de circunstancias, son treinta y dos. Los que se remiten a lo que diga el Congreso, que estaba convocado desde el 15 de septiembre y debia reunirse el 1º de febrero próximo, son veintiuno. Los que manifestaron no conformarse con la unión, son dos. Los restantes no han dado contestación, y si la han dado, no se ha recibido. Y traído a la vista el estado impreso de la población del Reino, hecho por un cálculo aproximado, sobre los censos existentes para la elección de Diputados, que se circuló en noviembre próximo anterior, se halló: que la voluntad manifestada llanamente por la unión, excedía de la mayoría absoluta de la población reunida a este Gobierno. Y, computándose la de la Intendencia de Nicaragua, que desde su declaratoria de su independencia del Gobierno español, se unió al de México, separándose absolutamente de éste; la de la de Comayagua, que se halla en el mismo caso; la de la Ciudad Real de Chiapas, que se unió al Imperio aún antes que se declarase la independencia en esta ciudad; la de Quezaltenango, Sololá y algunos otros pueblos, que en estos últimos días se han adherido por si mismo a la unión; se encontró que la voluntad general subía a una suma casi total. Y teniendo presente la Junta que su deber, en este caso, no es otro que trasladar al Gobierno de México lo que los pueblos quieren, acordó verificarlo así, como ya se le indicó en oficio de 3 del corriente. Entre las varias consideraciones que ha hecho la Junta, en esta importante y grave materia, en que los pueblos se hallan amenazados en su reposo, y especialmente en la unión con sus hermanos de las otras provincias con quienes ha vivido siempre ligados por la vecindad, el comercio y otros vinculos estrechos, fue una de las primeras, que por medio de la unión a México querían salvar la integridad de lo que antes se ha llamado Reino de Guatemala, y restablecer entre si la unión que ha reinado por lo pasado; no apareciendo otro para remediar la división que se experimenta. Como algunos pueblos han fijado al juicio de la Junta lo que más les convenga resolver en la presente materia y circunstancias, por no tenerlas todas a la vista; la Junta juzga, que manifestada, como está de un modo tan claro, la voluntad de la universalidad, es necesario que los dichos pueblos se adhieran a ella para salvar su integridad y reposo. Como las contestaciones dadas por los ayuntamientos, lo son con vista del Serenisimo señor Iturbide que se les circuló, y en él se propone como base la observancia del Plan de Iguala y de Córdoba, con otras condiciones, benéficas al bien y prosperidad de estas provincias, las cuales si llegasen a término de poder por sí constituirse en estado independiente, podrán libremente constituirlo; se ha de entender que la adhesión al Imperio de México es bajo estas condiciones y bases. Las puestas por algunos ayuntamientos, respecto a que parte están virtualmente contenidas en las generales, y parte difieren entre si para que puedan sujetarse a una expresión positiva; se comunicarán al Gobierno de México para el efecto que convengan; y los ayuntamientos mismos, en su caso, podrán darlas como instrucción a sus diputados respectivos, sacándose testimonio por la Secretaría. Respecto de aquellos ayuntamientos, que han contestado remitiéndose al Congreso que debía formarse, y no es posible ya verificarlo, porque la mayoría ha expresado su voluntad en sentido contrario, se les comunicará el resultado de ésta, en copia de esta acta. Para conocimiento y noticia de todas las provincias, pueblos y ciudadanos, se formará un estado general de las contestaciones que se han recibido, distribuyéndolas por clases, conforme se hizo al tiempo de reconocerse en esta Junta, el cual se publicará posteriormente. Se dará parte a la Soberana Junta Legislativa provisional, a la Regencia del Imperio y al Serenisimo señor Iturbide con esta acta, que se imprimirá, y circulará a todos los ayuntamientos, autoridades, tribunales, corporaciones y jefes, para su inteligencia y gobierno. Gavino Gainza-El Marqués de Aycinena-Miguel de Larreynaga-José del Valle-Mariano de Beltranena-Manuel Antonio Molina-Antonio Rivera--José Mariano Calderón-José Antonio Alvarado-Angel María Candina-Eusebio Castillo-José Valdés-José Domingo Diéguez, (Secretario)-Mariano Gálvez, (Secretario). [[Categoría:Anexión de la Capitanía General de Guatemala al Primer Imperio Mexicano]] [[Categoría:Documentos de la Junta Provisional Consultiva]] [[Categoría:Documentos de Gabino Gaínza]] dmqcfjhcb181rv3753qaymq4obrkkwe Página:El Capital (1898).pdf/101 102 417431 1653803 1651775 2026-05-14T12:56:35Z Ignacio Rodríguez 3603 /* Problemático */ fracción 1653803 proofread-page text/x-wiki <noinclude><pagequality level="2" user="Ignacio Rodríguez" />{{cp||EL CAPITAL|95}}</noinclude>proceso, no pueden pasarse simultáneamente, sino sucederse en el tiempo. La medida de su duración está constituída, pues, por fracciones de tiempo ó, lo que es lo mismo, el número de traspasos de las mismas piezas de moneda en un tiempo dado mide la rapidez del curso de la moneda. El proceso de la circulación de aquellas cuatro mercancías dura, por ejemplo, un día. La suma de los precios que hay que realizar alcanza á 8 libras esterlinas; el número de traspasos de las mismas piezas de moneda durante el día es de 4, y la masa de la moneda circulante 2 libras esterlinas, ó, para un período determinado de tiempo del proceso de la circulación, {{cel|1=Suma de los precios de las mercancías / Número de traspasos de las piezas de moneda del mismo nombre = Medida de la moneda que funciona como medio de circulación.}} Esta ley es general. El proceso de la circulación de un país en un momento dado, comprende, por una parte, muchas ventas (ó compras) sueltas y simultáneas, que se pasan unas al lado de otras, ó metamorfosis parciales en que las mismas piezas de moneda sólo cambian una vez de lugar ó sólo tienen un traspaso, y, por la otra, muchas series más ó menos largas de metamorfosis que corren paralelas ó entrelazadas, en que las mismas piezas de moneda sufren traspasos más ó menos numerosos. El número total de traspasos de todas las piezas de moneda del mismo nombre que se encuentran en circulación da, sin embargo, el número medio de los traspasos de cada pieza de moneda ó la rapidez media del curso de la moneda. La masa de moneda que al principiar, por ejemplo, el proceso diario de la circulación se arroja en él, es naturalmente determinada por la suma de los precios de las mercancías que circulan simultáneamente las unas al lado de las otras. Pero dentro del proceso, una pieza de moneda es, por decirlo así, responsable de la otra. Si la una acelera su curso, paraliza el de la otra ó la pone por completo fuera de la esfera de la circulación, pues ésta puede absorber sólo una masa de oro que multiplicada por el número medio de traspasos de cada elemento aislado sea igual á la suma de los precios que hay que realizar. Si aumenta, pues, el número de traspasos de las piezas de moneda, disminuye su masa circulante. Si disminuye el número de sus traspasos, aumenta su masa. Como la masa de moneda que puede funcionar como medio de circulación, para una rapidez media dada, es también dada, basta, por ejemplo, poner en circulación una cantidad determinada de billetes de una libra para echar fuera de ella otros tantos soberanos, golpe artístico bien conocido de los Bancos. Así como en el curso de la moneda en general no aparece sino el proceso de la circulación de las mercancías, es decir, su paso por metamorfosis opuestas, en la rapidez del curso de la moneda no apa-<noinclude></noinclude> lhjtpaa26b3gmzm1lu8ddtbdi0uz4wn Página:El Capital (1898).pdf/102 102 417432 1653804 1652873 2026-05-14T13:44:22Z Ignacio Rodríguez 3603 /* EIS nivel 3 */ 1653804 proofread-page text/x-wiki <noinclude><pagequality level="3" user="Ignacio Rodríguez" />{{cp|96|CARLOS MARX|}}</noinclude>rece sino la rapidez de su cambio de forma, el continuo encadenamiento de las series de metamorfosis, la prisa de la asimilación y desasimilación, la pronta desaparición de las mercancías de la esfera de la circulación y su reemplazo igualmente rápido por otras mercancías. En la rapidez del curso de la moneda aparece, pues, la unidad fluida de las fases opuestas y complementarias, transformación de la figura de uso en la figura de valor y vuelta de la figura de valor á la figura de uso, ó de los dos procesos de la venta y de la compra. Por el contrario, en un curso más lento de la moneda aparece la separación é independencia recíproca de esos procesos, la detención del cambio de forma y, así, de la circulación. De qué proviene esa detención, no se puede ver, naturalmente, en la misma circulación. Ella no muestra sino el fenómeno mismo. La opinión popular, que en en el curso lento de la moneda la ve aparecer y desaparecer con menos frecuencia en todos los puntos de la circulación, se inclina á atribuir el fenómeno á la cantidad insuficiente de los medios de circulación<ref>«Siendo la moneda..... la medida común para comprar y vender, todo el que tiene algo que vender, y no encuentra comprador, tiende á pensar que la falta de moneda en el reino ó país es la causa de que no salga de sus mercancías, y por eso falta de moneda es el grito general; lo que es un gran error..... ¿Qué necesita esa gente que clama por dinero?.... El agricultor se queja..... piensa que si hubiera más dinero en el país obtendría un precio por sus productos. Parece, pues, que lo que le hace falta no es moneda, sino un precio por su grano y su ganado, que él vendería, pero no puede..... ¿por qué no puede obtener un precio?.... 1.º, ó hay demasiado grano y ganado en el pais, de modo que la mayor parte de los que van al mercado necesitan, como él, vender y pocos comprar; ó 2.º, falta la salida al Exterior por el transporte; ó 3.º, el consumo decae, como cuando, por razón de pobreza, la gente no gasta tanto como antes en sus casas, por lo cual no sería el aumento de moneda específica lo que mejoraria los productos del agricultor, sino la supresión de alguna de esas tres causas, que son en realidad las que deprimen el mercado..... El comerciante y el tendero carecen de dinero de la misma manera, es decir, necesitan salida para las mercancías en que comercian, porque el mercado les falta..... Una nación nunca prospera tanto como cuando las riquezas son lanzadas de mano en mano.» (Sir {{may|Dudley North}}, ''{{QID obra||Discourses upon Trade}}'', Londres, 1691, págs. 11-15 y sig.) Toda la charlatanería de ''{{lang|de|Herrenschwand}}'' se reduce á que las contradicciones resultantes de la naturaleza de la mercancía, y que aparecen en la circulación de las mercancías, pueden ser suprimidas aumentando los medios de circulación. De la ilusión popular que atribuye las interrupciones del proceso de la producción y de la circulación á de la circulación á la falta de medios de circulación, no se deduce absolutamente que, por el contrario, la falta real de medios de circulación, á consecuencia, por ejemplo, de chapucerías oficiales en la ''{{lang|en|regulation of currency}}'', no pueda, á su vez, ocasionar esas interrupciones.</ref>. La cantidad total de moneda que funciona como medio de circulación en un momento dado es determinada, pues, de una parte, por la suma de los precios de las mercancías circulantes; de la otra, por la marcha más ó menos rápida de los procesos contrarios de su circulación, de cuya rapidez ó lentitud depende la porción de esa suma de precios que las mismas piezas de moneda pueden realizar. Pero la suma de los precios de las mercancías depende tanto de la masa como<noinclude></noinclude> p4cdbthjvft59lhid0vkv43y383xqwl Página:Cuerpo del derecho civil romano a doble texto (IA cuerpodelderechocivilromanoP1T1).pdf/279 102 417680 1653868 1653777 2026-05-15T09:16:03Z Jhon Alex Sucasaca Yana 95956 1653868 proofread-page text/x-wiki <noinclude><pagequality level="3" user="Jhon Alex Sucasaca Yana" />{{crv|213|Digesto.— Libro : Título}} {{EncabezadoBilingüe|d}}</noinclude>que por la ley Regia, que se promulgó acorca de su autoridad, el pueblo confiriese à él y para él todo su imperio y potestad. § 1.—Así pues, lo que el Emperador estatuyó por carta y resolución de un memorial, o cono- ciendo en causa decretó, ò de plano decidió, ò preceptuó por edicto, consta que es ley: estas son las que vulgarmente llamamos Constituciones. § 2.—De estas, algunas son ciertamente perso- nales y no se alegan para ejemplo; porque lo que el Principe otorgó à alguien por sus méritos, ó si impuso alguna pena, ó si sin ejemplar auxilió a otro, no sale de la persona. '''2.''' ULPIANO; ''Fideicomisos, libro IV''.—AI esta- blecerse cosas nuevas, debe ser evidente la utili- dad de separarse de aquel derecho, que por mu- cho tiempo pareció justo. '''3.''' JAVOLENO; ''Epistolas, libro XIII''.—El benefi- cio del Emperador, que emana de su divina in- dulgencia, debemos interpretarlo con la mayor amplitud. '''4.''' MODESTINO; ''Excusas, libro II''.—Las constitu- ciones posteriores tienen más fuerza que las an- teriores. {{t3|TÍTULO V}} {{c|DEL ESTADO DE LOS HOMBRES.|clase=titulo}} '''1.''' GAYO; ''Instituciones, libro I''.—Todo el derecho de que usamos, concierne ó à las personas, ó á las cosas, ó á las acciones. '''2.''' HERMOGENIANO; ''Epitome del Derecho, libro I''.—Así pues, como todo derecho haya sido cons- tituído por causa de los hombres, trataremos pri- mero del estado de las personas, y después de las demás cosas, siguiendo el orden del Edicto per pétuo y aplicándoles titulos adecuados y conexos, según lo permita la naturaleza de la cosa. '''3,''' GAYO; ''Instituciones, libro I''.—Y así, la prin- cipal división en el derecho de las personas es es- ta: que todos los hombres son ó libres, ó esclavos. '''4.''' FLORENTINO; ''Instituciones, libro IX''.—Liber- tad es la natural facultad de hacer lo que place a cada cual, salvo si algo se prohibe por la fuerza, ó por la ley. §1.—La esclavitud es una constitución del de- recho de gentes, por la que alguno está sujeto contra la naturaleza al dominio ageno. § 2.—Los siervos se llamaron asi, de que los cau- dillos suelen vender à los cautivos, y por esta ra- zón conservarlos y no matarlos. § 3.—Pero se les dice mancipia (esclavos), por- que son cogidos de los enemigos con la mano. '''5.''' MARCIANO; Instituciones, ''libro I''.—Y una sola es ciertamente la condición de los esclavos; mas, de los hombres libres, unos son ingénuos, y otros libertinos. § 1.—Pero los esclavos se reducen á nuestro _______________<noinclude>{{PieBilingüe|d}}</noinclude> bfaeid4fy0svtp43y5n9kbgigoencha 1653869 1653868 2026-05-15T09:17:49Z Jhon Alex Sucasaca Yana 95956 1653869 proofread-page text/x-wiki <noinclude><pagequality level="3" user="Jhon Alex Sucasaca Yana" />{{crv|213|Digesto.— Libro : Título}} {{EncabezadoBilingüe|d}}</noinclude>que por la ley Regia, que se promulgó acerca de su autoridad, el pueblo confiriese à él y para él todo su imperio y potestad. § 1.—Así pues, lo que el Emperador estatuyó por carta y resolución de un memorial, o cono- ciendo en causa decretó, ò de plano decidió, ò preceptuó por edicto, consta que es ley: estas son las que vulgarmente llamamos Constituciones. § 2.—De estas, algunas son ciertamente perso- nales y no se alegan para ejemplo; porque lo que el Principe otorgó à alguien por sus méritos, ó si impuso alguna pena, ó si sin ejemplar auxilió a otro, no sale de la persona. '''2.''' ULPIANO; ''Fideicomisos, libro IV''.—AI esta- blecerse cosas nuevas, debe ser evidente la utili- dad de separarse de aquel derecho, que por mu- cho tiempo pareció justo. '''3.''' JAVOLENO; ''Epistolas, libro XIII''.—El benefi- cio del Emperador, que emana de su divina in- dulgencia, debemos interpretarlo con la mayor amplitud. '''4.''' MODESTINO; ''Excusas, libro II''.—Las constitu- ciones posteriores tienen más fuerza que las an- teriores. {{t3|TÍTULO V}} {{c|DEL ESTADO DE LOS HOMBRES.|clase=titulo}} '''1.''' GAYO; ''Instituciones, libro I''.—Todo el derecho de que usamos, concierne ó à las personas, ó á las cosas, ó á las acciones. '''2.''' HERMOGENIANO; ''Epitome del Derecho, libro I''.—Así pues, como todo derecho haya sido cons- tituído por causa de los hombres, trataremos pri- mero del estado de las personas, y después de las demás cosas, siguiendo el orden del Edicto per pétuo y aplicándoles titulos adecuados y conexos, según lo permita la naturaleza de la cosa. '''3,''' GAYO; ''Instituciones, libro I''.—Y así, la prin- cipal división en el derecho de las personas es es- ta: que todos los hombres son ó libres, ó esclavos. '''4.''' FLORENTINO; ''Instituciones, libro IX''.—Liber- tad es la natural facultad de hacer lo que place a cada cual, salvo si algo se prohibe por la fuerza, ó por la ley. §1.—La esclavitud es una constitución del de- recho de gentes, por la que alguno está sujeto contra la naturaleza al dominio ageno. § 2.—Los siervos se llamaron asi, de que los cau- dillos suelen vender à los cautivos, y por esta ra- zón conservarlos y no matarlos. § 3.—Pero se les dice mancipia (esclavos), por- que son cogidos de los enemigos con la mano. '''5.''' MARCIANO; Instituciones, ''libro I''.—Y una sola es ciertamente la condición de los esclavos; mas, de los hombres libres, unos son ingénuos, y otros libertinos. § 1.—Pero los esclavos se reducen á nuestro _______________<noinclude>{{PieBilingüe|d}}</noinclude> ib9r1nmx6id6d3cbnycib46447q8v7t Página:Cuerpo del derecho civil romano a doble texto (IA cuerpodelderechocivilromanoP1T1).pdf/280 102 417681 1653870 1652489 2026-05-15T09:42:25Z Jhon Alex Sucasaca Yana 95956 1653870 proofread-page text/x-wiki <noinclude><pagequality level="1" user="Jhon Alex Sucasaca Yana" />{{crv|214|Digesto.— Libro : Título}} {{EncabezadoBilingüe|d}}</noinclude>dominio ó por derecho civil, ó por el de gentes. Por derecho civil, si alguno mayor de veinticinco años consintió ser vendido para participar del precio; por derecho de gentes son esclavos nues- tros, los que son cogidos de los enemigos, ó los que nacen de nuestras esclavas. § 2.—Son ingénuos, los que nacieron de madre libre; porque basta que haya sido libre al tiempo en que nace, aunque hubiese concebido esclava; y por el contrario, si hubiere concebido libre y des- pués pariese esclava, plugo que el que nace, nazca libre. Y no importa, si concibió en justas nup- cias, ó del vulgo, porque la calamidad de la madre no debe perjudicar al que está en el vientre. § 3.—Por esto se pregunto: si una esclava em- barazada fuese manumitida, y hubiere parido después hecha otra vez esclava, o expulsada de la ciudad, ¿paria un libre ó un esclavo? Y, sin em- bargo, se aprobó como más recto que nace un li- bre, y que basta al que está en el vientre haber tenido madre libre aún en el tiempo intermedio. '''6.''' GAYO; ''Instituciones, libro I''.—Son libertinos, los que han sido manumitidos de justa esclavitud. '''7.''' PAULO; ''De las porciones que se conceden á los hijos de los condenados, libro único''.—El que está en el útero es atendido lo mismo que si ya estuvie- se entre las cosas humanas, siempre que se trata de las conveniencias de su propio parto, aunque, antes de nacer, en manera ninguna favorezca & un tercero. '''8.''' PAPINIANO; ''Cuestiones, libro III''.—El Empe rador Tito Antonino resolvió por rescripto, que no se perjudica el estado de los libres por el te- nor de un documento mal concebido. '''9.''' EL MISMO; ''Cuestiones, libro XXXI''.—En mu- chos articulos de nuestro derecho es peor la con- dición de las hembras, que la de los varones. '''10.''' ULPIANO; ''Comentarios à Sabino, libro I''.— Se pregunta, ¿A quién comparamos el hermafro dita? juzgo que preferentemente debe ser estí- mado como del sexo que en él prevalece. '''11.''' PAULO; ''Respuestas, libro XVIII.'' — Paulo respondió, que aquel que fué concebido viviendo el padre é ignorando la unión de su hija, aunque haya nacido después de la muerte del abuelo, no se reputa ser hijo legitimo de aquel de quien fué concebido. '''12.''' EL MISMO; ''Respuestas, libro XIX''.—Está ya recibido por razón de la autoridad del doctisimo varón Hipócrates, que el nacer al séptimo mes es parto perfecto; y por eso se ha de creer, que el que de justas nupcias nació al séptimo mes, es hijo legítimo. '''13.''' HERMOGENIANO; ''Epitome del Derecho, li- bro I''.—El esclavo abandonado por su señor en una causa capital à la suerte del juicio, aunque hubiere sido absuelto, no se hace libre. '''14.''' PAULO; ''Sentencias, libro IV''.—No son hijos, _______________<noinclude>{{PieBilingüe|d}}</noinclude> mu54m9qd4g8gys83z2m9imjuypwxjiz 1653871 1653870 2026-05-15T09:46:32Z Jhon Alex Sucasaca Yana 95956 1653871 proofread-page text/x-wiki <noinclude><pagequality level="1" user="Jhon Alex Sucasaca Yana" />{{crv|214|Digesto.— Libro : Título}} {{EncabezadoBilingüe|d}}</noinclude>dominio ó por derecho civil, ó por el de gentes. Por derecho civil, si alguno mayor de veinticinco años consintió ser vendido para participar del precio; por derecho de gentes son esclavos nues- tros, los que son cogidos de los enemigos, ó los que nacen de nuestras esclavas. § 2.—Son ingénuos, los que nacieron de madre libre; porque basta que haya sido libre al tiempo en que nace, aunque hubiese concebido esclava; y por el contrario, si hubiere concebido libre y des- pués pariese esclava, plugo que el que nace, nazca libre. Y no importa, si concibió en justas nup- cias, ó del vulgo, porque la calamidad de la madre no debe perjudicar al que está en el vientre. § 3.—Por esto se pregunto: si una esclava em- barazada fuese manumitida, y hubiere parido después hecha otra vez esclava, o expulsada de la ciudad, ¿paria un libre ó un esclavo? Y, sin em- bargo, se aprobó como más recto que nace un li- bre, y que basta al que está en el vientre haber tenido madre libre aún en el tiempo intermedio. '''6.''' GAYO; ''Instituciones, libro I''.—Son libertinos, los que han sido manumitidos de justa esclavitud. '''7.''' PAULO; ''De las porciones que se conceden á los hijos de los condenados, libro único''.—El que está en el útero es atendido lo mismo que si ya estuvie- se entre las cosas humanas, siempre que se trata de las conveniencias de su propio parto, aunque, antes de nacer, en manera ninguna favorezca a un tercero. '''8.''' PAPINIANO; ''Cuestiones, libro III''.—El Empe rador Tito Antonino resolvió por rescripto, que no se perjudica el estado de los libres por el te- nor de un documento mal concebido. '''9.''' EL MISMO; ''Cuestiones, libro XXXI''.—En mu- chos articulos de nuestro derecho es peor la con- dición de las hembras, que la de los varones. '''10.''' ULPIANO; ''Comentarios à Sabino, libro I''.— Se pregunta, ¿A quién comparamos el hermafro dita? juzgo que preferentemente debe ser estí- mado como del sexo que en él prevalece. '''11.''' PAULO; ''Respuestas, libro XVIII.'' — Paulo respondió, que aquel que fué concebido viviendo el padre é ignorando la unión de su hija, aunque haya nacido después de la muerte del abuelo, no se reputa ser hijo legitimo de aquel de quien fué concebido. '''12.''' EL MISMO; ''Respuestas, libro XIX''.—Está ya recibido por razón de la autoridad del doctisimo varón Hipócrates, que el nacer al séptimo mes es parto perfecto; y por eso se ha de creer, que el que de justas nupcias nació al séptimo mes, es hijo legítimo. '''13.''' HERMOGENIANO; ''Epitome del Derecho, li- bro I''.—El esclavo abandonado por su señor en una causa capital à la suerte del juicio, aunque hubiere sido absuelto, no se hace libre. '''14.''' PAULO; ''Sentencias, libro IV''.—No son hijos, _______________<noinclude>{{PieBilingüe|d}}</noinclude> e9ycsaipywy7n2d7uruc58bfyp4hkmt Página:Cuerpo del derecho civil romano a doble texto (IA cuerpodelderechocivilromanoP1T1).pdf/974 102 418092 1653813 2026-05-14T14:27:00Z Carlos Pérez 921 95864 /* No corregido */ Página creada con «TÍTULO II DE LA ADICCIÓN Á DIA [Véase Cód . IV. 51.] 1. PAULO; Comentarios à Sabino, libro V.—La adicción á dia se hace asi: «tén por comprado en cien aquel fundo, salvo si dentro de las próximas Ca- lendas de Enero hubiere ofrecido alguno mejor con- dición, por la que salga la cosa de poder del dueño». 2. ULPIANO; Comentarios à Sabino, libro XXVIII.—Cuando de un fundo se hace adicción á dia, dúdase si es pura la compra, pero se disuelve bajo…» 1653813 proofread-page text/x-wiki <noinclude><pagequality level="1" user="Carlos Pérez 921" />{{crv|906|Digesto.— Libro : Título}} {{EncabezadoBilingüe|d}}</noinclude>TÍTULO II DE LA ADICCIÓN Á DIA [Véase Cód . IV. 51.] 1. PAULO; Comentarios à Sabino, libro V.—La adicción á dia se hace asi: «tén por comprado en cien aquel fundo, salvo si dentro de las próximas Ca- lendas de Enero hubiere ofrecido alguno mejor con- dición, por la que salga la cosa de poder del dueño». 2. ULPIANO; Comentarios à Sabino, libro XXVIII.—Cuando de un fundo se hace adicción á dia, dúdase si es pura la compra, pero se disuelve bajo condición, ó si es más bien condicional la compra. Y me parece más verdadero, que importa saber qué se haya tratado; porque si verdadera- mente se trató esto, que se disuelva habiéndose ofrecido mejor condición, será pura la compra, la cual se disuelve bajo condición; pero si se trató esto, que se perfeccione la compra, si no se ofre- ciera mejor condición, la compra será condicional. § 1.—Asi, pues, cuando según la distinción que hemos hecho la venta es para, escribe Juliano, que aquel á quien de la cosa se le hizo adicción á dia puede usucapirla, y lucrarse con los frutos y acce- siones, y que á él le corresponde el riesgo, si la cosa hubiere perecido, 3. PAULO; Comentarios à Sabino , libro V.— porque después de la destrucción de la cosa ya no puede ofrecerse mejor condición. 4. ULPIANO; Comentarios á Sabino, libro XXVIII.— Mas cuando la venta es condicional, di- ce Pomponio, que no puede él usucapir, y que no le pertenecen los frutos. § 1.—[5.] Pregunta el mismo Juliano en el libro décimo quinto, si la cosa de que se hizo adicción á día hubiere perecido, ó si la esclava hubiere falle- cido, ¿podrá admitirse por razón del parto ó de los frutos el aumento? Y niega que haya de admitirse el aumento, porque no suele admitirse aumento respecto de otra cosa que de la que fué vendida. § 2.—[6.] Escribe el mismo Juliano en el propio libro, que si de dos esclavos vendidos en veinte, y de los que se hizo adicción á dia, hubiere fallecido uno, y después hubiere comprador del único que queda, el cual ofreciera más de veinte, ¿se desisti- rá del primer contrato? Y dice, que este caso es di- ferente del caso del parto, y que por esto se desiste en este caso de la primera compra, y se llega á la segunda. § 3.—Pero también Marcelo escribe en el libro quinto del Digesto, que vendido puramente un fundo y habiéndose hecho de él adicción á día, si se hubiera ofrecido mejor condición, la cosa deja de estar en prenda, si el comprador hubiese dado en prenda aquel fundo. De lo cual se colige, que el comprador sería dueño en el tiempo intermedio; porque de otro modo no existiria la prenda. § 4.—[7.] Escribió el mismo Juliano en el libro octogésimo octavo del Digesto, que el que compró<noinclude>{{PieBilingüe|d}}</noinclude> ilr54nnz3wp8xpyaiiz7skkszo2okjd 1653815 1653813 2026-05-14T14:36:43Z Carlos Pérez 921 95864 1653815 proofread-page text/x-wiki <noinclude><pagequality level="1" user="Carlos Pérez 921" />{{crv|906|Digesto.— Libro : Título}} {{EncabezadoBilingüe|d}}</noinclude><big><center>TÍTULO II</center></big> <center>DE LA ADICCIÓN Á DIA</center> <center>[Véase Cód . IV. 51.]</center> <div style="text-indent:2em;">1. PAULO; Comentarios à Sabino, libro V.—La adicción á dia se hace asi: «tén por comprado en cien aquel fundo, salvo si dentro de las próximas Ca- lendas de Enero hubiere ofrecido alguno mejor con- dición, por la que salga la cosa de poder del dueño».</div> 2. ULPIANO; Comentarios à Sabino, libro XXVIII.—Cuando de un fundo se hace adicción á dia, dúdase si es pura la compra, pero se disuelve bajo condición, ó si es más bien condicional la compra. Y me parece más verdadero, que importa saber qué se haya tratado; porque si verdadera- mente se trató esto, que se disuelva habiéndose ofrecido mejor condición, será pura la compra, la cual se disuelve bajo condición; pero si se trató esto, que se perfeccione la compra, si no se ofre- ciera mejor condición, la compra será condicional. § 1.—Asi, pues, cuando según la distinción que hemos hecho la venta es para, escribe Juliano, que aquel á quien de la cosa se le hizo adicción á dia puede usucapirla, y lucrarse con los frutos y acce- siones, y que á él le corresponde el riesgo, si la cosa hubiere perecido, 3. PAULO; Comentarios à Sabino , libro V.— porque después de la destrucción de la cosa ya no puede ofrecerse mejor condición. 4. ULPIANO; Comentarios á Sabino, libro XXVIII.— Mas cuando la venta es condicional, di- ce Pomponio, que no puede él usucapir, y que no le pertenecen los frutos. § 1.—[5.] Pregunta el mismo Juliano en el libro décimo quinto, si la cosa de que se hizo adicción á día hubiere perecido, ó si la esclava hubiere falle- cido, ¿podrá admitirse por razón del parto ó de los frutos el aumento? Y niega que haya de admitirse el aumento, porque no suele admitirse aumento respecto de otra cosa que de la que fué vendida. § 2.—[6.] Escribe el mismo Juliano en el propio libro, que si de dos esclavos vendidos en veinte, y de los que se hizo adicción á dia, hubiere fallecido uno, y después hubiere comprador del único que queda, el cual ofreciera más de veinte, ¿se desisti- rá del primer contrato? Y dice, que este caso es di- ferente del caso del parto, y que por esto se desiste en este caso de la primera compra, y se llega á la segunda. § 3.—Pero también Marcelo escribe en el libro quinto del Digesto, que vendido puramente un fundo y habiéndose hecho de él adicción á día, si se hubiera ofrecido mejor condición, la cosa deja de estar en prenda, si el comprador hubiese dado en prenda aquel fundo. De lo cual se colige, que el comprador sería dueño en el tiempo intermedio; porque de otro modo no existiria la prenda. § 4.—[7.] Escribió el mismo Juliano en el libro octogésimo octavo del Digesto, que el que compró<noinclude>{{PieBilingüe|d}}</noinclude> llkartwullfw4iamtaerbkhkuad2ecs 1653817 1653815 2026-05-14T14:45:16Z Carlos Pérez 921 95864 1653817 proofread-page text/x-wiki <noinclude><pagequality level="1" user="Carlos Pérez 921" />{{crv|906|Digesto.— Libro : Título}} {{EncabezadoBilingüe|d}}</noinclude><big><center>TÍTULO II</center></big> <center>DE LA ADICCIÓN Á DIA/center> <center>''[Véase Cód . IV. 51.]''</center> <div style="text-indent:2em;"> 1. PAULO; Comentarios à Sabino, libro V.—La adicción á dia se hace asi: «tén por comprado en cien aquel fundo, salvo si dentro de las próximas Ca- lendas de Enero hubiere ofrecido alguno mejor con- dición, por la que salga la cosa de poder del dueño». </div> 2. ULPIANO; Comentarios à Sabino, libro XXVIII.—Cuando de un fundo se hace adicción á dia, dúdase si es pura la compra, pero se disuelve bajo condición, ó si es más bien condicional la compra. Y me parece más verdadero, que importa saber qué se haya tratado; porque si verdadera- mente se trató esto, que se disuelva habiéndose ofrecido mejor condición, será pura la compra, la cual se disuelve bajo condición; pero si se trató esto, que se perfeccione la compra, si no se ofre- ciera mejor condición, la compra será condicional. § 1.—Asi, pues, cuando según la distinción que hemos hecho la venta es para, escribe Juliano, que aquel á quien de la cosa se le hizo adicción á dia puede usucapirla, y lucrarse con los frutos y acce- siones, y que á él le corresponde el riesgo, si la cosa hubiere perecido, 3. PAULO; Comentarios à Sabino , libro V.— porque después de la destrucción de la cosa ya no puede ofrecerse mejor condición. 4. ULPIANO; Comentarios á Sabino, libro XXVIII.— Mas cuando la venta es condicional, di- ce Pomponio, que no puede él usucapir, y que no le pertenecen los frutos. § 1.—[5.] Pregunta el mismo Juliano en el libro décimo quinto, si la cosa de que se hizo adicción á día hubiere perecido, ó si la esclava hubiere falle- cido, ¿podrá admitirse por razón del parto ó de los frutos el aumento? Y niega que haya de admitirse el aumento, porque no suele admitirse aumento respecto de otra cosa que de la que fué vendida. § 2.—[6.] Escribe el mismo Juliano en el propio libro, que si de dos esclavos vendidos en veinte, y de los que se hizo adicción á dia, hubiere fallecido uno, y después hubiere comprador del único que queda, el cual ofreciera más de veinte, ¿se desisti- rá del primer contrato? Y dice, que este caso es di- ferente del caso del parto, y que por esto se desiste en este caso de la primera compra, y se llega á la segunda. § 3.—Pero también Marcelo escribe en el libro quinto del Digesto, que vendido puramente un fundo y habiéndose hecho de él adicción á día, si se hubiera ofrecido mejor condición, la cosa deja de estar en prenda, si el comprador hubiese dado en prenda aquel fundo. De lo cual se colige, que el comprador sería dueño en el tiempo intermedio; porque de otro modo no existiria la prenda. § 4.—[7.] Escribió el mismo Juliano en el libro octogésimo octavo del Digesto, que el que compró<noinclude>{{PieBilingüe|d}}</noinclude> 9huh2dxn9s6fdxmzq908pdngjsmyv4s 1653831 1653817 2026-05-14T15:49:12Z Carlos Pérez 921 95864 1653831 proofread-page text/x-wiki <noinclude><pagequality level="1" user="Carlos Pérez 921" />{{crv|906|Digesto.— Libro : Título}} {{EncabezadoBilingüe|d}}</noinclude><big><center>TÍTULO II</center></big> <center>DE LA ADICCIÓN Á DIA/center> <center>''[Véase Cód . IV. 51.]''</center> 1. PAULO; Comentarios à Sabino, libro V.—La adicción á dia se hace asi: «tén por comprado en cien aquel fundo, salvo si dentro de las próximas Ca- lendas de Enero hubiere ofrecido alguno mejor con- dición, por la que salga la cosa de poder del dueño». 2. ULPIANO; Comentarios à Sabino, libro XXVIII.—Cuando de un fundo se hace adicción á dia, dúdase si es pura la compra, pero se disuelve bajo condición, ó si es más bien condicional la compra. Y me parece más verdadero, que importa saber qué se haya tratado; porque si verdadera- mente se trató esto, que se disuelva habiéndose ofrecido mejor condición, será pura la compra, la cual se disuelve bajo condición; pero si se trató esto, que se perfeccione la compra, si no se ofre- ciera mejor condición, la compra será condicional. § 1.—Asi, pues, cuando según la distinción que hemos hecho la venta es para, escribe Juliano, que aquel á quien de la cosa se le hizo adicción á dia puede usucapirla, y lucrarse con los frutos y acce- siones, y que á él le corresponde el riesgo, si la cosa hubiere perecido, 3. PAULO; Comentarios à Sabino , libro V.— porque después de la destrucción de la cosa ya no puede ofrecerse mejor condición. 4. ULPIANO; Comentarios á Sabino, libro XXVIII.— Mas cuando la venta es condicional, di- ce Pomponio, que no puede él usucapir, y que no le pertenecen los frutos. § 1.—[5.] Pregunta el mismo Juliano en el libro décimo quinto, si la cosa de que se hizo adicción á día hubiere perecido, ó si la esclava hubiere falle- cido, ¿podrá admitirse por razón del parto ó de los frutos el aumento? Y niega que haya de admitirse el aumento, porque no suele admitirse aumento respecto de otra cosa que de la que fué vendida. § 2.—[6.] Escribe el mismo Juliano en el propio libro, que si de dos esclavos vendidos en veinte, y de los que se hizo adicción á dia, hubiere fallecido uno, y después hubiere comprador del único que queda, el cual ofreciera más de veinte, ¿se desisti- rá del primer contrato? Y dice, que este caso es di- ferente del caso del parto, y que por esto se desiste en este caso de la primera compra, y se llega á la segunda. § 3.—Pero también Marcelo escribe en el libro quinto del Digesto, que vendido puramente un fundo y habiéndose hecho de él adicción á día, si se hubiera ofrecido mejor condición, la cosa deja de estar en prenda, si el comprador hubiese dado en prenda aquel fundo. De lo cual se colige, que el comprador sería dueño en el tiempo intermedio; porque de otro modo no existiria la prenda. § 4.—[7.] Escribió el mismo Juliano en el libro octogésimo octavo del Digesto, que el que compró<noinclude>{{PieBilingüe|d}}</noinclude> qedrj09u0zmiqucgkghfs2zplhmud1x 1653832 1653831 2026-05-14T15:51:38Z Carlos Pérez 921 95864 1653832 proofread-page text/x-wiki <noinclude><pagequality level="1" user="Carlos Pérez 921" />{{crv|906|Digesto.— Libro : Título}} {{EncabezadoBilingüe|d}}</noinclude><big><center>TÍTULO II</center></big> <center>DE LA ADICCIÓN Á DIA</center> <center>''[Véase Cód . IV. 51.]''</center> 1. PAULO; Comentarios à Sabino, libro V.—La adicción á dia se hace asi: «tén por comprado en cien aquel fundo, salvo si dentro de las próximas Ca- lendas de Enero hubiere ofrecido alguno mejor con- dición, por la que salga la cosa de poder del dueño». 2. ULPIANO; Comentarios à Sabino, libro XXVIII.—Cuando de un fundo se hace adicción á dia, dúdase si es pura la compra, pero se disuelve bajo condición, ó si es más bien condicional la compra. Y me parece más verdadero, que importa saber qué se haya tratado; porque si verdadera- mente se trató esto, que se disuelva habiéndose ofrecido mejor condición, será pura la compra, la cual se disuelve bajo condición; pero si se trató esto, que se perfeccione la compra, si no se ofre- ciera mejor condición, la compra será condicional. § 1.—Asi, pues, cuando según la distinción que hemos hecho la venta es para, escribe Juliano, que aquel á quien de la cosa se le hizo adicción á dia puede usucapirla, y lucrarse con los frutos y acce- siones, y que á él le corresponde el riesgo, si la cosa hubiere perecido, 3. PAULO; Comentarios à Sabino , libro V.— porque después de la destrucción de la cosa ya no puede ofrecerse mejor condición. 4. ULPIANO; Comentarios á Sabino, libro XXVIII.— Mas cuando la venta es condicional, di- ce Pomponio, que no puede él usucapir, y que no le pertenecen los frutos. § 1.—[5.] Pregunta el mismo Juliano en el libro décimo quinto, si la cosa de que se hizo adicción á día hubiere perecido, ó si la esclava hubiere falle- cido, ¿podrá admitirse por razón del parto ó de los frutos el aumento? Y niega que haya de admitirse el aumento, porque no suele admitirse aumento respecto de otra cosa que de la que fué vendida. § 2.—[6.] Escribe el mismo Juliano en el propio libro, que si de dos esclavos vendidos en veinte, y de los que se hizo adicción á dia, hubiere fallecido uno, y después hubiere comprador del único que queda, el cual ofreciera más de veinte, ¿se desisti- rá del primer contrato? Y dice, que este caso es di- ferente del caso del parto, y que por esto se desiste en este caso de la primera compra, y se llega á la segunda. § 3.—Pero también Marcelo escribe en el libro quinto del Digesto, que vendido puramente un fundo y habiéndose hecho de él adicción á día, si se hubiera ofrecido mejor condición, la cosa deja de estar en prenda, si el comprador hubiese dado en prenda aquel fundo. De lo cual se colige, que el comprador sería dueño en el tiempo intermedio; porque de otro modo no existiria la prenda. § 4.—[7.] Escribió el mismo Juliano en el libro octogésimo octavo del Digesto, que el que compró<noinclude>{{PieBilingüe|d}}</noinclude> ggsjoj9z9wpu6mp8r07xvv4933lftgp 1653836 1653832 2026-05-14T16:00:18Z Carlos Pérez 921 95864 1653836 proofread-page text/x-wiki <noinclude><pagequality level="1" user="Carlos Pérez 921" />{{crv|906|Digesto.— Libro : Título}} {{EncabezadoBilingüe|d}}</noinclude><big><center>'''TÍTULO II'''</center></big> <center>DE LA ADICCIÓN Á DIA</center> <center>''[Véase Cód . IV. 51.]''</center> '''1. PAULO'''; ''Comentarios à Sabino, libro V.—''La adicción á dia se hace asi: «tén por comprado en cien aquel fundo, salvo si dentro de las próximas Ca- lendas de Enero hubiere ofrecido alguno mejor con- dición, por la que salga la cosa de poder del dueño». '''2. ULPIANO'''; ''Comentarios à Sabino, libro XXVIII.—''Cuando de un fundo se hace adicción á dia, dúdase si es pura la compra, pero se disuelve bajo condición, ó si es más bien condicional la compra. Y me parece más verdadero, que importa saber qué se haya tratado; porque si verdadera- mente se trató esto, que se disuelva habiéndose ofrecido mejor condición, será pura la compra, la cual se disuelve bajo condición; pero si se trató esto, que se perfeccione la compra, si no se ofre- ciera mejor condición, la compra será condicional. § 1.—Asi, pues, cuando según la distinción que hemos hecho la venta es para, escribe Juliano, que aquel á quien de la cosa se le hizo adicción á dia puede usucapirla, y lucrarse con los frutos y acce- siones, y que á él le corresponde el riesgo, si la cosa hubiere perecido, '''3. PAULO'''; ''Comentarios à Sabino , libro V.—'' porque después de la destrucción de la cosa ya no puede ofrecerse mejor condición. '''4. ULPIANO'''; ''Comentarios á Sabino, libro XXVIII.—'' Mas cuando la venta es condicional, di- ce Pomponio, que no puede él usucapir, y que no le pertenecen los frutos. § 1.—[5.] Pregunta el mismo Juliano en el libro décimo quinto, si la cosa de que se hizo adicción á día hubiere perecido, ó si la esclava hubiere falle- cido, ¿podrá admitirse por razón del parto ó de los frutos el aumento? Y niega que haya de admitirse el aumento, porque no suele admitirse aumento respecto de otra cosa que de la que fué vendida. § 2.—[6.] Escribe el mismo Juliano en el propio libro, que si de dos esclavos vendidos en veinte, y de los que se hizo adicción á dia, hubiere fallecido uno, y después hubiere comprador del único que queda, el cual ofreciera más de veinte, ¿se desisti- rá del primer contrato? Y dice, que este caso es di- ferente del caso del parto, y que por esto se desiste en este caso de la primera compra, y se llega á la segunda. § 3.—Pero también Marcelo escribe en el libro quinto del Digesto, que vendido puramente un fundo y habiéndose hecho de él adicción á día, si se hubiera ofrecido mejor condición, la cosa deja de estar en prenda, si el comprador hubiese dado en prenda aquel fundo. De lo cual se colige, que el comprador sería dueño en el tiempo intermedio; porque de otro modo no existiria la prenda. § 4.—[7.] Escribió el mismo Juliano en el libro octogésimo octavo del Digesto, que el que compró<noinclude>{{PieBilingüe|d}}</noinclude> 9lm5f57a44wcaotbg97lqyjlbk9eb57 1653872 1653836 2026-05-15T11:20:22Z Carlos Pérez 921 95864 1653872 proofread-page text/x-wiki <noinclude><pagequality level="1" user="Carlos Pérez 921" />{{crv|906|Digesto.— Libro : Título}} {{EncabezadoBilingüe|d}}</noinclude><big><center>'''TÍTULO II'''</center></big> <center>DE LA ADICCIÓN Á DIA</center> <center>''[Véase Cód . IV. 51.]''</center> '''1.''' PAULO; ''Comentarios à Sabino, libro V.—''La adicción á dia se hace asi: «tén por comprado en cien aquel fundo, salvo si dentro de las próximas Ca- lendas de Enero hubiere ofrecido alguno mejor con- dición, por la que salga la cosa de poder del dueño». '''2.''' ULPIANO; ''Comentarios à Sabino, libro XXVIII.—''Cuando de un fundo se hace adicción á dia, dúdase si es pura la compra, pero se disuelve bajo condición, ó si es más bien condicional la compra. Y me parece más verdadero, que importa saber qué se haya tratado; porque si verdadera- mente se trató esto, que se disuelva habiéndose ofrecido mejor condición, será pura la compra, la cual se disuelve bajo condición; pero si se trató esto, que se perfeccione la compra, si no se ofre- ciera mejor condición, la compra será condicional. § 1.—Asi, pues, cuando según la distinción que hemos hecho la venta es para, escribe Juliano, que aquel á quien de la cosa se le hizo adicción á dia puede usucapirla, y lucrarse con los frutos y acce- siones, y que á él le corresponde el riesgo, si la cosa hubiere perecido, '''3.''' PAULO; ''Comentarios à Sabino , libro V.—'' porque después de la destrucción de la cosa ya no puede ofrecerse mejor condición. '''4.''' ULPIANO; ''Comentarios á Sabino, libro XXVIII.—'' Mas cuando la venta es condicional, di- ce Pomponio, que no puede él usucapir, y que no le pertenecen los frutos. § 1.—[5.] Pregunta el mismo Juliano en el libro décimo quinto, si la cosa de que se hizo adicción á día hubiere perecido, ó si la esclava hubiere falle- cido, ¿podrá admitirse por razón del parto ó de los frutos el aumento? Y niega que haya de admitirse el aumento, porque no suele admitirse aumento respecto de otra cosa que de la que fué vendida. § 2.—[6.] Escribe el mismo Juliano en el propio libro, que si de dos esclavos vendidos en veinte, y de los que se hizo adicción á dia, hubiere fallecido uno, y después hubiere comprador del único que queda, el cual ofreciera más de veinte, ¿se desisti- rá del primer contrato? Y dice, que este caso es di- ferente del caso del parto, y que por esto se desiste en este caso de la primera compra, y se llega á la segunda. § 3.—Pero también Marcelo escribe en el libro quinto del Digesto, que vendido puramente un fundo y habiéndose hecho de él adicción á día, si se hubiera ofrecido mejor condición, la cosa deja de estar en prenda, si el comprador hubiese dado en prenda aquel fundo. De lo cual se colige, que el comprador sería dueño en el tiempo intermedio; porque de otro modo no existiria la prenda. § 4.—[7.] Escribió el mismo Juliano en el libro octogésimo octavo del Digesto, que el que compró<noinclude>{{PieBilingüe|d}}</noinclude> cwxumotpz60ju5vxc2psp25amqf3yz2 Plantilla:Loop/doc 10 418093 1653823 2026-05-14T15:27:55Z Ignacio Rodríguez 3603 Página creada con «{{Subpágina de documentación}} == Uso == {{demo|<nowiki>{{loop|6|abc}}</nowiki>}} <includeonly> <!-- Coloca las categorías de la plantilla a continuación y los interwikis en Wikidata --> </includeonly>» 1653823 wikitext text/x-wiki {{Subpágina de documentación}} == Uso == {{demo|<nowiki>{{loop|6|abc}}</nowiki>}} <includeonly> <!-- Coloca las categorías de la plantilla a continuación y los interwikis en Wikidata --> </includeonly> 0mm37s7s9s6oki24sngox69bjw2lo1l 1653824 1653823 2026-05-14T15:28:14Z Ignacio Rodríguez 3603 1653824 wikitext text/x-wiki {{Subpágina de documentación}} == Uso == {{demo|<nowiki>{{loop|6|abc }}</nowiki>}} <includeonly> <!-- Coloca las categorías de la plantilla a continuación y los interwikis en Wikidata --> </includeonly> 777cje04v3p7yxkjfn7wlc6erhgvarg Página:Actitud ética ante la guerra y la paz - bdh0000308582.pdf/29 102 418094 1653846 2026-05-14T20:15:40Z Superzerocool 3910 /* Corregido */ 1653846 proofread-page text/x-wiki <noinclude><pagequality level="3" user="Superzerocool" /></noinclude>{{t3|II|sub=¿SE PUEDE SER MERO ESPECTADOR?}} La guerra, la preocupación de esta tremenda guerra inacabable, llena casi por entero nuestra vida. Lo domina todo como una obsesión tenaz, a la manera de siniestra pesadilla. Todos aquellos castillos de ideales que edificáramos en atmósferas de ilusiones y de optimismos, en los tiempos de paz —¡que ahora, por una extraña perspectiva, nos parecen tan remotos !— unos se han desmoronado, otros se agrietan a toda prisa... sólo alguno se mantiene firme como roca, desafiando los embates de las olas furiosas, embravecidas. Impónesenos nueva valoración ética de ideas, de doctrinas, de creencias, y, especialmente, de motivaciones de conducta. El choque trágico y sangriento, el estremecimiento mundial consiguiente, en plena vibración ahora, la nueva y extraña colocación de las cosas, el tron­char violento de tantos hilos espirituales que sostenían nuestra fe y nuestras esperanzas... todo nos ha obligado a pararnos de repente: y con pararnos sólo, ya parece<noinclude></noinclude> 1mr3ukysy2ry353v8vqyfyv2euirngl Página:Actitud ética ante la guerra y la paz - bdh0000308582.pdf/30 102 418095 1653848 2026-05-14T20:19:21Z Superzerocool 3910 /* Corregido */ 1653848 proofread-page text/x-wiki <noinclude><pagequality level="3" user="Superzerocool" />{{CP|24|ADOLFO POSADA|}}</noinclude>como que se nos aclara la significación moral y práctica de muchas fórmulas y doctrinas, que acaso estimáramos a veces episódicas, y hasta meras "salidas" o genialidades de autor. En la general bancarrota, y mirando y re­mirando hacia atrás, no pocas de esas fórmulas y de esas doctrinas adquieren un valor representativo excep­cional, constituyendo algunas verdadera cadena, sin rup­tura, seguida, algo como los mojones indicadores de una senda reflexivamente trazada y abierta, y hábilmente construida por un genio director, con arte diabólico, para llevar por ella, con el mismo arte hasta el fin —¡1914!— a todo un pueblo ingenuo y entusiasta. Bastaría recordar aquí, a manera de ejemplo, un nombre, hoy simbólico: el de Treitschke y su doctrina del Es­tado: "Der Staat ist Match": El Estado es fuerza, poder... ¡para la dominación! Flotando la teoría de Treitschke, antes de la guerra, en el pensamiento político alemán contemporáneo, como una doctrina entre tantas, se convierte, al producirse el choque, en una concepción inspiradora, para la acción, que sintetiza y resume todo un proceso ideológico generador de la gran catástrofe. Suprimid la guerra, y Treitschke y tantos otros escritores de su significación y de sus tendencias, con sus fórmulas políticas y sus doctrinas del poder del Estado omnipotente y del superestado, quedarían como una de tantas manifestaciones del pensamiento humano, muy a propósito para despertar la curiosidad del historiador futuro. Es todavía pronto, sin embargo, para adoptar actitudes críticas y lanzarse a interpretaciones de ideas y de hechos que resultarían temerarias. Más que nunca debe ser nuestro juicio "interino", que cuanto pasa tiene también<noinclude></noinclude> f00mkzsiapd1izjg794r0dt3t3brm3s Página:Actitud ética ante la guerra y la paz - bdh0000308582.pdf/31 102 418096 1653849 2026-05-14T20:23:16Z Superzerocool 3910 /* Corregido */ 1653849 proofread-page text/x-wiki <noinclude><pagequality level="3" user="Superzerocool" />{{CP||ACTITUD ÉTICA ANTE LA GUERRA Y LA PAZ|25}}</noinclude>ese aire. Pero aun haciendo todo género de salvedades y de reservas, no es posible substraerse a las excitaciones del medio, ni vencer el influjo de la obsesión ambiente: y ningún interés ético superior aconseja semejante esfuerzo vano: antes por el contrario, debemos procurar vivir intensamente, con toda el alma, este gran momento de aflicción universal. Y basta de preámbulo, innecesario quizá, para justificar estas reflexiones o cavilaciones, fragmentarias, sobre o alrededor de la guerra. Adelante, pues. ¿Se puede... se "debe" ser "mero espectador" ante esta horrible y gigantesca contienda, que nos hace “vivir” la mayor catástrofe de la historia? Según lo que se entienda por espectador. Leo en un diccionario: espectador —que asiste a un espectáculo público, o bien que mira con atención un objeto—. Un señor que se limite a asistir a este gran espectáculo —las naciones destrozándose furiosas— que nos han proporcionado los titulados directores y educadores de la humanidad más culta, apenas si se concibe, salvo que se trate de un marmolillo, con sus sentidos apagados o muertos. La posición digna del espectador, es decir, del que no es actor ni víctima, ante esta gran catástrofe, es la del que "mira con atención". Y es la única moralmente admisible y que elimina hasta la hipótesis del mero y simple espectador pasivo, que contempla la guerra y se queda tan fresco. No; los hombres, vivan donde vivan, aunque geográficamente estén fuera y hasta lejos de la contienda sangrienta, al abrigo de las granadas de mano, de los gases asfixiantes, de los líquidos inflamables, de los fuegos de<noinclude></noinclude> kynxu85evope0jl1r2fmmpl2bxg1tdo Página:La Teogonia - bdh0000247820.pdf/1 102 418098 1653863 2026-05-15T01:53:47Z ~2026-29222-16 96218 /* No corregido */ Se creó una página vacía 1653863 proofread-page text/x-wiki <noinclude><pagequality level="1" user="186.153.138.238" /></noinclude><noinclude></noinclude> eyx6o4qyvbyth8e19swgk44grlbqv1d