Wikcionario eswiktionary https://es.wiktionary.org/wiki/Wikcionario:Portada MediaWiki 1.45.0-wmf.8 case-sensitive Medio Especial Discusión Usuario Usuario discusión Wikcionario Wikcionario discusión Archivo Archivo discusión MediaWiki MediaWiki discusión Plantilla Plantilla discusión Ayuda Ayuda discusión Categoría Categoría discusión Apéndice Apéndice Discusión TimedText TimedText talk Módulo Módulo discusión Wikcionario:Café 4 1313 5823206 5823202 2025-07-02T13:48:18Z Peter Bowman 34685 Revertido el cambio de [[Special:Contributions/187.161.119.120|187.161.119.120]] ([[User talk:187.161.119.120|disc.]]) a la última edición de [[User:MediaWiki message delivery|MediaWiki message delivery]] 5823059 wikitext text/x-wiki <!-- Inicio Encabezado del café, aviso, información histórica y información de archivado --> <div style="text-align: center;"> {{/Aviso}} {{/Histórico}} </div> {{atajo|WN:C}} [[Categoría:Wikcionario:Café]] <!-- Fin del Encabezado del café --> <!-- Inicio configuración robot archivado; no tocar si no se sabe lo que se hace --> {{Usuario:MABot/config |archive = Wikcionario:Café/%(year)d %(month)02d |algo = old(30d) |counter = 1 |archiveheader = {{Archivo}} }} <h1>{{MONTHNAME|{{PREVIOUSMONTH}}}} de {{PREVIOUSMONTH.YEAR}}</h1> <div class="mw-archivedtalk"> {{/{{PREVIOUSMONTH.YEAR}} {{PREVIOUSMONTH}}}} </div> <h1>Actual</h1> == Cómo agregar nuevas pronunciaciones == Hola! quisiera preguntar cómo agregar una nueva pronunciación en la plantilla '''Plantilla:pron-graf,''' ¿puedo agregarlo de forma manual o se necesita tener una página de Referencia de pronunciación,como por ejemplo Wikcionario:Referencia/ES/Pronunciación. En mi caso quiero agregar pronunciaciones desde la lengua Kunza (KUZ), la que no tiene página de referencia de pronunciación. ¿Necesitaría crear la página Wikcionario:Referencia/KUZ/Pronunciación para que me resulte? gracias de antemano [[Usuario:Pcartes|Pcartes]] ([[Usuario discusión:Pcartes|discusión]]) 15:21 21 may 2025 (UTC) :@[[Usuario:Pcartes|Pcartes]] Deberías crear [[Módulo:generar-pron/kuz]], tomando como referencia lo que se hizo con otros idiomas afines, por ejemplo [[Módulo:generar-pron/arn]], [[Módulo:generar-pron/yua]] o [[Módulo:generar-pron/gn]] por tirar ejemplos. Sabés programar en Lua? Tenés ya algún algoritmo hecho? Si no puedo ayudarte con gusto, pero necesito que me expliques cómo debe ser. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:45 21 may 2025 (UTC) ::gracias por la respuesta y disposición para ayudar, la verdad es que no sé programar con Lua pero me interesa aprender. Actualmente estoy trabajando con lingüistas que me podrán ayudar a completar la parte técnica, pero igual agradecería tu ayuda. ¿Hay alguna forma de comunicarnos directamente por correo o solo por aquí? ::Cualquier cosa quedo atento [[Usuario:Pcartes|Pcartes]] ([[Usuario discusión:Pcartes|discusión]]) 16:57 21 may 2025 (UTC) :::@[[Usuario:Pcartes|Pcartes]] Prefiero que nos escribamos en este sitio así queda evidencia de todo lo discutido en caso de que futuros usuarios se vean en la necesidad de revisar el módulo por el motivo que fuere. Para no inundar el Café con una discusión irrelevante e innecesaria para el resto, ahora te escribo en tu página de discusión y seguimos por allí. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:22 21 may 2025 (UTC) ::::Un detalle importantes es que no se sabe cómo sonaba el kunza. En particular, se discute mucho qué quiso decir Vaïsse con su descripción de la consonante ck, muy común en el idioma, como en su propio nombre [[ckunsa]] ("nuestro"). ¿Era /q/, /χ/ o algo diferente? No se sabe. Por eso, antes de crear el módulo habria que revisar las reconstrucciones que se puedan haber publicado. Saludos. [[Usuario:Lin linao|Lin linao]] [[Usuario Discusión:Lin linao|¿dime?]] 21:44 2 jun 2025 (UTC) == Etimología de siglas == Hola, copié el módulo etimología a etimología_test para adaptarlo al manejo de siglas, se agrega el parámetro nosep (no separador). :Con parámetro nosep ::Sigla de [[organización#Español|''organización'']] ''de'' ''las'' [[naciones#Español|''naciones'']] [[unidas#Español|''unidas'']] :Sin parámetro nosep ::Sigla de [[organización#Español|''organización'']], ''de'', ''las'', [[naciones#Español|''naciones'']] y [[unidas#Español|''unidas'']] ¿Están de acuerdo en aprobar este cambio para implementarlo en el módulo original? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>mensajes)</sup>]] 21:19 30 may 2025 (UTC) :Pues, creo que es bastaaante raro que las siglas vengan de términos con comas, el único caso que se me viene a la mente es la UNESCO y es una sola. Siento yo que en esos extraños y pocos casos se podría usar el parámetro nl=s y añadir el enlace manual: :* Si esta en Wikipedia, podría enlazarse directamente: :{{etimología|sigla|[[w:United Nations Educational, Scientific and Cultural Organization|United Nations Educational, Scientific and Cultural Organization]]|nl=s}}. :* Enlace a otros términos del Wikcionario: :{{etimología|sigla|[[building]], [[antenna]]-tower, [[span]], [[earth]]|nl=s}}. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 22:45 30 may 2025 (UTC) :Ídem a Raos, yo tampoco entiendo cuál era el problema original. Podrías mostrar algún ejemplo en donde esa modificación sea relevante? Yo creo que si la sigla es de varias palabras sería más bien un compuesto acronímico (actualmente clasificado como compuesto). [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:34 31 may 2025 (UTC) ::De acuerdo --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:56 31 may 2025 (UTC) :::Entiendo que el "de acuerdo" quiere decir que la propuesta ha sido retirada. Elimino entonces [[Plantilla:etimologíapba]] y [[Módulo:etimología test]] para que no figuren en el espacio principal. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:24 7 jun 2025 (UTC) ::::Si gracias! [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:37 7 jun 2025 (UTC) == Noticias técnicas: 2025-23 == <section begin="technews-2025-W23"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/23|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Extension:Chart|extensión Chart]] ya está disponible en todas las wikis de Wikimedia. Los editores pueden usar esta nueva extensión para crear visualizaciones de datos interactivas como gráficos de barra, línea y torta. La extensión está diseñada para reemplazar muchos de los usos de la [[mw:Special:MyLanguage/Extension:Graph|extensión antigua]]. '''Actualizaciones para editores''' * Ahora es más fácil configurar las citas automáticas para tu wiki con el [[mw:Special:MyLanguage/Citoid/Enabling Citoid on your wiki|generador de citas]] del editor visual. Los administradores pueden establecer una plantilla por defecto usando <code dir=ltr>_default</code> en la página local <bdi lang="en" dir="ltr">[[MediaWiki:Citoid-template-type-map.json]]</bdi> ([[mw:Special:Diff/6969653/7646386|un ejemplo de diff]]). Establecer este valor por defecto también ayudará a preparar tus configuraciones existentes para el futuro cuando se agreguen [[phab:T347823|nuevos tipos de elementos]]. Aún puedes establecer plantillas para tipos individuales, ya que estas tendrán preferencia sobre la plantilla por defecto. [https://phabricator.wikimedia.org/T384709] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:20}} {{PLURAL:20|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * A partir de la semana del 2 de junio, los bots que inicien sesión usando <code dir=ltr>action=login</code> o <code dir=ltr>action=clientlogin</code> fallarán con mayor frecuencia. Esto se debe a la mejora en las protecciones contra ingresos sospechosos. Los bots que usen [[mw:Special:MyLanguage/Manual:Bot passwords|contraseñas de bot]] o un mecanismo de autenticación sin inicio de sesión como [[mw:Special:MyLanguage/OAuth/Owner-only consumers|OAuth]] no se verán afectados. Si tu bot no está usando uno de esos mecanismos, deberías actualizarlo; el uso de <code dir=ltr>action=login</code> sin una contraseña de bot fue marcado como obsoleto [[listarchive:list/wikitech-l@lists.wikimedia.org/message/3EEMN7VQX5G7WMQI5K2GP5JC2336DPTD/|en 2016]]. Para la mayoría de los bots, esto solo requiere cambiar la contraseña que usa el bot. [https://phabricator.wikimedia.org/T395205] * A partir de esta semana, las wikis de Wikimedia permitirán características de ES2017 en código JavaScript para código oficial, dispositivos y scripts de usuario. La característica más visible de ES2017 es la sintaxis de <bdi lang="zxx" dir="ltr"><code>async</code>/<code>await</code></bdi>, que permite un código más fácil de leer. Hasta esta semana, la plataforma solo permitía hasta ES2016, y unos meses antes, hasta ES2015. [https://phabricator.wikimedia.org/T381537] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.4|MediaWiki]] '''Reuniones y eventos''' * Las solicitudes de becas para participar en la [[m:Special:MyLanguage/GLAM Wiki 2025|GLAM Wiki Conference 2025]] ya están abiertas. La conferencia se realizará del 30 de octubre al 1 de noviembre en Lisboa, Portugal. Las personas que contribuyen con GLAM y carecen de los medios para participar pueden [[m:Special:MyLanguage/GLAM Wiki 2025/Scholarships|postular aquí]]. Las solicitudes de becas cierran el 7 de junio. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/23|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W23"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:55 2 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28819186 --> == Noticias técnicas: 2025-24 == <section begin="technews-2025-W24"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/24|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * El [[mw:Special:MyLanguage/Trust and Safety Product|equipo de Confianza y Seguridad de Producto]] está terminando el trabajo necesario para implementar [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] en las Wikipedias más grandes a finales de este mes. El equipo ha trabajado con los stewards y otros usuarios con permisos extendidos para predecir y responder a los diversos casos de uso que podrían aparecer en las wikis más grandes, así los integrantes de las comunidades pueden continuar el patrullaje y la moderación de las cuentas temporales. Esta es la segunda de tres fases de implementación; la última se realizará, al menos, en septiembre. Para más información sobre los desarrollos recientes de este proyecto, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|lee esta actualización]]. Si tienes comentarios o preguntas, escribe un mensaje en [[mw:Talk:Trust and Safety Product/Temporary Accounts|la página de discusión]], y [[m:Event:CEE Catch up Nr. 10 (June 2025)|únete a CEE Catch Up]] este martes. '''Actualizaciones para editores''' * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] La característica de [[mw:Special:MyLanguage/Help:Watchlist expiry|expiración de la lista de seguimiento]] permite a los editores vigilar páginas por un tiempo. Después de este período, la página se elimina automáticamente de la lista de seguimiento. A partir de esta semana, puedes establecer tu preferencia predeterminada para hacer seguimiento de páginas. Las [[Special:Preferences#mw-prefsection-watchlist-pageswatchlist|preferencias]] también te permiten establecer diversos tiempos de seguimiento para las ediciones en páginas existentes, páginas creadas y cuando se revierte la página. [https://phabricator.wikimedia.org/T265716] [[File:Talk pages default look (April 2023).jpg|thumb|alt=Captura de pantalla de las mejoras visuales realizadas en las páginas de discusión|Ejemplo de una página de discusión con el nuevo diseño, en francés.]] * La apariencia de las páginas de discusión cambiará en la mayoría de las Wikipedias. Algunas wikis, como las que se mencionan en [[m:Special:MyLanguage/Tech/News/2024/19|este enlace]], ya han recibido este rediseño, mientras que [[phab:T379264|otras]] lo recibirán más tarde. Puedes leer más sobre estos cambios en [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|''Diff'']]. Es posible desactivar esta función en tus [[Special:Preferences#mw-prefsection-editing-discussion|preferencias de usuario]], en la sección "{{int:discussiontools-preference-visualenhancements}}". [https://phabricator.wikimedia.org/T319146][https://phabricator.wikimedia.org/T392121] * Los usuarios con permisos extendidos específicos (incluyendo administradores, burócratas, comprobadores de usuarios, supresores y ''stewards'') podrán [[phab:T358853|acceder temporalmente a la dirección IP]] de todas las cuentas temporales por un tiempo limitado para combatir vandalismos recurrentes. Esta característica fue solicitada por los ''stewards''. [https://phabricator.wikimedia.org/T386492] * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático seguirán implementando [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo en varias Wikipedias más. Este filtro utiliza el modelo Revert Risk, creado por el equipo de Investigación, para resaltar las ediciones que probablemente serán revertidas y así ayudar a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. Esta característica se desplegará en las siguientes Wikipedias: {{int:project-localized-name-afwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-cywiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-hawwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-iswiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-kkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-simplewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-trwiki/es}}. La implementación continuará en las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:27}} {{PLURAL:27|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * Se les pide a los editores activos del Filtro Anti Abusos en Meta-Wiki y en las Wikipedias grandes que actualicen los filtros para que sean compatibles con las cuentas temporales. Un enlace a las instrucciones y una lista privada de filtros que necesitan verificación están disponibles en Phabricator en [[phab:T369611|este enlace]]. * Los módulos de Lua ahora tienen acceso al nombre de la página que tiene asociada una miniatura de imagen, y en [https://gerrit.wikimedia.org/g/operations/mediawiki-config/+/2e4ab14aa15bb95568f9c07dd777065901eb2126/wmf-config/InitialiseSettings.php#10849 algunas wikis] también a la información de evaluación del Wikiproyecto. Esto es posible usando dos nuevas propiedades en [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#added-by-extensions|mw.title objects]], llamadas <code dir=ltr>pageImage</code> y <code dir=ltr>pageAssessments</code>. [https://phabricator.wikimedia.org/T131911][https://phabricator.wikimedia.org/T380122] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.5|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W24"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:16 10 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28846858 --> == Categoría: Personajes Bíblicos o Antropónimos Bíblicos == ¿Puedo crear esta categoria? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:30 12 jun 2025 (UTC) :Sin una buena justificación, yo estoy en contra por los mismos motivos que en [[Wikcionario:Café/2020 04#Francisco Franco]]. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:17 12 jun 2025 (UTC) ::Por cierto, ya habíamos borrado [[:Categoría:Personajes bíblicos]] previamente, a raíz de aquella discusión. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:21 12 jun 2025 (UTC) :Los nombres propios quedan fuera del alcance en general, salvo nombres o apellidos genéricos que no referencien a ninguna persona en particular, o sinó los nombres de ciudades o topónimos. Fuera de eso, otros nombres particulares conciernen solo a Wikipedia. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:30 12 jun 2025 (UTC) ::Aca estoy hablando de entradas como [[Adán]], [[Eva]], [[Moisés]] y solo agregar una clasificación. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 21:00 12 jun 2025 (UTC) :::¿Qué clasificación? Estás lanzando una propuesta imprecisa y poco estudiada: justo en esas tres entradas que citas ya había acepciones bíblicas y fueron eliminadas. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 22:19 12 jun 2025 (UTC) ::::Agrega la categoría Antropónimos Bíblicos, en los nombres correspondientes. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 04:32 13 jun 2025 (UTC) :::::Otro motivo para no hacerlo es que me opongo a las "categorías silenciosas", fuera de {{ep|csem}} u otra plantilla similar. En tu caso, de acuerdo a mis esquemas una categoría como esa debería ir en {{ep|csem}} para que aparezca el supuesto campo semántico antes de la definición del nombre propio, lo que incluso hace que quede peor. Pero tranquilo que hay proyectos para eso. En Wikipedia [[w:Categoría:Personajes_del_Nuevo_Testamento|ya lo hicieron]]. Aunque todavía les faltan algunos, como [[w:Tomás el Apóstol]], que justo es mi favorito xd. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:47 13 jun 2025 (UTC) ::::::Opino similar, solo estaría de acuerdo sí se agregara la acepción que explica su significado bíblico: ::::::;1 Religión: Primer hombre según la Biblia. ::::::;2: ''Nombre de pila de varón''. ::::::Y que Antropónimos bíblicos sea una etiqueta que se muestre como Religión o Cristrianismo o algo así. ::::::Pero si ya se había acordado que entradas de ese estilo no van aquí, entonces pues no. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 01:07 16 jun 2025 (UTC) == Vote now in the 2025 U4C Election == <div lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{Int:Please-translate}} Eligible voters are asked to participate in the 2025 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2025|2025 Election information page]]. The vote closes on 17 June 2025 at [https://zonestamp.toolforge.org/1750161600 12:00 UTC]. Please vote if your account is eligible. Results will be available by 1 July 2025. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 23:01 13 jun 2025 (UTC) </div> <!-- Mensaje enviado por Usuario:Keegan (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28848819 --> == Noticias técnicas: 2025-25 == <section begin="technews-2025-W25"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/25|Traducciones en varios idiomas]] están disponibles. '''Actualizaciones para editores''' * Puedes [https://wikimediafoundation.limesurvey.net/359761?lang=en nominar tus herramientas favoritas] para la sexta edición del [[m:Special:MyLanguage/Coolest Tool Award|Coolest Tool Award]]. Las nominaciones son anónimas y estarán abiertas hasta el 25 de junio. Puedes reutilizar el formulario para enviar múltiples nominaciones. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:33}} {{PLURAL:33|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.6|MediaWiki]] '''A fondo''' * El personal de la Fundación y los voluntarios técnicos utilizan las API de Wikimedia para construir herramientas, aplicaciones, características e integraciones que mejoran las experiencias de los usuarios. Durante los próximos años, el equipo de Interfaces de MediaWiki invertirá en API web de Wikimedia (HTTP) para satisfacer mejor las necesidades técnicas de los voluntarios y proteger la infraestructura de Wikimedia de posibles abusos. Puedes [https://techblog.wikimedia.org/2025/06/12/apis-as-a-product-investing-in-the-current-and-next-generation-of-technical-contributors/ leer más sobre sus planes para evolucionar las API en esta publicación de Techblog]. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W25"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:38 16 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Convocatoria a Candidaturas para la Junta Directiva de la Fundación Wikimedia, 2025 == <section begin="announcement-content" /> :''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Announcement/Call for candidates|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2025/Announcement/Call for candidates}}&language=&action=page&filter= {{int:please-translate}}]</div> Saludos, La [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|convocatoria a candidaturas para la selección 2025 de Miembros de la Junta Directiva de la Fundación Wikimedia se encuentra abierta]] desde el 17 de junio de 2025 hasta el 2 de julio de 2025 a horas 11:59 UTC [1]. La Junta Directiva supervisa el trabajo de la Fundación Wikimedia, y cada Miembro cumple un periodo de funciones de tres años [2]. El cargo es voluntario. Este año, la comunidad Wikimedia votará desde fines de agosto hasta el mes de septiembre de 2025 para ocupar dos (2) puestos en la Directiva de la Fundación. ¿Podría usted, o alguien a quien usted conozca, tener lo que se requiere para unirse a la Junta Directiva de la Fundación Wikimedia? [3] Puede aprender más acerca de los requisitos para postularse a estos puestos de liderazgo, además del modo de presentar una candidatura en [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidate application|esta página de Meta-wiki]], para sí o para alguien que usted considere que podría presentarse a la elección de este año. Atentamente, Abhishek Suryawanshi<br /> Director del Comité Electoral A nombre del Comité Electoral y del Comité de Gobernanza [1] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Call_for_candidates [2] https://foundation.wikimedia.org/wiki/Legal:Bylaws#(B)_Term. [3] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Resources_for_candidates<section end="announcement-content" /> [[Usuario:MediaWiki message delivery|MediaWiki message delivery]] ([[Usuario discusión:MediaWiki message delivery|discusión]]) 17:44 17 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:RamzyM (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28866958 --> == Importación de contenido desde en.wikitioanry == Estimados, Tengo una aplicación desarrollada en Java que utiliza la cuenta RoboJ2. En los últimos días, la he empleado para importar contenidos desde en.wiktionary siguiendo este proceso: Entrada de datos: El programa recibe como parámetro un archivo de texto que elaboro manualmente, donde se listan las entradas a procesar. Verificación: El sistema revisa si cada entrada existe en en.wiktionary y no está presente en es.wiktionary. Transformación: El programa analiza el wikitexto de la entrada y lo adapta al formato utilizado en es.wiktionary. Las entradas que he selecionado ahora han sido antróponimos y plurales de palabras que encontre aquí: [https://es.wiktionary.org/wiki/Ap%C3%A9ndice:Palabras_m%C3%A1s_frecuentes_del_ingl%C3%A9s Palabras frecuentes] Entradas generadas hasta ahora: [https://es.wiktionary.org/wiki/Especial:Contribuciones/RoboJ2 Entradas generadas]. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 22:06 18 jun 2025 (UTC) :@[[Usuario:Cvmontuy|Cvmontuy]] No tengo motivos para oponerme PERO: :* Desearía que se respete completamente el formato nuevo de la guía de estilo. O sea, las formas flexivas van con el título de nivel 3 "Forma flexiva" y luego en el nivel 4 va el título de Forma sustantiva, adjetiva, etc. Lo de poner directamente el título de nivel 4 en el nivel 3 es una costumbre antigua que la seguimos tolerando solo porque no hice una migración masiva de todas las páginas con formas flexivas y como no es prioridad hacerlo ahora mismo no es un error grave pero las páginas nuevas no deberían ser creadas con ese formato. :* Las palabras se agregan completamente o no se agregan, pero no crees más esbozos con tu bot, me refiero a lo que aparece en [[sends]] o en [[reflections]]. :* Podrías compartir el repositorio de la app? Podríamos extenderlo a más idiomas en un futuro. ::@[[Usuario:Tmagc|Tmagc]],@[[Usuario:Peter Bowman|Peter Bownman]], aqui les dejo el repositorio [https://github.com/cvmontuy1/WikiBotJ316 WikiBotJ316], no es un trabajo profesional pero desde mi punto de vista funciona, saludos --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:50 24 jun 2025 (UTC) :[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:00 19 jun 2025 (UTC) ::@[[Usuario:Tmagc|Tmagc]] ::::*Si revisas las entradas creadas, verás que están tal como mencionas: en el nivel 3 aparece “Forma flexiva” y en el nivel 4, “Forma sustantiva/verbal”. ::::*Se ha utilizado la plantilla <nowiki>{{esbozo}}</nowiki> porque la fuente de información no es perfecta ni completa, y el programa tampoco lo es. Reconoce ciertas expresiones regulares para extraer los datos, pero no es tan avanzado como para analizar el contenido de forma más profunda. ::::*Todas las entradas creadas siguen la guía de estilo y todas incluyen al menos una definición y su categoría gramatical y la prounciación si esta publicad en el en.wiktionary. Las entradas creadas son antropónimos y plurales, por lo que en la mayoria no hay mucho más que añadir en ellas. ¿O qué criterio de aceptación considerarías necesario? Más adelante, Si no lo prohiben, tal vez integre entradas con terminaciones adverbiales (-ly) y las formas verbales (-ed, -ing). ::::*Creo que es más sencillo y, por lo tanto, útil comenzar con un esbozo que desde cero. ::::*En el proyecto tenemos cientos de entradas como [[burocratizar]] o [[catatonizar]], que prácticamente están vacías. Las que yo aporto siempre incluyen al menos una definició. y muchas entradas que tenemos en el proyecto iniciaron como un esbozo, o queremos ya prohibiir los esbozos oficialmente?, y entonces debemos elimianr la plantilla correspondiente? ::::*No he creado un espacio en gitlab pero espero la proxima semana hacerlo y compartir el código correspondiente. ::::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:55 19 jun 2025 (UTC) :::@[[Usuario:Cvmontuy|Cvmontuy]] :::* Como decía, lo de los esbozos que están ahora creados fue por una mala decisión que se tomó en su momento, de las tantas que han perjudicado al proyecto pero creeme que si hubiera estado en su momento no lo habría permitido. Así y todo, no sigamos propagando el mal, no creemos más esbozos innecesariamente. Si la aplicación tiene problemas para parsear las entradas de en.wikt, entonces deberán hacerse las pruebas que sean necesarias hasta que funcione aceptable. :::* No es necesario extraer toda la información, puede que hayan cosas que no aplican para nuestro sitio. Pero las etimologías y las definiciones deberían aparecer. :::* Yo me centraría en agregar formas canónicas; las formas flexivas en todo caso las podríamos crear sino con la información de las entradas que tenemos en nuestro Wikcionario. :::* En lugar de luchar innecesariamente con las expresiones regulares, deberías usar una biblioteca que parsee wikitexto. Yo implementé un algoritmo en Python para parsear las entradas en es.wikt usando la de [https://github.com/5j9/wikitextparser 5j9]. Podríamos crear un repositorio para que te comparta lo que tengo y trabajar en conjunto, pero nunca tuve éxito con Java. [https://www.mediawiki.org/wiki/Alternative_parsers Acá hay una lista con otras implementaciones]. :::[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 05:24 19 jun 2025 (UTC) ::::Hola. Mi bot está escrito en Java y tengo un parser específico para eswiktionary que no funciona mal, está probado desde 2015 ([https://github.com/PeterBowman/wikibot/tree/master/wikibot/src/main/java/com/github/wikibot/parsing/eswikt fuente]; la pega es que el código es un desastre infumable). Con respecto a lo que se menciona de [[burocratizar]] y otras entradas vacías (sin definiciones), mi opinión es que no se deberían haber creado, y estaría a favor de borrarlas. No colocaría {{ep|esbozo}} en aquellas entradas importadas que sean simples formas flexivas; lo único que se puede hacer con esas plantillas es quitarlas directamente (aunque coincido con Tmagc en que preferiría usar la información de eswiktionary en lugar de importar/convertir). Por otro lado, permiten que un usuario humano las revise a posteriori para verificar que el bot haya funcionado bien... Para conjugar ambas opciones, yo propondría usar una plantilla de aviso diferente, específica para páginas importadas por bot que requieran de revisión manual. Algo como {{ep|importado}}, pero puntualizando que se requiere de revisión más que adaptación a nuestro formato. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 08:44 19 jun 2025 (UTC) ::*El programa desarrollado está actualmente diseñado para importar antropónimos y plurales. Toma del en.wiktionary la información de pronunciación y determina si el término es masculino, femenino, ambos, o si se trata de un hipocorístico. En el caso de los plurales, verifica si la palabra corresponde a un sustantivo, una forma verbal, o ambas. Esta información, para este tipo de entradas, no está disponible en el es.wiktionary. ::*Estoy de acuerdo en que sería más útil generar entradas de las formas canónicas o basarse directamente en el es.wiktionary, pero por ahora esas tareas no están dentro del alcance de este programa. Quizá más adelante pueda trabajar en ese sentido. ::*Gracias por compartir las librerías; no sabía que existían. Las revisaré con calma más adelante. Revisé brevemente tu programa, @Peter Bowman, y me pareció bien estructurado y fácil de entender. El mecanismo de parseo que usaste es muy similar al que empleo en el programa que estamos discutiendo ahora. El objetivo de identificar plantillas en en.wiktionary y analizarlas es técnicamente sencillo, pero los contenidos no siempre usan plantillas y hay mucho texto libre. En estos casos, más que un parser, lo que realmente ayudaría sería integrar una IA para la traducción. No lo he hecho aún, y tampoco sé si eso sería legalmente válido. ::Por favor, intentemos concluir: ::*Si en lugar de poner “Nombre de varios lugares”, el programa indica explícitamente textos como “Ciudad de...”, y además agrega la etimología cuando esta se encuentra expresada mediante plantilas en el en.wiktionary, ¿con estos cambios el programa obtiene autorización para seguir operando? ::*En cuanto a sustituir la plantilla <nowiki>{{esbozo}}</nowiki>, existe la plantilla {{ep|creado_por_bot}}. ¿Debo usar esa? ::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:46 19 jun 2025 (UTC) == Noticias técnicas: 2025-26 == <section begin="technews-2025-W26"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/26|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático continuarán con el lanzamiento de [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo al tercer y último grupo de Wikipedias. Este filtro utiliza el modelo de Riesgo de Reversión (Revert Risk), el cual fue creado por el equipo de Investigación, y destaca las ediciones que posiblemente deban ser revertidas para ayudar así a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. La característica será lanzada en las siguientes Wikipedias: {{int:project-localized-name-azwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-lawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mlwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mrwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-nnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-pawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-swwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tlwiki/es}}. El lanzamiento continuará durante las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] '''Actualizaciones para editores''' * La semana pasada, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] se implementaron en las Wikipedias en checo, coreano y turco. Esta semana y la próxima, los lanzamientos se realizarán en Wikipedias más grandes. [[mw:Talk:Trust and Safety Product/Temporary Accounts|Comparte tus ideas]] sobre el proyecto. [https://phabricator.wikimedia.org/T340001] * Durante esta semana, el equipo de Edición lanzará [[mw:Special:MyLanguage/Help:Edit check#Multi check|Multi Check]] en todas las Wikipedias (excepto la Wikipedia en inglés). Esta característica muestra múltiples [[mw:Special:MyLanguage/Help:Edit check#Reference check|verificaciones de referencias]] junto a la experiencia de edición. Esto anima a los usuarios a añadir citas cuando agregan varios párrafos a un artículo de Wikipedia. Esta característica estuvo disponible como una prueba A/B. [https://analytics.wikimedia.org/published/reports/editing/multi_check_ab_test_report_final.html#summary-of-results Las pruebas mostraron] que los usuarios a quienes se les mostraban las múltiples verificaciones eran 1.3 veces más propensos a añadir una referencia a su edición, y su edición era 34.7% menos propensa a ser revertida. [https://phabricator.wikimedia.org/T395519] * Unas pocas páginas deben ser renombradas debido a actualizaciones de software y para ajustarse a estándares Unicode más recientes. Todos estos cambios están relacionados con las mayúsculas en los títulos. Aproximadamente 71 páginas y 3 archivos serán renombrados en 15 wikis; la lista completa se encuentra en [[phab:T396903|esta tarea]]. Los desarrolladores renombrarán estas páginas la próxima semana y solucionarán las redirecciones y los enlaces de archivos incrustados unos minutos después mediante una actualización de la configuración del sistema. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:24}} {{PLURAL:24|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se arregló un error que había hecho que las páginas se desplazaran hacia arriba cuando se selecciona texto cerca de la parte superior. [https://phabricator.wikimedia.org/T364023] '''Actualizaciones para los colaboradores técnicos''' * Ahora, los editores pueden usar los módulos de Lua para filtrar y transformar datos tabulares y utilizarlos con [[mw:Special:MyLanguage/Extension:Chart|Extension:Chart]]. Esto puede ser empleado para diversos objetivos, como seleccionar un subconjunto de filas o columnas de los datos, convertir entre unidades, realizar procesamiento estadístico y otras transformaciones útiles. [[mw:Special:MyLanguage/Extension:Chart/Transforms|Lee más para obtener información sobre cómo usar las transformaciones]]. [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Chart/Project/Updates] * La variable <code dir=ltr>all_links</code> en el [[Special:AbuseFilter|Filtro Antiabusos]] ahora se llama <code dir=ltr>new_links</code> para ser consistente con las otras variables. Los usos anteriores seguirán funcionando. [https://phabricator.wikimedia.org/T391811] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.7|MediaWiki]] '''A fondo''' * El último [[mw:Special:MyLanguage/Growth/Newsletters/34|Boletín de Growth]] está disponible. Incluye: las actualizaciones recientes de la tarea "Agregar un enlace", dos nuevas características de participación para los recién llegados y actualizaciones de la configuración comunitaria. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W26"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:21 23 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Noticias técnicas: 2025-27 == <section begin="technews-2025-W27"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/27|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|extensión CampaignEvents]] ya está habilitada en todas las Wikipedias. Esta extensión facilita la organización y participación en actividades colaborativas, como editatones y Wikiproyectos, en las wikis. La extensión incluye tres características: [[m:Special:MyLanguage/Event Center/Registration|Registro al evento]], [[m:Special:MyLanguage/CampaignEvents/Collaboration list|Lista de colaboración]] y [[m:Campaigns/Foundation Product Team/Invitation list|Lista de invitaciones]]. Para solicitar la extensión para tu wiki, visita la [[m:Special:MyLanguage/CampaignEvents/Deployment status#How to Request the CampaignEvents Extension for your wiki|página de información de Despliegues]]. '''Actualizaciones para editores''' * Los mantenedores del Filtro Antiabusos ahora pueden [[mw:Special:MyLanguage/Extension:IPReputation/AbuseFilter variables|evaluar la reputación de la IP]] en los [[mw:Special:MyLanguage/Extension:AbuseFilter|Filtros]]. Los datos de la reputación de la IP son información sobre los proxies y VPN asociados a la dirección IP del usuario. Esta información no se muestra públicamente y no se genera para acciones realizadas por cuentas registradas. [https://phabricator.wikimedia.org/T354599] * El contenido oculto que se encuentra en [[mw:Special:MyLanguage/Manual:Collapsible elements|partes colapsables de las wikipáginas]] ahora se mostrará cuando alguien busque en la página usando la función "Buscar en la página" del navegador (Ctrl+F o ⌘F) en los navegadores compatibles. [https://phabricator.wikimedia.org/T327893][https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/hidden#browser_compatibility] * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] Una nueva función, llamada [[mw:Special:MyLanguage/Help:TemplateData/Template discovery|Plantillas Favoritas]], se lanzará a finales de esta semana en todos los proyectos (excepto en la Wikipedia en inglés, que la recibirá la próxima semana), tras una fase piloto en las Wikipedias en polaco y árabe, y los Wikisources en italiano e inglés. Esta característica ofrecerá una mejor manera de descubrir y utilizar plantillas mediante el cuadro de diálogo de plantillas, permitiendo a los usuarios añadirlas a una "lista especial de favoritos". La función es compatible tanto con el Editor Visual como con el editor de Wikitexto. Esta funcionalidad es un [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|deseo de la comunidad]]. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:31}} {{PLURAL:31|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se solucionó un error que causaba que algunas Notificaciones se enviaran varias veces. [https://phabricator.wikimedia.org/T397103] '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.8|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W27"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:40 30 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28917415 --> o45c4z3q2vflkx75uydjbm7cidaqesc 5823353 5823206 2025-07-02T22:37:31Z Tmagc 158167 Sección nueva: /* Modificaciones propuestas para pron-graf */ 5823353 wikitext text/x-wiki <!-- Inicio Encabezado del café, aviso, información histórica y información de archivado --> <div style="text-align: center;"> {{/Aviso}} {{/Histórico}} </div> {{atajo|WN:C}} [[Categoría:Wikcionario:Café]] <!-- Fin del Encabezado del café --> <!-- Inicio configuración robot archivado; no tocar si no se sabe lo que se hace --> {{Usuario:MABot/config |archive = Wikcionario:Café/%(year)d %(month)02d |algo = old(30d) |counter = 1 |archiveheader = {{Archivo}} }} <h1>{{MONTHNAME|{{PREVIOUSMONTH}}}} de {{PREVIOUSMONTH.YEAR}}</h1> <div class="mw-archivedtalk"> {{/{{PREVIOUSMONTH.YEAR}} {{PREVIOUSMONTH}}}} </div> <h1>Actual</h1> == Cómo agregar nuevas pronunciaciones == Hola! quisiera preguntar cómo agregar una nueva pronunciación en la plantilla '''Plantilla:pron-graf,''' ¿puedo agregarlo de forma manual o se necesita tener una página de Referencia de pronunciación,como por ejemplo Wikcionario:Referencia/ES/Pronunciación. En mi caso quiero agregar pronunciaciones desde la lengua Kunza (KUZ), la que no tiene página de referencia de pronunciación. ¿Necesitaría crear la página Wikcionario:Referencia/KUZ/Pronunciación para que me resulte? gracias de antemano [[Usuario:Pcartes|Pcartes]] ([[Usuario discusión:Pcartes|discusión]]) 15:21 21 may 2025 (UTC) :@[[Usuario:Pcartes|Pcartes]] Deberías crear [[Módulo:generar-pron/kuz]], tomando como referencia lo que se hizo con otros idiomas afines, por ejemplo [[Módulo:generar-pron/arn]], [[Módulo:generar-pron/yua]] o [[Módulo:generar-pron/gn]] por tirar ejemplos. Sabés programar en Lua? Tenés ya algún algoritmo hecho? Si no puedo ayudarte con gusto, pero necesito que me expliques cómo debe ser. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:45 21 may 2025 (UTC) ::gracias por la respuesta y disposición para ayudar, la verdad es que no sé programar con Lua pero me interesa aprender. Actualmente estoy trabajando con lingüistas que me podrán ayudar a completar la parte técnica, pero igual agradecería tu ayuda. ¿Hay alguna forma de comunicarnos directamente por correo o solo por aquí? ::Cualquier cosa quedo atento [[Usuario:Pcartes|Pcartes]] ([[Usuario discusión:Pcartes|discusión]]) 16:57 21 may 2025 (UTC) :::@[[Usuario:Pcartes|Pcartes]] Prefiero que nos escribamos en este sitio así queda evidencia de todo lo discutido en caso de que futuros usuarios se vean en la necesidad de revisar el módulo por el motivo que fuere. Para no inundar el Café con una discusión irrelevante e innecesaria para el resto, ahora te escribo en tu página de discusión y seguimos por allí. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:22 21 may 2025 (UTC) ::::Un detalle importantes es que no se sabe cómo sonaba el kunza. En particular, se discute mucho qué quiso decir Vaïsse con su descripción de la consonante ck, muy común en el idioma, como en su propio nombre [[ckunsa]] ("nuestro"). ¿Era /q/, /χ/ o algo diferente? No se sabe. Por eso, antes de crear el módulo habria que revisar las reconstrucciones que se puedan haber publicado. Saludos. [[Usuario:Lin linao|Lin linao]] [[Usuario Discusión:Lin linao|¿dime?]] 21:44 2 jun 2025 (UTC) == Etimología de siglas == Hola, copié el módulo etimología a etimología_test para adaptarlo al manejo de siglas, se agrega el parámetro nosep (no separador). :Con parámetro nosep ::Sigla de [[organización#Español|''organización'']] ''de'' ''las'' [[naciones#Español|''naciones'']] [[unidas#Español|''unidas'']] :Sin parámetro nosep ::Sigla de [[organización#Español|''organización'']], ''de'', ''las'', [[naciones#Español|''naciones'']] y [[unidas#Español|''unidas'']] ¿Están de acuerdo en aprobar este cambio para implementarlo en el módulo original? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>mensajes)</sup>]] 21:19 30 may 2025 (UTC) :Pues, creo que es bastaaante raro que las siglas vengan de términos con comas, el único caso que se me viene a la mente es la UNESCO y es una sola. Siento yo que en esos extraños y pocos casos se podría usar el parámetro nl=s y añadir el enlace manual: :* Si esta en Wikipedia, podría enlazarse directamente: :{{etimología|sigla|[[w:United Nations Educational, Scientific and Cultural Organization|United Nations Educational, Scientific and Cultural Organization]]|nl=s}}. :* Enlace a otros términos del Wikcionario: :{{etimología|sigla|[[building]], [[antenna]]-tower, [[span]], [[earth]]|nl=s}}. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 22:45 30 may 2025 (UTC) :Ídem a Raos, yo tampoco entiendo cuál era el problema original. Podrías mostrar algún ejemplo en donde esa modificación sea relevante? Yo creo que si la sigla es de varias palabras sería más bien un compuesto acronímico (actualmente clasificado como compuesto). [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:34 31 may 2025 (UTC) ::De acuerdo --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:56 31 may 2025 (UTC) :::Entiendo que el "de acuerdo" quiere decir que la propuesta ha sido retirada. Elimino entonces [[Plantilla:etimologíapba]] y [[Módulo:etimología test]] para que no figuren en el espacio principal. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:24 7 jun 2025 (UTC) ::::Si gracias! [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:37 7 jun 2025 (UTC) == Noticias técnicas: 2025-23 == <section begin="technews-2025-W23"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/23|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Extension:Chart|extensión Chart]] ya está disponible en todas las wikis de Wikimedia. Los editores pueden usar esta nueva extensión para crear visualizaciones de datos interactivas como gráficos de barra, línea y torta. La extensión está diseñada para reemplazar muchos de los usos de la [[mw:Special:MyLanguage/Extension:Graph|extensión antigua]]. '''Actualizaciones para editores''' * Ahora es más fácil configurar las citas automáticas para tu wiki con el [[mw:Special:MyLanguage/Citoid/Enabling Citoid on your wiki|generador de citas]] del editor visual. Los administradores pueden establecer una plantilla por defecto usando <code dir=ltr>_default</code> en la página local <bdi lang="en" dir="ltr">[[MediaWiki:Citoid-template-type-map.json]]</bdi> ([[mw:Special:Diff/6969653/7646386|un ejemplo de diff]]). Establecer este valor por defecto también ayudará a preparar tus configuraciones existentes para el futuro cuando se agreguen [[phab:T347823|nuevos tipos de elementos]]. Aún puedes establecer plantillas para tipos individuales, ya que estas tendrán preferencia sobre la plantilla por defecto. [https://phabricator.wikimedia.org/T384709] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:20}} {{PLURAL:20|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * A partir de la semana del 2 de junio, los bots que inicien sesión usando <code dir=ltr>action=login</code> o <code dir=ltr>action=clientlogin</code> fallarán con mayor frecuencia. Esto se debe a la mejora en las protecciones contra ingresos sospechosos. Los bots que usen [[mw:Special:MyLanguage/Manual:Bot passwords|contraseñas de bot]] o un mecanismo de autenticación sin inicio de sesión como [[mw:Special:MyLanguage/OAuth/Owner-only consumers|OAuth]] no se verán afectados. Si tu bot no está usando uno de esos mecanismos, deberías actualizarlo; el uso de <code dir=ltr>action=login</code> sin una contraseña de bot fue marcado como obsoleto [[listarchive:list/wikitech-l@lists.wikimedia.org/message/3EEMN7VQX5G7WMQI5K2GP5JC2336DPTD/|en 2016]]. Para la mayoría de los bots, esto solo requiere cambiar la contraseña que usa el bot. [https://phabricator.wikimedia.org/T395205] * A partir de esta semana, las wikis de Wikimedia permitirán características de ES2017 en código JavaScript para código oficial, dispositivos y scripts de usuario. La característica más visible de ES2017 es la sintaxis de <bdi lang="zxx" dir="ltr"><code>async</code>/<code>await</code></bdi>, que permite un código más fácil de leer. Hasta esta semana, la plataforma solo permitía hasta ES2016, y unos meses antes, hasta ES2015. [https://phabricator.wikimedia.org/T381537] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.4|MediaWiki]] '''Reuniones y eventos''' * Las solicitudes de becas para participar en la [[m:Special:MyLanguage/GLAM Wiki 2025|GLAM Wiki Conference 2025]] ya están abiertas. La conferencia se realizará del 30 de octubre al 1 de noviembre en Lisboa, Portugal. Las personas que contribuyen con GLAM y carecen de los medios para participar pueden [[m:Special:MyLanguage/GLAM Wiki 2025/Scholarships|postular aquí]]. Las solicitudes de becas cierran el 7 de junio. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/23|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W23"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:55 2 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28819186 --> == Noticias técnicas: 2025-24 == <section begin="technews-2025-W24"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/24|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * El [[mw:Special:MyLanguage/Trust and Safety Product|equipo de Confianza y Seguridad de Producto]] está terminando el trabajo necesario para implementar [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] en las Wikipedias más grandes a finales de este mes. El equipo ha trabajado con los stewards y otros usuarios con permisos extendidos para predecir y responder a los diversos casos de uso que podrían aparecer en las wikis más grandes, así los integrantes de las comunidades pueden continuar el patrullaje y la moderación de las cuentas temporales. Esta es la segunda de tres fases de implementación; la última se realizará, al menos, en septiembre. Para más información sobre los desarrollos recientes de este proyecto, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|lee esta actualización]]. Si tienes comentarios o preguntas, escribe un mensaje en [[mw:Talk:Trust and Safety Product/Temporary Accounts|la página de discusión]], y [[m:Event:CEE Catch up Nr. 10 (June 2025)|únete a CEE Catch Up]] este martes. '''Actualizaciones para editores''' * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] La característica de [[mw:Special:MyLanguage/Help:Watchlist expiry|expiración de la lista de seguimiento]] permite a los editores vigilar páginas por un tiempo. Después de este período, la página se elimina automáticamente de la lista de seguimiento. A partir de esta semana, puedes establecer tu preferencia predeterminada para hacer seguimiento de páginas. Las [[Special:Preferences#mw-prefsection-watchlist-pageswatchlist|preferencias]] también te permiten establecer diversos tiempos de seguimiento para las ediciones en páginas existentes, páginas creadas y cuando se revierte la página. [https://phabricator.wikimedia.org/T265716] [[File:Talk pages default look (April 2023).jpg|thumb|alt=Captura de pantalla de las mejoras visuales realizadas en las páginas de discusión|Ejemplo de una página de discusión con el nuevo diseño, en francés.]] * La apariencia de las páginas de discusión cambiará en la mayoría de las Wikipedias. Algunas wikis, como las que se mencionan en [[m:Special:MyLanguage/Tech/News/2024/19|este enlace]], ya han recibido este rediseño, mientras que [[phab:T379264|otras]] lo recibirán más tarde. Puedes leer más sobre estos cambios en [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|''Diff'']]. Es posible desactivar esta función en tus [[Special:Preferences#mw-prefsection-editing-discussion|preferencias de usuario]], en la sección "{{int:discussiontools-preference-visualenhancements}}". [https://phabricator.wikimedia.org/T319146][https://phabricator.wikimedia.org/T392121] * Los usuarios con permisos extendidos específicos (incluyendo administradores, burócratas, comprobadores de usuarios, supresores y ''stewards'') podrán [[phab:T358853|acceder temporalmente a la dirección IP]] de todas las cuentas temporales por un tiempo limitado para combatir vandalismos recurrentes. Esta característica fue solicitada por los ''stewards''. [https://phabricator.wikimedia.org/T386492] * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático seguirán implementando [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo en varias Wikipedias más. Este filtro utiliza el modelo Revert Risk, creado por el equipo de Investigación, para resaltar las ediciones que probablemente serán revertidas y así ayudar a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. Esta característica se desplegará en las siguientes Wikipedias: {{int:project-localized-name-afwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-cywiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-hawwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-iswiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-kkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-simplewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-trwiki/es}}. La implementación continuará en las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:27}} {{PLURAL:27|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * Se les pide a los editores activos del Filtro Anti Abusos en Meta-Wiki y en las Wikipedias grandes que actualicen los filtros para que sean compatibles con las cuentas temporales. Un enlace a las instrucciones y una lista privada de filtros que necesitan verificación están disponibles en Phabricator en [[phab:T369611|este enlace]]. * Los módulos de Lua ahora tienen acceso al nombre de la página que tiene asociada una miniatura de imagen, y en [https://gerrit.wikimedia.org/g/operations/mediawiki-config/+/2e4ab14aa15bb95568f9c07dd777065901eb2126/wmf-config/InitialiseSettings.php#10849 algunas wikis] también a la información de evaluación del Wikiproyecto. Esto es posible usando dos nuevas propiedades en [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#added-by-extensions|mw.title objects]], llamadas <code dir=ltr>pageImage</code> y <code dir=ltr>pageAssessments</code>. [https://phabricator.wikimedia.org/T131911][https://phabricator.wikimedia.org/T380122] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.5|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W24"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:16 10 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28846858 --> == Categoría: Personajes Bíblicos o Antropónimos Bíblicos == ¿Puedo crear esta categoria? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:30 12 jun 2025 (UTC) :Sin una buena justificación, yo estoy en contra por los mismos motivos que en [[Wikcionario:Café/2020 04#Francisco Franco]]. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:17 12 jun 2025 (UTC) ::Por cierto, ya habíamos borrado [[:Categoría:Personajes bíblicos]] previamente, a raíz de aquella discusión. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:21 12 jun 2025 (UTC) :Los nombres propios quedan fuera del alcance en general, salvo nombres o apellidos genéricos que no referencien a ninguna persona en particular, o sinó los nombres de ciudades o topónimos. Fuera de eso, otros nombres particulares conciernen solo a Wikipedia. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:30 12 jun 2025 (UTC) ::Aca estoy hablando de entradas como [[Adán]], [[Eva]], [[Moisés]] y solo agregar una clasificación. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 21:00 12 jun 2025 (UTC) :::¿Qué clasificación? Estás lanzando una propuesta imprecisa y poco estudiada: justo en esas tres entradas que citas ya había acepciones bíblicas y fueron eliminadas. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 22:19 12 jun 2025 (UTC) ::::Agrega la categoría Antropónimos Bíblicos, en los nombres correspondientes. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 04:32 13 jun 2025 (UTC) :::::Otro motivo para no hacerlo es que me opongo a las "categorías silenciosas", fuera de {{ep|csem}} u otra plantilla similar. En tu caso, de acuerdo a mis esquemas una categoría como esa debería ir en {{ep|csem}} para que aparezca el supuesto campo semántico antes de la definición del nombre propio, lo que incluso hace que quede peor. Pero tranquilo que hay proyectos para eso. En Wikipedia [[w:Categoría:Personajes_del_Nuevo_Testamento|ya lo hicieron]]. Aunque todavía les faltan algunos, como [[w:Tomás el Apóstol]], que justo es mi favorito xd. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:47 13 jun 2025 (UTC) ::::::Opino similar, solo estaría de acuerdo sí se agregara la acepción que explica su significado bíblico: ::::::;1 Religión: Primer hombre según la Biblia. ::::::;2: ''Nombre de pila de varón''. ::::::Y que Antropónimos bíblicos sea una etiqueta que se muestre como Religión o Cristrianismo o algo así. ::::::Pero si ya se había acordado que entradas de ese estilo no van aquí, entonces pues no. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 01:07 16 jun 2025 (UTC) == Vote now in the 2025 U4C Election == <div lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{Int:Please-translate}} Eligible voters are asked to participate in the 2025 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2025|2025 Election information page]]. The vote closes on 17 June 2025 at [https://zonestamp.toolforge.org/1750161600 12:00 UTC]. Please vote if your account is eligible. Results will be available by 1 July 2025. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 23:01 13 jun 2025 (UTC) </div> <!-- Mensaje enviado por Usuario:Keegan (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28848819 --> == Noticias técnicas: 2025-25 == <section begin="technews-2025-W25"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/25|Traducciones en varios idiomas]] están disponibles. '''Actualizaciones para editores''' * Puedes [https://wikimediafoundation.limesurvey.net/359761?lang=en nominar tus herramientas favoritas] para la sexta edición del [[m:Special:MyLanguage/Coolest Tool Award|Coolest Tool Award]]. Las nominaciones son anónimas y estarán abiertas hasta el 25 de junio. Puedes reutilizar el formulario para enviar múltiples nominaciones. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:33}} {{PLURAL:33|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.6|MediaWiki]] '''A fondo''' * El personal de la Fundación y los voluntarios técnicos utilizan las API de Wikimedia para construir herramientas, aplicaciones, características e integraciones que mejoran las experiencias de los usuarios. Durante los próximos años, el equipo de Interfaces de MediaWiki invertirá en API web de Wikimedia (HTTP) para satisfacer mejor las necesidades técnicas de los voluntarios y proteger la infraestructura de Wikimedia de posibles abusos. Puedes [https://techblog.wikimedia.org/2025/06/12/apis-as-a-product-investing-in-the-current-and-next-generation-of-technical-contributors/ leer más sobre sus planes para evolucionar las API en esta publicación de Techblog]. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W25"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:38 16 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Convocatoria a Candidaturas para la Junta Directiva de la Fundación Wikimedia, 2025 == <section begin="announcement-content" /> :''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Announcement/Call for candidates|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2025/Announcement/Call for candidates}}&language=&action=page&filter= {{int:please-translate}}]</div> Saludos, La [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|convocatoria a candidaturas para la selección 2025 de Miembros de la Junta Directiva de la Fundación Wikimedia se encuentra abierta]] desde el 17 de junio de 2025 hasta el 2 de julio de 2025 a horas 11:59 UTC [1]. La Junta Directiva supervisa el trabajo de la Fundación Wikimedia, y cada Miembro cumple un periodo de funciones de tres años [2]. El cargo es voluntario. Este año, la comunidad Wikimedia votará desde fines de agosto hasta el mes de septiembre de 2025 para ocupar dos (2) puestos en la Directiva de la Fundación. ¿Podría usted, o alguien a quien usted conozca, tener lo que se requiere para unirse a la Junta Directiva de la Fundación Wikimedia? [3] Puede aprender más acerca de los requisitos para postularse a estos puestos de liderazgo, además del modo de presentar una candidatura en [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidate application|esta página de Meta-wiki]], para sí o para alguien que usted considere que podría presentarse a la elección de este año. Atentamente, Abhishek Suryawanshi<br /> Director del Comité Electoral A nombre del Comité Electoral y del Comité de Gobernanza [1] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Call_for_candidates [2] https://foundation.wikimedia.org/wiki/Legal:Bylaws#(B)_Term. [3] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Resources_for_candidates<section end="announcement-content" /> [[Usuario:MediaWiki message delivery|MediaWiki message delivery]] ([[Usuario discusión:MediaWiki message delivery|discusión]]) 17:44 17 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:RamzyM (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28866958 --> == Importación de contenido desde en.wikitioanry == Estimados, Tengo una aplicación desarrollada en Java que utiliza la cuenta RoboJ2. En los últimos días, la he empleado para importar contenidos desde en.wiktionary siguiendo este proceso: Entrada de datos: El programa recibe como parámetro un archivo de texto que elaboro manualmente, donde se listan las entradas a procesar. Verificación: El sistema revisa si cada entrada existe en en.wiktionary y no está presente en es.wiktionary. Transformación: El programa analiza el wikitexto de la entrada y lo adapta al formato utilizado en es.wiktionary. Las entradas que he selecionado ahora han sido antróponimos y plurales de palabras que encontre aquí: [https://es.wiktionary.org/wiki/Ap%C3%A9ndice:Palabras_m%C3%A1s_frecuentes_del_ingl%C3%A9s Palabras frecuentes] Entradas generadas hasta ahora: [https://es.wiktionary.org/wiki/Especial:Contribuciones/RoboJ2 Entradas generadas]. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 22:06 18 jun 2025 (UTC) :@[[Usuario:Cvmontuy|Cvmontuy]] No tengo motivos para oponerme PERO: :* Desearía que se respete completamente el formato nuevo de la guía de estilo. O sea, las formas flexivas van con el título de nivel 3 "Forma flexiva" y luego en el nivel 4 va el título de Forma sustantiva, adjetiva, etc. Lo de poner directamente el título de nivel 4 en el nivel 3 es una costumbre antigua que la seguimos tolerando solo porque no hice una migración masiva de todas las páginas con formas flexivas y como no es prioridad hacerlo ahora mismo no es un error grave pero las páginas nuevas no deberían ser creadas con ese formato. :* Las palabras se agregan completamente o no se agregan, pero no crees más esbozos con tu bot, me refiero a lo que aparece en [[sends]] o en [[reflections]]. :* Podrías compartir el repositorio de la app? Podríamos extenderlo a más idiomas en un futuro. ::@[[Usuario:Tmagc|Tmagc]],@[[Usuario:Peter Bowman|Peter Bownman]], aqui les dejo el repositorio [https://github.com/cvmontuy1/WikiBotJ316 WikiBotJ316], no es un trabajo profesional pero desde mi punto de vista funciona, saludos --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:50 24 jun 2025 (UTC) :[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:00 19 jun 2025 (UTC) ::@[[Usuario:Tmagc|Tmagc]] ::::*Si revisas las entradas creadas, verás que están tal como mencionas: en el nivel 3 aparece “Forma flexiva” y en el nivel 4, “Forma sustantiva/verbal”. ::::*Se ha utilizado la plantilla <nowiki>{{esbozo}}</nowiki> porque la fuente de información no es perfecta ni completa, y el programa tampoco lo es. Reconoce ciertas expresiones regulares para extraer los datos, pero no es tan avanzado como para analizar el contenido de forma más profunda. ::::*Todas las entradas creadas siguen la guía de estilo y todas incluyen al menos una definición y su categoría gramatical y la prounciación si esta publicad en el en.wiktionary. Las entradas creadas son antropónimos y plurales, por lo que en la mayoria no hay mucho más que añadir en ellas. ¿O qué criterio de aceptación considerarías necesario? Más adelante, Si no lo prohiben, tal vez integre entradas con terminaciones adverbiales (-ly) y las formas verbales (-ed, -ing). ::::*Creo que es más sencillo y, por lo tanto, útil comenzar con un esbozo que desde cero. ::::*En el proyecto tenemos cientos de entradas como [[burocratizar]] o [[catatonizar]], que prácticamente están vacías. Las que yo aporto siempre incluyen al menos una definició. y muchas entradas que tenemos en el proyecto iniciaron como un esbozo, o queremos ya prohibiir los esbozos oficialmente?, y entonces debemos elimianr la plantilla correspondiente? ::::*No he creado un espacio en gitlab pero espero la proxima semana hacerlo y compartir el código correspondiente. ::::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:55 19 jun 2025 (UTC) :::@[[Usuario:Cvmontuy|Cvmontuy]] :::* Como decía, lo de los esbozos que están ahora creados fue por una mala decisión que se tomó en su momento, de las tantas que han perjudicado al proyecto pero creeme que si hubiera estado en su momento no lo habría permitido. Así y todo, no sigamos propagando el mal, no creemos más esbozos innecesariamente. Si la aplicación tiene problemas para parsear las entradas de en.wikt, entonces deberán hacerse las pruebas que sean necesarias hasta que funcione aceptable. :::* No es necesario extraer toda la información, puede que hayan cosas que no aplican para nuestro sitio. Pero las etimologías y las definiciones deberían aparecer. :::* Yo me centraría en agregar formas canónicas; las formas flexivas en todo caso las podríamos crear sino con la información de las entradas que tenemos en nuestro Wikcionario. :::* En lugar de luchar innecesariamente con las expresiones regulares, deberías usar una biblioteca que parsee wikitexto. Yo implementé un algoritmo en Python para parsear las entradas en es.wikt usando la de [https://github.com/5j9/wikitextparser 5j9]. Podríamos crear un repositorio para que te comparta lo que tengo y trabajar en conjunto, pero nunca tuve éxito con Java. [https://www.mediawiki.org/wiki/Alternative_parsers Acá hay una lista con otras implementaciones]. :::[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 05:24 19 jun 2025 (UTC) ::::Hola. Mi bot está escrito en Java y tengo un parser específico para eswiktionary que no funciona mal, está probado desde 2015 ([https://github.com/PeterBowman/wikibot/tree/master/wikibot/src/main/java/com/github/wikibot/parsing/eswikt fuente]; la pega es que el código es un desastre infumable). Con respecto a lo que se menciona de [[burocratizar]] y otras entradas vacías (sin definiciones), mi opinión es que no se deberían haber creado, y estaría a favor de borrarlas. No colocaría {{ep|esbozo}} en aquellas entradas importadas que sean simples formas flexivas; lo único que se puede hacer con esas plantillas es quitarlas directamente (aunque coincido con Tmagc en que preferiría usar la información de eswiktionary en lugar de importar/convertir). Por otro lado, permiten que un usuario humano las revise a posteriori para verificar que el bot haya funcionado bien... Para conjugar ambas opciones, yo propondría usar una plantilla de aviso diferente, específica para páginas importadas por bot que requieran de revisión manual. Algo como {{ep|importado}}, pero puntualizando que se requiere de revisión más que adaptación a nuestro formato. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 08:44 19 jun 2025 (UTC) ::*El programa desarrollado está actualmente diseñado para importar antropónimos y plurales. Toma del en.wiktionary la información de pronunciación y determina si el término es masculino, femenino, ambos, o si se trata de un hipocorístico. En el caso de los plurales, verifica si la palabra corresponde a un sustantivo, una forma verbal, o ambas. Esta información, para este tipo de entradas, no está disponible en el es.wiktionary. ::*Estoy de acuerdo en que sería más útil generar entradas de las formas canónicas o basarse directamente en el es.wiktionary, pero por ahora esas tareas no están dentro del alcance de este programa. Quizá más adelante pueda trabajar en ese sentido. ::*Gracias por compartir las librerías; no sabía que existían. Las revisaré con calma más adelante. Revisé brevemente tu programa, @Peter Bowman, y me pareció bien estructurado y fácil de entender. El mecanismo de parseo que usaste es muy similar al que empleo en el programa que estamos discutiendo ahora. El objetivo de identificar plantillas en en.wiktionary y analizarlas es técnicamente sencillo, pero los contenidos no siempre usan plantillas y hay mucho texto libre. En estos casos, más que un parser, lo que realmente ayudaría sería integrar una IA para la traducción. No lo he hecho aún, y tampoco sé si eso sería legalmente válido. ::Por favor, intentemos concluir: ::*Si en lugar de poner “Nombre de varios lugares”, el programa indica explícitamente textos como “Ciudad de...”, y además agrega la etimología cuando esta se encuentra expresada mediante plantilas en el en.wiktionary, ¿con estos cambios el programa obtiene autorización para seguir operando? ::*En cuanto a sustituir la plantilla <nowiki>{{esbozo}}</nowiki>, existe la plantilla {{ep|creado_por_bot}}. ¿Debo usar esa? ::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:46 19 jun 2025 (UTC) == Noticias técnicas: 2025-26 == <section begin="technews-2025-W26"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/26|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático continuarán con el lanzamiento de [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo al tercer y último grupo de Wikipedias. Este filtro utiliza el modelo de Riesgo de Reversión (Revert Risk), el cual fue creado por el equipo de Investigación, y destaca las ediciones que posiblemente deban ser revertidas para ayudar así a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. La característica será lanzada en las siguientes Wikipedias: {{int:project-localized-name-azwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-lawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mlwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mrwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-nnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-pawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-swwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tlwiki/es}}. El lanzamiento continuará durante las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] '''Actualizaciones para editores''' * La semana pasada, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] se implementaron en las Wikipedias en checo, coreano y turco. Esta semana y la próxima, los lanzamientos se realizarán en Wikipedias más grandes. [[mw:Talk:Trust and Safety Product/Temporary Accounts|Comparte tus ideas]] sobre el proyecto. [https://phabricator.wikimedia.org/T340001] * Durante esta semana, el equipo de Edición lanzará [[mw:Special:MyLanguage/Help:Edit check#Multi check|Multi Check]] en todas las Wikipedias (excepto la Wikipedia en inglés). Esta característica muestra múltiples [[mw:Special:MyLanguage/Help:Edit check#Reference check|verificaciones de referencias]] junto a la experiencia de edición. Esto anima a los usuarios a añadir citas cuando agregan varios párrafos a un artículo de Wikipedia. Esta característica estuvo disponible como una prueba A/B. [https://analytics.wikimedia.org/published/reports/editing/multi_check_ab_test_report_final.html#summary-of-results Las pruebas mostraron] que los usuarios a quienes se les mostraban las múltiples verificaciones eran 1.3 veces más propensos a añadir una referencia a su edición, y su edición era 34.7% menos propensa a ser revertida. [https://phabricator.wikimedia.org/T395519] * Unas pocas páginas deben ser renombradas debido a actualizaciones de software y para ajustarse a estándares Unicode más recientes. Todos estos cambios están relacionados con las mayúsculas en los títulos. Aproximadamente 71 páginas y 3 archivos serán renombrados en 15 wikis; la lista completa se encuentra en [[phab:T396903|esta tarea]]. Los desarrolladores renombrarán estas páginas la próxima semana y solucionarán las redirecciones y los enlaces de archivos incrustados unos minutos después mediante una actualización de la configuración del sistema. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:24}} {{PLURAL:24|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se arregló un error que había hecho que las páginas se desplazaran hacia arriba cuando se selecciona texto cerca de la parte superior. [https://phabricator.wikimedia.org/T364023] '''Actualizaciones para los colaboradores técnicos''' * Ahora, los editores pueden usar los módulos de Lua para filtrar y transformar datos tabulares y utilizarlos con [[mw:Special:MyLanguage/Extension:Chart|Extension:Chart]]. Esto puede ser empleado para diversos objetivos, como seleccionar un subconjunto de filas o columnas de los datos, convertir entre unidades, realizar procesamiento estadístico y otras transformaciones útiles. [[mw:Special:MyLanguage/Extension:Chart/Transforms|Lee más para obtener información sobre cómo usar las transformaciones]]. [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Chart/Project/Updates] * La variable <code dir=ltr>all_links</code> en el [[Special:AbuseFilter|Filtro Antiabusos]] ahora se llama <code dir=ltr>new_links</code> para ser consistente con las otras variables. Los usos anteriores seguirán funcionando. [https://phabricator.wikimedia.org/T391811] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.7|MediaWiki]] '''A fondo''' * El último [[mw:Special:MyLanguage/Growth/Newsletters/34|Boletín de Growth]] está disponible. Incluye: las actualizaciones recientes de la tarea "Agregar un enlace", dos nuevas características de participación para los recién llegados y actualizaciones de la configuración comunitaria. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W26"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:21 23 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Noticias técnicas: 2025-27 == <section begin="technews-2025-W27"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/27|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|extensión CampaignEvents]] ya está habilitada en todas las Wikipedias. Esta extensión facilita la organización y participación en actividades colaborativas, como editatones y Wikiproyectos, en las wikis. La extensión incluye tres características: [[m:Special:MyLanguage/Event Center/Registration|Registro al evento]], [[m:Special:MyLanguage/CampaignEvents/Collaboration list|Lista de colaboración]] y [[m:Campaigns/Foundation Product Team/Invitation list|Lista de invitaciones]]. Para solicitar la extensión para tu wiki, visita la [[m:Special:MyLanguage/CampaignEvents/Deployment status#How to Request the CampaignEvents Extension for your wiki|página de información de Despliegues]]. '''Actualizaciones para editores''' * Los mantenedores del Filtro Antiabusos ahora pueden [[mw:Special:MyLanguage/Extension:IPReputation/AbuseFilter variables|evaluar la reputación de la IP]] en los [[mw:Special:MyLanguage/Extension:AbuseFilter|Filtros]]. Los datos de la reputación de la IP son información sobre los proxies y VPN asociados a la dirección IP del usuario. Esta información no se muestra públicamente y no se genera para acciones realizadas por cuentas registradas. [https://phabricator.wikimedia.org/T354599] * El contenido oculto que se encuentra en [[mw:Special:MyLanguage/Manual:Collapsible elements|partes colapsables de las wikipáginas]] ahora se mostrará cuando alguien busque en la página usando la función "Buscar en la página" del navegador (Ctrl+F o ⌘F) en los navegadores compatibles. [https://phabricator.wikimedia.org/T327893][https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/hidden#browser_compatibility] * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] Una nueva función, llamada [[mw:Special:MyLanguage/Help:TemplateData/Template discovery|Plantillas Favoritas]], se lanzará a finales de esta semana en todos los proyectos (excepto en la Wikipedia en inglés, que la recibirá la próxima semana), tras una fase piloto en las Wikipedias en polaco y árabe, y los Wikisources en italiano e inglés. Esta característica ofrecerá una mejor manera de descubrir y utilizar plantillas mediante el cuadro de diálogo de plantillas, permitiendo a los usuarios añadirlas a una "lista especial de favoritos". La función es compatible tanto con el Editor Visual como con el editor de Wikitexto. Esta funcionalidad es un [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|deseo de la comunidad]]. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:31}} {{PLURAL:31|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se solucionó un error que causaba que algunas Notificaciones se enviaran varias veces. [https://phabricator.wikimedia.org/T397103] '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.8|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W27"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:40 30 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28917415 --> == Modificaciones propuestas para pron-graf == Hola, dos modificaciones que estoy considerando: * Estaba pensando en que el sistema de doble índice puede llevar a confusiones ya que contrasta con el resto de las plantillas en donde el índice está al final pero en esta queda al principio. Quiero decir, si no necesito agregar ninguna subvariante y tengo 3 pronunciaciones lo que debería hacer (sin módulo obviamente) sería <nowiki>|1fone</nowiki>, <nowiki>|2fone</nowiki>, <nowiki>|3fone</nowiki>. Sin embargo, por lo menos a mí me ha pasado que escribí sin querer <nowiki>|fone1</nowiki>, <nowiki>|fone2</nowiki>, <nowiki>|fone3</nowiki>. A diferencia del resto de plantillas en donde se avanza naturalmente con el índice pospuesto, en esta hay que avanzar con el índice antepuesto. La documentación sobre este detalle me parece que sería inevitablemente engorrosa. Lo que propongo es simplificar a un único índice pospuesto en lugar de antepuesto para variantes principales, y las subvariantes separarlas con punto y coma. Tomando como ejemplo [[withstand]], pasaríamos de esto: <code><nowiki>{{pron-graf|leng=en |pron=Conservative Received Pronunciation|1fono1=wɪðˈstænd|1fono2=wɪθˈstænd |2pron=General American, Standard Canadian|2fono=wɪðˈstænd|2fone2=wɪðˈstɛənd|2fnota2=/æ/ raising|2audio2=en-us-withstand.ogg|2aunota2=California|2audio3=LL-Q1860 (eng)-Wodencafe-withstand.wav|2aunota3=Texas|2fone4=wɪðˈstɛːnd|2fnota4=/æ/ raising|2audio5=LL-Q1860 (eng)-Grendelkhan-withstand.wav|2aunota5=Connecticut|2fono6=wɪθˈstænd|2fone7=wɪθˈstɛənd|2fnota7=/æ/ raising|2audio7=LL-Q1860 (eng)-Semperosculto-withstand.wav|2aunota7=EE. UU.|2fone8=wɪθˈstɛːnd|2fnota8=/æ/ raising|2audio8=LL-Q1860 (eng)-Assorted-Interests-withstand.wav|2aunota8=Ciudad de Nueva York |3pron=Australia|3fono1=wɪðˈstænd|3fone2=wɪðˈsteːnd|3fnota2=/æ/ raising|3fono3=wɪθˈstænd|3fone4=wɪθˈsteːnd|3fnota4=/æ/ raising |ls=2 }}</nowiki></code> A esto: <code><nowiki>{{pron-graf|leng=en |pron1=Conservative Received Pronunciation|fono1=wɪðˈstænd;wɪθˈstænd |pron2=General American, Standard Canadian|fono2=wɪðˈstænd;;;;;wɪθˈstænd|fone2=;wɪðˈstɛənd;;wɪðˈstɛːnd;;;wɪθˈstɛənd;wɪθˈstɛːnd|fnota2=;/æ/ raising;;/æ/ raising;;;/æ/ raising;/æ/ raising|audio2=;en-us-withstand.ogg;LL-Q1860 (eng)-Wodencafe-withstand.wav;;LL-Q1860 (eng)-Grendelkhan-withstand.wav;;LL-Q1860 (eng)-Semperosculto-withstand.wav;LL-Q1860 (eng)-Assorted-Interests-withstand.wav|aunota2=;California;Texas;;Connecticut;;EE. UU.;Ciudad de Nueva York |pron3=Australia|fono3=wɪðˈstænd;;wɪθˈstænd|fone3=;wɪðˈsteːnd;;wɪθˈsteːnd|fnota3=;/æ/ raising;;/æ/ raising |ls=2 }}</nowiki></code> Lo bueno es que simplificaría la documentación y la consistencia entre sistemas usados en las distintas plantillas. Lo malo es que no se podrían añadir pronunciaciones o archivos con punto y coma, algo que de todas formas no lo he visto en el sitio hasta la fecha. El resto seguiría igual, es decir, esos parámetros (<nowiki>|fone</nowiki>, <nowiki>|fono</nowiki>, <nowiki>|fgraf</nowiki>, <nowiki>|fnota</nowiki>, <nowiki>|audio</nowiki>, <nowiki>|aunota</nowiki>) seguirían funcionando como un arreglo doble. Las páginas afectadas son aproximadamente 5000, casi todas del inglés (otros idiomas son prácitamente irrelevantes ya que en su mayoría se pueden automatizar). La migración la podría hacer en unos pocos días. * Después, añadir un nuevo parámetro que se trate de homófonos pero a nivel de pronunciación, es decir, sería un arreglo doble a completar con los homófonos que lo son solo respecto de una pronunciación específica, por ejemplo, si es solo homófono en la pronunciación seseante, se agregaría al lado de la transcripción que la palabra en cuestión es homófona en lugar de aparecer al final como homófono a nivel global. En principio convivirían ambos parámetros, al menos por un tiempo ya que la migración completa de uno al otro sería mucho más lenta y difícil que lo anterior. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 22:37 2 jul 2025 (UTC) qr70abtzez5zrw1ajmgyrefdu54zmdu 5823354 5823353 2025-07-02T22:38:02Z Tmagc 158167 /* Modificaciones propuestas para pron-graf */ 5823354 wikitext text/x-wiki <!-- Inicio Encabezado del café, aviso, información histórica y información de archivado --> <div style="text-align: center;"> {{/Aviso}} {{/Histórico}} </div> {{atajo|WN:C}} [[Categoría:Wikcionario:Café]] <!-- Fin del Encabezado del café --> <!-- Inicio configuración robot archivado; no tocar si no se sabe lo que se hace --> {{Usuario:MABot/config |archive = Wikcionario:Café/%(year)d %(month)02d |algo = old(30d) |counter = 1 |archiveheader = {{Archivo}} }} <h1>{{MONTHNAME|{{PREVIOUSMONTH}}}} de {{PREVIOUSMONTH.YEAR}}</h1> <div class="mw-archivedtalk"> {{/{{PREVIOUSMONTH.YEAR}} {{PREVIOUSMONTH}}}} </div> <h1>Actual</h1> == Cómo agregar nuevas pronunciaciones == Hola! quisiera preguntar cómo agregar una nueva pronunciación en la plantilla '''Plantilla:pron-graf,''' ¿puedo agregarlo de forma manual o se necesita tener una página de Referencia de pronunciación,como por ejemplo Wikcionario:Referencia/ES/Pronunciación. En mi caso quiero agregar pronunciaciones desde la lengua Kunza (KUZ), la que no tiene página de referencia de pronunciación. ¿Necesitaría crear la página Wikcionario:Referencia/KUZ/Pronunciación para que me resulte? gracias de antemano [[Usuario:Pcartes|Pcartes]] ([[Usuario discusión:Pcartes|discusión]]) 15:21 21 may 2025 (UTC) :@[[Usuario:Pcartes|Pcartes]] Deberías crear [[Módulo:generar-pron/kuz]], tomando como referencia lo que se hizo con otros idiomas afines, por ejemplo [[Módulo:generar-pron/arn]], [[Módulo:generar-pron/yua]] o [[Módulo:generar-pron/gn]] por tirar ejemplos. Sabés programar en Lua? Tenés ya algún algoritmo hecho? Si no puedo ayudarte con gusto, pero necesito que me expliques cómo debe ser. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:45 21 may 2025 (UTC) ::gracias por la respuesta y disposición para ayudar, la verdad es que no sé programar con Lua pero me interesa aprender. Actualmente estoy trabajando con lingüistas que me podrán ayudar a completar la parte técnica, pero igual agradecería tu ayuda. ¿Hay alguna forma de comunicarnos directamente por correo o solo por aquí? ::Cualquier cosa quedo atento [[Usuario:Pcartes|Pcartes]] ([[Usuario discusión:Pcartes|discusión]]) 16:57 21 may 2025 (UTC) :::@[[Usuario:Pcartes|Pcartes]] Prefiero que nos escribamos en este sitio así queda evidencia de todo lo discutido en caso de que futuros usuarios se vean en la necesidad de revisar el módulo por el motivo que fuere. Para no inundar el Café con una discusión irrelevante e innecesaria para el resto, ahora te escribo en tu página de discusión y seguimos por allí. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:22 21 may 2025 (UTC) ::::Un detalle importantes es que no se sabe cómo sonaba el kunza. En particular, se discute mucho qué quiso decir Vaïsse con su descripción de la consonante ck, muy común en el idioma, como en su propio nombre [[ckunsa]] ("nuestro"). ¿Era /q/, /χ/ o algo diferente? No se sabe. Por eso, antes de crear el módulo habria que revisar las reconstrucciones que se puedan haber publicado. Saludos. [[Usuario:Lin linao|Lin linao]] [[Usuario Discusión:Lin linao|¿dime?]] 21:44 2 jun 2025 (UTC) == Etimología de siglas == Hola, copié el módulo etimología a etimología_test para adaptarlo al manejo de siglas, se agrega el parámetro nosep (no separador). :Con parámetro nosep ::Sigla de [[organización#Español|''organización'']] ''de'' ''las'' [[naciones#Español|''naciones'']] [[unidas#Español|''unidas'']] :Sin parámetro nosep ::Sigla de [[organización#Español|''organización'']], ''de'', ''las'', [[naciones#Español|''naciones'']] y [[unidas#Español|''unidas'']] ¿Están de acuerdo en aprobar este cambio para implementarlo en el módulo original? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>mensajes)</sup>]] 21:19 30 may 2025 (UTC) :Pues, creo que es bastaaante raro que las siglas vengan de términos con comas, el único caso que se me viene a la mente es la UNESCO y es una sola. Siento yo que en esos extraños y pocos casos se podría usar el parámetro nl=s y añadir el enlace manual: :* Si esta en Wikipedia, podría enlazarse directamente: :{{etimología|sigla|[[w:United Nations Educational, Scientific and Cultural Organization|United Nations Educational, Scientific and Cultural Organization]]|nl=s}}. :* Enlace a otros términos del Wikcionario: :{{etimología|sigla|[[building]], [[antenna]]-tower, [[span]], [[earth]]|nl=s}}. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 22:45 30 may 2025 (UTC) :Ídem a Raos, yo tampoco entiendo cuál era el problema original. Podrías mostrar algún ejemplo en donde esa modificación sea relevante? Yo creo que si la sigla es de varias palabras sería más bien un compuesto acronímico (actualmente clasificado como compuesto). [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:34 31 may 2025 (UTC) ::De acuerdo --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:56 31 may 2025 (UTC) :::Entiendo que el "de acuerdo" quiere decir que la propuesta ha sido retirada. Elimino entonces [[Plantilla:etimologíapba]] y [[Módulo:etimología test]] para que no figuren en el espacio principal. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:24 7 jun 2025 (UTC) ::::Si gracias! [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:37 7 jun 2025 (UTC) == Noticias técnicas: 2025-23 == <section begin="technews-2025-W23"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/23|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Extension:Chart|extensión Chart]] ya está disponible en todas las wikis de Wikimedia. Los editores pueden usar esta nueva extensión para crear visualizaciones de datos interactivas como gráficos de barra, línea y torta. La extensión está diseñada para reemplazar muchos de los usos de la [[mw:Special:MyLanguage/Extension:Graph|extensión antigua]]. '''Actualizaciones para editores''' * Ahora es más fácil configurar las citas automáticas para tu wiki con el [[mw:Special:MyLanguage/Citoid/Enabling Citoid on your wiki|generador de citas]] del editor visual. Los administradores pueden establecer una plantilla por defecto usando <code dir=ltr>_default</code> en la página local <bdi lang="en" dir="ltr">[[MediaWiki:Citoid-template-type-map.json]]</bdi> ([[mw:Special:Diff/6969653/7646386|un ejemplo de diff]]). Establecer este valor por defecto también ayudará a preparar tus configuraciones existentes para el futuro cuando se agreguen [[phab:T347823|nuevos tipos de elementos]]. Aún puedes establecer plantillas para tipos individuales, ya que estas tendrán preferencia sobre la plantilla por defecto. [https://phabricator.wikimedia.org/T384709] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:20}} {{PLURAL:20|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * A partir de la semana del 2 de junio, los bots que inicien sesión usando <code dir=ltr>action=login</code> o <code dir=ltr>action=clientlogin</code> fallarán con mayor frecuencia. Esto se debe a la mejora en las protecciones contra ingresos sospechosos. Los bots que usen [[mw:Special:MyLanguage/Manual:Bot passwords|contraseñas de bot]] o un mecanismo de autenticación sin inicio de sesión como [[mw:Special:MyLanguage/OAuth/Owner-only consumers|OAuth]] no se verán afectados. Si tu bot no está usando uno de esos mecanismos, deberías actualizarlo; el uso de <code dir=ltr>action=login</code> sin una contraseña de bot fue marcado como obsoleto [[listarchive:list/wikitech-l@lists.wikimedia.org/message/3EEMN7VQX5G7WMQI5K2GP5JC2336DPTD/|en 2016]]. Para la mayoría de los bots, esto solo requiere cambiar la contraseña que usa el bot. [https://phabricator.wikimedia.org/T395205] * A partir de esta semana, las wikis de Wikimedia permitirán características de ES2017 en código JavaScript para código oficial, dispositivos y scripts de usuario. La característica más visible de ES2017 es la sintaxis de <bdi lang="zxx" dir="ltr"><code>async</code>/<code>await</code></bdi>, que permite un código más fácil de leer. Hasta esta semana, la plataforma solo permitía hasta ES2016, y unos meses antes, hasta ES2015. [https://phabricator.wikimedia.org/T381537] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.4|MediaWiki]] '''Reuniones y eventos''' * Las solicitudes de becas para participar en la [[m:Special:MyLanguage/GLAM Wiki 2025|GLAM Wiki Conference 2025]] ya están abiertas. La conferencia se realizará del 30 de octubre al 1 de noviembre en Lisboa, Portugal. Las personas que contribuyen con GLAM y carecen de los medios para participar pueden [[m:Special:MyLanguage/GLAM Wiki 2025/Scholarships|postular aquí]]. Las solicitudes de becas cierran el 7 de junio. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/23|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W23"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:55 2 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28819186 --> == Noticias técnicas: 2025-24 == <section begin="technews-2025-W24"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/24|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * El [[mw:Special:MyLanguage/Trust and Safety Product|equipo de Confianza y Seguridad de Producto]] está terminando el trabajo necesario para implementar [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] en las Wikipedias más grandes a finales de este mes. El equipo ha trabajado con los stewards y otros usuarios con permisos extendidos para predecir y responder a los diversos casos de uso que podrían aparecer en las wikis más grandes, así los integrantes de las comunidades pueden continuar el patrullaje y la moderación de las cuentas temporales. Esta es la segunda de tres fases de implementación; la última se realizará, al menos, en septiembre. Para más información sobre los desarrollos recientes de este proyecto, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|lee esta actualización]]. Si tienes comentarios o preguntas, escribe un mensaje en [[mw:Talk:Trust and Safety Product/Temporary Accounts|la página de discusión]], y [[m:Event:CEE Catch up Nr. 10 (June 2025)|únete a CEE Catch Up]] este martes. '''Actualizaciones para editores''' * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] La característica de [[mw:Special:MyLanguage/Help:Watchlist expiry|expiración de la lista de seguimiento]] permite a los editores vigilar páginas por un tiempo. Después de este período, la página se elimina automáticamente de la lista de seguimiento. A partir de esta semana, puedes establecer tu preferencia predeterminada para hacer seguimiento de páginas. Las [[Special:Preferences#mw-prefsection-watchlist-pageswatchlist|preferencias]] también te permiten establecer diversos tiempos de seguimiento para las ediciones en páginas existentes, páginas creadas y cuando se revierte la página. [https://phabricator.wikimedia.org/T265716] [[File:Talk pages default look (April 2023).jpg|thumb|alt=Captura de pantalla de las mejoras visuales realizadas en las páginas de discusión|Ejemplo de una página de discusión con el nuevo diseño, en francés.]] * La apariencia de las páginas de discusión cambiará en la mayoría de las Wikipedias. Algunas wikis, como las que se mencionan en [[m:Special:MyLanguage/Tech/News/2024/19|este enlace]], ya han recibido este rediseño, mientras que [[phab:T379264|otras]] lo recibirán más tarde. Puedes leer más sobre estos cambios en [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|''Diff'']]. Es posible desactivar esta función en tus [[Special:Preferences#mw-prefsection-editing-discussion|preferencias de usuario]], en la sección "{{int:discussiontools-preference-visualenhancements}}". [https://phabricator.wikimedia.org/T319146][https://phabricator.wikimedia.org/T392121] * Los usuarios con permisos extendidos específicos (incluyendo administradores, burócratas, comprobadores de usuarios, supresores y ''stewards'') podrán [[phab:T358853|acceder temporalmente a la dirección IP]] de todas las cuentas temporales por un tiempo limitado para combatir vandalismos recurrentes. Esta característica fue solicitada por los ''stewards''. [https://phabricator.wikimedia.org/T386492] * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático seguirán implementando [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo en varias Wikipedias más. Este filtro utiliza el modelo Revert Risk, creado por el equipo de Investigación, para resaltar las ediciones que probablemente serán revertidas y así ayudar a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. Esta característica se desplegará en las siguientes Wikipedias: {{int:project-localized-name-afwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-cywiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-hawwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-iswiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-kkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-simplewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-trwiki/es}}. La implementación continuará en las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:27}} {{PLURAL:27|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * Se les pide a los editores activos del Filtro Anti Abusos en Meta-Wiki y en las Wikipedias grandes que actualicen los filtros para que sean compatibles con las cuentas temporales. Un enlace a las instrucciones y una lista privada de filtros que necesitan verificación están disponibles en Phabricator en [[phab:T369611|este enlace]]. * Los módulos de Lua ahora tienen acceso al nombre de la página que tiene asociada una miniatura de imagen, y en [https://gerrit.wikimedia.org/g/operations/mediawiki-config/+/2e4ab14aa15bb95568f9c07dd777065901eb2126/wmf-config/InitialiseSettings.php#10849 algunas wikis] también a la información de evaluación del Wikiproyecto. Esto es posible usando dos nuevas propiedades en [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#added-by-extensions|mw.title objects]], llamadas <code dir=ltr>pageImage</code> y <code dir=ltr>pageAssessments</code>. [https://phabricator.wikimedia.org/T131911][https://phabricator.wikimedia.org/T380122] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.5|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W24"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:16 10 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28846858 --> == Categoría: Personajes Bíblicos o Antropónimos Bíblicos == ¿Puedo crear esta categoria? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:30 12 jun 2025 (UTC) :Sin una buena justificación, yo estoy en contra por los mismos motivos que en [[Wikcionario:Café/2020 04#Francisco Franco]]. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:17 12 jun 2025 (UTC) ::Por cierto, ya habíamos borrado [[:Categoría:Personajes bíblicos]] previamente, a raíz de aquella discusión. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:21 12 jun 2025 (UTC) :Los nombres propios quedan fuera del alcance en general, salvo nombres o apellidos genéricos que no referencien a ninguna persona en particular, o sinó los nombres de ciudades o topónimos. Fuera de eso, otros nombres particulares conciernen solo a Wikipedia. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:30 12 jun 2025 (UTC) ::Aca estoy hablando de entradas como [[Adán]], [[Eva]], [[Moisés]] y solo agregar una clasificación. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 21:00 12 jun 2025 (UTC) :::¿Qué clasificación? Estás lanzando una propuesta imprecisa y poco estudiada: justo en esas tres entradas que citas ya había acepciones bíblicas y fueron eliminadas. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 22:19 12 jun 2025 (UTC) ::::Agrega la categoría Antropónimos Bíblicos, en los nombres correspondientes. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 04:32 13 jun 2025 (UTC) :::::Otro motivo para no hacerlo es que me opongo a las "categorías silenciosas", fuera de {{ep|csem}} u otra plantilla similar. En tu caso, de acuerdo a mis esquemas una categoría como esa debería ir en {{ep|csem}} para que aparezca el supuesto campo semántico antes de la definición del nombre propio, lo que incluso hace que quede peor. Pero tranquilo que hay proyectos para eso. En Wikipedia [[w:Categoría:Personajes_del_Nuevo_Testamento|ya lo hicieron]]. Aunque todavía les faltan algunos, como [[w:Tomás el Apóstol]], que justo es mi favorito xd. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:47 13 jun 2025 (UTC) ::::::Opino similar, solo estaría de acuerdo sí se agregara la acepción que explica su significado bíblico: ::::::;1 Religión: Primer hombre según la Biblia. ::::::;2: ''Nombre de pila de varón''. ::::::Y que Antropónimos bíblicos sea una etiqueta que se muestre como Religión o Cristrianismo o algo así. ::::::Pero si ya se había acordado que entradas de ese estilo no van aquí, entonces pues no. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 01:07 16 jun 2025 (UTC) == Vote now in the 2025 U4C Election == <div lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{Int:Please-translate}} Eligible voters are asked to participate in the 2025 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2025|2025 Election information page]]. The vote closes on 17 June 2025 at [https://zonestamp.toolforge.org/1750161600 12:00 UTC]. Please vote if your account is eligible. Results will be available by 1 July 2025. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 23:01 13 jun 2025 (UTC) </div> <!-- Mensaje enviado por Usuario:Keegan (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28848819 --> == Noticias técnicas: 2025-25 == <section begin="technews-2025-W25"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/25|Traducciones en varios idiomas]] están disponibles. '''Actualizaciones para editores''' * Puedes [https://wikimediafoundation.limesurvey.net/359761?lang=en nominar tus herramientas favoritas] para la sexta edición del [[m:Special:MyLanguage/Coolest Tool Award|Coolest Tool Award]]. Las nominaciones son anónimas y estarán abiertas hasta el 25 de junio. Puedes reutilizar el formulario para enviar múltiples nominaciones. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:33}} {{PLURAL:33|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.6|MediaWiki]] '''A fondo''' * El personal de la Fundación y los voluntarios técnicos utilizan las API de Wikimedia para construir herramientas, aplicaciones, características e integraciones que mejoran las experiencias de los usuarios. Durante los próximos años, el equipo de Interfaces de MediaWiki invertirá en API web de Wikimedia (HTTP) para satisfacer mejor las necesidades técnicas de los voluntarios y proteger la infraestructura de Wikimedia de posibles abusos. Puedes [https://techblog.wikimedia.org/2025/06/12/apis-as-a-product-investing-in-the-current-and-next-generation-of-technical-contributors/ leer más sobre sus planes para evolucionar las API en esta publicación de Techblog]. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W25"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:38 16 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Convocatoria a Candidaturas para la Junta Directiva de la Fundación Wikimedia, 2025 == <section begin="announcement-content" /> :''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Announcement/Call for candidates|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2025/Announcement/Call for candidates}}&language=&action=page&filter= {{int:please-translate}}]</div> Saludos, La [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|convocatoria a candidaturas para la selección 2025 de Miembros de la Junta Directiva de la Fundación Wikimedia se encuentra abierta]] desde el 17 de junio de 2025 hasta el 2 de julio de 2025 a horas 11:59 UTC [1]. La Junta Directiva supervisa el trabajo de la Fundación Wikimedia, y cada Miembro cumple un periodo de funciones de tres años [2]. El cargo es voluntario. Este año, la comunidad Wikimedia votará desde fines de agosto hasta el mes de septiembre de 2025 para ocupar dos (2) puestos en la Directiva de la Fundación. ¿Podría usted, o alguien a quien usted conozca, tener lo que se requiere para unirse a la Junta Directiva de la Fundación Wikimedia? [3] Puede aprender más acerca de los requisitos para postularse a estos puestos de liderazgo, además del modo de presentar una candidatura en [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidate application|esta página de Meta-wiki]], para sí o para alguien que usted considere que podría presentarse a la elección de este año. Atentamente, Abhishek Suryawanshi<br /> Director del Comité Electoral A nombre del Comité Electoral y del Comité de Gobernanza [1] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Call_for_candidates [2] https://foundation.wikimedia.org/wiki/Legal:Bylaws#(B)_Term. [3] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Resources_for_candidates<section end="announcement-content" /> [[Usuario:MediaWiki message delivery|MediaWiki message delivery]] ([[Usuario discusión:MediaWiki message delivery|discusión]]) 17:44 17 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:RamzyM (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28866958 --> == Importación de contenido desde en.wikitioanry == Estimados, Tengo una aplicación desarrollada en Java que utiliza la cuenta RoboJ2. En los últimos días, la he empleado para importar contenidos desde en.wiktionary siguiendo este proceso: Entrada de datos: El programa recibe como parámetro un archivo de texto que elaboro manualmente, donde se listan las entradas a procesar. Verificación: El sistema revisa si cada entrada existe en en.wiktionary y no está presente en es.wiktionary. Transformación: El programa analiza el wikitexto de la entrada y lo adapta al formato utilizado en es.wiktionary. Las entradas que he selecionado ahora han sido antróponimos y plurales de palabras que encontre aquí: [https://es.wiktionary.org/wiki/Ap%C3%A9ndice:Palabras_m%C3%A1s_frecuentes_del_ingl%C3%A9s Palabras frecuentes] Entradas generadas hasta ahora: [https://es.wiktionary.org/wiki/Especial:Contribuciones/RoboJ2 Entradas generadas]. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 22:06 18 jun 2025 (UTC) :@[[Usuario:Cvmontuy|Cvmontuy]] No tengo motivos para oponerme PERO: :* Desearía que se respete completamente el formato nuevo de la guía de estilo. O sea, las formas flexivas van con el título de nivel 3 "Forma flexiva" y luego en el nivel 4 va el título de Forma sustantiva, adjetiva, etc. Lo de poner directamente el título de nivel 4 en el nivel 3 es una costumbre antigua que la seguimos tolerando solo porque no hice una migración masiva de todas las páginas con formas flexivas y como no es prioridad hacerlo ahora mismo no es un error grave pero las páginas nuevas no deberían ser creadas con ese formato. :* Las palabras se agregan completamente o no se agregan, pero no crees más esbozos con tu bot, me refiero a lo que aparece en [[sends]] o en [[reflections]]. :* Podrías compartir el repositorio de la app? Podríamos extenderlo a más idiomas en un futuro. ::@[[Usuario:Tmagc|Tmagc]],@[[Usuario:Peter Bowman|Peter Bownman]], aqui les dejo el repositorio [https://github.com/cvmontuy1/WikiBotJ316 WikiBotJ316], no es un trabajo profesional pero desde mi punto de vista funciona, saludos --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:50 24 jun 2025 (UTC) :[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:00 19 jun 2025 (UTC) ::@[[Usuario:Tmagc|Tmagc]] ::::*Si revisas las entradas creadas, verás que están tal como mencionas: en el nivel 3 aparece “Forma flexiva” y en el nivel 4, “Forma sustantiva/verbal”. ::::*Se ha utilizado la plantilla <nowiki>{{esbozo}}</nowiki> porque la fuente de información no es perfecta ni completa, y el programa tampoco lo es. Reconoce ciertas expresiones regulares para extraer los datos, pero no es tan avanzado como para analizar el contenido de forma más profunda. ::::*Todas las entradas creadas siguen la guía de estilo y todas incluyen al menos una definición y su categoría gramatical y la prounciación si esta publicad en el en.wiktionary. Las entradas creadas son antropónimos y plurales, por lo que en la mayoria no hay mucho más que añadir en ellas. ¿O qué criterio de aceptación considerarías necesario? Más adelante, Si no lo prohiben, tal vez integre entradas con terminaciones adverbiales (-ly) y las formas verbales (-ed, -ing). ::::*Creo que es más sencillo y, por lo tanto, útil comenzar con un esbozo que desde cero. ::::*En el proyecto tenemos cientos de entradas como [[burocratizar]] o [[catatonizar]], que prácticamente están vacías. Las que yo aporto siempre incluyen al menos una definició. y muchas entradas que tenemos en el proyecto iniciaron como un esbozo, o queremos ya prohibiir los esbozos oficialmente?, y entonces debemos elimianr la plantilla correspondiente? ::::*No he creado un espacio en gitlab pero espero la proxima semana hacerlo y compartir el código correspondiente. ::::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:55 19 jun 2025 (UTC) :::@[[Usuario:Cvmontuy|Cvmontuy]] :::* Como decía, lo de los esbozos que están ahora creados fue por una mala decisión que se tomó en su momento, de las tantas que han perjudicado al proyecto pero creeme que si hubiera estado en su momento no lo habría permitido. Así y todo, no sigamos propagando el mal, no creemos más esbozos innecesariamente. Si la aplicación tiene problemas para parsear las entradas de en.wikt, entonces deberán hacerse las pruebas que sean necesarias hasta que funcione aceptable. :::* No es necesario extraer toda la información, puede que hayan cosas que no aplican para nuestro sitio. Pero las etimologías y las definiciones deberían aparecer. :::* Yo me centraría en agregar formas canónicas; las formas flexivas en todo caso las podríamos crear sino con la información de las entradas que tenemos en nuestro Wikcionario. :::* En lugar de luchar innecesariamente con las expresiones regulares, deberías usar una biblioteca que parsee wikitexto. Yo implementé un algoritmo en Python para parsear las entradas en es.wikt usando la de [https://github.com/5j9/wikitextparser 5j9]. Podríamos crear un repositorio para que te comparta lo que tengo y trabajar en conjunto, pero nunca tuve éxito con Java. [https://www.mediawiki.org/wiki/Alternative_parsers Acá hay una lista con otras implementaciones]. :::[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 05:24 19 jun 2025 (UTC) ::::Hola. Mi bot está escrito en Java y tengo un parser específico para eswiktionary que no funciona mal, está probado desde 2015 ([https://github.com/PeterBowman/wikibot/tree/master/wikibot/src/main/java/com/github/wikibot/parsing/eswikt fuente]; la pega es que el código es un desastre infumable). Con respecto a lo que se menciona de [[burocratizar]] y otras entradas vacías (sin definiciones), mi opinión es que no se deberían haber creado, y estaría a favor de borrarlas. No colocaría {{ep|esbozo}} en aquellas entradas importadas que sean simples formas flexivas; lo único que se puede hacer con esas plantillas es quitarlas directamente (aunque coincido con Tmagc en que preferiría usar la información de eswiktionary en lugar de importar/convertir). Por otro lado, permiten que un usuario humano las revise a posteriori para verificar que el bot haya funcionado bien... Para conjugar ambas opciones, yo propondría usar una plantilla de aviso diferente, específica para páginas importadas por bot que requieran de revisión manual. Algo como {{ep|importado}}, pero puntualizando que se requiere de revisión más que adaptación a nuestro formato. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 08:44 19 jun 2025 (UTC) ::*El programa desarrollado está actualmente diseñado para importar antropónimos y plurales. Toma del en.wiktionary la información de pronunciación y determina si el término es masculino, femenino, ambos, o si se trata de un hipocorístico. En el caso de los plurales, verifica si la palabra corresponde a un sustantivo, una forma verbal, o ambas. Esta información, para este tipo de entradas, no está disponible en el es.wiktionary. ::*Estoy de acuerdo en que sería más útil generar entradas de las formas canónicas o basarse directamente en el es.wiktionary, pero por ahora esas tareas no están dentro del alcance de este programa. Quizá más adelante pueda trabajar en ese sentido. ::*Gracias por compartir las librerías; no sabía que existían. Las revisaré con calma más adelante. Revisé brevemente tu programa, @Peter Bowman, y me pareció bien estructurado y fácil de entender. El mecanismo de parseo que usaste es muy similar al que empleo en el programa que estamos discutiendo ahora. El objetivo de identificar plantillas en en.wiktionary y analizarlas es técnicamente sencillo, pero los contenidos no siempre usan plantillas y hay mucho texto libre. En estos casos, más que un parser, lo que realmente ayudaría sería integrar una IA para la traducción. No lo he hecho aún, y tampoco sé si eso sería legalmente válido. ::Por favor, intentemos concluir: ::*Si en lugar de poner “Nombre de varios lugares”, el programa indica explícitamente textos como “Ciudad de...”, y además agrega la etimología cuando esta se encuentra expresada mediante plantilas en el en.wiktionary, ¿con estos cambios el programa obtiene autorización para seguir operando? ::*En cuanto a sustituir la plantilla <nowiki>{{esbozo}}</nowiki>, existe la plantilla {{ep|creado_por_bot}}. ¿Debo usar esa? ::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:46 19 jun 2025 (UTC) == Noticias técnicas: 2025-26 == <section begin="technews-2025-W26"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/26|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático continuarán con el lanzamiento de [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo al tercer y último grupo de Wikipedias. Este filtro utiliza el modelo de Riesgo de Reversión (Revert Risk), el cual fue creado por el equipo de Investigación, y destaca las ediciones que posiblemente deban ser revertidas para ayudar así a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. La característica será lanzada en las siguientes Wikipedias: {{int:project-localized-name-azwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-lawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mlwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mrwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-nnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-pawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-swwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tlwiki/es}}. El lanzamiento continuará durante las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] '''Actualizaciones para editores''' * La semana pasada, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] se implementaron en las Wikipedias en checo, coreano y turco. Esta semana y la próxima, los lanzamientos se realizarán en Wikipedias más grandes. [[mw:Talk:Trust and Safety Product/Temporary Accounts|Comparte tus ideas]] sobre el proyecto. [https://phabricator.wikimedia.org/T340001] * Durante esta semana, el equipo de Edición lanzará [[mw:Special:MyLanguage/Help:Edit check#Multi check|Multi Check]] en todas las Wikipedias (excepto la Wikipedia en inglés). Esta característica muestra múltiples [[mw:Special:MyLanguage/Help:Edit check#Reference check|verificaciones de referencias]] junto a la experiencia de edición. Esto anima a los usuarios a añadir citas cuando agregan varios párrafos a un artículo de Wikipedia. Esta característica estuvo disponible como una prueba A/B. [https://analytics.wikimedia.org/published/reports/editing/multi_check_ab_test_report_final.html#summary-of-results Las pruebas mostraron] que los usuarios a quienes se les mostraban las múltiples verificaciones eran 1.3 veces más propensos a añadir una referencia a su edición, y su edición era 34.7% menos propensa a ser revertida. [https://phabricator.wikimedia.org/T395519] * Unas pocas páginas deben ser renombradas debido a actualizaciones de software y para ajustarse a estándares Unicode más recientes. Todos estos cambios están relacionados con las mayúsculas en los títulos. Aproximadamente 71 páginas y 3 archivos serán renombrados en 15 wikis; la lista completa se encuentra en [[phab:T396903|esta tarea]]. Los desarrolladores renombrarán estas páginas la próxima semana y solucionarán las redirecciones y los enlaces de archivos incrustados unos minutos después mediante una actualización de la configuración del sistema. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:24}} {{PLURAL:24|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se arregló un error que había hecho que las páginas se desplazaran hacia arriba cuando se selecciona texto cerca de la parte superior. [https://phabricator.wikimedia.org/T364023] '''Actualizaciones para los colaboradores técnicos''' * Ahora, los editores pueden usar los módulos de Lua para filtrar y transformar datos tabulares y utilizarlos con [[mw:Special:MyLanguage/Extension:Chart|Extension:Chart]]. Esto puede ser empleado para diversos objetivos, como seleccionar un subconjunto de filas o columnas de los datos, convertir entre unidades, realizar procesamiento estadístico y otras transformaciones útiles. [[mw:Special:MyLanguage/Extension:Chart/Transforms|Lee más para obtener información sobre cómo usar las transformaciones]]. [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Chart/Project/Updates] * La variable <code dir=ltr>all_links</code> en el [[Special:AbuseFilter|Filtro Antiabusos]] ahora se llama <code dir=ltr>new_links</code> para ser consistente con las otras variables. Los usos anteriores seguirán funcionando. [https://phabricator.wikimedia.org/T391811] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.7|MediaWiki]] '''A fondo''' * El último [[mw:Special:MyLanguage/Growth/Newsletters/34|Boletín de Growth]] está disponible. Incluye: las actualizaciones recientes de la tarea "Agregar un enlace", dos nuevas características de participación para los recién llegados y actualizaciones de la configuración comunitaria. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W26"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:21 23 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Noticias técnicas: 2025-27 == <section begin="technews-2025-W27"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/27|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|extensión CampaignEvents]] ya está habilitada en todas las Wikipedias. Esta extensión facilita la organización y participación en actividades colaborativas, como editatones y Wikiproyectos, en las wikis. La extensión incluye tres características: [[m:Special:MyLanguage/Event Center/Registration|Registro al evento]], [[m:Special:MyLanguage/CampaignEvents/Collaboration list|Lista de colaboración]] y [[m:Campaigns/Foundation Product Team/Invitation list|Lista de invitaciones]]. Para solicitar la extensión para tu wiki, visita la [[m:Special:MyLanguage/CampaignEvents/Deployment status#How to Request the CampaignEvents Extension for your wiki|página de información de Despliegues]]. '''Actualizaciones para editores''' * Los mantenedores del Filtro Antiabusos ahora pueden [[mw:Special:MyLanguage/Extension:IPReputation/AbuseFilter variables|evaluar la reputación de la IP]] en los [[mw:Special:MyLanguage/Extension:AbuseFilter|Filtros]]. Los datos de la reputación de la IP son información sobre los proxies y VPN asociados a la dirección IP del usuario. Esta información no se muestra públicamente y no se genera para acciones realizadas por cuentas registradas. [https://phabricator.wikimedia.org/T354599] * El contenido oculto que se encuentra en [[mw:Special:MyLanguage/Manual:Collapsible elements|partes colapsables de las wikipáginas]] ahora se mostrará cuando alguien busque en la página usando la función "Buscar en la página" del navegador (Ctrl+F o ⌘F) en los navegadores compatibles. [https://phabricator.wikimedia.org/T327893][https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/hidden#browser_compatibility] * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] Una nueva función, llamada [[mw:Special:MyLanguage/Help:TemplateData/Template discovery|Plantillas Favoritas]], se lanzará a finales de esta semana en todos los proyectos (excepto en la Wikipedia en inglés, que la recibirá la próxima semana), tras una fase piloto en las Wikipedias en polaco y árabe, y los Wikisources en italiano e inglés. Esta característica ofrecerá una mejor manera de descubrir y utilizar plantillas mediante el cuadro de diálogo de plantillas, permitiendo a los usuarios añadirlas a una "lista especial de favoritos". La función es compatible tanto con el Editor Visual como con el editor de Wikitexto. Esta funcionalidad es un [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|deseo de la comunidad]]. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:31}} {{PLURAL:31|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se solucionó un error que causaba que algunas Notificaciones se enviaran varias veces. [https://phabricator.wikimedia.org/T397103] '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.8|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W27"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:40 30 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28917415 --> == Modificaciones propuestas para pron-graf == Hola, dos modificaciones que estoy considerando: * Estaba pensando en que el sistema de doble índice puede llevar a confusiones ya que contrasta con el resto de las plantillas en donde el índice está al final pero en esta queda al principio. Quiero decir, si no necesito agregar ninguna subvariante y tengo 3 pronunciaciones lo que debería hacer (sin módulo obviamente) sería <nowiki>|1fone</nowiki>, <nowiki>|2fone</nowiki>, <nowiki>|3fone</nowiki>. Sin embargo, por lo menos a mí me ha pasado que escribí sin querer <nowiki>|fone1</nowiki>, <nowiki>|fone2</nowiki>, <nowiki>|fone3</nowiki>. A diferencia del resto de plantillas en donde se avanza naturalmente con el índice pospuesto, en esta hay que avanzar con el índice antepuesto. La documentación sobre este detalle me parece que sería inevitablemente engorrosa. Lo que propongo es simplificar a un único índice pospuesto en lugar de antepuesto para variantes principales, y las subvariantes separarlas con punto y coma. :Tomando como ejemplo [[withstand]], pasaríamos de esto: :<code><nowiki>{{pron-graf|leng=en |pron=Conservative Received Pronunciation|1fono1=wɪðˈstænd|1fono2=wɪθˈstænd |2pron=General American, Standard Canadian|2fono=wɪðˈstænd|2fone2=wɪðˈstɛənd|2fnota2=/æ/ raising|2audio2=en-us-withstand.ogg|2aunota2=California|2audio3=LL-Q1860 (eng)-Wodencafe-withstand.wav|2aunota3=Texas|2fone4=wɪðˈstɛːnd|2fnota4=/æ/ raising|2audio5=LL-Q1860 (eng)-Grendelkhan-withstand.wav|2aunota5=Connecticut|2fono6=wɪθˈstænd|2fone7=wɪθˈstɛənd|2fnota7=/æ/ raising|2audio7=LL-Q1860 (eng)-Semperosculto-withstand.wav|2aunota7=EE. UU.|2fone8=wɪθˈstɛːnd|2fnota8=/æ/ raising|2audio8=LL-Q1860 (eng)-Assorted-Interests-withstand.wav|2aunota8=Ciudad de Nueva York |3pron=Australia|3fono1=wɪðˈstænd|3fone2=wɪðˈsteːnd|3fnota2=/æ/ raising|3fono3=wɪθˈstænd|3fone4=wɪθˈsteːnd|3fnota4=/æ/ raising |ls=2 }}</nowiki></code> :A esto: :<code><nowiki>{{pron-graf|leng=en |pron1=Conservative Received Pronunciation|fono1=wɪðˈstænd;wɪθˈstænd |pron2=General American, Standard Canadian|fono2=wɪðˈstænd;;;;;wɪθˈstænd|fone2=;wɪðˈstɛənd;;wɪðˈstɛːnd;;;wɪθˈstɛənd;wɪθˈstɛːnd|fnota2=;/æ/ raising;;/æ/ raising;;;/æ/ raising;/æ/ raising|audio2=;en-us-withstand.ogg;LL-Q1860 (eng)-Wodencafe-withstand.wav;;LL-Q1860 (eng)-Grendelkhan-withstand.wav;;LL-Q1860 (eng)-Semperosculto-withstand.wav;LL-Q1860 (eng)-Assorted-Interests-withstand.wav|aunota2=;California;Texas;;Connecticut;;EE. UU.;Ciudad de Nueva York |pron3=Australia|fono3=wɪðˈstænd;;wɪθˈstænd|fone3=;wɪðˈsteːnd;;wɪθˈsteːnd|fnota3=;/æ/ raising;;/æ/ raising |ls=2 }}</nowiki></code> :Lo bueno es que simplificaría la documentación y la consistencia entre sistemas usados en las distintas plantillas. Lo malo es que no se podrían añadir pronunciaciones o archivos con punto y coma, algo que de todas formas no lo he visto en el sitio hasta la fecha. El resto seguiría igual, es decir, esos parámetros (<nowiki>|fone</nowiki>, <nowiki>|fono</nowiki>, <nowiki>|fgraf</nowiki>, <nowiki>|fnota</nowiki>, <nowiki>|audio</nowiki>, <nowiki>|aunota</nowiki>) seguirían funcionando como un arreglo doble. Las páginas afectadas son aproximadamente 5000, casi todas del inglés (otros idiomas son prácitamente irrelevantes ya que en su mayoría se pueden automatizar). La migración la podría hacer en unos pocos días. * Después, añadir un nuevo parámetro que se trate de homófonos pero a nivel de pronunciación, es decir, sería un arreglo doble a completar con los homófonos que lo son solo respecto de una pronunciación específica, por ejemplo, si es solo homófono en la pronunciación seseante, se agregaría al lado de la transcripción que la palabra en cuestión es homófona en lugar de aparecer al final como homófono a nivel global. En principio convivirían ambos parámetros, al menos por un tiempo ya que la migración completa de uno al otro sería mucho más lenta y difícil que lo anterior. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 22:37 2 jul 2025 (UTC) kxs9mexegs21u5cpc3xh9erkjxu71cr 5823355 5823354 2025-07-02T22:38:31Z Tmagc 158167 /* Modificaciones propuestas para pron-graf */ 5823355 wikitext text/x-wiki <!-- Inicio Encabezado del café, aviso, información histórica y información de archivado --> <div style="text-align: center;"> {{/Aviso}} {{/Histórico}} </div> {{atajo|WN:C}} [[Categoría:Wikcionario:Café]] <!-- Fin del Encabezado del café --> <!-- Inicio configuración robot archivado; no tocar si no se sabe lo que se hace --> {{Usuario:MABot/config |archive = Wikcionario:Café/%(year)d %(month)02d |algo = old(30d) |counter = 1 |archiveheader = {{Archivo}} }} <h1>{{MONTHNAME|{{PREVIOUSMONTH}}}} de {{PREVIOUSMONTH.YEAR}}</h1> <div class="mw-archivedtalk"> {{/{{PREVIOUSMONTH.YEAR}} {{PREVIOUSMONTH}}}} </div> <h1>Actual</h1> == Cómo agregar nuevas pronunciaciones == Hola! quisiera preguntar cómo agregar una nueva pronunciación en la plantilla '''Plantilla:pron-graf,''' ¿puedo agregarlo de forma manual o se necesita tener una página de Referencia de pronunciación,como por ejemplo Wikcionario:Referencia/ES/Pronunciación. En mi caso quiero agregar pronunciaciones desde la lengua Kunza (KUZ), la que no tiene página de referencia de pronunciación. ¿Necesitaría crear la página Wikcionario:Referencia/KUZ/Pronunciación para que me resulte? gracias de antemano [[Usuario:Pcartes|Pcartes]] ([[Usuario discusión:Pcartes|discusión]]) 15:21 21 may 2025 (UTC) :@[[Usuario:Pcartes|Pcartes]] Deberías crear [[Módulo:generar-pron/kuz]], tomando como referencia lo que se hizo con otros idiomas afines, por ejemplo [[Módulo:generar-pron/arn]], [[Módulo:generar-pron/yua]] o [[Módulo:generar-pron/gn]] por tirar ejemplos. Sabés programar en Lua? Tenés ya algún algoritmo hecho? Si no puedo ayudarte con gusto, pero necesito que me expliques cómo debe ser. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:45 21 may 2025 (UTC) ::gracias por la respuesta y disposición para ayudar, la verdad es que no sé programar con Lua pero me interesa aprender. Actualmente estoy trabajando con lingüistas que me podrán ayudar a completar la parte técnica, pero igual agradecería tu ayuda. ¿Hay alguna forma de comunicarnos directamente por correo o solo por aquí? ::Cualquier cosa quedo atento [[Usuario:Pcartes|Pcartes]] ([[Usuario discusión:Pcartes|discusión]]) 16:57 21 may 2025 (UTC) :::@[[Usuario:Pcartes|Pcartes]] Prefiero que nos escribamos en este sitio así queda evidencia de todo lo discutido en caso de que futuros usuarios se vean en la necesidad de revisar el módulo por el motivo que fuere. Para no inundar el Café con una discusión irrelevante e innecesaria para el resto, ahora te escribo en tu página de discusión y seguimos por allí. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:22 21 may 2025 (UTC) ::::Un detalle importantes es que no se sabe cómo sonaba el kunza. En particular, se discute mucho qué quiso decir Vaïsse con su descripción de la consonante ck, muy común en el idioma, como en su propio nombre [[ckunsa]] ("nuestro"). ¿Era /q/, /χ/ o algo diferente? No se sabe. Por eso, antes de crear el módulo habria que revisar las reconstrucciones que se puedan haber publicado. Saludos. [[Usuario:Lin linao|Lin linao]] [[Usuario Discusión:Lin linao|¿dime?]] 21:44 2 jun 2025 (UTC) == Etimología de siglas == Hola, copié el módulo etimología a etimología_test para adaptarlo al manejo de siglas, se agrega el parámetro nosep (no separador). :Con parámetro nosep ::Sigla de [[organización#Español|''organización'']] ''de'' ''las'' [[naciones#Español|''naciones'']] [[unidas#Español|''unidas'']] :Sin parámetro nosep ::Sigla de [[organización#Español|''organización'']], ''de'', ''las'', [[naciones#Español|''naciones'']] y [[unidas#Español|''unidas'']] ¿Están de acuerdo en aprobar este cambio para implementarlo en el módulo original? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>mensajes)</sup>]] 21:19 30 may 2025 (UTC) :Pues, creo que es bastaaante raro que las siglas vengan de términos con comas, el único caso que se me viene a la mente es la UNESCO y es una sola. Siento yo que en esos extraños y pocos casos se podría usar el parámetro nl=s y añadir el enlace manual: :* Si esta en Wikipedia, podría enlazarse directamente: :{{etimología|sigla|[[w:United Nations Educational, Scientific and Cultural Organization|United Nations Educational, Scientific and Cultural Organization]]|nl=s}}. :* Enlace a otros términos del Wikcionario: :{{etimología|sigla|[[building]], [[antenna]]-tower, [[span]], [[earth]]|nl=s}}. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 22:45 30 may 2025 (UTC) :Ídem a Raos, yo tampoco entiendo cuál era el problema original. Podrías mostrar algún ejemplo en donde esa modificación sea relevante? Yo creo que si la sigla es de varias palabras sería más bien un compuesto acronímico (actualmente clasificado como compuesto). [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:34 31 may 2025 (UTC) ::De acuerdo --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:56 31 may 2025 (UTC) :::Entiendo que el "de acuerdo" quiere decir que la propuesta ha sido retirada. Elimino entonces [[Plantilla:etimologíapba]] y [[Módulo:etimología test]] para que no figuren en el espacio principal. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:24 7 jun 2025 (UTC) ::::Si gracias! [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:37 7 jun 2025 (UTC) == Noticias técnicas: 2025-23 == <section begin="technews-2025-W23"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/23|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Extension:Chart|extensión Chart]] ya está disponible en todas las wikis de Wikimedia. Los editores pueden usar esta nueva extensión para crear visualizaciones de datos interactivas como gráficos de barra, línea y torta. La extensión está diseñada para reemplazar muchos de los usos de la [[mw:Special:MyLanguage/Extension:Graph|extensión antigua]]. '''Actualizaciones para editores''' * Ahora es más fácil configurar las citas automáticas para tu wiki con el [[mw:Special:MyLanguage/Citoid/Enabling Citoid on your wiki|generador de citas]] del editor visual. Los administradores pueden establecer una plantilla por defecto usando <code dir=ltr>_default</code> en la página local <bdi lang="en" dir="ltr">[[MediaWiki:Citoid-template-type-map.json]]</bdi> ([[mw:Special:Diff/6969653/7646386|un ejemplo de diff]]). Establecer este valor por defecto también ayudará a preparar tus configuraciones existentes para el futuro cuando se agreguen [[phab:T347823|nuevos tipos de elementos]]. Aún puedes establecer plantillas para tipos individuales, ya que estas tendrán preferencia sobre la plantilla por defecto. [https://phabricator.wikimedia.org/T384709] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:20}} {{PLURAL:20|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * A partir de la semana del 2 de junio, los bots que inicien sesión usando <code dir=ltr>action=login</code> o <code dir=ltr>action=clientlogin</code> fallarán con mayor frecuencia. Esto se debe a la mejora en las protecciones contra ingresos sospechosos. Los bots que usen [[mw:Special:MyLanguage/Manual:Bot passwords|contraseñas de bot]] o un mecanismo de autenticación sin inicio de sesión como [[mw:Special:MyLanguage/OAuth/Owner-only consumers|OAuth]] no se verán afectados. Si tu bot no está usando uno de esos mecanismos, deberías actualizarlo; el uso de <code dir=ltr>action=login</code> sin una contraseña de bot fue marcado como obsoleto [[listarchive:list/wikitech-l@lists.wikimedia.org/message/3EEMN7VQX5G7WMQI5K2GP5JC2336DPTD/|en 2016]]. Para la mayoría de los bots, esto solo requiere cambiar la contraseña que usa el bot. [https://phabricator.wikimedia.org/T395205] * A partir de esta semana, las wikis de Wikimedia permitirán características de ES2017 en código JavaScript para código oficial, dispositivos y scripts de usuario. La característica más visible de ES2017 es la sintaxis de <bdi lang="zxx" dir="ltr"><code>async</code>/<code>await</code></bdi>, que permite un código más fácil de leer. Hasta esta semana, la plataforma solo permitía hasta ES2016, y unos meses antes, hasta ES2015. [https://phabricator.wikimedia.org/T381537] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.4|MediaWiki]] '''Reuniones y eventos''' * Las solicitudes de becas para participar en la [[m:Special:MyLanguage/GLAM Wiki 2025|GLAM Wiki Conference 2025]] ya están abiertas. La conferencia se realizará del 30 de octubre al 1 de noviembre en Lisboa, Portugal. Las personas que contribuyen con GLAM y carecen de los medios para participar pueden [[m:Special:MyLanguage/GLAM Wiki 2025/Scholarships|postular aquí]]. Las solicitudes de becas cierran el 7 de junio. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/23|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W23"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:55 2 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28819186 --> == Noticias técnicas: 2025-24 == <section begin="technews-2025-W24"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/24|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * El [[mw:Special:MyLanguage/Trust and Safety Product|equipo de Confianza y Seguridad de Producto]] está terminando el trabajo necesario para implementar [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] en las Wikipedias más grandes a finales de este mes. El equipo ha trabajado con los stewards y otros usuarios con permisos extendidos para predecir y responder a los diversos casos de uso que podrían aparecer en las wikis más grandes, así los integrantes de las comunidades pueden continuar el patrullaje y la moderación de las cuentas temporales. Esta es la segunda de tres fases de implementación; la última se realizará, al menos, en septiembre. Para más información sobre los desarrollos recientes de este proyecto, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|lee esta actualización]]. Si tienes comentarios o preguntas, escribe un mensaje en [[mw:Talk:Trust and Safety Product/Temporary Accounts|la página de discusión]], y [[m:Event:CEE Catch up Nr. 10 (June 2025)|únete a CEE Catch Up]] este martes. '''Actualizaciones para editores''' * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] La característica de [[mw:Special:MyLanguage/Help:Watchlist expiry|expiración de la lista de seguimiento]] permite a los editores vigilar páginas por un tiempo. Después de este período, la página se elimina automáticamente de la lista de seguimiento. A partir de esta semana, puedes establecer tu preferencia predeterminada para hacer seguimiento de páginas. Las [[Special:Preferences#mw-prefsection-watchlist-pageswatchlist|preferencias]] también te permiten establecer diversos tiempos de seguimiento para las ediciones en páginas existentes, páginas creadas y cuando se revierte la página. [https://phabricator.wikimedia.org/T265716] [[File:Talk pages default look (April 2023).jpg|thumb|alt=Captura de pantalla de las mejoras visuales realizadas en las páginas de discusión|Ejemplo de una página de discusión con el nuevo diseño, en francés.]] * La apariencia de las páginas de discusión cambiará en la mayoría de las Wikipedias. Algunas wikis, como las que se mencionan en [[m:Special:MyLanguage/Tech/News/2024/19|este enlace]], ya han recibido este rediseño, mientras que [[phab:T379264|otras]] lo recibirán más tarde. Puedes leer más sobre estos cambios en [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|''Diff'']]. Es posible desactivar esta función en tus [[Special:Preferences#mw-prefsection-editing-discussion|preferencias de usuario]], en la sección "{{int:discussiontools-preference-visualenhancements}}". [https://phabricator.wikimedia.org/T319146][https://phabricator.wikimedia.org/T392121] * Los usuarios con permisos extendidos específicos (incluyendo administradores, burócratas, comprobadores de usuarios, supresores y ''stewards'') podrán [[phab:T358853|acceder temporalmente a la dirección IP]] de todas las cuentas temporales por un tiempo limitado para combatir vandalismos recurrentes. Esta característica fue solicitada por los ''stewards''. [https://phabricator.wikimedia.org/T386492] * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático seguirán implementando [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo en varias Wikipedias más. Este filtro utiliza el modelo Revert Risk, creado por el equipo de Investigación, para resaltar las ediciones que probablemente serán revertidas y así ayudar a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. Esta característica se desplegará en las siguientes Wikipedias: {{int:project-localized-name-afwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-cywiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-hawwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-iswiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-kkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-simplewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-trwiki/es}}. La implementación continuará en las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:27}} {{PLURAL:27|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * Se les pide a los editores activos del Filtro Anti Abusos en Meta-Wiki y en las Wikipedias grandes que actualicen los filtros para que sean compatibles con las cuentas temporales. Un enlace a las instrucciones y una lista privada de filtros que necesitan verificación están disponibles en Phabricator en [[phab:T369611|este enlace]]. * Los módulos de Lua ahora tienen acceso al nombre de la página que tiene asociada una miniatura de imagen, y en [https://gerrit.wikimedia.org/g/operations/mediawiki-config/+/2e4ab14aa15bb95568f9c07dd777065901eb2126/wmf-config/InitialiseSettings.php#10849 algunas wikis] también a la información de evaluación del Wikiproyecto. Esto es posible usando dos nuevas propiedades en [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#added-by-extensions|mw.title objects]], llamadas <code dir=ltr>pageImage</code> y <code dir=ltr>pageAssessments</code>. [https://phabricator.wikimedia.org/T131911][https://phabricator.wikimedia.org/T380122] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.5|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W24"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:16 10 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28846858 --> == Categoría: Personajes Bíblicos o Antropónimos Bíblicos == ¿Puedo crear esta categoria? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:30 12 jun 2025 (UTC) :Sin una buena justificación, yo estoy en contra por los mismos motivos que en [[Wikcionario:Café/2020 04#Francisco Franco]]. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:17 12 jun 2025 (UTC) ::Por cierto, ya habíamos borrado [[:Categoría:Personajes bíblicos]] previamente, a raíz de aquella discusión. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:21 12 jun 2025 (UTC) :Los nombres propios quedan fuera del alcance en general, salvo nombres o apellidos genéricos que no referencien a ninguna persona en particular, o sinó los nombres de ciudades o topónimos. Fuera de eso, otros nombres particulares conciernen solo a Wikipedia. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:30 12 jun 2025 (UTC) ::Aca estoy hablando de entradas como [[Adán]], [[Eva]], [[Moisés]] y solo agregar una clasificación. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 21:00 12 jun 2025 (UTC) :::¿Qué clasificación? Estás lanzando una propuesta imprecisa y poco estudiada: justo en esas tres entradas que citas ya había acepciones bíblicas y fueron eliminadas. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 22:19 12 jun 2025 (UTC) ::::Agrega la categoría Antropónimos Bíblicos, en los nombres correspondientes. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 04:32 13 jun 2025 (UTC) :::::Otro motivo para no hacerlo es que me opongo a las "categorías silenciosas", fuera de {{ep|csem}} u otra plantilla similar. En tu caso, de acuerdo a mis esquemas una categoría como esa debería ir en {{ep|csem}} para que aparezca el supuesto campo semántico antes de la definición del nombre propio, lo que incluso hace que quede peor. Pero tranquilo que hay proyectos para eso. En Wikipedia [[w:Categoría:Personajes_del_Nuevo_Testamento|ya lo hicieron]]. Aunque todavía les faltan algunos, como [[w:Tomás el Apóstol]], que justo es mi favorito xd. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:47 13 jun 2025 (UTC) ::::::Opino similar, solo estaría de acuerdo sí se agregara la acepción que explica su significado bíblico: ::::::;1 Religión: Primer hombre según la Biblia. ::::::;2: ''Nombre de pila de varón''. ::::::Y que Antropónimos bíblicos sea una etiqueta que se muestre como Religión o Cristrianismo o algo así. ::::::Pero si ya se había acordado que entradas de ese estilo no van aquí, entonces pues no. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 01:07 16 jun 2025 (UTC) == Vote now in the 2025 U4C Election == <div lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{Int:Please-translate}} Eligible voters are asked to participate in the 2025 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2025|2025 Election information page]]. The vote closes on 17 June 2025 at [https://zonestamp.toolforge.org/1750161600 12:00 UTC]. Please vote if your account is eligible. Results will be available by 1 July 2025. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 23:01 13 jun 2025 (UTC) </div> <!-- Mensaje enviado por Usuario:Keegan (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28848819 --> == Noticias técnicas: 2025-25 == <section begin="technews-2025-W25"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/25|Traducciones en varios idiomas]] están disponibles. '''Actualizaciones para editores''' * Puedes [https://wikimediafoundation.limesurvey.net/359761?lang=en nominar tus herramientas favoritas] para la sexta edición del [[m:Special:MyLanguage/Coolest Tool Award|Coolest Tool Award]]. Las nominaciones son anónimas y estarán abiertas hasta el 25 de junio. Puedes reutilizar el formulario para enviar múltiples nominaciones. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:33}} {{PLURAL:33|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.6|MediaWiki]] '''A fondo''' * El personal de la Fundación y los voluntarios técnicos utilizan las API de Wikimedia para construir herramientas, aplicaciones, características e integraciones que mejoran las experiencias de los usuarios. Durante los próximos años, el equipo de Interfaces de MediaWiki invertirá en API web de Wikimedia (HTTP) para satisfacer mejor las necesidades técnicas de los voluntarios y proteger la infraestructura de Wikimedia de posibles abusos. Puedes [https://techblog.wikimedia.org/2025/06/12/apis-as-a-product-investing-in-the-current-and-next-generation-of-technical-contributors/ leer más sobre sus planes para evolucionar las API en esta publicación de Techblog]. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W25"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:38 16 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Convocatoria a Candidaturas para la Junta Directiva de la Fundación Wikimedia, 2025 == <section begin="announcement-content" /> :''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Announcement/Call for candidates|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2025/Announcement/Call for candidates}}&language=&action=page&filter= {{int:please-translate}}]</div> Saludos, La [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|convocatoria a candidaturas para la selección 2025 de Miembros de la Junta Directiva de la Fundación Wikimedia se encuentra abierta]] desde el 17 de junio de 2025 hasta el 2 de julio de 2025 a horas 11:59 UTC [1]. La Junta Directiva supervisa el trabajo de la Fundación Wikimedia, y cada Miembro cumple un periodo de funciones de tres años [2]. El cargo es voluntario. Este año, la comunidad Wikimedia votará desde fines de agosto hasta el mes de septiembre de 2025 para ocupar dos (2) puestos en la Directiva de la Fundación. ¿Podría usted, o alguien a quien usted conozca, tener lo que se requiere para unirse a la Junta Directiva de la Fundación Wikimedia? [3] Puede aprender más acerca de los requisitos para postularse a estos puestos de liderazgo, además del modo de presentar una candidatura en [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidate application|esta página de Meta-wiki]], para sí o para alguien que usted considere que podría presentarse a la elección de este año. Atentamente, Abhishek Suryawanshi<br /> Director del Comité Electoral A nombre del Comité Electoral y del Comité de Gobernanza [1] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Call_for_candidates [2] https://foundation.wikimedia.org/wiki/Legal:Bylaws#(B)_Term. [3] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Resources_for_candidates<section end="announcement-content" /> [[Usuario:MediaWiki message delivery|MediaWiki message delivery]] ([[Usuario discusión:MediaWiki message delivery|discusión]]) 17:44 17 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:RamzyM (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28866958 --> == Importación de contenido desde en.wikitioanry == Estimados, Tengo una aplicación desarrollada en Java que utiliza la cuenta RoboJ2. En los últimos días, la he empleado para importar contenidos desde en.wiktionary siguiendo este proceso: Entrada de datos: El programa recibe como parámetro un archivo de texto que elaboro manualmente, donde se listan las entradas a procesar. Verificación: El sistema revisa si cada entrada existe en en.wiktionary y no está presente en es.wiktionary. Transformación: El programa analiza el wikitexto de la entrada y lo adapta al formato utilizado en es.wiktionary. Las entradas que he selecionado ahora han sido antróponimos y plurales de palabras que encontre aquí: [https://es.wiktionary.org/wiki/Ap%C3%A9ndice:Palabras_m%C3%A1s_frecuentes_del_ingl%C3%A9s Palabras frecuentes] Entradas generadas hasta ahora: [https://es.wiktionary.org/wiki/Especial:Contribuciones/RoboJ2 Entradas generadas]. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 22:06 18 jun 2025 (UTC) :@[[Usuario:Cvmontuy|Cvmontuy]] No tengo motivos para oponerme PERO: :* Desearía que se respete completamente el formato nuevo de la guía de estilo. O sea, las formas flexivas van con el título de nivel 3 "Forma flexiva" y luego en el nivel 4 va el título de Forma sustantiva, adjetiva, etc. Lo de poner directamente el título de nivel 4 en el nivel 3 es una costumbre antigua que la seguimos tolerando solo porque no hice una migración masiva de todas las páginas con formas flexivas y como no es prioridad hacerlo ahora mismo no es un error grave pero las páginas nuevas no deberían ser creadas con ese formato. :* Las palabras se agregan completamente o no se agregan, pero no crees más esbozos con tu bot, me refiero a lo que aparece en [[sends]] o en [[reflections]]. :* Podrías compartir el repositorio de la app? Podríamos extenderlo a más idiomas en un futuro. ::@[[Usuario:Tmagc|Tmagc]],@[[Usuario:Peter Bowman|Peter Bownman]], aqui les dejo el repositorio [https://github.com/cvmontuy1/WikiBotJ316 WikiBotJ316], no es un trabajo profesional pero desde mi punto de vista funciona, saludos --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:50 24 jun 2025 (UTC) :[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:00 19 jun 2025 (UTC) ::@[[Usuario:Tmagc|Tmagc]] ::::*Si revisas las entradas creadas, verás que están tal como mencionas: en el nivel 3 aparece “Forma flexiva” y en el nivel 4, “Forma sustantiva/verbal”. ::::*Se ha utilizado la plantilla <nowiki>{{esbozo}}</nowiki> porque la fuente de información no es perfecta ni completa, y el programa tampoco lo es. Reconoce ciertas expresiones regulares para extraer los datos, pero no es tan avanzado como para analizar el contenido de forma más profunda. ::::*Todas las entradas creadas siguen la guía de estilo y todas incluyen al menos una definición y su categoría gramatical y la prounciación si esta publicad en el en.wiktionary. Las entradas creadas son antropónimos y plurales, por lo que en la mayoria no hay mucho más que añadir en ellas. ¿O qué criterio de aceptación considerarías necesario? Más adelante, Si no lo prohiben, tal vez integre entradas con terminaciones adverbiales (-ly) y las formas verbales (-ed, -ing). ::::*Creo que es más sencillo y, por lo tanto, útil comenzar con un esbozo que desde cero. ::::*En el proyecto tenemos cientos de entradas como [[burocratizar]] o [[catatonizar]], que prácticamente están vacías. Las que yo aporto siempre incluyen al menos una definició. y muchas entradas que tenemos en el proyecto iniciaron como un esbozo, o queremos ya prohibiir los esbozos oficialmente?, y entonces debemos elimianr la plantilla correspondiente? ::::*No he creado un espacio en gitlab pero espero la proxima semana hacerlo y compartir el código correspondiente. ::::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:55 19 jun 2025 (UTC) :::@[[Usuario:Cvmontuy|Cvmontuy]] :::* Como decía, lo de los esbozos que están ahora creados fue por una mala decisión que se tomó en su momento, de las tantas que han perjudicado al proyecto pero creeme que si hubiera estado en su momento no lo habría permitido. Así y todo, no sigamos propagando el mal, no creemos más esbozos innecesariamente. Si la aplicación tiene problemas para parsear las entradas de en.wikt, entonces deberán hacerse las pruebas que sean necesarias hasta que funcione aceptable. :::* No es necesario extraer toda la información, puede que hayan cosas que no aplican para nuestro sitio. Pero las etimologías y las definiciones deberían aparecer. :::* Yo me centraría en agregar formas canónicas; las formas flexivas en todo caso las podríamos crear sino con la información de las entradas que tenemos en nuestro Wikcionario. :::* En lugar de luchar innecesariamente con las expresiones regulares, deberías usar una biblioteca que parsee wikitexto. Yo implementé un algoritmo en Python para parsear las entradas en es.wikt usando la de [https://github.com/5j9/wikitextparser 5j9]. Podríamos crear un repositorio para que te comparta lo que tengo y trabajar en conjunto, pero nunca tuve éxito con Java. [https://www.mediawiki.org/wiki/Alternative_parsers Acá hay una lista con otras implementaciones]. :::[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 05:24 19 jun 2025 (UTC) ::::Hola. Mi bot está escrito en Java y tengo un parser específico para eswiktionary que no funciona mal, está probado desde 2015 ([https://github.com/PeterBowman/wikibot/tree/master/wikibot/src/main/java/com/github/wikibot/parsing/eswikt fuente]; la pega es que el código es un desastre infumable). Con respecto a lo que se menciona de [[burocratizar]] y otras entradas vacías (sin definiciones), mi opinión es que no se deberían haber creado, y estaría a favor de borrarlas. No colocaría {{ep|esbozo}} en aquellas entradas importadas que sean simples formas flexivas; lo único que se puede hacer con esas plantillas es quitarlas directamente (aunque coincido con Tmagc en que preferiría usar la información de eswiktionary en lugar de importar/convertir). Por otro lado, permiten que un usuario humano las revise a posteriori para verificar que el bot haya funcionado bien... Para conjugar ambas opciones, yo propondría usar una plantilla de aviso diferente, específica para páginas importadas por bot que requieran de revisión manual. Algo como {{ep|importado}}, pero puntualizando que se requiere de revisión más que adaptación a nuestro formato. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 08:44 19 jun 2025 (UTC) ::*El programa desarrollado está actualmente diseñado para importar antropónimos y plurales. Toma del en.wiktionary la información de pronunciación y determina si el término es masculino, femenino, ambos, o si se trata de un hipocorístico. En el caso de los plurales, verifica si la palabra corresponde a un sustantivo, una forma verbal, o ambas. Esta información, para este tipo de entradas, no está disponible en el es.wiktionary. ::*Estoy de acuerdo en que sería más útil generar entradas de las formas canónicas o basarse directamente en el es.wiktionary, pero por ahora esas tareas no están dentro del alcance de este programa. Quizá más adelante pueda trabajar en ese sentido. ::*Gracias por compartir las librerías; no sabía que existían. Las revisaré con calma más adelante. Revisé brevemente tu programa, @Peter Bowman, y me pareció bien estructurado y fácil de entender. El mecanismo de parseo que usaste es muy similar al que empleo en el programa que estamos discutiendo ahora. El objetivo de identificar plantillas en en.wiktionary y analizarlas es técnicamente sencillo, pero los contenidos no siempre usan plantillas y hay mucho texto libre. En estos casos, más que un parser, lo que realmente ayudaría sería integrar una IA para la traducción. No lo he hecho aún, y tampoco sé si eso sería legalmente válido. ::Por favor, intentemos concluir: ::*Si en lugar de poner “Nombre de varios lugares”, el programa indica explícitamente textos como “Ciudad de...”, y además agrega la etimología cuando esta se encuentra expresada mediante plantilas en el en.wiktionary, ¿con estos cambios el programa obtiene autorización para seguir operando? ::*En cuanto a sustituir la plantilla <nowiki>{{esbozo}}</nowiki>, existe la plantilla {{ep|creado_por_bot}}. ¿Debo usar esa? ::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:46 19 jun 2025 (UTC) == Noticias técnicas: 2025-26 == <section begin="technews-2025-W26"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/26|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático continuarán con el lanzamiento de [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo al tercer y último grupo de Wikipedias. Este filtro utiliza el modelo de Riesgo de Reversión (Revert Risk), el cual fue creado por el equipo de Investigación, y destaca las ediciones que posiblemente deban ser revertidas para ayudar así a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. La característica será lanzada en las siguientes Wikipedias: {{int:project-localized-name-azwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-lawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mlwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mrwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-nnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-pawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-swwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tlwiki/es}}. El lanzamiento continuará durante las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] '''Actualizaciones para editores''' * La semana pasada, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] se implementaron en las Wikipedias en checo, coreano y turco. Esta semana y la próxima, los lanzamientos se realizarán en Wikipedias más grandes. [[mw:Talk:Trust and Safety Product/Temporary Accounts|Comparte tus ideas]] sobre el proyecto. [https://phabricator.wikimedia.org/T340001] * Durante esta semana, el equipo de Edición lanzará [[mw:Special:MyLanguage/Help:Edit check#Multi check|Multi Check]] en todas las Wikipedias (excepto la Wikipedia en inglés). Esta característica muestra múltiples [[mw:Special:MyLanguage/Help:Edit check#Reference check|verificaciones de referencias]] junto a la experiencia de edición. Esto anima a los usuarios a añadir citas cuando agregan varios párrafos a un artículo de Wikipedia. Esta característica estuvo disponible como una prueba A/B. [https://analytics.wikimedia.org/published/reports/editing/multi_check_ab_test_report_final.html#summary-of-results Las pruebas mostraron] que los usuarios a quienes se les mostraban las múltiples verificaciones eran 1.3 veces más propensos a añadir una referencia a su edición, y su edición era 34.7% menos propensa a ser revertida. [https://phabricator.wikimedia.org/T395519] * Unas pocas páginas deben ser renombradas debido a actualizaciones de software y para ajustarse a estándares Unicode más recientes. Todos estos cambios están relacionados con las mayúsculas en los títulos. Aproximadamente 71 páginas y 3 archivos serán renombrados en 15 wikis; la lista completa se encuentra en [[phab:T396903|esta tarea]]. Los desarrolladores renombrarán estas páginas la próxima semana y solucionarán las redirecciones y los enlaces de archivos incrustados unos minutos después mediante una actualización de la configuración del sistema. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:24}} {{PLURAL:24|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se arregló un error que había hecho que las páginas se desplazaran hacia arriba cuando se selecciona texto cerca de la parte superior. [https://phabricator.wikimedia.org/T364023] '''Actualizaciones para los colaboradores técnicos''' * Ahora, los editores pueden usar los módulos de Lua para filtrar y transformar datos tabulares y utilizarlos con [[mw:Special:MyLanguage/Extension:Chart|Extension:Chart]]. Esto puede ser empleado para diversos objetivos, como seleccionar un subconjunto de filas o columnas de los datos, convertir entre unidades, realizar procesamiento estadístico y otras transformaciones útiles. [[mw:Special:MyLanguage/Extension:Chart/Transforms|Lee más para obtener información sobre cómo usar las transformaciones]]. [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Chart/Project/Updates] * La variable <code dir=ltr>all_links</code> en el [[Special:AbuseFilter|Filtro Antiabusos]] ahora se llama <code dir=ltr>new_links</code> para ser consistente con las otras variables. Los usos anteriores seguirán funcionando. [https://phabricator.wikimedia.org/T391811] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.7|MediaWiki]] '''A fondo''' * El último [[mw:Special:MyLanguage/Growth/Newsletters/34|Boletín de Growth]] está disponible. Incluye: las actualizaciones recientes de la tarea "Agregar un enlace", dos nuevas características de participación para los recién llegados y actualizaciones de la configuración comunitaria. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W26"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:21 23 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Noticias técnicas: 2025-27 == <section begin="technews-2025-W27"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/27|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|extensión CampaignEvents]] ya está habilitada en todas las Wikipedias. Esta extensión facilita la organización y participación en actividades colaborativas, como editatones y Wikiproyectos, en las wikis. La extensión incluye tres características: [[m:Special:MyLanguage/Event Center/Registration|Registro al evento]], [[m:Special:MyLanguage/CampaignEvents/Collaboration list|Lista de colaboración]] y [[m:Campaigns/Foundation Product Team/Invitation list|Lista de invitaciones]]. Para solicitar la extensión para tu wiki, visita la [[m:Special:MyLanguage/CampaignEvents/Deployment status#How to Request the CampaignEvents Extension for your wiki|página de información de Despliegues]]. '''Actualizaciones para editores''' * Los mantenedores del Filtro Antiabusos ahora pueden [[mw:Special:MyLanguage/Extension:IPReputation/AbuseFilter variables|evaluar la reputación de la IP]] en los [[mw:Special:MyLanguage/Extension:AbuseFilter|Filtros]]. Los datos de la reputación de la IP son información sobre los proxies y VPN asociados a la dirección IP del usuario. Esta información no se muestra públicamente y no se genera para acciones realizadas por cuentas registradas. [https://phabricator.wikimedia.org/T354599] * El contenido oculto que se encuentra en [[mw:Special:MyLanguage/Manual:Collapsible elements|partes colapsables de las wikipáginas]] ahora se mostrará cuando alguien busque en la página usando la función "Buscar en la página" del navegador (Ctrl+F o ⌘F) en los navegadores compatibles. [https://phabricator.wikimedia.org/T327893][https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/hidden#browser_compatibility] * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] Una nueva función, llamada [[mw:Special:MyLanguage/Help:TemplateData/Template discovery|Plantillas Favoritas]], se lanzará a finales de esta semana en todos los proyectos (excepto en la Wikipedia en inglés, que la recibirá la próxima semana), tras una fase piloto en las Wikipedias en polaco y árabe, y los Wikisources en italiano e inglés. Esta característica ofrecerá una mejor manera de descubrir y utilizar plantillas mediante el cuadro de diálogo de plantillas, permitiendo a los usuarios añadirlas a una "lista especial de favoritos". La función es compatible tanto con el Editor Visual como con el editor de Wikitexto. Esta funcionalidad es un [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|deseo de la comunidad]]. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:31}} {{PLURAL:31|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se solucionó un error que causaba que algunas Notificaciones se enviaran varias veces. [https://phabricator.wikimedia.org/T397103] '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.8|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W27"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:40 30 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28917415 --> == Modificaciones propuestas para pron-graf == Hola, dos modificaciones que estoy considerando: * Estaba pensando en que el sistema de doble índice puede llevar a confusiones ya que contrasta con el resto de las plantillas en donde el índice está al final pero en esta queda al principio. Quiero decir, si no necesito agregar ninguna subvariante y tengo 3 pronunciaciones lo que debería hacer (sin módulo obviamente) sería <nowiki>|1fone</nowiki>, <nowiki>|2fone</nowiki>, <nowiki>|3fone</nowiki>. Sin embargo, por lo menos a mí me ha pasado que escribí sin querer <nowiki>|fone1</nowiki>, <nowiki>|fone2</nowiki>, <nowiki>|fone3</nowiki>. A diferencia del resto de plantillas en donde se avanza naturalmente con el índice pospuesto, en esta hay que avanzar con el índice antepuesto. La documentación sobre este detalle me parece que sería inevitablemente engorrosa. Lo que propongo es simplificar a un único índice pospuesto en lugar de antepuesto para variantes principales, y las subvariantes separarlas con punto y coma. :Tomando como ejemplo [[withstand]], pasaríamos de esto: :<code><nowiki>{{pron-graf|leng=en |pron=Conservative Received Pronunciation|1fono1=wɪðˈstænd|1fono2=wɪθˈstænd |2pron=General American, Standard Canadian|2fono=wɪðˈstænd|2fone2=wɪðˈstɛənd|2fnota2=/æ/ raising|2audio2=en-us-withstand.ogg|2aunota2=California|2audio3=LL-Q1860 (eng)-Wodencafe-withstand.wav|2aunota3=Texas|2fone4=wɪðˈstɛːnd|2fnota4=/æ/ raising|2audio5=LL-Q1860 (eng)-Grendelkhan-withstand.wav|2aunota5=Connecticut|2fono6=wɪθˈstænd|2fone7=wɪθˈstɛənd|2fnota7=/æ/ raising|2audio7=LL-Q1860 (eng)-Semperosculto-withstand.wav|2aunota7=EE. UU.|2fone8=wɪθˈstɛːnd|2fnota8=/æ/ raising|2audio8=LL-Q1860 (eng)-Assorted-Interests-withstand.wav|2aunota8=Ciudad de Nueva York |3pron=Australia|3fono1=wɪðˈstænd|3fone2=wɪðˈsteːnd|3fnota2=/æ/ raising|3fono3=wɪθˈstænd|3fone4=wɪθˈsteːnd|3fnota4=/æ/ raising |ls=2 }}</nowiki></code> :A esto: :<code><nowiki>{{pron-graf|leng=en |pron1=Conservative Received Pronunciation|fono1=wɪðˈstænd;wɪθˈstænd |pron2=General American, Standard Canadian|fono2=wɪðˈstænd;;;;;wɪθˈstænd|fone2=;wɪðˈstɛənd;;wɪðˈstɛːnd;;;wɪθˈstɛənd;wɪθˈstɛːnd|fnota2=;/æ/ raising;;/æ/ raising;;;/æ/ raising;/æ/ raising|audio2=;en-us-withstand.ogg;LL-Q1860 (eng)-Wodencafe-withstand.wav;;LL-Q1860 (eng)-Grendelkhan-withstand.wav;;LL-Q1860 (eng)-Semperosculto-withstand.wav;LL-Q1860 (eng)-Assorted-Interests-withstand.wav|aunota2=;California;Texas;;Connecticut;;EE. UU.;Ciudad de Nueva York |pron3=Australia|fono3=wɪðˈstænd;;wɪθˈstænd|fone3=;wɪðˈsteːnd;;wɪθˈsteːnd|fnota3=;/æ/ raising;;/æ/ raising |ls=2 }}</nowiki></code> :Lo bueno es que simplificaría la documentación y la consistencia entre sistemas usados en las distintas plantillas. Lo malo es que no se podrían añadir pronunciaciones o archivos con punto y coma, algo que de todas formas no lo he visto en el sitio hasta la fecha. El resto seguiría igual, es decir, esos parámetros (<nowiki>|fone</nowiki>, <nowiki>|fono</nowiki>, <nowiki>|fgraf</nowiki>, <nowiki>|fnota</nowiki>, <nowiki>|audio</nowiki>, <nowiki>|aunota</nowiki>) seguirían funcionando como un arreglo doble. Las páginas afectadas son aproximadamente 5000, casi todas del inglés (otros idiomas son prácitamente irrelevantes ya que en su mayoría se pueden automatizar). La migración la podría hacer en unos pocos días. * Después, añadir un nuevo parámetro que se trate de homófonos pero a nivel de pronunciación, es decir, sería un arreglo doble a completar con los homófonos que lo son solo respecto de una pronunciación específica, por ejemplo, si es solo homófono en la pronunciación seseante, se agregaría al lado de la transcripción que la palabra en cuestión es homófona en lugar de aparecer al final como homófono a nivel global. En principio convivirían ambos parámetros, al menos por un tiempo ya que la migración completa de uno al otro sería mucho más lenta y difícil que lo anterior. Qué nombre quieren ponerle? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 22:37 2 jul 2025 (UTC) b144nrulqjnsnnbm1an18vtf2yjr02m 5823356 5823355 2025-07-02T22:39:21Z Tmagc 158167 /* Modificaciones propuestas para pron-graf */ 5823356 wikitext text/x-wiki <!-- Inicio Encabezado del café, aviso, información histórica y información de archivado --> <div style="text-align: center;"> {{/Aviso}} {{/Histórico}} </div> {{atajo|WN:C}} [[Categoría:Wikcionario:Café]] <!-- Fin del Encabezado del café --> <!-- Inicio configuración robot archivado; no tocar si no se sabe lo que se hace --> {{Usuario:MABot/config |archive = Wikcionario:Café/%(year)d %(month)02d |algo = old(30d) |counter = 1 |archiveheader = {{Archivo}} }} <h1>{{MONTHNAME|{{PREVIOUSMONTH}}}} de {{PREVIOUSMONTH.YEAR}}</h1> <div class="mw-archivedtalk"> {{/{{PREVIOUSMONTH.YEAR}} {{PREVIOUSMONTH}}}} </div> <h1>Actual</h1> == Cómo agregar nuevas pronunciaciones == Hola! quisiera preguntar cómo agregar una nueva pronunciación en la plantilla '''Plantilla:pron-graf,''' ¿puedo agregarlo de forma manual o se necesita tener una página de Referencia de pronunciación,como por ejemplo Wikcionario:Referencia/ES/Pronunciación. En mi caso quiero agregar pronunciaciones desde la lengua Kunza (KUZ), la que no tiene página de referencia de pronunciación. ¿Necesitaría crear la página Wikcionario:Referencia/KUZ/Pronunciación para que me resulte? gracias de antemano [[Usuario:Pcartes|Pcartes]] ([[Usuario discusión:Pcartes|discusión]]) 15:21 21 may 2025 (UTC) :@[[Usuario:Pcartes|Pcartes]] Deberías crear [[Módulo:generar-pron/kuz]], tomando como referencia lo que se hizo con otros idiomas afines, por ejemplo [[Módulo:generar-pron/arn]], [[Módulo:generar-pron/yua]] o [[Módulo:generar-pron/gn]] por tirar ejemplos. Sabés programar en Lua? Tenés ya algún algoritmo hecho? Si no puedo ayudarte con gusto, pero necesito que me expliques cómo debe ser. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:45 21 may 2025 (UTC) ::gracias por la respuesta y disposición para ayudar, la verdad es que no sé programar con Lua pero me interesa aprender. Actualmente estoy trabajando con lingüistas que me podrán ayudar a completar la parte técnica, pero igual agradecería tu ayuda. ¿Hay alguna forma de comunicarnos directamente por correo o solo por aquí? ::Cualquier cosa quedo atento [[Usuario:Pcartes|Pcartes]] ([[Usuario discusión:Pcartes|discusión]]) 16:57 21 may 2025 (UTC) :::@[[Usuario:Pcartes|Pcartes]] Prefiero que nos escribamos en este sitio así queda evidencia de todo lo discutido en caso de que futuros usuarios se vean en la necesidad de revisar el módulo por el motivo que fuere. Para no inundar el Café con una discusión irrelevante e innecesaria para el resto, ahora te escribo en tu página de discusión y seguimos por allí. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:22 21 may 2025 (UTC) ::::Un detalle importantes es que no se sabe cómo sonaba el kunza. En particular, se discute mucho qué quiso decir Vaïsse con su descripción de la consonante ck, muy común en el idioma, como en su propio nombre [[ckunsa]] ("nuestro"). ¿Era /q/, /χ/ o algo diferente? No se sabe. Por eso, antes de crear el módulo habria que revisar las reconstrucciones que se puedan haber publicado. Saludos. [[Usuario:Lin linao|Lin linao]] [[Usuario Discusión:Lin linao|¿dime?]] 21:44 2 jun 2025 (UTC) == Etimología de siglas == Hola, copié el módulo etimología a etimología_test para adaptarlo al manejo de siglas, se agrega el parámetro nosep (no separador). :Con parámetro nosep ::Sigla de [[organización#Español|''organización'']] ''de'' ''las'' [[naciones#Español|''naciones'']] [[unidas#Español|''unidas'']] :Sin parámetro nosep ::Sigla de [[organización#Español|''organización'']], ''de'', ''las'', [[naciones#Español|''naciones'']] y [[unidas#Español|''unidas'']] ¿Están de acuerdo en aprobar este cambio para implementarlo en el módulo original? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>mensajes)</sup>]] 21:19 30 may 2025 (UTC) :Pues, creo que es bastaaante raro que las siglas vengan de términos con comas, el único caso que se me viene a la mente es la UNESCO y es una sola. Siento yo que en esos extraños y pocos casos se podría usar el parámetro nl=s y añadir el enlace manual: :* Si esta en Wikipedia, podría enlazarse directamente: :{{etimología|sigla|[[w:United Nations Educational, Scientific and Cultural Organization|United Nations Educational, Scientific and Cultural Organization]]|nl=s}}. :* Enlace a otros términos del Wikcionario: :{{etimología|sigla|[[building]], [[antenna]]-tower, [[span]], [[earth]]|nl=s}}. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 22:45 30 may 2025 (UTC) :Ídem a Raos, yo tampoco entiendo cuál era el problema original. Podrías mostrar algún ejemplo en donde esa modificación sea relevante? Yo creo que si la sigla es de varias palabras sería más bien un compuesto acronímico (actualmente clasificado como compuesto). [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:34 31 may 2025 (UTC) ::De acuerdo --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:56 31 may 2025 (UTC) :::Entiendo que el "de acuerdo" quiere decir que la propuesta ha sido retirada. Elimino entonces [[Plantilla:etimologíapba]] y [[Módulo:etimología test]] para que no figuren en el espacio principal. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:24 7 jun 2025 (UTC) ::::Si gracias! [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:37 7 jun 2025 (UTC) == Noticias técnicas: 2025-23 == <section begin="technews-2025-W23"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/23|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Extension:Chart|extensión Chart]] ya está disponible en todas las wikis de Wikimedia. Los editores pueden usar esta nueva extensión para crear visualizaciones de datos interactivas como gráficos de barra, línea y torta. La extensión está diseñada para reemplazar muchos de los usos de la [[mw:Special:MyLanguage/Extension:Graph|extensión antigua]]. '''Actualizaciones para editores''' * Ahora es más fácil configurar las citas automáticas para tu wiki con el [[mw:Special:MyLanguage/Citoid/Enabling Citoid on your wiki|generador de citas]] del editor visual. Los administradores pueden establecer una plantilla por defecto usando <code dir=ltr>_default</code> en la página local <bdi lang="en" dir="ltr">[[MediaWiki:Citoid-template-type-map.json]]</bdi> ([[mw:Special:Diff/6969653/7646386|un ejemplo de diff]]). Establecer este valor por defecto también ayudará a preparar tus configuraciones existentes para el futuro cuando se agreguen [[phab:T347823|nuevos tipos de elementos]]. Aún puedes establecer plantillas para tipos individuales, ya que estas tendrán preferencia sobre la plantilla por defecto. [https://phabricator.wikimedia.org/T384709] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:20}} {{PLURAL:20|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * A partir de la semana del 2 de junio, los bots que inicien sesión usando <code dir=ltr>action=login</code> o <code dir=ltr>action=clientlogin</code> fallarán con mayor frecuencia. Esto se debe a la mejora en las protecciones contra ingresos sospechosos. Los bots que usen [[mw:Special:MyLanguage/Manual:Bot passwords|contraseñas de bot]] o un mecanismo de autenticación sin inicio de sesión como [[mw:Special:MyLanguage/OAuth/Owner-only consumers|OAuth]] no se verán afectados. Si tu bot no está usando uno de esos mecanismos, deberías actualizarlo; el uso de <code dir=ltr>action=login</code> sin una contraseña de bot fue marcado como obsoleto [[listarchive:list/wikitech-l@lists.wikimedia.org/message/3EEMN7VQX5G7WMQI5K2GP5JC2336DPTD/|en 2016]]. Para la mayoría de los bots, esto solo requiere cambiar la contraseña que usa el bot. [https://phabricator.wikimedia.org/T395205] * A partir de esta semana, las wikis de Wikimedia permitirán características de ES2017 en código JavaScript para código oficial, dispositivos y scripts de usuario. La característica más visible de ES2017 es la sintaxis de <bdi lang="zxx" dir="ltr"><code>async</code>/<code>await</code></bdi>, que permite un código más fácil de leer. Hasta esta semana, la plataforma solo permitía hasta ES2016, y unos meses antes, hasta ES2015. [https://phabricator.wikimedia.org/T381537] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.4|MediaWiki]] '''Reuniones y eventos''' * Las solicitudes de becas para participar en la [[m:Special:MyLanguage/GLAM Wiki 2025|GLAM Wiki Conference 2025]] ya están abiertas. La conferencia se realizará del 30 de octubre al 1 de noviembre en Lisboa, Portugal. Las personas que contribuyen con GLAM y carecen de los medios para participar pueden [[m:Special:MyLanguage/GLAM Wiki 2025/Scholarships|postular aquí]]. Las solicitudes de becas cierran el 7 de junio. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/23|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W23"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:55 2 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28819186 --> == Noticias técnicas: 2025-24 == <section begin="technews-2025-W24"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/24|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * El [[mw:Special:MyLanguage/Trust and Safety Product|equipo de Confianza y Seguridad de Producto]] está terminando el trabajo necesario para implementar [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] en las Wikipedias más grandes a finales de este mes. El equipo ha trabajado con los stewards y otros usuarios con permisos extendidos para predecir y responder a los diversos casos de uso que podrían aparecer en las wikis más grandes, así los integrantes de las comunidades pueden continuar el patrullaje y la moderación de las cuentas temporales. Esta es la segunda de tres fases de implementación; la última se realizará, al menos, en septiembre. Para más información sobre los desarrollos recientes de este proyecto, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|lee esta actualización]]. Si tienes comentarios o preguntas, escribe un mensaje en [[mw:Talk:Trust and Safety Product/Temporary Accounts|la página de discusión]], y [[m:Event:CEE Catch up Nr. 10 (June 2025)|únete a CEE Catch Up]] este martes. '''Actualizaciones para editores''' * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] La característica de [[mw:Special:MyLanguage/Help:Watchlist expiry|expiración de la lista de seguimiento]] permite a los editores vigilar páginas por un tiempo. Después de este período, la página se elimina automáticamente de la lista de seguimiento. A partir de esta semana, puedes establecer tu preferencia predeterminada para hacer seguimiento de páginas. Las [[Special:Preferences#mw-prefsection-watchlist-pageswatchlist|preferencias]] también te permiten establecer diversos tiempos de seguimiento para las ediciones en páginas existentes, páginas creadas y cuando se revierte la página. [https://phabricator.wikimedia.org/T265716] [[File:Talk pages default look (April 2023).jpg|thumb|alt=Captura de pantalla de las mejoras visuales realizadas en las páginas de discusión|Ejemplo de una página de discusión con el nuevo diseño, en francés.]] * La apariencia de las páginas de discusión cambiará en la mayoría de las Wikipedias. Algunas wikis, como las que se mencionan en [[m:Special:MyLanguage/Tech/News/2024/19|este enlace]], ya han recibido este rediseño, mientras que [[phab:T379264|otras]] lo recibirán más tarde. Puedes leer más sobre estos cambios en [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|''Diff'']]. Es posible desactivar esta función en tus [[Special:Preferences#mw-prefsection-editing-discussion|preferencias de usuario]], en la sección "{{int:discussiontools-preference-visualenhancements}}". [https://phabricator.wikimedia.org/T319146][https://phabricator.wikimedia.org/T392121] * Los usuarios con permisos extendidos específicos (incluyendo administradores, burócratas, comprobadores de usuarios, supresores y ''stewards'') podrán [[phab:T358853|acceder temporalmente a la dirección IP]] de todas las cuentas temporales por un tiempo limitado para combatir vandalismos recurrentes. Esta característica fue solicitada por los ''stewards''. [https://phabricator.wikimedia.org/T386492] * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático seguirán implementando [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo en varias Wikipedias más. Este filtro utiliza el modelo Revert Risk, creado por el equipo de Investigación, para resaltar las ediciones que probablemente serán revertidas y así ayudar a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. Esta característica se desplegará en las siguientes Wikipedias: {{int:project-localized-name-afwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-cywiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-hawwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-iswiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-kkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-simplewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-trwiki/es}}. La implementación continuará en las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:27}} {{PLURAL:27|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * Se les pide a los editores activos del Filtro Anti Abusos en Meta-Wiki y en las Wikipedias grandes que actualicen los filtros para que sean compatibles con las cuentas temporales. Un enlace a las instrucciones y una lista privada de filtros que necesitan verificación están disponibles en Phabricator en [[phab:T369611|este enlace]]. * Los módulos de Lua ahora tienen acceso al nombre de la página que tiene asociada una miniatura de imagen, y en [https://gerrit.wikimedia.org/g/operations/mediawiki-config/+/2e4ab14aa15bb95568f9c07dd777065901eb2126/wmf-config/InitialiseSettings.php#10849 algunas wikis] también a la información de evaluación del Wikiproyecto. Esto es posible usando dos nuevas propiedades en [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#added-by-extensions|mw.title objects]], llamadas <code dir=ltr>pageImage</code> y <code dir=ltr>pageAssessments</code>. [https://phabricator.wikimedia.org/T131911][https://phabricator.wikimedia.org/T380122] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.5|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W24"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:16 10 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28846858 --> == Categoría: Personajes Bíblicos o Antropónimos Bíblicos == ¿Puedo crear esta categoria? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:30 12 jun 2025 (UTC) :Sin una buena justificación, yo estoy en contra por los mismos motivos que en [[Wikcionario:Café/2020 04#Francisco Franco]]. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:17 12 jun 2025 (UTC) ::Por cierto, ya habíamos borrado [[:Categoría:Personajes bíblicos]] previamente, a raíz de aquella discusión. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:21 12 jun 2025 (UTC) :Los nombres propios quedan fuera del alcance en general, salvo nombres o apellidos genéricos que no referencien a ninguna persona en particular, o sinó los nombres de ciudades o topónimos. Fuera de eso, otros nombres particulares conciernen solo a Wikipedia. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:30 12 jun 2025 (UTC) ::Aca estoy hablando de entradas como [[Adán]], [[Eva]], [[Moisés]] y solo agregar una clasificación. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 21:00 12 jun 2025 (UTC) :::¿Qué clasificación? Estás lanzando una propuesta imprecisa y poco estudiada: justo en esas tres entradas que citas ya había acepciones bíblicas y fueron eliminadas. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 22:19 12 jun 2025 (UTC) ::::Agrega la categoría Antropónimos Bíblicos, en los nombres correspondientes. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 04:32 13 jun 2025 (UTC) :::::Otro motivo para no hacerlo es que me opongo a las "categorías silenciosas", fuera de {{ep|csem}} u otra plantilla similar. En tu caso, de acuerdo a mis esquemas una categoría como esa debería ir en {{ep|csem}} para que aparezca el supuesto campo semántico antes de la definición del nombre propio, lo que incluso hace que quede peor. Pero tranquilo que hay proyectos para eso. En Wikipedia [[w:Categoría:Personajes_del_Nuevo_Testamento|ya lo hicieron]]. Aunque todavía les faltan algunos, como [[w:Tomás el Apóstol]], que justo es mi favorito xd. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:47 13 jun 2025 (UTC) ::::::Opino similar, solo estaría de acuerdo sí se agregara la acepción que explica su significado bíblico: ::::::;1 Religión: Primer hombre según la Biblia. ::::::;2: ''Nombre de pila de varón''. ::::::Y que Antropónimos bíblicos sea una etiqueta que se muestre como Religión o Cristrianismo o algo así. ::::::Pero si ya se había acordado que entradas de ese estilo no van aquí, entonces pues no. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 01:07 16 jun 2025 (UTC) == Vote now in the 2025 U4C Election == <div lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{Int:Please-translate}} Eligible voters are asked to participate in the 2025 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2025|2025 Election information page]]. The vote closes on 17 June 2025 at [https://zonestamp.toolforge.org/1750161600 12:00 UTC]. Please vote if your account is eligible. Results will be available by 1 July 2025. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 23:01 13 jun 2025 (UTC) </div> <!-- Mensaje enviado por Usuario:Keegan (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28848819 --> == Noticias técnicas: 2025-25 == <section begin="technews-2025-W25"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/25|Traducciones en varios idiomas]] están disponibles. '''Actualizaciones para editores''' * Puedes [https://wikimediafoundation.limesurvey.net/359761?lang=en nominar tus herramientas favoritas] para la sexta edición del [[m:Special:MyLanguage/Coolest Tool Award|Coolest Tool Award]]. Las nominaciones son anónimas y estarán abiertas hasta el 25 de junio. Puedes reutilizar el formulario para enviar múltiples nominaciones. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:33}} {{PLURAL:33|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.6|MediaWiki]] '''A fondo''' * El personal de la Fundación y los voluntarios técnicos utilizan las API de Wikimedia para construir herramientas, aplicaciones, características e integraciones que mejoran las experiencias de los usuarios. Durante los próximos años, el equipo de Interfaces de MediaWiki invertirá en API web de Wikimedia (HTTP) para satisfacer mejor las necesidades técnicas de los voluntarios y proteger la infraestructura de Wikimedia de posibles abusos. Puedes [https://techblog.wikimedia.org/2025/06/12/apis-as-a-product-investing-in-the-current-and-next-generation-of-technical-contributors/ leer más sobre sus planes para evolucionar las API en esta publicación de Techblog]. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W25"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:38 16 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Convocatoria a Candidaturas para la Junta Directiva de la Fundación Wikimedia, 2025 == <section begin="announcement-content" /> :''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Announcement/Call for candidates|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2025/Announcement/Call for candidates}}&language=&action=page&filter= {{int:please-translate}}]</div> Saludos, La [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|convocatoria a candidaturas para la selección 2025 de Miembros de la Junta Directiva de la Fundación Wikimedia se encuentra abierta]] desde el 17 de junio de 2025 hasta el 2 de julio de 2025 a horas 11:59 UTC [1]. La Junta Directiva supervisa el trabajo de la Fundación Wikimedia, y cada Miembro cumple un periodo de funciones de tres años [2]. El cargo es voluntario. Este año, la comunidad Wikimedia votará desde fines de agosto hasta el mes de septiembre de 2025 para ocupar dos (2) puestos en la Directiva de la Fundación. ¿Podría usted, o alguien a quien usted conozca, tener lo que se requiere para unirse a la Junta Directiva de la Fundación Wikimedia? [3] Puede aprender más acerca de los requisitos para postularse a estos puestos de liderazgo, además del modo de presentar una candidatura en [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidate application|esta página de Meta-wiki]], para sí o para alguien que usted considere que podría presentarse a la elección de este año. Atentamente, Abhishek Suryawanshi<br /> Director del Comité Electoral A nombre del Comité Electoral y del Comité de Gobernanza [1] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Call_for_candidates [2] https://foundation.wikimedia.org/wiki/Legal:Bylaws#(B)_Term. [3] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Resources_for_candidates<section end="announcement-content" /> [[Usuario:MediaWiki message delivery|MediaWiki message delivery]] ([[Usuario discusión:MediaWiki message delivery|discusión]]) 17:44 17 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:RamzyM (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28866958 --> == Importación de contenido desde en.wikitioanry == Estimados, Tengo una aplicación desarrollada en Java que utiliza la cuenta RoboJ2. En los últimos días, la he empleado para importar contenidos desde en.wiktionary siguiendo este proceso: Entrada de datos: El programa recibe como parámetro un archivo de texto que elaboro manualmente, donde se listan las entradas a procesar. Verificación: El sistema revisa si cada entrada existe en en.wiktionary y no está presente en es.wiktionary. Transformación: El programa analiza el wikitexto de la entrada y lo adapta al formato utilizado en es.wiktionary. Las entradas que he selecionado ahora han sido antróponimos y plurales de palabras que encontre aquí: [https://es.wiktionary.org/wiki/Ap%C3%A9ndice:Palabras_m%C3%A1s_frecuentes_del_ingl%C3%A9s Palabras frecuentes] Entradas generadas hasta ahora: [https://es.wiktionary.org/wiki/Especial:Contribuciones/RoboJ2 Entradas generadas]. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 22:06 18 jun 2025 (UTC) :@[[Usuario:Cvmontuy|Cvmontuy]] No tengo motivos para oponerme PERO: :* Desearía que se respete completamente el formato nuevo de la guía de estilo. O sea, las formas flexivas van con el título de nivel 3 "Forma flexiva" y luego en el nivel 4 va el título de Forma sustantiva, adjetiva, etc. Lo de poner directamente el título de nivel 4 en el nivel 3 es una costumbre antigua que la seguimos tolerando solo porque no hice una migración masiva de todas las páginas con formas flexivas y como no es prioridad hacerlo ahora mismo no es un error grave pero las páginas nuevas no deberían ser creadas con ese formato. :* Las palabras se agregan completamente o no se agregan, pero no crees más esbozos con tu bot, me refiero a lo que aparece en [[sends]] o en [[reflections]]. :* Podrías compartir el repositorio de la app? Podríamos extenderlo a más idiomas en un futuro. ::@[[Usuario:Tmagc|Tmagc]],@[[Usuario:Peter Bowman|Peter Bownman]], aqui les dejo el repositorio [https://github.com/cvmontuy1/WikiBotJ316 WikiBotJ316], no es un trabajo profesional pero desde mi punto de vista funciona, saludos --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:50 24 jun 2025 (UTC) :[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:00 19 jun 2025 (UTC) ::@[[Usuario:Tmagc|Tmagc]] ::::*Si revisas las entradas creadas, verás que están tal como mencionas: en el nivel 3 aparece “Forma flexiva” y en el nivel 4, “Forma sustantiva/verbal”. ::::*Se ha utilizado la plantilla <nowiki>{{esbozo}}</nowiki> porque la fuente de información no es perfecta ni completa, y el programa tampoco lo es. Reconoce ciertas expresiones regulares para extraer los datos, pero no es tan avanzado como para analizar el contenido de forma más profunda. ::::*Todas las entradas creadas siguen la guía de estilo y todas incluyen al menos una definición y su categoría gramatical y la prounciación si esta publicad en el en.wiktionary. Las entradas creadas son antropónimos y plurales, por lo que en la mayoria no hay mucho más que añadir en ellas. ¿O qué criterio de aceptación considerarías necesario? Más adelante, Si no lo prohiben, tal vez integre entradas con terminaciones adverbiales (-ly) y las formas verbales (-ed, -ing). ::::*Creo que es más sencillo y, por lo tanto, útil comenzar con un esbozo que desde cero. ::::*En el proyecto tenemos cientos de entradas como [[burocratizar]] o [[catatonizar]], que prácticamente están vacías. Las que yo aporto siempre incluyen al menos una definició. y muchas entradas que tenemos en el proyecto iniciaron como un esbozo, o queremos ya prohibiir los esbozos oficialmente?, y entonces debemos elimianr la plantilla correspondiente? ::::*No he creado un espacio en gitlab pero espero la proxima semana hacerlo y compartir el código correspondiente. ::::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:55 19 jun 2025 (UTC) :::@[[Usuario:Cvmontuy|Cvmontuy]] :::* Como decía, lo de los esbozos que están ahora creados fue por una mala decisión que se tomó en su momento, de las tantas que han perjudicado al proyecto pero creeme que si hubiera estado en su momento no lo habría permitido. Así y todo, no sigamos propagando el mal, no creemos más esbozos innecesariamente. Si la aplicación tiene problemas para parsear las entradas de en.wikt, entonces deberán hacerse las pruebas que sean necesarias hasta que funcione aceptable. :::* No es necesario extraer toda la información, puede que hayan cosas que no aplican para nuestro sitio. Pero las etimologías y las definiciones deberían aparecer. :::* Yo me centraría en agregar formas canónicas; las formas flexivas en todo caso las podríamos crear sino con la información de las entradas que tenemos en nuestro Wikcionario. :::* En lugar de luchar innecesariamente con las expresiones regulares, deberías usar una biblioteca que parsee wikitexto. Yo implementé un algoritmo en Python para parsear las entradas en es.wikt usando la de [https://github.com/5j9/wikitextparser 5j9]. Podríamos crear un repositorio para que te comparta lo que tengo y trabajar en conjunto, pero nunca tuve éxito con Java. [https://www.mediawiki.org/wiki/Alternative_parsers Acá hay una lista con otras implementaciones]. :::[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 05:24 19 jun 2025 (UTC) ::::Hola. Mi bot está escrito en Java y tengo un parser específico para eswiktionary que no funciona mal, está probado desde 2015 ([https://github.com/PeterBowman/wikibot/tree/master/wikibot/src/main/java/com/github/wikibot/parsing/eswikt fuente]; la pega es que el código es un desastre infumable). Con respecto a lo que se menciona de [[burocratizar]] y otras entradas vacías (sin definiciones), mi opinión es que no se deberían haber creado, y estaría a favor de borrarlas. No colocaría {{ep|esbozo}} en aquellas entradas importadas que sean simples formas flexivas; lo único que se puede hacer con esas plantillas es quitarlas directamente (aunque coincido con Tmagc en que preferiría usar la información de eswiktionary en lugar de importar/convertir). Por otro lado, permiten que un usuario humano las revise a posteriori para verificar que el bot haya funcionado bien... Para conjugar ambas opciones, yo propondría usar una plantilla de aviso diferente, específica para páginas importadas por bot que requieran de revisión manual. Algo como {{ep|importado}}, pero puntualizando que se requiere de revisión más que adaptación a nuestro formato. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 08:44 19 jun 2025 (UTC) ::*El programa desarrollado está actualmente diseñado para importar antropónimos y plurales. Toma del en.wiktionary la información de pronunciación y determina si el término es masculino, femenino, ambos, o si se trata de un hipocorístico. En el caso de los plurales, verifica si la palabra corresponde a un sustantivo, una forma verbal, o ambas. Esta información, para este tipo de entradas, no está disponible en el es.wiktionary. ::*Estoy de acuerdo en que sería más útil generar entradas de las formas canónicas o basarse directamente en el es.wiktionary, pero por ahora esas tareas no están dentro del alcance de este programa. Quizá más adelante pueda trabajar en ese sentido. ::*Gracias por compartir las librerías; no sabía que existían. Las revisaré con calma más adelante. Revisé brevemente tu programa, @Peter Bowman, y me pareció bien estructurado y fácil de entender. El mecanismo de parseo que usaste es muy similar al que empleo en el programa que estamos discutiendo ahora. El objetivo de identificar plantillas en en.wiktionary y analizarlas es técnicamente sencillo, pero los contenidos no siempre usan plantillas y hay mucho texto libre. En estos casos, más que un parser, lo que realmente ayudaría sería integrar una IA para la traducción. No lo he hecho aún, y tampoco sé si eso sería legalmente válido. ::Por favor, intentemos concluir: ::*Si en lugar de poner “Nombre de varios lugares”, el programa indica explícitamente textos como “Ciudad de...”, y además agrega la etimología cuando esta se encuentra expresada mediante plantilas en el en.wiktionary, ¿con estos cambios el programa obtiene autorización para seguir operando? ::*En cuanto a sustituir la plantilla <nowiki>{{esbozo}}</nowiki>, existe la plantilla {{ep|creado_por_bot}}. ¿Debo usar esa? ::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:46 19 jun 2025 (UTC) == Noticias técnicas: 2025-26 == <section begin="technews-2025-W26"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/26|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático continuarán con el lanzamiento de [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo al tercer y último grupo de Wikipedias. Este filtro utiliza el modelo de Riesgo de Reversión (Revert Risk), el cual fue creado por el equipo de Investigación, y destaca las ediciones que posiblemente deban ser revertidas para ayudar así a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. La característica será lanzada en las siguientes Wikipedias: {{int:project-localized-name-azwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-lawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mlwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mrwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-nnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-pawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-swwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tlwiki/es}}. El lanzamiento continuará durante las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] '''Actualizaciones para editores''' * La semana pasada, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] se implementaron en las Wikipedias en checo, coreano y turco. Esta semana y la próxima, los lanzamientos se realizarán en Wikipedias más grandes. [[mw:Talk:Trust and Safety Product/Temporary Accounts|Comparte tus ideas]] sobre el proyecto. [https://phabricator.wikimedia.org/T340001] * Durante esta semana, el equipo de Edición lanzará [[mw:Special:MyLanguage/Help:Edit check#Multi check|Multi Check]] en todas las Wikipedias (excepto la Wikipedia en inglés). Esta característica muestra múltiples [[mw:Special:MyLanguage/Help:Edit check#Reference check|verificaciones de referencias]] junto a la experiencia de edición. Esto anima a los usuarios a añadir citas cuando agregan varios párrafos a un artículo de Wikipedia. Esta característica estuvo disponible como una prueba A/B. [https://analytics.wikimedia.org/published/reports/editing/multi_check_ab_test_report_final.html#summary-of-results Las pruebas mostraron] que los usuarios a quienes se les mostraban las múltiples verificaciones eran 1.3 veces más propensos a añadir una referencia a su edición, y su edición era 34.7% menos propensa a ser revertida. [https://phabricator.wikimedia.org/T395519] * Unas pocas páginas deben ser renombradas debido a actualizaciones de software y para ajustarse a estándares Unicode más recientes. Todos estos cambios están relacionados con las mayúsculas en los títulos. Aproximadamente 71 páginas y 3 archivos serán renombrados en 15 wikis; la lista completa se encuentra en [[phab:T396903|esta tarea]]. Los desarrolladores renombrarán estas páginas la próxima semana y solucionarán las redirecciones y los enlaces de archivos incrustados unos minutos después mediante una actualización de la configuración del sistema. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:24}} {{PLURAL:24|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se arregló un error que había hecho que las páginas se desplazaran hacia arriba cuando se selecciona texto cerca de la parte superior. [https://phabricator.wikimedia.org/T364023] '''Actualizaciones para los colaboradores técnicos''' * Ahora, los editores pueden usar los módulos de Lua para filtrar y transformar datos tabulares y utilizarlos con [[mw:Special:MyLanguage/Extension:Chart|Extension:Chart]]. Esto puede ser empleado para diversos objetivos, como seleccionar un subconjunto de filas o columnas de los datos, convertir entre unidades, realizar procesamiento estadístico y otras transformaciones útiles. [[mw:Special:MyLanguage/Extension:Chart/Transforms|Lee más para obtener información sobre cómo usar las transformaciones]]. [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Chart/Project/Updates] * La variable <code dir=ltr>all_links</code> en el [[Special:AbuseFilter|Filtro Antiabusos]] ahora se llama <code dir=ltr>new_links</code> para ser consistente con las otras variables. Los usos anteriores seguirán funcionando. [https://phabricator.wikimedia.org/T391811] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.7|MediaWiki]] '''A fondo''' * El último [[mw:Special:MyLanguage/Growth/Newsletters/34|Boletín de Growth]] está disponible. Incluye: las actualizaciones recientes de la tarea "Agregar un enlace", dos nuevas características de participación para los recién llegados y actualizaciones de la configuración comunitaria. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W26"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:21 23 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Noticias técnicas: 2025-27 == <section begin="technews-2025-W27"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/27|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|extensión CampaignEvents]] ya está habilitada en todas las Wikipedias. Esta extensión facilita la organización y participación en actividades colaborativas, como editatones y Wikiproyectos, en las wikis. La extensión incluye tres características: [[m:Special:MyLanguage/Event Center/Registration|Registro al evento]], [[m:Special:MyLanguage/CampaignEvents/Collaboration list|Lista de colaboración]] y [[m:Campaigns/Foundation Product Team/Invitation list|Lista de invitaciones]]. Para solicitar la extensión para tu wiki, visita la [[m:Special:MyLanguage/CampaignEvents/Deployment status#How to Request the CampaignEvents Extension for your wiki|página de información de Despliegues]]. '''Actualizaciones para editores''' * Los mantenedores del Filtro Antiabusos ahora pueden [[mw:Special:MyLanguage/Extension:IPReputation/AbuseFilter variables|evaluar la reputación de la IP]] en los [[mw:Special:MyLanguage/Extension:AbuseFilter|Filtros]]. Los datos de la reputación de la IP son información sobre los proxies y VPN asociados a la dirección IP del usuario. Esta información no se muestra públicamente y no se genera para acciones realizadas por cuentas registradas. [https://phabricator.wikimedia.org/T354599] * El contenido oculto que se encuentra en [[mw:Special:MyLanguage/Manual:Collapsible elements|partes colapsables de las wikipáginas]] ahora se mostrará cuando alguien busque en la página usando la función "Buscar en la página" del navegador (Ctrl+F o ⌘F) en los navegadores compatibles. [https://phabricator.wikimedia.org/T327893][https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/hidden#browser_compatibility] * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] Una nueva función, llamada [[mw:Special:MyLanguage/Help:TemplateData/Template discovery|Plantillas Favoritas]], se lanzará a finales de esta semana en todos los proyectos (excepto en la Wikipedia en inglés, que la recibirá la próxima semana), tras una fase piloto en las Wikipedias en polaco y árabe, y los Wikisources en italiano e inglés. Esta característica ofrecerá una mejor manera de descubrir y utilizar plantillas mediante el cuadro de diálogo de plantillas, permitiendo a los usuarios añadirlas a una "lista especial de favoritos". La función es compatible tanto con el Editor Visual como con el editor de Wikitexto. Esta funcionalidad es un [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|deseo de la comunidad]]. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:31}} {{PLURAL:31|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se solucionó un error que causaba que algunas Notificaciones se enviaran varias veces. [https://phabricator.wikimedia.org/T397103] '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.8|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W27"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:40 30 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28917415 --> == Modificaciones propuestas para pron-graf == Hola, dos modificaciones que estoy considerando: * Estaba pensando en que el sistema de doble índice puede llevar a confusiones ya que contrasta con el resto de las plantillas en donde el índice está al final pero en esta queda al principio. Quiero decir, si no necesito agregar ninguna subvariante y tengo 3 pronunciaciones lo que debería hacer (sin módulo obviamente) sería <nowiki>|1fone</nowiki>, <nowiki>|2fone</nowiki>, <nowiki>|3fone</nowiki>. Sin embargo, por lo menos a mí me ha pasado que escribí sin querer <nowiki>|fone1</nowiki>, <nowiki>|fone2</nowiki>, <nowiki>|fone3</nowiki>. A diferencia del resto de plantillas en donde se avanza naturalmente con el índice pospuesto, en esta hay que avanzar con el índice antepuesto. La documentación sobre este detalle me parece que sería inevitablemente engorrosa. Lo que propongo es simplificar a un único índice pospuesto en lugar de antepuesto para variantes principales, y las subvariantes separarlas con punto y coma. :Tomando como ejemplo [[withstand]], pasaríamos de esto: :<code><nowiki>{{pron-graf|leng=en |pron=Conservative Received Pronunciation|1fono1=wɪðˈstænd|1fono2=wɪθˈstænd |2pron=General American, Standard Canadian|2fono=wɪðˈstænd|2fone2=wɪðˈstɛənd|2fnota2=/æ/ raising|2audio2=en-us-withstand.ogg|2aunota2=California|2audio3=LL-Q1860 (eng)-Wodencafe-withstand.wav|2aunota3=Texas|2fone4=wɪðˈstɛːnd|2fnota4=/æ/ raising|2audio5=LL-Q1860 (eng)-Grendelkhan-withstand.wav|2aunota5=Connecticut|2fono6=wɪθˈstænd|2fone7=wɪθˈstɛənd|2fnota7=/æ/ raising|2audio7=LL-Q1860 (eng)-Semperosculto-withstand.wav|2aunota7=EE. UU.|2fone8=wɪθˈstɛːnd|2fnota8=/æ/ raising|2audio8=LL-Q1860 (eng)-Assorted-Interests-withstand.wav|2aunota8=Ciudad de Nueva York |3pron=Australia|3fono1=wɪðˈstænd|3fone2=wɪðˈsteːnd|3fnota2=/æ/ raising|3fono3=wɪθˈstænd|3fone4=wɪθˈsteːnd|3fnota4=/æ/ raising |ls=2 }}</nowiki></code> :A esto: :<code><nowiki>{{pron-graf|leng=en |pron1=Conservative Received Pronunciation|fono1=wɪðˈstænd;wɪθˈstænd |pron2=General American, Standard Canadian|fono2=wɪðˈstænd;;;;;wɪθˈstænd|fone2=;wɪðˈstɛənd;;wɪðˈstɛːnd;;;wɪθˈstɛənd;wɪθˈstɛːnd|fnota2=;/æ/ raising;;/æ/ raising;;;/æ/ raising;/æ/ raising|audio2=;en-us-withstand.ogg;LL-Q1860 (eng)-Wodencafe-withstand.wav;;LL-Q1860 (eng)-Grendelkhan-withstand.wav;;LL-Q1860 (eng)-Semperosculto-withstand.wav;LL-Q1860 (eng)-Assorted-Interests-withstand.wav|aunota2=;California;Texas;;Connecticut;;EE. UU.;Ciudad de Nueva York |pron3=Australia|fono3=wɪðˈstænd;;wɪθˈstænd|fone3=;wɪðˈsteːnd;;wɪθˈsteːnd|fnota3=;/æ/ raising;;/æ/ raising |ls=2 }}</nowiki></code> :Lo bueno es que simplificaría la documentación y la consistencia entre sistemas usados en las distintas plantillas. Lo malo es que no se podrían añadir pronunciaciones o archivos con punto y coma, algo que de todas formas no lo he visto en el sitio hasta la fecha. Bueno, eso aparte de que deberían cambiar los hábitos quienes agregan transcripciones frecuentemente. El resto seguiría igual, es decir, esos parámetros (<nowiki>|fone</nowiki>, <nowiki>|fono</nowiki>, <nowiki>|fgraf</nowiki>, <nowiki>|fnota</nowiki>, <nowiki>|audio</nowiki>, <nowiki>|aunota</nowiki>) seguirían funcionando como un arreglo doble. Las páginas afectadas son aproximadamente 5000, casi todas del inglés (otros idiomas son prácitamente irrelevantes ya que en su mayoría se pueden automatizar). La migración la podría hacer en unos pocos días. * Después, añadir un nuevo parámetro que se trate de homófonos pero a nivel de pronunciación, es decir, sería un arreglo doble a completar con los homófonos que lo son solo respecto de una pronunciación específica, por ejemplo, si es solo homófono en la pronunciación seseante, se agregaría al lado de la transcripción que la palabra en cuestión es homófona en lugar de aparecer al final como homófono a nivel global. En principio convivirían ambos parámetros, al menos por un tiempo ya que la migración completa de uno al otro sería mucho más lenta y difícil que lo anterior. Qué nombre quieren ponerle? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 22:37 2 jul 2025 (UTC) 8fr1h4xjdj2wnhalir2ow5k1y3aooww 5823374 5823356 2025-07-03T00:45:07Z Adelpine 34679 /* Modificaciones propuestas para pron-graf */ Respuesta 5823374 wikitext text/x-wiki <!-- Inicio Encabezado del café, aviso, información histórica y información de archivado --> <div style="text-align: center;"> {{/Aviso}} {{/Histórico}} </div> {{atajo|WN:C}} [[Categoría:Wikcionario:Café]] <!-- Fin del Encabezado del café --> <!-- Inicio configuración robot archivado; no tocar si no se sabe lo que se hace --> {{Usuario:MABot/config |archive = Wikcionario:Café/%(year)d %(month)02d |algo = old(30d) |counter = 1 |archiveheader = {{Archivo}} }} <h1>{{MONTHNAME|{{PREVIOUSMONTH}}}} de {{PREVIOUSMONTH.YEAR}}</h1> <div class="mw-archivedtalk"> {{/{{PREVIOUSMONTH.YEAR}} {{PREVIOUSMONTH}}}} </div> <h1>Actual</h1> == Cómo agregar nuevas pronunciaciones == Hola! quisiera preguntar cómo agregar una nueva pronunciación en la plantilla '''Plantilla:pron-graf,''' ¿puedo agregarlo de forma manual o se necesita tener una página de Referencia de pronunciación,como por ejemplo Wikcionario:Referencia/ES/Pronunciación. En mi caso quiero agregar pronunciaciones desde la lengua Kunza (KUZ), la que no tiene página de referencia de pronunciación. ¿Necesitaría crear la página Wikcionario:Referencia/KUZ/Pronunciación para que me resulte? gracias de antemano [[Usuario:Pcartes|Pcartes]] ([[Usuario discusión:Pcartes|discusión]]) 15:21 21 may 2025 (UTC) :@[[Usuario:Pcartes|Pcartes]] Deberías crear [[Módulo:generar-pron/kuz]], tomando como referencia lo que se hizo con otros idiomas afines, por ejemplo [[Módulo:generar-pron/arn]], [[Módulo:generar-pron/yua]] o [[Módulo:generar-pron/gn]] por tirar ejemplos. Sabés programar en Lua? Tenés ya algún algoritmo hecho? Si no puedo ayudarte con gusto, pero necesito que me expliques cómo debe ser. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:45 21 may 2025 (UTC) ::gracias por la respuesta y disposición para ayudar, la verdad es que no sé programar con Lua pero me interesa aprender. Actualmente estoy trabajando con lingüistas que me podrán ayudar a completar la parte técnica, pero igual agradecería tu ayuda. ¿Hay alguna forma de comunicarnos directamente por correo o solo por aquí? ::Cualquier cosa quedo atento [[Usuario:Pcartes|Pcartes]] ([[Usuario discusión:Pcartes|discusión]]) 16:57 21 may 2025 (UTC) :::@[[Usuario:Pcartes|Pcartes]] Prefiero que nos escribamos en este sitio así queda evidencia de todo lo discutido en caso de que futuros usuarios se vean en la necesidad de revisar el módulo por el motivo que fuere. Para no inundar el Café con una discusión irrelevante e innecesaria para el resto, ahora te escribo en tu página de discusión y seguimos por allí. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:22 21 may 2025 (UTC) ::::Un detalle importantes es que no se sabe cómo sonaba el kunza. En particular, se discute mucho qué quiso decir Vaïsse con su descripción de la consonante ck, muy común en el idioma, como en su propio nombre [[ckunsa]] ("nuestro"). ¿Era /q/, /χ/ o algo diferente? No se sabe. Por eso, antes de crear el módulo habria que revisar las reconstrucciones que se puedan haber publicado. Saludos. [[Usuario:Lin linao|Lin linao]] [[Usuario Discusión:Lin linao|¿dime?]] 21:44 2 jun 2025 (UTC) == Etimología de siglas == Hola, copié el módulo etimología a etimología_test para adaptarlo al manejo de siglas, se agrega el parámetro nosep (no separador). :Con parámetro nosep ::Sigla de [[organización#Español|''organización'']] ''de'' ''las'' [[naciones#Español|''naciones'']] [[unidas#Español|''unidas'']] :Sin parámetro nosep ::Sigla de [[organización#Español|''organización'']], ''de'', ''las'', [[naciones#Español|''naciones'']] y [[unidas#Español|''unidas'']] ¿Están de acuerdo en aprobar este cambio para implementarlo en el módulo original? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>mensajes)</sup>]] 21:19 30 may 2025 (UTC) :Pues, creo que es bastaaante raro que las siglas vengan de términos con comas, el único caso que se me viene a la mente es la UNESCO y es una sola. Siento yo que en esos extraños y pocos casos se podría usar el parámetro nl=s y añadir el enlace manual: :* Si esta en Wikipedia, podría enlazarse directamente: :{{etimología|sigla|[[w:United Nations Educational, Scientific and Cultural Organization|United Nations Educational, Scientific and Cultural Organization]]|nl=s}}. :* Enlace a otros términos del Wikcionario: :{{etimología|sigla|[[building]], [[antenna]]-tower, [[span]], [[earth]]|nl=s}}. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 22:45 30 may 2025 (UTC) :Ídem a Raos, yo tampoco entiendo cuál era el problema original. Podrías mostrar algún ejemplo en donde esa modificación sea relevante? Yo creo que si la sigla es de varias palabras sería más bien un compuesto acronímico (actualmente clasificado como compuesto). [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:34 31 may 2025 (UTC) ::De acuerdo --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:56 31 may 2025 (UTC) :::Entiendo que el "de acuerdo" quiere decir que la propuesta ha sido retirada. Elimino entonces [[Plantilla:etimologíapba]] y [[Módulo:etimología test]] para que no figuren en el espacio principal. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:24 7 jun 2025 (UTC) ::::Si gracias! [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:37 7 jun 2025 (UTC) == Noticias técnicas: 2025-23 == <section begin="technews-2025-W23"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/23|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Extension:Chart|extensión Chart]] ya está disponible en todas las wikis de Wikimedia. Los editores pueden usar esta nueva extensión para crear visualizaciones de datos interactivas como gráficos de barra, línea y torta. La extensión está diseñada para reemplazar muchos de los usos de la [[mw:Special:MyLanguage/Extension:Graph|extensión antigua]]. '''Actualizaciones para editores''' * Ahora es más fácil configurar las citas automáticas para tu wiki con el [[mw:Special:MyLanguage/Citoid/Enabling Citoid on your wiki|generador de citas]] del editor visual. Los administradores pueden establecer una plantilla por defecto usando <code dir=ltr>_default</code> en la página local <bdi lang="en" dir="ltr">[[MediaWiki:Citoid-template-type-map.json]]</bdi> ([[mw:Special:Diff/6969653/7646386|un ejemplo de diff]]). Establecer este valor por defecto también ayudará a preparar tus configuraciones existentes para el futuro cuando se agreguen [[phab:T347823|nuevos tipos de elementos]]. Aún puedes establecer plantillas para tipos individuales, ya que estas tendrán preferencia sobre la plantilla por defecto. [https://phabricator.wikimedia.org/T384709] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:20}} {{PLURAL:20|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * A partir de la semana del 2 de junio, los bots que inicien sesión usando <code dir=ltr>action=login</code> o <code dir=ltr>action=clientlogin</code> fallarán con mayor frecuencia. Esto se debe a la mejora en las protecciones contra ingresos sospechosos. Los bots que usen [[mw:Special:MyLanguage/Manual:Bot passwords|contraseñas de bot]] o un mecanismo de autenticación sin inicio de sesión como [[mw:Special:MyLanguage/OAuth/Owner-only consumers|OAuth]] no se verán afectados. Si tu bot no está usando uno de esos mecanismos, deberías actualizarlo; el uso de <code dir=ltr>action=login</code> sin una contraseña de bot fue marcado como obsoleto [[listarchive:list/wikitech-l@lists.wikimedia.org/message/3EEMN7VQX5G7WMQI5K2GP5JC2336DPTD/|en 2016]]. Para la mayoría de los bots, esto solo requiere cambiar la contraseña que usa el bot. [https://phabricator.wikimedia.org/T395205] * A partir de esta semana, las wikis de Wikimedia permitirán características de ES2017 en código JavaScript para código oficial, dispositivos y scripts de usuario. La característica más visible de ES2017 es la sintaxis de <bdi lang="zxx" dir="ltr"><code>async</code>/<code>await</code></bdi>, que permite un código más fácil de leer. Hasta esta semana, la plataforma solo permitía hasta ES2016, y unos meses antes, hasta ES2015. [https://phabricator.wikimedia.org/T381537] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.4|MediaWiki]] '''Reuniones y eventos''' * Las solicitudes de becas para participar en la [[m:Special:MyLanguage/GLAM Wiki 2025|GLAM Wiki Conference 2025]] ya están abiertas. La conferencia se realizará del 30 de octubre al 1 de noviembre en Lisboa, Portugal. Las personas que contribuyen con GLAM y carecen de los medios para participar pueden [[m:Special:MyLanguage/GLAM Wiki 2025/Scholarships|postular aquí]]. Las solicitudes de becas cierran el 7 de junio. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/23|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W23"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:55 2 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28819186 --> == Noticias técnicas: 2025-24 == <section begin="technews-2025-W24"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/24|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * El [[mw:Special:MyLanguage/Trust and Safety Product|equipo de Confianza y Seguridad de Producto]] está terminando el trabajo necesario para implementar [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] en las Wikipedias más grandes a finales de este mes. El equipo ha trabajado con los stewards y otros usuarios con permisos extendidos para predecir y responder a los diversos casos de uso que podrían aparecer en las wikis más grandes, así los integrantes de las comunidades pueden continuar el patrullaje y la moderación de las cuentas temporales. Esta es la segunda de tres fases de implementación; la última se realizará, al menos, en septiembre. Para más información sobre los desarrollos recientes de este proyecto, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|lee esta actualización]]. Si tienes comentarios o preguntas, escribe un mensaje en [[mw:Talk:Trust and Safety Product/Temporary Accounts|la página de discusión]], y [[m:Event:CEE Catch up Nr. 10 (June 2025)|únete a CEE Catch Up]] este martes. '''Actualizaciones para editores''' * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] La característica de [[mw:Special:MyLanguage/Help:Watchlist expiry|expiración de la lista de seguimiento]] permite a los editores vigilar páginas por un tiempo. Después de este período, la página se elimina automáticamente de la lista de seguimiento. A partir de esta semana, puedes establecer tu preferencia predeterminada para hacer seguimiento de páginas. Las [[Special:Preferences#mw-prefsection-watchlist-pageswatchlist|preferencias]] también te permiten establecer diversos tiempos de seguimiento para las ediciones en páginas existentes, páginas creadas y cuando se revierte la página. [https://phabricator.wikimedia.org/T265716] [[File:Talk pages default look (April 2023).jpg|thumb|alt=Captura de pantalla de las mejoras visuales realizadas en las páginas de discusión|Ejemplo de una página de discusión con el nuevo diseño, en francés.]] * La apariencia de las páginas de discusión cambiará en la mayoría de las Wikipedias. Algunas wikis, como las que se mencionan en [[m:Special:MyLanguage/Tech/News/2024/19|este enlace]], ya han recibido este rediseño, mientras que [[phab:T379264|otras]] lo recibirán más tarde. Puedes leer más sobre estos cambios en [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|''Diff'']]. Es posible desactivar esta función en tus [[Special:Preferences#mw-prefsection-editing-discussion|preferencias de usuario]], en la sección "{{int:discussiontools-preference-visualenhancements}}". [https://phabricator.wikimedia.org/T319146][https://phabricator.wikimedia.org/T392121] * Los usuarios con permisos extendidos específicos (incluyendo administradores, burócratas, comprobadores de usuarios, supresores y ''stewards'') podrán [[phab:T358853|acceder temporalmente a la dirección IP]] de todas las cuentas temporales por un tiempo limitado para combatir vandalismos recurrentes. Esta característica fue solicitada por los ''stewards''. [https://phabricator.wikimedia.org/T386492] * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático seguirán implementando [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo en varias Wikipedias más. Este filtro utiliza el modelo Revert Risk, creado por el equipo de Investigación, para resaltar las ediciones que probablemente serán revertidas y así ayudar a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. Esta característica se desplegará en las siguientes Wikipedias: {{int:project-localized-name-afwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-cywiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-hawwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-iswiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-kkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-simplewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-trwiki/es}}. La implementación continuará en las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:27}} {{PLURAL:27|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * Se les pide a los editores activos del Filtro Anti Abusos en Meta-Wiki y en las Wikipedias grandes que actualicen los filtros para que sean compatibles con las cuentas temporales. Un enlace a las instrucciones y una lista privada de filtros que necesitan verificación están disponibles en Phabricator en [[phab:T369611|este enlace]]. * Los módulos de Lua ahora tienen acceso al nombre de la página que tiene asociada una miniatura de imagen, y en [https://gerrit.wikimedia.org/g/operations/mediawiki-config/+/2e4ab14aa15bb95568f9c07dd777065901eb2126/wmf-config/InitialiseSettings.php#10849 algunas wikis] también a la información de evaluación del Wikiproyecto. Esto es posible usando dos nuevas propiedades en [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#added-by-extensions|mw.title objects]], llamadas <code dir=ltr>pageImage</code> y <code dir=ltr>pageAssessments</code>. [https://phabricator.wikimedia.org/T131911][https://phabricator.wikimedia.org/T380122] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.5|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W24"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:16 10 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28846858 --> == Categoría: Personajes Bíblicos o Antropónimos Bíblicos == ¿Puedo crear esta categoria? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:30 12 jun 2025 (UTC) :Sin una buena justificación, yo estoy en contra por los mismos motivos que en [[Wikcionario:Café/2020 04#Francisco Franco]]. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:17 12 jun 2025 (UTC) ::Por cierto, ya habíamos borrado [[:Categoría:Personajes bíblicos]] previamente, a raíz de aquella discusión. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:21 12 jun 2025 (UTC) :Los nombres propios quedan fuera del alcance en general, salvo nombres o apellidos genéricos que no referencien a ninguna persona en particular, o sinó los nombres de ciudades o topónimos. Fuera de eso, otros nombres particulares conciernen solo a Wikipedia. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:30 12 jun 2025 (UTC) ::Aca estoy hablando de entradas como [[Adán]], [[Eva]], [[Moisés]] y solo agregar una clasificación. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 21:00 12 jun 2025 (UTC) :::¿Qué clasificación? Estás lanzando una propuesta imprecisa y poco estudiada: justo en esas tres entradas que citas ya había acepciones bíblicas y fueron eliminadas. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 22:19 12 jun 2025 (UTC) ::::Agrega la categoría Antropónimos Bíblicos, en los nombres correspondientes. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 04:32 13 jun 2025 (UTC) :::::Otro motivo para no hacerlo es que me opongo a las "categorías silenciosas", fuera de {{ep|csem}} u otra plantilla similar. En tu caso, de acuerdo a mis esquemas una categoría como esa debería ir en {{ep|csem}} para que aparezca el supuesto campo semántico antes de la definición del nombre propio, lo que incluso hace que quede peor. Pero tranquilo que hay proyectos para eso. En Wikipedia [[w:Categoría:Personajes_del_Nuevo_Testamento|ya lo hicieron]]. Aunque todavía les faltan algunos, como [[w:Tomás el Apóstol]], que justo es mi favorito xd. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:47 13 jun 2025 (UTC) ::::::Opino similar, solo estaría de acuerdo sí se agregara la acepción que explica su significado bíblico: ::::::;1 Religión: Primer hombre según la Biblia. ::::::;2: ''Nombre de pila de varón''. ::::::Y que Antropónimos bíblicos sea una etiqueta que se muestre como Religión o Cristrianismo o algo así. ::::::Pero si ya se había acordado que entradas de ese estilo no van aquí, entonces pues no. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 01:07 16 jun 2025 (UTC) == Vote now in the 2025 U4C Election == <div lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{Int:Please-translate}} Eligible voters are asked to participate in the 2025 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2025|2025 Election information page]]. The vote closes on 17 June 2025 at [https://zonestamp.toolforge.org/1750161600 12:00 UTC]. Please vote if your account is eligible. Results will be available by 1 July 2025. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 23:01 13 jun 2025 (UTC) </div> <!-- Mensaje enviado por Usuario:Keegan (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28848819 --> == Noticias técnicas: 2025-25 == <section begin="technews-2025-W25"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/25|Traducciones en varios idiomas]] están disponibles. '''Actualizaciones para editores''' * Puedes [https://wikimediafoundation.limesurvey.net/359761?lang=en nominar tus herramientas favoritas] para la sexta edición del [[m:Special:MyLanguage/Coolest Tool Award|Coolest Tool Award]]. Las nominaciones son anónimas y estarán abiertas hasta el 25 de junio. Puedes reutilizar el formulario para enviar múltiples nominaciones. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:33}} {{PLURAL:33|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.6|MediaWiki]] '''A fondo''' * El personal de la Fundación y los voluntarios técnicos utilizan las API de Wikimedia para construir herramientas, aplicaciones, características e integraciones que mejoran las experiencias de los usuarios. Durante los próximos años, el equipo de Interfaces de MediaWiki invertirá en API web de Wikimedia (HTTP) para satisfacer mejor las necesidades técnicas de los voluntarios y proteger la infraestructura de Wikimedia de posibles abusos. Puedes [https://techblog.wikimedia.org/2025/06/12/apis-as-a-product-investing-in-the-current-and-next-generation-of-technical-contributors/ leer más sobre sus planes para evolucionar las API en esta publicación de Techblog]. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W25"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:38 16 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Convocatoria a Candidaturas para la Junta Directiva de la Fundación Wikimedia, 2025 == <section begin="announcement-content" /> :''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Announcement/Call for candidates|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2025/Announcement/Call for candidates}}&language=&action=page&filter= {{int:please-translate}}]</div> Saludos, La [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|convocatoria a candidaturas para la selección 2025 de Miembros de la Junta Directiva de la Fundación Wikimedia se encuentra abierta]] desde el 17 de junio de 2025 hasta el 2 de julio de 2025 a horas 11:59 UTC [1]. La Junta Directiva supervisa el trabajo de la Fundación Wikimedia, y cada Miembro cumple un periodo de funciones de tres años [2]. El cargo es voluntario. Este año, la comunidad Wikimedia votará desde fines de agosto hasta el mes de septiembre de 2025 para ocupar dos (2) puestos en la Directiva de la Fundación. ¿Podría usted, o alguien a quien usted conozca, tener lo que se requiere para unirse a la Junta Directiva de la Fundación Wikimedia? [3] Puede aprender más acerca de los requisitos para postularse a estos puestos de liderazgo, además del modo de presentar una candidatura en [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidate application|esta página de Meta-wiki]], para sí o para alguien que usted considere que podría presentarse a la elección de este año. Atentamente, Abhishek Suryawanshi<br /> Director del Comité Electoral A nombre del Comité Electoral y del Comité de Gobernanza [1] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Call_for_candidates [2] https://foundation.wikimedia.org/wiki/Legal:Bylaws#(B)_Term. [3] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Resources_for_candidates<section end="announcement-content" /> [[Usuario:MediaWiki message delivery|MediaWiki message delivery]] ([[Usuario discusión:MediaWiki message delivery|discusión]]) 17:44 17 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:RamzyM (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28866958 --> == Importación de contenido desde en.wikitioanry == Estimados, Tengo una aplicación desarrollada en Java que utiliza la cuenta RoboJ2. En los últimos días, la he empleado para importar contenidos desde en.wiktionary siguiendo este proceso: Entrada de datos: El programa recibe como parámetro un archivo de texto que elaboro manualmente, donde se listan las entradas a procesar. Verificación: El sistema revisa si cada entrada existe en en.wiktionary y no está presente en es.wiktionary. Transformación: El programa analiza el wikitexto de la entrada y lo adapta al formato utilizado en es.wiktionary. Las entradas que he selecionado ahora han sido antróponimos y plurales de palabras que encontre aquí: [https://es.wiktionary.org/wiki/Ap%C3%A9ndice:Palabras_m%C3%A1s_frecuentes_del_ingl%C3%A9s Palabras frecuentes] Entradas generadas hasta ahora: [https://es.wiktionary.org/wiki/Especial:Contribuciones/RoboJ2 Entradas generadas]. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 22:06 18 jun 2025 (UTC) :@[[Usuario:Cvmontuy|Cvmontuy]] No tengo motivos para oponerme PERO: :* Desearía que se respete completamente el formato nuevo de la guía de estilo. O sea, las formas flexivas van con el título de nivel 3 "Forma flexiva" y luego en el nivel 4 va el título de Forma sustantiva, adjetiva, etc. Lo de poner directamente el título de nivel 4 en el nivel 3 es una costumbre antigua que la seguimos tolerando solo porque no hice una migración masiva de todas las páginas con formas flexivas y como no es prioridad hacerlo ahora mismo no es un error grave pero las páginas nuevas no deberían ser creadas con ese formato. :* Las palabras se agregan completamente o no se agregan, pero no crees más esbozos con tu bot, me refiero a lo que aparece en [[sends]] o en [[reflections]]. :* Podrías compartir el repositorio de la app? Podríamos extenderlo a más idiomas en un futuro. ::@[[Usuario:Tmagc|Tmagc]],@[[Usuario:Peter Bowman|Peter Bownman]], aqui les dejo el repositorio [https://github.com/cvmontuy1/WikiBotJ316 WikiBotJ316], no es un trabajo profesional pero desde mi punto de vista funciona, saludos --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:50 24 jun 2025 (UTC) :[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:00 19 jun 2025 (UTC) ::@[[Usuario:Tmagc|Tmagc]] ::::*Si revisas las entradas creadas, verás que están tal como mencionas: en el nivel 3 aparece “Forma flexiva” y en el nivel 4, “Forma sustantiva/verbal”. ::::*Se ha utilizado la plantilla <nowiki>{{esbozo}}</nowiki> porque la fuente de información no es perfecta ni completa, y el programa tampoco lo es. Reconoce ciertas expresiones regulares para extraer los datos, pero no es tan avanzado como para analizar el contenido de forma más profunda. ::::*Todas las entradas creadas siguen la guía de estilo y todas incluyen al menos una definición y su categoría gramatical y la prounciación si esta publicad en el en.wiktionary. Las entradas creadas son antropónimos y plurales, por lo que en la mayoria no hay mucho más que añadir en ellas. ¿O qué criterio de aceptación considerarías necesario? Más adelante, Si no lo prohiben, tal vez integre entradas con terminaciones adverbiales (-ly) y las formas verbales (-ed, -ing). ::::*Creo que es más sencillo y, por lo tanto, útil comenzar con un esbozo que desde cero. ::::*En el proyecto tenemos cientos de entradas como [[burocratizar]] o [[catatonizar]], que prácticamente están vacías. Las que yo aporto siempre incluyen al menos una definició. y muchas entradas que tenemos en el proyecto iniciaron como un esbozo, o queremos ya prohibiir los esbozos oficialmente?, y entonces debemos elimianr la plantilla correspondiente? ::::*No he creado un espacio en gitlab pero espero la proxima semana hacerlo y compartir el código correspondiente. ::::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:55 19 jun 2025 (UTC) :::@[[Usuario:Cvmontuy|Cvmontuy]] :::* Como decía, lo de los esbozos que están ahora creados fue por una mala decisión que se tomó en su momento, de las tantas que han perjudicado al proyecto pero creeme que si hubiera estado en su momento no lo habría permitido. Así y todo, no sigamos propagando el mal, no creemos más esbozos innecesariamente. Si la aplicación tiene problemas para parsear las entradas de en.wikt, entonces deberán hacerse las pruebas que sean necesarias hasta que funcione aceptable. :::* No es necesario extraer toda la información, puede que hayan cosas que no aplican para nuestro sitio. Pero las etimologías y las definiciones deberían aparecer. :::* Yo me centraría en agregar formas canónicas; las formas flexivas en todo caso las podríamos crear sino con la información de las entradas que tenemos en nuestro Wikcionario. :::* En lugar de luchar innecesariamente con las expresiones regulares, deberías usar una biblioteca que parsee wikitexto. Yo implementé un algoritmo en Python para parsear las entradas en es.wikt usando la de [https://github.com/5j9/wikitextparser 5j9]. Podríamos crear un repositorio para que te comparta lo que tengo y trabajar en conjunto, pero nunca tuve éxito con Java. [https://www.mediawiki.org/wiki/Alternative_parsers Acá hay una lista con otras implementaciones]. :::[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 05:24 19 jun 2025 (UTC) ::::Hola. Mi bot está escrito en Java y tengo un parser específico para eswiktionary que no funciona mal, está probado desde 2015 ([https://github.com/PeterBowman/wikibot/tree/master/wikibot/src/main/java/com/github/wikibot/parsing/eswikt fuente]; la pega es que el código es un desastre infumable). Con respecto a lo que se menciona de [[burocratizar]] y otras entradas vacías (sin definiciones), mi opinión es que no se deberían haber creado, y estaría a favor de borrarlas. No colocaría {{ep|esbozo}} en aquellas entradas importadas que sean simples formas flexivas; lo único que se puede hacer con esas plantillas es quitarlas directamente (aunque coincido con Tmagc en que preferiría usar la información de eswiktionary en lugar de importar/convertir). Por otro lado, permiten que un usuario humano las revise a posteriori para verificar que el bot haya funcionado bien... Para conjugar ambas opciones, yo propondría usar una plantilla de aviso diferente, específica para páginas importadas por bot que requieran de revisión manual. Algo como {{ep|importado}}, pero puntualizando que se requiere de revisión más que adaptación a nuestro formato. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 08:44 19 jun 2025 (UTC) ::*El programa desarrollado está actualmente diseñado para importar antropónimos y plurales. Toma del en.wiktionary la información de pronunciación y determina si el término es masculino, femenino, ambos, o si se trata de un hipocorístico. En el caso de los plurales, verifica si la palabra corresponde a un sustantivo, una forma verbal, o ambas. Esta información, para este tipo de entradas, no está disponible en el es.wiktionary. ::*Estoy de acuerdo en que sería más útil generar entradas de las formas canónicas o basarse directamente en el es.wiktionary, pero por ahora esas tareas no están dentro del alcance de este programa. Quizá más adelante pueda trabajar en ese sentido. ::*Gracias por compartir las librerías; no sabía que existían. Las revisaré con calma más adelante. Revisé brevemente tu programa, @Peter Bowman, y me pareció bien estructurado y fácil de entender. El mecanismo de parseo que usaste es muy similar al que empleo en el programa que estamos discutiendo ahora. El objetivo de identificar plantillas en en.wiktionary y analizarlas es técnicamente sencillo, pero los contenidos no siempre usan plantillas y hay mucho texto libre. En estos casos, más que un parser, lo que realmente ayudaría sería integrar una IA para la traducción. No lo he hecho aún, y tampoco sé si eso sería legalmente válido. ::Por favor, intentemos concluir: ::*Si en lugar de poner “Nombre de varios lugares”, el programa indica explícitamente textos como “Ciudad de...”, y además agrega la etimología cuando esta se encuentra expresada mediante plantilas en el en.wiktionary, ¿con estos cambios el programa obtiene autorización para seguir operando? ::*En cuanto a sustituir la plantilla <nowiki>{{esbozo}}</nowiki>, existe la plantilla {{ep|creado_por_bot}}. ¿Debo usar esa? ::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:46 19 jun 2025 (UTC) == Noticias técnicas: 2025-26 == <section begin="technews-2025-W26"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/26|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático continuarán con el lanzamiento de [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo al tercer y último grupo de Wikipedias. Este filtro utiliza el modelo de Riesgo de Reversión (Revert Risk), el cual fue creado por el equipo de Investigación, y destaca las ediciones que posiblemente deban ser revertidas para ayudar así a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. La característica será lanzada en las siguientes Wikipedias: {{int:project-localized-name-azwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-lawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mlwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mrwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-nnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-pawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-swwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tlwiki/es}}. El lanzamiento continuará durante las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] '''Actualizaciones para editores''' * La semana pasada, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] se implementaron en las Wikipedias en checo, coreano y turco. Esta semana y la próxima, los lanzamientos se realizarán en Wikipedias más grandes. [[mw:Talk:Trust and Safety Product/Temporary Accounts|Comparte tus ideas]] sobre el proyecto. [https://phabricator.wikimedia.org/T340001] * Durante esta semana, el equipo de Edición lanzará [[mw:Special:MyLanguage/Help:Edit check#Multi check|Multi Check]] en todas las Wikipedias (excepto la Wikipedia en inglés). Esta característica muestra múltiples [[mw:Special:MyLanguage/Help:Edit check#Reference check|verificaciones de referencias]] junto a la experiencia de edición. Esto anima a los usuarios a añadir citas cuando agregan varios párrafos a un artículo de Wikipedia. Esta característica estuvo disponible como una prueba A/B. [https://analytics.wikimedia.org/published/reports/editing/multi_check_ab_test_report_final.html#summary-of-results Las pruebas mostraron] que los usuarios a quienes se les mostraban las múltiples verificaciones eran 1.3 veces más propensos a añadir una referencia a su edición, y su edición era 34.7% menos propensa a ser revertida. [https://phabricator.wikimedia.org/T395519] * Unas pocas páginas deben ser renombradas debido a actualizaciones de software y para ajustarse a estándares Unicode más recientes. Todos estos cambios están relacionados con las mayúsculas en los títulos. Aproximadamente 71 páginas y 3 archivos serán renombrados en 15 wikis; la lista completa se encuentra en [[phab:T396903|esta tarea]]. Los desarrolladores renombrarán estas páginas la próxima semana y solucionarán las redirecciones y los enlaces de archivos incrustados unos minutos después mediante una actualización de la configuración del sistema. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:24}} {{PLURAL:24|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se arregló un error que había hecho que las páginas se desplazaran hacia arriba cuando se selecciona texto cerca de la parte superior. [https://phabricator.wikimedia.org/T364023] '''Actualizaciones para los colaboradores técnicos''' * Ahora, los editores pueden usar los módulos de Lua para filtrar y transformar datos tabulares y utilizarlos con [[mw:Special:MyLanguage/Extension:Chart|Extension:Chart]]. Esto puede ser empleado para diversos objetivos, como seleccionar un subconjunto de filas o columnas de los datos, convertir entre unidades, realizar procesamiento estadístico y otras transformaciones útiles. [[mw:Special:MyLanguage/Extension:Chart/Transforms|Lee más para obtener información sobre cómo usar las transformaciones]]. [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Chart/Project/Updates] * La variable <code dir=ltr>all_links</code> en el [[Special:AbuseFilter|Filtro Antiabusos]] ahora se llama <code dir=ltr>new_links</code> para ser consistente con las otras variables. Los usos anteriores seguirán funcionando. [https://phabricator.wikimedia.org/T391811] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.7|MediaWiki]] '''A fondo''' * El último [[mw:Special:MyLanguage/Growth/Newsletters/34|Boletín de Growth]] está disponible. Incluye: las actualizaciones recientes de la tarea "Agregar un enlace", dos nuevas características de participación para los recién llegados y actualizaciones de la configuración comunitaria. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W26"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:21 23 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Noticias técnicas: 2025-27 == <section begin="technews-2025-W27"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/27|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|extensión CampaignEvents]] ya está habilitada en todas las Wikipedias. Esta extensión facilita la organización y participación en actividades colaborativas, como editatones y Wikiproyectos, en las wikis. La extensión incluye tres características: [[m:Special:MyLanguage/Event Center/Registration|Registro al evento]], [[m:Special:MyLanguage/CampaignEvents/Collaboration list|Lista de colaboración]] y [[m:Campaigns/Foundation Product Team/Invitation list|Lista de invitaciones]]. Para solicitar la extensión para tu wiki, visita la [[m:Special:MyLanguage/CampaignEvents/Deployment status#How to Request the CampaignEvents Extension for your wiki|página de información de Despliegues]]. '''Actualizaciones para editores''' * Los mantenedores del Filtro Antiabusos ahora pueden [[mw:Special:MyLanguage/Extension:IPReputation/AbuseFilter variables|evaluar la reputación de la IP]] en los [[mw:Special:MyLanguage/Extension:AbuseFilter|Filtros]]. Los datos de la reputación de la IP son información sobre los proxies y VPN asociados a la dirección IP del usuario. Esta información no se muestra públicamente y no se genera para acciones realizadas por cuentas registradas. [https://phabricator.wikimedia.org/T354599] * El contenido oculto que se encuentra en [[mw:Special:MyLanguage/Manual:Collapsible elements|partes colapsables de las wikipáginas]] ahora se mostrará cuando alguien busque en la página usando la función "Buscar en la página" del navegador (Ctrl+F o ⌘F) en los navegadores compatibles. [https://phabricator.wikimedia.org/T327893][https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/hidden#browser_compatibility] * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] Una nueva función, llamada [[mw:Special:MyLanguage/Help:TemplateData/Template discovery|Plantillas Favoritas]], se lanzará a finales de esta semana en todos los proyectos (excepto en la Wikipedia en inglés, que la recibirá la próxima semana), tras una fase piloto en las Wikipedias en polaco y árabe, y los Wikisources en italiano e inglés. Esta característica ofrecerá una mejor manera de descubrir y utilizar plantillas mediante el cuadro de diálogo de plantillas, permitiendo a los usuarios añadirlas a una "lista especial de favoritos". La función es compatible tanto con el Editor Visual como con el editor de Wikitexto. Esta funcionalidad es un [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|deseo de la comunidad]]. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:31}} {{PLURAL:31|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se solucionó un error que causaba que algunas Notificaciones se enviaran varias veces. [https://phabricator.wikimedia.org/T397103] '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.8|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W27"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:40 30 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28917415 --> == Modificaciones propuestas para pron-graf == Hola, dos modificaciones que estoy considerando: * Estaba pensando en que el sistema de doble índice puede llevar a confusiones ya que contrasta con el resto de las plantillas en donde el índice está al final pero en esta queda al principio. Quiero decir, si no necesito agregar ninguna subvariante y tengo 3 pronunciaciones lo que debería hacer (sin módulo obviamente) sería <nowiki>|1fone</nowiki>, <nowiki>|2fone</nowiki>, <nowiki>|3fone</nowiki>. Sin embargo, por lo menos a mí me ha pasado que escribí sin querer <nowiki>|fone1</nowiki>, <nowiki>|fone2</nowiki>, <nowiki>|fone3</nowiki>. A diferencia del resto de plantillas en donde se avanza naturalmente con el índice pospuesto, en esta hay que avanzar con el índice antepuesto. La documentación sobre este detalle me parece que sería inevitablemente engorrosa. Lo que propongo es simplificar a un único índice pospuesto en lugar de antepuesto para variantes principales, y las subvariantes separarlas con punto y coma. :Tomando como ejemplo [[withstand]], pasaríamos de esto: :<code><nowiki>{{pron-graf|leng=en |pron=Conservative Received Pronunciation|1fono1=wɪðˈstænd|1fono2=wɪθˈstænd |2pron=General American, Standard Canadian|2fono=wɪðˈstænd|2fone2=wɪðˈstɛənd|2fnota2=/æ/ raising|2audio2=en-us-withstand.ogg|2aunota2=California|2audio3=LL-Q1860 (eng)-Wodencafe-withstand.wav|2aunota3=Texas|2fone4=wɪðˈstɛːnd|2fnota4=/æ/ raising|2audio5=LL-Q1860 (eng)-Grendelkhan-withstand.wav|2aunota5=Connecticut|2fono6=wɪθˈstænd|2fone7=wɪθˈstɛənd|2fnota7=/æ/ raising|2audio7=LL-Q1860 (eng)-Semperosculto-withstand.wav|2aunota7=EE. UU.|2fone8=wɪθˈstɛːnd|2fnota8=/æ/ raising|2audio8=LL-Q1860 (eng)-Assorted-Interests-withstand.wav|2aunota8=Ciudad de Nueva York |3pron=Australia|3fono1=wɪðˈstænd|3fone2=wɪðˈsteːnd|3fnota2=/æ/ raising|3fono3=wɪθˈstænd|3fone4=wɪθˈsteːnd|3fnota4=/æ/ raising |ls=2 }}</nowiki></code> :A esto: :<code><nowiki>{{pron-graf|leng=en |pron1=Conservative Received Pronunciation|fono1=wɪðˈstænd;wɪθˈstænd |pron2=General American, Standard Canadian|fono2=wɪðˈstænd;;;;;wɪθˈstænd|fone2=;wɪðˈstɛənd;;wɪðˈstɛːnd;;;wɪθˈstɛənd;wɪθˈstɛːnd|fnota2=;/æ/ raising;;/æ/ raising;;;/æ/ raising;/æ/ raising|audio2=;en-us-withstand.ogg;LL-Q1860 (eng)-Wodencafe-withstand.wav;;LL-Q1860 (eng)-Grendelkhan-withstand.wav;;LL-Q1860 (eng)-Semperosculto-withstand.wav;LL-Q1860 (eng)-Assorted-Interests-withstand.wav|aunota2=;California;Texas;;Connecticut;;EE. UU.;Ciudad de Nueva York |pron3=Australia|fono3=wɪðˈstænd;;wɪθˈstænd|fone3=;wɪðˈsteːnd;;wɪθˈsteːnd|fnota3=;/æ/ raising;;/æ/ raising |ls=2 }}</nowiki></code> :Lo bueno es que simplificaría la documentación y la consistencia entre sistemas usados en las distintas plantillas. Lo malo es que no se podrían añadir pronunciaciones o archivos con punto y coma, algo que de todas formas no lo he visto en el sitio hasta la fecha. Bueno, eso aparte de que deberían cambiar los hábitos quienes agregan transcripciones frecuentemente. El resto seguiría igual, es decir, esos parámetros (<nowiki>|fone</nowiki>, <nowiki>|fono</nowiki>, <nowiki>|fgraf</nowiki>, <nowiki>|fnota</nowiki>, <nowiki>|audio</nowiki>, <nowiki>|aunota</nowiki>) seguirían funcionando como un arreglo doble. Las páginas afectadas son aproximadamente 5000, casi todas del inglés (otros idiomas son prácitamente irrelevantes ya que en su mayoría se pueden automatizar). La migración la podría hacer en unos pocos días. * Después, añadir un nuevo parámetro que se trate de homófonos pero a nivel de pronunciación, es decir, sería un arreglo doble a completar con los homófonos que lo son solo respecto de una pronunciación específica, por ejemplo, si es solo homófono en la pronunciación seseante, se agregaría al lado de la transcripción que la palabra en cuestión es homófona en lugar de aparecer al final como homófono a nivel global. En principio convivirían ambos parámetros, al menos por un tiempo ya que la migración completa de uno al otro sería mucho más lenta y difícil que lo anterior. Qué nombre quieren ponerle? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 22:37 2 jul 2025 (UTC) :La verdad es que el sistema que existe lo considero muy cómodo ya que el número antepuesto representa la fila y el pospuesto, la columna. En el caso de los homófonos, se entiende lo mismo, es decir, en la misma fila aparecen todos los homófonos. Si el número estuviese delante se entendería que están hacia abajo, en distintas filas. :Por otra parte, se debe considerar que en Wikcionario (español) tenemos menos de 35 colaboradores activos. Un cambio como el propuesto podría ocasionar que varios de ellos se vayan. Como ejemplo, recuerdo que poco después de comenzar a agregar las pronunciaciones AFI en el diccionario alemán, me exigieron que dejara de agregar los puntos que indican la separación de las sílabas. Como respondí, dejando de colaborar en ese diccionario. Ahora, cuando pasaron varios años, yo mismo dejé de poner los puntos por ser redundante (cuando se conocen las reglas de silabificación del inglés). Lo malo desde el punto de vista de dicho diccionario es que no volví, porque tendría que volver a estudiar como editar bajo su estructura y convenciones. :En cuanto a incorporar homófonos por pronunciación, se puede hacer con un retoque al sistema actual. De hecho, sería mejor que pudiesen colocarse en cada fila y por columna ya que, en inglés al menos, los homófonos dependen usualmente del dialecto. Para subsanar este problema, se recurre a colocar hnota para cada caso. Así por ejemplo, en [[bear]], al lado de los homófonos aparecen unas hnotas (difíciles de tomar en cuenta ya que están al final de la página) que indican con cuales dialectos se da la homofonía. Además, es frecuente que se escriba "algunas pronunciaciones" y queda al lector determinar cuales son esas pronunciaciones comparando las de la palabra que está viendo con las del homófono sugerido. [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 00:45 3 jul 2025 (UTC) dxe6dussepbufhrm8bmbs7yw504tpkl 5823420 5823374 2025-07-03T02:39:11Z MABot 70592 Bot: archivo de 2 hilos (con una antigüedad de 30 días) en [[Wikcionario:Café/2025 06]] 5823420 wikitext text/x-wiki <!-- Inicio Encabezado del café, aviso, información histórica y información de archivado --> <div style="text-align: center;"> {{/Aviso}} {{/Histórico}} </div> {{atajo|WN:C}} [[Categoría:Wikcionario:Café]] <!-- Fin del Encabezado del café --> <!-- Inicio configuración robot archivado; no tocar si no se sabe lo que se hace --> {{Usuario:MABot/config |archive = Wikcionario:Café/%(year)d %(month)02d |algo = old(30d) |counter = 1 |archiveheader = {{Archivo}} }} <h1>{{MONTHNAME|{{PREVIOUSMONTH}}}} de {{PREVIOUSMONTH.YEAR}}</h1> <div class="mw-archivedtalk"> {{/{{PREVIOUSMONTH.YEAR}} {{PREVIOUSMONTH}}}} </div> <h1>Actual</h1> == Etimología de siglas == Hola, copié el módulo etimología a etimología_test para adaptarlo al manejo de siglas, se agrega el parámetro nosep (no separador). :Con parámetro nosep ::Sigla de [[organización#Español|''organización'']] ''de'' ''las'' [[naciones#Español|''naciones'']] [[unidas#Español|''unidas'']] :Sin parámetro nosep ::Sigla de [[organización#Español|''organización'']], ''de'', ''las'', [[naciones#Español|''naciones'']] y [[unidas#Español|''unidas'']] ¿Están de acuerdo en aprobar este cambio para implementarlo en el módulo original? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>mensajes)</sup>]] 21:19 30 may 2025 (UTC) :Pues, creo que es bastaaante raro que las siglas vengan de términos con comas, el único caso que se me viene a la mente es la UNESCO y es una sola. Siento yo que en esos extraños y pocos casos se podría usar el parámetro nl=s y añadir el enlace manual: :* Si esta en Wikipedia, podría enlazarse directamente: :{{etimología|sigla|[[w:United Nations Educational, Scientific and Cultural Organization|United Nations Educational, Scientific and Cultural Organization]]|nl=s}}. :* Enlace a otros términos del Wikcionario: :{{etimología|sigla|[[building]], [[antenna]]-tower, [[span]], [[earth]]|nl=s}}. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 22:45 30 may 2025 (UTC) :Ídem a Raos, yo tampoco entiendo cuál era el problema original. Podrías mostrar algún ejemplo en donde esa modificación sea relevante? Yo creo que si la sigla es de varias palabras sería más bien un compuesto acronímico (actualmente clasificado como compuesto). [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:34 31 may 2025 (UTC) ::De acuerdo --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:56 31 may 2025 (UTC) :::Entiendo que el "de acuerdo" quiere decir que la propuesta ha sido retirada. Elimino entonces [[Plantilla:etimologíapba]] y [[Módulo:etimología test]] para que no figuren en el espacio principal. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:24 7 jun 2025 (UTC) ::::Si gracias! [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:37 7 jun 2025 (UTC) == Noticias técnicas: 2025-24 == <section begin="technews-2025-W24"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/24|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * El [[mw:Special:MyLanguage/Trust and Safety Product|equipo de Confianza y Seguridad de Producto]] está terminando el trabajo necesario para implementar [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] en las Wikipedias más grandes a finales de este mes. El equipo ha trabajado con los stewards y otros usuarios con permisos extendidos para predecir y responder a los diversos casos de uso que podrían aparecer en las wikis más grandes, así los integrantes de las comunidades pueden continuar el patrullaje y la moderación de las cuentas temporales. Esta es la segunda de tres fases de implementación; la última se realizará, al menos, en septiembre. Para más información sobre los desarrollos recientes de este proyecto, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|lee esta actualización]]. Si tienes comentarios o preguntas, escribe un mensaje en [[mw:Talk:Trust and Safety Product/Temporary Accounts|la página de discusión]], y [[m:Event:CEE Catch up Nr. 10 (June 2025)|únete a CEE Catch Up]] este martes. '''Actualizaciones para editores''' * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] La característica de [[mw:Special:MyLanguage/Help:Watchlist expiry|expiración de la lista de seguimiento]] permite a los editores vigilar páginas por un tiempo. Después de este período, la página se elimina automáticamente de la lista de seguimiento. A partir de esta semana, puedes establecer tu preferencia predeterminada para hacer seguimiento de páginas. Las [[Special:Preferences#mw-prefsection-watchlist-pageswatchlist|preferencias]] también te permiten establecer diversos tiempos de seguimiento para las ediciones en páginas existentes, páginas creadas y cuando se revierte la página. [https://phabricator.wikimedia.org/T265716] [[File:Talk pages default look (April 2023).jpg|thumb|alt=Captura de pantalla de las mejoras visuales realizadas en las páginas de discusión|Ejemplo de una página de discusión con el nuevo diseño, en francés.]] * La apariencia de las páginas de discusión cambiará en la mayoría de las Wikipedias. Algunas wikis, como las que se mencionan en [[m:Special:MyLanguage/Tech/News/2024/19|este enlace]], ya han recibido este rediseño, mientras que [[phab:T379264|otras]] lo recibirán más tarde. Puedes leer más sobre estos cambios en [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|''Diff'']]. Es posible desactivar esta función en tus [[Special:Preferences#mw-prefsection-editing-discussion|preferencias de usuario]], en la sección "{{int:discussiontools-preference-visualenhancements}}". [https://phabricator.wikimedia.org/T319146][https://phabricator.wikimedia.org/T392121] * Los usuarios con permisos extendidos específicos (incluyendo administradores, burócratas, comprobadores de usuarios, supresores y ''stewards'') podrán [[phab:T358853|acceder temporalmente a la dirección IP]] de todas las cuentas temporales por un tiempo limitado para combatir vandalismos recurrentes. Esta característica fue solicitada por los ''stewards''. [https://phabricator.wikimedia.org/T386492] * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático seguirán implementando [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo en varias Wikipedias más. Este filtro utiliza el modelo Revert Risk, creado por el equipo de Investigación, para resaltar las ediciones que probablemente serán revertidas y así ayudar a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. Esta característica se desplegará en las siguientes Wikipedias: {{int:project-localized-name-afwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-cywiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-hawwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-iswiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-kkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-simplewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-trwiki/es}}. La implementación continuará en las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:27}} {{PLURAL:27|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * Se les pide a los editores activos del Filtro Anti Abusos en Meta-Wiki y en las Wikipedias grandes que actualicen los filtros para que sean compatibles con las cuentas temporales. Un enlace a las instrucciones y una lista privada de filtros que necesitan verificación están disponibles en Phabricator en [[phab:T369611|este enlace]]. * Los módulos de Lua ahora tienen acceso al nombre de la página que tiene asociada una miniatura de imagen, y en [https://gerrit.wikimedia.org/g/operations/mediawiki-config/+/2e4ab14aa15bb95568f9c07dd777065901eb2126/wmf-config/InitialiseSettings.php#10849 algunas wikis] también a la información de evaluación del Wikiproyecto. Esto es posible usando dos nuevas propiedades en [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#added-by-extensions|mw.title objects]], llamadas <code dir=ltr>pageImage</code> y <code dir=ltr>pageAssessments</code>. [https://phabricator.wikimedia.org/T131911][https://phabricator.wikimedia.org/T380122] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.5|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W24"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:16 10 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28846858 --> == Categoría: Personajes Bíblicos o Antropónimos Bíblicos == ¿Puedo crear esta categoria? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:30 12 jun 2025 (UTC) :Sin una buena justificación, yo estoy en contra por los mismos motivos que en [[Wikcionario:Café/2020 04#Francisco Franco]]. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:17 12 jun 2025 (UTC) ::Por cierto, ya habíamos borrado [[:Categoría:Personajes bíblicos]] previamente, a raíz de aquella discusión. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:21 12 jun 2025 (UTC) :Los nombres propios quedan fuera del alcance en general, salvo nombres o apellidos genéricos que no referencien a ninguna persona en particular, o sinó los nombres de ciudades o topónimos. Fuera de eso, otros nombres particulares conciernen solo a Wikipedia. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:30 12 jun 2025 (UTC) ::Aca estoy hablando de entradas como [[Adán]], [[Eva]], [[Moisés]] y solo agregar una clasificación. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 21:00 12 jun 2025 (UTC) :::¿Qué clasificación? Estás lanzando una propuesta imprecisa y poco estudiada: justo en esas tres entradas que citas ya había acepciones bíblicas y fueron eliminadas. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 22:19 12 jun 2025 (UTC) ::::Agrega la categoría Antropónimos Bíblicos, en los nombres correspondientes. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 04:32 13 jun 2025 (UTC) :::::Otro motivo para no hacerlo es que me opongo a las "categorías silenciosas", fuera de {{ep|csem}} u otra plantilla similar. En tu caso, de acuerdo a mis esquemas una categoría como esa debería ir en {{ep|csem}} para que aparezca el supuesto campo semántico antes de la definición del nombre propio, lo que incluso hace que quede peor. Pero tranquilo que hay proyectos para eso. En Wikipedia [[w:Categoría:Personajes_del_Nuevo_Testamento|ya lo hicieron]]. Aunque todavía les faltan algunos, como [[w:Tomás el Apóstol]], que justo es mi favorito xd. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:47 13 jun 2025 (UTC) ::::::Opino similar, solo estaría de acuerdo sí se agregara la acepción que explica su significado bíblico: ::::::;1 Religión: Primer hombre según la Biblia. ::::::;2: ''Nombre de pila de varón''. ::::::Y que Antropónimos bíblicos sea una etiqueta que se muestre como Religión o Cristrianismo o algo así. ::::::Pero si ya se había acordado que entradas de ese estilo no van aquí, entonces pues no. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 01:07 16 jun 2025 (UTC) == Vote now in the 2025 U4C Election == <div lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{Int:Please-translate}} Eligible voters are asked to participate in the 2025 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2025|2025 Election information page]]. The vote closes on 17 June 2025 at [https://zonestamp.toolforge.org/1750161600 12:00 UTC]. Please vote if your account is eligible. Results will be available by 1 July 2025. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 23:01 13 jun 2025 (UTC) </div> <!-- Mensaje enviado por Usuario:Keegan (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28848819 --> == Noticias técnicas: 2025-25 == <section begin="technews-2025-W25"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/25|Traducciones en varios idiomas]] están disponibles. '''Actualizaciones para editores''' * Puedes [https://wikimediafoundation.limesurvey.net/359761?lang=en nominar tus herramientas favoritas] para la sexta edición del [[m:Special:MyLanguage/Coolest Tool Award|Coolest Tool Award]]. Las nominaciones son anónimas y estarán abiertas hasta el 25 de junio. Puedes reutilizar el formulario para enviar múltiples nominaciones. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:33}} {{PLURAL:33|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.6|MediaWiki]] '''A fondo''' * El personal de la Fundación y los voluntarios técnicos utilizan las API de Wikimedia para construir herramientas, aplicaciones, características e integraciones que mejoran las experiencias de los usuarios. Durante los próximos años, el equipo de Interfaces de MediaWiki invertirá en API web de Wikimedia (HTTP) para satisfacer mejor las necesidades técnicas de los voluntarios y proteger la infraestructura de Wikimedia de posibles abusos. Puedes [https://techblog.wikimedia.org/2025/06/12/apis-as-a-product-investing-in-the-current-and-next-generation-of-technical-contributors/ leer más sobre sus planes para evolucionar las API en esta publicación de Techblog]. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W25"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:38 16 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Convocatoria a Candidaturas para la Junta Directiva de la Fundación Wikimedia, 2025 == <section begin="announcement-content" /> :''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Announcement/Call for candidates|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2025/Announcement/Call for candidates}}&language=&action=page&filter= {{int:please-translate}}]</div> Saludos, La [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|convocatoria a candidaturas para la selección 2025 de Miembros de la Junta Directiva de la Fundación Wikimedia se encuentra abierta]] desde el 17 de junio de 2025 hasta el 2 de julio de 2025 a horas 11:59 UTC [1]. La Junta Directiva supervisa el trabajo de la Fundación Wikimedia, y cada Miembro cumple un periodo de funciones de tres años [2]. El cargo es voluntario. Este año, la comunidad Wikimedia votará desde fines de agosto hasta el mes de septiembre de 2025 para ocupar dos (2) puestos en la Directiva de la Fundación. ¿Podría usted, o alguien a quien usted conozca, tener lo que se requiere para unirse a la Junta Directiva de la Fundación Wikimedia? [3] Puede aprender más acerca de los requisitos para postularse a estos puestos de liderazgo, además del modo de presentar una candidatura en [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidate application|esta página de Meta-wiki]], para sí o para alguien que usted considere que podría presentarse a la elección de este año. Atentamente, Abhishek Suryawanshi<br /> Director del Comité Electoral A nombre del Comité Electoral y del Comité de Gobernanza [1] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Call_for_candidates [2] https://foundation.wikimedia.org/wiki/Legal:Bylaws#(B)_Term. [3] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Resources_for_candidates<section end="announcement-content" /> [[Usuario:MediaWiki message delivery|MediaWiki message delivery]] ([[Usuario discusión:MediaWiki message delivery|discusión]]) 17:44 17 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:RamzyM (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28866958 --> == Importación de contenido desde en.wikitioanry == Estimados, Tengo una aplicación desarrollada en Java que utiliza la cuenta RoboJ2. En los últimos días, la he empleado para importar contenidos desde en.wiktionary siguiendo este proceso: Entrada de datos: El programa recibe como parámetro un archivo de texto que elaboro manualmente, donde se listan las entradas a procesar. Verificación: El sistema revisa si cada entrada existe en en.wiktionary y no está presente en es.wiktionary. Transformación: El programa analiza el wikitexto de la entrada y lo adapta al formato utilizado en es.wiktionary. Las entradas que he selecionado ahora han sido antróponimos y plurales de palabras que encontre aquí: [https://es.wiktionary.org/wiki/Ap%C3%A9ndice:Palabras_m%C3%A1s_frecuentes_del_ingl%C3%A9s Palabras frecuentes] Entradas generadas hasta ahora: [https://es.wiktionary.org/wiki/Especial:Contribuciones/RoboJ2 Entradas generadas]. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 22:06 18 jun 2025 (UTC) :@[[Usuario:Cvmontuy|Cvmontuy]] No tengo motivos para oponerme PERO: :* Desearía que se respete completamente el formato nuevo de la guía de estilo. O sea, las formas flexivas van con el título de nivel 3 "Forma flexiva" y luego en el nivel 4 va el título de Forma sustantiva, adjetiva, etc. Lo de poner directamente el título de nivel 4 en el nivel 3 es una costumbre antigua que la seguimos tolerando solo porque no hice una migración masiva de todas las páginas con formas flexivas y como no es prioridad hacerlo ahora mismo no es un error grave pero las páginas nuevas no deberían ser creadas con ese formato. :* Las palabras se agregan completamente o no se agregan, pero no crees más esbozos con tu bot, me refiero a lo que aparece en [[sends]] o en [[reflections]]. :* Podrías compartir el repositorio de la app? Podríamos extenderlo a más idiomas en un futuro. ::@[[Usuario:Tmagc|Tmagc]],@[[Usuario:Peter Bowman|Peter Bownman]], aqui les dejo el repositorio [https://github.com/cvmontuy1/WikiBotJ316 WikiBotJ316], no es un trabajo profesional pero desde mi punto de vista funciona, saludos --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:50 24 jun 2025 (UTC) :[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:00 19 jun 2025 (UTC) ::@[[Usuario:Tmagc|Tmagc]] ::::*Si revisas las entradas creadas, verás que están tal como mencionas: en el nivel 3 aparece “Forma flexiva” y en el nivel 4, “Forma sustantiva/verbal”. ::::*Se ha utilizado la plantilla <nowiki>{{esbozo}}</nowiki> porque la fuente de información no es perfecta ni completa, y el programa tampoco lo es. Reconoce ciertas expresiones regulares para extraer los datos, pero no es tan avanzado como para analizar el contenido de forma más profunda. ::::*Todas las entradas creadas siguen la guía de estilo y todas incluyen al menos una definición y su categoría gramatical y la prounciación si esta publicad en el en.wiktionary. Las entradas creadas son antropónimos y plurales, por lo que en la mayoria no hay mucho más que añadir en ellas. ¿O qué criterio de aceptación considerarías necesario? Más adelante, Si no lo prohiben, tal vez integre entradas con terminaciones adverbiales (-ly) y las formas verbales (-ed, -ing). ::::*Creo que es más sencillo y, por lo tanto, útil comenzar con un esbozo que desde cero. ::::*En el proyecto tenemos cientos de entradas como [[burocratizar]] o [[catatonizar]], que prácticamente están vacías. Las que yo aporto siempre incluyen al menos una definició. y muchas entradas que tenemos en el proyecto iniciaron como un esbozo, o queremos ya prohibiir los esbozos oficialmente?, y entonces debemos elimianr la plantilla correspondiente? ::::*No he creado un espacio en gitlab pero espero la proxima semana hacerlo y compartir el código correspondiente. ::::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:55 19 jun 2025 (UTC) :::@[[Usuario:Cvmontuy|Cvmontuy]] :::* Como decía, lo de los esbozos que están ahora creados fue por una mala decisión que se tomó en su momento, de las tantas que han perjudicado al proyecto pero creeme que si hubiera estado en su momento no lo habría permitido. Así y todo, no sigamos propagando el mal, no creemos más esbozos innecesariamente. Si la aplicación tiene problemas para parsear las entradas de en.wikt, entonces deberán hacerse las pruebas que sean necesarias hasta que funcione aceptable. :::* No es necesario extraer toda la información, puede que hayan cosas que no aplican para nuestro sitio. Pero las etimologías y las definiciones deberían aparecer. :::* Yo me centraría en agregar formas canónicas; las formas flexivas en todo caso las podríamos crear sino con la información de las entradas que tenemos en nuestro Wikcionario. :::* En lugar de luchar innecesariamente con las expresiones regulares, deberías usar una biblioteca que parsee wikitexto. Yo implementé un algoritmo en Python para parsear las entradas en es.wikt usando la de [https://github.com/5j9/wikitextparser 5j9]. Podríamos crear un repositorio para que te comparta lo que tengo y trabajar en conjunto, pero nunca tuve éxito con Java. [https://www.mediawiki.org/wiki/Alternative_parsers Acá hay una lista con otras implementaciones]. :::[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 05:24 19 jun 2025 (UTC) ::::Hola. Mi bot está escrito en Java y tengo un parser específico para eswiktionary que no funciona mal, está probado desde 2015 ([https://github.com/PeterBowman/wikibot/tree/master/wikibot/src/main/java/com/github/wikibot/parsing/eswikt fuente]; la pega es que el código es un desastre infumable). Con respecto a lo que se menciona de [[burocratizar]] y otras entradas vacías (sin definiciones), mi opinión es que no se deberían haber creado, y estaría a favor de borrarlas. No colocaría {{ep|esbozo}} en aquellas entradas importadas que sean simples formas flexivas; lo único que se puede hacer con esas plantillas es quitarlas directamente (aunque coincido con Tmagc en que preferiría usar la información de eswiktionary en lugar de importar/convertir). Por otro lado, permiten que un usuario humano las revise a posteriori para verificar que el bot haya funcionado bien... Para conjugar ambas opciones, yo propondría usar una plantilla de aviso diferente, específica para páginas importadas por bot que requieran de revisión manual. Algo como {{ep|importado}}, pero puntualizando que se requiere de revisión más que adaptación a nuestro formato. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 08:44 19 jun 2025 (UTC) ::*El programa desarrollado está actualmente diseñado para importar antropónimos y plurales. Toma del en.wiktionary la información de pronunciación y determina si el término es masculino, femenino, ambos, o si se trata de un hipocorístico. En el caso de los plurales, verifica si la palabra corresponde a un sustantivo, una forma verbal, o ambas. Esta información, para este tipo de entradas, no está disponible en el es.wiktionary. ::*Estoy de acuerdo en que sería más útil generar entradas de las formas canónicas o basarse directamente en el es.wiktionary, pero por ahora esas tareas no están dentro del alcance de este programa. Quizá más adelante pueda trabajar en ese sentido. ::*Gracias por compartir las librerías; no sabía que existían. Las revisaré con calma más adelante. Revisé brevemente tu programa, @Peter Bowman, y me pareció bien estructurado y fácil de entender. El mecanismo de parseo que usaste es muy similar al que empleo en el programa que estamos discutiendo ahora. El objetivo de identificar plantillas en en.wiktionary y analizarlas es técnicamente sencillo, pero los contenidos no siempre usan plantillas y hay mucho texto libre. En estos casos, más que un parser, lo que realmente ayudaría sería integrar una IA para la traducción. No lo he hecho aún, y tampoco sé si eso sería legalmente válido. ::Por favor, intentemos concluir: ::*Si en lugar de poner “Nombre de varios lugares”, el programa indica explícitamente textos como “Ciudad de...”, y además agrega la etimología cuando esta se encuentra expresada mediante plantilas en el en.wiktionary, ¿con estos cambios el programa obtiene autorización para seguir operando? ::*En cuanto a sustituir la plantilla <nowiki>{{esbozo}}</nowiki>, existe la plantilla {{ep|creado_por_bot}}. ¿Debo usar esa? ::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:46 19 jun 2025 (UTC) == Noticias técnicas: 2025-26 == <section begin="technews-2025-W26"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/26|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático continuarán con el lanzamiento de [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo al tercer y último grupo de Wikipedias. Este filtro utiliza el modelo de Riesgo de Reversión (Revert Risk), el cual fue creado por el equipo de Investigación, y destaca las ediciones que posiblemente deban ser revertidas para ayudar así a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. La característica será lanzada en las siguientes Wikipedias: {{int:project-localized-name-azwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-lawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mlwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mrwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-nnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-pawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-swwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tlwiki/es}}. El lanzamiento continuará durante las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] '''Actualizaciones para editores''' * La semana pasada, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] se implementaron en las Wikipedias en checo, coreano y turco. Esta semana y la próxima, los lanzamientos se realizarán en Wikipedias más grandes. [[mw:Talk:Trust and Safety Product/Temporary Accounts|Comparte tus ideas]] sobre el proyecto. [https://phabricator.wikimedia.org/T340001] * Durante esta semana, el equipo de Edición lanzará [[mw:Special:MyLanguage/Help:Edit check#Multi check|Multi Check]] en todas las Wikipedias (excepto la Wikipedia en inglés). Esta característica muestra múltiples [[mw:Special:MyLanguage/Help:Edit check#Reference check|verificaciones de referencias]] junto a la experiencia de edición. Esto anima a los usuarios a añadir citas cuando agregan varios párrafos a un artículo de Wikipedia. Esta característica estuvo disponible como una prueba A/B. [https://analytics.wikimedia.org/published/reports/editing/multi_check_ab_test_report_final.html#summary-of-results Las pruebas mostraron] que los usuarios a quienes se les mostraban las múltiples verificaciones eran 1.3 veces más propensos a añadir una referencia a su edición, y su edición era 34.7% menos propensa a ser revertida. [https://phabricator.wikimedia.org/T395519] * Unas pocas páginas deben ser renombradas debido a actualizaciones de software y para ajustarse a estándares Unicode más recientes. Todos estos cambios están relacionados con las mayúsculas en los títulos. Aproximadamente 71 páginas y 3 archivos serán renombrados en 15 wikis; la lista completa se encuentra en [[phab:T396903|esta tarea]]. Los desarrolladores renombrarán estas páginas la próxima semana y solucionarán las redirecciones y los enlaces de archivos incrustados unos minutos después mediante una actualización de la configuración del sistema. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:24}} {{PLURAL:24|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se arregló un error que había hecho que las páginas se desplazaran hacia arriba cuando se selecciona texto cerca de la parte superior. [https://phabricator.wikimedia.org/T364023] '''Actualizaciones para los colaboradores técnicos''' * Ahora, los editores pueden usar los módulos de Lua para filtrar y transformar datos tabulares y utilizarlos con [[mw:Special:MyLanguage/Extension:Chart|Extension:Chart]]. Esto puede ser empleado para diversos objetivos, como seleccionar un subconjunto de filas o columnas de los datos, convertir entre unidades, realizar procesamiento estadístico y otras transformaciones útiles. [[mw:Special:MyLanguage/Extension:Chart/Transforms|Lee más para obtener información sobre cómo usar las transformaciones]]. [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Chart/Project/Updates] * La variable <code dir=ltr>all_links</code> en el [[Special:AbuseFilter|Filtro Antiabusos]] ahora se llama <code dir=ltr>new_links</code> para ser consistente con las otras variables. Los usos anteriores seguirán funcionando. [https://phabricator.wikimedia.org/T391811] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.7|MediaWiki]] '''A fondo''' * El último [[mw:Special:MyLanguage/Growth/Newsletters/34|Boletín de Growth]] está disponible. Incluye: las actualizaciones recientes de la tarea "Agregar un enlace", dos nuevas características de participación para los recién llegados y actualizaciones de la configuración comunitaria. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W26"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:21 23 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Noticias técnicas: 2025-27 == <section begin="technews-2025-W27"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/27|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|extensión CampaignEvents]] ya está habilitada en todas las Wikipedias. Esta extensión facilita la organización y participación en actividades colaborativas, como editatones y Wikiproyectos, en las wikis. La extensión incluye tres características: [[m:Special:MyLanguage/Event Center/Registration|Registro al evento]], [[m:Special:MyLanguage/CampaignEvents/Collaboration list|Lista de colaboración]] y [[m:Campaigns/Foundation Product Team/Invitation list|Lista de invitaciones]]. Para solicitar la extensión para tu wiki, visita la [[m:Special:MyLanguage/CampaignEvents/Deployment status#How to Request the CampaignEvents Extension for your wiki|página de información de Despliegues]]. '''Actualizaciones para editores''' * Los mantenedores del Filtro Antiabusos ahora pueden [[mw:Special:MyLanguage/Extension:IPReputation/AbuseFilter variables|evaluar la reputación de la IP]] en los [[mw:Special:MyLanguage/Extension:AbuseFilter|Filtros]]. Los datos de la reputación de la IP son información sobre los proxies y VPN asociados a la dirección IP del usuario. Esta información no se muestra públicamente y no se genera para acciones realizadas por cuentas registradas. [https://phabricator.wikimedia.org/T354599] * El contenido oculto que se encuentra en [[mw:Special:MyLanguage/Manual:Collapsible elements|partes colapsables de las wikipáginas]] ahora se mostrará cuando alguien busque en la página usando la función "Buscar en la página" del navegador (Ctrl+F o ⌘F) en los navegadores compatibles. [https://phabricator.wikimedia.org/T327893][https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/hidden#browser_compatibility] * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] Una nueva función, llamada [[mw:Special:MyLanguage/Help:TemplateData/Template discovery|Plantillas Favoritas]], se lanzará a finales de esta semana en todos los proyectos (excepto en la Wikipedia en inglés, que la recibirá la próxima semana), tras una fase piloto en las Wikipedias en polaco y árabe, y los Wikisources en italiano e inglés. Esta característica ofrecerá una mejor manera de descubrir y utilizar plantillas mediante el cuadro de diálogo de plantillas, permitiendo a los usuarios añadirlas a una "lista especial de favoritos". La función es compatible tanto con el Editor Visual como con el editor de Wikitexto. Esta funcionalidad es un [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|deseo de la comunidad]]. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:31}} {{PLURAL:31|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se solucionó un error que causaba que algunas Notificaciones se enviaran varias veces. [https://phabricator.wikimedia.org/T397103] '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.8|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W27"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:40 30 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28917415 --> == Modificaciones propuestas para pron-graf == Hola, dos modificaciones que estoy considerando: * Estaba pensando en que el sistema de doble índice puede llevar a confusiones ya que contrasta con el resto de las plantillas en donde el índice está al final pero en esta queda al principio. Quiero decir, si no necesito agregar ninguna subvariante y tengo 3 pronunciaciones lo que debería hacer (sin módulo obviamente) sería <nowiki>|1fone</nowiki>, <nowiki>|2fone</nowiki>, <nowiki>|3fone</nowiki>. Sin embargo, por lo menos a mí me ha pasado que escribí sin querer <nowiki>|fone1</nowiki>, <nowiki>|fone2</nowiki>, <nowiki>|fone3</nowiki>. A diferencia del resto de plantillas en donde se avanza naturalmente con el índice pospuesto, en esta hay que avanzar con el índice antepuesto. La documentación sobre este detalle me parece que sería inevitablemente engorrosa. Lo que propongo es simplificar a un único índice pospuesto en lugar de antepuesto para variantes principales, y las subvariantes separarlas con punto y coma. :Tomando como ejemplo [[withstand]], pasaríamos de esto: :<code><nowiki>{{pron-graf|leng=en |pron=Conservative Received Pronunciation|1fono1=wɪðˈstænd|1fono2=wɪθˈstænd |2pron=General American, Standard Canadian|2fono=wɪðˈstænd|2fone2=wɪðˈstɛənd|2fnota2=/æ/ raising|2audio2=en-us-withstand.ogg|2aunota2=California|2audio3=LL-Q1860 (eng)-Wodencafe-withstand.wav|2aunota3=Texas|2fone4=wɪðˈstɛːnd|2fnota4=/æ/ raising|2audio5=LL-Q1860 (eng)-Grendelkhan-withstand.wav|2aunota5=Connecticut|2fono6=wɪθˈstænd|2fone7=wɪθˈstɛənd|2fnota7=/æ/ raising|2audio7=LL-Q1860 (eng)-Semperosculto-withstand.wav|2aunota7=EE. UU.|2fone8=wɪθˈstɛːnd|2fnota8=/æ/ raising|2audio8=LL-Q1860 (eng)-Assorted-Interests-withstand.wav|2aunota8=Ciudad de Nueva York |3pron=Australia|3fono1=wɪðˈstænd|3fone2=wɪðˈsteːnd|3fnota2=/æ/ raising|3fono3=wɪθˈstænd|3fone4=wɪθˈsteːnd|3fnota4=/æ/ raising |ls=2 }}</nowiki></code> :A esto: :<code><nowiki>{{pron-graf|leng=en |pron1=Conservative Received Pronunciation|fono1=wɪðˈstænd;wɪθˈstænd |pron2=General American, Standard Canadian|fono2=wɪðˈstænd;;;;;wɪθˈstænd|fone2=;wɪðˈstɛənd;;wɪðˈstɛːnd;;;wɪθˈstɛənd;wɪθˈstɛːnd|fnota2=;/æ/ raising;;/æ/ raising;;;/æ/ raising;/æ/ raising|audio2=;en-us-withstand.ogg;LL-Q1860 (eng)-Wodencafe-withstand.wav;;LL-Q1860 (eng)-Grendelkhan-withstand.wav;;LL-Q1860 (eng)-Semperosculto-withstand.wav;LL-Q1860 (eng)-Assorted-Interests-withstand.wav|aunota2=;California;Texas;;Connecticut;;EE. UU.;Ciudad de Nueva York |pron3=Australia|fono3=wɪðˈstænd;;wɪθˈstænd|fone3=;wɪðˈsteːnd;;wɪθˈsteːnd|fnota3=;/æ/ raising;;/æ/ raising |ls=2 }}</nowiki></code> :Lo bueno es que simplificaría la documentación y la consistencia entre sistemas usados en las distintas plantillas. Lo malo es que no se podrían añadir pronunciaciones o archivos con punto y coma, algo que de todas formas no lo he visto en el sitio hasta la fecha. Bueno, eso aparte de que deberían cambiar los hábitos quienes agregan transcripciones frecuentemente. El resto seguiría igual, es decir, esos parámetros (<nowiki>|fone</nowiki>, <nowiki>|fono</nowiki>, <nowiki>|fgraf</nowiki>, <nowiki>|fnota</nowiki>, <nowiki>|audio</nowiki>, <nowiki>|aunota</nowiki>) seguirían funcionando como un arreglo doble. Las páginas afectadas son aproximadamente 5000, casi todas del inglés (otros idiomas son prácitamente irrelevantes ya que en su mayoría se pueden automatizar). La migración la podría hacer en unos pocos días. * Después, añadir un nuevo parámetro que se trate de homófonos pero a nivel de pronunciación, es decir, sería un arreglo doble a completar con los homófonos que lo son solo respecto de una pronunciación específica, por ejemplo, si es solo homófono en la pronunciación seseante, se agregaría al lado de la transcripción que la palabra en cuestión es homófona en lugar de aparecer al final como homófono a nivel global. En principio convivirían ambos parámetros, al menos por un tiempo ya que la migración completa de uno al otro sería mucho más lenta y difícil que lo anterior. Qué nombre quieren ponerle? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 22:37 2 jul 2025 (UTC) :La verdad es que el sistema que existe lo considero muy cómodo ya que el número antepuesto representa la fila y el pospuesto, la columna. En el caso de los homófonos, se entiende lo mismo, es decir, en la misma fila aparecen todos los homófonos. Si el número estuviese delante se entendería que están hacia abajo, en distintas filas. :Por otra parte, se debe considerar que en Wikcionario (español) tenemos menos de 35 colaboradores activos. Un cambio como el propuesto podría ocasionar que varios de ellos se vayan. Como ejemplo, recuerdo que poco después de comenzar a agregar las pronunciaciones AFI en el diccionario alemán, me exigieron que dejara de agregar los puntos que indican la separación de las sílabas. Como respondí, dejando de colaborar en ese diccionario. Ahora, cuando pasaron varios años, yo mismo dejé de poner los puntos por ser redundante (cuando se conocen las reglas de silabificación del inglés). Lo malo desde el punto de vista de dicho diccionario es que no volví, porque tendría que volver a estudiar como editar bajo su estructura y convenciones. :En cuanto a incorporar homófonos por pronunciación, se puede hacer con un retoque al sistema actual. De hecho, sería mejor que pudiesen colocarse en cada fila y por columna ya que, en inglés al menos, los homófonos dependen usualmente del dialecto. Para subsanar este problema, se recurre a colocar hnota para cada caso. Así por ejemplo, en [[bear]], al lado de los homófonos aparecen unas hnotas (difíciles de tomar en cuenta ya que están al final de la página) que indican con cuales dialectos se da la homofonía. Además, es frecuente que se escriba "algunas pronunciaciones" y queda al lector determinar cuales son esas pronunciaciones comparando las de la palabra que está viendo con las del homófono sugerido. [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 00:45 3 jul 2025 (UTC) 7yzvfq93ynp3ppyrzmf37b9weofpok6 5823435 5823420 2025-07-03T02:59:19Z Cvmontuy 1123 Sección nueva: /* Etimología por metonimia */ 5823435 wikitext text/x-wiki <!-- Inicio Encabezado del café, aviso, información histórica y información de archivado --> <div style="text-align: center;"> {{/Aviso}} {{/Histórico}} </div> {{atajo|WN:C}} [[Categoría:Wikcionario:Café]] <!-- Fin del Encabezado del café --> <!-- Inicio configuración robot archivado; no tocar si no se sabe lo que se hace --> {{Usuario:MABot/config |archive = Wikcionario:Café/%(year)d %(month)02d |algo = old(30d) |counter = 1 |archiveheader = {{Archivo}} }} <h1>{{MONTHNAME|{{PREVIOUSMONTH}}}} de {{PREVIOUSMONTH.YEAR}}</h1> <div class="mw-archivedtalk"> {{/{{PREVIOUSMONTH.YEAR}} {{PREVIOUSMONTH}}}} </div> <h1>Actual</h1> == Etimología de siglas == Hola, copié el módulo etimología a etimología_test para adaptarlo al manejo de siglas, se agrega el parámetro nosep (no separador). :Con parámetro nosep ::Sigla de [[organización#Español|''organización'']] ''de'' ''las'' [[naciones#Español|''naciones'']] [[unidas#Español|''unidas'']] :Sin parámetro nosep ::Sigla de [[organización#Español|''organización'']], ''de'', ''las'', [[naciones#Español|''naciones'']] y [[unidas#Español|''unidas'']] ¿Están de acuerdo en aprobar este cambio para implementarlo en el módulo original? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>mensajes)</sup>]] 21:19 30 may 2025 (UTC) :Pues, creo que es bastaaante raro que las siglas vengan de términos con comas, el único caso que se me viene a la mente es la UNESCO y es una sola. Siento yo que en esos extraños y pocos casos se podría usar el parámetro nl=s y añadir el enlace manual: :* Si esta en Wikipedia, podría enlazarse directamente: :{{etimología|sigla|[[w:United Nations Educational, Scientific and Cultural Organization|United Nations Educational, Scientific and Cultural Organization]]|nl=s}}. :* Enlace a otros términos del Wikcionario: :{{etimología|sigla|[[building]], [[antenna]]-tower, [[span]], [[earth]]|nl=s}}. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 22:45 30 may 2025 (UTC) :Ídem a Raos, yo tampoco entiendo cuál era el problema original. Podrías mostrar algún ejemplo en donde esa modificación sea relevante? Yo creo que si la sigla es de varias palabras sería más bien un compuesto acronímico (actualmente clasificado como compuesto). [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:34 31 may 2025 (UTC) ::De acuerdo --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:56 31 may 2025 (UTC) :::Entiendo que el "de acuerdo" quiere decir que la propuesta ha sido retirada. Elimino entonces [[Plantilla:etimologíapba]] y [[Módulo:etimología test]] para que no figuren en el espacio principal. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:24 7 jun 2025 (UTC) ::::Si gracias! [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:37 7 jun 2025 (UTC) == Noticias técnicas: 2025-24 == <section begin="technews-2025-W24"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/24|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * El [[mw:Special:MyLanguage/Trust and Safety Product|equipo de Confianza y Seguridad de Producto]] está terminando el trabajo necesario para implementar [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] en las Wikipedias más grandes a finales de este mes. El equipo ha trabajado con los stewards y otros usuarios con permisos extendidos para predecir y responder a los diversos casos de uso que podrían aparecer en las wikis más grandes, así los integrantes de las comunidades pueden continuar el patrullaje y la moderación de las cuentas temporales. Esta es la segunda de tres fases de implementación; la última se realizará, al menos, en septiembre. Para más información sobre los desarrollos recientes de este proyecto, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|lee esta actualización]]. Si tienes comentarios o preguntas, escribe un mensaje en [[mw:Talk:Trust and Safety Product/Temporary Accounts|la página de discusión]], y [[m:Event:CEE Catch up Nr. 10 (June 2025)|únete a CEE Catch Up]] este martes. '''Actualizaciones para editores''' * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] La característica de [[mw:Special:MyLanguage/Help:Watchlist expiry|expiración de la lista de seguimiento]] permite a los editores vigilar páginas por un tiempo. Después de este período, la página se elimina automáticamente de la lista de seguimiento. A partir de esta semana, puedes establecer tu preferencia predeterminada para hacer seguimiento de páginas. Las [[Special:Preferences#mw-prefsection-watchlist-pageswatchlist|preferencias]] también te permiten establecer diversos tiempos de seguimiento para las ediciones en páginas existentes, páginas creadas y cuando se revierte la página. [https://phabricator.wikimedia.org/T265716] [[File:Talk pages default look (April 2023).jpg|thumb|alt=Captura de pantalla de las mejoras visuales realizadas en las páginas de discusión|Ejemplo de una página de discusión con el nuevo diseño, en francés.]] * La apariencia de las páginas de discusión cambiará en la mayoría de las Wikipedias. Algunas wikis, como las que se mencionan en [[m:Special:MyLanguage/Tech/News/2024/19|este enlace]], ya han recibido este rediseño, mientras que [[phab:T379264|otras]] lo recibirán más tarde. Puedes leer más sobre estos cambios en [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|''Diff'']]. Es posible desactivar esta función en tus [[Special:Preferences#mw-prefsection-editing-discussion|preferencias de usuario]], en la sección "{{int:discussiontools-preference-visualenhancements}}". [https://phabricator.wikimedia.org/T319146][https://phabricator.wikimedia.org/T392121] * Los usuarios con permisos extendidos específicos (incluyendo administradores, burócratas, comprobadores de usuarios, supresores y ''stewards'') podrán [[phab:T358853|acceder temporalmente a la dirección IP]] de todas las cuentas temporales por un tiempo limitado para combatir vandalismos recurrentes. Esta característica fue solicitada por los ''stewards''. [https://phabricator.wikimedia.org/T386492] * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático seguirán implementando [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo en varias Wikipedias más. Este filtro utiliza el modelo Revert Risk, creado por el equipo de Investigación, para resaltar las ediciones que probablemente serán revertidas y así ayudar a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. Esta característica se desplegará en las siguientes Wikipedias: {{int:project-localized-name-afwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-cywiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-hawwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-iswiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-kkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-simplewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-trwiki/es}}. La implementación continuará en las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:27}} {{PLURAL:27|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * Se les pide a los editores activos del Filtro Anti Abusos en Meta-Wiki y en las Wikipedias grandes que actualicen los filtros para que sean compatibles con las cuentas temporales. Un enlace a las instrucciones y una lista privada de filtros que necesitan verificación están disponibles en Phabricator en [[phab:T369611|este enlace]]. * Los módulos de Lua ahora tienen acceso al nombre de la página que tiene asociada una miniatura de imagen, y en [https://gerrit.wikimedia.org/g/operations/mediawiki-config/+/2e4ab14aa15bb95568f9c07dd777065901eb2126/wmf-config/InitialiseSettings.php#10849 algunas wikis] también a la información de evaluación del Wikiproyecto. Esto es posible usando dos nuevas propiedades en [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#added-by-extensions|mw.title objects]], llamadas <code dir=ltr>pageImage</code> y <code dir=ltr>pageAssessments</code>. [https://phabricator.wikimedia.org/T131911][https://phabricator.wikimedia.org/T380122] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.5|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W24"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:16 10 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28846858 --> == Categoría: Personajes Bíblicos o Antropónimos Bíblicos == ¿Puedo crear esta categoria? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:30 12 jun 2025 (UTC) :Sin una buena justificación, yo estoy en contra por los mismos motivos que en [[Wikcionario:Café/2020 04#Francisco Franco]]. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:17 12 jun 2025 (UTC) ::Por cierto, ya habíamos borrado [[:Categoría:Personajes bíblicos]] previamente, a raíz de aquella discusión. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:21 12 jun 2025 (UTC) :Los nombres propios quedan fuera del alcance en general, salvo nombres o apellidos genéricos que no referencien a ninguna persona en particular, o sinó los nombres de ciudades o topónimos. Fuera de eso, otros nombres particulares conciernen solo a Wikipedia. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:30 12 jun 2025 (UTC) ::Aca estoy hablando de entradas como [[Adán]], [[Eva]], [[Moisés]] y solo agregar una clasificación. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 21:00 12 jun 2025 (UTC) :::¿Qué clasificación? Estás lanzando una propuesta imprecisa y poco estudiada: justo en esas tres entradas que citas ya había acepciones bíblicas y fueron eliminadas. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 22:19 12 jun 2025 (UTC) ::::Agrega la categoría Antropónimos Bíblicos, en los nombres correspondientes. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 04:32 13 jun 2025 (UTC) :::::Otro motivo para no hacerlo es que me opongo a las "categorías silenciosas", fuera de {{ep|csem}} u otra plantilla similar. En tu caso, de acuerdo a mis esquemas una categoría como esa debería ir en {{ep|csem}} para que aparezca el supuesto campo semántico antes de la definición del nombre propio, lo que incluso hace que quede peor. Pero tranquilo que hay proyectos para eso. En Wikipedia [[w:Categoría:Personajes_del_Nuevo_Testamento|ya lo hicieron]]. Aunque todavía les faltan algunos, como [[w:Tomás el Apóstol]], que justo es mi favorito xd. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:47 13 jun 2025 (UTC) ::::::Opino similar, solo estaría de acuerdo sí se agregara la acepción que explica su significado bíblico: ::::::;1 Religión: Primer hombre según la Biblia. ::::::;2: ''Nombre de pila de varón''. ::::::Y que Antropónimos bíblicos sea una etiqueta que se muestre como Religión o Cristrianismo o algo así. ::::::Pero si ya se había acordado que entradas de ese estilo no van aquí, entonces pues no. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 01:07 16 jun 2025 (UTC) == Vote now in the 2025 U4C Election == <div lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{Int:Please-translate}} Eligible voters are asked to participate in the 2025 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2025|2025 Election information page]]. The vote closes on 17 June 2025 at [https://zonestamp.toolforge.org/1750161600 12:00 UTC]. Please vote if your account is eligible. Results will be available by 1 July 2025. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 23:01 13 jun 2025 (UTC) </div> <!-- Mensaje enviado por Usuario:Keegan (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28848819 --> == Noticias técnicas: 2025-25 == <section begin="technews-2025-W25"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/25|Traducciones en varios idiomas]] están disponibles. '''Actualizaciones para editores''' * Puedes [https://wikimediafoundation.limesurvey.net/359761?lang=en nominar tus herramientas favoritas] para la sexta edición del [[m:Special:MyLanguage/Coolest Tool Award|Coolest Tool Award]]. Las nominaciones son anónimas y estarán abiertas hasta el 25 de junio. Puedes reutilizar el formulario para enviar múltiples nominaciones. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:33}} {{PLURAL:33|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.6|MediaWiki]] '''A fondo''' * El personal de la Fundación y los voluntarios técnicos utilizan las API de Wikimedia para construir herramientas, aplicaciones, características e integraciones que mejoran las experiencias de los usuarios. Durante los próximos años, el equipo de Interfaces de MediaWiki invertirá en API web de Wikimedia (HTTP) para satisfacer mejor las necesidades técnicas de los voluntarios y proteger la infraestructura de Wikimedia de posibles abusos. Puedes [https://techblog.wikimedia.org/2025/06/12/apis-as-a-product-investing-in-the-current-and-next-generation-of-technical-contributors/ leer más sobre sus planes para evolucionar las API en esta publicación de Techblog]. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W25"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:38 16 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Convocatoria a Candidaturas para la Junta Directiva de la Fundación Wikimedia, 2025 == <section begin="announcement-content" /> :''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Announcement/Call for candidates|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2025/Announcement/Call for candidates}}&language=&action=page&filter= {{int:please-translate}}]</div> Saludos, La [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|convocatoria a candidaturas para la selección 2025 de Miembros de la Junta Directiva de la Fundación Wikimedia se encuentra abierta]] desde el 17 de junio de 2025 hasta el 2 de julio de 2025 a horas 11:59 UTC [1]. La Junta Directiva supervisa el trabajo de la Fundación Wikimedia, y cada Miembro cumple un periodo de funciones de tres años [2]. El cargo es voluntario. Este año, la comunidad Wikimedia votará desde fines de agosto hasta el mes de septiembre de 2025 para ocupar dos (2) puestos en la Directiva de la Fundación. ¿Podría usted, o alguien a quien usted conozca, tener lo que se requiere para unirse a la Junta Directiva de la Fundación Wikimedia? [3] Puede aprender más acerca de los requisitos para postularse a estos puestos de liderazgo, además del modo de presentar una candidatura en [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidate application|esta página de Meta-wiki]], para sí o para alguien que usted considere que podría presentarse a la elección de este año. Atentamente, Abhishek Suryawanshi<br /> Director del Comité Electoral A nombre del Comité Electoral y del Comité de Gobernanza [1] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Call_for_candidates [2] https://foundation.wikimedia.org/wiki/Legal:Bylaws#(B)_Term. [3] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Resources_for_candidates<section end="announcement-content" /> [[Usuario:MediaWiki message delivery|MediaWiki message delivery]] ([[Usuario discusión:MediaWiki message delivery|discusión]]) 17:44 17 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:RamzyM (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28866958 --> == Importación de contenido desde en.wikitioanry == Estimados, Tengo una aplicación desarrollada en Java que utiliza la cuenta RoboJ2. En los últimos días, la he empleado para importar contenidos desde en.wiktionary siguiendo este proceso: Entrada de datos: El programa recibe como parámetro un archivo de texto que elaboro manualmente, donde se listan las entradas a procesar. Verificación: El sistema revisa si cada entrada existe en en.wiktionary y no está presente en es.wiktionary. Transformación: El programa analiza el wikitexto de la entrada y lo adapta al formato utilizado en es.wiktionary. Las entradas que he selecionado ahora han sido antróponimos y plurales de palabras que encontre aquí: [https://es.wiktionary.org/wiki/Ap%C3%A9ndice:Palabras_m%C3%A1s_frecuentes_del_ingl%C3%A9s Palabras frecuentes] Entradas generadas hasta ahora: [https://es.wiktionary.org/wiki/Especial:Contribuciones/RoboJ2 Entradas generadas]. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 22:06 18 jun 2025 (UTC) :@[[Usuario:Cvmontuy|Cvmontuy]] No tengo motivos para oponerme PERO: :* Desearía que se respete completamente el formato nuevo de la guía de estilo. O sea, las formas flexivas van con el título de nivel 3 "Forma flexiva" y luego en el nivel 4 va el título de Forma sustantiva, adjetiva, etc. Lo de poner directamente el título de nivel 4 en el nivel 3 es una costumbre antigua que la seguimos tolerando solo porque no hice una migración masiva de todas las páginas con formas flexivas y como no es prioridad hacerlo ahora mismo no es un error grave pero las páginas nuevas no deberían ser creadas con ese formato. :* Las palabras se agregan completamente o no se agregan, pero no crees más esbozos con tu bot, me refiero a lo que aparece en [[sends]] o en [[reflections]]. :* Podrías compartir el repositorio de la app? Podríamos extenderlo a más idiomas en un futuro. ::@[[Usuario:Tmagc|Tmagc]],@[[Usuario:Peter Bowman|Peter Bownman]], aqui les dejo el repositorio [https://github.com/cvmontuy1/WikiBotJ316 WikiBotJ316], no es un trabajo profesional pero desde mi punto de vista funciona, saludos --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:50 24 jun 2025 (UTC) :[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:00 19 jun 2025 (UTC) ::@[[Usuario:Tmagc|Tmagc]] ::::*Si revisas las entradas creadas, verás que están tal como mencionas: en el nivel 3 aparece “Forma flexiva” y en el nivel 4, “Forma sustantiva/verbal”. ::::*Se ha utilizado la plantilla <nowiki>{{esbozo}}</nowiki> porque la fuente de información no es perfecta ni completa, y el programa tampoco lo es. Reconoce ciertas expresiones regulares para extraer los datos, pero no es tan avanzado como para analizar el contenido de forma más profunda. ::::*Todas las entradas creadas siguen la guía de estilo y todas incluyen al menos una definición y su categoría gramatical y la prounciación si esta publicad en el en.wiktionary. Las entradas creadas son antropónimos y plurales, por lo que en la mayoria no hay mucho más que añadir en ellas. ¿O qué criterio de aceptación considerarías necesario? Más adelante, Si no lo prohiben, tal vez integre entradas con terminaciones adverbiales (-ly) y las formas verbales (-ed, -ing). ::::*Creo que es más sencillo y, por lo tanto, útil comenzar con un esbozo que desde cero. ::::*En el proyecto tenemos cientos de entradas como [[burocratizar]] o [[catatonizar]], que prácticamente están vacías. Las que yo aporto siempre incluyen al menos una definició. y muchas entradas que tenemos en el proyecto iniciaron como un esbozo, o queremos ya prohibiir los esbozos oficialmente?, y entonces debemos elimianr la plantilla correspondiente? ::::*No he creado un espacio en gitlab pero espero la proxima semana hacerlo y compartir el código correspondiente. ::::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:55 19 jun 2025 (UTC) :::@[[Usuario:Cvmontuy|Cvmontuy]] :::* Como decía, lo de los esbozos que están ahora creados fue por una mala decisión que se tomó en su momento, de las tantas que han perjudicado al proyecto pero creeme que si hubiera estado en su momento no lo habría permitido. Así y todo, no sigamos propagando el mal, no creemos más esbozos innecesariamente. Si la aplicación tiene problemas para parsear las entradas de en.wikt, entonces deberán hacerse las pruebas que sean necesarias hasta que funcione aceptable. :::* No es necesario extraer toda la información, puede que hayan cosas que no aplican para nuestro sitio. Pero las etimologías y las definiciones deberían aparecer. :::* Yo me centraría en agregar formas canónicas; las formas flexivas en todo caso las podríamos crear sino con la información de las entradas que tenemos en nuestro Wikcionario. :::* En lugar de luchar innecesariamente con las expresiones regulares, deberías usar una biblioteca que parsee wikitexto. Yo implementé un algoritmo en Python para parsear las entradas en es.wikt usando la de [https://github.com/5j9/wikitextparser 5j9]. Podríamos crear un repositorio para que te comparta lo que tengo y trabajar en conjunto, pero nunca tuve éxito con Java. [https://www.mediawiki.org/wiki/Alternative_parsers Acá hay una lista con otras implementaciones]. :::[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 05:24 19 jun 2025 (UTC) ::::Hola. Mi bot está escrito en Java y tengo un parser específico para eswiktionary que no funciona mal, está probado desde 2015 ([https://github.com/PeterBowman/wikibot/tree/master/wikibot/src/main/java/com/github/wikibot/parsing/eswikt fuente]; la pega es que el código es un desastre infumable). Con respecto a lo que se menciona de [[burocratizar]] y otras entradas vacías (sin definiciones), mi opinión es que no se deberían haber creado, y estaría a favor de borrarlas. No colocaría {{ep|esbozo}} en aquellas entradas importadas que sean simples formas flexivas; lo único que se puede hacer con esas plantillas es quitarlas directamente (aunque coincido con Tmagc en que preferiría usar la información de eswiktionary en lugar de importar/convertir). Por otro lado, permiten que un usuario humano las revise a posteriori para verificar que el bot haya funcionado bien... Para conjugar ambas opciones, yo propondría usar una plantilla de aviso diferente, específica para páginas importadas por bot que requieran de revisión manual. Algo como {{ep|importado}}, pero puntualizando que se requiere de revisión más que adaptación a nuestro formato. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 08:44 19 jun 2025 (UTC) ::*El programa desarrollado está actualmente diseñado para importar antropónimos y plurales. Toma del en.wiktionary la información de pronunciación y determina si el término es masculino, femenino, ambos, o si se trata de un hipocorístico. En el caso de los plurales, verifica si la palabra corresponde a un sustantivo, una forma verbal, o ambas. Esta información, para este tipo de entradas, no está disponible en el es.wiktionary. ::*Estoy de acuerdo en que sería más útil generar entradas de las formas canónicas o basarse directamente en el es.wiktionary, pero por ahora esas tareas no están dentro del alcance de este programa. Quizá más adelante pueda trabajar en ese sentido. ::*Gracias por compartir las librerías; no sabía que existían. Las revisaré con calma más adelante. Revisé brevemente tu programa, @Peter Bowman, y me pareció bien estructurado y fácil de entender. El mecanismo de parseo que usaste es muy similar al que empleo en el programa que estamos discutiendo ahora. El objetivo de identificar plantillas en en.wiktionary y analizarlas es técnicamente sencillo, pero los contenidos no siempre usan plantillas y hay mucho texto libre. En estos casos, más que un parser, lo que realmente ayudaría sería integrar una IA para la traducción. No lo he hecho aún, y tampoco sé si eso sería legalmente válido. ::Por favor, intentemos concluir: ::*Si en lugar de poner “Nombre de varios lugares”, el programa indica explícitamente textos como “Ciudad de...”, y además agrega la etimología cuando esta se encuentra expresada mediante plantilas en el en.wiktionary, ¿con estos cambios el programa obtiene autorización para seguir operando? ::*En cuanto a sustituir la plantilla <nowiki>{{esbozo}}</nowiki>, existe la plantilla {{ep|creado_por_bot}}. ¿Debo usar esa? ::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:46 19 jun 2025 (UTC) == Noticias técnicas: 2025-26 == <section begin="technews-2025-W26"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/26|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático continuarán con el lanzamiento de [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo al tercer y último grupo de Wikipedias. Este filtro utiliza el modelo de Riesgo de Reversión (Revert Risk), el cual fue creado por el equipo de Investigación, y destaca las ediciones que posiblemente deban ser revertidas para ayudar así a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. La característica será lanzada en las siguientes Wikipedias: {{int:project-localized-name-azwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-lawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mlwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mrwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-nnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-pawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-swwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tlwiki/es}}. El lanzamiento continuará durante las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] '''Actualizaciones para editores''' * La semana pasada, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] se implementaron en las Wikipedias en checo, coreano y turco. Esta semana y la próxima, los lanzamientos se realizarán en Wikipedias más grandes. [[mw:Talk:Trust and Safety Product/Temporary Accounts|Comparte tus ideas]] sobre el proyecto. [https://phabricator.wikimedia.org/T340001] * Durante esta semana, el equipo de Edición lanzará [[mw:Special:MyLanguage/Help:Edit check#Multi check|Multi Check]] en todas las Wikipedias (excepto la Wikipedia en inglés). Esta característica muestra múltiples [[mw:Special:MyLanguage/Help:Edit check#Reference check|verificaciones de referencias]] junto a la experiencia de edición. Esto anima a los usuarios a añadir citas cuando agregan varios párrafos a un artículo de Wikipedia. Esta característica estuvo disponible como una prueba A/B. [https://analytics.wikimedia.org/published/reports/editing/multi_check_ab_test_report_final.html#summary-of-results Las pruebas mostraron] que los usuarios a quienes se les mostraban las múltiples verificaciones eran 1.3 veces más propensos a añadir una referencia a su edición, y su edición era 34.7% menos propensa a ser revertida. [https://phabricator.wikimedia.org/T395519] * Unas pocas páginas deben ser renombradas debido a actualizaciones de software y para ajustarse a estándares Unicode más recientes. Todos estos cambios están relacionados con las mayúsculas en los títulos. Aproximadamente 71 páginas y 3 archivos serán renombrados en 15 wikis; la lista completa se encuentra en [[phab:T396903|esta tarea]]. Los desarrolladores renombrarán estas páginas la próxima semana y solucionarán las redirecciones y los enlaces de archivos incrustados unos minutos después mediante una actualización de la configuración del sistema. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:24}} {{PLURAL:24|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se arregló un error que había hecho que las páginas se desplazaran hacia arriba cuando se selecciona texto cerca de la parte superior. [https://phabricator.wikimedia.org/T364023] '''Actualizaciones para los colaboradores técnicos''' * Ahora, los editores pueden usar los módulos de Lua para filtrar y transformar datos tabulares y utilizarlos con [[mw:Special:MyLanguage/Extension:Chart|Extension:Chart]]. Esto puede ser empleado para diversos objetivos, como seleccionar un subconjunto de filas o columnas de los datos, convertir entre unidades, realizar procesamiento estadístico y otras transformaciones útiles. [[mw:Special:MyLanguage/Extension:Chart/Transforms|Lee más para obtener información sobre cómo usar las transformaciones]]. [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Chart/Project/Updates] * La variable <code dir=ltr>all_links</code> en el [[Special:AbuseFilter|Filtro Antiabusos]] ahora se llama <code dir=ltr>new_links</code> para ser consistente con las otras variables. Los usos anteriores seguirán funcionando. [https://phabricator.wikimedia.org/T391811] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.7|MediaWiki]] '''A fondo''' * El último [[mw:Special:MyLanguage/Growth/Newsletters/34|Boletín de Growth]] está disponible. Incluye: las actualizaciones recientes de la tarea "Agregar un enlace", dos nuevas características de participación para los recién llegados y actualizaciones de la configuración comunitaria. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W26"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:21 23 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Noticias técnicas: 2025-27 == <section begin="technews-2025-W27"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/27|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|extensión CampaignEvents]] ya está habilitada en todas las Wikipedias. Esta extensión facilita la organización y participación en actividades colaborativas, como editatones y Wikiproyectos, en las wikis. La extensión incluye tres características: [[m:Special:MyLanguage/Event Center/Registration|Registro al evento]], [[m:Special:MyLanguage/CampaignEvents/Collaboration list|Lista de colaboración]] y [[m:Campaigns/Foundation Product Team/Invitation list|Lista de invitaciones]]. Para solicitar la extensión para tu wiki, visita la [[m:Special:MyLanguage/CampaignEvents/Deployment status#How to Request the CampaignEvents Extension for your wiki|página de información de Despliegues]]. '''Actualizaciones para editores''' * Los mantenedores del Filtro Antiabusos ahora pueden [[mw:Special:MyLanguage/Extension:IPReputation/AbuseFilter variables|evaluar la reputación de la IP]] en los [[mw:Special:MyLanguage/Extension:AbuseFilter|Filtros]]. Los datos de la reputación de la IP son información sobre los proxies y VPN asociados a la dirección IP del usuario. Esta información no se muestra públicamente y no se genera para acciones realizadas por cuentas registradas. [https://phabricator.wikimedia.org/T354599] * El contenido oculto que se encuentra en [[mw:Special:MyLanguage/Manual:Collapsible elements|partes colapsables de las wikipáginas]] ahora se mostrará cuando alguien busque en la página usando la función "Buscar en la página" del navegador (Ctrl+F o ⌘F) en los navegadores compatibles. [https://phabricator.wikimedia.org/T327893][https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/hidden#browser_compatibility] * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] Una nueva función, llamada [[mw:Special:MyLanguage/Help:TemplateData/Template discovery|Plantillas Favoritas]], se lanzará a finales de esta semana en todos los proyectos (excepto en la Wikipedia en inglés, que la recibirá la próxima semana), tras una fase piloto en las Wikipedias en polaco y árabe, y los Wikisources en italiano e inglés. Esta característica ofrecerá una mejor manera de descubrir y utilizar plantillas mediante el cuadro de diálogo de plantillas, permitiendo a los usuarios añadirlas a una "lista especial de favoritos". La función es compatible tanto con el Editor Visual como con el editor de Wikitexto. Esta funcionalidad es un [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|deseo de la comunidad]]. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:31}} {{PLURAL:31|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se solucionó un error que causaba que algunas Notificaciones se enviaran varias veces. [https://phabricator.wikimedia.org/T397103] '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.8|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W27"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:40 30 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28917415 --> == Modificaciones propuestas para pron-graf == Hola, dos modificaciones que estoy considerando: * Estaba pensando en que el sistema de doble índice puede llevar a confusiones ya que contrasta con el resto de las plantillas en donde el índice está al final pero en esta queda al principio. Quiero decir, si no necesito agregar ninguna subvariante y tengo 3 pronunciaciones lo que debería hacer (sin módulo obviamente) sería <nowiki>|1fone</nowiki>, <nowiki>|2fone</nowiki>, <nowiki>|3fone</nowiki>. Sin embargo, por lo menos a mí me ha pasado que escribí sin querer <nowiki>|fone1</nowiki>, <nowiki>|fone2</nowiki>, <nowiki>|fone3</nowiki>. A diferencia del resto de plantillas en donde se avanza naturalmente con el índice pospuesto, en esta hay que avanzar con el índice antepuesto. La documentación sobre este detalle me parece que sería inevitablemente engorrosa. Lo que propongo es simplificar a un único índice pospuesto en lugar de antepuesto para variantes principales, y las subvariantes separarlas con punto y coma. :Tomando como ejemplo [[withstand]], pasaríamos de esto: :<code><nowiki>{{pron-graf|leng=en |pron=Conservative Received Pronunciation|1fono1=wɪðˈstænd|1fono2=wɪθˈstænd |2pron=General American, Standard Canadian|2fono=wɪðˈstænd|2fone2=wɪðˈstɛənd|2fnota2=/æ/ raising|2audio2=en-us-withstand.ogg|2aunota2=California|2audio3=LL-Q1860 (eng)-Wodencafe-withstand.wav|2aunota3=Texas|2fone4=wɪðˈstɛːnd|2fnota4=/æ/ raising|2audio5=LL-Q1860 (eng)-Grendelkhan-withstand.wav|2aunota5=Connecticut|2fono6=wɪθˈstænd|2fone7=wɪθˈstɛənd|2fnota7=/æ/ raising|2audio7=LL-Q1860 (eng)-Semperosculto-withstand.wav|2aunota7=EE. UU.|2fone8=wɪθˈstɛːnd|2fnota8=/æ/ raising|2audio8=LL-Q1860 (eng)-Assorted-Interests-withstand.wav|2aunota8=Ciudad de Nueva York |3pron=Australia|3fono1=wɪðˈstænd|3fone2=wɪðˈsteːnd|3fnota2=/æ/ raising|3fono3=wɪθˈstænd|3fone4=wɪθˈsteːnd|3fnota4=/æ/ raising |ls=2 }}</nowiki></code> :A esto: :<code><nowiki>{{pron-graf|leng=en |pron1=Conservative Received Pronunciation|fono1=wɪðˈstænd;wɪθˈstænd |pron2=General American, Standard Canadian|fono2=wɪðˈstænd;;;;;wɪθˈstænd|fone2=;wɪðˈstɛənd;;wɪðˈstɛːnd;;;wɪθˈstɛənd;wɪθˈstɛːnd|fnota2=;/æ/ raising;;/æ/ raising;;;/æ/ raising;/æ/ raising|audio2=;en-us-withstand.ogg;LL-Q1860 (eng)-Wodencafe-withstand.wav;;LL-Q1860 (eng)-Grendelkhan-withstand.wav;;LL-Q1860 (eng)-Semperosculto-withstand.wav;LL-Q1860 (eng)-Assorted-Interests-withstand.wav|aunota2=;California;Texas;;Connecticut;;EE. UU.;Ciudad de Nueva York |pron3=Australia|fono3=wɪðˈstænd;;wɪθˈstænd|fone3=;wɪðˈsteːnd;;wɪθˈsteːnd|fnota3=;/æ/ raising;;/æ/ raising |ls=2 }}</nowiki></code> :Lo bueno es que simplificaría la documentación y la consistencia entre sistemas usados en las distintas plantillas. Lo malo es que no se podrían añadir pronunciaciones o archivos con punto y coma, algo que de todas formas no lo he visto en el sitio hasta la fecha. Bueno, eso aparte de que deberían cambiar los hábitos quienes agregan transcripciones frecuentemente. El resto seguiría igual, es decir, esos parámetros (<nowiki>|fone</nowiki>, <nowiki>|fono</nowiki>, <nowiki>|fgraf</nowiki>, <nowiki>|fnota</nowiki>, <nowiki>|audio</nowiki>, <nowiki>|aunota</nowiki>) seguirían funcionando como un arreglo doble. Las páginas afectadas son aproximadamente 5000, casi todas del inglés (otros idiomas son prácitamente irrelevantes ya que en su mayoría se pueden automatizar). La migración la podría hacer en unos pocos días. * Después, añadir un nuevo parámetro que se trate de homófonos pero a nivel de pronunciación, es decir, sería un arreglo doble a completar con los homófonos que lo son solo respecto de una pronunciación específica, por ejemplo, si es solo homófono en la pronunciación seseante, se agregaría al lado de la transcripción que la palabra en cuestión es homófona en lugar de aparecer al final como homófono a nivel global. En principio convivirían ambos parámetros, al menos por un tiempo ya que la migración completa de uno al otro sería mucho más lenta y difícil que lo anterior. Qué nombre quieren ponerle? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 22:37 2 jul 2025 (UTC) :La verdad es que el sistema que existe lo considero muy cómodo ya que el número antepuesto representa la fila y el pospuesto, la columna. En el caso de los homófonos, se entiende lo mismo, es decir, en la misma fila aparecen todos los homófonos. Si el número estuviese delante se entendería que están hacia abajo, en distintas filas. :Por otra parte, se debe considerar que en Wikcionario (español) tenemos menos de 35 colaboradores activos. Un cambio como el propuesto podría ocasionar que varios de ellos se vayan. Como ejemplo, recuerdo que poco después de comenzar a agregar las pronunciaciones AFI en el diccionario alemán, me exigieron que dejara de agregar los puntos que indican la separación de las sílabas. Como respondí, dejando de colaborar en ese diccionario. Ahora, cuando pasaron varios años, yo mismo dejé de poner los puntos por ser redundante (cuando se conocen las reglas de silabificación del inglés). Lo malo desde el punto de vista de dicho diccionario es que no volví, porque tendría que volver a estudiar como editar bajo su estructura y convenciones. :En cuanto a incorporar homófonos por pronunciación, se puede hacer con un retoque al sistema actual. De hecho, sería mejor que pudiesen colocarse en cada fila y por columna ya que, en inglés al menos, los homófonos dependen usualmente del dialecto. Para subsanar este problema, se recurre a colocar hnota para cada caso. Así por ejemplo, en [[bear]], al lado de los homófonos aparecen unas hnotas (difíciles de tomar en cuenta ya que están al final de la página) que indican con cuales dialectos se da la homofonía. Además, es frecuente que se escriba "algunas pronunciaciones" y queda al lector determinar cuales son esas pronunciaciones comparando las de la palabra que está viendo con las del homófono sugerido. [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 00:45 3 jul 2025 (UTC) == Etimología por metonimia == ¿Hace falta agregar a la plantilla {{ep|etimología}} la opción para metonimias?, ¿Que opinan? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:59 3 jul 2025 (UTC) m0zszdvbjiswq6x8rts3zcqd53gnbma 5823439 5823435 2025-07-03T03:02:22Z Tmagc 158167 /* Etimología por metonimia */ Respuesta 5823439 wikitext text/x-wiki <!-- Inicio Encabezado del café, aviso, información histórica y información de archivado --> <div style="text-align: center;"> {{/Aviso}} {{/Histórico}} </div> {{atajo|WN:C}} [[Categoría:Wikcionario:Café]] <!-- Fin del Encabezado del café --> <!-- Inicio configuración robot archivado; no tocar si no se sabe lo que se hace --> {{Usuario:MABot/config |archive = Wikcionario:Café/%(year)d %(month)02d |algo = old(30d) |counter = 1 |archiveheader = {{Archivo}} }} <h1>{{MONTHNAME|{{PREVIOUSMONTH}}}} de {{PREVIOUSMONTH.YEAR}}</h1> <div class="mw-archivedtalk"> {{/{{PREVIOUSMONTH.YEAR}} {{PREVIOUSMONTH}}}} </div> <h1>Actual</h1> == Etimología de siglas == Hola, copié el módulo etimología a etimología_test para adaptarlo al manejo de siglas, se agrega el parámetro nosep (no separador). :Con parámetro nosep ::Sigla de [[organización#Español|''organización'']] ''de'' ''las'' [[naciones#Español|''naciones'']] [[unidas#Español|''unidas'']] :Sin parámetro nosep ::Sigla de [[organización#Español|''organización'']], ''de'', ''las'', [[naciones#Español|''naciones'']] y [[unidas#Español|''unidas'']] ¿Están de acuerdo en aprobar este cambio para implementarlo en el módulo original? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>mensajes)</sup>]] 21:19 30 may 2025 (UTC) :Pues, creo que es bastaaante raro que las siglas vengan de términos con comas, el único caso que se me viene a la mente es la UNESCO y es una sola. Siento yo que en esos extraños y pocos casos se podría usar el parámetro nl=s y añadir el enlace manual: :* Si esta en Wikipedia, podría enlazarse directamente: :{{etimología|sigla|[[w:United Nations Educational, Scientific and Cultural Organization|United Nations Educational, Scientific and Cultural Organization]]|nl=s}}. :* Enlace a otros términos del Wikcionario: :{{etimología|sigla|[[building]], [[antenna]]-tower, [[span]], [[earth]]|nl=s}}. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 22:45 30 may 2025 (UTC) :Ídem a Raos, yo tampoco entiendo cuál era el problema original. Podrías mostrar algún ejemplo en donde esa modificación sea relevante? Yo creo que si la sigla es de varias palabras sería más bien un compuesto acronímico (actualmente clasificado como compuesto). [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:34 31 may 2025 (UTC) ::De acuerdo --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:56 31 may 2025 (UTC) :::Entiendo que el "de acuerdo" quiere decir que la propuesta ha sido retirada. Elimino entonces [[Plantilla:etimologíapba]] y [[Módulo:etimología test]] para que no figuren en el espacio principal. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:24 7 jun 2025 (UTC) ::::Si gracias! [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:37 7 jun 2025 (UTC) == Noticias técnicas: 2025-24 == <section begin="technews-2025-W24"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/24|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * El [[mw:Special:MyLanguage/Trust and Safety Product|equipo de Confianza y Seguridad de Producto]] está terminando el trabajo necesario para implementar [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] en las Wikipedias más grandes a finales de este mes. El equipo ha trabajado con los stewards y otros usuarios con permisos extendidos para predecir y responder a los diversos casos de uso que podrían aparecer en las wikis más grandes, así los integrantes de las comunidades pueden continuar el patrullaje y la moderación de las cuentas temporales. Esta es la segunda de tres fases de implementación; la última se realizará, al menos, en septiembre. Para más información sobre los desarrollos recientes de este proyecto, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|lee esta actualización]]. Si tienes comentarios o preguntas, escribe un mensaje en [[mw:Talk:Trust and Safety Product/Temporary Accounts|la página de discusión]], y [[m:Event:CEE Catch up Nr. 10 (June 2025)|únete a CEE Catch Up]] este martes. '''Actualizaciones para editores''' * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] La característica de [[mw:Special:MyLanguage/Help:Watchlist expiry|expiración de la lista de seguimiento]] permite a los editores vigilar páginas por un tiempo. Después de este período, la página se elimina automáticamente de la lista de seguimiento. A partir de esta semana, puedes establecer tu preferencia predeterminada para hacer seguimiento de páginas. Las [[Special:Preferences#mw-prefsection-watchlist-pageswatchlist|preferencias]] también te permiten establecer diversos tiempos de seguimiento para las ediciones en páginas existentes, páginas creadas y cuando se revierte la página. [https://phabricator.wikimedia.org/T265716] [[File:Talk pages default look (April 2023).jpg|thumb|alt=Captura de pantalla de las mejoras visuales realizadas en las páginas de discusión|Ejemplo de una página de discusión con el nuevo diseño, en francés.]] * La apariencia de las páginas de discusión cambiará en la mayoría de las Wikipedias. Algunas wikis, como las que se mencionan en [[m:Special:MyLanguage/Tech/News/2024/19|este enlace]], ya han recibido este rediseño, mientras que [[phab:T379264|otras]] lo recibirán más tarde. Puedes leer más sobre estos cambios en [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|''Diff'']]. Es posible desactivar esta función en tus [[Special:Preferences#mw-prefsection-editing-discussion|preferencias de usuario]], en la sección "{{int:discussiontools-preference-visualenhancements}}". [https://phabricator.wikimedia.org/T319146][https://phabricator.wikimedia.org/T392121] * Los usuarios con permisos extendidos específicos (incluyendo administradores, burócratas, comprobadores de usuarios, supresores y ''stewards'') podrán [[phab:T358853|acceder temporalmente a la dirección IP]] de todas las cuentas temporales por un tiempo limitado para combatir vandalismos recurrentes. Esta característica fue solicitada por los ''stewards''. [https://phabricator.wikimedia.org/T386492] * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático seguirán implementando [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo en varias Wikipedias más. Este filtro utiliza el modelo Revert Risk, creado por el equipo de Investigación, para resaltar las ediciones que probablemente serán revertidas y así ayudar a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. Esta característica se desplegará en las siguientes Wikipedias: {{int:project-localized-name-afwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-bnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-cywiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-hawwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-iswiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-kkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-simplewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-trwiki/es}}. La implementación continuará en las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:27}} {{PLURAL:27|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * Se les pide a los editores activos del Filtro Anti Abusos en Meta-Wiki y en las Wikipedias grandes que actualicen los filtros para que sean compatibles con las cuentas temporales. Un enlace a las instrucciones y una lista privada de filtros que necesitan verificación están disponibles en Phabricator en [[phab:T369611|este enlace]]. * Los módulos de Lua ahora tienen acceso al nombre de la página que tiene asociada una miniatura de imagen, y en [https://gerrit.wikimedia.org/g/operations/mediawiki-config/+/2e4ab14aa15bb95568f9c07dd777065901eb2126/wmf-config/InitialiseSettings.php#10849 algunas wikis] también a la información de evaluación del Wikiproyecto. Esto es posible usando dos nuevas propiedades en [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#added-by-extensions|mw.title objects]], llamadas <code dir=ltr>pageImage</code> y <code dir=ltr>pageAssessments</code>. [https://phabricator.wikimedia.org/T131911][https://phabricator.wikimedia.org/T380122] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.5|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W24"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:16 10 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28846858 --> == Categoría: Personajes Bíblicos o Antropónimos Bíblicos == ¿Puedo crear esta categoria? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:30 12 jun 2025 (UTC) :Sin una buena justificación, yo estoy en contra por los mismos motivos que en [[Wikcionario:Café/2020 04#Francisco Franco]]. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:17 12 jun 2025 (UTC) ::Por cierto, ya habíamos borrado [[:Categoría:Personajes bíblicos]] previamente, a raíz de aquella discusión. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:21 12 jun 2025 (UTC) :Los nombres propios quedan fuera del alcance en general, salvo nombres o apellidos genéricos que no referencien a ninguna persona en particular, o sinó los nombres de ciudades o topónimos. Fuera de eso, otros nombres particulares conciernen solo a Wikipedia. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:30 12 jun 2025 (UTC) ::Aca estoy hablando de entradas como [[Adán]], [[Eva]], [[Moisés]] y solo agregar una clasificación. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 21:00 12 jun 2025 (UTC) :::¿Qué clasificación? Estás lanzando una propuesta imprecisa y poco estudiada: justo en esas tres entradas que citas ya había acepciones bíblicas y fueron eliminadas. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 22:19 12 jun 2025 (UTC) ::::Agrega la categoría Antropónimos Bíblicos, en los nombres correspondientes. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 04:32 13 jun 2025 (UTC) :::::Otro motivo para no hacerlo es que me opongo a las "categorías silenciosas", fuera de {{ep|csem}} u otra plantilla similar. En tu caso, de acuerdo a mis esquemas una categoría como esa debería ir en {{ep|csem}} para que aparezca el supuesto campo semántico antes de la definición del nombre propio, lo que incluso hace que quede peor. Pero tranquilo que hay proyectos para eso. En Wikipedia [[w:Categoría:Personajes_del_Nuevo_Testamento|ya lo hicieron]]. Aunque todavía les faltan algunos, como [[w:Tomás el Apóstol]], que justo es mi favorito xd. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:47 13 jun 2025 (UTC) ::::::Opino similar, solo estaría de acuerdo sí se agregara la acepción que explica su significado bíblico: ::::::;1 Religión: Primer hombre según la Biblia. ::::::;2: ''Nombre de pila de varón''. ::::::Y que Antropónimos bíblicos sea una etiqueta que se muestre como Religión o Cristrianismo o algo así. ::::::Pero si ya se había acordado que entradas de ese estilo no van aquí, entonces pues no. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 01:07 16 jun 2025 (UTC) == Vote now in the 2025 U4C Election == <div lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{Int:Please-translate}} Eligible voters are asked to participate in the 2025 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2025|2025 Election information page]]. The vote closes on 17 June 2025 at [https://zonestamp.toolforge.org/1750161600 12:00 UTC]. Please vote if your account is eligible. Results will be available by 1 July 2025. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 23:01 13 jun 2025 (UTC) </div> <!-- Mensaje enviado por Usuario:Keegan (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28848819 --> == Noticias técnicas: 2025-25 == <section begin="technews-2025-W25"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/25|Traducciones en varios idiomas]] están disponibles. '''Actualizaciones para editores''' * Puedes [https://wikimediafoundation.limesurvey.net/359761?lang=en nominar tus herramientas favoritas] para la sexta edición del [[m:Special:MyLanguage/Coolest Tool Award|Coolest Tool Award]]. Las nominaciones son anónimas y estarán abiertas hasta el 25 de junio. Puedes reutilizar el formulario para enviar múltiples nominaciones. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:33}} {{PLURAL:33|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.6|MediaWiki]] '''A fondo''' * El personal de la Fundación y los voluntarios técnicos utilizan las API de Wikimedia para construir herramientas, aplicaciones, características e integraciones que mejoran las experiencias de los usuarios. Durante los próximos años, el equipo de Interfaces de MediaWiki invertirá en API web de Wikimedia (HTTP) para satisfacer mejor las necesidades técnicas de los voluntarios y proteger la infraestructura de Wikimedia de posibles abusos. Puedes [https://techblog.wikimedia.org/2025/06/12/apis-as-a-product-investing-in-the-current-and-next-generation-of-technical-contributors/ leer más sobre sus planes para evolucionar las API en esta publicación de Techblog]. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W25"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:38 16 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Convocatoria a Candidaturas para la Junta Directiva de la Fundación Wikimedia, 2025 == <section begin="announcement-content" /> :''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Announcement/Call for candidates|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2025/Announcement/Call for candidates}}&language=&action=page&filter= {{int:please-translate}}]</div> Saludos, La [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|convocatoria a candidaturas para la selección 2025 de Miembros de la Junta Directiva de la Fundación Wikimedia se encuentra abierta]] desde el 17 de junio de 2025 hasta el 2 de julio de 2025 a horas 11:59 UTC [1]. La Junta Directiva supervisa el trabajo de la Fundación Wikimedia, y cada Miembro cumple un periodo de funciones de tres años [2]. El cargo es voluntario. Este año, la comunidad Wikimedia votará desde fines de agosto hasta el mes de septiembre de 2025 para ocupar dos (2) puestos en la Directiva de la Fundación. ¿Podría usted, o alguien a quien usted conozca, tener lo que se requiere para unirse a la Junta Directiva de la Fundación Wikimedia? [3] Puede aprender más acerca de los requisitos para postularse a estos puestos de liderazgo, además del modo de presentar una candidatura en [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidate application|esta página de Meta-wiki]], para sí o para alguien que usted considere que podría presentarse a la elección de este año. Atentamente, Abhishek Suryawanshi<br /> Director del Comité Electoral A nombre del Comité Electoral y del Comité de Gobernanza [1] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Call_for_candidates [2] https://foundation.wikimedia.org/wiki/Legal:Bylaws#(B)_Term. [3] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Resources_for_candidates<section end="announcement-content" /> [[Usuario:MediaWiki message delivery|MediaWiki message delivery]] ([[Usuario discusión:MediaWiki message delivery|discusión]]) 17:44 17 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:RamzyM (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28866958 --> == Importación de contenido desde en.wikitioanry == Estimados, Tengo una aplicación desarrollada en Java que utiliza la cuenta RoboJ2. En los últimos días, la he empleado para importar contenidos desde en.wiktionary siguiendo este proceso: Entrada de datos: El programa recibe como parámetro un archivo de texto que elaboro manualmente, donde se listan las entradas a procesar. Verificación: El sistema revisa si cada entrada existe en en.wiktionary y no está presente en es.wiktionary. Transformación: El programa analiza el wikitexto de la entrada y lo adapta al formato utilizado en es.wiktionary. Las entradas que he selecionado ahora han sido antróponimos y plurales de palabras que encontre aquí: [https://es.wiktionary.org/wiki/Ap%C3%A9ndice:Palabras_m%C3%A1s_frecuentes_del_ingl%C3%A9s Palabras frecuentes] Entradas generadas hasta ahora: [https://es.wiktionary.org/wiki/Especial:Contribuciones/RoboJ2 Entradas generadas]. [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 22:06 18 jun 2025 (UTC) :@[[Usuario:Cvmontuy|Cvmontuy]] No tengo motivos para oponerme PERO: :* Desearía que se respete completamente el formato nuevo de la guía de estilo. O sea, las formas flexivas van con el título de nivel 3 "Forma flexiva" y luego en el nivel 4 va el título de Forma sustantiva, adjetiva, etc. Lo de poner directamente el título de nivel 4 en el nivel 3 es una costumbre antigua que la seguimos tolerando solo porque no hice una migración masiva de todas las páginas con formas flexivas y como no es prioridad hacerlo ahora mismo no es un error grave pero las páginas nuevas no deberían ser creadas con ese formato. :* Las palabras se agregan completamente o no se agregan, pero no crees más esbozos con tu bot, me refiero a lo que aparece en [[sends]] o en [[reflections]]. :* Podrías compartir el repositorio de la app? Podríamos extenderlo a más idiomas en un futuro. ::@[[Usuario:Tmagc|Tmagc]],@[[Usuario:Peter Bowman|Peter Bownman]], aqui les dejo el repositorio [https://github.com/cvmontuy1/WikiBotJ316 WikiBotJ316], no es un trabajo profesional pero desde mi punto de vista funciona, saludos --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 15:50 24 jun 2025 (UTC) :[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:00 19 jun 2025 (UTC) ::@[[Usuario:Tmagc|Tmagc]] ::::*Si revisas las entradas creadas, verás que están tal como mencionas: en el nivel 3 aparece “Forma flexiva” y en el nivel 4, “Forma sustantiva/verbal”. ::::*Se ha utilizado la plantilla <nowiki>{{esbozo}}</nowiki> porque la fuente de información no es perfecta ni completa, y el programa tampoco lo es. Reconoce ciertas expresiones regulares para extraer los datos, pero no es tan avanzado como para analizar el contenido de forma más profunda. ::::*Todas las entradas creadas siguen la guía de estilo y todas incluyen al menos una definición y su categoría gramatical y la prounciación si esta publicad en el en.wiktionary. Las entradas creadas son antropónimos y plurales, por lo que en la mayoria no hay mucho más que añadir en ellas. ¿O qué criterio de aceptación considerarías necesario? Más adelante, Si no lo prohiben, tal vez integre entradas con terminaciones adverbiales (-ly) y las formas verbales (-ed, -ing). ::::*Creo que es más sencillo y, por lo tanto, útil comenzar con un esbozo que desde cero. ::::*En el proyecto tenemos cientos de entradas como [[burocratizar]] o [[catatonizar]], que prácticamente están vacías. Las que yo aporto siempre incluyen al menos una definició. y muchas entradas que tenemos en el proyecto iniciaron como un esbozo, o queremos ya prohibiir los esbozos oficialmente?, y entonces debemos elimianr la plantilla correspondiente? ::::*No he creado un espacio en gitlab pero espero la proxima semana hacerlo y compartir el código correspondiente. ::::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:55 19 jun 2025 (UTC) :::@[[Usuario:Cvmontuy|Cvmontuy]] :::* Como decía, lo de los esbozos que están ahora creados fue por una mala decisión que se tomó en su momento, de las tantas que han perjudicado al proyecto pero creeme que si hubiera estado en su momento no lo habría permitido. Así y todo, no sigamos propagando el mal, no creemos más esbozos innecesariamente. Si la aplicación tiene problemas para parsear las entradas de en.wikt, entonces deberán hacerse las pruebas que sean necesarias hasta que funcione aceptable. :::* No es necesario extraer toda la información, puede que hayan cosas que no aplican para nuestro sitio. Pero las etimologías y las definiciones deberían aparecer. :::* Yo me centraría en agregar formas canónicas; las formas flexivas en todo caso las podríamos crear sino con la información de las entradas que tenemos en nuestro Wikcionario. :::* En lugar de luchar innecesariamente con las expresiones regulares, deberías usar una biblioteca que parsee wikitexto. Yo implementé un algoritmo en Python para parsear las entradas en es.wikt usando la de [https://github.com/5j9/wikitextparser 5j9]. Podríamos crear un repositorio para que te comparta lo que tengo y trabajar en conjunto, pero nunca tuve éxito con Java. [https://www.mediawiki.org/wiki/Alternative_parsers Acá hay una lista con otras implementaciones]. :::[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 05:24 19 jun 2025 (UTC) ::::Hola. Mi bot está escrito en Java y tengo un parser específico para eswiktionary que no funciona mal, está probado desde 2015 ([https://github.com/PeterBowman/wikibot/tree/master/wikibot/src/main/java/com/github/wikibot/parsing/eswikt fuente]; la pega es que el código es un desastre infumable). Con respecto a lo que se menciona de [[burocratizar]] y otras entradas vacías (sin definiciones), mi opinión es que no se deberían haber creado, y estaría a favor de borrarlas. No colocaría {{ep|esbozo}} en aquellas entradas importadas que sean simples formas flexivas; lo único que se puede hacer con esas plantillas es quitarlas directamente (aunque coincido con Tmagc en que preferiría usar la información de eswiktionary en lugar de importar/convertir). Por otro lado, permiten que un usuario humano las revise a posteriori para verificar que el bot haya funcionado bien... Para conjugar ambas opciones, yo propondría usar una plantilla de aviso diferente, específica para páginas importadas por bot que requieran de revisión manual. Algo como {{ep|importado}}, pero puntualizando que se requiere de revisión más que adaptación a nuestro formato. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 08:44 19 jun 2025 (UTC) ::*El programa desarrollado está actualmente diseñado para importar antropónimos y plurales. Toma del en.wiktionary la información de pronunciación y determina si el término es masculino, femenino, ambos, o si se trata de un hipocorístico. En el caso de los plurales, verifica si la palabra corresponde a un sustantivo, una forma verbal, o ambas. Esta información, para este tipo de entradas, no está disponible en el es.wiktionary. ::*Estoy de acuerdo en que sería más útil generar entradas de las formas canónicas o basarse directamente en el es.wiktionary, pero por ahora esas tareas no están dentro del alcance de este programa. Quizá más adelante pueda trabajar en ese sentido. ::*Gracias por compartir las librerías; no sabía que existían. Las revisaré con calma más adelante. Revisé brevemente tu programa, @Peter Bowman, y me pareció bien estructurado y fácil de entender. El mecanismo de parseo que usaste es muy similar al que empleo en el programa que estamos discutiendo ahora. El objetivo de identificar plantillas en en.wiktionary y analizarlas es técnicamente sencillo, pero los contenidos no siempre usan plantillas y hay mucho texto libre. En estos casos, más que un parser, lo que realmente ayudaría sería integrar una IA para la traducción. No lo he hecho aún, y tampoco sé si eso sería legalmente válido. ::Por favor, intentemos concluir: ::*Si en lugar de poner “Nombre de varios lugares”, el programa indica explícitamente textos como “Ciudad de...”, y además agrega la etimología cuando esta se encuentra expresada mediante plantilas en el en.wiktionary, ¿con estos cambios el programa obtiene autorización para seguir operando? ::*En cuanto a sustituir la plantilla <nowiki>{{esbozo}}</nowiki>, existe la plantilla {{ep|creado_por_bot}}. ¿Debo usar esa? ::[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 12:46 19 jun 2025 (UTC) == Noticias técnicas: 2025-26 == <section begin="technews-2025-W26"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/26|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * Esta semana, los equipos de Herramientas de Moderación y Aprendizaje Automático continuarán con el lanzamiento de [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|un nuevo filtro en Cambios Recientes]], liberándolo al tercer y último grupo de Wikipedias. Este filtro utiliza el modelo de Riesgo de Reversión (Revert Risk), el cual fue creado por el equipo de Investigación, y destaca las ediciones que posiblemente deban ser revertidas para ayudar así a los patrulleros de Cambios Recientes a identificar contribuciones potencialmente problemáticas. La característica será lanzada en las siguientes Wikipedias: {{int:project-localized-name-azwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-lawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mkwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mlwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-mrwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-nnwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-pawiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-swwiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tewiki/es}}{{int:comma-separator/es}}{{int:project-localized-name-tlwiki/es}}. El lanzamiento continuará durante las próximas semanas para incluir [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|el resto de las Wikipedias en este proyecto]]. [https://phabricator.wikimedia.org/T391964] '''Actualizaciones para editores''' * La semana pasada, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|las cuentas temporales]] se implementaron en las Wikipedias en checo, coreano y turco. Esta semana y la próxima, los lanzamientos se realizarán en Wikipedias más grandes. [[mw:Talk:Trust and Safety Product/Temporary Accounts|Comparte tus ideas]] sobre el proyecto. [https://phabricator.wikimedia.org/T340001] * Durante esta semana, el equipo de Edición lanzará [[mw:Special:MyLanguage/Help:Edit check#Multi check|Multi Check]] en todas las Wikipedias (excepto la Wikipedia en inglés). Esta característica muestra múltiples [[mw:Special:MyLanguage/Help:Edit check#Reference check|verificaciones de referencias]] junto a la experiencia de edición. Esto anima a los usuarios a añadir citas cuando agregan varios párrafos a un artículo de Wikipedia. Esta característica estuvo disponible como una prueba A/B. [https://analytics.wikimedia.org/published/reports/editing/multi_check_ab_test_report_final.html#summary-of-results Las pruebas mostraron] que los usuarios a quienes se les mostraban las múltiples verificaciones eran 1.3 veces más propensos a añadir una referencia a su edición, y su edición era 34.7% menos propensa a ser revertida. [https://phabricator.wikimedia.org/T395519] * Unas pocas páginas deben ser renombradas debido a actualizaciones de software y para ajustarse a estándares Unicode más recientes. Todos estos cambios están relacionados con las mayúsculas en los títulos. Aproximadamente 71 páginas y 3 archivos serán renombrados en 15 wikis; la lista completa se encuentra en [[phab:T396903|esta tarea]]. Los desarrolladores renombrarán estas páginas la próxima semana y solucionarán las redirecciones y los enlaces de archivos incrustados unos minutos después mediante una actualización de la configuración del sistema. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:24}} {{PLURAL:24|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se arregló un error que había hecho que las páginas se desplazaran hacia arriba cuando se selecciona texto cerca de la parte superior. [https://phabricator.wikimedia.org/T364023] '''Actualizaciones para los colaboradores técnicos''' * Ahora, los editores pueden usar los módulos de Lua para filtrar y transformar datos tabulares y utilizarlos con [[mw:Special:MyLanguage/Extension:Chart|Extension:Chart]]. Esto puede ser empleado para diversos objetivos, como seleccionar un subconjunto de filas o columnas de los datos, convertir entre unidades, realizar procesamiento estadístico y otras transformaciones útiles. [[mw:Special:MyLanguage/Extension:Chart/Transforms|Lee más para obtener información sobre cómo usar las transformaciones]]. [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Chart/Project/Updates] * La variable <code dir=ltr>all_links</code> en el [[Special:AbuseFilter|Filtro Antiabusos]] ahora se llama <code dir=ltr>new_links</code> para ser consistente con las otras variables. Los usos anteriores seguirán funcionando. [https://phabricator.wikimedia.org/T391811] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.7|MediaWiki]] '''A fondo''' * El último [[mw:Special:MyLanguage/Growth/Newsletters/34|Boletín de Growth]] está disponible. Incluye: las actualizaciones recientes de la tarea "Agregar un enlace", dos nuevas características de participación para los recién llegados y actualizaciones de la configuración comunitaria. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W26"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:21 23 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 --> == Noticias técnicas: 2025-27 == <section begin="technews-2025-W27"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/27|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|extensión CampaignEvents]] ya está habilitada en todas las Wikipedias. Esta extensión facilita la organización y participación en actividades colaborativas, como editatones y Wikiproyectos, en las wikis. La extensión incluye tres características: [[m:Special:MyLanguage/Event Center/Registration|Registro al evento]], [[m:Special:MyLanguage/CampaignEvents/Collaboration list|Lista de colaboración]] y [[m:Campaigns/Foundation Product Team/Invitation list|Lista de invitaciones]]. Para solicitar la extensión para tu wiki, visita la [[m:Special:MyLanguage/CampaignEvents/Deployment status#How to Request the CampaignEvents Extension for your wiki|página de información de Despliegues]]. '''Actualizaciones para editores''' * Los mantenedores del Filtro Antiabusos ahora pueden [[mw:Special:MyLanguage/Extension:IPReputation/AbuseFilter variables|evaluar la reputación de la IP]] en los [[mw:Special:MyLanguage/Extension:AbuseFilter|Filtros]]. Los datos de la reputación de la IP son información sobre los proxies y VPN asociados a la dirección IP del usuario. Esta información no se muestra públicamente y no se genera para acciones realizadas por cuentas registradas. [https://phabricator.wikimedia.org/T354599] * El contenido oculto que se encuentra en [[mw:Special:MyLanguage/Manual:Collapsible elements|partes colapsables de las wikipáginas]] ahora se mostrará cuando alguien busque en la página usando la función "Buscar en la página" del navegador (Ctrl+F o ⌘F) en los navegadores compatibles. [https://phabricator.wikimedia.org/T327893][https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/hidden#browser_compatibility] * [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] Una nueva función, llamada [[mw:Special:MyLanguage/Help:TemplateData/Template discovery|Plantillas Favoritas]], se lanzará a finales de esta semana en todos los proyectos (excepto en la Wikipedia en inglés, que la recibirá la próxima semana), tras una fase piloto en las Wikipedias en polaco y árabe, y los Wikisources en italiano e inglés. Esta característica ofrecerá una mejor manera de descubrir y utilizar plantillas mediante el cuadro de diálogo de plantillas, permitiendo a los usuarios añadirlas a una "lista especial de favoritos". La función es compatible tanto con el Editor Visual como con el editor de Wikitexto. Esta funcionalidad es un [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|deseo de la comunidad]]. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:31}} {{PLURAL:31|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. Por ejemplo, se solucionó un error que causaba que algunas Notificaciones se enviaran varias veces. [https://phabricator.wikimedia.org/T397103] '''Actualizaciones para los colaboradores técnicos''' * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.8|MediaWiki]] ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W27"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:40 30 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28917415 --> == Modificaciones propuestas para pron-graf == Hola, dos modificaciones que estoy considerando: * Estaba pensando en que el sistema de doble índice puede llevar a confusiones ya que contrasta con el resto de las plantillas en donde el índice está al final pero en esta queda al principio. Quiero decir, si no necesito agregar ninguna subvariante y tengo 3 pronunciaciones lo que debería hacer (sin módulo obviamente) sería <nowiki>|1fone</nowiki>, <nowiki>|2fone</nowiki>, <nowiki>|3fone</nowiki>. Sin embargo, por lo menos a mí me ha pasado que escribí sin querer <nowiki>|fone1</nowiki>, <nowiki>|fone2</nowiki>, <nowiki>|fone3</nowiki>. A diferencia del resto de plantillas en donde se avanza naturalmente con el índice pospuesto, en esta hay que avanzar con el índice antepuesto. La documentación sobre este detalle me parece que sería inevitablemente engorrosa. Lo que propongo es simplificar a un único índice pospuesto en lugar de antepuesto para variantes principales, y las subvariantes separarlas con punto y coma. :Tomando como ejemplo [[withstand]], pasaríamos de esto: :<code><nowiki>{{pron-graf|leng=en |pron=Conservative Received Pronunciation|1fono1=wɪðˈstænd|1fono2=wɪθˈstænd |2pron=General American, Standard Canadian|2fono=wɪðˈstænd|2fone2=wɪðˈstɛənd|2fnota2=/æ/ raising|2audio2=en-us-withstand.ogg|2aunota2=California|2audio3=LL-Q1860 (eng)-Wodencafe-withstand.wav|2aunota3=Texas|2fone4=wɪðˈstɛːnd|2fnota4=/æ/ raising|2audio5=LL-Q1860 (eng)-Grendelkhan-withstand.wav|2aunota5=Connecticut|2fono6=wɪθˈstænd|2fone7=wɪθˈstɛənd|2fnota7=/æ/ raising|2audio7=LL-Q1860 (eng)-Semperosculto-withstand.wav|2aunota7=EE. UU.|2fone8=wɪθˈstɛːnd|2fnota8=/æ/ raising|2audio8=LL-Q1860 (eng)-Assorted-Interests-withstand.wav|2aunota8=Ciudad de Nueva York |3pron=Australia|3fono1=wɪðˈstænd|3fone2=wɪðˈsteːnd|3fnota2=/æ/ raising|3fono3=wɪθˈstænd|3fone4=wɪθˈsteːnd|3fnota4=/æ/ raising |ls=2 }}</nowiki></code> :A esto: :<code><nowiki>{{pron-graf|leng=en |pron1=Conservative Received Pronunciation|fono1=wɪðˈstænd;wɪθˈstænd |pron2=General American, Standard Canadian|fono2=wɪðˈstænd;;;;;wɪθˈstænd|fone2=;wɪðˈstɛənd;;wɪðˈstɛːnd;;;wɪθˈstɛənd;wɪθˈstɛːnd|fnota2=;/æ/ raising;;/æ/ raising;;;/æ/ raising;/æ/ raising|audio2=;en-us-withstand.ogg;LL-Q1860 (eng)-Wodencafe-withstand.wav;;LL-Q1860 (eng)-Grendelkhan-withstand.wav;;LL-Q1860 (eng)-Semperosculto-withstand.wav;LL-Q1860 (eng)-Assorted-Interests-withstand.wav|aunota2=;California;Texas;;Connecticut;;EE. UU.;Ciudad de Nueva York |pron3=Australia|fono3=wɪðˈstænd;;wɪθˈstænd|fone3=;wɪðˈsteːnd;;wɪθˈsteːnd|fnota3=;/æ/ raising;;/æ/ raising |ls=2 }}</nowiki></code> :Lo bueno es que simplificaría la documentación y la consistencia entre sistemas usados en las distintas plantillas. Lo malo es que no se podrían añadir pronunciaciones o archivos con punto y coma, algo que de todas formas no lo he visto en el sitio hasta la fecha. Bueno, eso aparte de que deberían cambiar los hábitos quienes agregan transcripciones frecuentemente. El resto seguiría igual, es decir, esos parámetros (<nowiki>|fone</nowiki>, <nowiki>|fono</nowiki>, <nowiki>|fgraf</nowiki>, <nowiki>|fnota</nowiki>, <nowiki>|audio</nowiki>, <nowiki>|aunota</nowiki>) seguirían funcionando como un arreglo doble. Las páginas afectadas son aproximadamente 5000, casi todas del inglés (otros idiomas son prácitamente irrelevantes ya que en su mayoría se pueden automatizar). La migración la podría hacer en unos pocos días. * Después, añadir un nuevo parámetro que se trate de homófonos pero a nivel de pronunciación, es decir, sería un arreglo doble a completar con los homófonos que lo son solo respecto de una pronunciación específica, por ejemplo, si es solo homófono en la pronunciación seseante, se agregaría al lado de la transcripción que la palabra en cuestión es homófona en lugar de aparecer al final como homófono a nivel global. En principio convivirían ambos parámetros, al menos por un tiempo ya que la migración completa de uno al otro sería mucho más lenta y difícil que lo anterior. Qué nombre quieren ponerle? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 22:37 2 jul 2025 (UTC) :La verdad es que el sistema que existe lo considero muy cómodo ya que el número antepuesto representa la fila y el pospuesto, la columna. En el caso de los homófonos, se entiende lo mismo, es decir, en la misma fila aparecen todos los homófonos. Si el número estuviese delante se entendería que están hacia abajo, en distintas filas. :Por otra parte, se debe considerar que en Wikcionario (español) tenemos menos de 35 colaboradores activos. Un cambio como el propuesto podría ocasionar que varios de ellos se vayan. Como ejemplo, recuerdo que poco después de comenzar a agregar las pronunciaciones AFI en el diccionario alemán, me exigieron que dejara de agregar los puntos que indican la separación de las sílabas. Como respondí, dejando de colaborar en ese diccionario. Ahora, cuando pasaron varios años, yo mismo dejé de poner los puntos por ser redundante (cuando se conocen las reglas de silabificación del inglés). Lo malo desde el punto de vista de dicho diccionario es que no volví, porque tendría que volver a estudiar como editar bajo su estructura y convenciones. :En cuanto a incorporar homófonos por pronunciación, se puede hacer con un retoque al sistema actual. De hecho, sería mejor que pudiesen colocarse en cada fila y por columna ya que, en inglés al menos, los homófonos dependen usualmente del dialecto. Para subsanar este problema, se recurre a colocar hnota para cada caso. Así por ejemplo, en [[bear]], al lado de los homófonos aparecen unas hnotas (difíciles de tomar en cuenta ya que están al final de la página) que indican con cuales dialectos se da la homofonía. Además, es frecuente que se escriba "algunas pronunciaciones" y queda al lector determinar cuales son esas pronunciaciones comparando las de la palabra que está viendo con las del homófono sugerido. [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 00:45 3 jul 2025 (UTC) == Etimología por metonimia == ¿Hace falta agregar a la plantilla {{ep|etimología}} la opción para metonimias?, ¿Que opinan? [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 02:59 3 jul 2025 (UTC) :Vendría bien, alguna vez vi que podría hacer falta. Aunque por supuesto son pocos casos, es decir, si la metonimia se da con respecto a una acepción anterior sería innecesario hacer un apartado etimológico nuevo. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 03:02 3 jul 2025 (UTC) 56fcbtu8vrvbntmabhfsthlv9c2znea perra 0 2060 5823304 5734236 2025-07-02T15:12:54Z Tmagc 158167 5823304 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|femenino|perro}}. Para la acepción que refiere al dinero, se debe a un extraño diseño de un león para las monedas de 5 y 10 pesetas acuñadas en 1870 en la Casa de la Moneda, que se parecía más a una perra, lo que originó el apodo popular en España. {{cita requerida}} [[Archivo:A female dog with her infants at Law Garden, Ahmedabad.JPG|thumb|perra (1)]] ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1 {{csem|mamíferos}}: {{plm|hembra}} del [[perro]] (''Canis lupus familiaris''). {{sinónimo|chucho}} {{relacionado|perrita|perraza|perrucha}} ;2: {{plm|prostituta}}. {{uso|despectivo|sexista|malsonante}} {{wikisauro|prostituta}} ;3: Mujer de hábitos [[licencioso]]s o [[promiscuo]]s. {{uso|peyorativo|sexista|malsonante}} ;4: Mujer [[mala]]. {{uso|peyorativo|sexista|malsonante}} ;5: {{plm|insistencia}} en algo de manera [[obstinado|obstinada]], [[irracional]] o [[arbitrario|arbitraria]]. {{sinónimo|emperro|porfía|tema}}. ;6: {{plm|enfado}} por una causa [[trivial]] o poco [[razonable]]. {{sinónimo|perreta|rabieta}}. {{ejemplo|Menuda perra le entró al niño porque no le compramos aquel juguete.}} ;7: Estado de [[intoxicación]] [[etílica]], [[embriaguez]], [[borrachera]]. {{uso|coloquial}} ;8: {{plm|dinero}}, especialmente en forma de [[moneda]]s. {{ámbito|España|Filipinas}}. {{uso|coloquial|frecuentemente en plural}}. {{sinónimo|gorda}} {{ejemplo|No me queda ni una perra en el bolsillo.}} ;9: {{plm|comentario}} [[distendido]], de intención [[gracioso|graciosa]], [[picante]] o [[equívoco|equívoca]]. {{ámbito|Honduras}}. {{sinónimo|chascarrillo}}. ;10: Vientre de las personas, sobre todo cuando es prominente. {{uso|vulgar}} {{ámbito|Chile}} {{sinónimo|barriga|panza|guata}} ==== Locuciones ==== {{trad-arriba|Locuciones con «perra»}} * [[perra chica]] * [[perra grande]] * [[perra gorda]] * [[soltar la perra]] * [[la perra le parirá lechones]] * [[de la perra]]: es alusión a algo malo o terrible {{trad-abajo}} ==== Información adicional ==== {{derivad|emperrarse|perrica|perrilla|perrina|perrona}} ==== Véase también ==== {{w}} ==== Traducciones ==== {{trad-arriba}} {{t|an|a1=1|t1=canya|a2=1|t2=cocha|a3=1|t3=gosa}} {{t|ast|a1=1|t1=perra}} {{t|ca|a1=1|t1=gossa}} {{t|br|a1=1|t1=kiez}} {{t|pt|a1=1|t1=cadela}} {{trad-abajo}} === Forma flexiva === ==== Forma adjetiva ==== ;1: {{forma adjetivo|perro|femenino|singular}}. == Referencias y notas == <references /> cdi451911bgq647s09f5qq1w4s436g5 quinoto 0 3547 5823416 5739422 2025-07-03T02:37:36Z Tmagc 158167 5823416 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf|g=kinoto}} === Etimología === {{etimología|it|chinotto}}. === {{sustantivo masculino|es}} === {{es.sust}} ;1 {{csem|árboles}}: (''Fortunella'' spp.) Género de [[árbol]]es y [[arbusto]]s [[frutal]]es de la familia de las rutáceas, estrechamente emparentados con los [[cítrico]]s, con los que son capaces de hibridarse. Son originarios de China {{ámbito|Río de la Plata}} {{sinónimo|kumquat|naranjo moruno}} ;2 {{csem|frutas}}: Fruto del quinoto; un [[hesperidio]] pequeño, de piel aromática y pulpa ácida. === Véase también === {{wikipedia}} === Traducciones === {{trad-arriba}} {{t|de|t1=Kumquat}} {{t|en|t1=kumquat}} {{t|da|t1=kumquat}} {{t|fr|t1=kumquat}} {{t|eo|t1=kumquat}} {{t|it|t1=chinotto}} {{t|ja|t1=キンカン}} {{t|nl|t1=kumquat}} {{t|pt|t1=kumquat}} {{t|zh|t1=金橘}} {{trad-abajo}} == Referencias y notas == <references /> dnyje22xnhuchzyjgyzolz66cea5f90 alarife 0 9961 5823403 5729967 2025-07-03T02:21:52Z Tmagc 158167 5823403 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf|1audio1=Es-alarife-bo-La Paz.ogg}} === Etimología === {{año de documentación|1250}}. {{etimología|xaa|العَرِيف|tr=al'arīf}}, y este {{etim|ar|عريف|tr='arīf|glosa=experto}}. === {{sustantivo masculino|es}} === {{es.sust}} ;1 {{csem|ocupaciones|profesiones}}: {{plm|arquitecto}} o [[maestro mayor de obras]]. {{ejemplo|«[[Gastón]], sin [[saber]] como, al [[punto]] donde [[principiar|principiaba]] a [[sentirse]] el [[estruendo]] armonioso del [[sarao]], el [[bullir]] de las [[gente]]s, los [[reniego]]s de los [[paje]]s, y tal cual [[conversación]] acalorada de [[amante]]s descarriados, que [[tornar|tornaban]] al [[salón]] con las [[mejilla]]s encendidas, y [[maldecir|maldiciendo]] [[públicamente]], ¡[[ingratos]]! al '''''alarife''''' que [[hacer|había hecho]] del [[vasto]] [[alcázar]] un verdadero [[laberinto]]».|a={{versalita|Navarro Villoslada, Francisco}}|t=Doña Blanca de Navarra, crónica del siglo XV: intitulada Quince días de reinado|f=1846|c=libro}} ;2 {{csem|ocupaciones}}: {{plm|asistente}} en trabajos de [[topografía]]. {{ámbito|Chile}}. ;3: Persona lista. {{uso|coloquial}} {{ámbito|Argentina}} ==== Véase también ==== {{w}} ==== Traducciones ==== {{trad-arriba}} {{t|de|a1=1|t1=Architekt|a2=3|t2=intelligent}} {{t|ca|a1=1|t1=arquitecte|a2=3|t2=intel·ligent}} {{t|fr|a1=1|t1=architecte|a2=3|t2=intelligent}} {{t|he|a1=1|t1=אדריכל|tr=adrīkhál}} {{t|en|a1=1|t1=architect|a2=3|t2=smart}} {{trad-abajo}} == Referencias y notas == <references /> 1hhsadcspgiqarg4him8z9qg0it4sf8 veterinario 0 10007 5823457 5738379 2025-07-03T03:57:03Z TMCbot 164594 . 5823457 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología 1 === {{etimología|la|veterinarius}}, y éste, {{etim|la|veterinæ}}, animales de tiro. [[Archivo:MEDFLAG 11, Ghana, July 2011 (5963615734).jpg|thumb|veterinarios (2)]] ==== {{adjetivo|es}} ==== {{es.adj}} ;1: Relativo a la [[medicina]] [[veterinaria]] (la dedicada a la cura y cuidado de los [[animal]]es. {{ejemplo|Las clínicas ''veterinarias'' están llenas de animales.}} ==== {{sustantivo masculino y femenino|es}} ==== {{es.sust|mf}} ;2 {{csem|ocupaciones|medicina}}: Persona encargada del ejercicio de la medicina [[veterinaria]]. {{sinónimos|albéitar}}. {{hiperónimo|doctor|médico}}. {{ejemplo|Llevé mi gato al ''veterinario'' porque estaba enfermo.}} ==== Véase también ==== {{w}} ==== Traducciones ==== {{trad-arriba}} {{t|af|t1=veearts}} {{t|sq|t1=veteriner}} {{t|de|t1=Tierarzt|g1=m}} {{t|ca|t1=veterari}} {{t|da|t1=dyrlæge}} {{t|sl|t1=veterinar|g1=m}} {{t|sl|t1=veterinarski}} {{t|eo|t1=veterinaro}} {{t|et|t1=loomaarst}} {{t|eu|t1=albaitari}} {{t|fr|t1=vétérinaire|g1=m}} {{t|cy|t1=milfeddyg}} {{t|hu|t1=állatorvos}} {{t|ga|t1=tréidla}} {{t|en|t1=vet}} {{t|is|t1=dýralæknir}} {{t|it|t1=veterinario}} {{t|la|t1=veterinarius}} {{t|nl|t1=veearts|g1=m|t2=dierenarts|g2=m}} {{t|no|t1=dyrlege}} {{t|pt|t1=veterinário}} {{t|ro|t1=veterinar}} {{t|sv|t1=veterinär}} {{t|tr|t1=baytar}} {{trad-abajo}} == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|la|veterinarius}}, y éste, {{etim|leng=it|la|veterinæ}}, animales de tiro. ==== {{sustantivo masculino y femenino|it}} ==== {{it.sust|mf}} ;1 {{csem|ocupaciones|medicina|leng=it}}: {{plm}}. {{hiperónimo|leng=it|dottore}} == Referencias y notas == <references /> jyk94jsukomn2nffpk4jkldevzkd62q tecnicismo 0 11024 5823364 5729712 2025-07-02T23:48:39Z Tmagc 158167 5823364 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|técnico|ismo}}. ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;1: {{sustantivo de adjetivo|técnico}}. ;2: {{plm|vocablo}} propio del [[léxico]] de una determinada ciencia, técnica o profesión, y que raramente se emplea fuera de éste {{ejemplo|Y en la calle, te los comías vivo'<br>El fiscal te metió presión con el '''tecnicismo'''<br>Terminaste sentao' en la silla 'e los testigos<br>Vaya, qué lindo nombre le pusiste al caserío|c=canción|t=Somos de calle|a=Daddy Yankee|f=2008}} ==== Véase también ==== {{wikipedia}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> mvtr9ep7rf7mi0nxdfvtjupgy1nknt8 kinoto 0 19941 5823417 5744112 2025-07-03T02:38:23Z Tmagc 158167 5823417 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf|g=quinoto}} === Etimología === {{etimología|véase|quinoto}}. === {{sustantivo masculino|es}} === {{es.sust}} ;1 {{csem|frutas|árboles}}: (''Fortunella'' spp.) {{grafía|quinoto}}. == Referencias y notas == <references /> abl41e9654k52yx30c9oulvzzajyaes aguafuerte 0 20171 5823386 5729116 2025-07-03T01:49:45Z Tmagc 158167 5823386 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf|g=agua fuerte|gnota=rara}} === Etimología === {{etimología|compuesto|agua|fuerte}} === {{sustantivo ambiguo|es}} === {{es.sust}} ;1 {{csem|química}}: (''HNO<sub>3</sub>'') [[líquido|Líquido]] [[viscoso]], [[incoloro]] e [[inodoro]], muy [[corrosivo]] y altamente [[tóxico]], que se emplea como [[reactivo]] de [[laboratorio]] {{sinónimo|ácido nítrico|ácido trioxonítrico}}. ;2 {{csem|arte|plástica}}: {{plm|modalidad}} de [[grabado]] en que el [[diseño]] se realiza sobre una [[capa]] de cera que [[cubre]] la [[matriz]], empleándose luego un baño de ácido nítrico para crear los [[surco]]s en la misma ;3: Pieza producida con esta técnica === Véase también === {{w}} === Traducciones === {{trad-arriba}} {{t|de|a1=2|t1=Radierung}} {{t|bg|a1=2|t1=офорт}} {{t|ca|a1=2|t1=aiguafort}} {{t|cs|a1=2|t1=lept}} {{t|sh|a1=2|t1=bakropis}} {{t|sk|a1=2|t1=lept}} {{t|fr|a1=2|t1=eau-forte}} {{t|fy|a1=2|t1=ets}} {{t|io|a1=2|t1=aquaforto}} {{t|en|a1=2|t1=etching}} {{t|it|a1=2|t1=acquaforte}} {{t|ja|a1=2|t1=エッチング}} {{t|lv|a1=2|t1=oforts}} {{t|nl|a1=2|t1=ets}} {{t|no|a1=2|t1=etsning}} {{t|pl|a1=2|t1=akwaforta}} {{t|pt|a1=1|t1=aguaforte}} {{t|sv|a1=2|t1=etsning}} {{t|ru|a1=2|t1=oфорт}} {{t|uk|a1=2|t1=tравлення}} {{trad-abajo}} == Referencias y notas == <references /> [[Categoría:ES:Líquidos]] d59d3piw9zrfrcuy1h75t67020u94im dio 0 23519 5823472 5683034 2025-07-03T03:57:25Z TMCbot 164594 . 5823472 wikitext text/x-wiki {{desambiguación|Dio}} == {{lengua|es}} == {{pron-graf|acentuación=aguda|división=dio|fone=ˈdjo|longitud_silábica=1|número_letras=3}} === Forma verbal === ;1: {{forma verbo|dar|3s|pretérito indefinido|indicativo|pronominal=s}}. == {{lengua|eo}} == {{pron-graf|leng=eo|fone=di.o}} === Etimología === {{etimología|leng=eo|it|dio|dios}}. === {{sustantivo|eo}} === {{inflect.eo.sust}} ;1: {{plm|dios}}. {{relacionado|leng=eo|diino|nota1=femenino}}. == {{lengua|it}} == {{pron-graf|leng=it|fono=ˈdi.o}} === Etimología === {{etimología|leng=it|la|deus|dios}}, a su vez del indoeuropeo {{l+|ine-pro|*deiu̯ós}}. === {{sustantivo masculino y femenino|it}} === {{it.sust|irreg|dèi|dea|dee}} ;1: {{plm|dios}}. {{relacionado|leng=it|divo}}. == {{lengua|lfn}} == {{pron-graf|leng=lfn}} === Etimología === {{etimología|leng=lfn}}. === {{sustantivo|lfn}} === {{inflect.lfn.sust.reg}} ;1: {{plm|dios}}. == Referencias y notas == <references /> tfn19s5sv2xqiccr8kb3msf1250dez2 Apéndice:Salvadoreñismos 100 25647 5823332 5820449 2025-07-02T20:04:28Z 181.78.98.194 /* C */ 5823332 wikitext text/x-wiki <strong>Glosario de {{l|es|salvadoreñismo|salvadoreñismos}}</strong>, es decir, todos los términos y sintagmas coloquiales e indígenas propios del {{l|es|español}} {{l|es|salvadoreño}}: ==A== * ''ACHIS:'' Expresión que demuestra falta de interés * ''a cucucho:'' Cargando a una persona sobre los hombros; [[a costillas]], [[a cuestas]], [[a hombros]]. * ''AGUACATERO:'' Equivale a 'algo autóctono', común, ordinario. Muchas veces se utiliza en tono despectivo. Ejemplo: “Dice Kevin al ver a Brayan. -Mira si no es aguacatero Brayan, dándose gusto comendo tortilla tostada con shojoles chilipucas. * ''AHIGUASHTE:'' ver ALGUASHTE * ''Ahí nomás:'' Cercano * ''AJOLOTAR:'' Palabra autóctona que denota desesperación. * ''ALELUYO:'' Para referirse a los evangélicos. Aleluyo es la persona que adopta una de las docenas de diferentes congregaciones religiosas recién importada directamente desde los Estados Unidos. * ''ALERO:'' Dicho de un amigo o colega muy allegado. Es un colega de profesión o el chero que siempre está a tu lado, en las malas y las buenas. Proviene de ‘ala’ y equivale ‘mi mano derecha’. * ''ALGUASHTE:'' Condimento muy utilizado para los mangos, jícamas, y cualquier otro tipo de alimento que se pueda condimentar, conocido también en la zona oriental como pirriri. * ''AMANSALOCOS:'' Artefacto de reciente aplicación, con forma de bastón utilizado por los agentes antimotines para imponer el orden. * ''ANDA BIEN A PICHINGA:'' Equivale a decir ‘anda muy borracho’. * ''ATAJAR:'' Atrapar. * ''ANDÁ DALE PAJA A VALIJA:'' Equivale a decir ‘anda ve a ver que tonto te cree’. Es dicho en general con tono agresivo por alguien que no cree y rechaza lo que otro propone. * ''SHUCO:'' 1. Se le dice al atole que contiene frijoles, chile, ahiguashte (ver ahiguashte) y otros tipos de condimentos, 2. Persona que tiene malos habitos higiénicos, algo asqueroso o sucio * ''AGÜITADO:'' Sentir vergüenza, sentirse apenado o timido. * ''AGÜEVO:'' Sinónimo de afirmar un evento u opinión. También se refiere a alguien que dice la verdad. Ejemplo:"-El equipo jugó mal." "AGÜEVO." * ''AGÜEVADO/A:'' Tambien se utiliza ''achicado'' para una persona a la cual se le ha bajado la moral o se le ha avergonzado de una manera publica. Ejemplo: "Quedé agüevado cuando le pedí a la María ser mi novia y me dijo que no." * ''APACHAR:'' Del náhuat ‘Pachtl’ que significa aplastado, estar bajo o delgado. Sinónimos: Comprimir, desinflado, machacar o prensar. Ejemplo: “-Kevin dice: Hay que arreglar la llanta del carro porque está apachada”. * ''ARRIMADO'' Dícese de persona que vive en la casa y a costa del trabajo de otra sin mayor aporte de su parte. * ''ARROZ CON TUNCO:'' Expresión nativa utilizada para comentar a otra persona que tuvo o quiere tener relaciones sexuales por el ano, muy común en las relaciones entre dos personas del mismo género. El arroz hace referencia al miembro viril, el tunco a lo sucio del ano. * ''AVIVATE VOS:'' Dicho por alguien que está molesto por la actitud retardada de otro. Equivale a decir ‘pon atención y no seas tonto'. ==B== * ''BABOSADA'' Escollo, cualquier cosa o objeto cercano. * ''BAJAR:'' Engañar, mentir descaradamente (Ver PAJA)- Robar, usurpar. * ''BAMBA:'' Moneda antigua de un colón * ''BAYUNCO:'' Persona que bromea de una manera que sobrepasa los límites o dice algo gracioso pero sin sentido alguno. * ''BIRRIA:'' Cerveza. * ''BIRRIONDO:'' Joven alocado y novio. * ''BICHO:'' Infante, niño. Es muy usada en los pueblos al igual que “Cipote”. * ''BIOLA:'' Dicho de la panza monumental de una persona, es un estómago bastante pronunciado ya sea de tanto comer, de tanto chupar guaro o de un embarazo. también se escribe a veces con la letra v 'viola’. * ''BOLADO:'' Máxima expresión salvadoreña para referirse a algún objeto cuyo nombre no se sabe. Dícese también de aquella persona con que se busca o se tiene una relación de tipo clandestina. "Ej: Fijate que me he conseguido un mi boladito..." * ''BOLO:'' Ebrio, Adicto a bebidas alcohólicas. * ''BOCHINCHUDO'' Persona pleitista, peleonera, o mal encarada. * ''BONCHE:'' Problema. * ''BABOSO:'' Persona torpe - Persona sospechosa. * ''BOLA:'' Dólar * ''BOMBEAR:'' Robar, sustraer algo ajeno. * ''BUZO:'' Listo, atento (Se utiliza para diferenciar también el término BUXO) * ''BRAVO:'' enojado, disgustado, no complacido ==C== * ''CABUDA:'' Acción de recaudar o reunir fondos con un fin u objetivo acordado, sin fijar la cantidad a brindar. * ''CACHETE:'' mejilla. * ''CACHIMBIAR:'' Acción que involucra agarrar a golpes a alguien al extremo de dejarlo aventado. * ''CACHIMBIADO:'' Apaleado. * ''CACHIMBO:'' Enorme cantidad de algo. * ''CACHIMBÓN:'' Algo o situación agradable * ''CACHUCHA:'' Gorra. * ''CACHUDO:'' Satanás. * ''CORA:'' Palabra de reciente aplicación que significa “veinticinco centavos de dólar” o en e inglés "Quarter". Proviene del léxico del latinoamericano que migró de forma ilegal a los Estados Unidos, y que por no poder pronunciar la palabra "Quarter" hace referencia a ésta como "Cora" * ''CACASO:'' Relativo a las cosas mal hechas, ordinarias o de mala calidad. Dícese también de la actitud de las personas. * ''CADEJO:'' Personaje de la mitología guanaca pariente del perro. Hay dos tipos de “Cadejos” el blanco que es visto sólo por mujeres o en su defecto niñas y el negro que es visto por todos los hombres y niños. * ''CARMELO:'' Personaje de la mitología guanaca que sostiene relaciones adúlteras con la mujer de otro, de forma secreta. * ''CASACA:'' Mentiras. * ''CALICHE:'' Jerga. * ''CEROTE:'' Palabra soez para referirse a alguien tonto (Véase PASMADO). Excremento. * ''CIPITÍO:'' Personaje de la mitología guanaca. Hijo de la Siguanaba. Este personaje es muy gordo y usa un sombrero grande. Se dice que cuando está enfrente de personas del género femenino es posible que tire piedras para poder llamar su atención o tratar de seducir. * ''CIPOTE:'' Palabra autóctona que significa "niño". Palabra usada por los viejos para sentirse jóvenes. Ej. "Nombre sí está cipote". * ''CHABACÁN:'' Persona con malas costumbres, vulgar, bromista. * ''CHACALÍN:'' Camarón pequeño o disecado. * ''¡CHAJAZO!:'' Cortadura de gran tamaño en una parte del cuerpo visible, herida. * ''CHAMARREAR:'' Regañar, estrujar o sacudir a una persona. * ''CHAMBRIAR'' Acción de contar algo de forma informal, y poco confiable en su momento. * ''CHAMBROSO/A:''. Gente que cuenta cualquier cosa que escucha, ve o se inventa. * ''CHAMBÓN:'' Persona que realiza un trabajo de manera desordenada o que lo ha realizado de manera incorrecta. * ''CHAME:'' Variación de CHEJEIN, con la diferencia que es más refinada que la dicha palabra. * ''CHANCLETA:'' Sandalia vieja. * ''CHARRO:'' Invitación a ser discreto también significa anticonceptivo masculino o condón. * ''CHAVELIADO:'' Falsificado. * ''CHENCA:'' Cabuya del cigarro. * ''CHELIAR'' Beber cerveza. * ''¡CHEJEIN!:'' Expresión popular que sale a relucir cuando se presencia un acto o acción autóctona, o sea una "indiada" (Véase INDIADA). * ''CHENGA:'' Dicese a la tortilla. * ''CHETA:'' Moco lubricante. Escupida, generalmente se da cuando hay competencias o cuando están a punto de apalearse. * ''CHERO:'' Dícese al amigo. * ''CHELE:''Persona de tez blanca en demasía o pálida. * ''CHICHA:'' Brebaje embriagante. * ''CHICHE:'' 1) Mamas de la mujer, senos. 2) Algo fácil de hacer "Ej. Ese bolado está chiche de hacer." * ''CHOLLUDO:'' Persona perezosa, haragán. * ''CHIFLÓN:'' Correntada de aire que se les pasa a las mujeres debajo de las piernas o de las nalgas. Correntada de aire antes de que llueva. * ''CHIGALIA:'' Acción de desesperar a una persona. * ''CHILATEAR.'' 1) Acción de provocar. 2) Alimento de cerdos. 3)Dícese de la acción de mezclar de forma continúa y revolvente de los residuos de semen dentro del tracto vaginal que se perpetua en el cópula carnal de 2 o muchos hombres que participan del acto con la misma mujer que provee el servicio de prostitución. La palabra se deriva de CHILATE que es un atole insipido de color lechoso opaco que se acompaña del platillo tipico de nuégados. * ''CHILGUETIAR:'' Salpicar agua." * ''CHIMBADAS:'' Cosas de poca o ninguna importancia, Ej."Vos te aflijís por puras chimbadas." * ''CHILINCO'' 1) Pequeño, que no es de una medida propia. 2) Alto y seco. * ''CHINTO:'' Grupo de personas. También es el nombre que se le da a algunos muñecos de barro que son hechos en algunos municipios del país. * ''CHINGAR:'' Molestar o irritar a una persona. * ''CHINTIYO:'' Variación de chinto, con diferencia que es un grupo más pequeño. * ''CHIMBOLO:'' Pez pequeño. * ''CHIRILICAS:'' Nombre genérico que se le da al pisto o dinero. Por lo general estas son volátiles en época de lipidia o escasez, generalmente dos días después del día de pago o después de una buena zumba (ver zumba). * ''CHIRRIA:'' Cólera, enfado. * ''CHIMUELA:'' Persona que le falta algún diente. Origen Mexicano. (Para término salvadoreño véase Cholco) * ''CHIVO:'' Máxima expresión salvadoreña que significa bonito, bueno, vergón. * ''CHOCA:'' 1) Denominación que tiene un valor de (1/4 o sea 0.25) de la unidad monetaria. 2) Sinónimo de una persona que tiene el sentido de la visión ausente o que teniendo las cosas enfrente no las ve; ciego. * ''CHOCO:'' Persona que tiene el sentido de la vision ausente, también utilizada para el auto que tiene problemas en los faroles. * ''CHOCOYA:'' Palabra genérica que significa cabeza. * ''CHOJOLES:'' Llámese a los frijoles, alimento que no falta en la semana en un salvadoreño. Es también utilizado en la elaboración de muchos alimentos autóctonos, ej. Pupusas. * ''CHOLCO:'' Persona sin uno o varios dientes. * ''CHOTIAR:'' Pasear. Ir con los amigos o solo de fiesta o algún lugar divertido. (Vease FISIQUEAR) * ''CHOTA:'' Policía, también se puede decir Jura * ''DE CHOTO:'' De gratis. * ''CHUCHO:'' Perro. También dícese a las personas tacañas. Generalmente es usado para sacar o alejar a personas indeseables. Ej. : mareros, vendedores, vagos, payasos, u otras personas de aspecto extraño. * ''CHULÓN:'' Persona desnuda. * ''CHUCO:'' Sucio. Persona que es sucia; Atol hecho de maíz y con sabor agrio (en este caso se escribe shuco). * ''CHUCHERÍA:'' Alimento sin ninguna propiedad nutritiva. Es consumido en grandes cantidades por los niños y jóvenes. Su consumo excesivo puede producir alguna enfermedad estomacal entre ellas la más común es la diarrea. * ''CHULEAR:'' Molestar. Decir piropos * ''CHULUNCO:'' Ropa corta normalmente femenina; Si es usada por una GUANACA es posible que la use con propósitos de seducción. * ''CHUNGIAR:'' Molestar. * ''CHUMPE:'' Palabra genérica que significa pavo. Ave de plumas negras. * ''CHUNCHE:'' Objeto de aplicación desconocida o de origen dudoso. * ''CHUÑA:'' Dícese a la persona que no tiene zapatos o anda descalzo, por motivos de escasos recursos económicos o por que le hurtaron. * ''CHURRIA:'' Al igual que curso (ver curso) pero con diferencia que esta es duradera y causa problemas de desnutrición. * ''CHURUTE:'' Palabra autóctona que significa bulto que sobresale entre otros. * ''CHUTE:'' Persona entrometida, es una cualidad del guanaco. * ''CHUZA:'' 1) Vease CHUZÓN. 2) Accion de meter o anotar en la canasta en el básquetbol. * ''CHUZÓN:'' Vehículo colectivo destinado al transporte público, conducido violentamente e invariablemente por un maleducado chofer y asistido por un sucio cobrador. A bordo de esta unidad móvil viajan un sinnúmero de personajes como:'' payasos, policías, delincuentes, vagos y vendedores. Vease tambien CHUZA. * ''CIPOTE:'' Muchacho/muchacha. * ''CODO:'' Persona tacaña, sin sentido humanitario. * ''COICO:'' Golpe suave dado en la cabeza generalmente con los dedos, es dado para demostrar superioridad por parte del adulto al infante. * "COISHCO:" Golpe suave dado en la cabeza con los nudillos de la mano echa un puño. * ''CUCHE:'' [[Cerdo]] pude hacer referencia a una persona con malos hábitos en la mesa o para situaciones de tráfico pesado o lugares muy concurridos. * ''COLÍN:'' Corvo, [[machete]] * ''CUCHUMBO:'' Recipiente que sirve para albergar líquidos y otras cosas. * ''CUETIAR:'' Acción de dispararle a alguien. * ''CULERO:'' Persona (hombre) con conductas afeminadas o tendencias homosexuales. Ejemplo: "Ese maje solo con el amigo pasa gran culero" * ''CULÍO:'' Palabra autóctona que significa persona que está temerosa o con miedo, "Pu$a que culio estoy por el parcial" * ''CUMA:'' Herramienta de uso primitivo, de procedencia campesina con forma curveada. Normalmente se ocupa para cortar pasto aunque en ocasiones se ocupa como arma de defensa u ofensa. * ''CUNETEAR:'' Acción de dormir en estado de ebriedad, ya sea en la acera o en un lugar de la calle de la zona urbana o rural. * ''CURSO:'' Diarrea , es causada por consumir comida cruda, por mucha chuchería (ver chuchería) o por una gran zumba (ver zumba). * ''CUCURUCHO:'' Sombrero largo y delgado. ==D== * ''DANDOLE VUELO A LA HILACHA:'' Es una persona que disfruta de la vida, puede incluir desde vivir de fiesta en fiesta, en deschongues, viajar mucho o de tener muchos amantes. * ''DAR EN LA NUCA: Es terminar con algo. Es darle fin a una situación o evento comprometedor, esto puede implicar darle un un cuetazo a alguien para terminar con el martirio de lidiar con esa persona. * ''DEDO:'' Es un espía, soplón, traidor, etc. Sinónimos: Acusador, delator, denunciante. * ''DESCHAVE:'' Es un desorden desorden de alto índole y grandes repercusiones. Sinónimos: Despelote, deschongue, etc. * ''DIANCHES:'' Expresión comodín, Ej."A saber que dianchas quería", "No sé que dianchas voy a hacer." * ''DENDIOY:'' Hace unos instantes. * ''DÉMOLE:'' Vamos, ponte en acción. * ''DEPORTISTA:'' Vocablo que denota a la persona que ha sido deportada de los Yunáis o de cualquier otra nación. * ''GUARUMO:'' Persona que tiene adicción tanto al cigarro (fumar), como a la droga. * ''DESCHONGUE:'' Desorden; o puede decirce desverge. * ''DESVERGUE:'' Desorden * ''DIOGUARDE:'' Expresion que denota sorpresa. * ''DESAYUNO DE CAMPEONES:'' Fumar o tomar en la mañana sin haber comido un desayuno formal. * ''DUNDO:'' Persona que es tonta ==E== * ''ECHATE LA MANTA:'' Palabra utilizada para indicarle a otra persona que esté alerta o que observe lo que ocurre a su alrededor. * ''"ECHAR LA ARAÑA:"'' Orinar. * ''EMBROCAR:'' Voltear,dar vuelta a algo. * ''EMPINAR'' Acción de beber un líquido cualesquiera, especialmente relacionándose al alcohol o cerveza. * ''ENCULADO'' Enamorado. * ''ENCACHIMBADO'' Persona enojada, molesta o muy furiosa. ==F== * ''FUFURUFA:'' Mujer que es delicada, actitud que tiene de desprecio a los demás, con mucho ego y que todo le da asco. Generalmente una persona de mucho dinero y gustos refinados. * ''FIERRO:'' Machete. En ocasiones puede referirse también al pene del hombre. * ''FURGANDILLO:'' Inquieto. En ocasiones podían referirse a un niño.“Te moves más que un furgandillo”. * ''FURULO:''Persona que tiene ideas excelentes. De "furular" (algo que funciona.) * ''FISIQUEAR:'' Pasear, salir a un lugar solo o acompañado. * ''FONDIAR:'' Acción de dormir profundamente. * ''FERIA:'' Dolar, Centro de atracciones. * ''FUNDILLO:'' El ano, el trasero o las nalgas. ==G== * ''GUANGO:'' Flojo, o demasiado extendido para su medida * '' GUAYABEAR:'' Acción de un persona de aprender un conocimiento de algo, de forma poco profundizada, o mal hecha, por alguna situación que le exige hacerlo con rapidez. * ''GOMA:'' Sinónimo de borrachera ==H== * ''HACEME BARRA:'' Acompañar a una persona conocida. * ''HOCICO:'' Boca. * ''HUEVEAR:'' Tomar bienes ajenos. ==I== * ''¡ÍJOLE!:'' Expresión superlativa de sorpresa o disgusto. * ''INDIADA:'' Expresión vulgar o de léxico "inferior" popular, que se dice proviene de orígenes precolombinos o mestizos. ==J== * ''JAINA:'' Novia o mujer en calidad de propiedad de un hombre. * ''JUELA:'' expresa estar sorprendido por algo "juela ya es tarde, juela que chivo está". * ''JINCHO:'' Persona apenada, insegura, con poca confianza. - Vulgar, poco serio. * ''JURA:'' Policía * '' JIRICO:'' Que es corto de largo "ese pantalón te queda jirico". ==K== * ''KELLOGS:'' Fumar cigarrillo en la mañana. ==L== * ''LAMBIDO:'' Sin insumos económicos. Véase "acabado" cómo uso más común ==M== * ''MAZO:'' Revolver o pistola. Véase fierro cómo uso más común * ''MECHA CORTA'': ''Persona que se enoja con facilidad. Ej.: Mi pa * ''MAJE'': ''Expresa amistad, modo para decir amigo/a o para no realizar una tarea asignada. Ej.: Aquel se está haciendo el maje con lo que le pedí hacer. * ''"MAITRO":'' Hombre mayor o anciano. * ''"MONA":'' Órgano reproductor externo masculino. ==N== * ''NAMBE:'' Rechazo o negación de algo, o desaprobación de algo previamente afirmado por otro. * ''NAMBECHELE:'' 'Estar en desacuerdo con otra persona, similar Nambe pero más sutil. * ''NACO:'' Adjetivo para una persona que llora fácilmente ==Ñ== * ''ÑEQUE:'' Cosa de gran relevancia, muy impresionante, o lujosa. Músculo bíceps. * ''ÑOLA:'' Cabeza de una persona. ==O== * OSICO: Boca de animal o persona.. Eje: "Te voy a dar en el Osico si me contestas asi" ==P== * ''PISTO:'' Dinero. * ''PASEARSE:'' Dícese de la acción de arruinar algo, o el trabajo de muchas horas, o arruinarle la vida a una persona. "Ej. Mira lo que has hecho! Te paseaste en todo el trabajo lo que hicimos de dos días" * ''PAJA:'' Mentira, locura. * ''PARA-AYER:'' Expresión de pedido hacia la realización de una acción instantánea, o de exigencia inmediata. * ''PATADA:'' Sinónimo de TUFO, pero más intenso. * ''PATÍN'' Mal aroma, que puede ser muy perceptible, sinónimo de PATADA. * ''PEGUÉMOLE:'' Expresión para sugerir el retirarse de un lugar para ir a otro en ese momento. * ''PENQUEAR:'' Golpear a alguien o algo, ya sea como castigo o para expresar ira. * ''PEPERECHA:'' Prostituta, mujer lesbiana o un tipo de pan dulce. * ''PICALE:'' Acción y efecto de sugerirle a una persona que haga el trabajo mas rápido. * ''PIPIÁN:'' 1) Es una verdura de la familia de las cucurbitáceas, originaria de Mesoamérica. 2) Hombre homosexual * ''PASMADO:'' Tonto, falto o lento de poder aprender algo. * ''PASTELEAR:'' Acción de perder el tiempo. * ''PICADO:'' Persona que no quedó satisfecha y quiere más. * ''PICAR:'' Tomar una pequeña parte de algo o una muestra de él. * ''PEDO:'' Gas nocivo para la salud humana - utilizada para definir que hay un problema. * ''PERRO:'' 1) Hombre que es mujeriego. 2) Dícese de un hecho difícil, complicado de lograr. Más claramente definido como ''TA PERRO.'' * PETACA: Se refiere a la parte alta de la espalda, descripcion de joroba. * ''PÚCHICA:'' Frase de desagrado ante cualquier situación. * ''PÍQUELE'' Frase que se suele ocupara para que la persona haga algo más de prisa. * ''POLARIZADAS:'' Cerveza en botella, o conjunto de este tipo de bebidas. * ''PISAR:'' Acto de tener relaciones sexuales. ==Q== * ''QUIUBO:'' Expresión de saludo, para preguntar sobre algo. * ''QUIUBOLE:'' Expresión de saludo, ¿qué pasó?. ==R== * ''RÁFAGA:'' Acción y efecto de [[estornudar]] o soltar GASES (ver [[pedo]]) rápido y varias veces. * ''RUSIA:'' Chica fácil que pasa de hombre en hombre. * ''"RANEAR":'' Cansar; cuando realiza un esfuerzo y le disminuyen las fuerzas: "Ya la está raneando." * ''"RALIAR":'' 1) Hacer finos cortes a la carne. 2) Hablar mal o criticar a otra persona. 3) Apuñalear. * ''"RUCO":'' Hombre mayor o anciano. ==S== * ''SALVEQUE:'' De "salvequear", intimidación o chantaje; Provocar a una persona a base de mentiras o suceptibilidades. * ''SER DEDO:'' Acusar con o sin causa a una persona de algo que ella ha hecho. * ''SUSTO:'' 1) Acción y efecto de asustar alguna persona - también es utilizado para determinar cuánto es el valor adeudado a cancelar. 2) Fantasma, aparición sobrenatural de algo. * ''SIMÓN:'' Expresión de afirmación "callejera". * ''SE LA PICA:'' Dícese de una persona que insinua saber más que todos. Palabra utilizada por una persona que tiene envidia de otra. * ''SPIDER:'' Echar la araña, orinar. *SIMASITO: Expresión que indica que algo casi pasó. Ej: Simasito me agarra la Policía = casi me agarra la Policía * ''SOCA'': Expresión que indica que algo cumple con el estándar mínimo de calidad. Ej: Ese color la soca para la casa ==T== * ''TALEGUIAR:'' sinónimo de golpear. * ''TANATADA:'' Conjunto, cantidad o grupo de algo. * ''TUFO:'' Mal olor, hediondez, pestilencia, gran patada (ver PATADA). * ''TROMPUDO:'' 1) Persona que se siente enojado. 2) Persona que tiene labios grandes. 3) persona que habla demás * ''TA VERGÓN:'' Expresión utilizada para: 1) Determinar que se ha hecho un buen trabajo (ver CACHIMBÓN o CHIVO). 2) Aceptar incómodamente una respuesta que no esperaba recibir(sarcásticamente). * ''TETELQUE:'' 1) Dícese de un alimento que tiene una textura arenosa que deja la lengua seca ejemplo: nance verde. 2) Dícese de la sensación reseca y pegajosa que dejan ciertos alimentos en la boca. Ej. Comer icaco deja la boca tetelque. * ''TITILGUITE:'' Excremento de pollo * ''TIRISIA'': Amargura, malhumor. Ej. Este solo con tirisia anda. * ''TROLO:'' Persona (hombre) con conductas afeminadas o tendencias homosexuales (derivada del americanismo "troll" (gay slang)). Véase "Culero" cómo uso más común y vulgar. * ''TICURICHES'': Artículos personales. ==U== * ''UTUALITO:'' Dícese de realizar una acción u orden en el momento indicado. Ejs.: "Utualito hace las tareas." "Utualito vamos a comer." ==V== * ''VERGUIAR:'' (Ver TALEGUIAR). Dar una [[paliza]] o golpear fuertemente a otra persona. * ''VIVIÁN:'' Persona que vive sin esforzarse en trabajar, mediante el aporte de otras, astuto con mala imagen. (Ver ARRIMADO) * ''¡VOLA!:'' Expresión de exigencia de rapidez o apresuranza. * ''VENDAJE:'' Expresión utilizada cuando se recibe un artículo adicional de forma gratuita por la compra de algún producto. * ''VIRGO/A:'' Persona que es muy vulgar. * ''VOLAR:'' Expresión informal para referirse al arte de la masturbación; ej.: "me la voy a volar". véase "Pajiar" cómo uso más común y vulgar. ==W== * ''WEBIAR:'' Robar. * ''WISTE:'' (También huiste) Pedazo de vidrio o vidrio roto. ==X== * ==Y== * ''YA ESTÁ PARA EL TIGRE:'' Mujer u hombre que tiene 60 años o más que ya no funciona para actividad sexual. En otras palabras, que se lo coma el tigre. De igual forma, de alguna persona que se encuentra en estado de grave riesgo de muerte. * ''¡YA COMIÓ ZOMPOPOS!:'' Expresión de admiración o broma, debido a escuchar lo enronquecido del timbre de voz de una persona al hablar, específicamente en los pubertos varones. * ''YINA:'' Calzado común, tipo sandalia, utilizado generalmente dentro de las viviendas y lugares de recreación. * ''YUNAIS:'' Estados Unidos. * ''YUCA:'' Situación difícil. ==Z== * ''ZORRO:'' hombre [[promiscuo]] * ''ZORRA:'' mujer [[promiscua]] * ''ZUMBA:'' Sinónimo de borrachera, pero en un grado más alto, el cual indica que se ingiere alcohol todos los dias. * ''ZARZETA'': Persona necia o burra. <!-- si vas a insertar una nueva sección de etimología o de idioma, por favor hazlo ↑ arriba ↑ de esta línea. Por favor no borres esta línea ni las dos siguientes--> == Referencias y notas == <references /> [[Diccionario de Caliche y Modismos Salvadoreños, Luis A. Portillo, 2023]] [[Categoría:ES:El Salvador| ]] [[Categoría:ES:Glosarios de regionalismos]] Chiripa: por suerte, golpe de suerte (ej.: esa canasta fue chiripa que la metieras) Curchucho: dicese de la persona que camina encorbado, cascorbo (vease cascorbo) cascorbo: curchucho (ej.: Cuahutemóc Blanco) pepenar: Recoger cosas del suelo o de algún lugar. Pizorro: Hombre que anda de mujer en mujer haciéndoles el amor. Masucho: Se refiere a muchas cosas. Por ejemplo: Yo tengo un Masucho de llaves. Es decir, tengo muchas llaves. Chindondo: Es cuando alguien se golpea y en el lugar donde se golpeó se le inflama, es decir se le hace una protuberancia. Tilinte: tieso. tfsw4xvuftvq78693d3dh85maw25r4r uovo 0 26802 5823451 5631980 2025-07-03T03:49:58Z Tmagc 158167 5823451 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it|fone=ˈwɔ.vo|g=huovo|gnota=obsoleta|ls=2|nl=4}} === Etimología === {{etimología|la|ovum|leng=it}}. === {{sustantivo masculino|it}} === {{it.sust|irreg|uova}} ;1 {{csem|biología|alimentos|leng=it}}: {{plm|huevo}}. {{uso|leng=it|en el plural se torna femenino}} === Locuciones === * {{l|it|uova strapazzate}}: ''huevos revueltos'' === Véase también === {{w|leng=it}} == Referencias y notas == <references /> n7j2u5ylisp2kpqhqfjoeiawnjkdkqj stehen 0 27597 5823339 5488519 2025-07-02T21:23:23Z Jeuwre 73587 audio 5823339 wikitext text/x-wiki == {{lengua|de}} == {{pron-graf|leng=de| fone=ˈʃteːən|audio=De-stehen2.ogg|aunota=Berlín| fone2=ˈʃteːən|audio2=De-stehen.ogg}} === Etimología === {{etimología|leng=de|goh|stēn}}.<ref>{{DWDS}}</ref> === {{verbo impersonal|de}} === ;1: {{plm|hacer}}, [[estar]]. {{ejemplo|Wie '''steht''' es (bei euch)? – ¿Cómo estáis (os va)?}} === {{verbo intransitivo|de}} === {{de.v.conj.irreg|steh|stand|ppp=gestanden|inserción-e=yes}} ;2: {{plm|estar de pie}}. === {{verbo pronominal|de}} === ;3: {{plm|llevarse}}. === {{verbo transitivo|de}} === ;4: {{plm|estar}}, [[hacer]]. == Referencias y notas == <references /> gvsgy017t2xdk0z08ryuaatryahgac4 Plantilla:inflect.sust.sg-pl 10 29377 5823309 1467608 2025-07-02T15:50:14Z Raos10 93688 Se cambio la clase a wikitable (con la modificación del margen a 0) 5823309 wikitext text/x-wiki {|class="wikitable" style="margin: 0 !important" {{#if:{{{3|}}}{{{4|}}}|! |}} ! class="vertical" style="padding-left:4px; padding-right:4px" width={{#if:{{{3|}}}{{{4|}}}|33%|50%}} {{!}} {{{t_sg|Singular}}} ! class="vertical" style="padding-left:4px; padding-right:4px" width={{#if:{{{3|}}}{{{4|}}}|33%|50%}} {{!}} {{{t_pl|Plural}}} |- {{#if:{{{3|}}}{{{4|}}}|!<span style="padding-left:4px">{{{t_m|Masculino}}}</span>|}} |lang="{{{leng|es}}}" xml:lang="{{{leng|es}}}" dir="{{{dir|ltr}}}" style="text-align:center;padding-left:4px; padding-right:4px" | {{#if:{{{link|}}}|{{l*|{{{leng|es}}}|{{{1|{{PAGENAME}}}}}}}|{{{1|{{PAGENAME}}}}}}} |lang="{{{leng|es}}}" xml:lang="{{{leng|es}}}" dir="{{{dir|ltr}}}" style="text-align:center;padding-left:4px; padding-right:4px" | {{#if:{{{link|}}}|{{l*|{{{leng|es}}}|{{{2|{{PAGENAME}}s}}}}}|{{{2|{{PAGENAME}}s}}}}} {{#if:{{{3|}}}{{{4|}}}| {{!}}- !<span style="padding-left:4px">{{{t_f|Femenino}}}</span> {{!}}lang="{{{leng|es}}}" xml:lang="{{{leng|es}}}" dir="{{{dir|ltr}}}" style="text-align:center;padding-left:4px; padding-right:4px" {{!}} {{#if:{{{link|}}}|{{l*|{{{leng|es}}}|{{{3|}}}}}|{{{3|}}}}} {{!}}lang="{{{leng|es}}}" xml:lang="{{{leng|es}}}" dir="{{{dir|ltr}}}" style="text-align:center;padding-left:4px; padding-right:4px" {{!}} {{#if:{{{link|}}}|{{l*|{{{leng|es}}}|{{{4|}}}}}|{{{4|}}}}} |}} |}<noinclude> {{documentación de plantilla}} <!-- Añade categorías e interwikis en la página de documentación, no aquí--> </noinclude> ncxhh8wwwg4x3almioxitzojgw3jbtp Wikcionario:prostituta/Tesauro 4 29690 5823360 5820900 2025-07-02T23:01:29Z 189.201.69.63 5823360 wikitext text/x-wiki 5823361 5823360 2025-07-02T23:07:45Z Peter Bowman 34685 Revertido el cambio de [[Special:Contributions/189.201.69.63|189.201.69.63]] ([[User talk:189.201.69.63|disc.]]) a la última edición de [[User:Peter Bowman|Peter Bowman]] 5705816 wikitext text/x-wiki :''Para la página equivalente referente a la prostitución o promiscuidad masculina, véase [[Wikcionario:prostituto/Tesauro]].'' ;Nota: Los términos para referirse a la promiscuidad femenina o al oficio de brindar gratificación sexual, al igual que tantos otros vocablos relacionados con la sexualidad, tienen gran cantidad de sinónimos, algunos considerados malsonantes o insultantes. Una parte de los que aquí aparecen son localismos o palabras de difusión restringida, lo que las hace muy poco comunes cuando no virtualmente inexistentes. Algunas pueden haber sido creadas especialmente para hacerlas figurar aquí, pero ante la imposibilidad, al menos de momento, de verificarlas todas, hemos habilitado esta página para compilarlas. Si añades algún vocablo relacionado con '''[[prostituta]]''' o con mujeres promiscuas, por favor, especifica sucintamente entre paréntesis toda la información que conozcas sobre el término (ámbito, uso, matiz de significado, etc.). ==Sustantivos que designan "prostituta" o "mujer libertina"== ===Términos formales o académicos=== * [[bagasa]] (poco usado) * [[bordiona]] (anticuado) * [[cortesana]] * [[hetaira]] * [[meretriz]] * [[prostituta]] ===Eufemismos=== * [[mujer de cascos ligeros]] * [[mujer de moral distraida]] * [[mujer de la vida galante]] * [[chica de vida alegre]] * [[cocota]] * [[cualquiera]] * [[dama de la noche]] {{cita requerida}} *[[cariñosa]] (Ecuador) * [[dama de compañía]] * [[heredera]] {{cita requerida}} * [[hija de mal agüero]] {{cita requerida}} * [[ligona]] * [[magdalena]] * [[mantenida]] * [[mesalina]] * [[mujer X]] {{cita requerida}} * [[mujer de chulos]] {{cita requerida}} * [[mujer de harén]] {{cita requerida}} * [[mujer de la mala vida]] * [[mujer de la vida]] * [[mujer de mala vida]] * [[mujer de pedido]] {{cita requerida}} * [[mujer de rojo]] {{cita requerida}} * [[mujer que fuma]] * [[mujer fatal]] * [[mujer perdida]] * [[mujer pública]] * [[querida]] * [[trabajadora de barra americana]] {{cita requerida}} * [[trabajadora del amor]] {{cita requerida}} * moza del partido <ref>Utilizado en el primer libro de «Don Quijote de La Mancha»</ref> ===Términos coloquiales u ofensivos=== * [[alegrona]] (colombia) * [[alemanita]] {{cita requerida}} * [[aleta]] (tremenda. Colombia) * [[anabolena]] {{cita requerida}} * [[avariuda]] {{cita requerida}} * [[ave blanca]] (Panamá) * [[banda]] (Paraguay) * [[bandida]] (colombia) * [[blanca tratada]] {{cita requerida}} * [[burraca]] {{cita requerida}} * [[burracona]] {{cita requerida}} * [[buscona]] * [[cabaretera]] * [[calentorra]] * [[calientacamas]] * [[calientahuevos]] * [[calientapollas]] (España, malsonante) * [[cambri]] {{cita requerida}} * [[caminadora]] (Venezuela) * [[candonga]] * [[cantonera]] * [[cariñosas|cariñosa]] (Chile) * [[casquivana]] (Chile) * [[chai]] {{cita requerida}} * [[chango]] {{cita requerida}} * [[chapeadora]] (República Dominicana) * [[chica de atasco]] {{cita requerida}} * [[china tratada]] {{cita requerida}} * [[chingada]] * [[chirlata]] {{cita requerida}} * [[chonga]] (que trabaja en un chongo o prostíbulo. Venezuela) * [[chuchumeca]] (Perú) * [[chumascona]] * [[chuminista]] * [[chupapijas]] * [[chupetera]] * [[chupona]] * [[churrera]] * [[cisne]] * [[cleopatra]] {{cita requerida}} * [[cocu]] {{cita requerida}} * [[coima]] {{cita requerida}} * [[colipoterra]] {{cita requerida}} * [[concha]] {{cita requerida}} * [[conchita]] {{cita requerida}} * [[coneja]] {{cita requerida}} * [[costillera]] {{cita requerida}} * [[cuca caliente]] (Venezuela, malsonante) * [[cuero]] (República Dominicana, malsonante) * [[currulaca]] {{cita requerida}} * [[daifa]] {{cita requerida}} * [[easy]] (fácil. Colombia) * [[elementa]] * [[enrayada]] * [[espatarrada]] * [[esquinera]] * [[firula]] (femenino de firulais "perro") * [[folladora]] * [[frinchi]] * [[fuellera]] * [[fufa]] (Colombia) * [[fufurufa]] (Colombia) * [[fulana]] * [[fumona]] * [[furcia]] * [[gamberra]] (Puerto Rico) * [[gato]] (Argentina) * [[golfa]] (España, México) * [[guarra]] (España) * [[gueisa]] {{cita requerida}} * [[güinza]] {{cita requerida}} (México, Costa Chica de Guerrero y Oaxaca) {{cita requerida}} * [[gumia]] {{cita requerida}} * [[huevera]] {{cita requerida}} * [[huila]] (México) * [[hurgamandera]] {{cita requerida}} * [[hurona]] * [[iza]] * [[jabata]] {{cita requerida}} * [[jinetera]] (Cuba) * [[kilometreada]] (colombia) * [[lacroilla]] {{cita requerida}} * [[ladillera]] {{cita requerida}} * [[lagarta]] * [[lagartera]] * [[lagartona]] * [[lea]] {{cita requerida}} * [[leona]] * [[leonesa]] * [[loba]] (Argentina, Colombia, Uruguay) * [[loca]] (Argentina) * [[lumi]] {{cita requerida}} * [[lumia]] * [[lumiasca]] {{cita requerida}} * [[magaya]] (Honduras) * [[mamadera]] * [[mamona]] * [[manfla]] * [[maraca]] (Chile) * [[mestiza tratada]] {{cita requerida}} * [[microondas]] {{cita requerida}} * [[mil maridos]] * [[moma]] * [[mona]] {{cita requerida}} * [[mortadela]] {{cita requerida}} * [[mozcorra]] * [[mujerzuela]] * [[negra tratada]] {{cita requerida}} * [[niñoca]] (Chile, hoy poco usado) * [[nocturna]] {{cita requerida}} * [[ordeñadora]] {{cita requerida}} * [[pajarera]] * [[pajarona]] * [[pajillera]] * [[pantera]] {{cita requerida}} * [[parga]] (Puerto Rico) * [[patín]] {{cita requerida}} * [[patinadora]] {{cita requerida}} * [[pelandusca]] * [[pendeja]] {{cita requerida}} * [[pendón]] (España) * [[perendeca]] * [[perica]] (España) * [[perra]] * [[peseta]] {{cita requerida}} * [[pesetera]] {{cita requerida}} * [[piculina]] {{cita requerida}} * [[pilingui]] {{cita requerida}} * [[pilla]] (Ecuador) * [[pingona]] * [[piruja]] (México) * [[polilla]] {{cita requerida}} * [[pollera]] {{cita requerida}} * [[prosti]] * [[pujicama]] {{cita requerida}} * [[punto filipino]] {{cita requerida}} * [[pupila]] * [[puta]] (malsonante) * [[putinga]] {{cita requerida}} (Chile, al menos) * [[pájara]] * [[quedona]] * [[quincha]] ([[Boyacá]], [[Colombia]]) * [[rabiza]] {{cita requerida}} * [[ramera]] * [[rampletera]] (Puerto Rico) * [[rastrera]] * [[rebuscona]] * [[recorrida]] (colombia) * [[ruca]] (Perú) * [[rufa]] {{cita requerida}} * [[sabanera]] {{cita requerida}} * [[salida]] * [[saya]] (femenino de sayayin. Colombia) * [[soldadera]] {{cita requerida}} * [[sota]] {{cita requerida}} * [[suripanta]] {{cita requerida}} * [[taconera]] * [[tigresa]] * [[tipa]] * [[tiparraca]] * [[tortillera]] {{cita requerida}} * [[trabuquera]] * [[tremenda]] (colombia) * [[trola]] (Argentina) * [[trotacalles]] * [[trotadora]] * [[trotera]] * [[trotona]] * [[trufera]] * [[turquesa]] * [[turra]] (Argentina) * [[yiro]] (Rioplatense) * [[zorra]] * [[zorreta]] * [[zurriaga]] * [[yuhe]] ==Aún por clasificar== * [[peripatética]] * [[zángana]] (Nicaragua) ==Adjetivos asociados con "prostituta" o "libertina"== ===Términos formales o académicos=== * [[bataclana]] * [[casquivana]] * [[descarriada]] * [[deshonesta]] * [[disoluta]] * [[libertina]] ===Eufemismos=== * [[alegre]] * [[indecente]] * [[inmoral]] * [[fácil]] * [[libertina]] * [[ligera]] * [[pecadora]] * [[perdida]] * [[promiscua]] * [[pícara]] * [[rápida]] ==Términos relacionados== ===Regente de un burdel=== * [[alcahueta]] * [[cabrona]] (Chile) * [[celestina]] * [[madam]] * [[mami]] (Perú) * [[tía]] (Chile) ===Mujer que vive en pareja sin contraer matrimonio=== * [[barragana]] * [[concubina]] * [[manceba]] ===Mujer de fuerte atractivo=== * [[vampiresa]] ===Mujer afectada por una psicopatología referida al sexo=== * [[ninfómana]] * [[hipersexual]] [[Categoría:Wikcionario:Wikisauro]] [[en:Wikisaurus:prostitute]] == Referencias y notas == <references /> ntx15x686vic0wq8wt1nbd4108jqn36 Plantilla:inflect.en.v 10 31063 5823311 5112527 2025-07-02T15:59:07Z Raos10 93688 Color de fondo pasa a negro en modo oscuro (para que el texto sea visible) 5823311 wikitext text/x-wiki {| class="inflection-table collapsible collapsed" align="center" style="border-collapse:separate; border-spacing:1px; padding:2px; border-color:teal; float:right;clear:right; background-color: var(--background-color-backdrop-light, rgba(255,255,255,0.65));" ! style="text-align:center" | <span style="padding-right:20px">Flexión de ''to {{{1}}}''</span> |- | {| class="inflection-table" style="text-align:center" width=99% ! {{l|es|infinitivo}}<sup style="color:red">1</sup> <sup style="color:red">5</sup> | colspan="2" | ({{l|en|to}}) {{#if:{{{link|}}}|{{l*|en|{{{1}}}}}|{{{1}}}}} |- ! {{l|es|participio presente}}<sup style="color:red">2</sup> | colspan="2" | {{#if:{{{link|}}}|{{l*|en|{{{5}}}}}|{{{5}}}}} |- ! {{l|es|participio pasado}} | colspan="2" | {{#if:{{{link|}}}|{{l*|en|{{{4}}}}}|{{{4}}}}}{{#if:{{{part2|}}}|, o {{#if:{{{link|}}}|{{l*|en|{{{part2}}}}}|{{{part2}}}}}|}} |- ! style="text-align:right" | {{l|es|persona|personas}}: | style="font-weight:bold" | {{l|en|I}}, {{l|en|you}}, {{l|en|we}}, {{l|en|they}} | style="font-weight:bold" | {{l|en|he}}, {{l|en|she}}, {{l|en|it}} |- ! {{l|es|presente|presente simple}} | {{#if:{{{link|}}}|{{l*|en|{{{1}}}}}|{{{1}}}}} | {{#if:{{{link|}}}|{{l*|en|{{{2}}}}}|{{{2}}}}} |- ! {{l|es|pasado|pasado simple}}<sup style="color:red">3</sup> | colspan="2" | {{#if:{{{link|}}}|{{l*|en|{{{3}}}}}|{{{3}}}}} |- ! {{l|es|futuro|futuro simple}}<sup style="color:red">4</sup> | colspan="2" | {{l|en|will}} {{#if:{{{link|}}}|{{l*|en|{{{1}}}}}|{{{1}}}}} |- ! {{l|es|condicional|condicional simple}} | colspan="2" | {{l|en|would}} {{#if:{{{link|}}}|{{l*|en|{{{1}}}}}|{{{1}}}}} |- ! {{l|es|presente}} {{l|es|perfectivo|perfecto}} | {{l|en|have}} {{#if:{{{link|}}}|{{l*|en|{{{4}}}}}|{{{4}}}}}{{#if:{{{part2|}}}|, o {{#if:{{{link|}}}|{{l*|en|{{{part2}}}}}|{{{part2}}}}}|}} | {{l|en|has}} {{#if:{{{link|}}}|{{l*|en|{{{4}}}}}|{{{4}}}}}{{#if:{{{part2|}}}|, o {{#if:{{{link|}}}|{{l*|en|{{{part2}}}}}|{{{part2}}}}}|}} |- ! {{l|es|pretérito perfecto|pasado perfecto}} | colspan="2" | {{l|en|had}} {{#if:{{{link|}}}|{{l*|en|{{{4}}}}}|{{{4}}}}}{{#if:{{{part2|}}}|, o {{#if:{{{link|}}}|{{l*|en|{{{part2}}}}}|{{{part2}}}}}|}} |- ! {{l|es|futuro perfecto}}<sup style="color:red">4</sup> | colspan="2" | {{l|en|will}} {{l|en|have}} {{#if:{{{link|}}}|{{l*|en|{{{4}}}}}|{{{4}}}}}{{#if:{{{part2|}}}|, o {{#if:{{{link|}}}|{{l*|en|{{{part2}}}}}|{{{part2}}}}}|}} |- ! {{l|es|condicional perfecto}} | colspan="2" | {{l|en|would}} {{l|en|have}} {{#if:{{{link|}}}|{{l*|en|{{{4}}}}}|{{{4}}}}}{{#if:{{{part2|}}}|, o {{#if:{{{link|}}}|{{l*|en|{{{part2}}}}}|{{{part2}}}}}|}} |- | colspan="3" style="text-align:left; font-size:90%; padding-left:10px;" class="notas" |<sup style="color:red">1</sup> Se emplea también para el {{l|es|imperativo}} y el {{l|es|subjuntivo}} presente.<br/><sup style="color:red">2</sup> Se emplea también como {{l|es|gerundio}}.<br/><sup style="color:red">3</sup> Se emplea también para el subjuntivo pasado.<br/><sup style="color:red">4</sup> También se puede emplear {{l+|en|shall}} como auxiliar, fundamentalmente aparte de Norteamérica. <br/><sup style="color:red">5</sup> Se usa el verbo auxiliar {{l+|en|let}} para formar el imperativo de primera persona del plural {{#if:{{{nota|{{{notas|}}}}}}|<br/>{{{nota|{{{notas|}}}}}}|}} |} |}<noinclude> {{documentación de plantilla}} </noinclude> gma98ls4gy0eik889d2jy54v3z8l188 autoestop 0 31699 5823330 5794175 2025-07-02T19:45:23Z Tmagc 158167 /* {{sustantivo masculino|es}} */ 5823330 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf|g=autostop}} === Etimología === {{etimología|véase|autostop}}. === {{sustantivo masculino|es}} === {{es.sust}} ;1: {{variante|autostop}}. {{ámbito|España}} == Referencias y notas == <references /> 6gbevkzfva7xiom4vg88li5ca4w80yd ve 0 34639 5823359 5738255 2025-07-02T22:56:42Z Tmagc 158167 /* Forma verbal */ - imperativo 5823359 wikitext text/x-wiki {{desambiguación|vé|-ve|-vé}} == {{lengua|es}} == {{pron-graf|fone=be}} === Etimología === {{etimología}}. ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1: Nombre de la letra '''[[v]]'''. {{sinónimo|uve|ve baja|ve corta}}. ==== Véase también ==== {{w}} ==== Traducciones ==== {{trad-arriba}} {{t|ast|a1=1|t1=uve}} <!--{{t+|fr|}}--> <!--{{t+|en|}}--> {{trad-abajo}} === Forma flexiva === ==== Forma verbal ==== ;1: {{forma verbo|ver|p=3s|t=presente|m=indicativo}}. ;2: {{forma verbo|ver|p=2s|t=imperativo|afirmativo=sí}}. {{relacionado|vete|nota=pronominal}}. ;3: {{forma verbo|ir|p=2s|t=imperativo|afirmativo=sí}}. == Referencias y notas == <references /> jdreu4ccxpvnosbl0kuqh1650mm88o1 contingent 0 39875 5823385 5144353 2025-07-03T01:44:09Z Adelpine 34679 Agrega un audio 5823385 wikitext text/x-wiki == {{lengua|en}} == {{pron-graf|leng=en|fono=kənˈtɪn.d͡ʒənt|audio=LL-Q1860 (eng)-Vealhurl-contingent.wav|aunota=Sur de Inglaterra|audio2=LL-Q1860 (eng)-Flame, not lame-contingent.wav|aunota2=Milwaukee, Wisconsin|ls=3}} === Etimología === {{etimología|leng=en}}. === {{adjetivo|en}} === {{inflect.en.adj|+}} ;1: {{plm|contingente}}. === Información adicional === {{derivad|leng=en|contingentism|contingently|contingentness}}. == Referencias y notas == <references /> j9mz5kkh88hy3jl5lpvrjc8d96q0tm3 dea 0 52803 5823496 5357344 2025-07-03T04:36:01Z Tmagc 158167 5823496 wikitext text/x-wiki == {{lengua|la}} == {{pron-graf|leng=la|pron=clásico|fone=ˈdɛ.a|audio=la-cls-dea.ogg}} === Etimología === {{etimología|leng=la|sufijo|deus|glosa=dios|a|num2=3}}.{{catafijo|sufijo|-a|sust.f.|la}} === {{sustantivo femenino|la}} === {{inflect.la.sust.1|de|dat.pl={{l*|la|deabus|deābus}}<br>''o'' {{l*|la|deis|deīs}}|abl.pl={{l*|la|deabus|deābus}}<br>''o'' {{l*|la|deis|deīs}}}} ;1 {{csem|mitología|leng=la}}: {{plm|diosa}}.<ref name="ol">{{Oxf-lat}}</ref> == Referencias y notas == <references /> muryjzk2xnuwfruzrsjlr50u9xogtgq digerir 0 55380 5823319 5798238 2025-07-02T16:22:55Z Tmagc 158167 /* Conjugación */ 5823319 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf|fone=di.xeˈɾiɾ}} === Etimología === {{etimología|la|digerere|transcripción=dīgerere}} === {{verbo transitivo|es}} === ;1: Transformar los alimentos en el estómago en sustancias que se absorben, asimilan o se expulsan en el organismo. ;2: Separar, entender y asimilar ideas, documentos, etc. === Conjugación === {{es.v|nucleopres1=dig#ie#r|nucleopret3=dig#i#r|part=digerido;digesto[†]}} === Traducciones === {{trad-arriba}} {{t|de|t1=verdauen}} {{t|ar|t1=فهم}} {{t|ca}} {{t|fi|t1=luokitella}} {{t|fr|t1=digerer}} {{t|he|t1=לעכל}} {{t|hu|t1=megemészt}} {{t|io|t1=digestar}} {{t|en|t1=digest}} {{t|it|t1=digerire}} {{t|la|t1=digerere}} {{t|pt}} {{trad-abajo}} == {{lengua|ca}} == {{pron-graf|leng=ca}} === Etimología === {{etimología|la|digerere|transcripción=dīgerere|leng=ca}} === {{verbo transitivo|ca}} === ;1: {{plm}}. <!--[[http://ca.wiktionary.org/wiki/digerir|h Ve]] al wiktionario catalán por ver la conjugacion.<br> Ya hacemos pantillas catalanes.--> == {{lengua|pt}} == {{pron-graf|leng=pt|fone=disjuˈnarju}} === Etimología === {{etimología|la|digerere|transcripción=dīgerere|leng=pt}} === {{verbo transitivo|pt}} === ;1: {{plm}}. <!--[[http://pt.wiktionary.org/wiki/digerir|h Ve]] al wiktionario portugués por ver la conjugacion.<br> Ya hacemos pantillas portuguéses.--> == Referencias y notas == <references /> 6bmlcpbngbrf4jksq331m9291dmxh1q Plantilla:documentación de plantilla 10 60344 5823315 5630479 2025-07-02T16:12:21Z Raos10 93688 Se agregaron variables CSS para que se adapte correctamente al modo oscuro 5823315 wikitext text/x-wiki <includeonly><div style="clear: both; margin: 1em 0 0 0; background-color: var(--background-color-success-subtle, #dff2eb); border: 1px dotted var(--border-color-content-added, #a3d3ff); color: var(--color-base, #202122); padding: 0.9em;"> <div style="padding-bottom:3px; border-bottom: 1px solid #aaa; margin-bottom:1ex"> <div class="editsection plainlinks" id="doc_editlinks" style="display:inline">{{#ifexist:{{{1|{{FULLPAGENAME}}/doc}}}<!-- -->|[[{{fullurl:{{{1|{{FULLPAGENAME}}/doc}}}|action=edit}} editar]] [{{purgar}}]<!-- -->|[[{{fullurl:{{{1|{{FULLPAGENAME}}/doc}}}|action=edit&preload=Plantilla:documentación_de_plantilla/precarga}} crear]]<!-- -->[[Categoría:Plantillas sin documentación]]}}</div> <div style="font-size: 150%;display:inline">[[Archivo:Template-info.svg|35px|link=]] Documentación {{#switch: {{SUBJECTSPACE}} | {{ns:10}} = de la plantilla | {{ns:828}} = del módulo | #default=}} </div></div> {{#ifexist:{{{1|{{FULLPAGENAME}}/doc}}} | __NOEDITSECTION__{{ {{{1|{{FULLPAGENAME}}/doc}}}|ns:0 }} }}</div> <div style="clear: both; margin: 0.2em 0; border: 1px dotted var(--border-color-content-added, #a3d3ff); background-color: var(--background-color-success-subtle, #dff2eb); color: var(--color-base, #202122); padding: 0.25em 0.9em; font-style: italic">{{#ifexist:{{{1|{{FULLPAGENAME}}/doc}}}|Esta documentación está transcluida desde [[{{{1|{{FULLPAGENAME}}/doc}}}]].<br>}} {{#ifeq:{{SUBPAGENAME}}|pruebas||Los editores pueden experimentar en la [[{{#ifexist:{{FULLPAGENAME}}/zona de pruebas | {{FULLPAGENAME}}/zona de pruebas | {{FULLPAGENAME}}/pruebas }}|zona de pruebas]] {{#switch: {{NAMESPACE}} | Módulo=de este módulo | de esta plantilla }}.<br>}}Por favor, añade las categorías e interwikis a la subpágina de documentación. [[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpáginas de {{#switch: {{NAMESPACE}} | Módulo=este módulo | esta plantilla }}]].</div></includeonly><noinclude>{{documentación}}</noinclude> m5383qvowskq72a4rt2jiroewh8jccl bear 0 67147 5823337 5821182 2025-07-02T21:13:38Z Adelpine 34679 Corrige algunas notas fonéticas y completa la de un homófono 5823337 wikitext text/x-wiki {{desambiguación|béar|beár|bearr|Bear}} == {{lengua|en}} == {{pron-graf|leng=en|1fono1=bɛə(ɹ)|1pron1=Received Pronunciation|1fono2=bɛː(ɹ)|2fono1=bɛɹ|2pron1=General American, Canadá|2fone2=bɛ˞|2audio2=en-us-bear.ogg|2aunota2=California˞|2fnota2=vocal rótica|2fone3=bɛɚ|2fnota3=vocal no rótica|3fono1=beː|3pron1=Australia|4fono1=ˈbiːə(r)|4pron1=Indian English|4fono2=bɛː(r)|5pron1=Nueva Zelanda|5fono1=beə|5fnota1=sin la fusión cheer–chair|5fono2=biə|5fnota2=con la fusión cheer–chair|6fono1=bɑɹ|6pron1=Sur de los EE. UU., coloquial|h1=bare|hnota1=RP, GA, CA, AU|h2=beer|hnota2=Nueva Zelanda con la fusión cheer–chair|ls=1|nl=4}} === Etimología 1 === {{etimología|leng=en|enm|bere}}. ==== {{verbo transitivo|en}} ==== {{inflect.en.v|{{l|en|bear}}|{{l|en|bears}}|{{l|en|bore}}|{{l|en|born}}, {{l|en|borne}}|{{l|en|bearing}}}} ;1: {{plm|soportar}}, [[aguantar]]. {{sinónimos|leng=en|stand}}. ;2: {{plm|resistir}}, [[aguantar]]. {{sinónimos|leng=en|resist}}. ;3: {{plm|tolerar}}. {{sinónimos|leng=en|tolerate}}. ;4: {{plm|parir}}, [[dar a luz]]. {{sinónimos|leng=en|give birth}}. {{antónimos|leng=en|kill|assassinate}}. {{ejemplo|My mother '''bore''' me in the southern wild.|trad=Mi madre me '''dio a luz''' en el sur salvaje.|título=The Little Black Boy|c=libro|u=http://en.wikisource.org/wiki/The_Little_Black_Boy|a=William Blake|fecha=1789}} ;5: {{plm|producir}} naturalmente, [[dar]]. {{sinónimos|leng=en|produce}}. {{ejemplo|A Peasant had in his garden an Apple-Tree which '''bore''' no fruit.|trad=Un campesino tenía en su jardín una manzano que no '''daba''' fruto...|título=The Peasant and the Apple-Tree|c=libro|u=http://en.wikisource.org/wiki/The_Peasant_and_the_Apple-Tree|a=Aesop}} ;6: {{plm|cargar}}, [[llevar]]. {{sinónimos|leng=en|carry}}. {{ejemplo|Every book '''bears''' the stamp of the time and circumstances in which it was produced.|trad=Todo libro '''lleva''' la estampa del tiempo y circunstancias en las que fue producido.|título=The Old Testament in the Jewish church|c=libro|u=http://en.wikisource.org/wiki/The_Old_Testament_in_the_Jewish_Church|a=William Robertson Smith|fecha=1895}} {{ejemplo|Surely He has '''borne''' our griefs and carried our sorrows; Yet we esteemed Him stricken, smitten by God, and afflicted|c=libro|v=New King James|t=Bible|pasaje=Isaiah 53:4|u=https://www.biblegateway.com/passage/?search=Isaiah+53&version=NKJV |trad=Ciertamente '''llevó''' él nuestras enfermedades y sufrió nuestros dolores, ¡pero nosotros lo tuvimos por azotado, como herido y afligido por Dios!|tradc=libro|tradv=Reina-Valera 1995|tradt=Biblia|tradpasaje=Isaías 53:4|tradu=https://www.biblegateway.com/passage/?search=isaias+53&version=RVR1995}} ;7: [[conducir|Conducirse]]. ;8: {{plm|difundir}} chismes o historias, [[chismorrear]]. ;9: {{plm|virar}}. {{sinónimos|leng=en|turn}}. ;10: {{plm|tener}}, [[poseer]]. {{sinónimos|leng=en|have|possess}}. {{ejemplo|I '''bore''' no grudge against the Zulus.|trad=Yo no '''tenía''' resentimiento contra Zulus.|título=An Autobiography or The Story of my Experiments with Truth|c=libro|u=http://en.wikisource.org/wiki/The_Story_of_My_Experiments_with_Truth/Part_IV/The_Zulu_%27Rebellion%27|a=Mohandas K. Gandhi|fecha=1929|fo=1927}} ;11: {{plm|aceptar}} obligaciones, responsabilidad, etc. ;12: {{plm|rendir}}, [[dar]]. {{ejemplo|I have an anxiety to '''bear''' testimony to the truth.|trad=Tengo ansiedad de '''dar''' testimonio de la verdad.|tradtítulo=Journal of Discourses|tradc=libro|tradu=http://en.wikisource.org/wiki/Journal_of_Discourses/Volume_15/The_Fullness_of_the_Gospel,_etc|trada=Brigham Young|tradfecha=1872}} ;13: Estar localizado, situado. === Etimología 2 === {{etimología|leng=en|ang|bera}}. ==== {{sustantivo|en}} ==== {{inflect.en.sust.reg}} ;1 {{csem|mamíferos|leng=en}}: {{plm|oso}}. ;2 {{csem|finanzas|leng=en}}: Persona que cree que los precios del mercado bajarán. {{antónimo|leng=en|bull}}. ==== {{adjetivo|en}} ==== {{inflect.en.adj|-}} ;3 {{csem|finanzas|leng=en}}: Propio o relacionado con la baja de precios. ==== {{verbo transitivo|en}} ==== {{inflect.en.v.reg}} ;4 {{csem|finanzas|leng=en}}: Forzar o provocar la caída de los precios. == Referencias y notas == <references /> jqf9va7aglcm9jlo4w6210dlh2mocmq ancient 0 67622 5823210 5175415 2025-07-02T14:30:23Z Adelpine 34679 Precisa los hablantes de las pronunciaciones AFI y agrega la inflexión 5823210 wikitext text/x-wiki == {{lengua|en}} == {{pron-graf|leng=en |pron=Received Pronunciation, General American, Standard Canadian|fono=ˈeɪn.ʃənt|audio=en-us-ancient.ogg|aunota=California|audio2=LL-Q1860 (eng)-Simplificationalizer-ancient.wav|aunota2=Nueva Jersey |2pron=Australia, Nueva Zelanda|2fono=ˈæɪn.ʃənt |ls=2|nl=7 |g=auncient|gnota=obsoleta|g2=antient|gnota2=obsoleta|g3=auntient|gnota3=obsoleta}} === Etimología === {{etimología|enm|auncyen|leng=en}}, {{etim|fro|ancien|leng=en}}. === {{adjetivo|en}} === {{inflect.en.adj|+}} ;1: {{plm|antiguo}}. ;2: {{plm|veterano}}, [[experimentado]], [[venerable]]. === {{sustantivo|en}} === {{inflect.en.sust}} ;3: {{plm|persona}} que vivía en tiempos antiguos. ;4: {{plm|escritor}} [[clásico]]. ;5: {{plm|anciano}}. == Referencias y notas == <references /> bkciljyomu31xy2bn6m9up298c4rzrc gazapo 0 70230 5823427 5734150 2025-07-03T02:49:34Z Tmagc 158167 /* {{sustantivo masculino|es}} */ 5823427 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología 1 === [[Archivo:Flopsybunnyrabbit1.jpg|thumb|Gazapo [1] en la hierba]] {{etimología|itc-pro}}. Compárese el portugués {{l+|pt|caçapo}} y el catalán meridional y occidental {{l+|ca|catxap}}. ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;1 {{csem|mamíferos}}: {{plm|cría}} del [[conejo]]. ;2: Persona astuta que actúa con disimulo. ==== Derivados ==== * [[agazapar]] * [[agazaparse]] ==== Véase también ==== {{w|conejo}} * [[lebrato]] * [[gabato]] ==== Traducciones ==== {{trad-arriba}} {{t|de|g1=n|t1=Kaninchenjunge}} {{t|ast|g1=m|g2=m|t1=cuirapín|t2=galdrapín}} {{t|ca|g1=m|g2=m|t1=catxap|t2=llorigó}} {{t|eu|t1=erbikume}} {{t|fr|g1=m|t1=lapereau}} {{t|gl|g1=m|g2=m|t1=caçapo|t2=láparo}} {{t|en|t1=bunny|t2=kit|t3=kitten}} {{t|it|g1=m|t1=coniglietto}} {{t|nl|g1=f|t1=lamprei}} {{t|oc|g1=m|g2=m|t1=lapinon|t2=conilhon}} {{t|pt|g1=m|g2=m|t1=caçapo|t2=láparo}} {{t|ro|t1=iepuraş}} {{trad-abajo}} {{clear}} === Etimología 2 === {{etimología|regresiva|gazapatón}}.<ref name="dle">{{DLE}}</ref> ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;1: {{plm|error}} cometido por [[distracción]]. {{uso|coloquial}} {{sinónimo|lapsus|yerro|desliz|metedura de pata|errata}}. ;2: {{plm|embuste}}, [[engaño]]. {{uso|coloquial}} {{sinónimo|mentira|embuste|falsedad|gazapa}}. {{antónimo|verdad}}. {{hipónimo|calumnia}}. ==== Traducciones ==== {{trad-arriba}} {{t|en|a1=1|a2=1|a3=2|a4=3|t1=blunder|t2=slip|t3=misprint|t4=lie}} {{t|no|g1=m|g2=m|g3=m|t1=tabbe|t2=trykkfeil|t3=usannhet}} {{trad-abajo}} == Referencias y notas == <references /> 9w49j2mzhl6wr1nwns6c5pbkcawkqsr 5823428 5823427 2025-07-03T02:50:05Z Tmagc 158167 /* Etimología 2 */ 5823428 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología 1 === [[Archivo:Flopsybunnyrabbit1.jpg|thumb|Gazapo [1] en la hierba]] {{etimología|itc-pro}}. Compárese el portugués {{l+|pt|caçapo}} y el catalán meridional y occidental {{l+|ca|catxap}}. ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;1 {{csem|mamíferos}}: {{plm|cría}} del [[conejo]]. ;2: Persona astuta que actúa con disimulo. ==== Derivados ==== * [[agazapar]] * [[agazaparse]] ==== Véase también ==== {{w|conejo}} * [[lebrato]] * [[gabato]] ==== Traducciones ==== {{trad-arriba}} {{t|de|g1=n|t1=Kaninchenjunge}} {{t|ast|g1=m|g2=m|t1=cuirapín|t2=galdrapín}} {{t|ca|g1=m|g2=m|t1=catxap|t2=llorigó}} {{t|eu|t1=erbikume}} {{t|fr|g1=m|t1=lapereau}} {{t|gl|g1=m|g2=m|t1=caçapo|t2=láparo}} {{t|en|t1=bunny|t2=kit|t3=kitten}} {{t|it|g1=m|t1=coniglietto}} {{t|nl|g1=f|t1=lamprei}} {{t|oc|g1=m|g2=m|t1=lapinon|t2=conilhon}} {{t|pt|g1=m|g2=m|t1=caçapo|t2=láparo}} {{t|ro|t1=iepuraş}} {{trad-abajo}} {{clear}} === Etimología 2 === {{etimología|regresiva|gazapatón}}.<ref name="dle">{{DLE}}</ref> ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;1: {{plm|error}} cometido por [[distracción]]. {{uso|coloquial}} {{sinónimo|lapsus|yerro|desliz|metedura de pata|errata}}. ;2: {{plm|embuste}}, [[engaño]]. {{uso|coloquial}} {{sinónimo|mentira|embuste|falsedad|gazapa}}. {{antónimo|verdad}}. {{hipónimo|calumnia}}. ==== Traducciones ==== {{trad-arriba}} {{t|en|a1=1|a2=1|a3=2|t1=blunder|t2=slip|t3=lie}} {{t|no|g1=m|g2=m|g3=m|t1=tabbe|t2=trykkfeil|t3=usannhet}} {{trad-abajo}} == Referencias y notas == <references /> dgpv227uzhdi8q9w5abyiivk380ypov 5823429 5823428 2025-07-03T02:53:11Z Tmagc 158167 5823429 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología === [[Archivo:Flopsybunnyrabbit1.jpg|thumb|Gazapo [1] en la hierba]] {{etimología|qsb-ibe}}. Compárese el portugués {{l+|pt|caçapo}} y el catalán meridional y occidental {{l+|ca|catxap}}. ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;1 {{csem|mamíferos}}: {{plm|cría}} del [[conejo]]. ;2: Persona astuta que actúa con disimulo. ==== Derivados ==== * [[agazapar]] * [[agazaparse]] ==== Véase también ==== {{w|conejo}} * [[lebrato]] * [[gabato]] ==== Traducciones ==== {{trad-arriba}} {{t|de|g1=n|t1=Kaninchenjunge}} {{t|ast|g1=m|g2=m|t1=cuirapín|t2=galdrapín}} {{t|ca|g1=m|g2=m|t1=catxap|t2=llorigó}} {{t|eu|t1=erbikume}} {{t|fr|g1=m|t1=lapereau}} {{t|gl|g1=m|g2=m|t1=caçapo|t2=láparo}} {{t|en|t1=bunny|t2=kit|t3=kitten}} {{t|it|g1=m|t1=coniglietto}} {{t|nl|g1=f|t1=lamprei}} {{t|oc|g1=m|g2=m|t1=lapinon|t2=conilhon}} {{t|pt|g1=m|g2=m|t1=caçapo|t2=láparo}} {{t|ro|t1=iepuraş}} {{trad-abajo}} === Etimología 2 === {{etimología|regresiva|gazapatón}}.<ref name="dle">{{DLE}}</ref> ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;1: {{plm|error}} cometido por [[distracción]]. {{uso|coloquial}} {{sinónimo|lapsus|yerro|desliz|metedura de pata|errata}}. ;2: {{plm|embuste}}, [[engaño]]. {{uso|coloquial}} {{sinónimo|mentira|embuste|falsedad|gazapa}}. {{antónimo|verdad}}. {{hipónimo|calumnia}}. ==== Traducciones ==== {{trad-arriba}} {{t|en|a1=1|a2=1|a3=2|t1=blunder|t2=slip|t3=lie}} {{t|no|g1=m|g2=m|g3=m|t1=tabbe|t2=trykkfeil|t3=usannhet}} {{trad-abajo}} == Referencias y notas == <references /> aobsagci2gvpflv4zzxfdxkdwiacvnj poeta 0 74008 5823470 5709342 2025-07-03T03:57:22Z TMCbot 164594 . 5823470 wikitext text/x-wiki {{desambiguación|poéta|poetă|poetą}} == {{lengua|es}} == {{pron-graf}} === Etimología 1 === {{etimología|la|poeta|alt=poēta}}, y este {{etim|grc|ποιητής}} ("[[orfebre]], [[creador]]"). Para el femenino, {{etim|la|poetissa}}. ==== {{sustantivo femenino y masculino|es}} ==== {{es.sust|irreg|p=poetas|f=poetisa|f2=poeta|fp=poetisas|fp2=poetas}} ;1 {{csem|ocupaciones}}: [[escritor|Persona]] que [[escribir|escribe]] o [[componer|compone]] [[poesía]]. {{sinónimos|bardo|rapsoda|vate|trovador}} ;2: Por extensión, persona de [[sensibilidad]] [[lírico|lírica]] o [[estético|estética]]. ==== Información adicional ==== {{derivad|tít=Derivación|poema|poesía|poeta|poética|poético|poetisa|poetizar}} ==== Véase también ==== {{w}} ==== Traducciones ==== {{trad-arriba}} {{t|de|a1=1|t1=Poet|g1=m|t2=Dichter}} {{t|ar|a1=1|t1=شاعر|g1=m}} {{t|az|a1=1|t1=şair}} {{t|sh|a1=1|t1=pjesnik|g1=m|a2=1|t2=pesnik}} {{t|yue|a1=1|t1=詩人}} {{t|zh|a1=1|t1=詩人}} {{t|cs|a1=1|t1=básník|g1=m}} {{t|eo|a1=1|t1=poeto}} {{t|fi|a1=1|t1=runoilija}} {{t|fr|a1=1|t1=poète|g1=m}} {{t|gd|a1=1|t1=bard|g1=m}} {{t|cy|a1=1|t1=bardd|g1=m}} {{t|gl|a1=1|t1=poeta/poetisa|g1=m/f}} {{t|el|a1=1|t1=ποιητής|g1=m}} {{t|hi|a1=1|t1=कवि}} {{t|hu|a1=1|t1=költő}} {{t|is|a1=1|t1=skáld|g1=n}} {{t|io|a1=1|t1=poeto}} {{t|en|a1=1|t1=poet/poetess|g1=m/f}} {{t|ga|a1=1|t1=bard|g1=m}} {{t|it|a1=1|t1=poeta/poetessa|g1=m/f}} {{t|ja|a1=1|t1=詩人}} {{t|ml|a1=1|t1=കവി}} {{t|mt|a1=1|t1=poeta|g1=m}} {{t|nl|a1=1|t1=dichter|g1=m}} {{t|pl|a1=1|t1=poeta/poetka|g1=m/f}} {{t|pt|a1=1|t1=poeta/poetisa|g1=m/f}} {{t|ru|a1=1|t1=поэт|g1=m}} {{t|sw|a1=1|t1=malenga}} {{t|sv|a1=1|t1=poet}} {{t|te|a1=1|t1=కవి|g1=m}} {{t|ur|a1=1|t1=شاعر|g1=m}} {{t|tr|a1=1|t1=şair}} {{t|vi|a1=1|t1=nhà thơ|t2=thi sĩ}} {{trad-abajo}} == {{lengua|ast}} == {{pron-graf|leng=ast}} [[Categoría:AST:Oficios]] === Etimología 1 === {{etimología|leng=ast|la|poeta|alt=poēta}}. ==== {{sustantivo femenino y masculino|ast}} ==== {{inflect.ast.sust|poet|a|poeta|poetes}} ;1: {{plm}}. == {{lengua|ca}} == {{pron-graf|leng=ca}} [[Categoría:CA:Oficios]] === Etimología 1 === {{etimología|leng=ca|la|poeta|alt=poēta}}. ==== {{sustantivo femenino y masculino|ca}} ==== {{inflect.ca.sust|poeta|poetes|poetessa|poetessas|link=s}} ;1: {{plm}}. {{relacionado|leng=ca|poema|poesia}} ==== Véase también ==== {{w|leng=ca}} == {{lengua|cs}} == {{pron-graf|leng=cs|1fone1=pɔɛta}} [[Categoría:CS:Oficios]] === Etimología 1 === {{etimología|leng=cs|la|poeta|alt=poēta}}. ==== {{sustantivo masculino|cs}} ==== {{inflect.cs.sust|poeta|poeti / poetové|poeto|poeti / poetové|poetu|poety|poety|poetů|poetovi|poetům|poetovi|poetech|poetou|poety}} ;1: {{plm}}. {{relacionado|leng=cs|poetka|nota1=fem.}} == {{lengua|gl}} == {{pron-graf|leng=gl}} [[Categoría:GL:Oficios]] === Etimología 1 === {{etimología|leng=gl|la|poeta|alt=poēta}}. ==== {{sustantivo femenino y masculino|gl}} ==== {{inflect.gl.sust|poeta|poetas|poetisa|poetisas|link=s}} ;1: {{plm}}. == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología 1 === {{etimología|leng=it|la|poeta|alt=poēta}}. ==== {{sustantivo masculino y femenino|it}} ==== {{it.sust|irreg|poeti|poetessa|poetesse}} ;1 {{csem|oficios|leng=it}}: {{plm}}. ==== Véase también ==== {{w|leng=it}} == {{lengua|la}} == {{pron-graf|leng=la|ayuda=poēta|1audio1=la-cls-poeta.ogg}} [[Categoría:LA:Oficios]] === Etimología 1 === {{etimología|leng=la|grc|ποιητής|tr=poiētḗs, "[[creador]]", "poeta", "[[músico]]", "[[escritor]]"}}.<ref>{{Ernout-Meillet|518}}</ref> ==== {{sustantivo masculino|la}} ==== {{inflect.la.sust.1|poet|poēt}} ;1 {{csem|lingüística|leng=la}}: {{plm}}, [[escritor]] de [[verso]]s.<ref name="ol">{{Oxf-lat}}</ref> {{relacionado|leng=la|poema|alt1=poēma|poesis|alt2=poēsis|poeticus|alt3=poēticus|poetria|alt5=poētria|poetris|alt6=poētris}} :;b: Especialmente [[escritor]] de [[obra]]s de [[teatro]] en [[verso]].<ref name="ol" /> :;c: Persona de gran [[talento]], un [[artista]]. {{uso|leng=la|por extensión}}.<ref name="ol" /> ==== Descendientes ==== {{trad-arriba|descendientes}} {{d|de|d1=Poet}} {{d|ca|d1=poeta}} {{d|cs|d1=poeta}} {{d|es|d1=poeta}} {{d|eo|d1=poeto}} {{d|fr|d1=poète}} {{d|gl|d1=poeta}} {{d|hu|d1=poéta}} {{d|en|d1=poet}} {{d|it|d1=poeta}} {{d|pl|d1=poeta}} {{d|pt|d1=poeta}} {{d|sv|d1=poet}} {{d|ru|d1=поэт}} {{trad-abajo}} == {{lengua|pl}} == {{pron-graf|leng=pl|1audio1=Pl-poeta.ogg}} [[Categoría:PT:Oficios]] === Etimología 1 === {{etimología|leng=pl|la|poeta|alt=poēta}}. ==== {{sustantivo masculino|pl}} ==== {{inflect.pl.sust|{{l|pl|poeta}}|{{l|pl|poeci}}|{{l|pl|poety}}|{{l|pl|poetów}}|{{l|pl|poecie}}|{{l|pl|poetom}}|{{l|pl|poetę}}|{{l|pl|poetów}}|{{l|pl|poetą}}|{{l|pl|poetami}}|{{l|pl|poecie}}|{{l|pl|poetach}}|{{l|pl|poeto}}|{{l|pl|poeci}}}} ;1: {{plm}}. {{relacionado|leng=pl|poetka|poezja}} == {{lengua|pt}} == {{pron-graf|leng=pt}} [[Categoría:PT:Oficios]] === Etimología 1 === {{etimología|leng=pt|la|poeta|alt=poēta}}. ==== {{sustantivo masculino|pt}} ==== {{inflect.pt.sust.ad-lib|poeta|poetas|poetisa|poetisas|link=s}} ;1: {{plm}}. {{relacionado|leng=pt|poesía}} == Referencias y notas == <references /> pyla6huwqt089g5y8pyixb17xqkbacv describe 0 79827 5823209 5793434 2025-07-02T14:16:18Z Adelpine 34679 Corrige algunas pronunciaciones AFI y agrega otra (elaboración propia) 5823209 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Forma verbal === ;1: {{forma verbo|describir|p=3s|t=presente|m=indicativo}}. ;2: {{forma verbo|describir|p=2s|t=imperativo|afirmativo=sí}}. == {{lengua|en}} == {{pron-graf|leng=en |pron=Received Pronunciation|fono=dɪˈskɹaɪb |2pron=General American, Standard Canadian|2fono=dɪˈskɹaɪb|2audio=En-us-describe.ogg|2aunota=California|2fono2=dəˈskɹaɪb |3pron=Australia|3fono=dɪˈskɹɑeb |4pron=Nueva Zelanda|4fono=dəˈskɹaɪb|4fone2=dəˈskɹɑe̯b|4fone3=dɘˈskɹɑe̯b |ls=2|nl=8}} === Etimología === {{etimología|leng=en|enm|descriven}}, {{etim|leng=en|fro|descrivre}}, {{etim|leng=en|la|describo|alt=dēscrībō}} ("yo copio, transcribo, bosquejo, describo en pintura o escritura"). === {{verbo|en}} === {{inflect.en.v.reg|describ|e|link=s}} ;1: {{plm|describir}}, [[trazar]]. == Referencias y notas == <references /> obxw70cgo7lbtwx33710gq67858dcc4 repression 0 80851 5823334 4615311 2025-07-02T20:34:54Z Apisite 115465 /* {{lengua|en}} */ 5823334 wikitext text/x-wiki {{desambiguación|répression}} == {{lengua|en}} == {{pron-graf|leng=en}} === Etimología === {{etimología|leng=en}} === {{sustantivo|en}} === {{inflect.en.sust.sg-pl|repression|repressions}} ;1: {{plm|represión}}. ==== Derivados ==== {{derivad|financial repression|transnational repression|repressionary}} == Referencias y notas == <references /> e6r273cy7mueq0wr75lfbpmcgf1ggfv 5823335 5823334 2025-07-02T20:40:02Z Apisite 115465 /* {{lengua|en}} */ 5823335 wikitext text/x-wiki {{desambiguación|répression}} == {{lengua|en}} == {{pron-graf|leng=en}} === Etimología === {{etimología|leng=en}} === {{sustantivo|en}} === {{inflect.en.sust.sg-pl|repression|repressions}} ;1: {{plm|represión}}. ==== Derivados ==== {{derivad|repressionary}} === Locuciones === {{derivad|financial repression|transnational repression}} == Referencias y notas == <references /> 11pr1s0yjyemqxm75f44d2rr51ij1ha Italian 0 81604 5823375 5696685 2025-07-03T00:54:52Z Adelpine 34679 Agrega una inflexión y cambia una pronunciación AFI, según [[en:Italian]]. Precisa los hablantes de las pronunciaciones AFI 5823375 wikitext text/x-wiki {{desambiguación|italian}} == {{lengua|br}} == {{pron-graf|leng=br|fone=i.taˈliː.ãn}} === Etimología === {{etimología|leng=br|||}}. === {{sustantivo masculino y femenino|br}} === {{inflect.br.sust|Italian|Italianed|Italianez|Italianezed}} ;1 {{csem|leng=br|gentilicios}}: {{plm|italiano}}. == {{lengua|en}} == {{pron-graf|leng=en |pron=Conservative Received Pronunciation, General American, Standard Canadian, Australia|fono=ɪˈtæl.jən|audio=en-us-Italian.ogg|aunota=EE. UU. |2pron=EE. UU., menos común|2fono=aɪˈtæl.iən|2audio=En-au-Eye-talian.ogg|2aunota=Queensland |ls=3}} === Etimología === {{etimología|endo|Italia}}. === {{adjetivo|en}} === {{inflect.en.adj|+}} ;1: {{plm|italiano}}; perteneciente o relativo a Italia, sus habitantes, o al idioma italiano. === {{sustantivo|en}} === {{inflect.en.sust.reg}} ;2 {{csem|leng=en|glotónimos}}: {{plm|italiano}}. ;3 {{csem|leng=en|gentilicios}}: {{plm|italiano}}. == Referencias y notas == <references /> 1xq49bjglmtbe8rffoeb96f7hn4qmr0 creative 0 81783 5823424 5700160 2025-07-03T02:41:28Z Tmagc 158167 /* {{lengua|it}} */ 5823424 wikitext text/x-wiki == {{lengua|en}} == {{pron-graf|leng=en |pron=Received Pronunciation|fono=kɹiːˈeɪ.tɪv|audio=LL-Q1860 (eng)-Vealhurl-creative.wav|aunota=Sur de Inglaterra |2pron=General American, Standard Canadian|2fono=kɹiˈeɪ.tɪv|2fone2=kɹiˈeɪ.ɾɪv |3pron=Australia|3fono=kɹiːˈæɪ.tɪv|3fone2=kɹiːˈæɪ.ɾɪv |ls=3|nl=8}} === Etimología === Préstamo {{etim|leng=en|la-lat|creativus}}, {{etim|leng=en|la|creo|alt=creō}}. Equivalente a {{l+|en|create}} + {{l+|en|-ive}}. === {{adjetivo|en}} === {{inflect.en.adj|+}} ;1: {{plm|creativo}}. == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma adjetiva ==== ;1: {{forma adjetivo|leng=it|creativo|femenino|plural}} == Referencias y notas == <references /> 64sm5hc9muqc79m5nt54hmhf7ah6u58 putazo 0 82528 5823205 5742944 2025-07-02T13:16:48Z 139.28.78.98 /* {{lengua|es}} */ 5823205 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología 1 === {{ meterte un golpe fuerte etimología|aumentativo|puto}}. ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;1: {{plm|puto}}. {{uso|malsonante}} ;2: {{plm|golpe}}, [[golpazo]]. {{sinónimo|cabronazo|chingadazo|madrazo}}. {{ámbito|México}} {{uso|malsonante}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> 6hmg3k3610cmrgvd733vcgkmgjcg1h6 5823207 5823205 2025-07-02T13:48:29Z Peter Bowman 34685 Revertido el cambio de [[Special:Contributions/139.28.78.98|139.28.78.98]] ([[User talk:139.28.78.98|disc.]]) a la última edición de [[User:TMCbot|TMCbot]] 5742944 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología 1 === {{etimología|aumentativo|puto}}. ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;1: {{plm|puto}}. {{uso|malsonante}} ;2: {{plm|golpe}}, [[golpazo]]. {{sinónimo|cabronazo|chingadazo|madrazo}}. {{ámbito|México}} {{uso|malsonante}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> dt3odecr806g3sz1vsqj9j92px1b4g1 Plantilla:inflect.en.adj 10 83723 5823310 5406504 2025-07-02T15:52:08Z Raos10 93688 Se cambio la clase a wikitable (con la modificación del margen a 0) 5823310 wikitext text/x-wiki {|class="wikitable" style="margin: 0 !important" |- {{#ifeq: {{{1}}} | - | ! class="vertical" {{!}} ''No comparable'' <includeonly>[[Categoría:EN:Adjetivos no comparables]]</includeonly>| ! class="vertical" {{!}} Positivo ! class="vertical" {{!}} Comparativo ! class="vertical" {{!}} Superlativo {{!}}- lang="en" xml:lang="en" {{!}}{{PAGENAME}}<includeonly>[[Categoría:EN:Adjetivos comparables]]</includeonly> {{!}}{{#switch:{{{1|}}}|+=more {{PAGENAME}}<td>most {{PAGENAME}}|n={{{2}}}<td>{{{3}}}|y=[[{{{2}}}ier]]<td>[[{{{2}}}iest]]|e=[[{{PAGENAME}}r]]<td>[[{{PAGENAME}}st]]|d=[[{{PAGENAME}}{{{2}}}er]]<td>[[{{PAGENAME}}{{{2}}}est]]|[[{{{2|{{{1|{{PAGENAME}}}}}er}}}]]<td>[[{{{3|{{{1|{{PAGENAME}}}}}est}}}]]}} }} |}<noinclude> {{documentación de plantilla}} <!-- Añade categorías e interwikis en la página de documentación, no aquí--> </noinclude> osc2d8l4hw0qn70wsu4kjnp04gito1v a granel 0 99029 5823326 5817534 2025-07-02T18:45:52Z Tmagc 158167 5823326 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf|alt=[[a]] [[granel]]|fone=a gɾaˈnel}} === Etimología === {{etimología|ca|granell}}.<ref name="dlen">{{DLE}}</ref> [[Archivo:LightningVolt Iron Ore Pellets.jpg|thumb|[[montón]] de [[mineral]] de [[hierro]] a granel (1).]] === {{locución adverbial|es}} === ;1: Hablando de cosas [[menudo|menudas]], como [[trigo]], [[centeno]], etc., sin [[orden]], [[número]] ni [[medida]].<ref name="dlc">{{DLC1914|519}}</ref> ;2: De [[montón]].<ref name="dlc" /> {{ejemplo|No consientas que se esfume, asómate y consume la vida '''a granel'''<br>Hoy puede ser una gran día, ¡Duro con él!|c=canción|t=Ocupen su localidad / Hoy puede ser un gran día|a=Joan Manuel Serrat|a2=Joaquín Sabina|f=2008}} ;3: Voz que se emplea para [[designar]] la [[pólvora]] sin [[cartucho]]s o cuando se encuentra en montón sin [[envase]] alguno.<ref>{{tomoespasa|Tomo=8}}</ref> === Véase también === {{W}} === Traducciones === {{trad-arriba}} {{t|de|a1=1|t1=Massengut}} {{t|ca|a1=1|t1=a granel}} {{t|fr|a1=1|t1=vrac}} {{t|en|a1=1|t1=bulk cargo}} {{trad-abajo}} == Referencias y notas == <references /> cnjmibtk4jspu03anpjnea118mv1mlc aparte 0 116864 5823357 5736279 2025-07-02T22:49:06Z Tmagc 158167 5823357 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf|audio=LL-Q1321 (spa)-Marreromarco-aparte.wav|aunota=Venezuela}} === Etimología === {{etimología|osp|aparte}}, {{etim|la|ad|a|la|partem|parte, lado}}. ==== {{adverbio de lugar|es}} ==== ;1: En otro [[lugar]].<ref name="dlc1914">{{DLC1914|79||2012-9-05}}</ref> ;2: A [[distancia]], desde [[lejos]].<ref name="dlc1914"/> ==== {{adverbio de modo|es}} ==== ;3: {{plm|separadamente}}, con [[distinción]].<ref name="dlc1914"/> ;4: Con [[omisión]], con [[preterición]].<ref name="dlc1914"/> ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;5 {{csem|teatro}}: Lo que en la [[representación]] [[escénico|escénica]] dice cualquiera de los personajes de la obra representada, suponiendo que no le oyen los demás.<ref name="dlc1914"/> ;6 {{csem|teatro}}: Lo que en la obra dramática debe relatarse de este modo.<ref name="dlc1914"/> ;7: Espacio o hueco que, así en lo impreso como en lo escrito, se deja entre dos palabras.<ref name="dlc1914"/> {{ámbito|Aragón}} ==== {{adjetivo|es|indeclinable}} ==== ;8: {{plm|especial}}, [[único]], [[distinto]].<ref>{{DRAE}}</ref> ==== Véase también ==== {{w}} ==== Traducciones ==== {{trad-arriba}} {{t|de|a1=1|t1=woanders|t2=anderswo}} {{trad-abajo}} === Forma flexiva === ==== Forma verbal ==== ;1: {{forma verbo|apartar|p=1s|t=presente|m=subjuntivo}}. ;2: {{forma verbo|apartar|p=3s|t=presente|m=subjuntivo}}. ;3: {{forma verbo|apartar|p=2su|t=imperativo}}. == {{lengua|osp}} == {{pron-graf|leng=osp}} === Etimología === {{etimología|leng=osp|la|ad|a|la|partem|parte, lado}}. ==== {{adverbio de lugar|osp}} ==== ;1: {{plm}}. ==== {{adverbio de modo|osp}} ==== ;2: {{plm}}. ==Referencias y notas== <references /> 1pyckddj55r1sudhk8ftaac96uxh05k Wikcionario:Café/Aviso 4 118849 5823317 5068298 2025-07-02T16:20:01Z Raos10 93688 Se agregaron variables CSS para que se adapte correctamente al modo oscuro 5823317 wikitext text/x-wiki <div style="clear: both;"></div> {| style="margin: 0 2em 0 2em;text-align: left; background-color: var(--background-color-backdrop-light, rgba(255,255,255,0.65)); color: var(--color-base, #202122); border:1px solid var(--border-color-content-added, #a3d3ff); " width="90%" |- style="background-color: var(--background-color-success-subtle, #dff2eb); color: var(--color-base, #202122); border:1px solid #006400; font-size:150%; text-align: center;" ! <strong>El Café de ''Wikcionario''</strong> |- | [[Archivo:Cup-o-coffee-simple.svg|150px|sinmarco|centro|enlace=]] |- style="font-size:115%; text-align: center;" | Esta página es para todo tipo de conversaciones y preguntas '''respecto a ''Wikcionario en español''. |- | Antes de participar, ten en cuenta: *Para presentar preguntas sobre alguna entrada en particular, ve a '''[[Wikcionario:Consultas|Consultas]]'''. Para solicitar la creación de una entrada, visita '''[[Wikcionario:Solicitudes|Solicitudes]]'''. Si buscas donde colaborar, aquí tienes un listado de '''[[:Categoría:Wikcionario:Esbozo|términos que necesitan ser mejorados]]'''. *Las conversaciones inactivas (más de un mes sin ediciones) están en el '''[[Wikcionario:Café/Archivo|Archivo del café]]'''. *Por favor, después de editar, '''pon un comentario en el resumen''' (la síntesis del tema sobre el que aportas o comentas) para que se pueda ver en la página de [[Especial:CambiosRecientes|cambios recientes]]. ¡Gracias! |- style="text-align: center;" | <span class="plainlinks" style="font-size:120%; text-align: center;">'''{{Botón enlazable|url={{fullurl:Wikcionario:Café|action=edit&section=new&editintro=}}<span style="color:#ffffff;">|Para abrir un nuevo tema de conversación, pulsa aquí</span>|class=mw-ui-progressive}}''' |- | * '''Bots''': Las solicitudes para el permiso de [[m:bot|bot]] se harán en esta página. Este wiki usa la [[m:bot policy|política estándar de robots]] y permite tanto a los [[m:bot policy#Global bots|robots globales]] como la [[m:bot policy#Automatic approval|aprobación ''automática'' de ciertos tipos de robots]]. El resto de robots debe solicitar ser autorizado en esta página. Un [[Wikcionario:Burócratas|burócrata]] revisará y decidirá sobre la solicitud. :* '''Bots (English)''': Requests for the [[m:bot|bot]] flag should be made on this page. This wiki uses the [[m:bot policy|standard bot policy]], and allows [[m:bot policy#Global_bots|global bots]] and [[m:bot policy#Automatic_approval|''automatic'' approval of certain types of bots]]. Other bots should apply below. A local bureaucrat will review and decide upon your aplication. |} __NEWSECTIONLINK__ h2h3e253b7jjsn6z5qng0ydkxklxwkc creativo 0 127349 5823425 5710251 2025-07-03T02:42:21Z Tmagc 158167 /* {{lengua|it}} */ 5823425 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|crear|ivo}} === {{adjetivo|es}} === {{es.adj}} ;1: Que tiene la [[habilidad]] de [[crear]], o de [[estimular|estimula]] la [[creatividad]]. ;2: {{plm|original}}, [[expresivo]] o [[imaginativo]]. === Derivados === * [[creativamente]] === {{sustantivo masculino y femenino|es}} === {{es.sust|mf}} ;3: Persona encargada de [[concebir]] y [[diseñar]] una [[campaña]] [[publicitario|publicitaria]]. === Véase también === {{w}} === Traducciones === {{trad-arriba}} {{t|de|a1=1,2|t1=kreativ}} {{t|ca|a1=1,2|t1=creatiu}} {{t|he|a1=1|t1=יצירתי|tr=yetsīratí}} {{t|en|a1=1,2|t1=creative}} {{t|it|a1=1-3|t1=creativo}} {{trad-abajo}} == {{lengua|it}} == {{pron-graf|leng=it|fono=kreaˈtivo}} === Etimología === {{etimología|leng=it|sufijo|creare|ivo}} === {{adjetivo|it}} === {{it.adj}} ;1: Creativo. {{sinónimo|leng=it|originale}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;2 {{csem|ocupaciones|leng=it}}: Creativo. == Referencias y notas == <references /> b8txnh15js5vc3erd07oibn2lg07jk3 5823426 5823425 2025-07-03T02:47:45Z Tmagc 158167 /* {{lengua|it}} */ 5823426 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|crear|ivo}} === {{adjetivo|es}} === {{es.adj}} ;1: Que tiene la [[habilidad]] de [[crear]], o de [[estimular|estimula]] la [[creatividad]]. ;2: {{plm|original}}, [[expresivo]] o [[imaginativo]]. === Derivados === * [[creativamente]] === {{sustantivo masculino y femenino|es}} === {{es.sust|mf}} ;3: Persona encargada de [[concebir]] y [[diseñar]] una [[campaña]] [[publicitario|publicitaria]]. === Véase también === {{w}} === Traducciones === {{trad-arriba}} {{t|de|a1=1,2|t1=kreativ}} {{t|ca|a1=1,2|t1=creatiu}} {{t|he|a1=1|t1=יצירתי|tr=yetsīratí}} {{t|en|a1=1,2|t1=creative}} {{t|it|a1=1-3|t1=creativo}} {{trad-abajo}} == {{lengua|it}} == {{pron-graf|leng=it|fono=kreaˈtivo}} === Etimología === {{etimología|leng=it|sufijo|creare|ivo}} === {{adjetivo|it}} === {{it.adj}} ;1: {{plm}}. {{sinónimo|leng=it|originale}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;2 {{csem|ocupaciones|leng=it}}: {{plm}}. == Referencias y notas == <references /> 70wru16jmnw6fhvzc2hokvxyoar02iu creativi 0 127363 5823423 4369268 2025-07-03T02:41:00Z Tmagc 158167 5823423 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma adjetiva ==== ;1: {{forma adjetivo|leng=it|creativo|masculino|plural}}. == Referencias y notas == <references /> qlv9l1trfbe6cnlwwk0umd2ccbzg3k0 Plantilla:encabezado proyecto 10 129199 5823322 5629489 2025-07-02T16:33:32Z Raos10 93688 Se agregaron variables CSS para que se adapte correctamente al modo oscuro 5823322 wikitext text/x-wiki {| style="width:100%; margin-bottom:2px; border: 1px solid #006400; background-color: var(--background-color-success-subtle, #dff2eb); color: var(--color-base, #202122); text-align:center;" |- | style="width:25%; text-align:left; font-size:0.9em;" | {{{izq|}}} | style="width:50%;" | '''{{{tít|{{SUBPAGENAME}}}}}''' {{{sección|}}} | style="width:25%; text-align:right;font-size:0.9em;" | {{{der|}}} |} {| style="width:100%; background-color: var(--background-color-backdrop-light, rgba(255,255,255,0.65));" |- | {{#if:{{{atajo|}}}|<div style="padding-left:10px">{{atajo|{{{atajo}}}}}</div>|}}{{{notas|}}} |}<noinclude>[[Categoría:Plantillas de organización interna]]</noinclude> pqiyskbaw3vk1fvl9yqu3bn5v1re3yq letra mayúscula 0 134777 5823499 5691364 2025-07-03T04:43:04Z Tmagc 158167 5823499 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === {{locución|es|sustantiva|femenina}} === {{es.sust|cop=s}} ;1: {{plm|letra}} que se escribe más grande y generalmente con diferente forma que la [[minúscula]]. {{uso}} se emplea como inicial de [[nombre propio|nombres propios]], después de [[punto]] y en otros casos. {{sinónimo|mayúscula}} === Véase también === {{w|Mayúscula}} * "[http://lema.rae.es/dpd/srv/search?id=BapzSnotjD6n0vZiTp Mayúsculas]" en ''[http://lema.rae.es/dpd/ Diccionario panhispánico de dudas]'' (Real Academia Española) === Traducciones === {{trad-arriba}} {{t|en|t1=capital letter|t2=uppercase}} {{trad-abajo}} == Referencias y notas == <references /> e4fznhkn8yzrydu59b71lueo44pcmed 5823500 5823499 2025-07-03T04:43:18Z Tmagc 158167 5823500 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === {{locución|es|sustantiva|femenina}} === {{es.sust|cop=s}} ;1: {{plm|letra}} que se escribe más grande y generalmente con diferente forma que la [[minúscula]]. Se emplea como inicial de [[nombre propio|nombres propios]], después de [[punto]] y en otros casos. {{sinónimo|mayúscula}} === Véase también === {{w|Mayúscula}} * "[http://lema.rae.es/dpd/srv/search?id=BapzSnotjD6n0vZiTp Mayúsculas]" en ''[http://lema.rae.es/dpd/ Diccionario panhispánico de dudas]'' (Real Academia Española) === Traducciones === {{trad-arriba}} {{t|en|t1=capital letter|t2=uppercase}} {{trad-abajo}} == Referencias y notas == <references /> 3mbsn6600ohp50eapk4v1zs5hsbe00p letras mayúsculas 0 134778 5823498 4527191 2025-07-03T04:42:30Z Tmagc 158167 5823498 wikitext text/x-wiki {{destruir}} == {{lengua|es}} == {{pron-graf|fone=ˈle.tɾas maˈʝus.ku.las}} === Forma de locución sustantiva femenina === ;1: {{f.s.p|letra mayúscula}}. === Véase también === * {{wikipedia}} == Referencias y notas == <references /> 20u62r7aqahh7g2ian52xs5m8whzw0q alunno 0 135417 5823394 4283030 2025-07-03T02:05:26Z Tmagc 158167 5823394 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|la|alumnum|sig=no}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1: {{plm|alumno}}. == Referencias y notas == <references /> lnqz6frxoo96shu93rd1xspew2dezvi alunna 0 135418 5823393 4283027 2025-07-03T02:04:42Z Tmagc 158167 5823393 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|alunno|femenino|singular}}. == Referencias y notas == <references /> 9f0tmhlgv7uyu3f97ktg5zs3mvu0v4y alunni 0 135424 5823400 4283029 2025-07-03T02:19:27Z Tmagc 158167 5823400 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it|fone=aˈlu:n.ni}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|alunno|masculino|plural}}. == Referencias y notas == <references /> o8txj0bxjp8a36z6ga02r90k264gxqg alunne 0 135425 5823401 4283028 2025-07-03T02:19:42Z Tmagc 158167 5823401 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it|fone=aˈlu:n.ne}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|alunno|femenino|plural}}. == Referencias y notas == <references /> 0hhmiarqjmke06u0bdbik7b84txue3h intruso 0 158966 5823433 5765267 2025-07-03T02:57:41Z Tmagc 158167 /* {{lengua|it}} */ 5823433 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf|fone=in̪ˈtɾu.so}} === Etimología === {{etimología|la|intrusus|sig=no}}, compuesto de {{l+|la|in-|glosa=adentro}} y {{l+|la|trusus}}, [[participio]] [[pasivo]] de {{l+|la|trudere|tr=trudĕre|glosa=empujar}} === {{adjetivo|es}} === {{es.adj}} ;1: Que se [[introducir|introduce]] o se ha [[meter|metido]] secretamente o sin [[derecho]]. {{uso|utcs}} ;2: Que [[intervenir|interviene]] en [[asunto]]s que no son de su [[incumbencia]]. {{uso|utcs}} {{sinónimo|entremetido|entrometido}} ;3: Que [[interactuar|interactúa]] con personas que no son de su misma [[clase]] o [[condición]]. {{uso|utcs}} ;4: Que se ha [[apropiar|apropiado]] de algo sin tener [[derecho]] a ello. {{uso|utcs}} {{relacionado|intrusarse|intrusión}} === Traducciones === {{trad-arriba}} {{t|de|a1=1-4|c1=s|t1=Eindringling|g1=m}} {{t|fr|a1=1-4|t1=intrus}} {{t|en|a1=1-4|c1=a|t1=intrusive|c2=s|t2=intruder}} {{t|it|a1=1-4|c1=s|t1=intruso}} {{t|pt|a1=1-4|t1=intruso}} {{trad-abajo}} == {{lengua|it}} == {{pron-graf|leng=it|fono=inˈtruzo}} === Etimología === {{etimología|la|intrusus|sig=no|leng=it}}, compuesto de {{l+|la|in-|glosa=adentro}} y {{l+|la|trusus}}, [[participio]] [[pasivo]] de {{l+|la|trudere|tr=trudĕre|glosa=empujar}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1: {{plm|intruso}}. == {{lengua|pt}} == {{pron-graf|leng=pt|fone=ĩˈtru.zu}} === Etimología === {{etimología|la|intrusus|sig=no|leng=pt}}, compuesto de {{l+|la|in-|glosa=adentro}} y {{l+|la|trusus}}, [[participio]] [[pasivo]] de {{l+|la|trudere|tr=trudĕre|glosa=empujar}} === {{adjetivo|pt}} === {{inflect.pt.adj.reg|intrus}} ;1: {{plm|intruso}}. {{uso|leng=pt|utcs}} == Referencias y notas == <references /> mo0t55cf0x2oqv42x515m6dv8iunc2j intrusa 0 158968 5823431 4516089 2025-07-03T02:55:57Z Tmagc 158167 5823431 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf|fone=in̪ˈtɾu.sa}} === Forma adjetiva y sustantiva === ;1: {{forma adjetivo|leng=es|intruso|femenino|singular}}. == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it}}. === Forma adjetiva y sustantiva === ;1: {{forma adjetivo|leng=it|intruso|femenino|singular}}. == {{lengua|pt}} == {{pron-graf|leng=pt}} === Forma adjetiva y sustantiva === ;1: {{forma adjetivo|leng=pt|intruso|femenino|singular}}. == Referencias y notas == <references /> 7enho5pm2cq08pk9kc7m4f1f9z7lmzv 5823432 5823431 2025-07-03T02:56:36Z Tmagc 158167 5823432 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf|fone=in̪ˈtɾu.sa}} === Forma adjetiva y sustantiva === ;1: {{forma adjetivo|leng=es|intruso|femenino|singular}}. == {{lengua|it}} == {{pron-graf|leng=it}} === Forma adjetiva y sustantiva === ;1: {{forma adjetivo|leng=it|intruso|femenino|singular}}. == {{lengua|pt}} == {{pron-graf|leng=pt}} === Forma adjetiva y sustantiva === ;1: {{forma adjetivo|leng=pt|intruso|femenino|singular}}. == Referencias y notas == <references /> 1shlvvj6slascyw1e7aafexcxhm041d artigiano 0 159846 5823480 4303931 2025-07-03T03:57:37Z TMCbot 164594 . 5823480 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1 {{csem|ocupaciones|oficios|leng=it}}: {{plm|artesano}}{{-sub|1}}. === {{adjetivo|it}} === {{it.adj}} ;2: {{plm|artesano}}{{-sub|2-3}}, [[artesanal]]. {{sinónimos|leng=it|artigianale}}. {{antónimos|leng=it|industriale}}. === Información adicional === {{derivad|leng=it|arte|artista|artistico|artisticamente|artigiano|artigianale|artigianalmente|artigianato}}. == Referencias y notas == <references /> pqatsf044j69f4bahfuc8mljhijcrd9 bizantino 0 160164 5823402 5754071 2025-07-03T02:21:10Z Tmagc 158167 /* {{lengua|it}} */ 5823402 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología}} === {{adjetivo|es}} === {{es.adj}} ;1 {{csem|historia}}: {{gentilicio1|[[Bizancio]]}}. {{uso|utcs}} ;2 {{csem|historia}}: {{gentilicio1|el antiguo [[Imperio Bizantino]]}}. {{uso|utcs}} ;3: Dícese de las discusiones [[baldío|baldías]], [[intempestivo|intempestivas]], o demasiado [[sutil]]es.<ref name="drae1925">{{DLE1925}}</ref> === Locuciones === {{trad-arriba|Locuciones con «bizantino»}} * [[discusión bizantina]] {{trad-abajo}} === Véase también === {{w|Imperio Bizantino}} {{w|Bizancio}} === Traducciones === {{trad-arriba}} {{t|gl|t1=bizantino}} {{t|en|t1=Byzantine}} {{t|it|t1=bizantino}} {{trad-abajo}} == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it}} === {{adjetivo|it}} === {{it.adj}} ;1 {{csem|historia|leng=it}}: {{plm|bizantino}}. {{gentilicio|Bizancio|leng=it}}. === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;2 {{csem|historia|leng=it}}: {{plm|bizantino}}. == Referencias y notas == <references /> fwn6d06615fww3ly4z1bpm1bzfrznzr giocatore 0 161917 5823456 4487824 2025-07-03T03:57:01Z TMCbot 164594 . 5823456 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1: {{plm|jugador}}. {{uso|leng=it|utca}}. == Referencias y notas == <references /> a72bfdlli8df4ymzmeqypswahbyu7z2 giocatrice 0 161919 5823479 4487825 2025-07-03T03:57:35Z TMCbot 164594 . 5823479 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|giocatore|femenino|singular}}. == Referencias y notas == <references /> 6j76kcowoic8ngcjnz3594mp7pf4dmg cantautore 0 162170 5823477 4333372 2025-07-03T03:57:33Z TMCbot 164594 . 5823477 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|compuesto|cantare|autore|}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1: {{plm|cantautor}}. == Referencias y notas == <references /> 6x74wknmjlhmruvd8x1k2odvcdaylq1 cantautrice 0 162171 5823474 4333375 2025-07-03T03:57:28Z TMCbot 164594 . 5823474 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|cantautore|femenino|singular}}. == Referencias y notas == <references /> i9409j7neq97q6q3jt50e4cnkx71glu cantautrici 0 162172 5823484 4333376 2025-07-03T04:08:27Z Tmagc 158167 5823484 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|cantautore|masculino|plural}}. == Referencias y notas == <references /> tm5z0obm4cvm67mr3f6dm6skvts8ivc 5823485 5823484 2025-07-03T04:08:38Z Tmagc 158167 5823485 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|cantautore|femenino|plural}}. == Referencias y notas == <references /> 1b9g8lrhizvnsu0rgxwvsgs1kk00c81 cantautori 0 162173 5823486 4333374 2025-07-03T04:08:48Z Tmagc 158167 5823486 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|cantautore|masculino|plural}}. == Referencias y notas == <references /> tm5z0obm4cvm67mr3f6dm6skvts8ivc autrice 0 162174 5823461 5089627 2025-07-03T03:57:10Z TMCbot 164594 . 5823461 wikitext text/x-wiki == {{lengua|fr}} == {{pron-graf|leng=fr|o.tʁis}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=fr|auteur|femenino|singular}}. == {{lengua|it}} == {{pron-graf|leng=it|auˈtriː.t͡ʃe}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|autore|femenino|singular}}. == Referencias y notas == <references /> du1jg1frkxkq1x3fv9ljff3lwe1t6dg poetessa 0 162177 5823481 4579462 2025-07-03T03:57:39Z TMCbot 164594 . 5823481 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|poeta|femenino|singular}}. == Referencias y notas == <references /> i0kpksf5v1jtkimo61p13zpisw1ljuz scrittore 0 162181 5823476 4631275 2025-07-03T03:57:31Z TMCbot 164594 . 5823476 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1 {{csem|profesiones|leng=it}}: {{plm|escritor}}. {{hipónimo|leng=it|poeta|poetessa}}. == Referencias y notas == <references /> 41zwkg7llg2pdrl21suezftrn8mxvhy scrittrice 0 162182 5823462 4631277 2025-07-03T03:57:11Z TMCbot 164594 . 5823462 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|scrittore|femenino|singular}}. == Referencias y notas == <references /> m7hodrt6hlq9a355brrq2up62dqa0qf scrittori 0 162183 5823482 4631276 2025-07-03T04:07:39Z Tmagc 158167 5823482 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|scrittore|masculino|plural}}. == Referencias y notas == <references /> 5iw5tarkcf6xv2xwl6tom4mbzinjws3 scrittrici 0 162184 5823483 4631278 2025-07-03T04:07:57Z Tmagc 158167 5823483 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|scrittore|femenino|plural}}. == Referencias y notas == <references /> om13r7ar22d390ckkdvyzxn5gekyt66 cugina 0 162463 5823467 5657377 2025-07-03T03:57:18Z TMCbot 164594 . 5823467 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|cugino|femenino|singular}}. == Referencias y notas == <references /> aclpglwese30pi3kjfx7ixva0shgr2z cuoco 0 162926 5823466 4373604 2025-07-03T03:57:16Z TMCbot 164594 . 5823466 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it}} === {{adjetivo|it}} === {{it.adj}} ;1: {{plm|cocinero}}{{-sub|1}}. === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;2 {{csem|ocupaciones|profesiones|oficios|leng=it}}: {{plm|cocinero}}{{-sub|3}}. == Referencias y notas == <references /> 9pesuqqo8nbs9r24y3gyaac5vqaf7qa dottore 0 163155 5823460 4422386 2025-07-03T03:57:08Z TMCbot 164594 . 5823460 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it}} === {{sustantivo masculino y femenino|it}} === {{it.sust|irreg|dottori|dottoressa|dottoresse}} ;1: {{plm|doctor}}{{-sub|1}}. {{sinónimos|laureato}}. ;2 {{csem|profesiones|ocupaciones|leng=it}}: {{plm|doctor}}{{-sub|2}}, [[médico]]. == Referencias y notas == <references /> l2tf48mn83cmhdp7b451nkxbx26nz7u arbitro 0 163156 5823478 5652123 2025-07-03T03:57:34Z TMCbot 164594 . 5823478 wikitext text/x-wiki {{desambiguación|árbitro|arbitró}} == {{lengua|es}} == {{pron-graf|acentuación=grave|división=ar - bi - tro|fone=aɾˈβi.tɾo|longitud_silábica=3|número_letras=7}} === Forma verbal === ;1: {{forma verbo|arbitrar|m=indicativo|p=1s|t=presente}}. == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it}}. === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1 {{csem|leng=it|deporte|ocupaciones}}: {{plm|árbitro}}, {{l|es|réferi}}. == Referencias y notas == <references /> t4vzj4qx45wsrzxyyh34eldufoxz75w cacciatrice 0 163597 5823465 4329598 2025-07-03T03:57:15Z TMCbot 164594 . 5823465 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it|fono=kattʃaˈtri.tʃe}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|cacciatore|femenino|singular}}. == Referencias y notas == <references /> a6qxturmutbtprpkkkm3cbq5yqogvvb cacciatore 0 163598 5823473 4329597 2025-07-03T03:57:27Z TMCbot 164594 . 5823473 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1 {{csem|ocupaciones|leng=it}}: {{plm|cazador}}{{-sub|1,2}}. == Referencias y notas == <references /> 3v0ss0jxihok3d7lpoc9g4j06n37doc viaggiatore 0 163821 5823475 4675366 2025-07-03T03:57:30Z TMCbot 164594 . 5823475 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|sufijo|viaggiare|tore}} === {{adjetivo|it}} === {{it.adj}} ;1: {{plm|viajero}}{{-sub|1}}. {{uso|leng=it|utcs}}. === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;2: {{plm|viajero}}{{-sub|2}}, [[viajante]]. == Referencias y notas == <references /> cohlqq05wytqzkpwgkdgo3dkcubncd7 ragazzo 0 164622 5823469 5487619 2025-07-03T03:57:20Z TMCbot 164594 . 5823469 wikitext text/x-wiki {{desambiguación|Ragazzo}} == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|la-vul|*ragatius}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1: {{plm|chico}}{{-sub|1,2}}, [[muchacho]], [[cabro]]. {{sinónimos|leng=it|fanciullo}}. ;2: {{plm|novio}}{{-sub|3}}, [[pololo]]{{-sub|1}}. {{sinónimos|leng=it|amoroso}}. == Referencias y notas == <references /> eroxabliynx18z9uq06rdvs42701bkl eretico 0 165085 5823363 4452253 2025-07-02T23:29:23Z Tmagc 158167 5823363 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it}} === {{sustantivo masculino y femenino|it}} === {{inflect.it.adj.che|eretic}} ;1: {{plm|hereje}}. === {{adjetivo|it}} === {{inflect.it.adj.che|eretic}} ;2: {{plm|herético}}. === Véase también === {{w|leng=it}} == Referencias y notas == <references /> hfkm8ob1ho7rlpch0v3nhrqbr4wuej5 5823430 5823363 2025-07-03T02:54:48Z Tmagc 158167 5823430 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1: {{plm|hereje}}. === {{adjetivo|it}} === {{it.adj}} ;2: {{plm|herético}}. === Véase también === {{w|leng=it}} == Referencias y notas == <references /> grfe6cxy638308wyqcxlq3widuqifox eretica 0 165086 5823362 5422524 2025-07-02T23:28:55Z Tmagc 158167 5823362 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma adjetiva ==== ;1: {{forma adjetivo|leng=it|eretico|femenino}}. == Referencias y notas == <references /> 9dfawzdc30t5xgnygs7onteisvy1koa im- 0 166128 5823321 5427613 2025-07-02T16:24:45Z Raos10 93688 etimología 2 -> etimología 5823321 wikitext text/x-wiki {{desambiguación|Im|IM|I'm|im|-im|'im|.im|ìm|ỉm|ím|-ım}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|véase|in-}} en sus varias etimologías. ==== {{prefijo|es}} ==== ;1: {{variante|in-}} (en sus diferentes acepciones y etimologías). {{uso|se emplea antes de las letras "eme"|"be"}} {{ejemplo|[[imparable]], [[imbricar]].}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == {{lengua|mat}} == {{pron-graf|leng=mat}} === Etimología 1 === {{etimología|leng=mat}}. ==== {{artículo|mat}} ==== ;1 : {{plm|el}}, la, las, los. == Referencias y notas == <references /> jy4faiij4rcyu5qdwul761fooygcegm marittimo 0 166307 5823436 5460774 2025-07-03T02:59:26Z Tmagc 158167 5823436 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|la|maritimus|leng=it}}. ==== {{adjetivo|it}} ==== {{it.adj}} ;1: {{plm|marítimo}} (relativo al [[mar]]). {{relacionado|leng=it|mare|marinaro|marino}} {{ejemplo|il legittimo affidamento trova un limite implicito nel persistente potere dell'Amministrazione di regolare l'uso del territorio marittimo e costiero.|trad=La legítima custodia encuentra un límite implícito en el persistente poder la Administración para regular el uso del territorio marítimo y costero.}} ==== {{sustantivo masculino y femenino|it}} ==== {{it.sust|mf}} ;2 {{csem|ocupaciones|leng=it}}: {{plm|marinero}}, [[marino]] (hombre que [[dedicarse|se dedica]] a la [[náutica]]). {{relacionado|leng=it|marinaio}} ==== Véase también ==== {{w|leng=it|mare}} == Referencias y notas == <references /> egnc3tfrl2b9gdf0jg8208lp9d3yhts marittima 0 166308 5823434 5422585 2025-07-03T02:58:22Z Tmagc 158167 5823434 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma adjetiva ==== ;1: {{forma adjetivo|leng=it|marittimo|femenino|singular}}. == Referencias y notas == <references /> 1zo1ri9yyuo50i7b5bbz9yh5lmnghjb marittimi 0 166309 5823443 4539064 2025-07-03T03:04:46Z Tmagc 158167 5823443 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma adjetiva ==== ;1: {{forma adjetivo|leng=it|marittimo|masculino|plural}}. == Referencias y notas == <references /> fz70r46lpqgvg333p3j9t0fv5wm8rjx marittime 0 166310 5823441 4539063 2025-07-03T03:04:22Z Tmagc 158167 5823441 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma adjetiva ==== ;1: {{forma adjetivo|leng=it|marittime|femenino|plural}}. == Referencias y notas == <references /> 4cu7hvgwo1spq0l6lv9mdz6dp06p6gf 5823442 5823441 2025-07-03T03:04:31Z Tmagc 158167 5823442 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma adjetiva ==== ;1: {{forma adjetivo|leng=it|marittimo|femenino|plural}}. == Referencias y notas == <references /> 64v6k23ekeyt76mctaywuetrbh7sdvw ragazza 0 167096 5823458 4595929 2025-07-03T03:57:05Z TMCbot 164594 . 5823458 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|ragazzo|femenino|singular}}. == Referencias y notas == <references /> 4pdjd7aii0130mtvvqagf5vyuzvx67p fanciulla 0 167097 5823455 4472298 2025-07-03T03:57:00Z TMCbot 164594 . 5823455 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|fanciullo|femenino|singular}}. == Referencias y notas == <references /> bc1pq66jndciyle8ofd7vkjpp0bkj3s cachifa 0 167179 5823340 5734735 2025-07-02T21:40:53Z 77.227.201.161 /* {{sustantivo femenino|es}} */ 5823340 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología 1 === {{etimología}}. Se sospecha su origen al anglicismo procedente de la contracción en inglés «K-chief», de «Kitchen chief», lo que se traduce a «jefe de cocina» en español. ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1: [[empleado|Empleada]] del [[servicio]] [[doméstico]]. {{uso|popular}} {{ámbito|Venezuela}} {{sinónimo|chacha|nota1=México|doméstica|mucama|sirvienta}} {{ejemplo|"La ''cachifa'' para los venezolanos es una referencia hacia el personal de servicio domestico de sexo femenino.}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> 2giewspmim6d5j9v5j21w2peoy6y118 psicologo 0 168928 5823452 4591252 2025-07-03T03:56:56Z TMCbot 164594 . 5823452 wikitext text/x-wiki {{desambiguación|psicólogo}} == {{lengua|it}} == {{pron-graf|leng=it|ayuda=psicòlogo}} === Etimología === {{etimología|leng=it|confijo|psico|logo}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1 {{csem|ocupaciones|profesiones|medicina|leng=it}}: {{plm|psicólogo}}, [[sicólogo]]. === Véase también === {{w|leng=it|psicologia}} == Referencias y notas == <references /> 0oeqre0l1vii7jsbz0xb7s2jsr215o4 psicologa 0 168934 5823459 4591245 2025-07-03T03:57:07Z TMCbot 164594 . 5823459 wikitext text/x-wiki {{desambiguación|psicóloga}} == {{lengua|it}} == {{pron-graf|leng=it|ayuda=psicòloga}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|psicologo|femenino|singular}}. == Referencias y notas == <references /> gerbchf1k9sgnixgid652vdanqhvcff spacciatore 0 168960 5823447 4643193 2025-07-03T03:13:59Z Tmagc 158167 5823447 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|sufijo|spacciare|tore}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1 {{csem|ocupaciones|leng=it}}: {{plm|camello}}{{-sub|3}}, [[puntero]]{{-sub|2}}, [[traficante]], [[vendedor]] de [[droga]]s. ;2: {{plm|desinformador}} (que difunde noticias falsas). {{uso|leng=it|coloquial|figurado}} === Información adicional === {{derivad|leng=it|spacciare|spacciatore|spaccio|spacciarsi}}. == Referencias y notas == <references /> 3y6b7po22a3pp4ha45pif2j64y3s0sk Usuario discusión:Adelpine 3 180922 5823323 5819329 2025-07-02T18:13:49Z Tmagc 158167 Sección nueva: /* Cambios en pron-graf */ 5823323 wikitext text/x-wiki <div style="padding:10px; font-size:101%; background-color:#F5FFFF; border: 1px dotted teal;" > Hola, Adelpine. Te damos la [[Wikcionario:Bienvenido, nuevo visitante|bienvenida a ''Wikcionario'']]. <small style="padding-left:150px">[[Wikcionario:Embajada|If you don't speak Spanish, please visit our Embassy]]</small> Gracias por participar en el proyecto. Puedes encontrar algunas guías útiles aquí: :<small>&#x25B6;</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; :<small>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Wikcionario:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> Los manuales de '''[[Wikcionario:Estructura|estructura]]''', y de '''[[Wikcionario:Estilo|estilo]]''' son guías esenciales para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. {| | Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Wikcionario:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(&#126;&#126;&#126;&#126;)</nowiki>, el cual se consigue con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente de la botonera que hay en la parte superior de la caja de edición. || [[Archivo:Signature_button_vector.png|right|Para firmar usa el botón indicado|link=]] |} Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable. Saludos muy cordiales. </div> — [[Usuario:Edgefield|Edgefield]] ([[Usuario discusión:Edgefield|discusión]]) 17:56 9 jul 2013 (UTC). == Pronunciaciones == Es mejor dejar todas las pronunciaciones, sus notas y los audios en [https://es.wiktionary.org/w/index.php?title=together&type=revision&diff=4957534&oldid=4957509 una sola plantilla] y es mejor {{ep|pron-graf}} que {{ep|pronunciación}} porque es mucho más versátil y es la que ahora se utiliza sistemáticamente. Las plantillas {{ep|pronunciación}} van siendo sustituidas poco a poco. Saludos y muchas gracias por tus aportaciones. --[[Especial:Contribuciones/37.11.121.244|37.11.121.244]] ([[Usuario discusión:37.11.121.244|discusión]]) 23:12 20 oct 2020 (UTC) : O, mejor aún, [https://es.wiktionary.org/w/index.php?title=together&type=revision&diff=4957656&oldid=4957534 usando '''pron=''', '''2pron=''', etc en vez de '''fnota=''', '''fnota2='''...] Saludos. --[[Especial:Contribuciones/37.11.121.244|37.11.121.244]] ([[Usuario discusión:37.11.121.244|discusión]]) 11:39 21 oct 2020 (UTC) == Lexicographically canonical forms == "[https://es.wiktionary.org/w/index.php?title=distances&type=revision&diff=5010001&oldid=5009956 Distances]" should be labelled as a form instead a (lexicographically canonical) noun (or verb). Non-canonical lemmas shouldn't keep an etymology as those are currently located in the canonical terms; the only exception happening on semanticized terms (v.g. "building" is both a non-canonical form, a verbal form, and a canonical form, "a noun"). Regards. --[[Especial:Contribuciones/37.11.122.76|37.11.122.76]] ([[Usuario discusión:37.11.122.76|discusión]]) 22:25 6 jul 2021 (UTC) == Saludos == Hola, como eres un usuario frecuente, me gustaria que nos expresaras tu voto u opinión [[WN:CA#Candidatura de Cvmontuy (2022)|aquí]], cualquiera que sea tu preferencia es y sera respetada y también bienvenida, saludos y gracias, [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 22:57 23 oct 2022 (UTC) == Cambios en pron-graf == Hola, hay un asunto que siempre quedó pendiente por hacer en la plantilla {{ep|pron-graf}}, o al menos lo es para mí. Como verás, actualmente el doble índice se maneja con la notación AfoneB, que corresponde a la pronunciación A, subvariante B. Este sistema es muy heterodoxo, incosistente y difícil de inferir para usuarios que no usen la plantilla frecuentemente. Explico algunos problemas que tiene: * Todas las plantillas que tienen parámetros indexados son de la forma pA. Es decir, la forma de "avanzar" al siguiente índice sería pA+1, pero en esta plantilla la forma de "avanzar" en la dirección natural es A+1foneB, con el índice antepuesto en vez de pospuesto. Muchas veces incluso yo me he confundido e hice AfoneB+1, sobre todo al agregar pronunciaciones sin subvariantes, que es el caso más común, lo más lógico para quien no está acostumbrado es fone1, fone2, fone3; sin embargo lo correcto es 1fone, 2fone, 3fone. * En línea con lo anterior, es inconsistente incluso dentro de la misma plantilla, ya que los parámetros que no son listas dobles tienen el índice al final, por ejemplo <nowiki>h</nowiki> (homófono) sería h1, h2, etc. pero fone es 1fone, 2fone, 3fone; lo que la vuelve aún más esotérica a la plantilla para el resto de usuarios. * Por último, los parámetros posicionales concuerdan con <nowiki>|fone</nowiki> (así era antes de que haya llegado al sitio), pero el problema es que solo se puede avanzar posicionalmente por una dimensión, entonces si yo escribo tres parámetros posicionales, cómo debería tomarlo? <nowiki>|1fone</nowiki>, <nowiki>|2fone</nowiki>, <nowiki>|3fone</nowiki> o <nowiki>|fone1</nowiki>, <nowiki>|fone2</nowiki>, <nowiki>|fone3</nowiki>? Todo esto me hizo llegar a la conclusión de que, por el bien del sitio y de futuros usuarios, sería conveniente un cambio en la plantilla en lo que respecta a este sistema. En lo que pensé es en migrar los parámetros <nowiki>|fone</nowiki>, <nowiki>|fono</nowiki>, <nowiki>|fgraf</nowiki>, <nowiki>|fnota</nowiki>, <nowiki>|audio</nowiki>, <nowiki>|aunota</nowiki> a un formato de índice simple, en donde las subvariantes ahora se separarían preferentemente mediante punto y coma (;), aunque también podría ser con barras u otro símbolo conveniente. Por ejemplo, en [[withstand]] actualmente tenemos: <code><nowiki>{{pron-graf|leng=en |pron=Conservative Received Pronunciation|1fono1=wɪðˈstænd|1fono2=wɪθˈstænd |2pron=General American, Standard Canadian|2fono=wɪðˈstænd|2fone2=wɪðˈstɛənd|2fnota2=/æ/ raising|2audio2=en-us-withstand.ogg|2aunota2=California|2audio3=LL-Q1860 (eng)-Wodencafe-withstand.wav|2aunota3=Texas|2fone4=wɪðˈstɛːnd|2fnota4=/æ/ raising|2audio5=LL-Q1860 (eng)-Grendelkhan-withstand.wav|2aunota5=Connecticut|2fono6=wɪθˈstænd|2fone7=wɪθˈstɛənd|2fnota7=/æ/ raising|2audio7=LL-Q1860 (eng)-Semperosculto-withstand.wav|2aunota7=EE. UU.|2fone8=wɪθˈstɛːnd|2fnota8=/æ/ raising|2audio8=LL-Q1860 (eng)-Assorted-Interests-withstand.wav|2aunota8=Ciudad de Nueva York |3pron=Australia|3fono1=wɪðˈstænd|3fone2=wɪðˈsteːnd|3fnota2=/æ/ raising|3fono3=wɪθˈstænd|3fone4=wɪθˈsteːnd|3fnota4=/æ/ raising |ls=2 }}</nowiki></code> Y con la modificación pasaría a: <code><nowiki>{{pron-graf|leng=en |pron1=Conservative Received Pronunciation|fono1=wɪðˈstænd;wɪθˈstænd |pron2=General American, Standard Canadian|fono2=wɪðˈstænd;;;;;wɪθˈstænd|fone2=;wɪðˈstɛənd;;wɪðˈstɛːnd;;;wɪθˈstɛənd;wɪθˈstɛːnd|fnota2=;/æ/ raising;;/æ/ raising;;;/æ/ raising;/æ/ raising|audio2=;en-us-withstand.ogg;LL-Q1860 (eng)-Wodencafe-withstand.wav;;LL-Q1860 (eng)-Grendelkhan-withstand.wav;;LL-Q1860 (eng)-Semperosculto-withstand.wav;LL-Q1860 (eng)-Assorted-Interests-withstand.wav|aunota2=;California;Texas;;Connecticut;;EE. UU.;Ciudad de Nueva York |pron3=Australia|fono3=wɪðˈstænd;;wɪθˈstænd|fone3=;wɪðˈsteːnd;;wɪθˈsteːnd|fnota3=;/æ/ raising;;/æ/ raising |ls=2 }}</nowiki></code> Son aproximadamente 5000 las páginas afectadas. Me llevaría unos días, comenzaría marcando las plantillas que tengan el doble índice en alguno de los parámetros y las trasladaría a una plantilla temporal. Luego haría las modificaciones en pron-graf y finalmente fusionaría la plantilla temporal a pron-graf, con el formato modificado. Puedo hacerlo todo yo mismo y te avisaría cuando estén implementados los cambios. Quería conocer tu opinión ya que usás la plantilla frecuentemente. Al resto le va a dar más o menos igual, pero si alguien va a tener que cambiar sus hábitos serías vos, aparte de que la mayoría de las migraciones conciernen a ediciones tuyas. Cómo lo ves? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 18:13 2 jul 2025 (UTC) bunhxesw363eutmbpjw24u5o0b8tvq5 5823324 5823323 2025-07-02T18:16:24Z Tmagc 158167 /* Cambios en pron-graf */ 5823324 wikitext text/x-wiki <div style="padding:10px; font-size:101%; background-color:#F5FFFF; border: 1px dotted teal;" > Hola, Adelpine. Te damos la [[Wikcionario:Bienvenido, nuevo visitante|bienvenida a ''Wikcionario'']]. <small style="padding-left:150px">[[Wikcionario:Embajada|If you don't speak Spanish, please visit our Embassy]]</small> Gracias por participar en el proyecto. Puedes encontrar algunas guías útiles aquí: :<small>&#x25B6;</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; :<small>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Wikcionario:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> Los manuales de '''[[Wikcionario:Estructura|estructura]]''', y de '''[[Wikcionario:Estilo|estilo]]''' son guías esenciales para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. {| | Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Wikcionario:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(&#126;&#126;&#126;&#126;)</nowiki>, el cual se consigue con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente de la botonera que hay en la parte superior de la caja de edición. || [[Archivo:Signature_button_vector.png|right|Para firmar usa el botón indicado|link=]] |} Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable. Saludos muy cordiales. </div> — [[Usuario:Edgefield|Edgefield]] ([[Usuario discusión:Edgefield|discusión]]) 17:56 9 jul 2013 (UTC). == Pronunciaciones == Es mejor dejar todas las pronunciaciones, sus notas y los audios en [https://es.wiktionary.org/w/index.php?title=together&type=revision&diff=4957534&oldid=4957509 una sola plantilla] y es mejor {{ep|pron-graf}} que {{ep|pronunciación}} porque es mucho más versátil y es la que ahora se utiliza sistemáticamente. Las plantillas {{ep|pronunciación}} van siendo sustituidas poco a poco. Saludos y muchas gracias por tus aportaciones. --[[Especial:Contribuciones/37.11.121.244|37.11.121.244]] ([[Usuario discusión:37.11.121.244|discusión]]) 23:12 20 oct 2020 (UTC) : O, mejor aún, [https://es.wiktionary.org/w/index.php?title=together&type=revision&diff=4957656&oldid=4957534 usando '''pron=''', '''2pron=''', etc en vez de '''fnota=''', '''fnota2='''...] Saludos. --[[Especial:Contribuciones/37.11.121.244|37.11.121.244]] ([[Usuario discusión:37.11.121.244|discusión]]) 11:39 21 oct 2020 (UTC) == Lexicographically canonical forms == "[https://es.wiktionary.org/w/index.php?title=distances&type=revision&diff=5010001&oldid=5009956 Distances]" should be labelled as a form instead a (lexicographically canonical) noun (or verb). Non-canonical lemmas shouldn't keep an etymology as those are currently located in the canonical terms; the only exception happening on semanticized terms (v.g. "building" is both a non-canonical form, a verbal form, and a canonical form, "a noun"). Regards. --[[Especial:Contribuciones/37.11.122.76|37.11.122.76]] ([[Usuario discusión:37.11.122.76|discusión]]) 22:25 6 jul 2021 (UTC) == Saludos == Hola, como eres un usuario frecuente, me gustaria que nos expresaras tu voto u opinión [[WN:CA#Candidatura de Cvmontuy (2022)|aquí]], cualquiera que sea tu preferencia es y sera respetada y también bienvenida, saludos y gracias, [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 22:57 23 oct 2022 (UTC) == Cambios en pron-graf == Hola, hay un asunto que siempre quedó pendiente por hacer en la plantilla {{ep|pron-graf}}, o al menos lo es para mí. Como verás, actualmente el doble índice se maneja con la notación AfoneB, que corresponde a la pronunciación A, subvariante B. Este sistema es muy heterodoxo, incosistente y difícil de inferir para usuarios que no usen la plantilla frecuentemente. Explico algunos problemas que tiene: * Todas las plantillas que tienen parámetros indexados son de la forma pA. Es decir, la forma de "avanzar" al siguiente índice sería pA+1, pero en esta plantilla la forma de "avanzar" en la dirección natural es A+1foneB, con el índice antepuesto en vez de pospuesto. Muchas veces incluso yo me he confundido e hice AfoneB+1, sobre todo al agregar pronunciaciones sin subvariantes, que es el caso más común, lo más lógico para quien no está acostumbrado es fone1, fone2, fone3; sin embargo lo correcto es 1fone, 2fone, 3fone. * En línea con lo anterior, es inconsistente incluso dentro de la misma plantilla, ya que los parámetros que no son listas dobles tienen el índice al final, por ejemplo <nowiki>h</nowiki> (homófono) sería h1, h2, etc. pero fone es 1fone, 2fone, 3fone; lo que la vuelve aún más esotérica a la plantilla para el resto de usuarios. * Por último, los parámetros posicionales concuerdan con <nowiki>|fone</nowiki> (así era antes de que haya llegado al sitio), pero el problema es que solo se puede avanzar posicionalmente por una dimensión, entonces si yo escribo tres parámetros posicionales, digamos, <nowiki>{{pron-graf|1=x|2=y|3=z}}</nowiki> cómo debería tomarlo? <nowiki>|1fone=x</nowiki>, <nowiki>|2fone=y</nowiki>, <nowiki>|3fone=z</nowiki> o <nowiki>|fone1=x</nowiki>, <nowiki>|fone2=y</nowiki>, <nowiki>|fone3=z</nowiki>? Todo esto me hizo llegar a la conclusión de que, por el bien del sitio y de futuros usuarios, sería conveniente un cambio en la plantilla en lo que respecta a este sistema. En lo que pensé es en migrar los parámetros <nowiki>|fone</nowiki>, <nowiki>|fono</nowiki>, <nowiki>|fgraf</nowiki>, <nowiki>|fnota</nowiki>, <nowiki>|audio</nowiki>, <nowiki>|aunota</nowiki> a un formato de índice simple, en donde las subvariantes ahora se separarían preferentemente mediante punto y coma (;), aunque también podría ser con barras u otro símbolo conveniente. Por ejemplo, en [[withstand]] actualmente tenemos: <code><nowiki>{{pron-graf|leng=en |pron=Conservative Received Pronunciation|1fono1=wɪðˈstænd|1fono2=wɪθˈstænd |2pron=General American, Standard Canadian|2fono=wɪðˈstænd|2fone2=wɪðˈstɛənd|2fnota2=/æ/ raising|2audio2=en-us-withstand.ogg|2aunota2=California|2audio3=LL-Q1860 (eng)-Wodencafe-withstand.wav|2aunota3=Texas|2fone4=wɪðˈstɛːnd|2fnota4=/æ/ raising|2audio5=LL-Q1860 (eng)-Grendelkhan-withstand.wav|2aunota5=Connecticut|2fono6=wɪθˈstænd|2fone7=wɪθˈstɛənd|2fnota7=/æ/ raising|2audio7=LL-Q1860 (eng)-Semperosculto-withstand.wav|2aunota7=EE. UU.|2fone8=wɪθˈstɛːnd|2fnota8=/æ/ raising|2audio8=LL-Q1860 (eng)-Assorted-Interests-withstand.wav|2aunota8=Ciudad de Nueva York |3pron=Australia|3fono1=wɪðˈstænd|3fone2=wɪðˈsteːnd|3fnota2=/æ/ raising|3fono3=wɪθˈstænd|3fone4=wɪθˈsteːnd|3fnota4=/æ/ raising |ls=2 }}</nowiki></code> Y con la modificación pasaría a: <code><nowiki>{{pron-graf|leng=en |pron1=Conservative Received Pronunciation|fono1=wɪðˈstænd;wɪθˈstænd |pron2=General American, Standard Canadian|fono2=wɪðˈstænd;;;;;wɪθˈstænd|fone2=;wɪðˈstɛənd;;wɪðˈstɛːnd;;;wɪθˈstɛənd;wɪθˈstɛːnd|fnota2=;/æ/ raising;;/æ/ raising;;;/æ/ raising;/æ/ raising|audio2=;en-us-withstand.ogg;LL-Q1860 (eng)-Wodencafe-withstand.wav;;LL-Q1860 (eng)-Grendelkhan-withstand.wav;;LL-Q1860 (eng)-Semperosculto-withstand.wav;LL-Q1860 (eng)-Assorted-Interests-withstand.wav|aunota2=;California;Texas;;Connecticut;;EE. UU.;Ciudad de Nueva York |pron3=Australia|fono3=wɪðˈstænd;;wɪθˈstænd|fone3=;wɪðˈsteːnd;;wɪθˈsteːnd|fnota3=;/æ/ raising;;/æ/ raising |ls=2 }}</nowiki></code> Son aproximadamente 5000 las páginas afectadas. Me llevaría unos días, comenzaría marcando las plantillas que tengan el doble índice en alguno de los parámetros y las trasladaría a una plantilla temporal. Luego haría las modificaciones en pron-graf y finalmente fusionaría la plantilla temporal a pron-graf, con el formato modificado. Puedo hacerlo todo yo mismo y te avisaría cuando estén implementados los cambios. Quería conocer tu opinión ya que usás la plantilla frecuentemente. Al resto le va a dar más o menos igual, pero si alguien va a tener que cambiar sus hábitos serías vos, aparte de que la mayoría de las migraciones conciernen a ediciones tuyas. Cómo lo ves? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 18:13 2 jul 2025 (UTC) tlxs60amlvontmq5d1tw2rgtmv863kl 5823325 5823324 2025-07-02T18:17:48Z Tmagc 158167 /* Cambios en pron-graf */ 5823325 wikitext text/x-wiki <div style="padding:10px; font-size:101%; background-color:#F5FFFF; border: 1px dotted teal;" > Hola, Adelpine. Te damos la [[Wikcionario:Bienvenido, nuevo visitante|bienvenida a ''Wikcionario'']]. <small style="padding-left:150px">[[Wikcionario:Embajada|If you don't speak Spanish, please visit our Embassy]]</small> Gracias por participar en el proyecto. Puedes encontrar algunas guías útiles aquí: :<small>&#x25B6;</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; :<small>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Wikcionario:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> Los manuales de '''[[Wikcionario:Estructura|estructura]]''', y de '''[[Wikcionario:Estilo|estilo]]''' son guías esenciales para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. {| | Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Wikcionario:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(&#126;&#126;&#126;&#126;)</nowiki>, el cual se consigue con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente de la botonera que hay en la parte superior de la caja de edición. || [[Archivo:Signature_button_vector.png|right|Para firmar usa el botón indicado|link=]] |} Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable. Saludos muy cordiales. </div> — [[Usuario:Edgefield|Edgefield]] ([[Usuario discusión:Edgefield|discusión]]) 17:56 9 jul 2013 (UTC). == Pronunciaciones == Es mejor dejar todas las pronunciaciones, sus notas y los audios en [https://es.wiktionary.org/w/index.php?title=together&type=revision&diff=4957534&oldid=4957509 una sola plantilla] y es mejor {{ep|pron-graf}} que {{ep|pronunciación}} porque es mucho más versátil y es la que ahora se utiliza sistemáticamente. Las plantillas {{ep|pronunciación}} van siendo sustituidas poco a poco. Saludos y muchas gracias por tus aportaciones. --[[Especial:Contribuciones/37.11.121.244|37.11.121.244]] ([[Usuario discusión:37.11.121.244|discusión]]) 23:12 20 oct 2020 (UTC) : O, mejor aún, [https://es.wiktionary.org/w/index.php?title=together&type=revision&diff=4957656&oldid=4957534 usando '''pron=''', '''2pron=''', etc en vez de '''fnota=''', '''fnota2='''...] Saludos. --[[Especial:Contribuciones/37.11.121.244|37.11.121.244]] ([[Usuario discusión:37.11.121.244|discusión]]) 11:39 21 oct 2020 (UTC) == Lexicographically canonical forms == "[https://es.wiktionary.org/w/index.php?title=distances&type=revision&diff=5010001&oldid=5009956 Distances]" should be labelled as a form instead a (lexicographically canonical) noun (or verb). Non-canonical lemmas shouldn't keep an etymology as those are currently located in the canonical terms; the only exception happening on semanticized terms (v.g. "building" is both a non-canonical form, a verbal form, and a canonical form, "a noun"). Regards. --[[Especial:Contribuciones/37.11.122.76|37.11.122.76]] ([[Usuario discusión:37.11.122.76|discusión]]) 22:25 6 jul 2021 (UTC) == Saludos == Hola, como eres un usuario frecuente, me gustaria que nos expresaras tu voto u opinión [[WN:CA#Candidatura de Cvmontuy (2022)|aquí]], cualquiera que sea tu preferencia es y sera respetada y también bienvenida, saludos y gracias, [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 22:57 23 oct 2022 (UTC) == Cambios en pron-graf == Hola, hay un asunto que siempre quedó pendiente por hacer en la plantilla {{ep|pron-graf}}, o al menos lo es para mí. Como verás, actualmente el doble índice se maneja con la notación AfoneB, que corresponde a la pronunciación A, subvariante B. Este sistema es muy heterodoxo, incosistente y difícil de inferir para usuarios que no usen la plantilla frecuentemente. Explico algunos problemas que tiene: * Todas las plantillas que tienen parámetros indexados son de la forma pA. Es decir, la forma de "avanzar" al siguiente índice sería pA+1, pero en esta plantilla la forma de "avanzar" en la dirección natural es A+1foneB, con el índice antepuesto en vez de pospuesto. Muchas veces incluso yo me he confundido e hice AfoneB+1, sobre todo al agregar pronunciaciones sin subvariantes, que es el caso más común, lo más lógico para quien no está acostumbrado es fone1, fone2, fone3; sin embargo lo correcto es 1fone, 2fone, 3fone. * En línea con lo anterior, es inconsistente incluso dentro de la misma plantilla, ya que los parámetros que no son listas dobles tienen el índice al final, por ejemplo <nowiki>h</nowiki> (homófono) sería h1, h2, etc. pero fone es 1fone, 2fone, 3fone; lo que la vuelve aún más esotérica a la plantilla para el resto de usuarios. * Por último, los parámetros posicionales concuerdan con <nowiki>|fone</nowiki> (así era antes de que haya llegado al sitio), pero el problema es que solo se puede avanzar posicionalmente por una dimensión, entonces si yo escribo tres parámetros posicionales, digamos, <nowiki>{{pron-graf|1=x|2=y|3=z}}</nowiki> cómo debería tomarlo? <nowiki>|1fone=x</nowiki>, <nowiki>|2fone=y</nowiki>, <nowiki>|3fone=z</nowiki> o <nowiki>|fone1=x</nowiki>, <nowiki>|fone2=y</nowiki>, <nowiki>|fone3=z</nowiki>? Todo esto me hizo llegar a la conclusión de que, por el bien del sitio y de futuros usuarios, sería conveniente un cambio en la plantilla en lo que respecta a este sistema. En lo que pensé es en migrar los parámetros <nowiki>|fone</nowiki>, <nowiki>|fono</nowiki>, <nowiki>|fgraf</nowiki>, <nowiki>|fnota</nowiki>, <nowiki>|audio</nowiki>, <nowiki>|aunota</nowiki> a un formato de índice simple, en donde las subvariantes ahora se separarían preferentemente mediante punto y coma (;), aunque también podría ser con barras u otro símbolo conveniente. Por ejemplo, en [[withstand]] actualmente tenemos: <code><nowiki>{{pron-graf|leng=en |pron=Conservative Received Pronunciation|1fono1=wɪðˈstænd|1fono2=wɪθˈstænd |2pron=General American, Standard Canadian|2fono=wɪðˈstænd|2fone2=wɪðˈstɛənd|2fnota2=/æ/ raising|2audio2=en-us-withstand.ogg|2aunota2=California|2audio3=LL-Q1860 (eng)-Wodencafe-withstand.wav|2aunota3=Texas|2fone4=wɪðˈstɛːnd|2fnota4=/æ/ raising|2audio5=LL-Q1860 (eng)-Grendelkhan-withstand.wav|2aunota5=Connecticut|2fono6=wɪθˈstænd|2fone7=wɪθˈstɛənd|2fnota7=/æ/ raising|2audio7=LL-Q1860 (eng)-Semperosculto-withstand.wav|2aunota7=EE. UU.|2fone8=wɪθˈstɛːnd|2fnota8=/æ/ raising|2audio8=LL-Q1860 (eng)-Assorted-Interests-withstand.wav|2aunota8=Ciudad de Nueva York |3pron=Australia|3fono1=wɪðˈstænd|3fone2=wɪðˈsteːnd|3fnota2=/æ/ raising|3fono3=wɪθˈstænd|3fone4=wɪθˈsteːnd|3fnota4=/æ/ raising |ls=2 }}</nowiki></code> Y con la modificación pasaría a: <code><nowiki>{{pron-graf|leng=en |pron1=Conservative Received Pronunciation|fono1=wɪðˈstænd;wɪθˈstænd |pron2=General American, Standard Canadian|fono2=wɪðˈstænd;;;;;wɪθˈstænd|fone2=;wɪðˈstɛənd;;wɪðˈstɛːnd;;;wɪθˈstɛənd;wɪθˈstɛːnd|fnota2=;/æ/ raising;;/æ/ raising;;;/æ/ raising;/æ/ raising|audio2=;en-us-withstand.ogg;LL-Q1860 (eng)-Wodencafe-withstand.wav;;LL-Q1860 (eng)-Grendelkhan-withstand.wav;;LL-Q1860 (eng)-Semperosculto-withstand.wav;LL-Q1860 (eng)-Assorted-Interests-withstand.wav|aunota2=;California;Texas;;Connecticut;;EE. UU.;Ciudad de Nueva York |pron3=Australia|fono3=wɪðˈstænd;;wɪθˈstænd|fone3=;wɪðˈsteːnd;;wɪθˈsteːnd|fnota3=;/æ/ raising;;/æ/ raising |ls=2 }}</nowiki></code> Por supuesto, esto obviamente trae la desventaja de que no se permitirían archivos de audios con ";" en el nombre, algo que nunca he visto en el sitio. Son aproximadamente 5000 las páginas afectadas. Me llevaría unos días, comenzaría marcando las plantillas que tengan el doble índice en alguno de los parámetros y las trasladaría a una plantilla temporal. Luego haría las modificaciones en pron-graf y finalmente fusionaría la plantilla temporal a pron-graf, con el formato modificado. Puedo hacerlo todo yo mismo y te avisaría cuando estén implementados los cambios. Quería conocer tu opinión ya que usás la plantilla frecuentemente. Al resto le va a dar más o menos igual, pero si alguien va a tener que cambiar sus hábitos serías vos, aparte de que la mayoría de las migraciones conciernen a ediciones tuyas. Cómo lo ves? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 18:13 2 jul 2025 (UTC) ou8vommnmlxrdtru526pb4755zew5y2 5823338 5823325 2025-07-02T21:18:48Z Adelpine 34679 /* Cambios en pron-graf */ Respuesta 5823338 wikitext text/x-wiki <div style="padding:10px; font-size:101%; background-color:#F5FFFF; border: 1px dotted teal;" > Hola, Adelpine. Te damos la [[Wikcionario:Bienvenido, nuevo visitante|bienvenida a ''Wikcionario'']]. <small style="padding-left:150px">[[Wikcionario:Embajada|If you don't speak Spanish, please visit our Embassy]]</small> Gracias por participar en el proyecto. Puedes encontrar algunas guías útiles aquí: :<small>&#x25B6;</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; :<small>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Wikcionario:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> Los manuales de '''[[Wikcionario:Estructura|estructura]]''', y de '''[[Wikcionario:Estilo|estilo]]''' son guías esenciales para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. {| | Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Wikcionario:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(&#126;&#126;&#126;&#126;)</nowiki>, el cual se consigue con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente de la botonera que hay en la parte superior de la caja de edición. || [[Archivo:Signature_button_vector.png|right|Para firmar usa el botón indicado|link=]] |} Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable. Saludos muy cordiales. </div> — [[Usuario:Edgefield|Edgefield]] ([[Usuario discusión:Edgefield|discusión]]) 17:56 9 jul 2013 (UTC). == Pronunciaciones == Es mejor dejar todas las pronunciaciones, sus notas y los audios en [https://es.wiktionary.org/w/index.php?title=together&type=revision&diff=4957534&oldid=4957509 una sola plantilla] y es mejor {{ep|pron-graf}} que {{ep|pronunciación}} porque es mucho más versátil y es la que ahora se utiliza sistemáticamente. Las plantillas {{ep|pronunciación}} van siendo sustituidas poco a poco. Saludos y muchas gracias por tus aportaciones. --[[Especial:Contribuciones/37.11.121.244|37.11.121.244]] ([[Usuario discusión:37.11.121.244|discusión]]) 23:12 20 oct 2020 (UTC) : O, mejor aún, [https://es.wiktionary.org/w/index.php?title=together&type=revision&diff=4957656&oldid=4957534 usando '''pron=''', '''2pron=''', etc en vez de '''fnota=''', '''fnota2='''...] Saludos. --[[Especial:Contribuciones/37.11.121.244|37.11.121.244]] ([[Usuario discusión:37.11.121.244|discusión]]) 11:39 21 oct 2020 (UTC) == Lexicographically canonical forms == "[https://es.wiktionary.org/w/index.php?title=distances&type=revision&diff=5010001&oldid=5009956 Distances]" should be labelled as a form instead a (lexicographically canonical) noun (or verb). Non-canonical lemmas shouldn't keep an etymology as those are currently located in the canonical terms; the only exception happening on semanticized terms (v.g. "building" is both a non-canonical form, a verbal form, and a canonical form, "a noun"). Regards. --[[Especial:Contribuciones/37.11.122.76|37.11.122.76]] ([[Usuario discusión:37.11.122.76|discusión]]) 22:25 6 jul 2021 (UTC) == Saludos == Hola, como eres un usuario frecuente, me gustaria que nos expresaras tu voto u opinión [[WN:CA#Candidatura de Cvmontuy (2022)|aquí]], cualquiera que sea tu preferencia es y sera respetada y también bienvenida, saludos y gracias, [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 22:57 23 oct 2022 (UTC) == Cambios en pron-graf == Hola, hay un asunto que siempre quedó pendiente por hacer en la plantilla {{ep|pron-graf}}, o al menos lo es para mí. Como verás, actualmente el doble índice se maneja con la notación AfoneB, que corresponde a la pronunciación A, subvariante B. Este sistema es muy heterodoxo, incosistente y difícil de inferir para usuarios que no usen la plantilla frecuentemente. Explico algunos problemas que tiene: * Todas las plantillas que tienen parámetros indexados son de la forma pA. Es decir, la forma de "avanzar" al siguiente índice sería pA+1, pero en esta plantilla la forma de "avanzar" en la dirección natural es A+1foneB, con el índice antepuesto en vez de pospuesto. Muchas veces incluso yo me he confundido e hice AfoneB+1, sobre todo al agregar pronunciaciones sin subvariantes, que es el caso más común, lo más lógico para quien no está acostumbrado es fone1, fone2, fone3; sin embargo lo correcto es 1fone, 2fone, 3fone. * En línea con lo anterior, es inconsistente incluso dentro de la misma plantilla, ya que los parámetros que no son listas dobles tienen el índice al final, por ejemplo <nowiki>h</nowiki> (homófono) sería h1, h2, etc. pero fone es 1fone, 2fone, 3fone; lo que la vuelve aún más esotérica a la plantilla para el resto de usuarios. * Por último, los parámetros posicionales concuerdan con <nowiki>|fone</nowiki> (así era antes de que haya llegado al sitio), pero el problema es que solo se puede avanzar posicionalmente por una dimensión, entonces si yo escribo tres parámetros posicionales, digamos, <nowiki>{{pron-graf|1=x|2=y|3=z}}</nowiki> cómo debería tomarlo? <nowiki>|1fone=x</nowiki>, <nowiki>|2fone=y</nowiki>, <nowiki>|3fone=z</nowiki> o <nowiki>|fone1=x</nowiki>, <nowiki>|fone2=y</nowiki>, <nowiki>|fone3=z</nowiki>? Todo esto me hizo llegar a la conclusión de que, por el bien del sitio y de futuros usuarios, sería conveniente un cambio en la plantilla en lo que respecta a este sistema. En lo que pensé es en migrar los parámetros <nowiki>|fone</nowiki>, <nowiki>|fono</nowiki>, <nowiki>|fgraf</nowiki>, <nowiki>|fnota</nowiki>, <nowiki>|audio</nowiki>, <nowiki>|aunota</nowiki> a un formato de índice simple, en donde las subvariantes ahora se separarían preferentemente mediante punto y coma (;), aunque también podría ser con barras u otro símbolo conveniente. Por ejemplo, en [[withstand]] actualmente tenemos: <code><nowiki>{{pron-graf|leng=en |pron=Conservative Received Pronunciation|1fono1=wɪðˈstænd|1fono2=wɪθˈstænd |2pron=General American, Standard Canadian|2fono=wɪðˈstænd|2fone2=wɪðˈstɛənd|2fnota2=/æ/ raising|2audio2=en-us-withstand.ogg|2aunota2=California|2audio3=LL-Q1860 (eng)-Wodencafe-withstand.wav|2aunota3=Texas|2fone4=wɪðˈstɛːnd|2fnota4=/æ/ raising|2audio5=LL-Q1860 (eng)-Grendelkhan-withstand.wav|2aunota5=Connecticut|2fono6=wɪθˈstænd|2fone7=wɪθˈstɛənd|2fnota7=/æ/ raising|2audio7=LL-Q1860 (eng)-Semperosculto-withstand.wav|2aunota7=EE. UU.|2fone8=wɪθˈstɛːnd|2fnota8=/æ/ raising|2audio8=LL-Q1860 (eng)-Assorted-Interests-withstand.wav|2aunota8=Ciudad de Nueva York |3pron=Australia|3fono1=wɪðˈstænd|3fone2=wɪðˈsteːnd|3fnota2=/æ/ raising|3fono3=wɪθˈstænd|3fone4=wɪθˈsteːnd|3fnota4=/æ/ raising |ls=2 }}</nowiki></code> Y con la modificación pasaría a: <code><nowiki>{{pron-graf|leng=en |pron1=Conservative Received Pronunciation|fono1=wɪðˈstænd;wɪθˈstænd |pron2=General American, Standard Canadian|fono2=wɪðˈstænd;;;;;wɪθˈstænd|fone2=;wɪðˈstɛənd;;wɪðˈstɛːnd;;;wɪθˈstɛənd;wɪθˈstɛːnd|fnota2=;/æ/ raising;;/æ/ raising;;;/æ/ raising;/æ/ raising|audio2=;en-us-withstand.ogg;LL-Q1860 (eng)-Wodencafe-withstand.wav;;LL-Q1860 (eng)-Grendelkhan-withstand.wav;;LL-Q1860 (eng)-Semperosculto-withstand.wav;LL-Q1860 (eng)-Assorted-Interests-withstand.wav|aunota2=;California;Texas;;Connecticut;;EE. UU.;Ciudad de Nueva York |pron3=Australia|fono3=wɪðˈstænd;;wɪθˈstænd|fone3=;wɪðˈsteːnd;;wɪθˈsteːnd|fnota3=;/æ/ raising;;/æ/ raising |ls=2 }}</nowiki></code> Por supuesto, esto obviamente trae la desventaja de que no se permitirían archivos de audios con ";" en el nombre, algo que nunca he visto en el sitio. Son aproximadamente 5000 las páginas afectadas. Me llevaría unos días, comenzaría marcando las plantillas que tengan el doble índice en alguno de los parámetros y las trasladaría a una plantilla temporal. Luego haría las modificaciones en pron-graf y finalmente fusionaría la plantilla temporal a pron-graf, con el formato modificado. Puedo hacerlo todo yo mismo y te avisaría cuando estén implementados los cambios. Quería conocer tu opinión ya que usás la plantilla frecuentemente. Al resto le va a dar más o menos igual, pero si alguien va a tener que cambiar sus hábitos serías vos, aparte de que la mayoría de las migraciones conciernen a ediciones tuyas. Cómo lo ves? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 18:13 2 jul 2025 (UTC) :Estimado Tmagc: Agradezco que consideres mi opinión. Como realizo ediciones en los wiktionarios español, francés, inglés y hasta hace unos años el alemán, lo que más me molestó fue tener que aprender varios sistemas. ¿Por qué no se puede hacer un simple copy/paste de las pronunciaciones? :Por otra parte, como conoces más de como funciona Wiktionary, tengo una necesidad. Quiero pedir que en Wiktionary (inglés) cuando escriba la sigla AU en lugar de aparecer General Australian aparezca Australia. Puedo asegurar que prácticamente nadie agrega las pronunciaciones ni en ese ni en otros dialectos (broad y cultivated (culto)). Si sabes en donde hacer ese requerimiento, podrías indicármelo. :Volviendo a tu consulta, algo que considerar es que en Wikcionario (español) tenemos menos de 35 colaboradores activos. Un cambio como el propuesto podría ocasionar que varios de ellos se vayan. Como ejemplo, recuerdo que poco después de comenzar a agregar las pronunciaciones AFI, en el diccionario alemán me exigieron que dejara de agregar los puntos que indican la separación de las sílabas. Como respondí, dejando de colaborar en ese diccionario. Ahora, cuando pasaron varios años, yo mismo dejé de poner los puntos por ser redundante (cuando se conocen las reglas de silabificación del inglés). Por esa razón, si persistes en esta idea, sería bueno que consultes con todos los colaboradores más activos. :Respondiendo la pregunta, la verdad es que el sistema que existe lo considero muy cómodo ya que el número antepuesto representa la fila y el pospuesto, la columna. En el caso de los homófonos, se entiende lo mismo, es decir, en la misma fila aparecen todos los homófonos. Quizás sería mejor que pudiesen colocarse en cada fila y por columna ya que, en inglés al menos, los homófonos dependen usualmente del dialecto. Para subsanar este problema, se recurre a colocar hnota para cada caso. Así por ejemplo, en [[bear]], aparecen unas hnotas (difíciles de tomar en cuenta ya que están al final de la página) que indican con cuales dialectos se da la homofonía. Se puede ver en [[bear]] con cual pronunciación de Nueva Zelanda se da la homofonía. ¿No sería mejor que apareciera el homófono al lado de la pronunciación que corresponde? Además, es frecuente que se escriba "algunas pronunciaciones" y queda al lector determinar cuales son esas pronunciaciones comparando las de la palabra que está viendo con las del homófono sugerido. Mi propuesta mantendría los "homofonos globales" donde ahora están para evitar tener que repetir el mismo homófono por cada pronunciación. Esto obligaría a que los homófonos correspondientes a pron (1pron) incorporen el 1 inicial obligatoriamente (1h1, 1h2, etc.) para evitar que sean considerados homófonos globales (que no tendrían un número antepuesto). :Reiterando mi agradecimiento por considerar mi opinión, me despido atte. [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 21:18 2 jul 2025 (UTC) jicy6x3vfhfiyvz04fb08w5ek6s8k61 5823341 5823338 2025-07-02T21:45:56Z Tmagc 158167 /* Cambios en pron-graf */ Respuesta 5823341 wikitext text/x-wiki <div style="padding:10px; font-size:101%; background-color:#F5FFFF; border: 1px dotted teal;" > Hola, Adelpine. Te damos la [[Wikcionario:Bienvenido, nuevo visitante|bienvenida a ''Wikcionario'']]. <small style="padding-left:150px">[[Wikcionario:Embajada|If you don't speak Spanish, please visit our Embassy]]</small> Gracias por participar en el proyecto. Puedes encontrar algunas guías útiles aquí: :<small>&#x25B6;</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; :<small>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Wikcionario:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> Los manuales de '''[[Wikcionario:Estructura|estructura]]''', y de '''[[Wikcionario:Estilo|estilo]]''' son guías esenciales para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. {| | Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Wikcionario:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(&#126;&#126;&#126;&#126;)</nowiki>, el cual se consigue con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente de la botonera que hay en la parte superior de la caja de edición. || [[Archivo:Signature_button_vector.png|right|Para firmar usa el botón indicado|link=]] |} Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable. Saludos muy cordiales. </div> — [[Usuario:Edgefield|Edgefield]] ([[Usuario discusión:Edgefield|discusión]]) 17:56 9 jul 2013 (UTC). == Pronunciaciones == Es mejor dejar todas las pronunciaciones, sus notas y los audios en [https://es.wiktionary.org/w/index.php?title=together&type=revision&diff=4957534&oldid=4957509 una sola plantilla] y es mejor {{ep|pron-graf}} que {{ep|pronunciación}} porque es mucho más versátil y es la que ahora se utiliza sistemáticamente. Las plantillas {{ep|pronunciación}} van siendo sustituidas poco a poco. Saludos y muchas gracias por tus aportaciones. --[[Especial:Contribuciones/37.11.121.244|37.11.121.244]] ([[Usuario discusión:37.11.121.244|discusión]]) 23:12 20 oct 2020 (UTC) : O, mejor aún, [https://es.wiktionary.org/w/index.php?title=together&type=revision&diff=4957656&oldid=4957534 usando '''pron=''', '''2pron=''', etc en vez de '''fnota=''', '''fnota2='''...] Saludos. --[[Especial:Contribuciones/37.11.121.244|37.11.121.244]] ([[Usuario discusión:37.11.121.244|discusión]]) 11:39 21 oct 2020 (UTC) == Lexicographically canonical forms == "[https://es.wiktionary.org/w/index.php?title=distances&type=revision&diff=5010001&oldid=5009956 Distances]" should be labelled as a form instead a (lexicographically canonical) noun (or verb). Non-canonical lemmas shouldn't keep an etymology as those are currently located in the canonical terms; the only exception happening on semanticized terms (v.g. "building" is both a non-canonical form, a verbal form, and a canonical form, "a noun"). Regards. --[[Especial:Contribuciones/37.11.122.76|37.11.122.76]] ([[Usuario discusión:37.11.122.76|discusión]]) 22:25 6 jul 2021 (UTC) == Saludos == Hola, como eres un usuario frecuente, me gustaria que nos expresaras tu voto u opinión [[WN:CA#Candidatura de Cvmontuy (2022)|aquí]], cualquiera que sea tu preferencia es y sera respetada y también bienvenida, saludos y gracias, [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 22:57 23 oct 2022 (UTC) == Cambios en pron-graf == Hola, hay un asunto que siempre quedó pendiente por hacer en la plantilla {{ep|pron-graf}}, o al menos lo es para mí. Como verás, actualmente el doble índice se maneja con la notación AfoneB, que corresponde a la pronunciación A, subvariante B. Este sistema es muy heterodoxo, incosistente y difícil de inferir para usuarios que no usen la plantilla frecuentemente. Explico algunos problemas que tiene: * Todas las plantillas que tienen parámetros indexados son de la forma pA. Es decir, la forma de "avanzar" al siguiente índice sería pA+1, pero en esta plantilla la forma de "avanzar" en la dirección natural es A+1foneB, con el índice antepuesto en vez de pospuesto. Muchas veces incluso yo me he confundido e hice AfoneB+1, sobre todo al agregar pronunciaciones sin subvariantes, que es el caso más común, lo más lógico para quien no está acostumbrado es fone1, fone2, fone3; sin embargo lo correcto es 1fone, 2fone, 3fone. * En línea con lo anterior, es inconsistente incluso dentro de la misma plantilla, ya que los parámetros que no son listas dobles tienen el índice al final, por ejemplo <nowiki>h</nowiki> (homófono) sería h1, h2, etc. pero fone es 1fone, 2fone, 3fone; lo que la vuelve aún más esotérica a la plantilla para el resto de usuarios. * Por último, los parámetros posicionales concuerdan con <nowiki>|fone</nowiki> (así era antes de que haya llegado al sitio), pero el problema es que solo se puede avanzar posicionalmente por una dimensión, entonces si yo escribo tres parámetros posicionales, digamos, <nowiki>{{pron-graf|1=x|2=y|3=z}}</nowiki> cómo debería tomarlo? <nowiki>|1fone=x</nowiki>, <nowiki>|2fone=y</nowiki>, <nowiki>|3fone=z</nowiki> o <nowiki>|fone1=x</nowiki>, <nowiki>|fone2=y</nowiki>, <nowiki>|fone3=z</nowiki>? Todo esto me hizo llegar a la conclusión de que, por el bien del sitio y de futuros usuarios, sería conveniente un cambio en la plantilla en lo que respecta a este sistema. En lo que pensé es en migrar los parámetros <nowiki>|fone</nowiki>, <nowiki>|fono</nowiki>, <nowiki>|fgraf</nowiki>, <nowiki>|fnota</nowiki>, <nowiki>|audio</nowiki>, <nowiki>|aunota</nowiki> a un formato de índice simple, en donde las subvariantes ahora se separarían preferentemente mediante punto y coma (;), aunque también podría ser con barras u otro símbolo conveniente. Por ejemplo, en [[withstand]] actualmente tenemos: <code><nowiki>{{pron-graf|leng=en |pron=Conservative Received Pronunciation|1fono1=wɪðˈstænd|1fono2=wɪθˈstænd |2pron=General American, Standard Canadian|2fono=wɪðˈstænd|2fone2=wɪðˈstɛənd|2fnota2=/æ/ raising|2audio2=en-us-withstand.ogg|2aunota2=California|2audio3=LL-Q1860 (eng)-Wodencafe-withstand.wav|2aunota3=Texas|2fone4=wɪðˈstɛːnd|2fnota4=/æ/ raising|2audio5=LL-Q1860 (eng)-Grendelkhan-withstand.wav|2aunota5=Connecticut|2fono6=wɪθˈstænd|2fone7=wɪθˈstɛənd|2fnota7=/æ/ raising|2audio7=LL-Q1860 (eng)-Semperosculto-withstand.wav|2aunota7=EE. UU.|2fone8=wɪθˈstɛːnd|2fnota8=/æ/ raising|2audio8=LL-Q1860 (eng)-Assorted-Interests-withstand.wav|2aunota8=Ciudad de Nueva York |3pron=Australia|3fono1=wɪðˈstænd|3fone2=wɪðˈsteːnd|3fnota2=/æ/ raising|3fono3=wɪθˈstænd|3fone4=wɪθˈsteːnd|3fnota4=/æ/ raising |ls=2 }}</nowiki></code> Y con la modificación pasaría a: <code><nowiki>{{pron-graf|leng=en |pron1=Conservative Received Pronunciation|fono1=wɪðˈstænd;wɪθˈstænd |pron2=General American, Standard Canadian|fono2=wɪðˈstænd;;;;;wɪθˈstænd|fone2=;wɪðˈstɛənd;;wɪðˈstɛːnd;;;wɪθˈstɛənd;wɪθˈstɛːnd|fnota2=;/æ/ raising;;/æ/ raising;;;/æ/ raising;/æ/ raising|audio2=;en-us-withstand.ogg;LL-Q1860 (eng)-Wodencafe-withstand.wav;;LL-Q1860 (eng)-Grendelkhan-withstand.wav;;LL-Q1860 (eng)-Semperosculto-withstand.wav;LL-Q1860 (eng)-Assorted-Interests-withstand.wav|aunota2=;California;Texas;;Connecticut;;EE. UU.;Ciudad de Nueva York |pron3=Australia|fono3=wɪðˈstænd;;wɪθˈstænd|fone3=;wɪðˈsteːnd;;wɪθˈsteːnd|fnota3=;/æ/ raising;;/æ/ raising |ls=2 }}</nowiki></code> Por supuesto, esto obviamente trae la desventaja de que no se permitirían archivos de audios con ";" en el nombre, algo que nunca he visto en el sitio. Son aproximadamente 5000 las páginas afectadas. Me llevaría unos días, comenzaría marcando las plantillas que tengan el doble índice en alguno de los parámetros y las trasladaría a una plantilla temporal. Luego haría las modificaciones en pron-graf y finalmente fusionaría la plantilla temporal a pron-graf, con el formato modificado. Puedo hacerlo todo yo mismo y te avisaría cuando estén implementados los cambios. Quería conocer tu opinión ya que usás la plantilla frecuentemente. Al resto le va a dar más o menos igual, pero si alguien va a tener que cambiar sus hábitos serías vos, aparte de que la mayoría de las migraciones conciernen a ediciones tuyas. Cómo lo ves? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 18:13 2 jul 2025 (UTC) :Estimado Tmagc: Agradezco que consideres mi opinión. Como realizo ediciones en los wiktionarios español, francés, inglés y hasta hace unos años el alemán, lo que más me molestó fue tener que aprender varios sistemas. ¿Por qué no se puede hacer un simple copy/paste de las pronunciaciones? :Por otra parte, como conoces más de como funciona Wiktionary, tengo una necesidad. Quiero pedir que en Wiktionary (inglés) cuando escriba la sigla AU en lugar de aparecer General Australian aparezca Australia. Puedo asegurar que prácticamente nadie agrega las pronunciaciones ni en ese ni en otros dialectos (broad y cultivated (culto)). Si sabes en donde hacer ese requerimiento, podrías indicármelo. :Volviendo a tu consulta, algo que considerar es que en Wikcionario (español) tenemos menos de 35 colaboradores activos. Un cambio como el propuesto podría ocasionar que varios de ellos se vayan. Como ejemplo, recuerdo que poco después de comenzar a agregar las pronunciaciones AFI, en el diccionario alemán me exigieron que dejara de agregar los puntos que indican la separación de las sílabas. Como respondí, dejando de colaborar en ese diccionario. Ahora, cuando pasaron varios años, yo mismo dejé de poner los puntos por ser redundante (cuando se conocen las reglas de silabificación del inglés). Por esa razón, si persistes en esta idea, sería bueno que consultes con todos los colaboradores más activos. :Respondiendo la pregunta, la verdad es que el sistema que existe lo considero muy cómodo ya que el número antepuesto representa la fila y el pospuesto, la columna. En el caso de los homófonos, se entiende lo mismo, es decir, en la misma fila aparecen todos los homófonos. Quizás sería mejor que pudiesen colocarse en cada fila y por columna ya que, en inglés al menos, los homófonos dependen usualmente del dialecto. Para subsanar este problema, se recurre a colocar hnota para cada caso. Así por ejemplo, en [[bear]], aparecen unas hnotas (difíciles de tomar en cuenta ya que están al final de la página) que indican con cuales dialectos se da la homofonía. Se puede ver en [[bear]] con cual pronunciación de Nueva Zelanda se da la homofonía. ¿No sería mejor que apareciera el homófono al lado de la pronunciación que corresponde? Además, es frecuente que se escriba "algunas pronunciaciones" y queda al lector determinar cuales son esas pronunciaciones comparando las de la palabra que está viendo con las del homófono sugerido. Mi propuesta mantendría los "homofonos globales" donde ahora están para evitar tener que repetir el mismo homófono por cada pronunciación. Esto obligaría a que los homófonos correspondientes a pron (1pron) incorporen el 1 inicial obligatoriamente (1h1, 1h2, etc.) para evitar que sean considerados homófonos globales (que no tendrían un número antepuesto). :Reiterando mi agradecimiento por considerar mi opinión, me despido atte. [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 21:18 2 jul 2025 (UTC) ::@[[Usuario:Adelpine|Adelpine]] Ya veo. El problema es que eso rompería nuestras convenciones ya que al no escribir el número se asume siempre 1, lo que generaría más confusión. Lo que sí se podría hacer es agregar un parámetro nuevo que agregue homófonos a nivel de pronunciación. Podría ser "hh", "hom", el que prefieras. Pero sí me interesaría implementar el cambio en el sistema de numeración. Las nuevas propuestas se hacen en [[Wikcionario:Café]], supongo que en en.wikt es igual o sino en la página de discusión de la plantilla en donde querrías una modificación, supongo que es [[en:Template:en-IPA]], y si nadie te contesta podrías buscar al creador o al principal editor vía el historial de ediciones de esa misma plantilla y escribirle en su página de discusión. Pero de acuerdo, elevo las dos propuestas al Café para ver el resto de las opiniones. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 21:45 2 jul 2025 (UTC) i9lamsvhrbrsc7p3ne7tscjld4insy7 fanciullo 0 181728 5823454 4472300 2025-07-03T03:56:59Z TMCbot 164594 . 5823454 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1: {{plm|chico}}, [[muchacho]], [[chaval]], [[zagal]], [[jovencito]], [[mozo]]. {{sinónimos|leng=it|ragazzo}}. == Referencias y notas == <references /> g8r8hsnm1ay5snhzxb5kzwxiexhyh4z mirá 0 340219 5823358 5652926 2025-07-02T22:55:40Z Tmagc 158167 +imperativo 5823358 wikitext text/x-wiki {{desambiguación|mira|mirra}} == {{lengua|es}} == {{pron-graf}} === Forma verbal === ;1: {{forma verbo|mirar|afirmativo=s|p=vos|t=imperativo}}. ;2: {{forma verbo|ver|afirmativo=s|p=vos|t=imperativo}}. == Referencias y notas == <references /> t74dyspqg60lmfkxr8ob32nkcz1wxpn abbacchiato 0 369121 5823487 2936739 2025-07-03T04:11:45Z Tmagc 158167 5823487 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it|fone=ab.bakˈkja.to|audio=it-abbacchiato.ogg}} === Etimología === {{etimología|leng=it|participio|abachiare}}. === {{adjetivo|it}} === {{it.adj}} ;1: {{plm|abatido}}. {{uso|leng=it|figurado}} ;2: {{plm|deprimido}} {{uso|leng=it|figurado}} == Referencias y notas == <references /> q2nkpozwewiynas9r49tximg8wmfho2 5823488 5823487 2025-07-03T04:12:27Z Tmagc 158167 Tmagc trasladó la página [[abbachiato]] a [[abbacchiato]]: Título mal escrito 5823487 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it|fone=ab.bakˈkja.to|audio=it-abbacchiato.ogg}} === Etimología === {{etimología|leng=it|participio|abachiare}}. === {{adjetivo|it}} === {{it.adj}} ;1: {{plm|abatido}}. {{uso|leng=it|figurado}} ;2: {{plm|deprimido}} {{uso|leng=it|figurado}} == Referencias y notas == <references /> q2nkpozwewiynas9r49tximg8wmfho2 nutrido 0 394639 5823388 5754176 2025-07-03T01:56:21Z Tmagc 158167 5823388 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|participio|nutrir}}. ==== {{adjetivo|es}} ==== {{es.adj}} ;1: {{plm|numeroso}}, [[abundante]]. {{sinónimo|numeroso|abundante|cuantioso|rebosante|pletórico|copioso}} === Forma flexiva === ==== Forma verbal ==== {{es.adj}} ;1: {{participio|nutrir|irregular=}}. == Referencias y notas == <references /> 1eo17gqpfb9zde88qksrd7e480tbv3w capraio 0 482319 5823421 4334183 2025-07-03T02:39:37Z Tmagc 158167 5823421 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|la|caprarius|alt=caprarĭus}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1 {{csem|ocupaciones|leng=it}}: {{plm|cabrero}}. == Referencias y notas == <references /> t5e1wvcuju2ts7jr2jwb9bxocwwtfgy capraia 0 482320 5823419 4334181 2025-07-03T02:39:07Z Tmagc 158167 5823419 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|capraio|femenino|singular}}. == Referencias y notas == <references /> omquduyr2365b4qqgcn8oot5h5q2n91 capraie 0 482322 5823422 4334182 2025-07-03T02:40:03Z Tmagc 158167 5823422 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo|leng=it|capraio|femenino|plural}}. == Referencias y notas == <references /> 4zua0h2v072rzxwkti9drv2wrgg992x enrojecer 0 496930 5823306 5807684 2025-07-02T15:25:45Z Raos10 93688 Formato 5823306 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|confijo|en|rojo|ecer}}. ==== {{verbo transitivo|es}} ==== ;1: {{plm|poner}} de tono [[rojo]] o [[rojizo]] por el [[calor]], el [[fuego]], etc..<ref name="drae">{{DRAE2001}}</ref> {{uso|utcp}}: ''[[enrojecerse]]''. {{sinónimo|enrojar}}. {{relacionado|abrasar}}. ;2: {{plm|dar}} color rojo o [[teñir]] de ese color.<ref name="drae" /> {{sinónimo|enrojar}}. {{relacionado|embermejecer|enalmagrar}}. ==== {{verbo intransitivo|es}} ==== ;3: {{plm|ponerse}} [[colorado]] el [[rostro]], ganar [[rubor]] por la [[vergüenza]] o la [[timidez]].<ref name="drae" /> {{uso|utcp}} con el mismo significado: ''[[enrojecerse]]''. {{sinónimo|embermejecer|encender|ruborizar|sonrojar}}. {{relacionado|abochornar|acharar|achantarse|turbar|avergonzar}}. ==== Conjugación ==== {{es.v}} ==== Información adicional ==== {{derivad|enrojecimiento}}. ==== Traducciones ==== {{trad-arriba}} {{t|en|a1=1|t1=become red-hot|a2=2|t2=redden|a3=3|t3=blush|t4=flush}} {{t|ja|a1=3|t1=真っ赤になる|tl1=makka ni naru|t2=紅潮する|tl2=kouchou suru}} {{trad-abajo}} == Referencias y notas == <references /> qazaybwh8sv77q804jmp71tgakz3ide dolariza 0 813343 5823508 3355624 2025-07-03T05:39:34Z Apisite 115465 + Rumano 5823508 wikitext text/x-wiki {{desambiguación|dolarizá|}} == {{lengua|es}} == {{pron-graf}} === Forma verbal === ;1: {{forma verbo|dolarizarse|p=3s|t=presente|m=indicativo}}. == {{lengua|ro}} == {{pron-graf|leng=ro}} === Etimología === {{etimología|leng=ro}}. ==== {{verbo|ro}} ==== ;1: {{plm|dolarizar}}. ==== Conjugación ==== {{ro.v.conj.a2|dolariz}} == Referencias y notas == <references /> o2ve8fcv123a0ymfmnx0jpbyrnmif2f entredormirse 0 873166 5823314 5796303 2025-07-02T16:12:05Z Tmagc 158167 /* Conjugación */ 5823314 wikitext text/x-wiki {{desambiguación}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología}} === {{verbo pronominal|es}} === ;1: Alcanzar un estado de sueño o [[duermevela]] en el que la [[consciencia]] no desaparece por completo. {{sinónimo|adormecerse}}. {{relacionado|duermevela|entresueño}}. === Conjugación === {{es.v|alt=ue-u}} === Traducciones === {{trad-arriba}} <!--{{t+|de|?|}}--> <!--{{t+|ar|?|}}--> <!--{{t+|bg|?|}}--> <!--{{t+|ca|?|}}--> <!--{{t+|eo|?|}}--> <!--{{t+|fr|?|}}--> <!--{{t+|en|?|}}--> <!--{{t+|it|?|}}--> <!--{{t+|ja|?|}}--> <!--{{t+|nl|?|}}--> <!--{{t+|pl|?|}}--> <!--{{t+|pt|?|}}--> {{trad-abajo}} == Referencias y notas == <references /> 3xucgg50d9q1zyr7n4wd6mqnulxievg dormirse 0 873169 5823313 5796302 2025-07-02T16:11:46Z Tmagc 158167 /* Conjugación */ 5823313 wikitext text/x-wiki {{desambiguación}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|pronominal|dormir}}. === {{verbo pronominal|es}} === ;1: {{plm|dormir}} (uso pronominal de ...) === Conjugación === {{es.v|alt=ue-u}} === Traducciones === {{trad-arriba}} {{t|de|a1=1|t1=einschlafen}} {{t|eo|a1=1|t1=ekdormi}} {{t|en|a1=1|t1=fall asleep}} {{t|nl|i1=s|t1=in slaap vallen|t2=inslapen|t3=onder zeil gaan}} {{trad-abajo}} == Referencias y notas == <references /> i4judh1u7nd12749p1tubzxn6yhaezj destronar 0 875027 5823327 5808805 2025-07-02T19:09:27Z Tmagc 158167 5823327 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf|v=desentronizar}} === Etimología === {{etimología|confijo|des|trono|ar}} === {{verbo transitivo|es}} === ;1: Deponer y privar del reino a uno; echarle del trono.<ref name="drae">{{DLE1925}}</ref> {{sinónimo|derrocar|destituir|desposeer|deponer}} {{antónimo|entronizar}} ;2: Quitar a uno su preponderancia.<ref name="drae" /> {{sinónimo|apagar}} === Conjugación === {{es.v}} === Traducciones === {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> ovmtuh05u39i7pj8ik9i1dg3axr6bb7 desentronizar 0 879617 5823328 5810586 2025-07-02T19:10:19Z Tmagc 158167 5823328 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|prefijo|des|entronizar}} === {{verbo transitivo|es}} === ;1: {{variante|destronar}}.<ref name="drae">{{DRAE2001}}</ref> === Conjugación === {{es.v}} == Referencias y notas == <references /> 2g0ri8v6fe5qbi5iqmekzfi96d27aey sanguinario 0 882224 5823492 5813436 2025-07-03T04:18:09Z Tmagc 158167 /* {{adjetivo|it}} */ 5823492 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{año de documentación|1377}}.<ref>{{CNDHE}}</ref> {{etimología|la|sanguinarius}}. === {{adjetivo|es}} === {{es.adj}} ;1: {{plm|feroz}}, vengativo, iracundo, que se goza en derramar [[sangre]].<ref>{{DLE1925|1090}}</ref> {{ejemplo|«{{plm|otro}} de los [[aspecto]]s [[relevante]]s de esta [[operación]] fue la [[forma]] '''''sanguinaria''''' y [[cruel]] con que [[actuar]]on los [[atacante]]s [[montonero]]s ya que [[llegar]]on al [[extremo]] de [[ejecutar]] a [[soldado]]s que [[encontrarse|se encontraban]] [[bañarse|bañándose]] en las [[ducha]]s».|a={{versalita|Gassino, Francisco Eduardo; Bonifacino, Enrique Benjamín}}|t=Los 70. Violencia en la Argentina|editorial=Buenos Aires: Círculo Militar|f=2001|c=libro}} {{sinónimo|atroz|cruel|inhumano}}. === Traducciones === {{trad-arriba}} <!-- formato: {{t+|idioma|<acepción#>|palabra}} p. ej. {{t+|fr|1|facile}} --> <!--{{t+|de|}}--> <!--{{t+|ar|}}--> <!--{{t+|bg|}}--> <!--{{t+|ca|}}--> <!--{{t+|eo|}}--> <!--{{t+|fr|}}--> {{t|en|t1=bloodthirsty}} <!--{{t+|it|}}--> <!--{{t+|ja|}}--> <!--{{t+|nl|}}--> <!--{{t+|pl|}}--> <!--{{t+|pt|}}--> {{trad-abajo}} == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|la|sanguinarius}}. === {{adjetivo|it}} === {{it.adj}} ;1: {{plm}}. == {{lengua|la}} == {{pron-graf|leng=la|ayuda=sanguināriō |alt=sanguināriō}} === Forma flexiva === ==== Forma adjetiva ==== ;1: {{forma adjetivo|leng=la|sanguinarius|dativo|caso2=ablativo|masculino|neutro|glosa=sanguíneo}}. == Referencias y notas == <references /> tl91iu00ibnwm8b228fknigk95oq1oe inconformidad 0 901594 5823331 5794176 2025-07-02T19:47:29Z Tmagc 158167 /* Etimología */ 5823331 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|prefijo|in|conformidad}}. === {{sustantivo femenino|es}} === {{es.sust}} ;1: La cualidad de estar no conforme u hostil al orden político, social, moral, estético, etc === Traducciones === {{trad-arriba}} <!-- formato: {{t+|idioma|<acepción#>|palabra|género}} p. ej. {{t+|fr|1|chose|f}} --> <!--{{t+|de|}}--> <!--{{t+|ar|}}--> <!--{{t+|bg|}}--> <!--{{t+|ca|}}--> <!--{{t+|eo|}}--> <!--{{t+|fr|}}--> <!--{{t+|en|}}--> <!--{{t+|it|}}--> <!--{{t+|ja|}}--> <!--{{t+|nl|}}--> <!--{{t+|pl|}}--> <!--{{t+|pt|}}--> {{trad-abajo}} == Referencias y notas == <references /> o33a24k4lporhzuc0h6o6p9wdysbs0r ciliegia 0 909592 5823463 5639558 2025-07-03T03:57:12Z TMCbot 164594 . 5823463 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it |fono=tʃiˈljɛdʒa |2fone=t͡ʃiˈljɛː.d͡ʒä |audio=It-una ciliegia.ogg |v=cerasa|v2=ciriegia|v3=ciriegio|v4=ciriegiolo}} === Etimología === {{etimología|leng=it|la-lat|ceresia|alt=ceresiam|cereza}}, y este de {{l+|la|ceresium|glosa=cereza}}, del latín {{l+|la|cerasium|glosa=cereza}}, del griego antiguo {{l+|grc|κεράσιον|tr=kerásion|glosa=cereza}}, de {{l+|grc|κερασός|tr=kerasós|glosa=cerezo aliso}}. El último origen es posiblemente anatolio. Alternativamente se puede derivar de {{l+|it|ciliegio}} o {{l+|it|ciriegio}}, del latín tardío {{l+|la|ceresus|ceresum}}, del latín {{l+|la|cerasus|cerasum}}. Compárese el catalán {{l+|ca|cirera}}, el francés {{l+|fr|cerise}}, el español {{l+|es|cereza}}, el galego {{l+|gl|cereixa}}, el occitano {{l+|oc|cerièisa}}, el portugués {{l+|pt|cereja}} y el rumano {{l+|ro|cireașă}}. [[Archivo:Cherry.JPG|right|thumb]] === {{sustantivo femenino|it}} === {{it.sust|irreg|pl=ciliegie|pl2=ciliege}} ;1 {{csem|frutas|leng=it}}: {{plm|cereza}}. ;2 {{csem|colores|leng=it}}: Cereza. === {{adjetivo|it}} === {{it.adj|inv}} ;3 {{csem|colores|leng=it}}: Del color de las cerezas. === Información adicional === {{derivad|leng=it|ciliegina}}. === Véase también === {{w|leng=it}} == Referencias y notas == <references /> 3ctu41z8icqmv82bnt4umhz43txwnwp 5823501 5823463 2025-07-03T04:52:27Z Tmagc 158167 /* {{sustantivo femenino|it}} */ 5823501 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it |fono=tʃiˈljɛdʒa |2fone=t͡ʃiˈljɛː.d͡ʒä |audio=It-una ciliegia.ogg |v=cerasa|v2=ciriegia|v3=ciriegio|v4=ciriegiolo}} === Etimología === {{etimología|leng=it|la-lat|ceresia|alt=ceresiam|cereza}}, y este de {{l+|la|ceresium|glosa=cereza}}, del latín {{l+|la|cerasium|glosa=cereza}}, del griego antiguo {{l+|grc|κεράσιον|tr=kerásion|glosa=cereza}}, de {{l+|grc|κερασός|tr=kerasós|glosa=cerezo aliso}}. El último origen es posiblemente anatolio. Alternativamente se puede derivar de {{l+|it|ciliegio}} o {{l+|it|ciriegio}}, del latín tardío {{l+|la|ceresus|ceresum}}, del latín {{l+|la|cerasus|cerasum}}. Compárese el catalán {{l+|ca|cirera}}, el francés {{l+|fr|cerise}}, el español {{l+|es|cereza}}, el galego {{l+|gl|cereixa}}, el occitano {{l+|oc|cerièisa}}, el portugués {{l+|pt|cereja}} y el rumano {{l+|ro|cireașă}}. [[Archivo:Cherry.JPG|right|thumb]] === {{sustantivo femenino|it}} === {{it.sust|irreg|pl=ciliegie|p2=ciliege}} ;1 {{csem|frutas|leng=it}}: {{plm|cereza}}. ;2 {{csem|colores|leng=it}}: Cereza. === {{adjetivo|it}} === {{it.adj|inv}} ;3 {{csem|colores|leng=it}}: Del color de las cerezas. === Información adicional === {{derivad|leng=it|ciliegina}}. === Véase también === {{w|leng=it}} == Referencias y notas == <references /> k2ir0pnqieaxvf6j3mllh0vwbtdpk8z huovo 0 911668 5823464 4877115 2025-07-03T03:57:14Z TMCbot 164594 . 5823464 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === {{sustantivo masculino|it}} === {{it.sust|irreg|huova}} ;1: {{grafía obsoleta|uovo|leng=it}}. == Referencias y notas == <references /> 4j4kz0szpfl0a1z95my7ajrxjs2f15k funambolo 0 918536 5823471 5640038 2025-07-03T03:57:24Z TMCbot 164594 . 5823471 wikitext text/x-wiki {{desambiguación|}} == {{lengua|it}} == {{pron-graf|leng=it|}} === Etimología === {{etimología|leng=it|}}. === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1 {{csem|ocupaciones|leng=it}}: {{plm|funámbulo}}, [[funambulista]]. {{hiperónimo|leng=it|acrobata}}. === Véase también === {{w|idioma=it}} == Referencias y notas == <references /> bvhyy97lwt0x1uuguezh4xsy59dl0l7 cogolmar 0 957641 5823316 5812648 2025-07-02T16:16:23Z Tmagc 158167 5823316 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|la|concumulo|alt=*concumulō, concumulāre|colmar}}.<ref name="dle">{{DRAE2001}}</ref> === {{verbo transitivo|es}} === ;1: {{variante obsoleta|colmar}}.<ref name="dle" /> {{relacionado|colmar|caramullar|rebosar|repletar}}. === Información adicional === {{cognados|acumular|culminar}}. {{derivad|cogüelmo|nota=[[colmo]]}}. === Conjugación === {{es.v|nucleopres1=cog#üe#lm}} == Referencias y notas == <references /> 4zvg5bn8aj5oosrgweqi913cuepeemj tarot 0 973152 5823329 5795413 2025-07-02T19:32:53Z ImenaOphelia 161409 /* Español */polaco 5823329 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|fr|tarot}}. === {{sustantivo masculino|es}} === [[Archivo:Taroky trul.JPG|thumb|cartas de tarot]] {{es.sust}} ;1: {{plm|baraja}} de 78 [[naipe]]s que a menudo se utiliza para [[adivinación]] o [[cartomancia]]. ;2: Juego de [[carta]]s que se practica con esta baraja. === Véase también === {{W}} === Traducciones === {{trad-arriba}} {{t|fr|t1=tarot}} {{t|en|t1=tarot}} {{t|pl|t1=tarot|t2=tarot}} {{trad-abajo}} == Referencias y notas == <references /> gf6hb6qq93u8851f5t9s0691qxb3s00 Usuario discusión:Raos10 3 980570 5823507 5817817 2025-07-03T05:25:22Z Tmagc 158167 Sección nueva: /* Cambios en formato de plantillas */ 5823507 wikitext text/x-wiki {{Bienvenido usuario}} === Definiciones y traducciones === Hola, bienvenid@. Por favor, echa un vistazo a [https://es.wiktionary.org/w/index.php?title=analysis&curid=980560&diff=4871602&oldid=4871546 esta edición que acabo de hacer]. De momento no he podido hacer más porque ando escaso de tiempo. Las palabras en otra lengua diferente al español, directamente se traducen y solo se definen o se precisa su significado cuando no hay un vocablo equivalente en español. Mira, por ejemplo, [https://es.wiktionary.org/wiki/run#Ingl%C3%A9s run]. Saludos. --[[Especial:Contribuciones/37.35.185.155|37.35.185.155]] ([[Usuario discusión:37.35.185.155|discusión]]) 13:51 6 oct 2019 (UTC) == Ad:novelar == ;[https://es.wiktionary.org/w/index.php?title=novelar&curid=876667&diff=4871642&oldid=4556257#bodyContent Ad:novelar] ¡Hola! He notado que estás eliminando la sección "Referencias y notas" en tus ediciones cuando esta permanece vacía. Sin embargo, dicha sección es obligatoria para todas las entradas, esté siendo usada o no. Por ello, un bot la restaura automáticamente: [[Especial:Diff/4871588]]. Un apunte más: el formato de las entradas que contienen alguna forma flexiva y, en particular, cuando conviven definiciones con formas no canónicas, se complica un poco (véase mi corrección en [[Especial:Diff/4871683]]). Para más ejemplos, consulta [[WN:ES#Estructuración especial]]. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:08 7 oct 2019 (UTC) == Ad:✌ == ;[https://es.wiktionary.org/w/index.php?title=%E2%9C%8C&curid=918641&diff=4873584&oldid=4688614#bodyContent Ad:✌] ¡Hola! Hay dos problemas con esta edición: * El título vacío de "Símbolo". Posiblemente hayas encontrado esto en algunas entradas antiguas que pretendían unificar dos o más secciones, de forma que solo la última tenía algún contenido y las demás permanecían vacías. Esto no es correcto. * La nueva plantilla {{ep|emoji}} es una [[:Categoría:Plantillas de campo semántico|plantilla de campo semántico]], su uso debe restringirse al ámbito de una única acepción y su lugar adecuado es a continuación del número que la acompaña y antes de la definición. Lo he corregido de esta manera: [[Especial:Diff/4873604]]. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 10:51 13 oct 2019 (UTC) == Friday == Hola. Acabo de revertir [https://es.wiktionary.org/w/index.php?title=Friday&type=revision&diff=4873611&oldid=4873430 esto] por lo que explico en el comentario. Gracias por todo tu trabajo. Saludos. --[[Especial:Contribuciones/37.35.185.155|37.35.185.155]] ([[Usuario discusión:37.35.185.155|discusión]]) 11:44 13 oct 2019 (UTC) == Plantillas de flexión con .reg == [https://es.wiktionary.org/w/index.php?title=dread&type=revision&diff=4874868&oldid=4874849 Más fácil y rápido]. --[[Especial:Contribuciones/188.76.241.115|188.76.241.115]] ([[Usuario discusión:188.76.241.115|discusión]]) 21:48 17 oct 2019 (UTC) == Plantilla Unicode == Tal vez conviniera mover la plantilla Unicode que creaste al mismo nombre pero con minúscula porque la inmensa mayoría de plantillas creadas aquí suelen ir con minúsculas, así hay menos batiburrillo a la hora de editar. No haría falta borrar la redirección desde la que tiene inicial mayúscula. Saludos. --[[Especial:Contribuciones/188.76.241.115|188.76.241.115]] ([[Usuario discusión:188.76.241.115|discusión]]) 19:17 20 oct 2019 (UTC) == Transliteraciones == Hola. He visto que has hecho algunas ediciones en páginas con transliteraciones. Agradecería que echaras un vistazo a "[[ḥol]]" y me dijeras qué te parece ese formato. Puede que el bot añada automáticamente una plantilla a "sustantivo masculino" pero no creo que algo así convenga en el caso de las transliteraciones. Creo que con que las trasliteraciones solo se categoricen por el idioma y como transliteraciones, debería bastar. Hay sin embargo algunos casos como el pinyin o el romaji que se quedan como a medio camino entre las transliteraciones y los lemas canónicos pero ese sería otro cantar. --[[Especial:Contribuciones/188.76.241.115|188.76.241.115]] ([[Usuario discusión:188.76.241.115|discusión]]) 12:19 24 oct 2019 (UTC) == ৳ y ৲ == Desconozco el uso exacto de estos dos signos pero no estoy seguro de que sea buena idea quitar ৳ y ৲ de las categorías de símbolos del bengalí y dejarlos solo como símbolos translingüísticos por dos razones: # Son claramente símbolos integrados en el [[en:Appendix:Unicode/Bengali|sistema de escritura bengalí]]: en Unicode, ৲ y ৳ van inmediatamente después de la sílaba del bengalí ৱ (ra). # Ya existe «Tk», que muy probablemente sea el símbolo translingüístico más claro de los tres. No me parece mal considerarlos translingüísticos pero no veo buena idea excluirlos de la lengua bengalí. Saludos. --[[Especial:Contribuciones/188.76.241.115|188.76.241.115]] ([[Usuario discusión:188.76.241.115|discusión]]) 12:05 26 oct 2019 (UTC) == Por favor revise su correo electrónico == Hola, {{PAGENAME}}: ¡Por favor revise su correo electrónico! Asunto del correo "The Community Insights survey is coming!" Si tiene preguntas, envíe un correo electrónico a surveys@wikimedia.org. (Please check your email! Subject: "The Community Insights survey is coming!" If you have questions, email surveys@wikimedia.org.)" (English: Please check your email and spam! Subject is "The Community Insights survey is coming!" If you have questions, email surveys@wikimedia.org.) Sorry for the inconvenience, [[:w:es:Special:Diff/129550593|you can read my explanation here]]. [[Usuario:MediaWiki message delivery|MediaWiki message delivery]] ([[Usuario discusión:MediaWiki message delivery|discusión]]) 17:09 25 sep 2020 (UTC) <!-- Mensaje enviado por Usuario:Samuel (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=User:Samuel_(WMF)/Community_Insights_survey/es&oldid=20479057 --> == Circunciso == Por favor, [https://es.wiktionary.org/w/index.php?title=circunciso&type=revision&diff=4974364&oldid=4974349 no añadas información] que sea literalmente igual a la del <small>'''[inicio de modo guasón]'''</small> ''diccionario todopoderoso y omnipresente'' <small>'''[final de modo guasón]'''</small> a menos que la hayas tomado de alguna versión ya liberada de copyright, caso en el que se habría de añadir la referencia. Gracias. Saludos. --[[Especial:Contribuciones/37.11.120.5|37.11.120.5]] ([[Usuario discusión:37.11.120.5|discusión]]) 03:05 15 dic 2020 (UTC) == Formas verbales con enclíticos == Hola, te pido el favor de no agregar verbos con enclíticos por el mero hecho de agregarlos, a menos que estén lexicalizados (su significado no es la suma de las partes, tal como ocurre con [https://dle.rae.es/di%C3%B1ar?m=form#1U6DwTp diñarla]). Salvo las formas pronominales en infinitivo, evitamos agregar los demás verbos enclíticos ya que la cantidad que habría es excesiva, potencialmente infinita si consideramos todas las combinaciones posibles entre verbo conjugado+pronombre y sería muy difícil de manejar y mantener a largo plazo. De igual forma, en general no es necesario agregar formas no canónicas, con el debido tiempo lo podré automatizar con mi bot habiendo resuelto algunas tareas más prioritarias. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 22:36 24 abr 2025 (UTC) :@[[Usuario:Tmagc|Tmagc]] Okey, las formas que agregué fue solo porque eran parte de locuciones (como en [[írsele la vista]], [[dárselas de]]) y me molestaba un poco el enlace rojo de la etimología... yo digo que al menos esas merecen una entrada, ¿no? [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 23:28 24 abr 2025 (UTC) ::Tal vez un mecanismo que detecte el enclítico y que quite los enlaces sea más fácil. Las entradas deberían aportar información nueva, crearlas por crearlas podría conducir a "entradas fantasma", esto es, páginas que dan la apariencia de existir porque un bot las agregó como forma no canónica pero que en realidad nunca fueron agregadas las definiciones correspondientes. Me refiero a casos como [[rosca]] o [[arpegio]]: las definiciones las agregué yo, pero antes aparecían como verbos únicamente. Es muy peligroso eso. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 00:01 25 abr 2025 (UTC) :::@[[Usuario:Tmagc|Tmagc]] Tienes razón en que sería un lío manejarlas, pero aún así me chirría un poco que formas tan comunes como ''[[dámelo]]'' no estén, mientras que formas inexistentes en el uso como ''[[chispoteareis]]'' sí. Había pensado en una tabla de enclíticos (sin enlaces) para las formas flexivas, p. ej. bajo {{l+|es|da}} se mostraría una tabla con "dame, dámelo, dámela, etc...", tal vez algún día sea posible jaja. Para lo de los enlaces en la etimología, creo que sería útil que en vez de quitarlos se apliquen a cada parte de la palabra: ''[[da|dá]][[me]][[lo]]''. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 15:58 25 abr 2025 (UTC) == Cambios en formato de plantillas == Hola, en la guía de estilo puse que la intención es migrar el resto de plantillas a nuevas implementaciones con módulos, por ejemplo {{ep|inflect.en.v}} a {{ep|en.v}} y así con todos los idiomas tal como hice con el español. Así que no me gastaría en corregir el estilo de plantillas deprecadas. Saludos. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 05:25 3 jul 2025 (UTC) 6t5sb2irj10w9je1epjanygwlmdfxgj pervasive 0 1000444 5823208 5146352 2025-07-02T14:10:21Z Adelpine 34679 Precisa los hablantes de algunas pronunciaciones AFI 5823208 wikitext text/x-wiki {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |pron=Received Pronunciation|fono=pəˈveɪ.sɪv |2pron=General American, Standard Canadian|2fono=pɚˈveɪ.sɪv|2audio=en-us-pervasive.ogg|2aunota=California |3pron=Australia|3fono=pəˈvæɪ.sɪv|3audio=en-au-pervasive.ogg|3aunota=Queensland |ls=3|nl=9}} === Etimología === {{etimología|leng=en|la|pervasus|diacrítico=pervāsus}}. ==={{adjetivo|en}}=== {{inflect.en.adj|+}} ;1: Manifestado por todas partes; permeando, penetrando o afectando todo. {{ejemplo|The medication had a '''pervasive''' effect on the patient's health.}} == Referencias y notas == <references /> 5cd2ngr0v9rhlbwjbq04p91upnwby7s ndeah 0 1000893 5823494 5666200 2025-07-03T04:34:31Z Tmagc 158167 5823494 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf|dnota=esta palabra suele pronunciarse más como monosílabo}} === Etimología === Quizá {{etim|endo|ni idea}}.<ref name="raeinforma" /> === {{interjección|es}} === ;1: {{impropia|Interjección que sirve para darle un toque humorístico o [[irónico]] a una frase.}}<ref name="raeinforma">{{referencia|c=pagina|t=@RAEinforma - X "#RAEconsultas Ndeah, en la jerga de los videojuegos, es para algunos deformación de «ni idea» y, para otros, interjección que sirve para darle un toque humorístico o irónico a la frase."|f=2019-3-29|u=https://twitter.com/RAEinforma/status/1111628021591621635|fc=2021-6-5}}</ref> {{ámbito|Argentina|Uruguay}}. {{uso|jerga|irónico}}. === Traducciones === {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> ke5hlcq8s5w4znsx92a8u9o1vgqgpfl 5823497 5823494 2025-07-03T04:36:26Z Tmagc 158167 5823497 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf|ayuda=deah|dnota=esta palabra suele pronunciarse más como monosílabo}} === Etimología === Quizá {{etim|endo|ni idea}}.<ref name="raeinforma" /> === {{interjección|es}} === ;1: {{impropia|Interjección que sirve para darle un toque humorístico o [[irónico]] a una frase.}}<ref name="raeinforma">{{referencia|c=pagina|t=@RAEinforma - X "#RAEconsultas Ndeah, en la jerga de los videojuegos, es para algunos deformación de «ni idea» y, para otros, interjección que sirve para darle un toque humorístico o irónico a la frase."|f=2019-3-29|u=https://twitter.com/RAEinforma/status/1111628021591621635|fc=2021-6-5}}</ref> {{ámbito|Argentina|Uruguay}}. {{uso|jerga|irónico}}. === Traducciones === {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> gejzmchztqtvkhxrvajgi7j0634oekf ndea 0 1000894 5823495 5821915 2025-07-03T04:35:47Z Tmagc 158167 5823495 wikitext text/x-wiki {{destruir|sin referencias que apoyen a esta grafía}} == {{lengua|es}} == {{pron-graf|ac=g|nl=4|v=ndeah|v2=dea}} === {{interjección|es}} === ;1: {{variante|ndeah}}. {{ámbito|Argentina|Uruguay}}. {{uso|jerga}}. == Referencias y notas == <references /> hwaht0o46pbr0ke3g3ikqs4wrxonnem protettore 0 1012531 5823445 5458422 2025-07-03T03:07:27Z Tmagc 158167 5823445 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it|proteˈttoːre}} === Etimología === {{etimología|leng=it|la|protector|alt=prōtēctor}}.<ref>{{Treccani}}</ref> === {{adjetivo|it}} === {{it.adj}} ;1: {{plm|protector}}, [[guardián]]. === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;2: {{plm|proxeneta}}, [[chulo]]. {{uso|leng=it|coloquial}} == Referencias y notas == <references /> mtjy2t8bvmszdqffuoim9yhvtrrwgo9 Módulo:pron-graf 828 1027432 5823308 5821284 2025-07-02T15:34:01Z Raos10 93688 Se agregaron variables CSS para que se adapte correctamente al modo oscuro 5823308 Scribunto text/plain local export = {} local insert = table.insert local concat = table.concat local argumentos_simples = {"d", "ac", "ls", "nl", "ts", "tl", "e", "g", "v", "h", "p", "s", "rima"} local argumentos_nombres = {"silabación", "acentuación", "longitud silábica", "número de letras", "transcripciones silábicas", "transliteraciones", "escrituras alternativas", "grafías alternativas", "variantes", "homófonos", "parónimos", "símbolos", "rimas"} local argumentos_links = {false, false, false, false, false, false, true, true, true, true, true, true, false} local booleano = require("Módulo:sí-no") local obtener_idioma = require("Módulo:lenguas").cod_a_idioma local sortkey = require("Módulo:sortkey").generarSortkey local generar_error = require("Módulo:traza") local pron_auto = { ["es"] = true, ["alc"] = true, ["ang"] = true, ["ar"] = true, ["arn"] = true, ["ast"] = true, ["az"] = true, ["azd"] = true, ["azn"] = true, ["azz"] = true, ["ca"] = true, ["cub"] = true, ["eo"] = true, ["eu"] = true, ["ext"] = true, ["fi"] = true, ["fr"] = true, ["gn"] = true, ["grc"] = true, ["hbo"] = true, ["he"] = true, ["hy"] = true, ["it"] = true, ["kuz"] = true, ["ky"] = true, ["la"] = true, ["naz"] = true, ["nch"] = true, ["nci"] = true, ["ncj"] = true, ["ncl"] = true, ["ncx"] = true, ["ngu"] = true, ["nhc"] = true, ["nhe"] = true, ["nhg"] = true, ["nhi"] = true, ["nhk"] = true, ["nhm"] = true, ["nhn"] = true, ["nht"] = true, ["nhv"] = true, ["nhw"] = true, ["nhx"] = true, ["nhy"] = true, ["nlv"] = true, ["nsu"] = true, ["nuz"] = true, ["pl"] = true, ["pt"] = true, ["ro"] = true, ["ru"] = true, ["sh"] = true, ["sk"] = true, ["tok"] = true, ["te"] = true, ["tr"] = true, ["uk"] = true, ["yua"] = true, } function export.mostrar(frame) local params = { [1] = {alias_de = "fone"}, ["leng"] = {por_defecto = "es", requerido = true}, ["alt"] = {}, ["ayuda"] = {lista = true}, ["ayudaextra"] = {lista = true}, ["ayudanota"] = {lista = true}, ["pron"] = {lista_doble = true}, ["fone"] = {lista_doble = true}, ["fono"] = {lista_doble = true}, ["fgraf"] = {lista_doble = true}, ["fnota"] = {lista_doble = true}, ["audio"] = {lista_doble = true}, ["aunota"] = {lista_doble = true}, ["ac"] = {lista = true}, ["acentuación"] = {alias_de = "ac"}, ["ls"] = {lista = true, tipo = "num"}, ["longitud_silábica"] = {alias_de = "ls"}, ["nl"] = {tipo = "num"}, ["número_letras"] = {alias_de = "nl"}, ["d"] = {lista = true}, ["div"] = {alias_de = "d"}, ["división"] = {alias_de = "d"}, ["dnota"] = {lista = true}, ["ts"] = {lista = true}, ["transcripción silábica"] = {alias_de = "ts"}, ["tsnota"] = {lista = true}, ["tl"] = {lista = true}, ["transliteración"] = {alias_de = "tl"}, ["tlalt"] = {lista = true}, ["tlnum"] = {lista = true}, ["tlnúm"] = {alias_de = "tlnum"}, ["tlnota"] = {lista = true}, ["e"] = {lista = true}, ["ea"] = {alias_de = "e"}, ["escritura alternativa"] = {alias_de = "e"}, ["ealt"] = {lista = true}, ["enum"] = {lista = true}, ["enúm"] = {alias_de = "enum"}, ["enota"] = {lista = true}, ["g"] = {lista = true}, ["ga"] = {alias_de = "g"}, ["grafía alternativa"] = {alias_de = "g"}, ["galt"] = {lista = true}, ["gnum"] = {lista = true}, ["gnúm"] = {alias_de = "gnum"}, ["gnota"] = {lista = true}, ["v"] = {lista = true}, ["variante"] = {alias_de = "v"}, ["valt"] = {lista = true}, ["vnum"] = {lista = true}, ["vnúm"] = {alias_de = "vnum"}, ["vtr"] = {lista = true}, ["vnota"] = {lista = true}, ["h"] = {lista = true}, ["homófono"] = {alias_de = "h"}, ["halt"] = {lista = true}, ["hnum"] = {lista = true}, ["hnúm"] = {alias_de = "hnum"}, ["htr"] = {lista = true}, ["hnota"] = {lista = true}, ["p"] = {lista = true}, ["parónimo"] = {alias_de = "p"}, ["palt"] = {lista = true}, ["pnum"] = {lista = true}, ["pnúm"] = {alias_de = "pnum"}, ["ptr"] = {lista = true}, ["pnota"] = {lista = true}, ["s"] = {lista = true}, ["símbolo"] = {alias_de = "s"}, ["salt"] = {lista = true}, ["snum"] = {lista = true}, ["snúm"] = {alias_de = "snum"}, ["snota"] = {lista = true}, ["rima"] = {lista = true}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) local title_ = mw.title.getCurrentTitle() local title = title_.fullText -- no sirve parent_frame:getTitle() local ns = title_.namespace local LENG = args["leng"]:upper() local leng = args["leng"] local idioma, sk if ns == 0 then idioma = obtener_idioma(leng) sk = sortkey(title, leng, idioma) end --local frame = mw.getCurrentFrame() if args["nl"] then generar_error("nl") end if args["alt"] then generar_error("alt") end if args["e"][1] or args["ts"][1] or args["tsnota"][1] or args["tlnum"][1] or args["enum"][1] or args["gnum"][1] or args["vnum"][1] or args["hnum"][1] or args["vtr"][1] or args["htr"][1] or args["pnum"][1] or args["ptr"][1] or args["s"][1] then generar_error("extra") end if args["pron"][1] and booleano(args["pron"][1][1], true) == false then return nil end local table_markup = {} insert(table_markup, '{|class="pron-graf toccolours" style="float: right;"\n|style="background-color: var(--background-color-neutral, #eaecf0); color: var(--color-base, #202122);" colspan="2"|<span style="font-family: Arial, sans-serif; font-size: 1.5em;">'..(args["alt"] and args["alt"] or title)..'</span>\n') if pron_auto[leng] then args = require("Módulo:generar-pron/"..leng).procesar_pron_args(title, args) end local N = math.max(#args["fone"], #args["fono"]) if N == 0 then insert(table_markup, "|-\n|'''pronunciación'''" .. '\n|<span style="color: var(--color-success, #177860); font-size: 90%; font-style: italic;"> falta [[Wikcionario:Pronunciación|agregar]]</span>[[Categoría:'..LENG..':Palabras sin transcripción fonética]]\n') else for i = 1,9 do if args["fone"][i] or args["fono"][i] then insert(table_markup, '|-\n') if args["pron"][i] and args["pron"][i][1] then insert(table_markup, '|'..'[[Wikcionario:Referencia/'..LENG.."/Pronunciación|'''"..args["pron"][i][1].."''']]"..' ([[Alfabeto Fonético Internacional|AFI]])'..'\n|') else insert(table_markup, '|'..'[[Wikcionario:Referencia/'..LENG.."/Pronunciación|'''pronunciación''']]"..' ([[Alfabeto Fonético Internacional|AFI]])'..'\n|') end for j = 1,9 do local br = false local fone_espacio = false local graf_espacio = false if args["fgraf"][i] and args["fgraf"][i][j] then insert(table_markup, "'''"..args["fgraf"][i][j].."''' ") graf_espacio = true end if args["fone"][i] and args["fone"][i][j] then insert(table_markup, graf_espacio and ' ['..args["fone"][i][j]..']' or '['..args["fone"][i][j]..']') fone_espacio = true br = true end if args["fono"][i] and args["fono"][i][j] then insert(table_markup, fone_espacio and ' /'..args["fono"][i][j]..'/' or '/'..args["fono"][i][j]..'/') br = true end if args["fnota"][i] and args["fnota"][i][j] then insert(table_markup, ' ('..args["fnota"][i][j]..')') br = true end if args["audio"][i] and args["audio"][i][j] then if args["aunota"][i] and args["aunota"][i][j] then insert(table_markup, " "..frame:extensionTag("phonos", frame:extensionTag("small", "''"..args["aunota"][i][j].."''"), {class = "pron-graf", file = args["audio"][i][j], leng = args["leng"]})) else insert(table_markup, " "..frame:extensionTag("phonos", nil, {file = args["audio"][i][j], leng = args["leng"]})) end br = true end if br then insert(table_markup, '<br/>') --salto de línea sin cambiar de fila end end insert(table_markup, '\n') end end end for i,arg in ipairs(argumentos_simples) do local argum = args[arg] local argnombre = argumentos_nombres[i] local argalt = args[arg.."alt"] or {} local argtr = args[arg.."tr"] or {} local argnum = args[arg.."num"] or {} local argnota = args[arg.."nota"] or {} if arg == "rima" and argum[1] then insert(table_markup, "|-\n|'''rima"..(#argum > 1 and "s" or "").."'''\n|[[:Categoría:"..LENG..":Rimas:"..argum[1].."|"..argum[1].."]]".."[[Categoría:"..LENG..":Rimas:"..argum[1].."]]") for i=2,#argum do insert(table_markup, ", [[:Categoría:"..LENG..":Rimas:"..argum[i].."|"..argum[i].."]]".."[[Categoría:"..LENG..":Rimas:"..argum[i].."]]") end insert(table_markup, '\n') elseif arg == "ac" and argum[1] then local t2 = {} insert(table_markup, "|-\n|'''acentuación'''\n|") local acentuacion_tabla = { ['m'] = 'monosílaba', ['a'] = 'aguda', ['l'] = 'llana', ['g'] = 'llana', ['e'] = 'esdrújula', ['s'] = 'sobreesdrújula', ['d'] = 'doble', } for i=1,#argum do if argum[i] == "mente" then argum[i] = "doble" generar_error("mente") end local acento = acentuacion_tabla[argum[i]:sub(1,1)] local acento_cat = acento == "doble" and "con 2 sílabas tónicas" or acento.."s" if acento and sk then insert(t2, acento..'[[Categoría:'..LENG..':Palabras '..acento_cat.."|"..sk..']]') end end insert(table_markup, concat(t2, ", ").."\n") elseif arg == "ls" and argum[1] then local t2 = {} insert(table_markup, "|-\n|'''longitud silábica'''\n|") local l_silabica_tabla = { [1] = 'monosílaba', [2] = 'bisílaba', [3] = 'trisílaba', [4] = 'tetrasílaba', [5] = 'pentasílaba', [6] = 'hexasílaba', [7] = 'heptasílaba', [8] = 'octosílaba', [9] = 'eneasílaba', [10] = 'decasílaba', [11] = 'endecasílaba', [12] = 'dodecasílaba', } for i=1,#argum do local l_silabica = l_silabica_tabla[argum[i]] or argum[i] if sk then if type(l_silabica) == 'number' then insert(t2, tostring(l_silabica)..'[[Categoría:'..LENG..':Palabras con más de doce sílabas'.."|"..sk..']]') else insert(t2, l_silabica..'[[Categoría:'..LENG..':Palabras '..l_silabica..'s'..'|'..sk..']]') end end end insert(table_markup, concat(t2, ", ").."\n") elseif type(argum) == "string" then insert(table_markup, "|-\n|'''"..argnombre.."'''\n|"..argum..'\n') elseif type(argum) == "table" and #argum > 0 then insert(table_markup, "|-\n|'''"..argnombre.."'''\n|") for j,_ in ipairs(argum) do local argval = argumentos_links[i] and ("[["..argum[j]..(argalt[j] and "|"..argalt[j] or "").."]]") or argum[j] insert(table_markup, (j>1 and ",&nbsp;" or "")..argval..(argtr[j] and " ("..argtr[j]..")" or "")..(argnum[j] and " ("..argnum[j]..")" or "")..(argnota[j] and frame:extensionTag("ref", argnota[j]) or "")) end insert(table_markup, '\n') end end insert(table_markup, '|}') insert(table_markup, require("Módulo:TemplateStyles")("Plantilla:pron-graf/styles.css")) return concat(table_markup) end function export.mostrar_(frame) local params = { [1] = {alias_de = "fone"}, ["leng"] = {por_defecto = "es", requerido = true}, ["alt"] = {}, ["ayuda"] = {lista = true}, ["ayudaextra"] = {lista = true}, ["pron"] = {lista_doble = true}, ["fone"] = {lista_doble = true}, ["fono"] = {lista_doble = true}, ["fgraf"] = {lista_doble = true}, ["fnota"] = {lista_doble = true}, ["audio"] = {lista_doble = true}, ["aunota"] = {lista_doble = true}, ["ac"] = {}, ["acentuación"] = {alias_de = "ac"}, ["ls"] = {tipo = "num"}, ["longitud_silábica"] = {alias_de = "ls"}, ["nl"] = {tipo = "num"}, ["número_letras"] = {alias_de = "nl"}, ["d"] = {lista = true}, ["div"] = {alias_de = "d"}, ["división"] = {alias_de = "d"}, ["dnota"] = {lista = true}, ["ts"] = {lista = true}, ["transcripción silábica"] = {alias_de = "ts"}, ["tsnota"] = {lista = true}, ["tl"] = {lista = true}, ["transliteración"] = {alias_de = "tl"}, ["tlalt"] = {lista = true}, ["tlnum"] = {lista = true}, ["tlnúm"] = {alias_de = "tlnum"}, ["tlnota"] = {lista = true}, ["e"] = {lista = true}, ["ea"] = {alias_de = "e"}, ["escritura alternativa"] = {alias_de = "e"}, ["ealt"] = {lista = true}, ["enum"] = {lista = true}, ["enúm"] = {alias_de = "enum"}, ["enota"] = {lista = true}, ["g"] = {lista = true}, ["ga"] = {alias_de = "g"}, ["grafía alternativa"] = {alias_de = "g"}, ["galt"] = {lista = true}, ["gnum"] = {lista = true}, ["gnúm"] = {alias_de = "gnum"}, ["gnota"] = {lista = true}, ["v"] = {lista = true}, ["variante"] = {alias_de = "v"}, ["valt"] = {lista = true}, ["vnum"] = {lista = true}, ["vnúm"] = {alias_de = "vnum"}, ["vtr"] = {lista = true}, ["vnota"] = {lista = true}, ["h"] = {lista = true}, ["homófono"] = {alias_de = "h"}, ["halt"] = {lista = true}, ["hnum"] = {lista = true}, ["hnúm"] = {alias_de = "hnum"}, ["htr"] = {lista = true}, ["hnota"] = {lista = true}, ["p"] = {lista = true}, ["parónimo"] = {alias_de = "p"}, ["palt"] = {lista = true}, ["pnum"] = {lista = true}, ["pnúm"] = {alias_de = "pnum"}, ["ptr"] = {lista = true}, ["pnota"] = {lista = true}, ["s"] = {lista = true}, ["símbolo"] = {alias_de = "s"}, ["salt"] = {lista = true}, ["snum"] = {lista = true}, ["snúm"] = {alias_de = "snum"}, ["snota"] = {lista = true}, ["rima"] = {}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) local title_ = mw.title.getCurrentTitle() local title = title_.fullText -- no sirve parent_frame:getTitle() local ns = title_.namespace local LENG = args["leng"]:upper() local leng = args["leng"] local idioma, sk if ns == 0 then idioma = obtener_idioma(leng) sk = sortkey(title, leng, idioma) end --local frame = mw.getCurrentFrame() if args["pron"][1] and booleano(args["pron"][1][1], true) == false then return nil end local items = {"=== Pronunciación y escritura ===\n"} if pron_auto[leng] then args = require("Módulo:generar-pron/"..leng).procesar_pron_args(title, args) end local N = math.max(#args["fone"], #args["fono"]) if N == 0 then insert(items, '<span style="color: var(--color-success, #177860); font-size: 90%; font-style: italic;"> Si puede, agréguela mediante {{pron-graf}}</span>[[Categoría:'..LENG..':Palabras sin transcripción fonética]]\n') else local tabla = {"{|style='border-spacing: 5px;'"} for i = 1,N do if args["fone"][i] or args["fono"][i] then insert(tabla, '\n|-\n|') if args["pron"][i] and args["pron"][i][1] then insert(tabla, '[[Wikcionario:Referencia/'..LENG.."/Pronunciación|"..args["pron"][i][1].."]]"..' ([[Alfabeto Fonético Internacional|AFI]])'..': ') else insert(tabla, '[[Wikcionario:Referencia/'..LENG.."/Pronunciación|Pronunciación]]"..' ([[Alfabeto Fonético Internacional|AFI]])'..': ') end for j = 1,9 do if (args["fone"][i] and args["fone"][i][j]) or (args["fono"][i] and args["fono"][i][j]) then if j > 1 then insert(tabla, '\n|-\n|') end local fone_espacio = false local graf_espacio = false insert(tabla, "\n|") if args["fgraf"][i] and args["fgraf"][i][j] then insert(tabla, "'''"..args["fgraf"][i][j].."''' ") graf_espacio = true end insert(tabla, "\n|") if args["fone"][i] and args["fone"][i][j] then insert(tabla, graf_espacio and ' ['..args["fone"][i][j]..']' or '['..args["fone"][i][j]..']') fone_espacio = true end if args["fono"][i] and args["fono"][i][j] then insert(tabla, fone_espacio and ' /'..args["fono"][i][j]..'/' or '/'..args["fono"][i][j]..'/') end insert(tabla, "\n|") if args["fnota"][i] and args["fnota"][i][j] then insert(tabla, ' ('..args["fnota"][i][j]..')') end insert(tabla, "\n|") if args["audio"][i] and args["audio"][i][j] then if args["aunota"][i] and args["aunota"][i][j] then insert(tabla, " "..frame:extensionTag("phonos", frame:extensionTag("small", "''"..args["aunota"][i][j].."''"), {class = "pron-graf", file = args["audio"][i][j], leng = args["leng"]})) else insert(tabla, " "..frame:extensionTag("phonos", nil, {file = args["audio"][i][j], leng = args["leng"]})) end end end end end end if #tabla > 1 then insert(items, concat(tabla).."\n|}\n") end end for i,arg in ipairs(argumentos_simples) do local argum = args[arg] local argnombre = argumentos_nombres[i] local argalt = args[arg.."alt"] or {} local argtr = args[arg.."tr"] or {} local argnum = args[arg.."num"] or {} local argnota = args[arg.."nota"] or {} if arg == "rima" and argum and idioma then insert(items, "*Rima: [[:Categoría:"..LENG..":Rimas:"..args["rima"].."|"..args["rima"].."]]".."[[Categoría:"..LENG..":Rimas:"..args["rima"].."]]\n") elseif arg == "ac" and argum then local acentuacion_tabla = { ['m'] = 'monosílaba', ['a'] = 'aguda', ['l'] = 'llana', ['g'] = 'llana', ['e'] = 'esdrújula', ['s'] = 'sobreesdrújula', ['d'] = 'doble', } local acento = argum == "mente" and "doble" or acentuacion_tabla[argum:sub(1,1)] local acento_cat = acento == "doble" and "con 2 sílabas tónicas" or acento.."s" if acento and sk then insert(items, "*Acentuación: "..acento..'[[Categoría:'..LENG..':Palabras '..acento_cat.."|"..sk..']]\n') end elseif arg == "ls" and argum then local l_silabica_tabla = { [1] = 'monosílaba', [2] = 'bisílaba', [3] = 'trisílaba', [4] = 'tetrasílaba', [5] = 'pentasílaba', [6] = 'hexasílaba', [7] = 'heptasílaba', [8] = 'octosílaba', [9] = 'eneasílaba', [10] = 'decasílaba', [11] = 'endecasílaba', [12] = 'dodecasílaba', } local l_silabica = l_silabica_tabla[argum] or argum if sk then if type(l_silabica) == 'number' then insert(items, "*Longitud silábica: "..tostring(l_silabica)..'[[Categoría:'..LENG..':Palabras con más de doce sílabas'.."|"..sk..']]\n') else insert(items, "*Longitud silábica: "..l_silabica..'[[Categoría:'..LENG..':Palabras '..l_silabica..'s'..'|'..sk..']]\n') end end elseif type(argum) == "string" then insert(items, "*"..argnombre..": "..argum..'\n') elseif type(argum) == "table" and #argum > 0 then insert(items, "*"..argnombre..": ") for j,_ in ipairs(argum) do local argval = argumentos_links[i] and ("[["..argum[j]..(argalt[j] and "|"..argalt[j] or "").."]]") or argum[j] insert(items, (j>1 and ",&nbsp;" or "")..argval..(argtr[j] and " ("..argtr[j]..")" or "")..(argnum[j] and " ("..argnum[j]..")" or "")..(argnota[j] and frame:extensionTag("ref", argnota[j]) or "")) end insert(items, '\n') end end --insert(items, '\n') --insert(items, require("Módulo:TemplateStyles")("Plantilla:pron-graf/styles.css")) return concat(items) end return export l96j10vn4ifxqpkfr08acxs1z65d198 Módulo:generar-pron/es 828 1027433 5823493 5710044 2025-07-03T04:31:55Z Tmagc 158167 5823493 Scribunto text/plain --tomado de https://en.wiktionary.org/wiki/Module:es-pronunc --Autores: Benwing2 & Tmagc local export = {} local insert = table.insert local concat = table.concat local m_table = require("Módulo:tabla") local m_prefijos = require("Módulo:generar-pron/es/prefijos") local NO_HIATO = "Desde 1999 se recomienda considerar siempre diptongo, a efectos de acentuación gráfica, la combinación entre vocales cerradas “[[átono|átonas]]” (/iu/, /ui/), o entre vocales cerradas con vocales abiertas ambas “[[átono|átonas]]” (/ua/, /ei/, /io/, etc.). Esta recomendación se transforma en prescripción a partir de la reforma ortográfica de 2010, por lo que muchas palabras que se podían ''escribir'' con hiato deberán escribirse en diptongo. No obstante, esto no implica una proscripción en la pronunciación. [https://www.rae.es/espanol-al-dia/palabras-como-guion-truhan-fie-liais-etc-se-escriben-sin-tilde Más información]." local DOBLE_SEPARACION = "Cuando ciertos prefijos están presentes, la agrupación natural de sílabas (fonética) puede cambiar. Algunos ejemplos son: ''transatlántico'' (trans-at-lán-ti-co en lugar de tran-sa-tlán-ti-co), ''subrayar'' (sub-ra-yar en lugar de su-bra-yar), ''abrogar'' (ab-ro-gar en lugar de a-bro-gar). Para estos casos en el lenguaje escrito se recomienda dividir la palabra agrupando el prefijo, sobre todo cuando influye en la pronunciación de la erre. [https://www.rae.es/dpd/guion#S138414921979090242 Más información]." local DOBLE_VOCAL = "Dos vocales seguidas no pueden separarse nunca a final de línea, formen diptongo, triptongo o hiato. Para palabras con ''h'' intercalada, se actuará como si esta letra muda no existiese. Quedan exceptuadas de esta consideración las palabras compuestas. [https://lema.rae.es/dpd/?key=guion#21 Más información]." local LETRA_HUERFANA = "Por motivos estéticos, debe evitarse dejar una letra huérfana a final de línea. [https://lema.rae.es/dpd/srv/search?key=guion Más información]." local NO_PS = "Las palabras que comienzan por ps-, pt-, pn-, gn- o mn- admiten dos grafías: con la primera consonante (''psicología'', ''gnoseología'') o sin ella (''sicología'', ''noseología''). Mientras que la segunda opción refleja mejor la pronunciación, la primera es preferida en la norma culta. [https://www.rae.es/dpd/g Más información]." local FITOVARIANTES = "Casi todas los términos científicos con el sufijo -fito admiten dos variantes, una llana y la otra esdrújula. Excepciones se pueden encontrar por ejemplo en sínfito, que es un término que ya estaba asentado en griego y en latín y en donde sólo la forma esdrújula es válida. [https://www.rae.es/dpd/-fito Más información]" local IACO = "Las palabras terminadas con el sufijo -iaco admiten dos variantes: una esdrújula con hiato (-íaco, 'i.a.ko) y otra llana con diptongo (-iaco, 'ia.ko). La primera es la preferida en América, mientras que la segunda es más usual en España." local MAYUSCULA_DISCIPLINAS = "En general, los nombres de las disciplinas van en minúscula (“La medicina ha experimentado grandes avances en los últimos años”). Se usa mayúscula en ciertos contextos académicos y en especial cuando están referidas a asignaturas particulares que ofrece una determinada institución (“El profesor de Cálculo Numérico es extraordinario”). [https://www.rae.es/dpd/may%C3%BAsculas Más información]" local MAYUSCULA_TAXONES = "“Se escriben con mayúscula los nombres de los grupos taxonómicos zoológicos y botánicos superiores al género, cuando se usan en aposición: orden Roedores, familia Leguminosas; pero estos mismos términos se escriben con minúscula cuando se usan como adjetivos o como nombres comunes: El castor es un mamífero roedor; Hemos tenido una buena cosecha de leguminosas.” [https://www.rae.es/dpd/may%C3%BAsculas Más información]" local MAYUSCULA_PUNTOS_CARDINALES = "Los puntos cardinales se escriben con minúscula. Sólo se escriben con mayúscula cuando forman parte de un nombre propio." local ORDINALES_COMPUESTOS = "De los ordinales compuestos, los correspondientes a la primera y a la segunda decena se pueden escribir en una o en dos palabras. Si es en una palabra, no puede llevar tilde y el primer compuesto se mantiene invariante (vigesimoprimero, vigesimoprimera, vigésimo primero, o vigésima primera, pero no *vigésimoprimero ni *vigesimaprimera ni *vigésimo primera). A partir de la tarcera decena, sí o sí deberán ser dos palabras. [https://https://www.rae.es/dpd/ordinales Más información]." local PREFIJO_TRANS = "Generalmente, las palabras admiten combinarse con los prefijos trans- o tras-. Algunas excepciones a esto son: 1. Palabras en donde el significado del prefijo es “detrás”, en donde sólo suele admitirse -tras (trastienda) 2. Palabras en donde el segundo elemento empieza con s, en donde sólo suele admitirse -trans (transexual). [https://www.rae.es/dpd/tras- Más información]" --[=[ REVISAR: 16. AGREGAR TABLA CON INFORMACION DE PREFIJOS (ej: transatlántico -> trans-at-lán-ti-co , en lugar de tran-sat-lán-ti-co, que es como lo hace ahora) YA IMPLEMENTADO: 1. Port latest changes to production module. [DONE] 2. Finish work on rhymes and hyphenation. [DONE] 3. Handle <hmp:...> for homophones. [DONE] 4. Don't add comma before phonetic IPA. [DONE] 5. Handle secondary stress, suffixes, etc. in syllabification. [DONE] 6. Need some changes to syllable splitting in consonant clusters. (e.g. 'cum‧min‧gto‧ni‧ta') [DONE] 8. Propagate qualifiers on individual pronun terms to rhymes and hyph. (creo que está) 7. Fix handling of references to correspond to Portuguese module. [DONE] 9. Support raw phonemic/phonetic pronunciations. [DONE] 10. Support overall audio. [DONE] 11. Keep th/ph/kh/gh/tz ([[Ertzaintza]]) together when syllabifying (but not bh due to [[subhumano]], [[subhistoria]], etc.). [DONE] 12. Support <q:...> and <qq:...> on audio. [DONE] 13. Support <a:...> and <aa:...> (using {{a|...}}, left and right) on terms, rhymes, hyphenation, homophones and audio. [DONE] 14. Support # instead of ; as separator between audio file and gloss and make sure it works if gloss has embedded # or ;. [DONE] 15. Use parse_inline_modifiers() in [[Module:parse utilities]]. [DONE] ]=] --[=[ En total consideramos que (a grandes rasgos) hay 6 pron posibles: 1. seseante + yeísta (General) 2. seseante + lleísta (Litoral) 3. seseante + sheísta (CABA) 4. seseante + zheísta (Interior) 5. no seseante + yeísta (España) 6. no seseante + lleísta (España) ]=] local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatchit = m_str.gmatch local strsubrep = m_str.gsub_rep local strsplit = m_str.split local strupper = m_str.upper local strlower = m_str.lower local strucfirst = m_str.ucfirst local strnfd = m_str.toNFD local strnfc = m_str.toNFC local strstrip = m_str.strip local substr = m_str.sub local strlen = m_str.len local strexplode = m_str.explode_utf8 local function strsub(s, a, b) local c, _ = strsubn(s, a, b) return c end --CONVENCION: mayúscula para patrones encerrados entre corchetes, minúscula para todo lo demás local ag = u(0x0301) -- acute = ́ local gr = u(0x0300) -- grave = ̀ local circunflejo = u(0x0302) -- circumflex = ̂ local virgulilla = u(0x0303) -- tilde = ̃ local dieresis = u(0x0308) -- diaeresis = ̈ local ac_primario = u(0x02C8) local ac_secundario = u(0x02CC) local diacritico = ag .. gr .. circunflejo local DIACRITICO = "[" .. diacritico .. "]" local tilde = ag .. gr local TILDE = "[" .. tilde .. "]" local acentos_ipa = ac_primario..ac_secundario local ACENTOS_IPA = "[" .. acentos_ipa .. "]" local divsil = u(0xFFF0) local divsil_fijo = u(0xFFF1) local sepsil = "%-." .. divsil .. divsil_fijo local SEPARADORES_SILABICOS = "[" .. sepsil .. "]" local SALVO_SEPARADORES_SILABICOS = "[^" .. sepsil .. "]" local seppal = "# " local separador_excepto_palabras = diacritico .. acentos_ipa .. sepsil local separador = separador_excepto_palabras .. seppal local SEPARADOR = "[" .. separador .. "]" local TEMP_I = u(0xFFF1) local TEMP_J = u(0xFFF2) local TEMP_U = u(0xFFF3) local TEMP_Y_CONS = u(0xFFF4) local TEMP_Y_VOWEL = u(0xFFF5) local TEMP_QU = u(0xFFF6) local TEMP_QU_CAPS = u(0xFFF7) local TEMP_GU = u(0xFFF8) local TEMP_GU_CAPS = u(0xFFF9) local TEMP_H = u(0xFFFA) local TEMP_Y = u(0xFFFB) local TEMP_W = u(0xFFFC) local TEMP_TCHR = u(0xFFFE) local foot_boundari = "|" local terminador = "#" local comodin_yeista = "ɟ" local comodin_chancho = "ĉ" local comodin_jota = "ħ" local comodin_deshielo = "ĥ" local comodin_thrauna = "ţ" local vocales = "aeiouüAEIOUÜ"..TEMP_Y_VOWEL local VOCAL = "[" .. vocales .. "]" local vocales_tildadas = "áéíóúàèìòùÁÉÍÓÚÀÈÌÒÙ" local VOCAL_TILDADA = "[" .. vocales_tildadas .. "]" local CONS = "[^" .. vocales .. vocales_tildadas .. separador .. "]" local CONS_SALVO_H = "[^" .. vocales .. vocales_tildadas .. separador .. "h]" local CONS_O_SEP_PALABRA = "[^" .. vocales .. vocales_tildadas .. separador_excepto_palabras .. "]" --local T = "[^" .. vocales .. "lrɾjw" .. separador .. "]" -- obstruent or nasal -- Para las notas al pie local vocales_cerradas_atonas = "iu"..TEMP_Y_VOWEL local VOCAL_CERRADA_ATONA = "["..vocales_cerradas_atonas.."]" local vocales_abiertas_atonas = "aeo" local VOCAL_ABIERTA_ATONA = "["..vocales_abiertas_atonas.."]" local VOCAL_GENERAL = "[" .. vocales .. vocales_tildadas .. "]" local PUNTUACION = "[%(%)%[%]%{%}¡!¿?.,;:–—]" local PUNTUACION_EXTRA = "[%(%)%[%]%{%}¡!¿?.,;:–—\"“”„‟‘’«»»«‹››‹'´]" local COMODINES = "[" .. TEMP_I .. TEMP_J .. TEMP_U .. TEMP_Y_CONS .. TEMP_Y_VOWEL .. TEMP_QU .. TEMP_QU_CAPS .. TEMP_GU .. TEMP_GU_CAPS .. TEMP_H .. TEMP_Y .. TEMP_W .. TEMP_TCHR .. comodin_yeista .. comodin_chancho .. comodin_jota .. comodin_deshielo .. comodin_thrauna .. "g" .. "%" .. foot_boundari .. terminador .. "]" local recuperar_comodin = { [TEMP_I] = "i", [TEMP_J] = "i", -- i como semivocal [TEMP_U] = "u", [TEMP_Y_CONS] = "y", [TEMP_Y_VOWEL] = "i", [TEMP_QU] = "qu", [TEMP_QU_CAPS] = "Qu", [TEMP_GU] = "gu", [TEMP_GU_CAPS] = "Gu", [TEMP_H] = "h", -- h que no se aspirada [TEMP_Y] = "i", --sufijos -ay/-ey/-oy/-uy [TEMP_W] = "w̝", -- hueso, huevo, etc. (la otra w ya la procesamos antes) [TEMP_TCHR] = "tchr", [comodin_jota] = "h", -- fake aspirated "h" to real "h" [comodin_chancho] = "t͡ʃ", -- fake "ch" to real "ch" [comodin_yeista] = "ʝ", --phonetic and "ɟ͡ʝ" or "ʝ", -- fake "y" to real "y [comodin_deshielo] = "desh", [comodin_thrauna] = "ʈ͡ʂ", ["g"] = "ɡ", -- U+0067 LATIN SMALL LETTER G → U+0261 LATIN SMALL LETTER SCRIPT G [foot_boundari] = "&#124;", [terminador] = "", } local recuperar_comodin_silabeo = { [TEMP_I] = "i", [TEMP_J] = "i", -- i como semivocal [TEMP_U] = "u", [TEMP_Y_CONS] = "y", [TEMP_Y_VOWEL] = TEMP_Y_VOWEL, [TEMP_QU] = "qu", [TEMP_QU_CAPS] = "Qu", [TEMP_GU] = "gu", [TEMP_GU_CAPS] = "Gu", [TEMP_H] = "h", -- h que no se aspirada [TEMP_Y] = "i", --sufijos -ay/-ey/-oy/-uy [TEMP_W] = "u", -- hueso, huevo, etc. (la otra w ya la procesamos antes) [TEMP_TCHR] = "tchr", [comodin_jota] = "h", -- fake aspirated "h" to real "h" [comodin_chancho] = "ch", -- fake "ch" to real "ch" [comodin_yeista] = "y", --phonetic and "ɟ͡ʝ" or "ʝ", -- fake "y" to real "y [comodin_deshielo] = "desh", [comodin_thrauna] = "tchr", ["ɡ"] = "g", -- AL REVÉS QUE EN LA OTRA TABLA [foot_boundari] = "&#124;", [terminador] = "", } local no_acentuado = m_table.listToSet({ "el", "la", "los", "las", "un", -- artículos "me", "te", "se", "lo", "le", "nos", "os", "les", -- pron. objeto "mi", "mis", "tu", "tus", "su", "sus", -- posesivos "que", "quien", "cuan", "cual", -- pron. relativos "y", "e", "o", "u", "ni", -- conjunciones "de", "del", "a", "al", -- preposiciones y articulos "por", "en", "con", "sin", "tras", -- más preposiciones "mas", --pero "so", --de so pretexto "si", }) -- aislar_diacriticos salvo ñ y ü local function aislar_diacriticos(text) text = strnfd(text) text = strsubn(text, ".[" .. virgulilla .. dieresis .. "]", { ["n" .. virgulilla] = "ñ", ["N" .. virgulilla] = "Ñ", ["u" .. dieresis] = "ü", ["U" .. dieresis] = "Ü", }) return text end local function quitar_diacriticos(text) -- salvo virgulilla y diéresis text = strnfd(text) text = strsubn(text, "[" .. ag .. gr .. circunflejo .. ac_primario .. ac_secundario .. "]", "") return strnfc(text) end -- convert i/u between vowels to glide local vowel_to_glide = { ["i"] = "j", ["u"] = "w" } local vowel_to_glide_silabeo = { ["i"] = TEMP_J, ["u"] = TEMP_W } local tildar = { ["a"] = "á", ["e"] = "é", ["i"] = "í", ["o"] = "ó", ["u"] = "ú", } local quitar_tilde = { ["á"] = "a", ["é"] = "e", ["í"] = "i", ["ó"] = "o", ["ú"] = "u", } local diacritico_a_IPA = { [ag] = ac_primario, [gr] = ac_secundario, [circunflejo] = "" } local pron_abc = {{"a"},{"be","be larga"},{"ce"},{"de"},{"e"},{"efe"},{"ge"},{"hache"},{"i","i latina"}, {"jota"},{"ka"},{"ele"},{"eme"},{"ene"},{"o"},{"pe"},{"cu"},{"erre"},{"ese"},{"te"},{"u"}, {"ve","ve corta","uve"},{"doble ve","doble u","uve doble"},{"equis"},{"i","i griega","ye"},{"zeta"},{"eñe"}} local function normalizar(texto) texto = strlower(texto) texto = aislar_diacriticos(texto) texto = strsubrep(texto, PUNTUACION, " | ") -- convierto lo que delimite fragmentos a los IPA foot boundaries | texto = strsubrep(texto, PUNTUACION_EXTRA, "") -- elimino la puntuación restante que haya quedado texto = strsubrep(texto, "[%-‐]", " ") --los guiones pasan a ser espacios (austro-húngaro, franco-italiano) texto = strsubrep(texto, "%s*|%s*|%s*", " | ") --finalmente, elimino las barras y espacios de más texto = strsubrep(texto, "%s+", " ") texto = strstrip(texto, "[%s|]+") return texto end local function determinar_acentuacion(acento_id) if acento_id then if acento_id == -1 then return "monosílaba" elseif acento_id == 0 then return "doble acentuada" elseif acento_id == 1 then return "aguda" elseif acento_id == 2 then return "llana" elseif acento_id == 3 then return "esdrújula" elseif acento_id >= 4 then return "sobreesdrújula" else return nil end else return nil end end --Convierte los diacríticos a notación IPA local function reemplazar_tildes(w) local silabas = strsplit(w, SEPARADORES_SILABICOS) local L = #silabas local sufijo = nil if L >= 4 and silabas[L-1] == "men" and silabas[L] == "te" then sufijo = {ac_primario.."men", divsil.."te"} silabas[L-1], silabas[L] = nil, nil L = L - 2 end local sustituido = false local sust = false for i,silaba in ipairs(silabas) do silabas[i], sust = strsubb(silaba, "^(.*)(" .. DIACRITICO .. ")(.*)$", function(pre, diacr, post) return diacritico_a_IPA[diacr] .. pre .. post end) sustituido = sustituido or sust end if not sustituido then if L > 1 then if strfind(w, "[^" .. vocales .. "ns]$") or strfind(w, CONS..CONS.."$") then -- las palabras que terminan en doble consonante son agudas a menos que lleven tilde https://www.rae.es/espanol-al-dia/por-que-biceps-se-escribe-con-tilde-si-es-una-palabra-llana-terminada-en-s silabas[L] = ac_primario .. silabas[L] --aguda else silabas[L - 1] = ac_primario .. silabas[L - 1] --grave end else --Si L==1, entonces el monosílabo es tónico ya que no tiene circunflejos silabas[1] = ac_primario .. silabas[1] end end local p = silabas[1] for i,s in ipairs(silabas) do if i > 1 then if strfind(s, ACENTOS_IPA) then p = p .. s else p = p .. divsil .. s end end end if sufijo then return p .. sufijo[1] .. sufijo[2] else return p end end --Se obtiene la longitud silábica, acentuación (hacerlo con la ayuda, no con el original) local function obtener_informacion(w) if type(w) ~= "string" then return nil end local silabas = strsplit(w, SEPARADORES_SILABICOS) local L = #silabas local sufijo = nil if L >= 4 and silabas[L-1] == "men" and silabas[L] == "te" then sufijo = "-men-te" silabas[L-1], silabas[L] = nil, nil L = L - 2 end local acento_id = nil local acento_idx = nil local lleva_tilde = nil for i,silaba in ipairs(silabas) do lleva_tilde = strfind(silaba, "^(.*)(" .. VOCAL_TILDADA .. ")(.*)$") if lleva_tilde then acento_id = L == 1 and -1 or L - i + 1 acento_idx = i break end end if not lleva_tilde then if L == 1 then acento_id = -1 --monosílabo acento_idx = 1 else if strfind(w, "[^" .. vocales .. "ns]$") or strfind(w, CONS..CONS.."$") then -- las palabras que terminan en doble consonante son agudas a menos que lleven tilde https://www.rae.es/espanol-al-dia/por-que-biceps-se-escribe-con-tilde-si-es-una-palabra-llana-terminada-en-s acento_id = 1 -- aguda acento_idx = L else acento_id = 2 -- grave acento_idx = L - 1 end end end if sufijo then --por ahora el único caso contemplado son los adverbios que terminan en -mente return L + 2, determinar_acentuacion(0), "ente" --0 para indicar doble acentuación else return L, determinar_acentuacion(acento_id) end end --Pasos finales al dividir en sílabas (2 puntos de entrada: la función de generar --pronunciación y la que separa en sílabas propiamente dicha) local function separar_en_silabas_final(word) --PASO 0: BUSCAR EN LA TABLA DE PREFIJOS: extraer sílabas conocidas y que no puedan deducirse regularmente (tran, trans) --PASO 1: Divida tras cada grupo de vocales + última consonante que no sea h, o bien entre consonantes que estén --rodeades por vocales, pero sin contar la 'h' (prohibir --> prohi.bir) word = strsubrep(word, "(" .. VOCAL .. DIACRITICO .. "*)(" .. CONS_SALVO_H .. VOCAL .. ")", "%1"..divsil.."%2") word = strsubrep(word, "(" .. VOCAL .. DIACRITICO .. "*" .. CONS .. "+)(" .. CONS .. VOCAL .. ")", "%1"..divsil.."%2") --PASO 2: Vuelva a juntar algunos grupos de consonantes -- Juntar consonantes fricativas y oclusivas con l y con r. A ecepción de dl. word = strsubn(word, "([pbfvkctg])"..divsil.."([lrɾ])", divsil.."%1%2") word = strsubn(word, "d%"..divsil.."([rɾ])", divsil.."d%1") -- swing, switch, etc. word = strsubn(word, "s"..divsil.."w", divsil.."sw") -- Juntar ch, sh, zh, ph, th, dh, fh, kh or gh. NO Juntar bh (subhumano, subhúmedo) word = strsubn(word, "([cszptdfkg])"..divsil.."h", divsil.."%1h") -- Juntar las ll y rr word = strsubn(word, "l"..divsil.."l", divsil.."ll") word = strsubn(word, "r"..divsil.."r", divsil.."rr") -- Juntar tz (([[Ertzaintza]], [[quetzal]], [[hertziano]], palabras Vascas, Nahualt o Alemanas) -- dudo de que sea lo correcto -- word = strsubn(word, "t"..divsil.."z", divsil.."tz") -- PASO 3: Separar tl cuando aparezca al final de una palabra. (Palabras mexicanas como Nahuatl, Popocatepetl, etc.) -- https://catalog.ldc.upenn.edu/docs/LDC2019S07/Syllabification_Rules_in_Spanish.pdf -- https://www.spanishdict.com/guide/spanish-syllables-and-syllabification-rules. -- --> esto está mal, tl no es una sílaba aparte ni siquiera en náhuatl -- word = strsubn(word, "([^"..divsil.."])tl$", "%1"..divsil.."tl") -- PASO 4: separar los hiatos -- vocal abierta + vocal abierta (opcional h) word = strsubrep(word, "([aeoAEO]" .. DIACRITICO .. "*)(h?[aeo])", "%1"..divsil.."%2") -- vocal abierta + vocal tildada word = strsubrep(word, "([aeoAEO]" .. DIACRITICO .. "*)(h?" .. VOCAL .. TILDE .. ")", "%1"..divsil.."%2") -- vocal cerrada tildada + vocal word = strsubn(word, "([iuüyIUÜY]" .. TILDE .. ")(h?"..VOCAL..")", "%1"..divsil.."%2") -- ESto no parece español... -- dos vocales seguidas tildadas WTF???? word = strsubrep(word, "([iuüyIUÜY]" .. TILDE .. ")(h?" .. VOCAL .. TILDE .. ")", "%1"..divsil.."%2") -- ii (como antiincendios, según la RAE tanto 'antincendios' como 'antiincendios' son válidas; 'hawaiiano', 'shiita') word = strsubrep(word, "([iI]" .. DIACRITICO .. "*)(h?i)", "%1"..divsil.."%2") -- uu (calculo que por las dudas, le mandó 'vacuum' de ejemplo, pero eso no es español) word = strsubrep(word, "([uU]" .. DIACRITICO .. "*)(h?u)", "%1"..divsil.."%2") word = strsub(word, SEPARADORES_SILABICOS.."+", divsil) word = strstrip(word, SEPARADORES_SILABICOS.."+") return word end -- FUNCION QUE DIVIDE EN SILABAS (SÓLO PARA UNA PALBRA; SI HAY VARIAS PALABRAS HACERLO DE A UNA POR VEZ POR FAVOR) local function separar_en_silabas(w) if type(w) ~= "string" or strfind(w, "%s") then return nil end local p = normalizar(w) p = strsubn(p, "|", "") p = strsubrep(p, "%s+", divsil_fijo) --cambio espacio normalizado por divisor de sílaba fijo p = strsubn(p, "y(" .. VOCAL .. ")", TEMP_Y_CONS .. "%1") p = strsubn(p, "(" .. CONS .. ")y", "%1" .. TEMP_Y_VOWEL) -- [[slinky]], la y final es como una i; hay que decidir si queremos esto o si siempre hay que pasar ayuda p = strsubn(p, "^y(" .. CONS .. ")", TEMP_Y_VOWEL .. "%1") -- [[yrigoyenismo]] --Cambio tchr por el comodin p = strsubn(p, "tchr", TEMP_TCHR) -- Mantenemos junta la 'sh' cuando se trate de desh- (deshuesar, deshonra, deshecho), en los demás casos la separamos. -- Para hacerlo, cambiamos la h en los segundos casos p = strsubn(p, "^([Dd]es)h", "%1" .. TEMP_H) p = strsubn(p, "([ %-][Dd]es)h", "%1" .. TEMP_H) -- Cambiamos 'qu' y 'gu' -- Dicen que 'qu' va bien reemplazarlo, pero hace agua con 'quietud' p = strsubn(p, "qu(" .. VOCAL .. ")", TEMP_QU .. "%1") p = strsubn(p, "Qu(" .. VOCAL .. ")", TEMP_QU_CAPS .. "%1") p = strsubn(p, "gu(" .. VOCAL .. ")", TEMP_GU .. "%1") p = strsubn(p, "Gu(" .. VOCAL .. ")", TEMP_GU_CAPS .. "%1") --Agregamos glides (paranoia, baiano, abreuense, alauita, Malaui, marihuana, parihuela, antihielo, pelluhuano, náhuatl) --NOTA IMPORTANTE: conviene hacerlo de atrás hacia adelante para que no se generen cosas raras como 'an.tih.ie.lo' p = strsubrep(p, "(.*" .. VOCAL .. DIACRITICO .. "*)(h?)([iu])(" .. VOCAL .. ")",function (v1, h, iu, v2) return v1 .. divsil .. h .. vowel_to_glide_silabeo[iu] .. v2 end) p = strsubrep(p, "(.*" .. VOCAL .. DIACRITICO .. "*" .. "h?".. VOCAL .. DIACRITICO .. "*" .. "h?" .. VOCAL .. DIACRITICO .. "*)(h?" .. VOCAL .. ")",function (a, b) return a .. divsil .. b end) -- parche para [[hexakosioihexekontahexafobia]], para que separe en sioi-he -- Entro a la función que separa ya pre-procesado a formato IPA p = separar_en_silabas_final(p) p = strsubn(p, COMODINES, recuperar_comodin_silabeo) p = strsubn(p, divsil, "-") return strnfc(p) end -- EXPORTAR A IPA. Es decir, ya teniendo el texto re-escrito para facilitar la pronunciación. local function generar_pron(text, phonetic) if type(text) ~= "string" then return {},{} end local distincion_seseo = false local distincion_yeismo = false local distincion_sheismo = false text = normalizar(text) --Comienzo a sustituir --Observación general: el orden en el que sustituimos importa -- Make prefixes unstressed unless they have an explicit stress marker; also make certain -- monosyllabic words (e.g. [[el]], [[la]], [[de]], [[en]], etc.) without stress marks be -- unstressed. local words = strsplit(text, " ") for i, word in ipairs(words) do if word == "y" then words[i] = "i"..circunflejo elseif no_acentuado[word] then words[i] = strsubn(word, "^(.*" .. VOCAL .. ")", "%1" .. circunflejo) --pongo el circunflejo para indicar que no debe haber acentuación end end -- put # at word beginning and end and double ## at text/foot boundary beginning/end text = concat(words, " ") text = strsubn(text, " | ", "# | #") text = "##" .. strsubn(text, " ", "# #") .. "##" --determinar el sonido apropiado para la y -- Nota: sufijos -ay/-ey/-oy/-uy se acentúan, pero no -ai/-ei/-oi/-ui -- Nota: -uy mapea a /uj/ mientras que -ui mapea a /wi/ text, distincion_sheismo = strsubb(text, "y(" .. VOCAL .. ")", comodin_yeista.."%1") -- ɟ -> comodín del yeísmo --Esto no es conveniente hacerlo: no podemos distinguir entre fui y muy si convertimos la y a vocal ahora --text = strsubn(text, "([aeou])y#", "%1" .. TEMP_Y .. "#") -- pongo marca privada por el momento --Necesitamos procesar sh/ch justo acá (para no hacer lío con la x exhausto (??)) text = strsubn(text, "ch", comodin_chancho) -- otro comodín más text = strsubn(text, "#desh", comodin_deshielo) --comodín para preservar 'desh' (deshuesar, etc.) text = strsubn(text, "sh", "ʃ") --reemplazo sh text = strsubn(text, "zh", "ʒ") --reemplazo zh text = strsubn(text, comodin_deshielo, "#desh") --restauro desh text = strsubn(text, "tchr", comodin_thrauna) text = strsubn(text, "#p([stn])", "#%1") -- Saco la p inicial de psicología o pterodáctilo text = strsubn(text, "#[mg]n", "#n") -- Saco la g inicial de gnoseología y la m de mnemónico --tl al final de la palabra text = strsubn(text, "tl#", "t#") --x text = strsubn(text, "#x", "#s") -- reemplazo la x inicial: xenofobia, xilófono, etc. text = strsubn(text, "x", "ks") --> reemplazo las demás x: excusa, eximir, etc. --c, g, q text, distincion_seseo = strsubb(text, "c([ie])", "θ" .. "%1") -- Busco si hay ceceos y los sustituyo. ¿Por qué habían puesto la z? text = strsubn(text, "g([iey])", "x%1") -- must happen after handling of x above text = strsubn(text, "gu([ie])", "g%1") text = strsubn(text, "gü([ie])", "gu%1") text = strsubn(text, "ng([^aeiouüwhlr#])", "n%1") -- [[Bangkok]], [[ángstrom]], [[electroswing]], no aplica para [[branding]] (hay que acentuarla manualmente) text = strsubn(text, "qu([ie])", "k%1") text = strsubn(text, "ü", "u") -- [[Düsseldorf]], [[hübnerita]], obsolete [[freqüentemente]], etc. text = strsubn(text, "q", "k") -- [[quark]], [[Qatar]], [[burqa]], [[Iraq]], etc. -- map various consonants to their phoneme equivalent text = strsubn(text, "[cjñrv]", {["c"]="k", ["j"]="x", ["ñ"]="ɲ", ["r"]="ɾ", ["v"]="b" }) -- ([[hielo]], [[enhiesto]], [[deshielo]], ...) local word_initial_hi, syl_initial_hi, initial_hi text, word_initial_hi = strsubb(text, "#h?[iy](" .. VOCAL .. ")", "#j%1") text, syl_initial_hi = strsubb(text, "(" .. CONS .. SEPARADORES_SILABICOS .. "*)h[iy](" .. VOCAL .. ")", "%1j%2") initial_hi = word_initial_hi or syl_initial_hi -- ([[huevo]], [[deshuesar]]) text = strsubb(text, "(" .. CONS_O_SEP_PALABRA .. SEPARADORES_SILABICOS .. "*)hu(" .. VOCAL .. ")", "%1" .. TEMP_W .. "%2") -- sustituyo la "ll" final (ej: [[krill]]) text = strsubn(text, "ll#", "l#") --Busco si hay algún posible lleísmo text, distincion_yeismo = strsubb(text, "ll", "ʎ") --sustituyo y busco lleísmos if distincion_yeismo then distincion_sheismo = true end --Sustituyo rr y lr por r ¿no falta buscar el separador silábico en lr y sr? text = strsubn(text, "ɾɾ", "r") text = strsubn(text, "([#lnsθ])ɾ", "%1r") --([[alrededor]], [[malrotar]]), nr ([[enriquecer]], [[sonrisa]], etc.), sr ([[Israel]], [[desregular]], etc.), zr ([[Azrael]], [[cruzrojista]]), rr text = strsubn(text, "nn", "N") --doble n (ennoblecer) ¿por qué una N grande en lugar de meter un separador silábico? text = strsubn(text, "bb", "B") --doble b (subbase) ¿por qué una B grande en lugar de meter un separador silábico? text = strsubn(text, "(" .. CONS .. ")%1", "%1") -- elimino consonantes dobles [[Addis Abeba]], [[cappa]], [[descender]], [[crackear]] text = strsubn(text, "sθ", "θ") -- elimino sz como en [[fascinante]] -- restablezco las consonantes dobles, MUY OSCURO ESTO text = strsubn(text, "N", "nn") text = strsubn(text, "B", "bb") --sustitución de oclusivas (T) cuando se juntan con ptk --> esta parte no tiene sentido --local voice_stop = { ["p"] = "b", ["t"] = "d", ["k"] = "g" } --text = strsubn(text, "t(" .. SEPARADOR .. "*[sθ])", "!%1") -- eximir -ts-, -tz- --text = strsubn(text, "([ptk])(" .. SEPARADOR .. "*" .. T .. ")", function(stop, after) return voice_stop[stop] .. after end) --text = strsubn(text, "!", "t") -- recuperar -ts-, -tz- text = strsubn(text, "n([# .]*[bpm])", "m%1") --nb, bp, nm por mb, mp, mm (ejemplo: enviar, inmoral, etc.) text = strsubrep(text, "(.*" .. VOCAL .. DIACRITICO .. "*" .. "h?".. VOCAL .. DIACRITICO .. "*" .. "h?" .. VOCAL .. DIACRITICO .. "*)(h?" .. VOCAL .. ")",function (a, b) return a .. divsil .. b end) -- parche para [[hexakosioihexekontahexafobia]], para que separe en sioi-he -- i and u between vowels -> consonant-like substitutions: [[paranoia]], [[baiano]], [[abreuense]], [[alauita]], -- [[Malaui]], etc.; also with h, as in [[marihuana]], [[parihuela]], [[antihielo]], [[pelluhuano]], [[náhuatl]], -- etc. Add .* at the beginning so we go right-to-left, in the case of [[hawaiiano]] -> ha.wai.iano. text = strsubrep(text, "(.*" .. VOCAL .. DIACRITICO .. "*h?)([iu])(" .. VOCAL .. ")", function (v1, iu, v2) return v1 .. vowel_to_glide[iu] .. v2 end ) -- sustituyo la Y vocálica en préstamos como [[slinky]] -> /slin.ki/, debo hacerlo antes de separar en silabas ; hay que decidir si queremos esto o si siempre hay que pasar ayuda text = strsubn(text, "("..CONS..")[yY]", "%1i") text = strsubn(text, "("..SEPARADOR..")[yY]", "%1i") -- switch -> swich text = strsubn(text, "t".."("..SEPARADORES_SILABICOS.."?"..comodin_chancho..")", "%1") words = strsplit(text, "[#(%s)]+") local ac_words = {} for _,word in ipairs(words) do if #word > 0 then if strfind(word, "|") then insert(ac_words, word) else insert(ac_words, reemplazar_tildes(separar_en_silabas_final(word))) end end end text = concat(ac_words, " ") text = strsubn(text, " | ", "# | #") text = "##" .. strsubn(text, " ", "# #") .. "##" text = strsubn(text, "h", "") --sacar la h muda (recién acá puedo hacerlo; la necesito para determinar la acentuación cf. [[ndeah]]) --diphthongs; do not include TEMP_Y here text = strsubn(text, "i([aeou])", "j%1") text = strsubn(text, "u([aeio])", "w%1") text = strsubn(text, "([aeiou])y", "%1j") --text = strsubn(text, TEMP_Y, "i") -- -ay/-ey/-oy/-uy local hay_z = false text, hay_z = strsubb(text, "z", "θ") distincion_seseo = distincion_seseo or hay_z -- suppress syllable mark before IPA stress indicator text = strsubn(text, "%.(" .. ACENTOS_IPA .. ")", "%1") --make all primary stresses but the last one be secondary text = strsubrep(text, ac_primario.."(.+)"..ac_primario, ac_secundario.."%1"..ac_primario) --phonetic transcription --> más fino, lo que se escribe entre [] corchetes if phonetic then -- θ, s, f before voiced consonants local voiced = "mnɲbd"..comodin_yeista.."gʎ" .. TEMP_W local r_cluster = "ɾr" local tovoiced = { ["θ"] = "θ̬", --["s"] = "z", --no existe tal cosa --["f"] = "v", --no existe tal cosa } local function voice(sound, following) return tovoiced[sound] .. following end --text = strsubn(text, "([θs])(" .. SEPARADOR .. "*[" .. voiced .. r .. "])", voice) --mal --text = strsubn(text, "(f)(" .. SEPARADOR .. "*[" .. voiced .. "])", voice) --mal text = strsubn(text, "([θ])(" .. SEPARADOR .. "*[" .. voiced .. r_cluster .. "])", voice) --única sustitución que tiene sentido -- aproximantes local stop_to_fricative = {["b"] = "β", ["d"] = "ð", [comodin_yeista] = "ʝ", ["g"] = "ɣ"} local fricative_to_stop = {["β"] = "b", ["ð"] = "d", ["ʝ"] = comodin_yeista, ["ɣ"] = "g"} text = strsubn(text, "[bd"..comodin_yeista.."g]", stop_to_fricative) --convierto todo a fricativa text = strsubn(text, "([mnɲ]" .. SEPARADOR .. "*)([βɣ])", --salvo las precedidas por m,n,ng (convierto de nuevo) function(nasal, fricative) return nasal .. fricative_to_stop[fricative] end ) text = strsubn(text, "([lʎmnɲ]" .. SEPARADOR .. "*)([ðʝ])", --salvo las precedidas por lm,ln,lng, (convierto de nuevo) function(nasal_l, fricative) return nasal_l .. fricative_to_stop[fricative] end ) text = strsubn(text, "(##" .. ACENTOS_IPA .. "*)([βɣðʝ])", --salvo las sílabas acentuadas (convierto de nuevo) function(stress, fricative) return stress .. fricative_to_stop[fricative] end ) text = strsubn(text, "[td]", {["t"] = "t̪", ["d"] = "d̪"}) --dentalización -- nasal assimilation before consonants local labiodental, dentialveolar, dental, alveolopalatal, palatal, velar = "ɱ", "n̪", "n̟", "nʲ", "ɲ", "ŋ" local nasal_assimilation = { ["f"] = labiodental, ["t"] = dentialveolar, ["d"] = dentialveolar, ["θ"] = dental, [comodin_chancho] = alveolopalatal, ["ʃ"] = alveolopalatal, ["ʒ"] = alveolopalatal, [comodin_yeista] = palatal, ["ʎ"] = palatal, ["k"] = velar, ["x"] = velar, ["g"] = velar, } text = strsubn(text, "n(" .. SEPARADOR .. "*)(.)", function(stress, following) return (nasal_assimilation[following] or "n") .. stress .. following end) -- lateral assimilation before consonants text = strsubn(text, "l(" .. SEPARADOR .. "*)(.)", function(stress, following) local l = "l" if following == "t" or following == "d" then -- dentialveolar l = "l̪" elseif following == "θ" then -- dental l = "l̟" elseif following == comodin_chancho or following == "ʃ" then -- alveolopalatal l = "lʲ" end return l .. stress .. following end) --semivowels text = strsubn(text, "([aeouãẽõũ][iĩ])", "%1̯") text = strsubn(text, "([aeioãẽĩõ][uũ])", "%1̯") -- voiced fricatives are actually approximants text = strsubn(text, "([βðɣ])", "%1̞") end -- final conversions text = strsubn(text, COMODINES, recuperar_comodin) text = strsubn(text, divsil, ".") text = strnfc(text) local pron = {} local fone = {} if distincion_seseo then local seseante = strsubn(text, "θ", "s") if distincion_yeismo then for i=1,6 do pron[i] = {} fone[i] = {} end pron[1][1], fone[1][1] = "seseante, yeísta", strsubn(seseante, "ʎ", "ʝ") pron[2][1], fone[2][1] = "seseante, no yeísta", seseante pron[3][1], fone[3][1] = "seseante, sheísta", strsubn(seseante, "[ʎʝ]", "ʃ") pron[4][1], fone[4][1] = "seseante, zheísta", strsubn(seseante, "[ʎʝ]", "ʒ") pron[5][1], fone[5][1] = "no seseante, yeísta", strsubn(text, "ʎ", "ʝ") pron[6][1], fone[6][1] = "no seseante, no yeísta", text elseif distincion_sheismo then for i=1,4 do pron[i] = {} fone[i] = {} end pron[1][1], fone[1][1] = "seseante, no sheísta", seseante pron[2][1], fone[2][1] = "seseante, sheísta", strsubn(seseante, "ʝ", "ʃ") pron[3][1], fone[3][1] = "seseante, zheísta", strsubn(seseante, "ʝ", "ʒ") pron[4][1], fone[4][1] = "no seseante", text else for i=1,2 do pron[i] = {} fone[i] = {} end pron[1][1], fone[1][1] = "seseante", seseante pron[2][1], fone[2][1] = "no seseante", text end else if distincion_yeismo then for i=1,4 do pron[i] = {} fone[i] = {} end pron[1][1], fone[1][1] = "yeísta", strsubn(text, "ʎ", "ʝ") pron[2][1], fone[2][1] = "no yeísta", text pron[3][1], fone[3][1] = "sheísta", strsubn(text, "[ʎʝ]", "ʃ") pron[4][1], fone[4][1] = "zheísta", strsubn(text, "[ʎʝ]", "ʒ") elseif distincion_sheismo then for i=1,3 do pron[i] = {} fone[i] = {} end pron[1][1], fone[1][1] = "no sheísta", text pron[2][1], fone[2][1] = "sheísta", strsubn(text, "ʝ", "ʃ") pron[3][1], fone[3][1] = "zheísta", strsubn(text, "ʝ", "ʒ") else pron[1] = {} fone[1] = {} pron[1][1], fone[1][1] = "pronunciación", text end end return pron, fone end -- Punto de entrada externo, recibe el título de página y los argumentos de plantilla function export.procesar_pron_args(titulo, args) local tit = titulo local vino_ayuda, ss_ if #args["ayuda"] < 1 then args["ayuda"][1] = tit else vino_ayuda = true end if #args["fone"] < 1 and #args["fono"] < 1 then if #titulo == 1 then if titulo >= "a" and titulo <= "z" then args["ayuda"] = pron_abc[string.byte(titulo) - 96] args["tl"] = args["ayuda"] elseif titulo >= "A" and titulo <= "Z" then args["ayuda"] = pron_abc[string.byte(titulo) - 64] args["tl"] = args["ayuda"] end elseif titulo == "ñ" or titulo == "Ñ" then args["ayuda"] = pron_abc[27] args["tl"] = args["ayuda"] end local A = #args["ayuda"] local j = 1 -- indice de la ayuda local k = 1 -- cantidad de pronunciaciones insertadas (máximo 9) while k <= 9 and j <= A do local pron, fone = generar_pron(args["ayuda"][j], true) for i,_ in ipairs(pron) do insert(args["pron"], pron[i]) insert(args["fone"], fone[i]) k = k + 1 if k > 9 then break end end if args["ayudanota"][j] then args["fnota"][j] = {args["ayudanota"][j]} end j = j + 1 end else require("Módulo:traza")("es-pron") for i, _ in ipairs(args["pron"]) do if args["pron"][i] and args["pron"][i][1] then local c = args["pron"][i][1]:sub(1,1) local cc = args["pron"][i][1]:sub(1,2) local cccc = args["pron"][i][1]:sub(1,4) local cccccc = args["pron"][i][1]:sub(1,6) if cc == 'se' then args["pron"][i][1] = 'seseante' elseif cccccc == 'no ses' or cccc == 'dist' then args["pron"][i][1] = 'no seseante' elseif cc == 'ye' then args["pron"][i][1] = 'yeísta' elseif cccc == 'no ye' then args["pron"][i][1] = 'no yeísta' elseif cc == 'll' then args["pron"][i][1] = 'lleísta' elseif cc == 'sh' then args["pron"][i][1] = 'sheísta' elseif cc == 'zh' then args["pron"][i][1] = 'zheísta' elseif cccc == 'riop' then args["pron"][i][1] = 'rioplatense' end end end end if not strfind(args["ayuda"][1], VOCAL_GENERAL) then return args end if not args["rima"][1] then local palabras = strsplit(args["ayuda"][1], "%s+") local rims = {} local _, fono = generar_pron(palabras[#palabras], false) for _,f in ipairs(fono) do local rim = f[1] rim = strsub(rim, "^.*"..ac_primario.."(.-)$", "%1") rim = strsub(rim, ".-".."("..VOCAL_GENERAL..".*"..")".."$", "%1") if rim and rim ~= "" then rims[rim] = true end end for rim,v in pairs(rims) do insert(args["rima"], rim) end end if strfind(args["ayuda"][1], "%s") then return args end if #args["d"] < 1 and #titulo > 1 and titulo ~= "ñ" and titulo ~= "Ñ" then if not args["ls"][1] and not args["ac"][1] and #titulo > 1 then local ls = {} local ac = {} for _,a in ipairs(args["ayuda"]) do ss_ = separar_en_silabas(a) local lon, ace = obtener_informacion(ss_) ls[lon] = true ac[ace] = true end for lon,_ in pairs(ls) do insert(args["ls"], lon) end for ace,_ in pairs(ac) do insert(args["ac"], ace) end end -- obtenida la “información” de la palabra en base a la “ayuda”, determino cómo mostrar la grafía original if not vino_ayuda then -- situación normal -- Notas sobre división en sílabas... local letras = strexplode(tit) local prefijo = "" local pref_idx = 0 for i,c in ipairs(letras) do if i > 5 then break end prefijo = prefijo .. c if m_prefijos[prefijo] then pref_idx = i end end if pref_idx >= 2 then if not args["dnota"][1] then args["dnota"][1] = DOBLE_SEPARACION end end args["d"][1] = strsub(separar_en_silabas(args["ayuda"][1]), TEMP_Y_VOWEL, "y") -- parche, debo hacerlo después para evitar que clasifique como agudas las palabras que terminan en y vocálica ([[slinky]]) -- grafías if strfind(args["ayuda"][1], "^p[stn]") or strfind(args["ayuda"][1], "^[mg]n") then if #args["g"] == 0 then local no_ps = args["ayuda"][1]:sub(2) insert(args["g"], no_ps) insert(args["gnota"], NO_PS) end elseif args["ayudaextra"][1] == "mpc" then if not args["g"][1] then args["g"][1] = strsubn(args["ayuda"][1], "^[a-zA-ZÀ-ž]", function(c) return strfind(c, "%u") and strlower(c) or strupper(c) end) args["gnota"][1] = MAYUSCULA_PUNTOS_CARDINALES end elseif args["ayudaextra"][1] == "mt" then if not args["g"][1] then args["g"][1] = strsubn(args["ayuda"][1], "^[a-zA-ZÀ-ž]", function(c) return strfind(c, "%u") and strlower(c) or strupper(c) end) args["gnota"][1] = MAYUSCULA_TAXONES end elseif args["ayudaextra"][1] == "md" then if not args["g"][1] then args["g"][1] = strsubn(args["ayuda"][1], "^[a-zA-ZÀ-ž]", function(c) return strfind(c, "%u") and strlower(c) or strupper(c) end) args["gnota"][1] = MAYUSCULA_DISCIPLINAS end elseif args["ayudaextra"][1] == "ocespacio" then if not args["g"][1] then if strfind(args["ayuda"][1], "^([%S]+[cs]im)[oa][%S]+$") then --decimoprimero, decimosegundo, etc. pero también decimaprimera (subestándar pero existe) args["g"][1] = strsubn(args["ayuda"][1], "^([%S]+[cs]im)[oa]([%S]+)([oa]s?)$", function(a, b, c) return strsub(a,"e([sc]im)","é%1")..c.." "..(b == "ctav" and "o"..b or b)..c end) else args["g"][1] = strsubn(args["ayuda"][1], "^([%S]+[cs]im)[oa]s?%s+([%S]+)([oa]s?)$", function(a, b, c) return strsub(a, "[áéíóú]", quitar_tilde).."o"..b..c end) end args["gnota"][1] = ORDINALES_COMPUESTOS end elseif args["ayudaextra"][1] == "ocgénero" then if not args["g"][1] then args["g"][1] = strsubn(args["ayuda"][1], "^(.-[eé][sc]im)([oa])(.-)$", function(a, b, c) return b == "o" and a.."a"..c or a.."o"..c end) args["gnota"][1] = ORDINALES_COMPUESTOS end end -- variantes if strfind(args["d"][1], VOCAL..SEPARADORES_SILABICOS.."fi"..SEPARADORES_SILABICOS.."to".."$") then if not args["v"][1] then args["v"][1] = strsubn(args["ayuda"][1], "("..VOCAL..")".."fito$", function(v) return tildar[v].."fito" end) args["vnota"][1] = FITOVARIANTES end elseif strfind(args["d"][1], VOCAL_TILDADA..SEPARADORES_SILABICOS.."fi"..SEPARADORES_SILABICOS.."to".."$") then if not args["v"][1] then args["v"][1] = strsubn(args["ayuda"][1], "("..VOCAL_TILDADA..")".."fito$", function(v) return quitar_tilde[v].."fito" end) args["vnota"][1] = FITOVARIANTES end elseif strfind(args["d"][1], "[ií]"..SEPARADORES_SILABICOS.."?".."a"..SEPARADORES_SILABICOS.."co".."$") then if not args["v"][1] then args["v"][1] = strsubn(args["ayuda"][1], "([ií]aco)$", function(v) return v == "iaco" and "íaco" or "iaco" end) args["vnota"][1] = IACO end elseif strfind(args["ayuda"][1], "^tran?s") and args["ayudaextra"][1] and (args["ayudaextra"][1] == "trans" or args["ayudaextra"][1] == "tras") then insert(args["v"], strsub(args["ayuda"][1], "^(tra)(n?)(s)", function(a, b, c) return b == "n" and "tras" or "trans" end)) insert(args["vnota"], PREFIJO_TRANS) end if #args["dnota"] == 0 then if strfind(args["d"][1], "[^qQgG]"..VOCAL_CERRADA_ATONA.."h?"..VOCAL_CERRADA_ATONA) or strfind(args["d"][1], "[^qQgG]"..VOCAL_CERRADA_ATONA.."h?"..VOCAL_ABIERTA_ATONA) then --ignorar que, qui, gue, gui insert(args["dnota"], NO_HIATO) elseif strfind(args["d"][1], SEPARADORES_SILABICOS..VOCAL_GENERAL..SEPARADORES_SILABICOS) or strfind(args["d"][1], "^"..VOCAL_GENERAL..SEPARADORES_SILABICOS) or strfind(args["d"][1], SEPARADORES_SILABICOS..VOCAL_GENERAL.."$") then insert(args["dnota"], LETRA_HUERFANA) elseif strfind(args["d"][1], VOCAL_GENERAL.."h?"..SEPARADORES_SILABICOS.."h?"..VOCAL_GENERAL) then insert(args["dnota"], DOBLE_VOCAL) end end else -- palabra extranjera, vino con ayuda --> veo cómo quedaría mejor local tit_sombra = quitar_diacriticos(tit) local ss_ayuda = quitar_diacriticos(ss_) local ss = tit local j0 = 0 -- desde dónde debería buscar la próxima coincidencia de letras while true do local i = strfind(ss_ayuda, "[a-zA-ZÀ-ž]%-[a-zA-ZÀ-ž]") if not i or i < 1 then break end local a, b = substr(ss_ayuda, i, i), substr(ss_ayuda, i+2, i+2) local ab = a..b local j = strfind(tit_sombra, ab, j0) -- veo si encuentro la separación if j then -- Si aparece en el título, entonces inserto separador ahí miemo tit_sombra = substr(tit_sombra, 1, j).."-"..substr(tit_sombra, j+1) ss = substr(ss, 1, j).."-"..substr(ss, j+1) j0 = j+2 -- incremento dos: por la primera letra y por el guion else --Sino, veo si al menos coincide con una de las dos letras local k = strfind(tit_sombra, a, j0) or math.huge local l = strfind(tit_sombra, b, j0) or math.huge if k < l and k >= 1 then tit_sombra = substr(tit_sombra, 1, k).."-"..substr(tit_sombra, k+1) ss = substr(ss, 1, k).."-"..substr(ss, k+1) j0 = k+2 elseif l < k and l >= 2 then tit_sombra = substr(tit_sombra, 1, l-1).."-"..substr(tit_sombra, l) ss = substr(ss, 1, l-1).."-"..substr(ss, l) j0 = l+1 -- en este caso se agrega sólo el guion porque la letra considerada es la segunda end end ss_ayuda = substr(ss_ayuda, i+2) -- trunco la ayuda para obtener la siguiente separación end --junto sílabas que sólo tengan consonantes ss = "-"..ss.."-" ss = strsubrep(ss, "("..SEPARADORES_SILABICOS..CONS.."+)"..SEPARADORES_SILABICOS.."("..SALVO_SEPARADORES_SILABICOS.."-"..VOCAL_GENERAL..")", "%1%2") ss = strsubrep(ss, "("..SEPARADORES_SILABICOS..SALVO_SEPARADORES_SILABICOS.."-)"..SEPARADORES_SILABICOS.."("..CONS.."+"..SEPARADORES_SILABICOS..")", "%1%2") -- limpio los separadores de más ss = strsubn(ss, SEPARADORES_SILABICOS .. "+", "-") ss = strstrip(ss, SEPARADOR) args["d"][1] = ss if #args["dnota"] == 0 then if strfind(args["d"][1], SEPARADORES_SILABICOS.."[a-zA-ZÀ-ž]"..SEPARADORES_SILABICOS) or strfind(args["d"][1], "^".."[a-zA-ZÀ-ž]"..SEPARADORES_SILABICOS) or strfind(args["d"][1], SEPARADORES_SILABICOS.."[a-zA-ZÀ-ž]".."$") then insert(args["dnota"], LETRA_HUERFANA) elseif strfind(args["d"][1], VOCAL_GENERAL.."h?"..SEPARADORES_SILABICOS.."h?"..VOCAL_GENERAL) then insert(args["dnota"], DOBLE_VOCAL) end end end end return args end return export ap59vgw88bkr56kgt77ef33x2xra3k8 Plantilla:trad-arriba/estilo.css 10 1028780 5823303 5823178 2025-07-02T15:10:38Z Tmagc 158167 5823303 sanitized-css text/css .fakelinks { color: var(--color-progressive, #0645ad); } .trad-arriba.mw-collapsible-toggle { padding: 2px; background-clip: content-box; background-color: var(--background-color-interactive, #e0e0e0); border-style: solid; border-color: black; border-width: thin; text-align: center; cursor: pointer; } .trad-arriba.mw-collapsible-toggle:hover { text-decoration: underline; background-color: var(--background-color-interactive--hover, #f0f0f0); } .trad-arriba .mw-collapsible-toggle .up, .trad-arriba.mw-collapsed .mw-collapsible-toggle .down { display: none; } .trad-arriba .mw-collapsible-toggle .down, .trad-arriba.mw-collapsed .mw-collapsible-toggle .up { display: inline; } .caja-responsiva{ padding: 5px; background-clip: content-box; background-color: var(--background-color-interactive-subtle, #f4f4f4); border-style: solid; border-color: black; border-width: thin; column-count: 4; gap:25px; } .caja-responsiva ul, ol, dl{ margin-top: 0; margin-bottom: 0; } .caja-responsiva li{ word-break: break-word; break-inside: avoid-column; } @media screen and (min-width: 1200px) and (max-width: 1600px) { .caja-responsiva { column-count: 3; } } @media screen and (min-width: 800px) and (max-width: 1200px) { .caja-responsiva { column-count: 2; } } @media screen and (max-width: 800px) { .caja-responsiva { column-count: 1; } } l7o2kodda3oczjxlm12xxnrm4jgtjkl Módulo:auto cat 828 1029409 5823312 5823099 2025-07-02T16:06:57Z Raos10 93688 Se agregaron variables CSS para que se adapte correctamente al modo oscuro 5823312 Scribunto text/plain local export = {} local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local strexplode = m_str.explode_utf8 local strfind = m_str.find local strmatch = m_str.match local strsub = m_str.gsub local strsplit = m_str.split local strlower = m_str.lower local strupper = m_str.upper local strucfirst = m_str.ucfirst local strlcfirst = m_str.lcfirst local substr = m_str.sub local strlen = m_str.len local m_leng = require("Módulo:lenguas") local m_nombres = mw.loadData("Módulo:lenguas/nombre_a_cod") local WIKCIONARIO = 1 local COD = 2 local SWADESH = 3 local TRADUCCIONES = 4 local RIMAS = 5 local PRON_GRAF = 6 local ETIMOLOGIA = 7 local GRAMATICA = 8 local CONTEXTO = 9 local LENGUAS = 10 local PLANTILLAS = 11 local MANTENIMIENTO = 12 local POR_IDIOMA = 13 local USUARIOS = 14 local ESCRITURAS = 15 local function obtener_alfabeto(args) -- por el momento, si no está standardChars, entonces no genero el alfabeto. -- En un futuro, podría hacer que genere el alfabeto que provee directamente el script, -- pero hay que implementar la función que devuelva eso porque la que está ahora mismo devuelve un rango de caracteres en regex if not args["idioma"] or not args["idioma"].standardChars then return "" end local ignorar_script = {["Brai"] = true, ["Sgnw"] = true} local abc = {} if type(args["idioma"].standardChars) == "string" then abc[1] = args["idioma"].standardChars else local m_sc = require("Módulo:scripts") for script in args["idioma"][4]:gmatch("([^,]+)%s*,?%s*") do -- tomo todos los scripts que haya, y para cada uno busco el alfabeto if script == "All" then return "" end if not ignorar_script[script] then local chars = m_sc.getByCode(script):getCharacters() script_ = args["idioma"].standardChars[script] if script_ then insert(abc, strexplode(strupper(script_))) end end end end local t = {} for _,alfabeto in ipairs(abc) do if alfabeto then local mem = {["-"] = true} --ignoro el guion porque eso es parte de los regex en el caso de los alfabetos obtenidos directo del script insert(t, "<div style=\"font-size:90%; text-align:center\">\n") insert(t, "{|class=\"plainlinks\" align=\"center\" style=\"padding:3px 15px 3px 15px;\"\n") insert(t, "|style=\"text-align: center; font-weight:bold; font-size:100%; padding-left:15px; padding-right:15px\"|\n") local pg = args["pagename"] for i,c in ipairs(alfabeto) do if not mem[c] then mem[c] = true insert(t, "["..tostring(mw.uri.canonicalUrl("Categoría:"..pg, "from="..c)).." "..c.."]&nbsp;&nbsp;\n") end end insert(t, "|}\n</div>\n") end end return concat(t) end local function generar_titulo(texto, args) local t = {} insert(t, "<div style=\"background-color: var(--background-color-neutral, #eaecf0); color: var(--color-base, #202122); border:1px dotted var(--border-color-content-added, #a3d3ff); padding:8px; width:95%; margin:0 auto;\">\n") if texto then if args["Idioma"] then insert(t, "<div style=\"font-size:110%; text-align:center\">"..args["Idioma"]..": "..texto) else insert(t, "<div style=\"font-size:110%; text-align:center\">"..texto) end if args["oculta"] then insert(t, "__HIDDENCAT__<br>Esta es una categoría de mantenimiento que no se muestra directamente en los artículos. Si deseas habilitar la visualización de estas categorías, puedes hacerlo en [[Especial:Preferencias|tus preferencias]].") end insert(t, "</div>\n") end return concat(t)..obtener_alfabeto(args).."</div>\n" end local function generar_aviso(tipo, texto) local header = { ["info"] = "<table style=\"aviso\" class=\"plainlinks ambox ambox-notice\">" } local imagen = { ["info"] = "[[Imagen:Emblem-notice.svg]]" } return header[tipo].."<tr><td class=\"ambox-image\"><div style=\"width:52px;\">"..imagen[tipo].."</div></td><td class=\"ambox-text\">"..texto.."</td></tr></table>" end local function generar_categorias(padres, args) if not args["COD"] then return padres end local padres_ = {} for _,padre in ipairs(padres) do if padre and padre ~= "" then insert(padres_, args["COD"]..":"..padre) else insert(padres_, args["Idioma"]..'| ') end end -- if args["wik"] then -- insert(padres_,"Wikcionario") -- end return padres_ end local handlers = {} -- Detección de "Wikcionario" handlers[WIKCIONARIO] = function(clave, args) if clave == "Wikcionario" then args["wik"] = true end end -- Detección de código de idioma en mayúscula handlers[COD] = function(clave, args) local x,y,z if strfind(clave, "^%u%u+$") or strfind(clave, "^%u%u+%-%u%u+$") or strfind(clave, "^%u%u+%-%u%u+%-%u%u+$") then x = strlower(clave) y = clave z = m_leng.cod_a_idioma(x) end if x and y and z then args["cod"] = x args["COD"] = y args["idioma"] = z args["Idioma"] = strucfirst(z[1]) return false end return nil end --Lista Swadesh handlers[SWADESH] = function(clave, args) if clave ~= "Lista Swadesh" then return nil end return true, generar_titulo("Lista de [[w:Lista Swadesh|vocabulario básico altamente resistente a préstamos]], concepto del lingüista [[w:Morris Swadesh|Mauricio Swadesh]].", args), generar_categorias({""}, args) end --Traducciones: debería estar en mantenimiento?? handlers[TRADUCCIONES] = function (clave, args) local m = {strmatch(clave, "^Español%-(.*)$")} if not m[1] then return nil end local a = strlcfirst(m[1]) if not m_nombres[a] then return nil end args["oculta"] = true return true, generar_titulo("En esta categoría se encuentran todas las entradas traducidas al "..a..".", args), {"Traducciones desde el español"} end --Rimas handlers[RIMAS] = function (clave, args) if clave == "Rimas" then if args["i_"] == args["L_"] then args["no sufijo"] = true return true, generar_titulo("Lista de rimas.", args), generar_categorias({""}, args) else args["Rimas"] = true return nil end elseif args["Rimas"] then return true, generar_titulo("Lista de rimas con -"..clave..".", args), generar_categorias({"Rimas|"..clave}, args) end return nil end -- Pron-graf handlers[PRON_GRAF] = function(clave, args) local padres = mw.loadData("Módulo:auto cat/pron-graf")[clave] if not padres then return nil end if clave == "Palabras sin transcripción fonética" then args["oculta"] = true args["no sufijo"] = true end return true, generar_titulo("Lista de "..strlcfirst(clave)..".", args), generar_categorias(padres, args) end -- Etimología handlers[ETIMOLOGIA] = function (clave, args) -- Etimología de otro idioma local m = {strmatch(clave, "^Palabras provenientes del (.*)$")} if m[1] then args["no sufijo"] = true return true, generar_titulo("Lista de "..strlcfirst(clave)..".", args), generar_categorias({"Palabras por idioma de origen|"..m[1]}, args) end m = {strmatch(clave, "^Palabras documentadas desde el siglo [IVX]+$")} if m[1] then args["no sufijo"] = true return true, generar_titulo("Lista de "..strlcfirst(clave)..".", args), generar_categorias({"Palabras por época de origen"}, args) end -- Prefijos, infijos, sufijos m = {strmatch(clave, "^Palabras con el prefijo (.*)$")} if m[1] then args["no meta"] = true return true, generar_titulo("Lista de "..strlcfirst(clave)..".", args), generar_categorias({"Palabras formadas por prefijación|"..m[1]}, args) end m = {strmatch(clave, "^Palabras con el infijo (.+)$")} if m[1] then args["no meta"] = true return true, generar_titulo("Lista de "..strlcfirst(clave)..".", args), generar_categorias({"Palabras formadas por infijación|"..m[1]}, args) end m = {strmatch(clave, "^Palabras con el sufijo -(.+)$")} if m[1] then args["no meta"] = true return true, generar_titulo("Lista de "..strlcfirst(clave)..".", args), generar_categorias({"Palabras formadas por sufijación|"..m[1]}, args) end if clave == "Palabras de etimología sin precisar" then args["no sufijo"] = true args["oculta"] = true end -- Otros tipos de etimologías local padres = mw.loadData("Módulo:auto cat/etimología")[clave] if not padres then return nil end return true, generar_titulo("Lista de "..strlcfirst(clave)..".", args), generar_categorias(padres, args) end --Gramática handlers[GRAMATICA] = function (clave, args) local padres = mw.loadData("Módulo:auto cat/gramática")[clave] if not padres then if strfind(clave, "^Sustantivos") then padres = {"Sustantivos"} elseif strfind(clave, "^Adjetivos") then padres = {"Adjetivos"} elseif strfind(clave, "^Verbos") then padres = {"Verbos"} elseif strfind(clave, "^Locuciones") then padres = {"Locuciones"} end end if not padres then return nil end args["no sufijo"] = true return true, generar_titulo("Lista de "..strlcfirst(clave)..".", args), generar_categorias(padres, args) end --Csem, ambito, uso handlers[CONTEXTO] = function (clave, args) if strfind(clave, "^Idiomas de [^a-zA-ZÀ-ž ]") then -- REVISAR: Queremos conservar estas categorías?? return true, generar_titulo(clave..".", args), generar_categorias({"Idiomas"}, args) end local padres = mw.loadData("Módulo:auto cat/uso")[clave] if padres then return true, generar_titulo("Lista de "..clave..".", args), generar_categorias(padres, args) end local padres = mw.loadData("Módulo:auto cat/campos semánticos")[clave] if padres then return true, generar_titulo("Lista de términos relacionados con "..strlcfirst(clave)..".", args), generar_categorias(padres, args) end local padres = mw.loadData("Módulo:auto cat/ámbito")[clave] if padres then args["no sufijo"] = true return true, generar_titulo("Lista de términos propios de "..clave..".", args), generar_categorias(padres, args) end -- casos especiales (serán muchos) --- Topónimos m = {strmatch(clave, "^Topónimos de (.+)$")} if m[1] then return true, generar_titulo("Lista de "..strlcfirst(clave), args), generar_categorias({'Topónimos|'..m[1]}, args) end return nil end --Nombre de idioma o familia handlers[LENGUAS] = function (clave, args) clave = strlcfirst(clave) local cod = m_nombres[clave] if not cod then return nil end local es_familia = strmatch(clave, "^lenguas") local idioma if not es_familia then idioma = m_leng.cod_a_idioma(cod) else idioma = m_leng.cod_a_familia(cod) end local dag, familia = m_leng.obtener_dag(idioma, es_familia) local arbol = require("Módulo:DAG").dagAHtml(dag, "Árbol genealógico") local t = {} local i = 1 local function insert(s) t[i] = s i = i + 1 end local cat = {} local i_ = 1 local function insert_cat(s) cat[i_] = s i_ = i_ + 1 end -- En realidad final va al comienzo de todo, me confundí xd local final = {} local i__ = 1 local function insert_final(s) final[i__] = s i__ = i__ + 1 end insert("=== Información ===\n") insert(":* '''Código''': <code>"..cod.."</code>\n") insert(":* '''Nombre canónico''': "..clave.."\n") insert(":* '''ID de Wikidata''': [https://www.wikidata.org/wiki/Q"..tostring(idioma[2]).." "..tostring(idioma[2]).."]\n") if familia then insert(":* '''Familia''': [[:Categoría:"..familia.."|"..familia.."]]\n") insert_cat(familia) else insert_cat("Lenguas") end if not es_familia then insert(":* '''Script(s)''': ") for script in idioma[4]:gmatch("([^,]+)%s*,?%s*") do insert("[[Wikcionario:Lista de scripts#" .. script .. "|<code>" .. script .. "</code>]] ") --insert_cat("Script "..script) end insert_cat("Idiomas") insert("\n") end if idioma.otherNames then insert(":* '''Otros nombres''': ") for l,n in ipairs(idioma.otherNames) do if l == 1 then insert(n) else insert(", "..n) end end insert(".\n") end insert("=== Véase también ===\n") insert(":* [[File:Question Mark Icon.png|25px]] [[Wikcionario:Referencia/"..strupper(cod).."|Página de referencia]]\n") if not es_familia then insert(":* [[File:Wiktionary-logo.svg|25px]] [["..clave.."|Entrada]] en el Wikcionario.\n") end local titulo_wikipedia = mw.wikibase.sitelink("Q"..tostring(idioma[2]), 'eswiki') if titulo_wikipedia then insert(":* [[File:Wikipedia-logo.svg|25px]] [[w:"..titulo_wikipedia.."|Entrada]] en Wikipedia.\n") end insert(":* [[File:Wikidata-logo.svg|25px]] [[wikidata:Q"..tostring(idioma[2]).."|Entrada]] en Wikidata.\n") insert(":* [[File:Commons-logo.svg|25px]] [[commons:"..clave.."|Búsqueda]] en Wikimedia Commons.\n") --insert(":* [[Wikcionario:Convenciones para nombrar entradas/"..cod.."|Convenciones]] para nombrar entradas.\n") if not es_familia then insert(":* [[Wikcionario:Códigos de idioma|Lista]] completa de idiomas.\n") else insert(":* [[Wikcionario:Familias de idiomas|Lista]] completa de familias.\n") end local im = mw.title.new("Lang-"..cod..".gif", 6) if im and im.fileExists then insert_final("[[File:Lang-"..cod..".gif|200px]]\n\n") end insert_final("Esta es la categoría principal ") if not es_familia then insert_final("del idioma "..clave..".\n") else insert_final("de las "..clave..".\n") end local hay_arg = false for j, arg in ipairs(args) do if j == 1 then insert_final("Se habla en: [["..args[1].."]]") insert_cat("Idiomas de "..args[1]) else insert_final(", [["..args[j].."]]") insert_cat("Idiomas de "..args[j]) end hay_arg = true end if hay_arg then insert_final(".\n") end -- https://stackoverflow.com/questions/31455768/html-table-cell-spacing-only-between-cells-no-outer-one return true, "<table border=0 cellspacing=0 cellpadding=0 style=\"margin:-10px;width:99.9%;border-spacing:10px;\">\n<tr>\n<td style=\"text-align:left;vertical-align:top;\">\n"..concat(final)..concat(t).."</td>\n<td style=\"text-align:center;\">\n"..arbol.."</td>\n</tr>\n</table>\n", cat end -- Plantillas (muy ampliable) handlers[PLANTILLAS] = function (clave, args) m = {} if strmatch(clave, "Plantillas de flexión de") or strmatch(clave, "Plantillas auxiliares de flexión") or strmatch(clave, "Plantillas de mutación") then args["no sufijo"] = true m[clave] = {"Plantillas de flexión"} elseif strmatch(clave, "Plantillas$") then args["no sufijo"] = true m[clave] = {} elseif strmatch(clave, "Plantillas") then args["no sufijo"] = true m[clave] = {"Plantillas"} end local padres = m[clave] if not padres then return nil end return true, generar_titulo("Lista de "..strlcfirst(clave)..".", args), generar_categorias(padres, args) end -- Detección de Mantenimiento handlers[MANTENIMIENTO] = function(clave, args) -- if not args["wik"] then -- return nil -- end local m = mw.loadData("Módulo:auto cat/mantenimiento") if m[clave] then return true, generar_aviso("info", "__HIDDENCAT__".. "Esta categoría es de mantenimiento".. " y por lo tanto no se mostrará directamente. Si desea que se ".. "muestre en cada página, puede cambiar ".. "[[Especial:Preferencias|sus preferencias]]."), generar_categorias(m[clave], args) -- TODO: Nombres de categorías. ¿Eliminar Wikicionario:? Creo q es razonable -- dejar esas categorías sólo para páginas del espacio Wikcionario end end -- Contrucción de metacategorías por idioma handlers[POR_IDIOMA] = function(clave, args) if args["metacat"] then return nil -- por las dudas end local m = {strmatch(clave, "^(.+) por idioma$")} local clave_ = m[1] if clave_ then args["metacat"] = true -- útil? for i,handler in ipairs(handlers) do -- cómo evito que vuelva a pasar recursivamente de forma ilimitada local padres_ = {} local terminar, msj, padres = handler(clave_, args) if terminar == true then for i, padre_ in ipairs(padres) do if padre_ ~= "" then insert(padres_, padre_..' por idioma| ') insert(padres_, clave_..'| ') else -- puede tener un mejor nombre? creo que sí insert(padres_, 'Metacategorías espejo| ') insert(padres_, clave_..'| ') end end return true, -- quizá mejorar este título generar_titulo("Metacategoría de ''"..strlcfirst(clave_).."'' por idioma", args), generar_categorias(padres_, args) elseif terminar == false then -- si no es nil break end end end return nil end -- Usuarios por idioma, debería fusionarlo con el handler de arriba? handlers[USUARIOS] = function(clave, args) local m = {strmatch(clave, "^Usuarios por idioma %- ?(.+)$")} if not m[1] then return nil end local c = {"0", "básico", "intermedio", "avanzado", "experto", "nativo"} local r = nil local s = nil for _,q in ipairs(c) do local m2 = {strmatch(m[1], "^(.+) ?"..q.."$")} if m2[1] then r = m2[1] s = q break end end local padres_ = {} if not r then insert(padres_, "Usuarios por idioma") return true, generar_titulo("Lista de usuarios que hablan "..m[1], args), generar_categorias(padres_, args) else insert(padres_, "Usuarios por idioma - "..r) if s == "0" then return true, generar_titulo("Lista de usuarios que NO entienden "..r, args), generar_categorias(padres_, args) else return true, generar_titulo("Lista de usuarios que hablan "..r..", nivel "..s, args), generar_categorias(padres_, args) end end end -- Escrituras handlers[ESCRITURAS] = function(clave, args) local m_escrituras = mw.loadData("Módulo:auto cat/escrituras") local codigos = m_escrituras[clave] if codigos then for _,cod in ipairs(codigos) do if cod == args["COD"] then return true, generar_titulo("Lista de palabras pertenecientes a la escritura "..clave..".", args), generar_categorias({"Escrituras"}, args) end end end local m = strfind(clave, "^Escrituras$") if m then return true, generar_titulo("Lista de escrituras.", args), generar_categorias({}, args) end return nil end function export.categorizar(frame) local title = mw.title.getCurrentTitle().fullText if title == "Plantilla:auto cat" then return "Use esta plantilla en el espacio de Categorías." end local pagename = mw.title.getCurrentTitle().text if pagename == "Módulo:auto cat" then return nil end local ns = mw.title.getCurrentTitle().namespace assert(ns == 14, "La plantilla sólo puede utilizarse en el espacio de Categorías") local args = frame:getParent().args args["pagename"] = pagename local claves = strsplit(pagename, ":") local L = #claves args["i_"] = 1 args["L_"] = L local t = {} while args["i_"] <= L do local clave = claves[args["i_"]] for i,handler in ipairs(handlers) do local terminar, msj, padres = handler(clave, args) if terminar == true then insert(t, msj) -- Paso 1: metacategorías -- Caso a: "no meta" = no metacategoría x idioma if args["no meta"] then -- nada -- Caso b: sin sufijo elseif args["COD"] and L == 2 and args["no sufijo"] then insert(t, "[[Categoría:"..clave.."|"..args["COD"].."]]") -- Caso c: caso general elseif args["COD"] and L == 2 then insert(t, "[[Categoría:"..clave.." por idioma|"..args["COD"].."]]") -- Caso d: eventualmente eliminar Categorías:Wikicionario: -- salvo para páginas realmente internas. Por ahora mantener elseif args["COD"] and args["wik"] and L == 3 then -- caso para Categoría:Wikcionario:XXXX insert(t, "[[Categoría:Wikcionario:"..claves[3].."|"..args["COD"].."]]") end -- Paso 2: árbol de categorías for i,padre in ipairs(padres) do -- Caso a: Categorías fundamentales. Padre "", sin código if not args["wik"] and not args["COD"] and padre == "" then insert(t, "[[Categoría:Fundamental| ]]\n") elseif padre ~= "" then insert(t, "[[Categoría:"..padre.."| ]]\n") end end return concat(t) elseif terminar == false then -- si no es nil break end end args["i_"] = args["i_"] + 1 end if args["wik"] then return nil end error("La categoría no puede ser reconocida.") end return export kke7d4887rq93q6d0j8zv8mjmxpw60l cugino 0 1042361 5823468 5629247 2025-07-03T03:57:19Z TMCbot 164594 . 5823468 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it|audio=LL-Q652 (ita)-LangPao-cugino.wav|audio2=LL-Q652 (ita)-Happypheasant-cugino.wav}} === Etimología === {{etimología|leng=it|fro|cosin}}, {{etim|leng=it|la|consobrinus}}. ==== {{sustantivo masculino y femenino|it}} ==== {{it.sust|mf}} ;1 {{csem|parentesco|leng=it}}: {{plm|primo}}. ==== Información adicional ==== {{derivad|leng=it|biscugino|cuginanza|procugino}}. == Referencias y notas == <references /> 971sllvoxxlysu4kj29dpemdzgf42d4 Módulo:flex/estilo.css 828 1046240 5823305 5823165 2025-07-02T15:22:46Z Raos10 93688 Se agregaron variables CSS para que se adapte correctamente al modo oscuro 5823305 sanitized-css text/css .fakelinks { color: var(--color-progressive, #0645ad); } .flex > .new { color: black; } .flex.mw-collapsible-toggle { padding: 2px; background-clip: content-box; background-color: var(--background-color-interactive, #e0e0e0); border-style: solid; border-color: black; border-width: thin; text-align: center; cursor: pointer; } .flex.mw-collapsible-toggle:hover { text-decoration: underline; background-color: var(--background-color-interactive--hover, #f0f0f0); } .flex .mw-collapsible-toggle .up, .flex.mw-collapsed .mw-collapsible-toggle .down { display: none; } .flex .mw-collapsible-toggle .down, .flex.mw-collapsed .mw-collapsible-toggle .up { display: inline; } .flex.wikitable { margin: 0; border-style: none solid solid solid; border-color: black; border-width: thin; } .movil { display: none; color: DimGrey; } @media screen and (max-width: 800px) { .flex.wikitable tr { display: grid } .movil { display: inline; } .pc { display: none; } } ff2ryenczdaw3qh0ds413wiqm8nwnfy pagliaccio 0 1047611 5823453 5684154 2025-07-03T03:56:57Z TMCbot 164594 . 5823453 wikitext text/x-wiki == {{lengua|it}} == {{pron-graf|leng=it}} === {{sustantivo masculino y femenino|it}} === {{it.sust|mf}} ;1: {{plm|payaso}}. {{sinónimo|leng=it|clown}} === Véase también === {{w|leng=it}} 7mugiemcncugzf912zv59wp7jnddxlp segador 0 1047930 5823410 5725565 2025-07-03T02:27:30Z Tmagc 158167 5823410 wikitext text/x-wiki {{desambiguación|}}<!-- si hay términos que se diferencian de este solo en una tilde o diacrítico --> == {{lengua|es}} == {{pron-graf}} <!--- En el caso del español u otro idioma regular (consultar Plantilla:pron-graf), la plantilla se deja en blanco y la pronunciación se generará automáticamente. Si la palabra es irregular, use el parámetro |ayuda. Ejemplo: rally -> {{pron-graf|ayuda=ralí}}. Si el idioma es considerado irregular, como el inglés, especifique en la plantilla cada transcripción fonética manualmente. Adicionalmente se puede especificar si hay alguna transliteración, grafía alternativa, etc. --> === Etimología === {{etimología|sufijo|segar|dor}}. <!-- Para una palabra de otro idioma, utilice {{etimología|(CÓDIGO DE IDIOMA)|(PALABRA)|(SIGNIFICADO)}}. Para elegir otra opción u otro tipo de etimología, consulte la página Plantilla:etimología --> ==== {{adjetivo|es}} ==== {{es.adj}} ;1: Que siega. {{uso|utcs}} {{sinónimo|dallador|guadañero|guadañil|recolector|labrador}} ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;2 {{csem|máquinas}}: {{variante|segadora}}. ;3 {{csem|insectos}}: Arácnido pequeño, de patas muy largas, con el cuerpo redondeado y el vientre aovado, comprimido y rugoso.<ref>{{DLE1925}}</ref> ==== {{sustantivo masculino y femenino|es}} ==== {{es.sust|mf}} ;4 {{csem|ocupaciones|agro}}: Persona que conduce la segadora. ==== Véase también ==== * [[segadora]] ==== Traducciones ==== {{trad-arriba}} <!-- formato: {{t|idioma|t1=(traducción1)|t2=(traducción2|...(hay más opciones))}} p. ej. {{t|fr|t1=chose|a1=1|g1=f}} (ver más ejemplos en Plantilla:t/doc) --> {{trad-abajo}} <!-- si va a insertar una nueva sección de etimología o de idioma, por favor, hágalo ↑ arriba ↑ de esta línea. NO BORRE LO QUE ESTÁ DEBAJO, GRACIAS. --> == Referencias y notas == <references /> cu5s5cl0zqcpivfmhpayvh7d5l2fb3f Módulo:flex/es 828 1048487 5823307 5822112 2025-07-02T15:29:22Z Tmagc 158167 5823307 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local generar_error = require("Módulo:traza") local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal_no_tilde = "aeiouüAEIOUÜ" local vocal_tilde = "áéíóúÁÉÍÓÚ" local vocal = vocal_no_tilde..vocal_tilde local cons = "bcdfghjklmnñpqrstvwxyzBCDFGHJKLMNÑPQRSTVWXYZ" local espacios = "%-‐%s" local VOCAL = "["..vocal.."]" local CONS = "["..cons.."]" local LETRA = "["..vocal..cons.."]" local CONS_SALVO_H = "[^"..vocal.."hH~#{}]" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local agregar_tilde = { ["a"] = "á", ["e"] = "é", ["i"] = "í", ["o"] = "ó", ["u"] = "ú", ["á"] = "á", ["é"] = "é", ["í"] = "í", ["ó"] = "ó", ["ú"] = "ú", ["A"] = "Á", ["E"] = "É", ["I"] = "Í", ["O"] = "Ó", ["U"] = "Ú", ["Á"] = "Á", ["É"] = "É", ["Í"] = "Í", ["Ó"] = "Ó", ["Ú"] = "Ú", } local quitar_tilde = { ["á"] = "a", ["é"] = "e", ["í"] = "i", ["ó"] = "o", ["ú"] = "u", ["a"] = "a", ["e"] = "e", ["i"] = "i", ["o"] = "o", ["u"] = "u", ["Á"] = "A", ["É"] = "E", ["Í"] = "I", ["Ó"] = "O", ["Ú"] = "U", ["A"] = "A", ["E"] = "E", ["I"] = "I", ["O"] = "O", ["U"] = "U", } local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,7 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,7 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen, condicion) if not condicion then return end local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen, arreglo_de_condiciones) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i], arreglo_de_condiciones[i] == nil) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end function export.flexionar_palabra(p, mf, forzar_s) local r, v, c, s -- 1. Terminadas en vocal -- 1A. Terminan en -ote o -ete r, s = strmatch(p, "^(.*)(ote)$") if s then if mf then return {{r.."~ote~"}, {r.."~otes~"}, {r.."~ota~"}, {r.."~otas~"}} else return {{r.."~ote~"}, {r.."~otes~"}, {}, {}} end end r, s = strmatch(p, "^(.*)(ete)$") if s then if mf then return {{r.."~ete~"}, {r.."~etes~"}, {r.."~eta~"}, {r.."~etas~"}} else return {{r.."~ete~"}, {r.."~etes~"}, {}, {}} end end -- 1B. Terminan en vocal átona, o en [áéó] (cama, café, rococó, sofá) r, v = strmatch(p, "^(.*)([aeiouáéó])$") if v then if (v == "o") and mf then -- Palabras terminadas en e: arabe, dulce, limítrofe, salvaje, probable, conforme, fuerte, estadounidense return {{r.."~o~"}, {r.."~os~"}, {r.."~a~"}, {r.."~as~"}} else return {{r.."~"..v.."~"}, {r.."~"..v.."s~"}, {}, {}} end end -- 1C. Terminan en -í o en -ú (bisturí, bambú -> bisturís, bisturíes, bambú, bambúes) r, v = strmatch(p, "^(.*)([íú])$") if v then if forzar_s then return {{r.."~"..v.."~"}, {r.."~"..v.."s~"}, {}, {}} else return {{r.."~"..v.."~"}, {r.."~"..v.."s~", r.."~"..v.."es~"}, {}, {}} end end -- 2. Terminadas en consonante -- 2A. Terminadas en vocal + -y -> plural con -es salvo extranjerismos r, v, c = strmatch(p, "^(.*)("..VOCAL..")(y)$") if c then if forzar_s then local w = v if strfind(p, "^[^"..vocal_tilde.."]*["..vocal.."]"..CONS.."+".."[iuü]?"..VOCAL.."y$") then w = agregar_tilde[v] end return {{r.."#"..v..c.."#"}, {r.."#"..w.."is#"}, {}, {}} else return {{r.."~"..v..c.."~"}, {r.."~"..v..c.."es~"}, {}, {}} end end -- 2B. Terminadas en consonante + -y -> plural en -s cambiando la y por i r, c, _ = strmatch(p, "^(.*)("..CONS..")(y)$") if c then return {{r.."~"..c.."y~"}, {r.."~"..c.."is~"}, {}, {}} end -- 2C. Agudas y monosílabos terminados en -x : plural con -es r, c = strmatch(p, "^([^áéíóú]+)(x)$") if c then return forzar_s and {{r.."#x#"}, {r.."#xs#"}, {}, {}} or {{r.."~x~"}, {r.."~xes~"}, {}, {}} end -- 2D. Agudas terminadas en -n o -s : plural con -es r, v, c = strmatch(p, "^(.*[aeiou])([íú])([ns])$") -- si termina con un hiato en í o ú, necesito mantener la tilde en el plural (ej [[saín]]) if c then if mf then return {{r.."~"..v..c.."~"}, {r.."~"..v..c.."es~"}, {r.."~"..v..c.."a~"}, {r.."~"..v..c.."as~"}} else return {{r.."~"..v..c.."~"}, {r.."~"..v..c.."es~"}, {}, {}} end end r, v, c = strmatch(p, "^(.*)([áéíóú])([ns])$") -- lo habitual if not c then r, v, c = strmatch(p, "^(.*)([áéó])([iuü][ns])$") -- diptongo final end if c then local w = quitar_tilde[v] if mf then return {{r.."~"..v..c.."~"}, {r.."~"..w..c.."es~"}, {r.."~"..w..c.."a~"}, {r.."~"..w..c.."as~"}} else return {{r.."~"..v..c.."~"}, {r.."~"..w..c.."es~"}, {}, {}} end end -- 2E. Monosílabos terminados en -n o -s : plural con -es -- PRO TIP: cada sílaba tiene o un triptongo, o un diptongo o una única vocal -- Detectando esto puedo reconocer si es un monosílabo r, s = strmatch(p, "^("..CONS.."-)(u?[iuü]?h?[aeoiu]h?[iuü]?"..CONS.."?[ns])$") -- u extra al principio porque puede haber una "qu" if s then if mf then return forzar_s and {{r.."#"..s.."#"}, {r.."#"..s.."s#"}, {r.."~"..s.."a~"}, {r.."~"..s.."as~"}} or {{r.."~"..s.."~"}, {r.."~"..s.."es~"}, {r.."~"..s.."a~"}, {r.."~"..s.."as~"}} else return forzar_s and {{r.."#"..s.."#"}, {r.."#"..s.."s#"}, {}, {}} or {{r.."~"..s.."~"}, {r.."~"..s.."es~"}, {}, {}} end end -- 2F. Llanas terminadas en -n : plural con -es (telson -> télsones, cardumen -> cardúmenes) r, v, c, s = strmatch(p, "^([^áéíóú]-)([aeo])(h?[iuü]?h?[iuü]?h?)([aeo][iuü]?h?[n])$") -- si no hay consonante de separación, hay un hiato de dos vocales abiertas if not s then r, v, c, s = strmatch(p, "^([^áéíóú]-)([íú])(h?)([aeiou]h?[iuü]?h?[n])$") -- o bien, un hiato decreciente (flúor, crúor, imaginemos que terminan en n) end if not s then r, v, c, s = strmatch(p, "^([^áéíóú]-)([aeo])(h?[iuü]h?[iuü]?h?)([aeiou][iuü]?h?[n])$") -- o bien, un diptongo con la sílaba anterior (muy raro) end if not s then r, v, c, s = strmatch(p, "^([^áéíóú]-)([aeiou])(h?[iuü]?h?"..CONS_SALVO_H.."+h?u?[iuü]?h?)([aeiou][iuü]?h?[n])$") -- normal, con consontante de separación entre sílaba (nota: la u extra está por la "qu") end if s then local w = agregar_tilde[v] return forzar_s and {{r..v..c.."#"..s.."#"}, {r..w..c.."#"..s.."s#"}, {}, {}} or {{r..v..c.."~"..s.."~"}, {r..w..c.."~"..s.."es~"}, {}, {}} end -- 2G. Esdrújulas terminadas en -n y llanas/esdrújulas terminads en -s o -x : invariantes (polisíndeton, crisis, tórax) r, c = strmatch(p, "^(.*)([nsx])$") if c then return {{r.."~"..c.."~"}, {}, {}, {}} end -- 2H. Agudas terminadas en -ol y -or: esquirol, español, tutor, etc. -> -es + femenino en -a, -as r, s = strmatch(p, "^([^áéíóú]-)(o[lr])$") if s then if mf then return forzar_s and {{r.."#"..s.."#"}, {r.."#"..s.."s#"}, {r.."~"..s.."a~"}, {r.."~"..s.."as~"}} or {{r.."~"..s.."~"}, {r.."~"..s.."es~"}, {r.."~"..s.."a~"}, {r.."~"..s.."as~"}} else return forzar_s and {{r.."#"..s.."#"}, {r.."#"..s.."s#"}, {}, {}} or {{r.."~"..s.."~"}, {r.."~"..s.."es~"}, {}, {}} end end -- Agudas terminadas en -uz [[andaluz]], [[marfuz]] idem a caso anterior siempre?? REVISAR r, s = strmatch(p, "^([^áéíóú]-)(u)z$") if s then if mf then return {{r.."~"..s.."z~"}, {r.."~"..s.."ces~"}, {r.."~"..s.."za~"}, {r.."~"..s.."zas~"}} else return {{r.."~"..s.."z~"}, {r.."~"..s.."ces~"}, {}, {}} end end -- 2I. Agudas y llanas terminadas en vocal + -l, -r, -d, -j, -z, -ñ -> -es (césped, dócil, perejil, veloz, cholcheñ) r, v, c = strmatch(p, "^([^áéíóú]-)("..VOCAL..")([lrdjzñ])$") -- Agudas -- Graves if not c then r, v, c = strmatch(p, "^([^áéíóú]-[iuü]?h?[áéó]h?[iuü]?h?)([aeiou][iuü]?)([lrdjzñ])$") -- si hay una vocal tildada, explícitamente es grave así que van a tener que formarse sí o sí dos sílabas end if not c then r, v, c = strmatch(p, "^([^áéíóú]-[íú]h?)([aeiou][iuü]?)([lrdjzñ])$") -- idem a caso anterior, pero sin diptongo end if not c then r, v, c = strmatch(p, "^([^áéíóú]-[iuü]?h?[áéó]h?[iuü]?h?"..CONS_SALVO_H.."+h?u?[iuü]?h?)([aeiou][iuü]?)([lrdjzñ])$") -- idem casos anteriores pero con consonante (+ la u por la qu) end if not c then r, v, c = strmatch(p, "^([^áéíóú]-[íú]?h?"..CONS_SALVO_H.."+h?u?[iuü]?h?)([aeiou][iuü]?)([lrdjzñ])$") end if c then local w = c if w == "z" then w = "c" end return forzar_s and {{r.."#"..v..c.."#"}, {r.."#"..v..w.."s#"}, {}, {}} or {{r.."~"..v..c.."~"}, {r.."~"..v..w.."es~"}, {}, {}} end -- 2J. Esdrújulas terminadas en vocal + -l, -r, -d, -j, -z, -ñ -> invariantes r, c = strmatch(p, "^(.*"..VOCAL..")([lrdjzñ])$") if c then return {{p}, {}, {}, {}} end -- 2K. Palabras que terminan en vocal + cons distinta de [lrdjnsxyz]: chip, robot, mamut, smog, esnob r, s = strmatch(p, "^(.*)("..VOCAL..CONS..")$") if s then return {{r.."~"..s.."~"}, {r.."~"..s.."s~"}, {}, {}} end -- 2L. Terminadas en -ch -> asumo que termina en -es por defecto r, c = strmatch(p, "^(.*)(ch)$") if c then return forzar_s and {{r.."#ch#"}, {r.."#chs#"}, {}, {}} or {{r.."~ch~"}, {r.."~ches~"}, {}, {}} end -- 2M. Resto de palabras en consonante + s o en s + consonante -> invariante: compost, kibutz r, s = strmatch(p, "^(.*)("..CONS.."[sz])$") if not s then r, s = strmatch(p, "^(.*)([sz]"..CONS..")$") end if s then return {{r.."~"..s.."~"}, {}, {}, {}} end -- 2N. Resto de palabras en doble consonante: gong, bang, iceberg, récord, etc. r, s = strmatch(p, "^(.*)("..CONS..CONS..")$") if s then return {{r.."~"..s.."~"}, {r.."~"..s.."s~"}, {}, {}} end error("No se pudo determinar la flexión de la palabra") end function export.flexion_sust_adj(palabras, mf, forzar_s, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = export.flexionar_palabra(a, mf, forzar_s) local flex2 = copulativa and export.flexionar_palabra(b, mf, forzar_s) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = export.flexionar_palabra(p, mf, forzar_s) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo == "mf", args["s"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["s"] = {tipo = "bool"}, ["forzars"] = {alias_de = "s"}, ["noes"] = {alias_de = "s"}, ["es"] = {tipo = "bool"}, ["forzares"] = {alias_de = "es"}, ["nos"] = {alias_de = "es"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["s"] = {tipo = "bool"}, ["forzars"] = {alias_de = "s"}, ["noes"] = {alias_de = "s"}, ["es"] = {tipo = "bool"}, ["forzares"] = {alias_de = "es"}, ["nos"] = {alias_de = "es"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local YO, TU, VOS, EL, NOSOTROS, VOSOTROS, ELLOS = 1, 2, 3, 4, 5, 6, 7 local PRONOMBRES = {"yo", "tú", "vos", "él, ella, usted", "nosotros", "vosotros", "ustedes, ellos"} local PRONOMBRES_SUBJ = {"que yo", "que tú", "que vos", "que él, que ella, que usted", "que nosotros", "que vosotros", "que ustedes, que ellos"} local PRONOMBRES_IMP = {"―", "(tú)", "(vos)", "(usted)", "(nosotros)", "(vosotros)", "(ustedes)"} local IMPERSONALES = {"", "", "", "(ello)", "", "", "(ellos)"} local IMPERSONALES_SUBJ = {"", "", "", "(que ello)", "", "", "(que ellos)"} local REFLEXIVOS = {"me", "te", "te", "se", "nos", "os", "se"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { { ["ger"] = {"ando"}, ["part"] = {"ado"}, ["ind_pres"] = {"o", "as", "ás", "a", "amos", "áis", "an"}, ["ind_imp"] = {"aba", "abas", "abas", "aba", "ábamos", "abais", "aban"}, ["ind_perf"] = {"é", "aste", "aste", "ó", "amos", "asteis", "aron"}, ["ind_perf_alt"] = {"é", "aste", "aste", "ó", "amos", "asteis", "aron"}, ["ind_fut"] = {"aré", "arás", "arás", "ará", "aremos", "aréis", "arán"}, ["subj_pres"] = {"e", "es", "és", "e", "emos", "éis", "en"}, ["subj_imp"] = {"ara", "aras", "aras", "ara", "áramos", "arais", "aran", "ase", "ases", "ases", "ase", "ásemos", "aseis", "asen"}, ["subj_fut"] = {"are", "ares", "ares", "are", "áremos", "areis", "aren"}, ["cond"] = {"aría", "arías", "arías", "aría", "aríamos", "aríais", "arían"}, ["imper"] = {"-", "a", "á", "e", "emos", "ad", "en"} }, { ["ger"] = {"iendo"}, ["part"] = {"ido"}, ["ind_pres"] = {"o", "es", "és", "e", "emos", "éis", "en"}, ["ind_imp"] = {"ía", "ías", "ías", "ía", "íamos", "íais", "ían"}, ["ind_perf"] = {"í", "iste", "iste", "ió", "imos", "isteis", "ieron"}, ["ind_perf_alt"] = {"e", "iste", "iste", "o", "imos", "isteis", "ieron"}, ["ind_fut"] = {"eré", "erás", "erás", "erá", "eremos", "eréis", "erán"}, ["subj_pres"] = {"a", "as", "ás", "a", "amos", "áis", "an"}, ["subj_imp"] = {"iera", "ieras", "ieras", "iera", "iéramos", "ierais", "ieran", "iese", "ieses", "ieses", "iese", "iésemos", "ieseis", "iesen"}, ["subj_fut"] = {"iere", "ieres", "ieres", "iere", "iéremos", "iereis", "ieren"}, ["cond"] = {"ería", "erías", "erías", "ería", "eríamos", "eríais", "erían"}, ["imper"] = {"-", "e", "é", "a", "amos", "ed", "an"} }, { ["ger"] = {"iendo"}, ["part"] = {"ido"}, ["ind_pres"] = {"o", "es", "ís", "e", "imos", "ís", "en"}, ["ind_imp"] = {"ía", "ías", "ías", "ía", "íamos", "íais", "ían"}, ["ind_perf"] = {"í", "iste", "iste", "ió", "imos", "isteis", "ieron"}, ["ind_perf_alt"] = {"e", "iste", "iste", "o", "imos", "isteis", "ieron"}, ["ind_fut"] = {"iré", "irás", "irás", "irá", "iremos", "iréis", "irán"}, ["subj_pres"] = {"a", "as", "ás", "a", "amos", "áis", "an"}, ["subj_imp"] = {"iera", "ieras", "ieras", "iera", "iéramos", "ierais", "ieran", "iese", "ieses", "ieses", "iese", "iésemos", "ieseis", "iesen"}, ["subj_fut"] = {"iere", "ieres", "ieres", "iere", "iéremos", "iereis", "ieren"}, ["cond"] = {"iría", "irías", "irías", "iría", "iríamos", "iríais", "irían"}, ["imper"] = {"-", "e", "í", "a", "amos", "id", "an"} }, } local auxiliar = { ["inf_comp"] = {"haber"}, ["ger_comp"] = {"habiendo"}, ["ind_perf_comp"] = {"he", "has", "has", "ha", "hemos", "habéis", "han"}, ["ind_pluperf"] = {"había", "habías", "habías", "había", "habíamos", "habíais", "habían"}, ["ind_anter"] = {"hube", "hubiste", "hubiste", "hubo", "hubimos", "hubisteis", "hubieron"}, ["ind_fut_comp"] = {"habré", "habrás", "habrás", "habrá", "habremos", "habréis", "habrán"}, ["cond_comp"] = {"habría", "habrías", "habrías", "habría", "habríamos", "habríais", "habrían"}, ["subj_perf"] = {"haya", "hayas", "hayas", "haya", "hayamos", "hayáis", "hayan"}, ["subj_pluperf"] = {"hubiera", "hubieras", "hubieras", "hubiera", "hubiéramos", "hubierais", "hubieran", "hubiese", "hubieses", "hubieses", "hubiese", "hubiésemos", "hubieseis", "hubiesen"}, ["subj_fut_comp"] = {"hubiere", "hubieres", "hubieres", "hubiere", "hubiéremos", "hubiereis", "hubieren"} } local function obtener_sufijos(sufijo_inf, forma) if sufijo_inf == "ar" then return sufijos[1][forma] elseif sufijo_inf == "er" then return sufijos[2][forma] else return sufijos[3][forma] end end local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf) if not nexo then return sufijo end if sufijo_inf == "ar" then if strfind(sufijo, "^[eéií]") then if nexo == "c" then return "~qu~"..sufijo end if nexo == "g" then return "g~u~"..sufijo end if nexo == "z" then return "~c~"..sufijo end if nexo == "gu" then return "g~ü~"..sufijo end end if strcount(sufijo, "[aeiou]") == 1 and not strfind(sufijo, "[áéíóú]") and strfind(substr(sufijo, -1), "[aeiouns]") then if nexo == "cu" then return substr(nexo, -2, -2).."~ú~"..sufijo, nexo..sufijo -- es llana y entonces lleva tilde end if nexo == "u" then return "~ú~"..sufijo -- es llana y entonces lleva tilde end if nexo == "i" then return "#í#"..sufijo -- es llana y entonces lleva tilde end if nexo == "I" then return "#e#"..sufijo -- es llana y entonces la sinéresis de la i se pierde end end if strfind(sufijo, "^ar") then if strfind(nexo, "^[~#]?[bdr]?r[~#]?$") then return nexo..substr(sufijo, 3) end end else -- ER/IR/ÍR if strfind(sufijo, "^[aáoóuú]") then if nexo == "c" then return "~z~"..sufijo end if nexo == "S" then -- mecer return "#z#"..sufijo end if nexo == "g" then return "~j~"..sufijo end if nexo == "gu" then return "g~"..sufijo.."~" end if nexo == "C" then return "~zc~"..sufijo end end if strfind(sufijo, "^[aeoáéó]") then if nexo == "gü" then return "g~uy~"..sufijo end if nexo == "u" then return "u~y~"..sufijo end end if strfind(sufijo, "^i[aeoáéó]") then if (nexo == "ñ" or nexo == "ll") then return "~"..nexo..substr(sufijo, 2).."~" end if nexo == "gü" then return "g~uy~"..substr(sufijo, 2) end if nexo == "u" then return "u~y~"..substr(sufijo, 2) end if nexo == "e" then return nexo.."~y~"..substr(sufijo, 2) end end if strfind(sufijo, "^i[^aeiouáéíóú]") then if nexo == "e" then return nexo.."~í~"..substr(sufijo, 2) end end if strfind(sufijo, "^i[eé]") then if strfind(nexo, "u#$") then -- ir --> fuera (subj) return nexo..substr(sufijo, 2) end if nexo == "#j#" or nexo == "~j~" then return nexo..substr(sufijo, 2) end end if strfind(sufijo, "^í$") then if nexo == "#j#" or nexo == "~j~" then return nexo.."~e~" end end if strfind(sufijo, "^ió$") then if nexo == "#j#" or nexo == "~j~" then return nexo.."~o~" end end if strfind(sufijo, "^[ie]r") then if strfind(nexo, "^[~#]?[bdr]?r[~#]?$") then return nexo..substr(sufijo, 3) end end end if nexo == "I" then return "i"..sufijo -- sinéresis normal end if nexo == "C" then return "c"..sufijo -- sin epéntesis end if nexo == "S" then -- mecer return "c"..sufijo end return nexo..sufijo end local function combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf) local nucleo_ = strsubn(nucleo, "[~#]", "") local nexosufijo_ = strsubn(nexosufijo, "[~#]", "") -- ya no es más necesario --if strfind(nucleo_inf, "^(.*[iuü]?h?[aeo]h?)([iuü])(.-)$") or strfind(nucleo_, "^(.*[iuü]?h?[aeo]h?)([iuü])(.-)$") then -- generar_error("nucleoalt") --end if strfind(nucleo_, "[yi]$") and strfind(nexosufijo_, "^i") then -- se juntan dos íes o y-i (ej. reír, freír, oír) return nucleo..strsub(nexosufijo, "^([~#]?)i", "%1") elseif strfind(nucleo_, "^[^áéíóú]-[aeiou]h?$") and strfind(nexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- sufijo con i/u tónica (caISTE, caIMOS, caIDO, oID, reHÚyo etc.) return nucleo..strsub(nexosufijo, "^([~#]?h?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end) elseif strfind(nucleo_, "[^gq][aeiou]$") and strfind(nexosufijo_, "^i[aeiouáéíóú]") then -- se junta [aeiou]i[aeiouáéíóú] -> cambio a y (creYO) PERO [[chinguiar]] -> chinguIando return nucleo..strsub(nexosufijo, "^([~#]?)i", "%1~y~") elseif strfind(nucleo_, "[aeiou]$") and strfind(nexosufijo_, "^id$") then -- reír -> reÍd, embaír -> embaÍd return nucleo..strsub(nexosufijo, "^([~#]?)i", "%1~í~") elseif strfind(nucleo_, "^[^aeiouáéíóú]+$") and (strfind(nexosufijo_, "^"..CONS.."?"..CONS.."?".."[iuü]?[áéó][iuü]?[ns]?$") or strfind(nexosufijo_, "^[íú][ns]?$")) then -- caso de dar, vos *d+ás, debo quitar la tilde return nucleo..strsub(nexosufijo, "[áéíóú]", function(v) return "~"..quitar_tilde[v].."~" end) end return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) local prefijo_ = strsubn(prefijo, "[~#]", "") local nucleonexosufijo_ = strsubn(nucleonexosufijo, "[~#]", "") if prefijo_ and strfind(prefijo_, "[aeiou]") and not strfind(prefijo_, "[áéíóú]") then if strfind(prefijo_, "^[^áéíóú]-[aeiou]h?$") and strfind(nucleonexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- nucleonexosufijo con i/u tónica (rehacer -> rehíce) return prefijo..strsub(nucleonexosufijo, "^([~#]?h?[~#]?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end) elseif strfind(nucleonexosufijo_, "^("..CONS.."*[iuü]?)([aeiou])([iuü]?[ns]?)$") then -- monosílabo: prever --> prevén return prefijo..strsub(nucleonexosufijo, "^([~#]?"..CONS.."*[~#]?[iuü]?[~#]?)([aeiou])([~#]?[iuü]?[~#]?[ns]?[~#]?)$", function(a, b, c) return a..agregar_tilde[b]..c end) -- ven --> prevén end end return prefijo..nucleonexosufijo end local paradigmas_regulares = { ["ar"] = { {"anunciar", {"iar$"}, { --necesidad de explicitar el diptongo, aunque esta variante es la que consideramos como la regular }}, {"evacuar", {"cuar$"}, { nexo = "cu" }}, {"averiguar", {"guar$"}, { nexo = "gu" }}, {"complicar", {"car$"}, { nexo = "c" }}, {"llegar", {"gar$"}, { nexo = "g" }}, {"actuar", {"uar$"}, { nexo = "u" }}, {"realizar", {"zar$"}, { nexo = "z" }}, {"amar", {"ar$"}, { }}, }, ["er"] = { {"ller", {"ller$"}, { -- Existe esto?? nexo = "ll" }}, {"guer", {"guer$"}, { -- Existe esto?? nexo = "gu" }}, {"güer", {"güer$"}, { -- Existe esto?? nexo = "gü" }}, {"parecer", {"[aeiou]cer$"}, { nexo = "C" }}, {"vencer", {"[^aeious]cer$"}, { -- los verbos en -scer NO entran en este paradigma (ver fosforescer o evanescer) nexo = "c" }}, {"leer", {"eer$"}, { nexo = "e" }}, {"proteger", {"ger$"}, { nexo = "g" }}, {"atañer", {"ñer$"}, { nexo = "ñ" }}, {"uer", {"uer$"}, { -- Existe esto?? nexo = "u" }}, {"temer", {"er$"}, { }}, }, ["ir"] = { {"producir", {"ducir$"}, { nucleo = "du", nexo = "C", ind_perf = {nexo = "~j~"}, subj_imp = {nexo = "~j~"}, subj_fut = {nexo = "~j~"} }}, {"escabullir", {"llir$"}, { nexo = "ll" }}, {"distinguir", {"guir$"}, { nexo = "gu" }}, {"argüir", {"güir$"}, { nexo = "gü" }}, {"lucir", {"[aeiou]cir$"}, { nexo = "C" }}, {"fruncir", {"[^aeious]cir$"}, { nexo = "c" }}, {"dirigir", {"gir$"}, { nexo = "g" }}, {"gruñir", {"ñir$"}, { nexo = "ñ" }}, {"construir", {"uir$"}, { nexo = "u" }}, {"partir", {"ir$"}, { }}, }, ["ír"] = { {"reír", {"eír$"}, { nucleo = "e", alt = {"í-i"}, }}, {"ír", {"ír$"}, { -- para que oír no tire error }}, } } local paradigmas_irregulares = { ["ar"] = { {"andar", {"^d?e?s?andar$"}, { -- cuidado con mandar nucleo = "and", ind_perf = {{"anduve", "andé{x}"}, {"anduviste", "andaste{x}"}, {"anduviste", "andaste{x}"}, {"anduvo", "andó{x}"}, {"anduvimos", "andamos{x}"}, {"anduvisteis", "andasteis{x}"}, {"anduvieron", "andaron{x}"}}, subj_imp = {nucleo = "anduv"}, subj_fut = {nucleo = "anduv"} }}, {"dar", {"^d?e?s?dar$"}, { -- no pueden ir otros verbos como "andar o quedar" nucleo = "d", ind_pres = {{"doy"}}, ind_perf = {sufijo_inf = "er"}, subj_pres = {{"dé"}, nil, nil, {"dé"}}, subj_imp = {sufijo_inf = "er"}, subj_fut = {sufijo_inf = "er"}, imper = {nil, nil, nil, {"dé"}} }}, {"errar", {"^errar$"}, { nucleo = "err", alt = {"ye", "REG"}, }}, {"estar", {"^estar$"}, { ind_pres = {{"estoy"}, {"estás"}, nil, {"está"}, nil, nil, {"están"}}, ind_perf = {nucleo = "estuv"}, subj_pres = {{"esté"}, {"estés"}, {"estés"}, {"esté"}, nil, nil, {"estén"}}, subj_imp = {nucleo = "estuv"}, subj_fut = {nucleo = "estuv"}, imper = {nil, {"está"}, nil, {"esté"}, nil, nil, {"estén"}} }}, {"inhestar", {"inhestar$"}, { alt = {"ie"}, part = {"inhiesto"} }}, {"tar", {"^tar$"}, { ind_pres = {{"toy"}}, ind_perf = {nucleo = "tuv"}, subj_pres = {{"té"}, nil, nil, {"té"}}, subj_imp = {nucleo = "tuv"}, subj_fut = {nucleo = "tuv"}, imper = {nil, nil, nil, {"té"}, nil, nil, nil} }}, {"enviar", {"enviar$"}, { nexo = "i", }}, {"culiar", {"culiar$"}, { nexo = "I" }}, {"aislar", {"aislar$"}, { alt = {"í"} }}, {"agorar", {"agorar$"}, { alt = {"üe"} }}, {"aunar", {"^aunar$"}, { alt = {"ú"} }}, {"contar", {"contar$"}, { alt = {"ue"} }}, {"pensar", {"^pensar$"}, { -- no puede ir compensar alt = {"ie"} }}, }, ["er"] = { {"caber", {"^caber$"}, { ind_pres = {{"quepo"}}, ind_fut = {nucleo = "ca", nexo = "#br#"}, ind_perf = {nucleo = "cup"}, subj_pres = {nucleo = "quep"}, subj_imp = {nucleo = "cup"}, subj_fut = {nucleo = "cup"}, cond = {nucleo = "ca", nexo = "#br#"}, imper = {nil, nil, nil, {"quepa"}, {"quepamos"}, nil, {"quepan"}} }}, {"caer", {"caer$"}, { nucleo = "ca", ind_pres = {{"caigo"}}, subj_pres = {nucleo = "caig"}, imper = {nil, nil, nil, {"caiga"}, {"caigamos"}, nil, {"caigan"}} }}, {"cocer", {"cocer$"}, { nucleo = "co", nexo = "S", -- evitar C (epéntesis con zc) alt = {"ue"}, part = {"cocido", "cocho{†}"} }}, {"hacer", {"[hfj]acer$"}, { nucleo = "a", nexo = "S", -- evitar C (epéntesis con zc) part = {"echo"}, ind_pres = {{"ago"}}, ind_perf = {nucleo = "i"}, ind_fut = {nucleo = "a", nexo = "#r#"}, subj_pres = {nucleo = "ag", nexo = ""}, subj_imp = {nucleo = "i"}, subj_fut = {nucleo = "i"}, cond = {nucleo = "a", nexo = "#r#"}, imper = {nil, {"az", "ace{x}"}, {"acé"}, {"aga"}, {"agamos"}, nil, {"agan"}}, }}, {"haber", {"^haber$"}, { ind_pres = {{"he"}, {"has"}, {"has"}, {"ha", "hay{IMPERSONAL}"}, {"hemos"}, nil, {"han"}, {"hay"}}, ind_perf = {nucleo = "hub"}, ind_fut = {nucleo = "ha", nexo = "#br#"}, subj_pres = {nucleo = "hay"}, subj_imp = {nucleo = "hub"}, subj_fut = {nucleo = "hub"}, cond = {nucleo = "ha", nexo = "#br#"}, imper = {nil, {"he{†}", "habe{†}"}, {"he{†}", "habe{†}"}, {"haya{†}"}, {"hayamos{†}"}, nil, {"hayan{†}"}}, }}, {"mecer", {"^r?e?mecer$"}, { nexo = "S", -- evitar C (epéntesis con zc) }}, {"oler", {"^oler$"}, { alt = {"hue"}, }}, {"volver", {"olver$"}, { nucleo = "olv", alt = {"ue"}, part = {"uelto"} }}, {"placer", {"placer$"}, { nucleo = "pla", ind_perf = {nil, nil, nil, {"plació", "plugo"}, nil, nil, {"placieron", "pluguieron"}}, subj_imp = {nil, nil, nil, {"placiera", "placiese", "pluguiera", "pluguiese"}, nil, nil, nil}, subj_fut = {nil, nil, nil, {"placiere", "pluguiere"}, nil, nil, nil}, }}, {"poder", {"poder$"}, { nucleo = "pod", alt = {"ue"}, ger = {"pudiendo"}, ind_perf = {nucleo = "pud"}, ind_fut = {nucleo = "po", nexo = "#dr#"}, subj_imp = {nucleo = "pud"}, subj_fut = {nucleo = "pud"}, cond = {nucleo = "po", nexo = "#dr#"}, }}, {"poner", {"poner$"}, { nucleo = "pon", part = {"puesto"}, ind_pres = {{"pongo"}}, ind_perf = {nucleo = "pus"}, ind_fut = {nucleo = "pon", nexo = "#dr#"}, subj_pres = {nucleo = "pong"}, subj_imp = {nucleo = "pus"}, subj_fut = {nucleo = "pus"}, cond = {nucleo = "pon", nexo = "#dr#"}, imper = {nil, {"pon", "pone{x}"}, nil, {"ponga"}, {"pongamos"}, nil, {"pongan"}}, }}, {"proveer", {"proveer$"}, { nucleo = "prov", part = {"provisto", "proveído{†}"} }}, {"querer", {"querer$"}, { nucleo = "quer", alt = {"ie"}, ind_perf = {nucleo = "quis"}, ind_fut = {nucleo = "que", nexo = "#rr#"}, subj_imp = {nucleo = "quis"}, subj_fut = {nucleo = "quis"}, cond = {nucleo = "que", nexo = "#rr#"}, }}, {"raer", {"^raer$"}, { -- no contraer, etc. ind_pres = {{"raigo", "rayo"}}, subj_pres = {nucleo = {"raig", "ray"}}, imper = {nil, nil, nil, {"raiga", "raya"}, {"raigamos", "rayamos"}, nil, {"raigan", "rayan"}} }}, {"roer", {"roer$"}, { nucleo = "ro", ind_pres = {{"roo", "roigo", "royo"}}, subj_pres = {nucleo = {"ro", "roig", "roy"}}, imper = {nil, nil, nil, {"roa", "roiga", "roya"}, {"roamos", "roigamos", "royamos"}, nil, {"roan", "roigan", "royan"}} }}, {"romper", {"^romper$", "^arromper$"}, { -- no corromper, derromper, entrerromper nucleo = "romp", part = {"roto", "rompido{†}"} }}, {"saber", {"saber$"}, { nucleo = "sab", ind_pres = {{"sé", "sabo{x}"}}, ind_perf = {nucleo = "sup"}, ind_fut = {nucleo = "sa", nexo = "#br#"}, subj_pres = {nucleo = "sep"}, subj_imp = {nucleo = "sup"}, subj_fut = {nucleo = "sup"}, cond = {nucleo = "sa", nexo = "#br#"}, imper = {nil, nil, nil, {"sepa"}, {"sepamos"}, nil, {"sepan"}} }}, {"ser", {"^ser$"}, { ind_pres = {{"soy"}, {"eres"}, {"sos"}, {"es"}, {"somos"}, {"sois", "ereis{†}"}, {"son"}}, ind_imp = {{"era"}, {"eras"}, {"eras"}, {"era"}, {"éramos"}, {"erais"}, {"eran"}}, ind_perf = {{"fui"}, {"fuiste"}, {"fuiste"}, {"fue"}, {"fuimos"}, {"fuisteis"}, {"fueron"}}, subj_pres = {nucleo = "se"}, subj_imp = {nucleo = "", nexo = "#fu#"}, -- no puedo poner "u" porque obtendría "fuyera" subj_fut = {nucleo = "", nexo = "#fu#"}, imper = {nil, {"sé"}, {"sé"}, {"sea"}, {"seamos"}, nil, {"sean"}} }}, {"seer", {"^seer$", "^eser$"}, { prefijo = "", nucleo = "s", ind_pres = {{"só", "seo"}, {"sees", "siedes"}, {"sos", "sodes"}, {"siede"}, {"sedemos"}, {"seedes", "sodes"}, {"seyen", "sieden"}}, ind_imp = {{"era"}, {"eras"}, {"eras"}, {"era"}, {"éramos"}, {"érades"}, {"eran"}}, ind_perf = {{"fu", "fué"}, {"fueste", "fuste"}, {"fuestes", "fuistes"}, {"fo", "foé", "suvo"}, {"fuemos"}, {"fuestes", "fuistes"}, {"foron"}}, ind_fut = {nil, nil, {"seredes"}, nil, nil, {"seredes"}, nil}, cond = {nil, nil, {"seríades"}, nil, nil, {"seríades"}, nil}, subj_pres = {nil, nil, {"seades"}, nil, nil, {"seades"}, nil}, subj_imp = {nucleo = "", nexo = "#fu#", nil, nil, {"fuérades"}, nil, nil, {"fuérades"}, nil}, -- no puedo poner "u" porque obtendría "fuyera" subj_fut = {nucleo = "", nexo = "#fu#", nil, nil, {"fuéredes"}, nil, nil, {"fuéredes"}, nil}, imper = {nil, {"sé"}, {"seades"}, {"sea"}, {"seamos"}, {"seades"}, {"sean"}} }}, {"tener", {"tener$"}, { nucleo = "ten", alt = {"ie"}, ind_pres = {{"tengo"}}, ind_perf = {nucleo = "tuv"}, ind_fut = {nucleo = "ten", nexo = "#dr#"}, subj_pres = {nucleo = "teng"}, subj_imp = {nucleo = "tuv"}, subj_fut = {nucleo = "tuv"}, cond = {nucleo = "ten", nexo = "#dr#"}, imper = {nil, {"ten", "tiene{x}"}, nil, {"tenga"}, {"tengamos"}, nil, {"tengan"}} }}, {"traer", {"traer$"}, { nucleo = "tra", ind_pres = {{"traigo"}}, ind_perf = {nucleo = "tra", nexo = "#j#"}, subj_pres = {nucleo = "traig"}, subj_imp = {nucleo = "tra", nexo = "#j#"}, subj_fut = {nucleo = "tra", nexo = "#j#"}, imper = {nil, nil, nil, {"traiga"}, {"traigamos"}, nil, {"traigan"}} }}, {"valer", {"valer$"}, { nucleo = "val", ind_pres = {{"valgo"}}, ind_fut = {nucleo = "val", nexo = "#dr#"}, subj_pres = {nucleo = "valg"}, cond = {nucleo = "val", nexo = "#dr#"}, imper = {nil, nil, nil, {"valga"}, {"valgamos"}, nil, {"valgan"}} }}, {"ver", {"^ver$"}, { nucleo = "v", part = {"visto"}, ind_pres = {{"veo"}}, ind_imp = {nucleo = "ve"}, subj_pres = {nucleo = "ve"}, imper = {nil, nil, {"mirá"}, {"vea"}, {"veamos"}, nil, {"vean"}} }}, {"prever", {"^antever$", "^entrever$", "^prever$", "^rever$"}, { nucleo = "v", part = {"visto"}, ind_pres = {{"veo"}, {"vés"}, nil, {"vé"}, nil, nil, {"vén"}}, ind_imp = {nucleo = "ve"}, subj_pres = {nucleo = "ve"}, imper = {nil, nil, nil, {"vea"}, {"veamos"}, nil, {"vean"}} }}, {"yacer", {"^yacer$", "^subyacer$"}, { nucleo = "yac", nexo = "", -- evitar C (epéntesis con zc), lo voy a agregar manual ind_pres = {{"yazco", "yazgo", "yago"}}, subj_pres = {nucleo = {"yazc", "yazg", "yag"}}, imper = {nil, {"yace", "yaz"}, {"yacé"}, {"yazca", "yazga", "yaga"}, {"yazcamos", "yazgamos", "yagamos"}, nil, {"yazcan", "yazgan", "yagan"}} }}, {"mover", {"mover$"}, { alt = {"ue"}, }}, {"entender", {"entender$"}, { alt = {"ie"}, }}, }, ["ir"] = { {"asir", {"asir$"}, { nucleo = "as", ind_pres = {{"asgo"}}, subj_pres = {nucleo = "asg"}, imper = {nil, nil, nil, {"asga"}, {"asgamos"}, nil, {"asgan"}} }}, {"abrir", {"[^js]abrir$", "^abrir$"}, { -- abrir, cubrir y derivados, pero no "desabrir" ni "jabrir" (son regs.) nucleo = "abr", part = {"abierto"} }}, {"abrir", {"ubrir$"}, { -- Parte 2. NOTA: no pueto tomar "br" como núcleo porque el programa piensa que es monosílabo y pone mal las tildes (cf. [[entreabrir]], [[reabrir]]) nucleo = "ubr", part = {"ubierto"} }}, -- para decir contemplo 4 casos: -- 1. decir, redecir, entredecir, antedecir: lo normal, con el imperativo en "dí" (di) -- 2. interdecir: similar a 1. pero el imperativo es interdice (no *interdí) -- 3. bendecir, maldecir: agrego bendito, maldito al pp -- 4. condecir, contradecir, desdecir, predecir: parto de 1 pero agrego el futuro regular que esta aceptado {"decir", {"^decir$", "^redecir$", "^entredecir$", "^antedecir$"}, { nucleo = "de", nexo = "S", -- para evitar C (epéntesis con zc) alt = {"i-i"}, part = {"dicho"}, ind_pres = {{"digo"}}, ind_perf = {nucleo = "di", nexo = "#j#"}, ind_fut = {nucleo = "d", nexo=""}, subj_pres = {nexo = "#g#"}, subj_imp = {nexo = "#j#"}, subj_fut = {nexo = "#j#"}, cond = {nucleo = "d", nexo=""}, imper = {nil, {"di", "dice{x}"}, nil, {"diga"}, {"digamos"}, nil, {"digan"}} }}, {"interdecir", {"interdecir$"}, { nucleo = "de", nexo = "S", -- para evitar C (epéntesis con zc) alt = {"i-i"}, part = {"dicho"}, ind_pres = {{"digo"}}, ind_perf = {nucleo = "di", nexo = "#j#"}, ind_fut = {nucleo = "d", nexo=""}, subj_pres = {nexo = "#g#"}, subj_imp = {nexo = "#j#"}, subj_fut = {nexo = "#j#"}, cond = {nucleo = "d", nexo=""}, imper = {nil, {"dice"}, nil, {"diga"}, {"digamos"}, nil, {"digan"}} }}, {"bendecir", {"bendecir$", "maldecir$"}, { nucleo = "de", nexo = "S", -- para evitar C (epéntesis con zc) alt = {"i-i"}, part = {"decido{PART}", "dito{ADJ}"}, ind_pres = {{"digo"}}, ind_perf = {nucleo = "di", nexo = "#j#"}, subj_pres = {nexo = "#g#"}, subj_imp = {nexo = "#j#"}, subj_fut = {nexo = "#j#"}, imper = {nil, {"dice"}, nil, {"diga"}, {"digamos"}, nil, {"digan"}} }}, {"predecir", {"decir$"}, { nucleo = "de", nexo = "S", -- para evitar C (epéntesis con zc) alt = {"i-i"}, part = {"dicho"}, ind_pres = {{"digo"}}, ind_perf = {nucleo = "di", nexo = "#j#"}, ind_fut = {nucleo = {"dec", "d"}, nexo=""}, subj_pres = {nexo = "#g#"}, subj_imp = {nexo = "#j#"}, subj_fut = {nexo = "#j#"}, cond = {nucleo = {"dec", "d"}, nexo=""}, imper = {nil, {"dice", "dí{x}"}, nil, {"diga"}, {"digamos"}, nil, {"digan"}} }}, {"erguir", {"^erguir$"}, { nucleo = "er", alt = {"ye-i", "i-i"}, }}, {"imprimir", {"imprimir$"}, { nucleo = "imprim", part = {"imprimido{PART}", "impreso{ADJ}"} }}, {"infecir", {"^infecir$"}, { -- https://www.fiile.org.ar/uploadsarchivos/_1917__notas_al_castellano_s4.pdf nucleo = "infec", nexo = "t", -- para evitar C (epéntesis con zc) sufijo = "ar", part = {"infecto"} }}, {"ir", {"^ir$"}, { ger = {"yendo"}, ind_pres = {{"voy"}, {"vas"}, {"vas"}, {"va"}, {"vamos"}, {"vais"}, {"van"}}, ind_imp = {{"iba"}, {"ibas"}, {"ibas"}, {"iba"}, {"íbamos"}, {"ibais"}, {"iban"}}, ind_perf = {{"fui"}, {"fuiste"}, {"fuiste"}, {"fue"}, {"fuimos"}, {"fuisteis"}, {"fueron"}}, subj_pres = {nucleo = "vay"}, subj_imp = {nucleo = "", nexo = "#fu#"}, -- no puedo poner "u" porque obtendría "fuyera" subj_fut = {nucleo = "", nexo = "#fu#"}, imper = {nil, {"ve", "ves{x}"}, {"andá"}, {"vaya"}, {"vayamos"}, nil, {"vayan"}} }}, {"morir", {"morir$"}, { nucleo = "mor", alt = {"ue-u"}, part = {"muerto"}, }}, {"pudrir", {"pudrir$"}, { nucleo = "pudr", part = {"podrido"} }}, {"salir", {"salir$"}, { nucleo = "sal", ind_pres = {{"salgo"}}, ind_fut = {nucleo = "sal", nexo = "#dr#"}, subj_pres = {nucleo = "salg"}, cond = {nucleo = "sal", nexo = "#dr#"}, imper = {nil, {"sal", "sale{x}"}, nil, {"salga"}, {"salgamos"}, nil, {"salgan"}} }}, {"escribir", {"^escribir$", "^reescribir$"}, { nucleo = "escrib", part = {"escrito"} }}, {"inscribir", {"scribir$"}, { nucleo = "scrib", part = {"scrito", "scripto{ARG/URU}"} }}, {"venir", {"venir$"}, { nucleo = "ven", alt = {"ie-i"}, ind_pres = {{"vengo"}}, ind_fut = {nexo = "#dr#"}, ind_perf = {nucleo = "vin"}, subj_pres = {nucleo = "veng"}, cond = {nexo = "#dr#"}, imper = {nil, {"ven", "viene{x}"}, nil, {"venga"}, {"vengamos"}, nil, {"vengan"}} }}, {"discernir", {"discernir$"}, { alt = {"ie"} }}, {"sentir", {"sentir$"}, { alt = {"ie-i"} }}, {"podrir", {"podrir$"}, { alt = {"u-u"}, }}, {"reunir", {"reunir$"}, { alt = {"ú"} }}, {"prohibir", {"prohibir$"}, { alt = {"í"} }}, {"rehenchir", {"rehenchir$"}, { alt = {"í-i"} }}, {"digerir", {"digerir$"}, { part = {"digerido", "digesto{†}"} }}, {"dormir", {"dormir$"}, { alt = {"ue-u"} }}, {"pedir", {"pedir$"}, { -- también ceñir (incluyo en este paradigma especificando el alt) alt = {"i-i"} }}, }, ["ír"] = { {"desvaír", {"desvaír$"}, { -- hay más verbos en -air? no podemos considerarlo como regla general ind_pres = {{"desvayo"}}, subj_pres = {nucleo = "desvay"}, imper = {nil, nil, nil, {"desvaya"}, {"desvayamos"}, nil, {"desvayan"}} }}, {"freír", {"freír$"}, { nucleo = "fre", part = {"frito{PART/ADJ}", "freído{PART}"}, }}, {"oír", {"oír$"}, { nucleo = "o", alt = {"oy"}, ger = {"oyendo"}, ind_pres = {{"oigo"}}, subj_pres = {nucleo = "oig"}, imper = {nil, nil, nil, {"oiga"}, {"oigamos"}, nil, {"oigan"}} }}, }, } local alt_info = { ["ar"] = { ["í"] = {"aislar", "i", "í"}, -- tb. descafeinar ["ú"] = {"aunar", "u", "ú"}, -- tb. rehusar ["ie"] = {"pensar", "e", "ie"}, ["ue"] = {"contar", "ou", "ue"}, -- también jugar ["üe"] = {"agorar", "o", "üe"}, ["hue"] = {"desosar", "ou", "hue"}, ["ye"] = {"errar", "e", "ye"}, }, ["er"] = { ["i"] = {"???", "e", "i"}, -- REVISAR: existe esto?? ["ie"] = {"entender", "e", "ie"}, ["ue"] = {"mover", "o", "ue"}, ["hue"] = {"oler", "o", "hue"}, }, ["ir"] = { ["i"] = {"???", "e", "i"}, -- REVISAR: existe esto?? ["í"] = {"prohibir", "i", "í"}, ["í-i"] = {"rehenchir", "e", "í", "i"}, ["i-i"] = {"pedir", "e", "i", "i"}, ["ie"] = {"discernir", "ei", "ie"}, -- por las dudas también la i, por inquirir ["ie-i"] = {"sentir", "ei", "ie", "i"}, -- inquirir ["u"] = {"???", "o", "u", "u"}, ["ú"] = {"reunir", "u", "ú"}, ["u-u"] = {"podrir", "o", "u", "u"}, -- REVISAR: existe esto?? ["ue-u"] = {"dormir", "o", "ue", "u"}, ["ye-i"] = {"erguir", "e", "ye", "i"}, }, ["ír"] = { ["í-i"] = {"reír", "e", "í", "i"}, ["oy"] = {"oír", "o", "oy", "oy"}, } } local function agregar_forma(arr, forma_, prefijo, nucleo_inf__, nucleos1_, nucleos2_, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ if sufijo_inf == "ar" and arr.nucleo then sufijo_inf = "er" -- echo mano a los sufijos de la otra conjugación, más que nada aplica a verbos como andar -> ANDUViera end local forma = forma_ if forma == "ind_perf" and arr.nucleo then forma = "ind_perf_alt" end local sufijos_ = obtener_sufijos(sufijo_inf, forma) local nucleos local nucleo_inf_ = {nucleo_inf__} if not arr.nucleo then if forma == "ger" then nucleos = {nucleos2_} elseif forma == "part" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos1_, nucleos1_, nucleo_inf_, nucleos1_, nucleo_inf_, nucleo_inf_, nucleos1_} elseif forma == "ind_perf" then nucleos = {nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos2_, nucleo_inf_, nucleo_inf_, nucleos2_} elseif forma == "subj_pres" then nucleos = {nucleos1_, nucleos1_, nucleos2_, nucleos1_, nucleos2_, nucleos2_, nucleos1_} elseif forma == "subj_imp" or forma == "subj_fut" then local n = nucleos2_ nucleos = {n, n, n, n, n, n, n} elseif forma == "imper" then nucleos = {{""}, nucleos1_, nucleo_inf_, nucleos1_, nucleos2_, nucleo_inf_, nucleos1_} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n, n} end else local ns = type(arr.nucleo) ~= "table" and {arr.nucleo} or arr.nucleo for i,_ in ipairs(ns) do ns[i] = "#"..ns[i].."#" end nucleos = {ns, ns, ns, ns, ns, ns, ns} end local L = #sufijos_ if L == 14 then L = 7 -- caso del subjuntivo imperfecto end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = (forma == "subj_pres" and i == VOS) and {unpack(arr[TU])} or {} local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if nexosufijo2 then insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end if forma == "subj_imp" then local nexosufijo3, _ = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+7], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo3, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if strfind(vpron..art, "([ae])(ndo[~#]*"..LETRA.."+[~#]*)$") then vpron = strsubn(vpron, "^(.*)([ae])(ndo)", function(x, y, z) return x..agregar_tilde[y]..z end) end if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local h = auxiliar[forma][1]..pron..art h = strsubn(h, "([ae])(ndo[~#]*"..LETRA.."+[~#]*)$", function(y, z) return agregar_tilde[y]..z end) -- tildo si tiene artículo o enclítico for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local hs = auxiliar[forma] if hs then for i = YO, ELLOS do local t2 = {} local pronart = pron == "se" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOSOTROS and resto or resto_pl)) if hs[i+7] then -- subjuntivo imperfecto insert(t2, adv..pronart..hs[i+7].." "..f_links(part)..f_links(i-7 < NOSOTROS and resto or resto_pl)) end end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if pron == "se" or art ~= "" then -- tengo que correr la acentuación una sílaba para atrás, lo bueno es que no hay formas terminadas en consonante dist. de n o s vpron = strsubn(vpron, "[~#]", "") -- PARCHE: quito todas las marcas de colores, ya que cuesta mucho transformar los verbos con imperativos irregulares, quedan incrustadas en el medio -- 1. Las llanas pasan a esdrújulas vpron = strsubn(vpron, "^([^áéíóú]-)([aeo])(h?[iuü]?h?[aeo][ns]?)$", -- si no hay consonante de separación, hay un hiato de dos vocales abiertas. OJO, no es lo mismo comenzar con [^áéíóú]- que comenzar con [^áéíóú]* function(x, y, z) return x..agregar_tilde[y]..z end ) vpron = strsubn(vpron, "^([^áéíóú]-)([aeoiu])(h?[iuü]?"..CONS_SALVO_H.."+u?[iuü]?[aeiou]+[ns]?)$", -- normal, con consonante de separación. OJO, no es lo mismo comenzar con [^áéíóú]- que comenzar con [^áéíóú]* function(x, y, z) return x..agregar_tilde[y]..z end ) -- si es un hiato con tilde, lo dejo -- 2. Las agudas pasan a llanas, los monosílabos con tilde la pierden, SALVO LOS HIATOS CON VOCAL CERRADA (ej: reí -> reíte. embaí -> embaíte, PERO pecheá -> pecheala) vpron = strsubn(vpron, "^([^áéíóú]*"..CONS_SALVO_H.."u?[iuü]?)([áéíóú])([ns]?)$", function(x, y, z) return x..quitar_tilde[y]..z end ) vpron = strsubn(vpron, "^([^áéíóú]*[aeo])([áéó])([ns]?)$", function(x, y, z) return x..quitar_tilde[y]..z end ) if pron == "se" then -- ajustes finales https://www.rae.es/dpd/pronombres%20personales%20%C3%A1tonos local enc = REFLEXIVOS[i] if enc == "nos" then -- dejémoS nos -> dejémonos vpron = strsubn(vpron, "mos$", "mo") end if enc == "os" then -- amaD + os -> amaos, hacED + os -> haceos, salvo idos vpron = strsubn(vpron, "([ae])d$", "%1") vpron = strsubn(vpron, "("..LETRA..")[ií]d$", "%1í") -- aseguro q no sea "id" a secas end if art ~= "" then -- Si tengo pronombre y artículo, la palabra tiene que quedar esdrújula o sobreesdrújula (dársela -> dátela) vpron = strsubn(vpron, "^([^áéíóú]*)([aeiou])([^áéíóú]-)$", function(x, y, z) return x..agregar_tilde[y]..z end ) end vpron = vpron..enc end end if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "se" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOSOTROS and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end if impersonal == "3" then return {t[EL]} elseif impersonal == "36" then return {t[EL], t[ELLOS]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local params = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["alt"] = {lista = true}, ["nucleopres1"] = {lista = true}, ["nucleopret3"] = {lista = true}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopret3"] = {alias_de = "nucleopret3"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["ind_perf"] = {lista = true}, ["ind_fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["subj_fut"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then generar_error("indirecto") end local adv, r1 = strmatch(tit, "^([sSnN][ío]"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiáéí]r)(s?e?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiáéí]rs?e?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") v = strsubn(v, "^(%S*)ár$", "%1ar") -- pronominales v = strsubn(v, "^(%S*)ér$", "%1er") -- pronominales v = strsubn(v, "^(%S*[^aeo])ír$", "%1ir") -- grafías anticuadas local sufijo_inf = strmatch(v, "[aeií]r$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.ind_perf = parsear_arreglo_doble(args["ind_perf"]) conjugado.ind_fut = parsear_arreglo_doble(args["ind_fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.subj_fut = parsear_arreglo_doble(args["subj_fut"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["ind_perf"], defectivo) defectivo = comprobar_defectivo(args["ind_fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["subj_fut"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["alt"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopret3"])) do local conj = {} if strfind(v, "iar$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iar (anunciar, enviar, culiar)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["anunciar"] = nil paradigmas_reconocidos["amar"] = nil paradigmas_reconocidos["temer"] = nil paradigmas_reconocidos["partir"] = nil paradigmas_reconocidos["ír"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos1 = {} local nucleos2 = {} local alt = conj.alt or {} if args["alt"][N] then insert(alt, args["alt"][N]) end if args["nucleopres1"][N] then alt = {} -- para que no intente buscar el alt y tire error (cf. [[desconsentir]]) end for i, a in ipairs(alt) do if a ~= "REG" then local n1, n2 local info = alt_info[sufijo_inf][a] assert(info, "Valor de alt no reconocido: "..a) local sust n1, sust = strsubb(nucleo_inf, "^([^"..info[2].."]*)["..info[2].."]([^"..info[2].."]*)$", "%1#"..info[3].."#%2") if info[4] then n2, sust = strsubb(nucleo_inf, "^([^"..info[2].."]*)["..info[2].."]([^"..info[2].."]*)$", "%1#"..info[4].."#%2") end assert(sust, "Alternancia vocálica no reconocida") if n1 and not esta_en_lista(n1, nucleos1) then insert(nucleos1, n1) -- no uso diccionario porque no quiero que me invierta el orden end if n2 and not esta_en_lista(n2, nucleos2) then insert(nucleos2, n2) end paradigmas_reconocidos[info[1]] = true es_irregular = true -- si tengo el alt será siemrpe irregular, indistintamente de si el paradigma del mismo índice es regular paradigmas_reconocidos["anunciar"] = nil -- entonces hago lo mismo que hice con los paradigmas regulares paradigmas_reconocidos["amar"] = nil paradigmas_reconocidos["temer"] = nil paradigmas_reconocidos["partir"] = nil paradigmas_reconocidos["ír"] = nil else insert(nucleos1, nucleo_inf) end end if args["nucleopres1"][N] then for k, v in pairs(alt_info[sufijo_inf]) do if args["nucleopret3"][N] then if v[4] then if strsub(nucleo_inf, "^.*["..v[2].."].-$", v[3]) == strsub(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1") and strsub(nucleo_inf, "^.*["..v[2].."].-$", v[4]) == strsub(args["nucleopret3"][N], "^.*#([^#]+)#.*$", "%1") then es_irregular = true paradigmas_reconocidos[v[1]] = true insert(nucleos1, args["nucleopres1"][N]) insert(nucleos2, args["nucleopret3"][N]) paradigmas_reconocidos["anunciar"] = nil -- entonces hago lo mismo que hice con los paradigmas regulares paradigmas_reconocidos["amar"] = nil paradigmas_reconocidos["temer"] = nil paradigmas_reconocidos["partir"] = nil paradigmas_reconocidos["ír"] = nil break end end else if not v[4] then if strsub(nucleo_inf, "^.*["..v[2].."].-$", v[3]) == strsub(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1") then es_irregular = true paradigmas_reconocidos[v[1]] = true insert(nucleos1, args["nucleopres1"][N]) paradigmas_reconocidos["anunciar"] = nil -- entonces hago lo mismo que hice con los paradigmas regulares paradigmas_reconocidos["amar"] = nil paradigmas_reconocidos["temer"] = nil paradigmas_reconocidos["partir"] = nil paradigmas_reconocidos["ír"] = nil break end end end end end if not nucleos1[1] then nucleos1[1] = nucleo_inf end if not nucleos2[1] then nucleos2[1] = nucleo_inf end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.ind_perf = conj.ind_perf or {} conj.ind_fut = conj.ind_fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.subj_fut = conj.subj_fut or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.ind_perf, "ind_perf", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.ind_fut, "ind_fut", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.subj_fut, "subj_fut", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.ind_perf, conj.ind_perf, args["ind_perf"]) combinar_arreglo_doble(conjugado.ind_fut, conj.ind_fut, args["ind_fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.subj_fut, conj.subj_fut, args["subj_fut"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", impers, args["part"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", impers, args["ind_imp"][1] == "no") local ind_perf = formatear_conjugacion(conjugado.ind_perf, adv, pron, art, resto, resto_pl, "ind_perf", impers, args["ind_perf"][1] == "no") local ind_fut = formatear_conjugacion(conjugado.ind_fut, adv, pron, art, resto, resto_pl, "ind_fut", impers, args["ind_fut"][1] == "no") local ind_perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_perf_comp", impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", impers, args["part"] == "no") local ind_fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_fut_comp", impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", impers, args["subj_imp"][1] == "no") local subj_fut = formatear_conjugacion(conjugado.subj_fut, adv, pron, art, resto, resto_pl, "subj_fut", impers, args["subj_fut"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", impers, args["part"] == "no") local subj_fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_fut_comp", impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then if args["indirecto"] then fila_pronombres_ind = {"", "a mí me, a ti te, a vos te, a él le, a ella le, a usted le, a nosotros nos, a vosotros os, a ustedes les, a ellos les", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "a mí me, a ti te, a vos te, a él le, a ella le, a usted le, a nosotros nos, a vosotros os, a ustedes les, a ellos les", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "que a mí me, que a ti te, que a vos te, que a él le, que a ella le, que a usted le, que a nosotros nos, que a vosotros os, que a ustedes les, que a ellos les", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(ello)", color=COLOR_IMPER, header=true, class="pc"} else fila_pronombres_ind = {"", "(ello)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(ello)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(que ello)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(ello)", color=COLOR_IMPER, header=true, class="pc"} end cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(ello)", "(ellos)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(ello)", "(ellos)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(que ello)", "(que ellos)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(ello)", "(ellos)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "yo", "tú", "vos", "él, ella, usted", "nosotros", "vosotros", "ustedes, ellos", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "yo", "tú", "vos", "él, ella, usted", "nosotros", "vosotros", "ustedes, ellos", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "que yo", "que tú", "que vos", "que él, que ella, que usted", "que nosotros", "que vosotros", "que ustedes, que ellos", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tú)", "(vos)", "(usted)", "(nosotros)", "(vosotros)", "(ustedes)", color=COLOR_IMPER, header=true, class="pc"} cs = 8 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio", header=true, color="WhiteSmoke"}, {part[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} end t[5] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[6] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[7] = fila_pronombres_ind t[8] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[9] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[10] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(ind_perf)} t[11] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[12] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(ind_perf_comp)} t[13] = {{"Futuro", color=COLOR_IND, header=true}, unpack(ind_fut)} t[14] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(ind_fut_comp)} t[15] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[16] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[17] = fila_pronombres_cond t[18] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[19] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[20] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[21] = fila_pronombres_subj t[22] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[23] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[24] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[25] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[26] = {{f("Futuro{†}"), color=COLOR_SUBJ, header=true}, unpack(subj_fut)} t[27] = {{f("Futuro compuesto{†}"), color=COLOR_SUBJ, header=true}, unpack(subj_fut_comp)} t[28] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[29] = fila_pronombres_imper if mostrar_imper then t[30] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[30] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[31] = {{f("Leyenda: † arcaico, x no normativo, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[32] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "ES:Verbos irregulares") else insert(cats, "ES:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "ES:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "ES:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "ES:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "ES:Verbos de objeto indirecto") end if defectivo then insert(cats, "ES:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "ES:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "ES:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "ES:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export 9u4h8l1htvkk2ghih742fk4riun048q 5823318 5823307 2025-07-02T16:22:04Z Tmagc 158167 5823318 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local generar_error = require("Módulo:traza") local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal_no_tilde = "aeiouüAEIOUÜ" local vocal_tilde = "áéíóúÁÉÍÓÚ" local vocal = vocal_no_tilde..vocal_tilde local cons = "bcdfghjklmnñpqrstvwxyzBCDFGHJKLMNÑPQRSTVWXYZ" local espacios = "%-‐%s" local VOCAL = "["..vocal.."]" local CONS = "["..cons.."]" local LETRA = "["..vocal..cons.."]" local CONS_SALVO_H = "[^"..vocal.."hH~#{}]" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local agregar_tilde = { ["a"] = "á", ["e"] = "é", ["i"] = "í", ["o"] = "ó", ["u"] = "ú", ["á"] = "á", ["é"] = "é", ["í"] = "í", ["ó"] = "ó", ["ú"] = "ú", ["A"] = "Á", ["E"] = "É", ["I"] = "Í", ["O"] = "Ó", ["U"] = "Ú", ["Á"] = "Á", ["É"] = "É", ["Í"] = "Í", ["Ó"] = "Ó", ["Ú"] = "Ú", } local quitar_tilde = { ["á"] = "a", ["é"] = "e", ["í"] = "i", ["ó"] = "o", ["ú"] = "u", ["a"] = "a", ["e"] = "e", ["i"] = "i", ["o"] = "o", ["u"] = "u", ["Á"] = "A", ["É"] = "E", ["Í"] = "I", ["Ó"] = "O", ["Ú"] = "U", ["A"] = "A", ["E"] = "E", ["I"] = "I", ["O"] = "O", ["U"] = "U", } local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,7 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,7 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen, condicion) if not condicion then return end local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen, arreglo_de_condiciones) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i], arreglo_de_condiciones[i] == nil) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end function export.flexionar_palabra(p, mf, forzar_s) local r, v, c, s -- 1. Terminadas en vocal -- 1A. Terminan en -ote o -ete r, s = strmatch(p, "^(.*)(ote)$") if s then if mf then return {{r.."~ote~"}, {r.."~otes~"}, {r.."~ota~"}, {r.."~otas~"}} else return {{r.."~ote~"}, {r.."~otes~"}, {}, {}} end end r, s = strmatch(p, "^(.*)(ete)$") if s then if mf then return {{r.."~ete~"}, {r.."~etes~"}, {r.."~eta~"}, {r.."~etas~"}} else return {{r.."~ete~"}, {r.."~etes~"}, {}, {}} end end -- 1B. Terminan en vocal átona, o en [áéó] (cama, café, rococó, sofá) r, v = strmatch(p, "^(.*)([aeiouáéó])$") if v then if (v == "o") and mf then -- Palabras terminadas en e: arabe, dulce, limítrofe, salvaje, probable, conforme, fuerte, estadounidense return {{r.."~o~"}, {r.."~os~"}, {r.."~a~"}, {r.."~as~"}} else return {{r.."~"..v.."~"}, {r.."~"..v.."s~"}, {}, {}} end end -- 1C. Terminan en -í o en -ú (bisturí, bambú -> bisturís, bisturíes, bambú, bambúes) r, v = strmatch(p, "^(.*)([íú])$") if v then if forzar_s then return {{r.."~"..v.."~"}, {r.."~"..v.."s~"}, {}, {}} else return {{r.."~"..v.."~"}, {r.."~"..v.."s~", r.."~"..v.."es~"}, {}, {}} end end -- 2. Terminadas en consonante -- 2A. Terminadas en vocal + -y -> plural con -es salvo extranjerismos r, v, c = strmatch(p, "^(.*)("..VOCAL..")(y)$") if c then if forzar_s then local w = v if strfind(p, "^[^"..vocal_tilde.."]*["..vocal.."]"..CONS.."+".."[iuü]?"..VOCAL.."y$") then w = agregar_tilde[v] end return {{r.."#"..v..c.."#"}, {r.."#"..w.."is#"}, {}, {}} else return {{r.."~"..v..c.."~"}, {r.."~"..v..c.."es~"}, {}, {}} end end -- 2B. Terminadas en consonante + -y -> plural en -s cambiando la y por i r, c, _ = strmatch(p, "^(.*)("..CONS..")(y)$") if c then return {{r.."~"..c.."y~"}, {r.."~"..c.."is~"}, {}, {}} end -- 2C. Agudas y monosílabos terminados en -x : plural con -es r, c = strmatch(p, "^([^áéíóú]+)(x)$") if c then return forzar_s and {{r.."#x#"}, {r.."#xs#"}, {}, {}} or {{r.."~x~"}, {r.."~xes~"}, {}, {}} end -- 2D. Agudas terminadas en -n o -s : plural con -es r, v, c = strmatch(p, "^(.*[aeiou])([íú])([ns])$") -- si termina con un hiato en í o ú, necesito mantener la tilde en el plural (ej [[saín]]) if c then if mf then return {{r.."~"..v..c.."~"}, {r.."~"..v..c.."es~"}, {r.."~"..v..c.."a~"}, {r.."~"..v..c.."as~"}} else return {{r.."~"..v..c.."~"}, {r.."~"..v..c.."es~"}, {}, {}} end end r, v, c = strmatch(p, "^(.*)([áéíóú])([ns])$") -- lo habitual if not c then r, v, c = strmatch(p, "^(.*)([áéó])([iuü][ns])$") -- diptongo final end if c then local w = quitar_tilde[v] if mf then return {{r.."~"..v..c.."~"}, {r.."~"..w..c.."es~"}, {r.."~"..w..c.."a~"}, {r.."~"..w..c.."as~"}} else return {{r.."~"..v..c.."~"}, {r.."~"..w..c.."es~"}, {}, {}} end end -- 2E. Monosílabos terminados en -n o -s : plural con -es -- PRO TIP: cada sílaba tiene o un triptongo, o un diptongo o una única vocal -- Detectando esto puedo reconocer si es un monosílabo r, s = strmatch(p, "^("..CONS.."-)(u?[iuü]?h?[aeoiu]h?[iuü]?"..CONS.."?[ns])$") -- u extra al principio porque puede haber una "qu" if s then if mf then return forzar_s and {{r.."#"..s.."#"}, {r.."#"..s.."s#"}, {r.."~"..s.."a~"}, {r.."~"..s.."as~"}} or {{r.."~"..s.."~"}, {r.."~"..s.."es~"}, {r.."~"..s.."a~"}, {r.."~"..s.."as~"}} else return forzar_s and {{r.."#"..s.."#"}, {r.."#"..s.."s#"}, {}, {}} or {{r.."~"..s.."~"}, {r.."~"..s.."es~"}, {}, {}} end end -- 2F. Llanas terminadas en -n : plural con -es (telson -> télsones, cardumen -> cardúmenes) r, v, c, s = strmatch(p, "^([^áéíóú]-)([aeo])(h?[iuü]?h?[iuü]?h?)([aeo][iuü]?h?[n])$") -- si no hay consonante de separación, hay un hiato de dos vocales abiertas if not s then r, v, c, s = strmatch(p, "^([^áéíóú]-)([íú])(h?)([aeiou]h?[iuü]?h?[n])$") -- o bien, un hiato decreciente (flúor, crúor, imaginemos que terminan en n) end if not s then r, v, c, s = strmatch(p, "^([^áéíóú]-)([aeo])(h?[iuü]h?[iuü]?h?)([aeiou][iuü]?h?[n])$") -- o bien, un diptongo con la sílaba anterior (muy raro) end if not s then r, v, c, s = strmatch(p, "^([^áéíóú]-)([aeiou])(h?[iuü]?h?"..CONS_SALVO_H.."+h?u?[iuü]?h?)([aeiou][iuü]?h?[n])$") -- normal, con consontante de separación entre sílaba (nota: la u extra está por la "qu") end if s then local w = agregar_tilde[v] return forzar_s and {{r..v..c.."#"..s.."#"}, {r..w..c.."#"..s.."s#"}, {}, {}} or {{r..v..c.."~"..s.."~"}, {r..w..c.."~"..s.."es~"}, {}, {}} end -- 2G. Esdrújulas terminadas en -n y llanas/esdrújulas terminads en -s o -x : invariantes (polisíndeton, crisis, tórax) r, c = strmatch(p, "^(.*)([nsx])$") if c then return {{r.."~"..c.."~"}, {}, {}, {}} end -- 2H. Agudas terminadas en -ol y -or: esquirol, español, tutor, etc. -> -es + femenino en -a, -as r, s = strmatch(p, "^([^áéíóú]-)(o[lr])$") if s then if mf then return forzar_s and {{r.."#"..s.."#"}, {r.."#"..s.."s#"}, {r.."~"..s.."a~"}, {r.."~"..s.."as~"}} or {{r.."~"..s.."~"}, {r.."~"..s.."es~"}, {r.."~"..s.."a~"}, {r.."~"..s.."as~"}} else return forzar_s and {{r.."#"..s.."#"}, {r.."#"..s.."s#"}, {}, {}} or {{r.."~"..s.."~"}, {r.."~"..s.."es~"}, {}, {}} end end -- Agudas terminadas en -uz [[andaluz]], [[marfuz]] idem a caso anterior siempre?? REVISAR r, s = strmatch(p, "^([^áéíóú]-)(u)z$") if s then if mf then return {{r.."~"..s.."z~"}, {r.."~"..s.."ces~"}, {r.."~"..s.."za~"}, {r.."~"..s.."zas~"}} else return {{r.."~"..s.."z~"}, {r.."~"..s.."ces~"}, {}, {}} end end -- 2I. Agudas y llanas terminadas en vocal + -l, -r, -d, -j, -z, -ñ -> -es (césped, dócil, perejil, veloz, cholcheñ) r, v, c = strmatch(p, "^([^áéíóú]-)("..VOCAL..")([lrdjzñ])$") -- Agudas -- Graves if not c then r, v, c = strmatch(p, "^([^áéíóú]-[iuü]?h?[áéó]h?[iuü]?h?)([aeiou][iuü]?)([lrdjzñ])$") -- si hay una vocal tildada, explícitamente es grave así que van a tener que formarse sí o sí dos sílabas end if not c then r, v, c = strmatch(p, "^([^áéíóú]-[íú]h?)([aeiou][iuü]?)([lrdjzñ])$") -- idem a caso anterior, pero sin diptongo end if not c then r, v, c = strmatch(p, "^([^áéíóú]-[iuü]?h?[áéó]h?[iuü]?h?"..CONS_SALVO_H.."+h?u?[iuü]?h?)([aeiou][iuü]?)([lrdjzñ])$") -- idem casos anteriores pero con consonante (+ la u por la qu) end if not c then r, v, c = strmatch(p, "^([^áéíóú]-[íú]?h?"..CONS_SALVO_H.."+h?u?[iuü]?h?)([aeiou][iuü]?)([lrdjzñ])$") end if c then local w = c if w == "z" then w = "c" end return forzar_s and {{r.."#"..v..c.."#"}, {r.."#"..v..w.."s#"}, {}, {}} or {{r.."~"..v..c.."~"}, {r.."~"..v..w.."es~"}, {}, {}} end -- 2J. Esdrújulas terminadas en vocal + -l, -r, -d, -j, -z, -ñ -> invariantes r, c = strmatch(p, "^(.*"..VOCAL..")([lrdjzñ])$") if c then return {{p}, {}, {}, {}} end -- 2K. Palabras que terminan en vocal + cons distinta de [lrdjnsxyz]: chip, robot, mamut, smog, esnob r, s = strmatch(p, "^(.*)("..VOCAL..CONS..")$") if s then return {{r.."~"..s.."~"}, {r.."~"..s.."s~"}, {}, {}} end -- 2L. Terminadas en -ch -> asumo que termina en -es por defecto r, c = strmatch(p, "^(.*)(ch)$") if c then return forzar_s and {{r.."#ch#"}, {r.."#chs#"}, {}, {}} or {{r.."~ch~"}, {r.."~ches~"}, {}, {}} end -- 2M. Resto de palabras en consonante + s o en s + consonante -> invariante: compost, kibutz r, s = strmatch(p, "^(.*)("..CONS.."[sz])$") if not s then r, s = strmatch(p, "^(.*)([sz]"..CONS..")$") end if s then return {{r.."~"..s.."~"}, {}, {}, {}} end -- 2N. Resto de palabras en doble consonante: gong, bang, iceberg, récord, etc. r, s = strmatch(p, "^(.*)("..CONS..CONS..")$") if s then return {{r.."~"..s.."~"}, {r.."~"..s.."s~"}, {}, {}} end error("No se pudo determinar la flexión de la palabra") end function export.flexion_sust_adj(palabras, mf, forzar_s, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = export.flexionar_palabra(a, mf, forzar_s) local flex2 = copulativa and export.flexionar_palabra(b, mf, forzar_s) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = export.flexionar_palabra(p, mf, forzar_s) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo == "mf", args["s"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["s"] = {tipo = "bool"}, ["forzars"] = {alias_de = "s"}, ["noes"] = {alias_de = "s"}, ["es"] = {tipo = "bool"}, ["forzares"] = {alias_de = "es"}, ["nos"] = {alias_de = "es"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["s"] = {tipo = "bool"}, ["forzars"] = {alias_de = "s"}, ["noes"] = {alias_de = "s"}, ["es"] = {tipo = "bool"}, ["forzares"] = {alias_de = "es"}, ["nos"] = {alias_de = "es"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local YO, TU, VOS, EL, NOSOTROS, VOSOTROS, ELLOS = 1, 2, 3, 4, 5, 6, 7 local PRONOMBRES = {"yo", "tú", "vos", "él, ella, usted", "nosotros", "vosotros", "ustedes, ellos"} local PRONOMBRES_SUBJ = {"que yo", "que tú", "que vos", "que él, que ella, que usted", "que nosotros", "que vosotros", "que ustedes, que ellos"} local PRONOMBRES_IMP = {"―", "(tú)", "(vos)", "(usted)", "(nosotros)", "(vosotros)", "(ustedes)"} local IMPERSONALES = {"", "", "", "(ello)", "", "", "(ellos)"} local IMPERSONALES_SUBJ = {"", "", "", "(que ello)", "", "", "(que ellos)"} local REFLEXIVOS = {"me", "te", "te", "se", "nos", "os", "se"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { { ["ger"] = {"ando"}, ["part"] = {"ado"}, ["ind_pres"] = {"o", "as", "ás", "a", "amos", "áis", "an"}, ["ind_imp"] = {"aba", "abas", "abas", "aba", "ábamos", "abais", "aban"}, ["ind_perf"] = {"é", "aste", "aste", "ó", "amos", "asteis", "aron"}, ["ind_perf_alt"] = {"é", "aste", "aste", "ó", "amos", "asteis", "aron"}, ["ind_fut"] = {"aré", "arás", "arás", "ará", "aremos", "aréis", "arán"}, ["subj_pres"] = {"e", "es", "és", "e", "emos", "éis", "en"}, ["subj_imp"] = {"ara", "aras", "aras", "ara", "áramos", "arais", "aran", "ase", "ases", "ases", "ase", "ásemos", "aseis", "asen"}, ["subj_fut"] = {"are", "ares", "ares", "are", "áremos", "areis", "aren"}, ["cond"] = {"aría", "arías", "arías", "aría", "aríamos", "aríais", "arían"}, ["imper"] = {"-", "a", "á", "e", "emos", "ad", "en"} }, { ["ger"] = {"iendo"}, ["part"] = {"ido"}, ["ind_pres"] = {"o", "es", "és", "e", "emos", "éis", "en"}, ["ind_imp"] = {"ía", "ías", "ías", "ía", "íamos", "íais", "ían"}, ["ind_perf"] = {"í", "iste", "iste", "ió", "imos", "isteis", "ieron"}, ["ind_perf_alt"] = {"e", "iste", "iste", "o", "imos", "isteis", "ieron"}, ["ind_fut"] = {"eré", "erás", "erás", "erá", "eremos", "eréis", "erán"}, ["subj_pres"] = {"a", "as", "ás", "a", "amos", "áis", "an"}, ["subj_imp"] = {"iera", "ieras", "ieras", "iera", "iéramos", "ierais", "ieran", "iese", "ieses", "ieses", "iese", "iésemos", "ieseis", "iesen"}, ["subj_fut"] = {"iere", "ieres", "ieres", "iere", "iéremos", "iereis", "ieren"}, ["cond"] = {"ería", "erías", "erías", "ería", "eríamos", "eríais", "erían"}, ["imper"] = {"-", "e", "é", "a", "amos", "ed", "an"} }, { ["ger"] = {"iendo"}, ["part"] = {"ido"}, ["ind_pres"] = {"o", "es", "ís", "e", "imos", "ís", "en"}, ["ind_imp"] = {"ía", "ías", "ías", "ía", "íamos", "íais", "ían"}, ["ind_perf"] = {"í", "iste", "iste", "ió", "imos", "isteis", "ieron"}, ["ind_perf_alt"] = {"e", "iste", "iste", "o", "imos", "isteis", "ieron"}, ["ind_fut"] = {"iré", "irás", "irás", "irá", "iremos", "iréis", "irán"}, ["subj_pres"] = {"a", "as", "ás", "a", "amos", "áis", "an"}, ["subj_imp"] = {"iera", "ieras", "ieras", "iera", "iéramos", "ierais", "ieran", "iese", "ieses", "ieses", "iese", "iésemos", "ieseis", "iesen"}, ["subj_fut"] = {"iere", "ieres", "ieres", "iere", "iéremos", "iereis", "ieren"}, ["cond"] = {"iría", "irías", "irías", "iría", "iríamos", "iríais", "irían"}, ["imper"] = {"-", "e", "í", "a", "amos", "id", "an"} }, } local auxiliar = { ["inf_comp"] = {"haber"}, ["ger_comp"] = {"habiendo"}, ["ind_perf_comp"] = {"he", "has", "has", "ha", "hemos", "habéis", "han"}, ["ind_pluperf"] = {"había", "habías", "habías", "había", "habíamos", "habíais", "habían"}, ["ind_anter"] = {"hube", "hubiste", "hubiste", "hubo", "hubimos", "hubisteis", "hubieron"}, ["ind_fut_comp"] = {"habré", "habrás", "habrás", "habrá", "habremos", "habréis", "habrán"}, ["cond_comp"] = {"habría", "habrías", "habrías", "habría", "habríamos", "habríais", "habrían"}, ["subj_perf"] = {"haya", "hayas", "hayas", "haya", "hayamos", "hayáis", "hayan"}, ["subj_pluperf"] = {"hubiera", "hubieras", "hubieras", "hubiera", "hubiéramos", "hubierais", "hubieran", "hubiese", "hubieses", "hubieses", "hubiese", "hubiésemos", "hubieseis", "hubiesen"}, ["subj_fut_comp"] = {"hubiere", "hubieres", "hubieres", "hubiere", "hubiéremos", "hubiereis", "hubieren"} } local function obtener_sufijos(sufijo_inf, forma) if sufijo_inf == "ar" then return sufijos[1][forma] elseif sufijo_inf == "er" then return sufijos[2][forma] else return sufijos[3][forma] end end local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf) if not nexo then return sufijo end if sufijo_inf == "ar" then if strfind(sufijo, "^[eéií]") then if nexo == "c" then return "~qu~"..sufijo end if nexo == "g" then return "g~u~"..sufijo end if nexo == "z" then return "~c~"..sufijo end if nexo == "gu" then return "g~ü~"..sufijo end end if strcount(sufijo, "[aeiou]") == 1 and not strfind(sufijo, "[áéíóú]") and strfind(substr(sufijo, -1), "[aeiouns]") then if nexo == "cu" then return substr(nexo, -2, -2).."~ú~"..sufijo, nexo..sufijo -- es llana y entonces lleva tilde end if nexo == "u" then return "~ú~"..sufijo -- es llana y entonces lleva tilde end if nexo == "i" then return "#í#"..sufijo -- es llana y entonces lleva tilde end if nexo == "I" then return "#e#"..sufijo -- es llana y entonces la sinéresis de la i se pierde end end if strfind(sufijo, "^ar") then if strfind(nexo, "^[~#]?[bdr]?r[~#]?$") then return nexo..substr(sufijo, 3) end end else -- ER/IR/ÍR if strfind(sufijo, "^[aáoóuú]") then if nexo == "c" then return "~z~"..sufijo end if nexo == "S" then -- mecer return "#z#"..sufijo end if nexo == "g" then return "~j~"..sufijo end if nexo == "gu" then return "g~"..sufijo.."~" end if nexo == "C" then return "~zc~"..sufijo end end if strfind(sufijo, "^[aeoáéó]") then if nexo == "gü" then return "g~uy~"..sufijo end if nexo == "u" then return "u~y~"..sufijo end end if strfind(sufijo, "^i[aeoáéó]") then if (nexo == "ñ" or nexo == "ll") then return "~"..nexo..substr(sufijo, 2).."~" end if nexo == "gü" then return "g~uy~"..substr(sufijo, 2) end if nexo == "u" then return "u~y~"..substr(sufijo, 2) end if nexo == "e" then return nexo.."~y~"..substr(sufijo, 2) end end if strfind(sufijo, "^i[^aeiouáéíóú]") then if nexo == "e" then return nexo.."~í~"..substr(sufijo, 2) end end if strfind(sufijo, "^i[eé]") then if strfind(nexo, "u#$") then -- ir --> fuera (subj) return nexo..substr(sufijo, 2) end if nexo == "#j#" or nexo == "~j~" then return nexo..substr(sufijo, 2) end end if strfind(sufijo, "^í$") then if nexo == "#j#" or nexo == "~j~" then return nexo.."~e~" end end if strfind(sufijo, "^ió$") then if nexo == "#j#" or nexo == "~j~" then return nexo.."~o~" end end if strfind(sufijo, "^[ie]r") then if strfind(nexo, "^[~#]?[bdr]?r[~#]?$") then return nexo..substr(sufijo, 3) end end end if nexo == "I" then return "i"..sufijo -- sinéresis normal end if nexo == "C" then return "c"..sufijo -- sin epéntesis end if nexo == "S" then -- mecer return "c"..sufijo end return nexo..sufijo end local function combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf) local nucleo_ = strsubn(nucleo, "[~#]", "") local nexosufijo_ = strsubn(nexosufijo, "[~#]", "") -- ya no es más necesario --if strfind(nucleo_inf, "^(.*[iuü]?h?[aeo]h?)([iuü])(.-)$") or strfind(nucleo_, "^(.*[iuü]?h?[aeo]h?)([iuü])(.-)$") then -- generar_error("nucleoalt") --end if strfind(nucleo_, "[yi]$") and strfind(nexosufijo_, "^i") then -- se juntan dos íes o y-i (ej. reír, freír, oír) return nucleo..strsub(nexosufijo, "^([~#]?)i", "%1") elseif strfind(nucleo_, "^[^áéíóú]-[aeiou]h?$") and strfind(nexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- sufijo con i/u tónica (caISTE, caIMOS, caIDO, oID, reHÚyo etc.) return nucleo..strsub(nexosufijo, "^([~#]?h?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end) elseif strfind(nucleo_, "[^gq][aeiou]$") and strfind(nexosufijo_, "^i[aeiouáéíóú]") then -- se junta [aeiou]i[aeiouáéíóú] -> cambio a y (creYO) PERO [[chinguiar]] -> chinguIando return nucleo..strsub(nexosufijo, "^([~#]?)i", "%1~y~") elseif strfind(nucleo_, "[aeiou]$") and strfind(nexosufijo_, "^id$") then -- reír -> reÍd, embaír -> embaÍd return nucleo..strsub(nexosufijo, "^([~#]?)i", "%1~í~") elseif strfind(nucleo_, "^[^aeiouáéíóú]+$") and (strfind(nexosufijo_, "^"..CONS.."?"..CONS.."?".."[iuü]?[áéó][iuü]?[ns]?$") or strfind(nexosufijo_, "^[íú][ns]?$")) then -- caso de dar, vos *d+ás, debo quitar la tilde return nucleo..strsub(nexosufijo, "[áéíóú]", function(v) return "~"..quitar_tilde[v].."~" end) end return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) local prefijo_ = strsubn(prefijo, "[~#]", "") local nucleonexosufijo_ = strsubn(nucleonexosufijo, "[~#]", "") if prefijo_ and strfind(prefijo_, "[aeiou]") and not strfind(prefijo_, "[áéíóú]") then if strfind(prefijo_, "^[^áéíóú]-[aeiou]h?$") and strfind(nucleonexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- nucleonexosufijo con i/u tónica (rehacer -> rehíce) return prefijo..strsub(nucleonexosufijo, "^([~#]?h?[~#]?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end) elseif strfind(nucleonexosufijo_, "^("..CONS.."*[iuü]?)([aeiou])([iuü]?[ns]?)$") then -- monosílabo: prever --> prevén return prefijo..strsub(nucleonexosufijo, "^([~#]?"..CONS.."*[~#]?[iuü]?[~#]?)([aeiou])([~#]?[iuü]?[~#]?[ns]?[~#]?)$", function(a, b, c) return a..agregar_tilde[b]..c end) -- ven --> prevén end end return prefijo..nucleonexosufijo end local paradigmas_regulares = { ["ar"] = { {"anunciar", {"iar$"}, { --necesidad de explicitar el diptongo, aunque esta variante es la que consideramos como la regular }}, {"evacuar", {"cuar$"}, { nexo = "cu" }}, {"averiguar", {"guar$"}, { nexo = "gu" }}, {"complicar", {"car$"}, { nexo = "c" }}, {"llegar", {"gar$"}, { nexo = "g" }}, {"actuar", {"uar$"}, { nexo = "u" }}, {"realizar", {"zar$"}, { nexo = "z" }}, {"amar", {"ar$"}, { }}, }, ["er"] = { {"ller", {"ller$"}, { -- Existe esto?? nexo = "ll" }}, {"guer", {"guer$"}, { -- Existe esto?? nexo = "gu" }}, {"güer", {"güer$"}, { -- Existe esto?? nexo = "gü" }}, {"parecer", {"[aeiou]cer$"}, { nexo = "C" }}, {"vencer", {"[^aeious]cer$"}, { -- los verbos en -scer NO entran en este paradigma (ver fosforescer o evanescer) nexo = "c" }}, {"leer", {"eer$"}, { nexo = "e" }}, {"proteger", {"ger$"}, { nexo = "g" }}, {"atañer", {"ñer$"}, { nexo = "ñ" }}, {"uer", {"uer$"}, { -- Existe esto?? nexo = "u" }}, {"temer", {"er$"}, { }}, }, ["ir"] = { {"producir", {"ducir$"}, { nucleo = "du", nexo = "C", ind_perf = {nexo = "~j~"}, subj_imp = {nexo = "~j~"}, subj_fut = {nexo = "~j~"} }}, {"escabullir", {"llir$"}, { nexo = "ll" }}, {"distinguir", {"guir$"}, { nexo = "gu" }}, {"argüir", {"güir$"}, { nexo = "gü" }}, {"lucir", {"[aeiou]cir$"}, { nexo = "C" }}, {"fruncir", {"[^aeious]cir$"}, { nexo = "c" }}, {"dirigir", {"gir$"}, { nexo = "g" }}, {"gruñir", {"ñir$"}, { nexo = "ñ" }}, {"construir", {"uir$"}, { nexo = "u" }}, {"partir", {"ir$"}, { }}, }, ["ír"] = { {"reír", {"eír$"}, { nucleo = "e", alt = {"í-i"}, }}, {"ír", {"ír$"}, { -- para que oír no tire error }}, } } local paradigmas_irregulares = { ["ar"] = { {"andar", {"^d?e?s?andar$"}, { -- cuidado con mandar nucleo = "and", ind_perf = {{"anduve", "andé{x}"}, {"anduviste", "andaste{x}"}, {"anduviste", "andaste{x}"}, {"anduvo", "andó{x}"}, {"anduvimos", "andamos{x}"}, {"anduvisteis", "andasteis{x}"}, {"anduvieron", "andaron{x}"}}, subj_imp = {nucleo = "anduv"}, subj_fut = {nucleo = "anduv"} }}, {"dar", {"^d?e?s?dar$"}, { -- no pueden ir otros verbos como "andar o quedar" nucleo = "d", ind_pres = {{"doy"}}, ind_perf = {sufijo_inf = "er"}, subj_pres = {{"dé"}, nil, nil, {"dé"}}, subj_imp = {sufijo_inf = "er"}, subj_fut = {sufijo_inf = "er"}, imper = {nil, nil, nil, {"dé"}} }}, {"errar", {"^errar$"}, { nucleo = "err", alt = {"ye", "REG"}, }}, {"estar", {"^estar$"}, { ind_pres = {{"estoy"}, {"estás"}, nil, {"está"}, nil, nil, {"están"}}, ind_perf = {nucleo = "estuv"}, subj_pres = {{"esté"}, {"estés"}, {"estés"}, {"esté"}, nil, nil, {"estén"}}, subj_imp = {nucleo = "estuv"}, subj_fut = {nucleo = "estuv"}, imper = {nil, {"está"}, nil, {"esté"}, nil, nil, {"estén"}} }}, {"inhestar", {"inhestar$"}, { alt = {"ie"}, part = {"inhiesto"} }}, {"tar", {"^tar$"}, { ind_pres = {{"toy"}}, ind_perf = {nucleo = "tuv"}, subj_pres = {{"té"}, nil, nil, {"té"}}, subj_imp = {nucleo = "tuv"}, subj_fut = {nucleo = "tuv"}, imper = {nil, nil, nil, {"té"}, nil, nil, nil} }}, {"enviar", {"enviar$"}, { nexo = "i", }}, {"culiar", {"culiar$"}, { nexo = "I" }}, {"aislar", {"aislar$"}, { alt = {"í"} }}, {"agorar", {"agorar$"}, { alt = {"üe"} }}, {"aunar", {"^aunar$"}, { alt = {"ú"} }}, {"contar", {"contar$"}, { alt = {"ue"} }}, {"pensar", {"^pensar$"}, { -- no puede ir compensar alt = {"ie"} }}, }, ["er"] = { {"caber", {"^caber$"}, { ind_pres = {{"quepo"}}, ind_fut = {nucleo = "ca", nexo = "#br#"}, ind_perf = {nucleo = "cup"}, subj_pres = {nucleo = "quep"}, subj_imp = {nucleo = "cup"}, subj_fut = {nucleo = "cup"}, cond = {nucleo = "ca", nexo = "#br#"}, imper = {nil, nil, nil, {"quepa"}, {"quepamos"}, nil, {"quepan"}} }}, {"caer", {"caer$"}, { nucleo = "ca", ind_pres = {{"caigo"}}, subj_pres = {nucleo = "caig"}, imper = {nil, nil, nil, {"caiga"}, {"caigamos"}, nil, {"caigan"}} }}, {"cocer", {"cocer$"}, { nucleo = "co", nexo = "S", -- evitar C (epéntesis con zc) alt = {"ue"}, part = {"cocido", "cocho{†}"} }}, {"hacer", {"[hfj]acer$"}, { nucleo = "a", nexo = "S", -- evitar C (epéntesis con zc) part = {"echo"}, ind_pres = {{"ago"}}, ind_perf = {nucleo = "i"}, ind_fut = {nucleo = "a", nexo = "#r#"}, subj_pres = {nucleo = "ag", nexo = ""}, subj_imp = {nucleo = "i"}, subj_fut = {nucleo = "i"}, cond = {nucleo = "a", nexo = "#r#"}, imper = {nil, {"az", "ace{x}"}, {"acé"}, {"aga"}, {"agamos"}, nil, {"agan"}}, }}, {"haber", {"^haber$"}, { ind_pres = {{"he"}, {"has"}, {"has"}, {"ha", "hay{IMPERSONAL}"}, {"hemos"}, nil, {"han"}, {"hay"}}, ind_perf = {nucleo = "hub"}, ind_fut = {nucleo = "ha", nexo = "#br#"}, subj_pres = {nucleo = "hay"}, subj_imp = {nucleo = "hub"}, subj_fut = {nucleo = "hub"}, cond = {nucleo = "ha", nexo = "#br#"}, imper = {nil, {"he{†}", "habe{†}"}, {"he{†}", "habe{†}"}, {"haya{†}"}, {"hayamos{†}"}, nil, {"hayan{†}"}}, }}, {"mecer", {"^r?e?mecer$"}, { nexo = "S", -- evitar C (epéntesis con zc) }}, {"oler", {"^oler$"}, { alt = {"hue"}, }}, {"volver", {"olver$"}, { nucleo = "olv", alt = {"ue"}, part = {"uelto"} }}, {"placer", {"placer$"}, { nucleo = "pla", ind_perf = {nil, nil, nil, {"plació", "plugo"}, nil, nil, {"placieron", "pluguieron"}}, subj_imp = {nil, nil, nil, {"placiera", "placiese", "pluguiera", "pluguiese"}, nil, nil, nil}, subj_fut = {nil, nil, nil, {"placiere", "pluguiere"}, nil, nil, nil}, }}, {"poder", {"poder$"}, { nucleo = "pod", alt = {"ue"}, ger = {"pudiendo"}, ind_perf = {nucleo = "pud"}, ind_fut = {nucleo = "po", nexo = "#dr#"}, subj_imp = {nucleo = "pud"}, subj_fut = {nucleo = "pud"}, cond = {nucleo = "po", nexo = "#dr#"}, }}, {"poner", {"poner$"}, { nucleo = "pon", part = {"puesto"}, ind_pres = {{"pongo"}}, ind_perf = {nucleo = "pus"}, ind_fut = {nucleo = "pon", nexo = "#dr#"}, subj_pres = {nucleo = "pong"}, subj_imp = {nucleo = "pus"}, subj_fut = {nucleo = "pus"}, cond = {nucleo = "pon", nexo = "#dr#"}, imper = {nil, {"pon", "pone{x}"}, nil, {"ponga"}, {"pongamos"}, nil, {"pongan"}}, }}, {"proveer", {"proveer$"}, { nucleo = "prov", part = {"provisto", "proveído{†}"} }}, {"querer", {"querer$"}, { nucleo = "quer", alt = {"ie"}, ind_perf = {nucleo = "quis"}, ind_fut = {nucleo = "que", nexo = "#rr#"}, subj_imp = {nucleo = "quis"}, subj_fut = {nucleo = "quis"}, cond = {nucleo = "que", nexo = "#rr#"}, }}, {"raer", {"^raer$"}, { -- no contraer, etc. ind_pres = {{"raigo", "rayo"}}, subj_pres = {nucleo = {"raig", "ray"}}, imper = {nil, nil, nil, {"raiga", "raya"}, {"raigamos", "rayamos"}, nil, {"raigan", "rayan"}} }}, {"roer", {"roer$"}, { nucleo = "ro", ind_pres = {{"roo", "roigo", "royo"}}, subj_pres = {nucleo = {"ro", "roig", "roy"}}, imper = {nil, nil, nil, {"roa", "roiga", "roya"}, {"roamos", "roigamos", "royamos"}, nil, {"roan", "roigan", "royan"}} }}, {"romper", {"^romper$", "^arromper$"}, { -- no corromper, derromper, entrerromper nucleo = "romp", part = {"roto", "rompido{†}"} }}, {"saber", {"saber$"}, { nucleo = "sab", ind_pres = {{"sé", "sabo{x}"}}, ind_perf = {nucleo = "sup"}, ind_fut = {nucleo = "sa", nexo = "#br#"}, subj_pres = {nucleo = "sep"}, subj_imp = {nucleo = "sup"}, subj_fut = {nucleo = "sup"}, cond = {nucleo = "sa", nexo = "#br#"}, imper = {nil, nil, nil, {"sepa"}, {"sepamos"}, nil, {"sepan"}} }}, {"ser", {"^ser$"}, { ind_pres = {{"soy"}, {"eres"}, {"sos"}, {"es"}, {"somos"}, {"sois", "ereis{†}"}, {"son"}}, ind_imp = {{"era"}, {"eras"}, {"eras"}, {"era"}, {"éramos"}, {"erais"}, {"eran"}}, ind_perf = {{"fui"}, {"fuiste"}, {"fuiste"}, {"fue"}, {"fuimos"}, {"fuisteis"}, {"fueron"}}, subj_pres = {nucleo = "se"}, subj_imp = {nucleo = "", nexo = "#fu#"}, -- no puedo poner "u" porque obtendría "fuyera" subj_fut = {nucleo = "", nexo = "#fu#"}, imper = {nil, {"sé"}, {"sé"}, {"sea"}, {"seamos"}, nil, {"sean"}} }}, {"seer", {"^seer$", "^eser$"}, { prefijo = "", nucleo = "s", ind_pres = {{"só", "seo"}, {"sees", "siedes"}, {"sos", "sodes"}, {"siede"}, {"sedemos"}, {"seedes", "sodes"}, {"seyen", "sieden"}}, ind_imp = {{"era"}, {"eras"}, {"eras"}, {"era"}, {"éramos"}, {"érades"}, {"eran"}}, ind_perf = {{"fu", "fué"}, {"fueste", "fuste"}, {"fuestes", "fuistes"}, {"fo", "foé", "suvo"}, {"fuemos"}, {"fuestes", "fuistes"}, {"foron"}}, ind_fut = {nil, nil, {"seredes"}, nil, nil, {"seredes"}, nil}, cond = {nil, nil, {"seríades"}, nil, nil, {"seríades"}, nil}, subj_pres = {nil, nil, {"seades"}, nil, nil, {"seades"}, nil}, subj_imp = {nucleo = "", nexo = "#fu#", nil, nil, {"fuérades"}, nil, nil, {"fuérades"}, nil}, -- no puedo poner "u" porque obtendría "fuyera" subj_fut = {nucleo = "", nexo = "#fu#", nil, nil, {"fuéredes"}, nil, nil, {"fuéredes"}, nil}, imper = {nil, {"sé"}, {"seades"}, {"sea"}, {"seamos"}, {"seades"}, {"sean"}} }}, {"tener", {"tener$"}, { nucleo = "ten", alt = {"ie"}, ind_pres = {{"tengo"}}, ind_perf = {nucleo = "tuv"}, ind_fut = {nucleo = "ten", nexo = "#dr#"}, subj_pres = {nucleo = "teng"}, subj_imp = {nucleo = "tuv"}, subj_fut = {nucleo = "tuv"}, cond = {nucleo = "ten", nexo = "#dr#"}, imper = {nil, {"ten", "tiene{x}"}, nil, {"tenga"}, {"tengamos"}, nil, {"tengan"}} }}, {"traer", {"traer$"}, { nucleo = "tra", ind_pres = {{"traigo"}}, ind_perf = {nucleo = "tra", nexo = "#j#"}, subj_pres = {nucleo = "traig"}, subj_imp = {nucleo = "tra", nexo = "#j#"}, subj_fut = {nucleo = "tra", nexo = "#j#"}, imper = {nil, nil, nil, {"traiga"}, {"traigamos"}, nil, {"traigan"}} }}, {"valer", {"valer$"}, { nucleo = "val", ind_pres = {{"valgo"}}, ind_fut = {nucleo = "val", nexo = "#dr#"}, subj_pres = {nucleo = "valg"}, cond = {nucleo = "val", nexo = "#dr#"}, imper = {nil, nil, nil, {"valga"}, {"valgamos"}, nil, {"valgan"}} }}, {"ver", {"^ver$"}, { nucleo = "v", part = {"visto"}, ind_pres = {{"veo"}}, ind_imp = {nucleo = "ve"}, subj_pres = {nucleo = "ve"}, imper = {nil, nil, {"mirá"}, {"vea"}, {"veamos"}, nil, {"vean"}} }}, {"prever", {"^antever$", "^entrever$", "^prever$", "^rever$"}, { nucleo = "v", part = {"visto"}, ind_pres = {{"veo"}, {"vés"}, nil, {"vé"}, nil, nil, {"vén"}}, ind_imp = {nucleo = "ve"}, subj_pres = {nucleo = "ve"}, imper = {nil, nil, nil, {"vea"}, {"veamos"}, nil, {"vean"}} }}, {"yacer", {"^yacer$", "^subyacer$"}, { nucleo = "yac", nexo = "", -- evitar C (epéntesis con zc), lo voy a agregar manual ind_pres = {{"yazco", "yazgo", "yago"}}, subj_pres = {nucleo = {"yazc", "yazg", "yag"}}, imper = {nil, {"yace", "yaz"}, {"yacé"}, {"yazca", "yazga", "yaga"}, {"yazcamos", "yazgamos", "yagamos"}, nil, {"yazcan", "yazgan", "yagan"}} }}, {"mover", {"mover$"}, { alt = {"ue"}, }}, {"entender", {"entender$"}, { alt = {"ie"}, }}, }, ["ir"] = { {"asir", {"asir$"}, { nucleo = "as", ind_pres = {{"asgo"}}, subj_pres = {nucleo = "asg"}, imper = {nil, nil, nil, {"asga"}, {"asgamos"}, nil, {"asgan"}} }}, {"abrir", {"[^js]abrir$", "^abrir$"}, { -- abrir, cubrir y derivados, pero no "desabrir" ni "jabrir" (son regs.) nucleo = "abr", part = {"abierto"} }}, {"abrir", {"ubrir$"}, { -- Parte 2. NOTA: no pueto tomar "br" como núcleo porque el programa piensa que es monosílabo y pone mal las tildes (cf. [[entreabrir]], [[reabrir]]) nucleo = "ubr", part = {"ubierto"} }}, -- para decir contemplo 4 casos: -- 1. decir, redecir, entredecir, antedecir: lo normal, con el imperativo en "dí" (di) -- 2. interdecir: similar a 1. pero el imperativo es interdice (no *interdí) -- 3. bendecir, maldecir: agrego bendito, maldito al pp -- 4. condecir, contradecir, desdecir, predecir: parto de 1 pero agrego el futuro regular que esta aceptado {"decir", {"^decir$", "^redecir$", "^entredecir$", "^antedecir$"}, { nucleo = "de", nexo = "S", -- para evitar C (epéntesis con zc) alt = {"i-i"}, part = {"dicho"}, ind_pres = {{"digo"}}, ind_perf = {nucleo = "di", nexo = "#j#"}, ind_fut = {nucleo = "d", nexo=""}, subj_pres = {nexo = "#g#"}, subj_imp = {nexo = "#j#"}, subj_fut = {nexo = "#j#"}, cond = {nucleo = "d", nexo=""}, imper = {nil, {"di", "dice{x}"}, nil, {"diga"}, {"digamos"}, nil, {"digan"}} }}, {"interdecir", {"interdecir$"}, { nucleo = "de", nexo = "S", -- para evitar C (epéntesis con zc) alt = {"i-i"}, part = {"dicho"}, ind_pres = {{"digo"}}, ind_perf = {nucleo = "di", nexo = "#j#"}, ind_fut = {nucleo = "d", nexo=""}, subj_pres = {nexo = "#g#"}, subj_imp = {nexo = "#j#"}, subj_fut = {nexo = "#j#"}, cond = {nucleo = "d", nexo=""}, imper = {nil, {"dice"}, nil, {"diga"}, {"digamos"}, nil, {"digan"}} }}, {"bendecir", {"bendecir$", "maldecir$"}, { nucleo = "de", nexo = "S", -- para evitar C (epéntesis con zc) alt = {"i-i"}, part = {"decido{PART}", "dito{ADJ}"}, ind_pres = {{"digo"}}, ind_perf = {nucleo = "di", nexo = "#j#"}, subj_pres = {nexo = "#g#"}, subj_imp = {nexo = "#j#"}, subj_fut = {nexo = "#j#"}, imper = {nil, {"dice"}, nil, {"diga"}, {"digamos"}, nil, {"digan"}} }}, {"predecir", {"decir$"}, { nucleo = "de", nexo = "S", -- para evitar C (epéntesis con zc) alt = {"i-i"}, part = {"dicho"}, ind_pres = {{"digo"}}, ind_perf = {nucleo = "di", nexo = "#j#"}, ind_fut = {nucleo = {"dec", "d"}, nexo=""}, subj_pres = {nexo = "#g#"}, subj_imp = {nexo = "#j#"}, subj_fut = {nexo = "#j#"}, cond = {nucleo = {"dec", "d"}, nexo=""}, imper = {nil, {"dice", "dí{x}"}, nil, {"diga"}, {"digamos"}, nil, {"digan"}} }}, {"erguir", {"^erguir$"}, { nucleo = "er", alt = {"ye-i", "i-i"}, }}, {"imprimir", {"imprimir$"}, { nucleo = "imprim", part = {"imprimido{PART}", "impreso{ADJ}"} }}, {"infecir", {"^infecir$"}, { -- https://www.fiile.org.ar/uploadsarchivos/_1917__notas_al_castellano_s4.pdf nucleo = "infec", nexo = "t", -- para evitar C (epéntesis con zc) sufijo = "ar", part = {"infecto"} }}, {"ir", {"^ir$"}, { ger = {"yendo"}, ind_pres = {{"voy"}, {"vas"}, {"vas"}, {"va"}, {"vamos"}, {"vais"}, {"van"}}, ind_imp = {{"iba"}, {"ibas"}, {"ibas"}, {"iba"}, {"íbamos"}, {"ibais"}, {"iban"}}, ind_perf = {{"fui"}, {"fuiste"}, {"fuiste"}, {"fue"}, {"fuimos"}, {"fuisteis"}, {"fueron"}}, subj_pres = {nucleo = "vay"}, subj_imp = {nucleo = "", nexo = "#fu#"}, -- no puedo poner "u" porque obtendría "fuyera" subj_fut = {nucleo = "", nexo = "#fu#"}, imper = {nil, {"ve", "ves{x}"}, {"andá"}, {"vaya"}, {"vayamos"}, nil, {"vayan"}} }}, {"morir", {"morir$"}, { nucleo = "mor", alt = {"ue-u"}, part = {"muerto"}, }}, {"pudrir", {"pudrir$"}, { nucleo = "pudr", part = {"podrido"} }}, {"salir", {"salir$"}, { nucleo = "sal", ind_pres = {{"salgo"}}, ind_fut = {nucleo = "sal", nexo = "#dr#"}, subj_pres = {nucleo = "salg"}, cond = {nucleo = "sal", nexo = "#dr#"}, imper = {nil, {"sal", "sale{x}"}, nil, {"salga"}, {"salgamos"}, nil, {"salgan"}} }}, {"escribir", {"^escribir$", "^reescribir$"}, { nucleo = "escrib", part = {"escrito"} }}, {"inscribir", {"scribir$"}, { nucleo = "scrib", part = {"scrito", "scripto{ARG/URU}"} }}, {"venir", {"venir$"}, { nucleo = "ven", alt = {"ie-i"}, ind_pres = {{"vengo"}}, ind_fut = {nexo = "#dr#"}, ind_perf = {nucleo = "vin"}, subj_pres = {nucleo = "veng"}, cond = {nexo = "#dr#"}, imper = {nil, {"ven", "viene{x}"}, nil, {"venga"}, {"vengamos"}, nil, {"vengan"}} }}, {"discernir", {"discernir$"}, { alt = {"ie"} }}, {"sentir", {"sentir$"}, { alt = {"ie-i"} }}, {"podrir", {"podrir$"}, { alt = {"u-u"}, }}, {"reunir", {"reunir$"}, { alt = {"ú"} }}, {"prohibir", {"prohibir$"}, { alt = {"í"} }}, {"rehenchir", {"rehenchir$"}, { alt = {"í-i"} }}, {"dormir", {"dormir$"}, { alt = {"ue-u"} }}, {"pedir", {"pedir$"}, { -- también ceñir (incluyo en este paradigma especificando el alt) alt = {"i-i"} }}, }, ["ír"] = { {"desvaír", {"desvaír$"}, { -- hay más verbos en -air? no podemos considerarlo como regla general ind_pres = {{"desvayo"}}, subj_pres = {nucleo = "desvay"}, imper = {nil, nil, nil, {"desvaya"}, {"desvayamos"}, nil, {"desvayan"}} }}, {"freír", {"freír$"}, { nucleo = "fre", part = {"frito{PART/ADJ}", "freído{PART}"}, }}, {"oír", {"oír$"}, { nucleo = "o", alt = {"oy"}, ger = {"oyendo"}, ind_pres = {{"oigo"}}, subj_pres = {nucleo = "oig"}, imper = {nil, nil, nil, {"oiga"}, {"oigamos"}, nil, {"oigan"}} }}, }, } local alt_info = { ["ar"] = { ["í"] = {"aislar", "i", "í"}, -- tb. descafeinar ["ú"] = {"aunar", "u", "ú"}, -- tb. rehusar ["ie"] = {"pensar", "e", "ie"}, ["ue"] = {"contar", "ou", "ue"}, -- también jugar ["üe"] = {"agorar", "o", "üe"}, ["hue"] = {"desosar", "ou", "hue"}, ["ye"] = {"errar", "e", "ye"}, }, ["er"] = { ["i"] = {"???", "e", "i"}, -- REVISAR: existe esto?? ["ie"] = {"entender", "e", "ie"}, ["ue"] = {"mover", "o", "ue"}, ["hue"] = {"oler", "o", "hue"}, }, ["ir"] = { ["i"] = {"???", "e", "i"}, -- REVISAR: existe esto?? ["í"] = {"prohibir", "i", "í"}, ["í-i"] = {"rehenchir", "e", "í", "i"}, ["i-i"] = {"pedir", "e", "i", "i"}, ["ie"] = {"discernir", "ei", "ie"}, -- por las dudas también la i, por inquirir ["ie-i"] = {"sentir", "ei", "ie", "i"}, -- inquirir ["u"] = {"???", "o", "u", "u"}, ["ú"] = {"reunir", "u", "ú"}, ["u-u"] = {"podrir", "o", "u", "u"}, -- REVISAR: existe esto?? ["ue-u"] = {"dormir", "o", "ue", "u"}, ["ye-i"] = {"erguir", "e", "ye", "i"}, }, ["ír"] = { ["í-i"] = {"reír", "e", "í", "i"}, ["oy"] = {"oír", "o", "oy", "oy"}, } } local function agregar_forma(arr, forma_, prefijo, nucleo_inf__, nucleos1_, nucleos2_, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ if sufijo_inf == "ar" and arr.nucleo then sufijo_inf = "er" -- echo mano a los sufijos de la otra conjugación, más que nada aplica a verbos como andar -> ANDUViera end local forma = forma_ if forma == "ind_perf" and arr.nucleo then forma = "ind_perf_alt" end local sufijos_ = obtener_sufijos(sufijo_inf, forma) local nucleos local nucleo_inf_ = {nucleo_inf__} if not arr.nucleo then if forma == "ger" then nucleos = {nucleos2_} elseif forma == "part" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos1_, nucleos1_, nucleo_inf_, nucleos1_, nucleo_inf_, nucleo_inf_, nucleos1_} elseif forma == "ind_perf" then nucleos = {nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos2_, nucleo_inf_, nucleo_inf_, nucleos2_} elseif forma == "subj_pres" then nucleos = {nucleos1_, nucleos1_, nucleos2_, nucleos1_, nucleos2_, nucleos2_, nucleos1_} elseif forma == "subj_imp" or forma == "subj_fut" then local n = nucleos2_ nucleos = {n, n, n, n, n, n, n} elseif forma == "imper" then nucleos = {{""}, nucleos1_, nucleo_inf_, nucleos1_, nucleos2_, nucleo_inf_, nucleos1_} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n, n} end else local ns = type(arr.nucleo) ~= "table" and {arr.nucleo} or arr.nucleo for i,_ in ipairs(ns) do ns[i] = "#"..ns[i].."#" end nucleos = {ns, ns, ns, ns, ns, ns, ns} end local L = #sufijos_ if L == 14 then L = 7 -- caso del subjuntivo imperfecto end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = (forma == "subj_pres" and i == VOS) and {unpack(arr[TU])} or {} local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if nexosufijo2 then insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end if forma == "subj_imp" then local nexosufijo3, _ = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+7], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo3, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if strfind(vpron..art, "([ae])(ndo[~#]*"..LETRA.."+[~#]*)$") then vpron = strsubn(vpron, "^(.*)([ae])(ndo)", function(x, y, z) return x..agregar_tilde[y]..z end) end if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local h = auxiliar[forma][1]..pron..art h = strsubn(h, "([ae])(ndo[~#]*"..LETRA.."+[~#]*)$", function(y, z) return agregar_tilde[y]..z end) -- tildo si tiene artículo o enclítico for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local hs = auxiliar[forma] if hs then for i = YO, ELLOS do local t2 = {} local pronart = pron == "se" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOSOTROS and resto or resto_pl)) if hs[i+7] then -- subjuntivo imperfecto insert(t2, adv..pronart..hs[i+7].." "..f_links(part)..f_links(i-7 < NOSOTROS and resto or resto_pl)) end end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if pron == "se" or art ~= "" then -- tengo que correr la acentuación una sílaba para atrás, lo bueno es que no hay formas terminadas en consonante dist. de n o s vpron = strsubn(vpron, "[~#]", "") -- PARCHE: quito todas las marcas de colores, ya que cuesta mucho transformar los verbos con imperativos irregulares, quedan incrustadas en el medio -- 1. Las llanas pasan a esdrújulas vpron = strsubn(vpron, "^([^áéíóú]-)([aeo])(h?[iuü]?h?[aeo][ns]?)$", -- si no hay consonante de separación, hay un hiato de dos vocales abiertas. OJO, no es lo mismo comenzar con [^áéíóú]- que comenzar con [^áéíóú]* function(x, y, z) return x..agregar_tilde[y]..z end ) vpron = strsubn(vpron, "^([^áéíóú]-)([aeoiu])(h?[iuü]?"..CONS_SALVO_H.."+u?[iuü]?[aeiou]+[ns]?)$", -- normal, con consonante de separación. OJO, no es lo mismo comenzar con [^áéíóú]- que comenzar con [^áéíóú]* function(x, y, z) return x..agregar_tilde[y]..z end ) -- si es un hiato con tilde, lo dejo -- 2. Las agudas pasan a llanas, los monosílabos con tilde la pierden, SALVO LOS HIATOS CON VOCAL CERRADA (ej: reí -> reíte. embaí -> embaíte, PERO pecheá -> pecheala) vpron = strsubn(vpron, "^([^áéíóú]*"..CONS_SALVO_H.."u?[iuü]?)([áéíóú])([ns]?)$", function(x, y, z) return x..quitar_tilde[y]..z end ) vpron = strsubn(vpron, "^([^áéíóú]*[aeo])([áéó])([ns]?)$", function(x, y, z) return x..quitar_tilde[y]..z end ) if pron == "se" then -- ajustes finales https://www.rae.es/dpd/pronombres%20personales%20%C3%A1tonos local enc = REFLEXIVOS[i] if enc == "nos" then -- dejémoS nos -> dejémonos vpron = strsubn(vpron, "mos$", "mo") end if enc == "os" then -- amaD + os -> amaos, hacED + os -> haceos, salvo idos vpron = strsubn(vpron, "([ae])d$", "%1") vpron = strsubn(vpron, "("..LETRA..")[ií]d$", "%1í") -- aseguro q no sea "id" a secas end if art ~= "" then -- Si tengo pronombre y artículo, la palabra tiene que quedar esdrújula o sobreesdrújula (dársela -> dátela) vpron = strsubn(vpron, "^([^áéíóú]*)([aeiou])([^áéíóú]-)$", function(x, y, z) return x..agregar_tilde[y]..z end ) end vpron = vpron..enc end end if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "se" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOSOTROS and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end if impersonal == "3" then return {t[EL]} elseif impersonal == "36" then return {t[EL], t[ELLOS]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local params = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["alt"] = {lista = true}, ["nucleopres1"] = {lista = true}, ["nucleopret3"] = {lista = true}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopret3"] = {alias_de = "nucleopret3"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["ind_perf"] = {lista = true}, ["ind_fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["subj_fut"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then generar_error("indirecto") end local adv, r1 = strmatch(tit, "^([sSnN][ío]"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiáéí]r)(s?e?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiáéí]rs?e?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") v = strsubn(v, "^(%S*)ár$", "%1ar") -- pronominales v = strsubn(v, "^(%S*)ér$", "%1er") -- pronominales v = strsubn(v, "^(%S*[^aeo])ír$", "%1ir") -- grafías anticuadas local sufijo_inf = strmatch(v, "[aeií]r$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.ind_perf = parsear_arreglo_doble(args["ind_perf"]) conjugado.ind_fut = parsear_arreglo_doble(args["ind_fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.subj_fut = parsear_arreglo_doble(args["subj_fut"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["ind_perf"], defectivo) defectivo = comprobar_defectivo(args["ind_fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["subj_fut"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["alt"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopret3"])) do local conj = {} if strfind(v, "iar$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iar (anunciar, enviar, culiar)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["anunciar"] = nil paradigmas_reconocidos["amar"] = nil paradigmas_reconocidos["temer"] = nil paradigmas_reconocidos["partir"] = nil paradigmas_reconocidos["ír"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos1 = {} local nucleos2 = {} local alt = conj.alt or {} if args["alt"][N] then insert(alt, args["alt"][N]) end if args["nucleopres1"][N] then alt = {} -- para que no intente buscar el alt y tire error (cf. [[desconsentir]]) end for i, a in ipairs(alt) do if a ~= "REG" then local n1, n2 local info = alt_info[sufijo_inf][a] assert(info, "Valor de alt no reconocido: "..a) local sust n1, sust = strsubb(nucleo_inf, "^([^"..info[2].."]*)["..info[2].."]([^"..info[2].."]*)$", "%1#"..info[3].."#%2") if info[4] then n2, sust = strsubb(nucleo_inf, "^([^"..info[2].."]*)["..info[2].."]([^"..info[2].."]*)$", "%1#"..info[4].."#%2") end assert(sust, "Alternancia vocálica no reconocida") if n1 and not esta_en_lista(n1, nucleos1) then insert(nucleos1, n1) -- no uso diccionario porque no quiero que me invierta el orden end if n2 and not esta_en_lista(n2, nucleos2) then insert(nucleos2, n2) end paradigmas_reconocidos[info[1]] = true es_irregular = true -- si tengo el alt será siemrpe irregular, indistintamente de si el paradigma del mismo índice es regular paradigmas_reconocidos["anunciar"] = nil -- entonces hago lo mismo que hice con los paradigmas regulares paradigmas_reconocidos["amar"] = nil paradigmas_reconocidos["temer"] = nil paradigmas_reconocidos["partir"] = nil paradigmas_reconocidos["ír"] = nil else insert(nucleos1, nucleo_inf) end end if args["nucleopres1"][N] then for k, v in pairs(alt_info[sufijo_inf]) do if args["nucleopret3"][N] then if v[4] then if strsub(nucleo_inf, "^.*["..v[2].."].-$", v[3]) == strsub(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1") and strsub(nucleo_inf, "^.*["..v[2].."].-$", v[4]) == strsub(args["nucleopret3"][N], "^.*#([^#]+)#.*$", "%1") then es_irregular = true paradigmas_reconocidos[v[1]] = true insert(nucleos1, args["nucleopres1"][N]) insert(nucleos2, args["nucleopret3"][N]) paradigmas_reconocidos["anunciar"] = nil -- entonces hago lo mismo que hice con los paradigmas regulares paradigmas_reconocidos["amar"] = nil paradigmas_reconocidos["temer"] = nil paradigmas_reconocidos["partir"] = nil paradigmas_reconocidos["ír"] = nil break end end else if not v[4] then if strsub(nucleo_inf, "^.*["..v[2].."].-$", v[3]) == strsub(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1") then es_irregular = true paradigmas_reconocidos[v[1]] = true insert(nucleos1, args["nucleopres1"][N]) paradigmas_reconocidos["anunciar"] = nil -- entonces hago lo mismo que hice con los paradigmas regulares paradigmas_reconocidos["amar"] = nil paradigmas_reconocidos["temer"] = nil paradigmas_reconocidos["partir"] = nil paradigmas_reconocidos["ír"] = nil break end end end end end if not nucleos1[1] then nucleos1[1] = nucleo_inf end if not nucleos2[1] then nucleos2[1] = nucleo_inf end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.ind_perf = conj.ind_perf or {} conj.ind_fut = conj.ind_fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.subj_fut = conj.subj_fut or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.ind_perf, "ind_perf", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.ind_fut, "ind_fut", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.subj_fut, "subj_fut", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleo_inf, nucleos1, nucleos2, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.ind_perf, conj.ind_perf, args["ind_perf"]) combinar_arreglo_doble(conjugado.ind_fut, conj.ind_fut, args["ind_fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.subj_fut, conj.subj_fut, args["subj_fut"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", impers, args["part"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", impers, args["ind_imp"][1] == "no") local ind_perf = formatear_conjugacion(conjugado.ind_perf, adv, pron, art, resto, resto_pl, "ind_perf", impers, args["ind_perf"][1] == "no") local ind_fut = formatear_conjugacion(conjugado.ind_fut, adv, pron, art, resto, resto_pl, "ind_fut", impers, args["ind_fut"][1] == "no") local ind_perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_perf_comp", impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", impers, args["part"] == "no") local ind_fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_fut_comp", impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", impers, args["subj_imp"][1] == "no") local subj_fut = formatear_conjugacion(conjugado.subj_fut, adv, pron, art, resto, resto_pl, "subj_fut", impers, args["subj_fut"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", impers, args["part"] == "no") local subj_fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_fut_comp", impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then if args["indirecto"] then fila_pronombres_ind = {"", "a mí me, a ti te, a vos te, a él le, a ella le, a usted le, a nosotros nos, a vosotros os, a ustedes les, a ellos les", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "a mí me, a ti te, a vos te, a él le, a ella le, a usted le, a nosotros nos, a vosotros os, a ustedes les, a ellos les", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "que a mí me, que a ti te, que a vos te, que a él le, que a ella le, que a usted le, que a nosotros nos, que a vosotros os, que a ustedes les, que a ellos les", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(ello)", color=COLOR_IMPER, header=true, class="pc"} else fila_pronombres_ind = {"", "(ello)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(ello)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(que ello)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(ello)", color=COLOR_IMPER, header=true, class="pc"} end cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(ello)", "(ellos)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(ello)", "(ellos)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(que ello)", "(que ellos)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(ello)", "(ellos)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "yo", "tú", "vos", "él, ella, usted", "nosotros", "vosotros", "ustedes, ellos", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "yo", "tú", "vos", "él, ella, usted", "nosotros", "vosotros", "ustedes, ellos", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "que yo", "que tú", "que vos", "que él, que ella, que usted", "que nosotros", "que vosotros", "que ustedes, que ellos", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tú)", "(vos)", "(usted)", "(nosotros)", "(vosotros)", "(ustedes)", color=COLOR_IMPER, header=true, class="pc"} cs = 8 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio", header=true, color="WhiteSmoke"}, {part[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} end t[5] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[6] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[7] = fila_pronombres_ind t[8] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[9] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[10] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(ind_perf)} t[11] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[12] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(ind_perf_comp)} t[13] = {{"Futuro", color=COLOR_IND, header=true}, unpack(ind_fut)} t[14] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(ind_fut_comp)} t[15] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[16] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[17] = fila_pronombres_cond t[18] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[19] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[20] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[21] = fila_pronombres_subj t[22] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[23] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[24] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[25] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[26] = {{f("Futuro{†}"), color=COLOR_SUBJ, header=true}, unpack(subj_fut)} t[27] = {{f("Futuro compuesto{†}"), color=COLOR_SUBJ, header=true}, unpack(subj_fut_comp)} t[28] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[29] = fila_pronombres_imper if mostrar_imper then t[30] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[30] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[31] = {{f("Leyenda: † arcaico, x no normativo, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[32] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "ES:Verbos irregulares") else insert(cats, "ES:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "ES:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "ES:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "ES:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "ES:Verbos de objeto indirecto") end if defectivo then insert(cats, "ES:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "ES:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "ES:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "ES:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export 458wzcsgj2paj5nadlmqinan5c316r2 tractorista 0 1049724 5823413 5732021 2025-07-03T02:31:40Z Tmagc 158167 5823413 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|tractor|ista}}. === {{sustantivo|es|masculino|femenino}} === {{es.sust|mf}} ;1 {{csem|ocupaciones}}: {{plm|persona}} que se gana la vida conduciendo un tractor. === Traducciones === {{trad-arriba}} {{t|de|a1=1|t1=Traktorfahrer|g1=m}} {{t|cs|a1=1|t1=traktorista|g1=m}} {{t|en|a1=1|t1=tractor driver}} {{trad-abajo}} == Referencias y notas == <references /> n9xf7nlaugocnordmmcu39jkg7e8mwq inquietante 0 1052065 5823490 5708096 2025-07-03T04:12:50Z Tmagc 158167 /* {{adjetivo|it}} */ 5823490 wikitext text/x-wiki == {{lengua|es}} == {{pron-graf}} === Etimología === {{año de documentación|1824}}. {{etimología|sufijo|inquietar|-nte}}. === {{adjetivo|es}} === {{es.adj}} ;1: {{adjetivo de verbo|inquietar|inquieta}}. {{ejemplo|«Las [[nuevas]] que [[Lucía]] le [[dar|daba]] [[ser|eran]] en [[sustancia]] [[siempre]] las [[mismo|mismas]], si [[bien]] más '''''inquietantes''''' [[cada]] [[vez]]».|a={{versalita|[[w:Juan Valera|Valera, Juan]]}}|t=El comendador Mendoza|fo=1877|f=2003|editorial=Alicante, Universidad de Alicante|c=libro}} {{ejemplo|«El [[w:Tratado de Berlín de 1878|tratado de Berlín]] [[devolver|había devuelto]] a la [[Inglaterra]] su vieja [[preponderancia]] en el [[continente]]. [[ser|Fue]] un [[triunfo]] [[diplomático]] [[capital]] de lord Beaconsfield. La [[Rusia]] [[satisfacer|satisfizo]] todas sus [[exigencia]]s; la [[Turquía]] [[abandonar|abandonó]] su [[actitud]] '''''inquietante'''''. Los [[negocio]]s [[político]]s y [[militar]]es de la [[India]] [[recibir|recibieron]] el [[impulso]] [[enérgico]] de un [[espíritu]] [[valiente]] que [[conocer|conocía]] el [[pueblo]] que [[gobernar|gobernaba]], [[parecer|parecía]] que la [[Inglaterra]] [[volver|volvía]] por sus [[tradición|tradiciones]]».|a={{versalita|López, Lucio Vicente}}|t=Recuerdos de viaje|fo=1881|f=2003|editorial=Alicante, Universidad de Alicante|c=libro}} {{sinónimo|perturbador|desasosegante|preocupante|alarmante}}. === Véase también === {{w|inquietud}} === Traducciones === {{trad-arriba}} {{t|fr|t1=inquiétant}} {{trad-abajo}} == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|endo|inquietare|glosa=inquietar}}. === {{adjetivo|it}} === {{it.adj}} ;1: {{plm}}. == {{lengua|la}} == {{pron-graf|leng=la|ayuda=inquiētante |alt=inquiētante}} === Forma flexiva === ==== Forma verbal ==== ;1: {{forma adjetivo|leng=la|inquietans|ablativo|masculino, femenino y neutro|singular}}. == Referencias y notas == <references /> 88jcp2wajdk7nscbkquw1czq2pjimea ofi 0 1052586 5823333 5721913 2025-07-02T20:31:57Z Tmagc 158167 5823333 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología 1 === {{etimología|acort|oficina|nota=apócope}}. ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1: {{plm|oficina}}. {{uso|coloquial}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} === Etimología 2 === {{etimología|acort|oficial|nota=apócope}}. ==== {{adverbio|es}} ==== ;1: {{plm|de acuerdo}}.<ref>{{Damer}}</ref> {{uso|coloquial}} {{ámbito|Paraguay}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> b2kaj1kuv7ppf9kjdsi0d8j0gnhhpti múleo 0 1053897 5823406 5818596 2025-07-03T02:24:25Z Tmagc 158167 5823406 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf|v=mula|v2=mulilla}} === Etimología === {{etimología|la|mulleus|alt=mulleus (calceus)}}. ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;1 {{csem|vestimenta}}: Calzado que usaban los patricios romanos; era de color purpúreo, puntiagudo, con la punta vuelta hacia el empeine y por el talón subía hasta la mitad de la pierna.<ref>{{DLE1925}}</ref> ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> nibit9dg26kvj0bdp86augbot09sygb rumors 0 1054440 5823352 5820705 2025-07-02T22:06:05Z Cvmontuy 1123 +pron 5823352 wikitext text/x-wiki {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fono=ˈɹumɚz|pron=Estados Unidos |2fono=ˈɹuːmə(ɹ)z|2pron=Reino Unido }} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|rumor|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|rumor|3s|presente}}. == Referencias y notas == <references /> 5a0pcjy8hfsm62dnj95bf00pzhtpe2i bottles 0 1054586 5823438 5821034 2025-07-03T03:00:56Z Cvmontuy 1123 Revisado 5823438 wikitext text/x-wiki {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fono=ˈbɑtl̩z|pron=Estados Unidos |2fono=ˈbɒtl̩z|2pron=Reino Unido}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|bottle|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|bottle|3s|presente}}. == Referencias y notas == <references /> p5126zvgapiqoy3e0k95f5dzqs0j7zs Jeff 0 1055064 5823346 5823135 2025-07-02T21:48:39Z 187.189.84.200 . 5823346 wikitext text/x-wiki {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fono=d͡ʒɛf}} === Etimología === {{etimología|leng=en|}}. ==== {{sustantivo propio|en}} ==== ;1: {{hipocorístico|leng=en|Jeffrey}}. ;2: {{hipocorístico|leng=en|Jeffery}}. ;3: {{hipocorístico|leng=en|Jefferey}}. ;4: {{hipocorístico|leng=en|Jeffry}}. ;5: {{hipocorístico|leng=en|Jefferson}}. == Referencias y notas == <references /> aly4yvtvbnldtd5yukba9df8hur17wb Categoría:ES:Verbos del paradigma anunciar 14 1055074 5823211 2025-07-02T14:49:44Z TMCbot 164594 agrego categoría de verbos del paradigma 5823211 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma evacuar 14 1055075 5823212 2025-07-02T14:50:05Z TMCbot 164594 agrego categoría de verbos del paradigma 5823212 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma averiguar 14 1055076 5823213 2025-07-02T15:07:27Z TMCbot 164594 agrego categoría de verbos del paradigma 5823213 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma complicar 14 1055077 5823214 2025-07-02T15:07:29Z TMCbot 164594 agrego categoría de verbos del paradigma 5823214 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma llegar 14 1055078 5823215 2025-07-02T15:07:31Z TMCbot 164594 agrego categoría de verbos del paradigma 5823215 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma actuar 14 1055079 5823216 2025-07-02T15:07:33Z TMCbot 164594 agrego categoría de verbos del paradigma 5823216 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma realizar 14 1055080 5823217 2025-07-02T15:07:34Z TMCbot 164594 agrego categoría de verbos del paradigma 5823217 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma parecer 14 1055081 5823218 2025-07-02T15:07:37Z TMCbot 164594 agrego categoría de verbos del paradigma 5823218 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma vencer 14 1055082 5823219 2025-07-02T15:07:39Z TMCbot 164594 agrego categoría de verbos del paradigma 5823219 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma leer 14 1055083 5823220 2025-07-02T15:07:41Z TMCbot 164594 agrego categoría de verbos del paradigma 5823220 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma proteger 14 1055084 5823221 2025-07-02T15:07:43Z TMCbot 164594 agrego categoría de verbos del paradigma 5823221 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma atañer 14 1055085 5823222 2025-07-02T15:07:44Z TMCbot 164594 agrego categoría de verbos del paradigma 5823222 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma temer 14 1055086 5823223 2025-07-02T15:07:46Z TMCbot 164594 agrego categoría de verbos del paradigma 5823223 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma producir 14 1055087 5823224 2025-07-02T15:07:48Z TMCbot 164594 agrego categoría de verbos del paradigma 5823224 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma escabullir 14 1055088 5823225 2025-07-02T15:07:49Z TMCbot 164594 agrego categoría de verbos del paradigma 5823225 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma distinguir 14 1055089 5823226 2025-07-02T15:07:52Z TMCbot 164594 agrego categoría de verbos del paradigma 5823226 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma argüir 14 1055090 5823227 2025-07-02T15:07:55Z TMCbot 164594 agrego categoría de verbos del paradigma 5823227 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma lucir 14 1055091 5823228 2025-07-02T15:07:57Z TMCbot 164594 agrego categoría de verbos del paradigma 5823228 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma fruncir 14 1055092 5823229 2025-07-02T15:07:58Z TMCbot 164594 agrego categoría de verbos del paradigma 5823229 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma dirigir 14 1055093 5823230 2025-07-02T15:08:00Z TMCbot 164594 agrego categoría de verbos del paradigma 5823230 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma gruñir 14 1055094 5823231 2025-07-02T15:08:02Z TMCbot 164594 agrego categoría de verbos del paradigma 5823231 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma construir 14 1055095 5823232 2025-07-02T15:08:03Z TMCbot 164594 agrego categoría de verbos del paradigma 5823232 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma partir 14 1055096 5823233 2025-07-02T15:08:05Z TMCbot 164594 agrego categoría de verbos del paradigma 5823233 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma reír 14 1055097 5823234 2025-07-02T15:08:07Z TMCbot 164594 agrego categoría de verbos del paradigma 5823234 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma andar 14 1055098 5823235 2025-07-02T15:08:09Z TMCbot 164594 agrego categoría de verbos del paradigma 5823235 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma dar 14 1055099 5823236 2025-07-02T15:08:10Z TMCbot 164594 agrego categoría de verbos del paradigma 5823236 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma errar 14 1055100 5823237 2025-07-02T15:08:12Z TMCbot 164594 agrego categoría de verbos del paradigma 5823237 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma estar 14 1055101 5823238 2025-07-02T15:08:13Z TMCbot 164594 agrego categoría de verbos del paradigma 5823238 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma inhestar 14 1055102 5823239 2025-07-02T15:08:15Z TMCbot 164594 agrego categoría de verbos del paradigma 5823239 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma tar 14 1055103 5823240 2025-07-02T15:08:17Z TMCbot 164594 agrego categoría de verbos del paradigma 5823240 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma enviar 14 1055104 5823241 2025-07-02T15:08:19Z TMCbot 164594 agrego categoría de verbos del paradigma 5823241 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma culiar 14 1055105 5823242 2025-07-02T15:08:20Z TMCbot 164594 agrego categoría de verbos del paradigma 5823242 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma aislar 14 1055106 5823243 2025-07-02T15:08:22Z TMCbot 164594 agrego categoría de verbos del paradigma 5823243 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma agorar 14 1055107 5823244 2025-07-02T15:08:24Z TMCbot 164594 agrego categoría de verbos del paradigma 5823244 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma aunar 14 1055108 5823245 2025-07-02T15:08:26Z TMCbot 164594 agrego categoría de verbos del paradigma 5823245 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma contar 14 1055109 5823246 2025-07-02T15:08:27Z TMCbot 164594 agrego categoría de verbos del paradigma 5823246 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma pensar 14 1055110 5823247 2025-07-02T15:08:29Z TMCbot 164594 agrego categoría de verbos del paradigma 5823247 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma caber 14 1055111 5823248 2025-07-02T15:08:31Z TMCbot 164594 agrego categoría de verbos del paradigma 5823248 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma caer 14 1055112 5823249 2025-07-02T15:08:33Z TMCbot 164594 agrego categoría de verbos del paradigma 5823249 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma cocer 14 1055113 5823250 2025-07-02T15:08:34Z TMCbot 164594 agrego categoría de verbos del paradigma 5823250 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma hacer 14 1055114 5823251 2025-07-02T15:08:37Z TMCbot 164594 agrego categoría de verbos del paradigma 5823251 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma haber 14 1055115 5823252 2025-07-02T15:08:38Z TMCbot 164594 agrego categoría de verbos del paradigma 5823252 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma mecer 14 1055116 5823253 2025-07-02T15:08:40Z TMCbot 164594 agrego categoría de verbos del paradigma 5823253 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma oler 14 1055117 5823254 2025-07-02T15:08:41Z TMCbot 164594 agrego categoría de verbos del paradigma 5823254 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma volver 14 1055118 5823255 2025-07-02T15:08:43Z TMCbot 164594 agrego categoría de verbos del paradigma 5823255 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma placer 14 1055119 5823256 2025-07-02T15:08:45Z TMCbot 164594 agrego categoría de verbos del paradigma 5823256 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma poder 14 1055120 5823257 2025-07-02T15:08:46Z TMCbot 164594 agrego categoría de verbos del paradigma 5823257 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma poner 14 1055121 5823258 2025-07-02T15:08:48Z TMCbot 164594 agrego categoría de verbos del paradigma 5823258 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma proveer 14 1055122 5823259 2025-07-02T15:08:50Z TMCbot 164594 agrego categoría de verbos del paradigma 5823259 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma querer 14 1055123 5823260 2025-07-02T15:08:51Z TMCbot 164594 agrego categoría de verbos del paradigma 5823260 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma raer 14 1055124 5823261 2025-07-02T15:08:53Z TMCbot 164594 agrego categoría de verbos del paradigma 5823261 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma roer 14 1055125 5823262 2025-07-02T15:08:55Z TMCbot 164594 agrego categoría de verbos del paradigma 5823262 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma romper 14 1055126 5823263 2025-07-02T15:08:57Z TMCbot 164594 agrego categoría de verbos del paradigma 5823263 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma saber 14 1055127 5823264 2025-07-02T15:08:58Z TMCbot 164594 agrego categoría de verbos del paradigma 5823264 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma ser 14 1055128 5823265 2025-07-02T15:09:00Z TMCbot 164594 agrego categoría de verbos del paradigma 5823265 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma seer 14 1055129 5823266 2025-07-02T15:09:02Z TMCbot 164594 agrego categoría de verbos del paradigma 5823266 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma tener 14 1055130 5823267 2025-07-02T15:09:04Z TMCbot 164594 agrego categoría de verbos del paradigma 5823267 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma traer 14 1055131 5823268 2025-07-02T15:09:05Z TMCbot 164594 agrego categoría de verbos del paradigma 5823268 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma valer 14 1055132 5823269 2025-07-02T15:09:07Z TMCbot 164594 agrego categoría de verbos del paradigma 5823269 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma ver 14 1055133 5823270 2025-07-02T15:09:09Z TMCbot 164594 agrego categoría de verbos del paradigma 5823270 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma prever 14 1055134 5823271 2025-07-02T15:09:10Z TMCbot 164594 agrego categoría de verbos del paradigma 5823271 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma yacer 14 1055135 5823272 2025-07-02T15:09:12Z TMCbot 164594 agrego categoría de verbos del paradigma 5823272 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma mover 14 1055136 5823273 2025-07-02T15:09:14Z TMCbot 164594 agrego categoría de verbos del paradigma 5823273 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma entender 14 1055137 5823274 2025-07-02T15:09:16Z TMCbot 164594 agrego categoría de verbos del paradigma 5823274 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma asir 14 1055138 5823275 2025-07-02T15:09:17Z TMCbot 164594 agrego categoría de verbos del paradigma 5823275 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma abrir 14 1055139 5823276 2025-07-02T15:09:20Z TMCbot 164594 agrego categoría de verbos del paradigma 5823276 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma decir 14 1055140 5823277 2025-07-02T15:09:21Z TMCbot 164594 agrego categoría de verbos del paradigma 5823277 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma interdecir 14 1055141 5823278 2025-07-02T15:09:23Z TMCbot 164594 agrego categoría de verbos del paradigma 5823278 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma bendecir 14 1055142 5823279 2025-07-02T15:09:25Z TMCbot 164594 agrego categoría de verbos del paradigma 5823279 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma predecir 14 1055143 5823280 2025-07-02T15:09:26Z TMCbot 164594 agrego categoría de verbos del paradigma 5823280 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma erguir 14 1055144 5823281 2025-07-02T15:09:28Z TMCbot 164594 agrego categoría de verbos del paradigma 5823281 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma imprimir 14 1055145 5823282 2025-07-02T15:09:30Z TMCbot 164594 agrego categoría de verbos del paradigma 5823282 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma infecir 14 1055146 5823283 2025-07-02T15:09:31Z TMCbot 164594 agrego categoría de verbos del paradigma 5823283 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma ir 14 1055147 5823284 2025-07-02T15:09:33Z TMCbot 164594 agrego categoría de verbos del paradigma 5823284 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma morir 14 1055148 5823285 2025-07-02T15:09:35Z TMCbot 164594 agrego categoría de verbos del paradigma 5823285 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma pudrir 14 1055149 5823286 2025-07-02T15:09:36Z TMCbot 164594 agrego categoría de verbos del paradigma 5823286 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma salir 14 1055150 5823287 2025-07-02T15:09:38Z TMCbot 164594 agrego categoría de verbos del paradigma 5823287 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma escribir 14 1055151 5823288 2025-07-02T15:09:39Z TMCbot 164594 agrego categoría de verbos del paradigma 5823288 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma inscribir 14 1055152 5823289 2025-07-02T15:09:41Z TMCbot 164594 agrego categoría de verbos del paradigma 5823289 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma venir 14 1055153 5823290 2025-07-02T15:09:42Z TMCbot 164594 agrego categoría de verbos del paradigma 5823290 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma discernir 14 1055154 5823291 2025-07-02T15:09:44Z TMCbot 164594 agrego categoría de verbos del paradigma 5823291 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma sentir 14 1055155 5823292 2025-07-02T15:09:47Z TMCbot 164594 agrego categoría de verbos del paradigma 5823292 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma podrir 14 1055156 5823293 2025-07-02T15:09:49Z TMCbot 164594 agrego categoría de verbos del paradigma 5823293 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma reunir 14 1055157 5823294 2025-07-02T15:09:50Z TMCbot 164594 agrego categoría de verbos del paradigma 5823294 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma prohibir 14 1055158 5823295 2025-07-02T15:09:52Z TMCbot 164594 agrego categoría de verbos del paradigma 5823295 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma rehenchir 14 1055159 5823296 2025-07-02T15:09:53Z TMCbot 164594 agrego categoría de verbos del paradigma 5823296 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma dormir 14 1055161 5823298 2025-07-02T15:09:57Z TMCbot 164594 agrego categoría de verbos del paradigma 5823298 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma pedir 14 1055162 5823299 2025-07-02T15:09:58Z TMCbot 164594 agrego categoría de verbos del paradigma 5823299 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma desvaír 14 1055163 5823300 2025-07-02T15:10:00Z TMCbot 164594 agrego categoría de verbos del paradigma 5823300 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma freír 14 1055164 5823301 2025-07-02T15:10:01Z TMCbot 164594 agrego categoría de verbos del paradigma 5823301 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Categoría:ES:Verbos del paradigma oír 14 1055165 5823302 2025-07-02T15:10:03Z TMCbot 164594 agrego categoría de verbos del paradigma 5823302 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx transnational repression 0 1055166 5823336 2025-07-02T20:40:28Z Apisite 115465 Página creada con «== {{lengua|en}} == {{pron-graf|leng=en}} === Etimología === {{etimología|leng=en}} === {{sustantivo|en}} === {{inflect.en.sust.sg}} ;1: {{plm|represión transnacional}}. == Referencias y notas == <references />» 5823336 wikitext text/x-wiki == {{lengua|en}} == {{pron-graf|leng=en}} === Etimología === {{etimología|leng=en}} === {{sustantivo|en}} === {{inflect.en.sust.sg}} ;1: {{plm|represión transnacional}}. == Referencias y notas == <references /> 6663cxx90ggi5tgi31b4519aqtvuxya beans 0 1055167 5823342 2025-07-02T21:47:20Z RoboJ2 165037 Generado con base en el contenido de en.wiktionary 5823342 wikitext text/x-wiki {{creado_por_bot}} {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fone=biːnz|2audio=En-au-beans.ogg|2pron=Australia}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|bean|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|bean|3s|presente}}. == Referencias y notas == <references /> ajihz2rvuhqaioth1keig0hy0qjn7a4 5823351 5823342 2025-07-02T22:02:58Z Cvmontuy 1123 revisión y defs 5823351 wikitext text/x-wiki {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fono=biːnz|2audio=En-au-beans.ogg|2pron=Australia}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|bean|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|bean|3s|presente}}. === Etimología === {{etimología|leng=en|}}. ==== {{sustantivo|en}} ==== ;1: {{plm|testículos}}. {{uso|leng=en|informal}} ;2: {{plm|cantidad}} o [[valor]] [[insignificante]]. {{uso|leng=en|informal}} ;3: {{plm|dinero}}. {{uso|leng=en|informal|arcaico}} == Referencias y notas == <references /> k0itukixkvt4likwnvco7posvwn3th1 adults 0 1055168 5823343 2025-07-02T21:47:30Z RoboJ2 165037 Generado con base en el contenido de en.wiktionary 5823343 wikitext text/x-wiki {{creado_por_bot}} {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fone=ˈædʌlts|pron=Reino Unido |2fone=əˈdʌlts|2pron=Estados Unidos}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|adult|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|adult|3s|presente}}. == Referencias y notas == <references /> mkyp0xcgbpwkvp4wxgh1snbf57dewyx 5823350 5823343 2025-07-02T21:57:22Z Cvmontuy 1123 revisado 5823350 wikitext text/x-wiki {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fono=ˈædʌlts|pron=Reino Unido |2fono=əˈdʌlts|2pron=Estados Unidos}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|adult|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|adult|3s|presente}}. == Referencias y notas == <references /> m4hs08nacrc1jzje74xrso9teesp45f matches 0 1055169 5823344 2025-07-02T21:47:40Z RoboJ2 165037 Generado con base en el contenido de en.wiktionary 5823344 wikitext text/x-wiki {{creado_por_bot}} {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fone=ˈmæt͡ʃɪz|2audio=LL-Q1860 (eng)-PerfectSoundWhatever-matches.wav|2pron=Canadá|3audio=en-us-matches.ogg|3pron=Estados Unidos}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|match|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|match|3s|presente}}. == Referencias y notas == <references /> p1iqvje8p8z5r3r7vrbngnvy94o6uld 5823347 5823344 2025-07-02T21:54:34Z Cvmontuy 1123 revisado 5823347 wikitext text/x-wiki {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fono=ˈmæt͡ʃɪz|2audio=LL-Q1860 (eng)-PerfectSoundWhatever-matches.wav|2pron=Canadá|3audio=en-us-matches.ogg|3pron=Estados Unidos}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|match|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|match|3s|presente}}. == Referencias y notas == <references /> lr1wbsrmw4lfdk85ssxwfhw12vr8tkx units 0 1055170 5823345 2025-07-02T21:47:50Z RoboJ2 165037 Generado con base en el contenido de en.wiktionary 5823345 wikitext text/x-wiki {{creado_por_bot}} {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fone=ˈjuː.nɪts|2audio=LL-Q1860 (eng)-PerfectSoundWhatever-units.wav|2pron=Canadá|3audio=en-us-units.ogg|3pron=Estados Unidos}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|unit|en}}. == Referencias y notas == <references /> 0uciwpyjtv8dtu7fv0e3eokv7o3p9it 5823348 5823345 2025-07-02T21:55:21Z Cvmontuy 1123 5823348 wikitext text/x-wiki {{creado_por_bot}} {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fono=ˈjuː.nɪts|2audio=LL-Q1860 (eng)-PerfectSoundWhatever-units.wav|2pron=Canadá|3audio=en-us-units.ogg|3pron=Estados Unidos}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|unit|en}}. == Referencias y notas == <references /> asakviavprtvind2n1lnr3louuj231u 5823349 5823348 2025-07-02T21:56:43Z Cvmontuy 1123 revisado 5823349 wikitext text/x-wiki {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fono=ˈjuː.nɪts|2audio=LL-Q1860 (eng)-PerfectSoundWhatever-units.wav|2pron=Canadá|3audio=en-us-units.ogg|3pron=Estados Unidos}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|unit|en}}. == Referencias y notas == <references /> 8jk8u7hqs6n0j989nf3rx2llrho2wln wheels 0 1055171 5823365 2025-07-03T00:03:00Z RoboJ2 165037 Generado con base en el contenido de en.wiktionary 5823365 wikitext text/x-wiki {{creado_por_bot}} {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fono=wiːlz|2audio=En-au-wheels.ogg|2pron=Australia}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|wheel|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|wheel|3s|presente}}. == Referencias y notas == <references /> ctj1drq83kpyx6ch5nj49kuna0jgaqi 5823437 5823365 2025-07-03T03:00:03Z Cvmontuy 1123 Revisado 5823437 wikitext text/x-wiki {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fono=wiːlz|2audio=En-au-wheels.ogg|2pron=Australia}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|wheel|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|wheel|3s|presente}}. === Etimología === {{etimología|leng=en|}}. ==== {{sustantivo|en}} ==== ;1: {{plm|automóvil}}. {{uso|leng=en|informal}} == Referencias y notas == <references /> nbw5am4v3wx7gzfpnimp1un86t8w9hb couples 0 1055172 5823366 2025-07-03T00:03:10Z RoboJ2 165037 Generado con base en el contenido de en.wiktionary 5823366 wikitext text/x-wiki {{creado_por_bot}} {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fono=ˈkʌpəlz|2audio=LL-Q1860 (eng)-Back ache-couples.wav|2pron=Reino Unido}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|couple|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|couple|3s|presente}}. == Referencias y notas == <references /> 8e0uikzdbi80bvfmc9djdcfnuaryoi0 drives 0 1055173 5823367 2025-07-03T00:03:20Z RoboJ2 165037 Generado con base en el contenido de en.wiktionary 5823367 wikitext text/x-wiki {{creado_por_bot}} {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fono=dɹaɪvz}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|drive|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|drive|3s|presente}}. == Referencias y notas == <references /> cfkb78lt2wtjisyd22egwlc4d9vz0nw affairs 0 1055174 5823368 2025-07-03T00:03:30Z RoboJ2 165037 Generado con base en el contenido de en.wiktionary 5823368 wikitext text/x-wiki {{creado_por_bot}} {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en|audio=en-us-affairs.ogg|pron=Estados Unidos |2fono=əˈfeːz|2pron=Australia}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|affair|en}}. == Referencias y notas == <references /> h77ri4itwhih00b5selzysrdwmou57y limits 0 1055175 5823369 2025-07-03T00:03:40Z RoboJ2 165037 Generado con base en el contenido de en.wiktionary 5823369 wikitext text/x-wiki {{creado_por_bot}} {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fono=ˈlɪmɪts|2audio=en-us-limits.ogg|2pron=Estados Unidos}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|limit|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|limit|3s|presente}}. == Referencias y notas == <references /> dvvk10jz1kfjyr35zi8uofbgy29xqbb forms 0 1055176 5823370 2025-07-03T00:03:50Z RoboJ2 165037 Generado con base en el contenido de en.wiktionary 5823370 wikitext text/x-wiki {{creado_por_bot}} {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en|audio=en-us-forms.ogg|pron=Estados Unidos}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|form|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|form|3s|presente}}. == Referencias y notas == <references /> 6t5d8rgcljv2yoqi1tyrkvkx05x1fu7 stinks 0 1055177 5823371 2025-07-03T00:04:00Z RoboJ2 165037 Generado con base en el contenido de en.wiktionary 5823371 wikitext text/x-wiki {{creado_por_bot}} {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en|audio=en-us-stinks.ogg|pron=Estados Unidos}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|stink|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|stink|3s|presente}}. == Referencias y notas == <references /> n34b6roe19r0rfoyzap6acbeqcg4ebl 5823440 5823371 2025-07-03T03:04:02Z Cvmontuy 1123 Revisado 5823440 wikitext text/x-wiki {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en|audio=en-us-stinks.ogg|pron=Estados Unidos}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|stink|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|stink|3s|presente}}. === Etimología === {{etimología|leng=en|}}. ==== {{sustantivo|en}} ==== ;1: {{plm|química}}(asignatura escolar). {{uso|leng=en|slang}} == Referencias y notas == <references /> jq195rmn90envw1fy1vkty2q4nd0d9j 5823444 5823440 2025-07-03T03:04:49Z Cvmontuy 1123 . 5823444 wikitext text/x-wiki {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en|fono=stɪŋkz|audio=en-us-stinks.ogg|pron=Estados Unidos}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|stink|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|stink|3s|presente}}. === Etimología === {{etimología|leng=en|}}. ==== {{sustantivo|en}} ==== ;1: {{plm|química}}(asignatura escolar). {{uso|leng=en|slang}} == Referencias y notas == <references /> r3i0mkaopvkhke3exhr42mzj3re2nm1 suspects 0 1055178 5823372 2025-07-03T00:04:10Z RoboJ2 165037 Generado con base en el contenido de en.wiktionary 5823372 wikitext text/x-wiki {{creado_por_bot}} {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|suspect|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|suspect|3s|presente}}. == Referencias y notas == <references /> s6vjbkbwk970m7sb99bn2xqxgwq257l 5823384 5823372 2025-07-03T01:41:25Z Cvmontuy 1123 revisado 5823384 wikitext text/x-wiki {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|suspect|en}}. ==== Forma verbal ==== ;2: {{forma verbo-en|suspect|3s|presente}}. == Referencias y notas == <references /> 41bpi0j07dlx7kif9gvo1ceuoz323kz manners 0 1055179 5823373 2025-07-03T00:04:20Z RoboJ2 165037 Generado con base en el contenido de en.wiktionary 5823373 wikitext text/x-wiki {{creado_por_bot}} {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fono=ˈmæn.ɚz|audio=en-us-manners.ogg|pron=Estados Unidos}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|manner|en}}. == Referencias y notas == <references /> dcu86xgr1vvlqhrcql30rzycaxt5wqt 5823383 5823373 2025-07-03T01:39:57Z Cvmontuy 1123 revisado 5823383 wikitext text/x-wiki {{desambiguación|}} == {{lengua|en}} == {{pron-graf|leng=en |fono=ˈmæn.ɚz|audio=en-us-manners.ogg|pron=Estados Unidos}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|manner|en}}. === Etimología === {{etimología|leng=en|}}. ==== {{sustantivo|en}} ==== ;1: {{plm|modales}}. == Referencias y notas == <references /> jsv7zjghamf8z8wafolhjgm3yhidy7w Módulo:flex/it 828 1055180 5823376 2025-07-03T01:06:15Z Tmagc 158167 Página creada con «-- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local s…» 5823376 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local V = "[" .. vocales .. "]" local C = "[^" .. vocales .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function try(p, nexo, m, pl, f, fpl, g, h) if g == "m" or g == "mf" then local r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then if not pl then return {{r.."~"..n..m.."~"}} elseif g == "mf" then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}} end end else -- g == "f" local r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if not fpl then return {{r.."~"..n..f.."~"}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, h) or try(p, "ì", "o", "i", "a", "e", g, h) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, h) or try(p, "log", "o", "hi", "a", "he", g, h) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "", "o", "i", "a", "e", g, h) or try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "", "NO", "NO", "logia", "logie", g, h) or try(p, "[cg]ì", "a", "", "a", "e", g, h) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, h) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, h) or try(p, "", "a", "i", "a", "e", g, h) or try(p, "", "e", "i", "e", "i", g, h) or try(p, "[àù]", "", nil, "", nil, g, h) or try(p, C, "", nil, "", nil, g, h) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = export.flexionar_palabra(a, g, h) local flex2 = copulativa and export.flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = export.flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export 0pqmlmwfbpeyc4pnqq6g2i9ho00qh2d 5823377 5823376 2025-07-03T01:07:49Z Tmagc 158167 5823377 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local V = "[" .. vocales .. "]" local C = "[^" .. vocales .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function try(p, nexo, m, pl, f, fpl, g, h) if g == "m" or g == "mf" then local r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then if not pl then return {{r.."~"..n..m.."~"}} elseif g == "mf" then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}} end end else -- g == "f" local r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if not fpl then return {{r.."~"..n..f.."~"}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, h) or try(p, "ì", "o", "i", "a", "e", g, h) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, h) or try(p, "log", "o", "hi", "a", "he", g, h) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "", "o", "i", "a", "e", g, h) or try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "", "NO", "NO", "logia", "logie", g, h) or try(p, "[cg]ì", "a", "", "a", "e", g, h) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, h) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, h) or try(p, "", "a", "i", "a", "e", g, h) or try(p, "", "e", "i", "e", "i", g, h) or try(p, "[àù]", "", nil, "", nil, g, h) or try(p, C, "", nil, "", nil, g, h) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = export.flexionar_palabra(a, g, h) local flex2 = copulativa and export.flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = export.flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export h6ky6efzbah7ihak3qm5u4m3ppo7982 5823380 5823377 2025-07-03T01:11:39Z Tmagc 158167 5823380 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function try(p, nexo, m, pl, f, fpl, g, h) if g == "m" or g == "mf" then local r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then if not pl then return {{r.."~"..n..m.."~"}} elseif g == "mf" then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}} end end else -- g == "f" local r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if not fpl then return {{r.."~"..n..f.."~"}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, h) or try(p, "ì", "o", "i", "a", "e", g, h) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, h) or try(p, "log", "o", "hi", "a", "he", g, h) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "", "o", "i", "a", "e", g, h) or try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "", "NO", "NO", "logia", "logie", g, h) or try(p, "[cg]ì", "a", "", "a", "e", g, h) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, h) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, h) or try(p, "", "a", "i", "a", "e", g, h) or try(p, "", "e", "i", "e", "i", g, h) or try(p, "[àù]", "", nil, "", nil, g, h) or try(p, C, "", nil, "", nil, g, h) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = export.flexionar_palabra(a, g, h) local flex2 = copulativa and export.flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = export.flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export 4mpi3c0bvxip4golihsoz50okr9ruya 5823381 5823380 2025-07-03T01:27:29Z Tmagc 158167 5823381 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function try(p, nexo, m, pl, f, fpl, g, h) if h == true and not strfind(pl, "^h") then pl = "h"..pl fpl = "h"..fpl elseif h == false and strfind(pl, "^h") then pl = substr(pl, 2) fpl = substr(fpl, 2) end if g == "m" or g == "mf" then local r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then if not pl then return {{r.."~"..n..m.."~"}} elseif g == "mf" then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}} end end else -- g == "f" local r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if not fpl then return {{r.."~"..n..f.."~"}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, nil) or try(p, "log", "o", "hi", "a", "he", g, nil) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- Llanas en -go -co, plural con h https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- Esdrújulas en -go -co, plural sin h. REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or try(p, "", "NO", "NO", "logia", "logie", g, nil) or try(p, "", "o", "i", "a", "e", g, nil) or try(p, "", "o", "i", "o", "e", g, nil) or try(p, "", "a", "i", "a", "e", g, nil) or try(p, "", "e", "i", "e", "i", g, nil) or try(p, "[àù]", "", nil, "", nil, g, nil) or try(p, C, "", nil, "", nil, g, nil) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = flexionar_palabra(a, g, h) local flex2 = copulativa and flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export p98m8axiub1dnjddicqqfn4wr5pujca 5823382 5823381 2025-07-03T01:29:59Z Tmagc 158167 5823382 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end local function try(p, nexo, m, pl, f, fpl, g, h) if h == true and not strfind(pl, "^h") then pl = "h"..pl fpl = "h"..fpl elseif h == false and strfind(pl, "^h") then pl = substr(pl, 2) fpl = substr(fpl, 2) end if g == "m" or g == "mf" then local r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then if not pl then return {{r.."~"..n..m.."~"}} elseif g == "mf" then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}} end end else -- g == "f" local r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if not fpl then return {{r.."~"..n..f.."~"}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, nil) or try(p, "log", "o", "hi", "a", "he", g, nil) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- Llanas en -go -co, plural con h https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- Esdrújulas en -go -co, plural sin h. REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or try(p, "", "NO", "NO", "logia", "logie", g, nil) or try(p, "", "o", "i", "a", "e", g, nil) or try(p, "", "o", "i", "o", "e", g, nil) or try(p, "", "a", "i", "a", "e", g, nil) or try(p, "", "e", "i", "e", "i", g, nil) or try(p, "[àù]", "", nil, "", nil, g, nil) or try(p, C, "", nil, "", nil, g, nil) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = flexionar_palabra(a, g, h) local flex2 = copulativa and flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export 1bu857fpw991wmjptgusd8phmw4pz4j 5823387 5823382 2025-07-03T01:52:36Z Tmagc 158167 5823387 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end local function try(p, nexo, m, pl, f, fpl, g, h) if h == true and not strfind(pl, "^h") then pl = "h"..pl fpl = "h"..fpl elseif h == false and strfind(pl, "^h") then pl = substr(pl, 2) fpl = substr(fpl, 2) end if g == "m" or g == "mf" then local r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then if not pl then return {{r.."~"..n..m.."~"}} elseif g == "mf" then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}} end end else -- g == "f" local r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if not fpl then return {{r.."~"..n..f.."~"}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, nil) or try(p, "log", "o", "hi", "a", "he", g, nil) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- Llanas en -go -co, plural con h https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- Esdrújulas en -go -co, plural sin h. REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or try(p, "", "NO", "NO", "logia", "logie", g, nil) or try(p, "", "o", "i", "a", "e", g, nil) or try(p, "", "o", "i", "o", "e", g, nil) or try(p, "", "a", "i", "a", "e", g, nil) or try(p, "", "e", "i", "e", "i", g, nil) or try(p, "[àù]", "", nil, "", nil, g, nil) or try(p, C, "", nil, "", nil, g, nil) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = flexionar_palabra(a, g, h) local flex2 = copulativa and flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) error(type(flex)) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export mglbx6dogtvtd4dl8eu4kj2htr5tm8z 5823391 5823387 2025-07-03T02:02:35Z Tmagc 158167 5823391 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end local function try(p, nexo, m, pl, f, fpl, g, h) if h == true and not strfind(pl, "^h") then pl = "h"..pl fpl = "h"..fpl elseif h == false and strfind(pl, "^h") then pl = substr(pl, 2) fpl = substr(fpl, 2) end if g == "m" or g == "mf" then local r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then if not pl then return {{r.."~"..n..m.."~"}, {}, {}, {}} elseif g == "mf" then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {}, {}} end end else -- g == "f" local r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if not fpl then return {{r.."~"..n..f.."~"}, {}, {}, {}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}, {}, {}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, nil) or try(p, "log", "o", "hi", "a", "he", g, nil) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- Llanas en -go -co, plural con h https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- Esdrújulas en -go -co, plural sin h. REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or try(p, "", "NO", "NO", "logia", "logie", g, nil) or try(p, "", "o", "i", "a", "e", g, nil) or try(p, "", "o", "i", "o", "e", g, nil) or try(p, "", "a", "i", "a", "e", g, nil) or try(p, "", "e", "i", "e", "i", g, nil) or try(p, "[àù]", "", nil, "", nil, g, nil) or try(p, C, "", nil, "", nil, g, nil) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = flexionar_palabra(a, g, h) local flex2 = copulativa and flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) error(type(flex)) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export 7wlywla4dp7ka08yvnpx4hhsstdw1gg 5823392 5823391 2025-07-03T02:02:54Z Tmagc 158167 5823392 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end local function try(p, nexo, m, pl, f, fpl, g, h) if h == true and not strfind(pl, "^h") then pl = "h"..pl fpl = "h"..fpl elseif h == false and strfind(pl, "^h") then pl = substr(pl, 2) fpl = substr(fpl, 2) end if g == "m" or g == "mf" then local r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then if not pl then return {{r.."~"..n..m.."~"}, {}, {}, {}} elseif g == "mf" then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {}, {}} end end else -- g == "f" local r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if not fpl then return {{r.."~"..n..f.."~"}, {}, {}, {}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}, {}, {}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, nil) or try(p, "log", "o", "hi", "a", "he", g, nil) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- Llanas en -go -co, plural con h https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- Esdrújulas en -go -co, plural sin h. REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or try(p, "", "NO", "NO", "logia", "logie", g, nil) or try(p, "", "o", "i", "a", "e", g, nil) or try(p, "", "o", "i", "o", "e", g, nil) or try(p, "", "a", "i", "a", "e", g, nil) or try(p, "", "e", "i", "e", "i", g, nil) or try(p, "[àù]", "", nil, "", nil, g, nil) or try(p, C, "", nil, "", nil, g, nil) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = flexionar_palabra(a, g, h) local flex2 = copulativa and flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export 93qr5ar1u5jhykch34s7r91o161phdg 5823395 5823392 2025-07-03T02:08:57Z Tmagc 158167 5823395 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end local function try(p, nexo, m, pl, f, fpl, g, h) if h == true and not strfind(pl, "^h") then pl = "h"..pl fpl = "h"..fpl elseif h == false and strfind(pl, "^h") then pl = substr(pl, 2) fpl = substr(fpl, 2) end if g == "m" or g == "mf" then local r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") error(n) if n then if not pl then return {{r.."~"..n..m.."~"}, {}, {}, {}} elseif g == "mf" then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {}, {}} end end else -- g == "f" local r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if not fpl then return {{r.."~"..n..f.."~"}, {}, {}, {}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}, {}, {}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, nil) or try(p, "log", "o", "hi", "a", "he", g, nil) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- Llanas en -go -co, plural con h https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- Esdrújulas en -go -co, plural sin h. REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or try(p, "", "NO", "NO", "logia", "logie", g, nil) or try(p, "", "o", "i", "a", "e", g, nil) or try(p, "", "o", "i", "o", "e", g, nil) or try(p, "", "a", "i", "a", "e", g, nil) or try(p, "", "e", "i", "e", "i", g, nil) or try(p, "[àù]", "", nil, "", nil, g, nil) or try(p, C, "", nil, "", nil, g, nil) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = flexionar_palabra(a, g, h) local flex2 = copulativa and flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export ddh2l90j9y5qyynmhd3in0sp749hbm2 5823396 5823395 2025-07-03T02:09:35Z Tmagc 158167 5823396 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end local function try(p, nexo, m, pl, f, fpl, g, h) if h == true and not strfind(pl, "^h") then pl = "h"..pl fpl = "h"..fpl elseif h == false and strfind(pl, "^h") then pl = substr(pl, 2) fpl = substr(fpl, 2) end if g == "m" or g == "mf" then local r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") error(tostring(n)) if n then if not pl then return {{r.."~"..n..m.."~"}, {}, {}, {}} elseif g == "mf" then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {}, {}} end end else -- g == "f" local r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if not fpl then return {{r.."~"..n..f.."~"}, {}, {}, {}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}, {}, {}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, nil) or try(p, "log", "o", "hi", "a", "he", g, nil) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- Llanas en -go -co, plural con h https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- Esdrújulas en -go -co, plural sin h. REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or try(p, "", "NO", "NO", "logia", "logie", g, nil) or try(p, "", "o", "i", "a", "e", g, nil) or try(p, "", "o", "i", "o", "e", g, nil) or try(p, "", "a", "i", "a", "e", g, nil) or try(p, "", "e", "i", "e", "i", g, nil) or try(p, "[àù]", "", nil, "", nil, g, nil) or try(p, C, "", nil, "", nil, g, nil) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = flexionar_palabra(a, g, h) local flex2 = copulativa and flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export o9fm37q1o6tyk6jxpikt0zjrudb89aa 5823397 5823396 2025-07-03T02:10:21Z Tmagc 158167 5823397 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end local function try(p, nexo, m, pl, f, fpl, g, h) if h == true and not strfind(pl, "^h") then pl = "h"..pl fpl = "h"..fpl elseif h == false and strfind(pl, "^h") then pl = substr(pl, 2) fpl = substr(fpl, 2) end if g == "m" or g == "mf" then local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then if not pl then return {{r.."~"..n..m.."~"}, {}, {}, {}} elseif g == "mf" then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {}, {}} end end else -- g == "f" local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if not fpl then return {{r.."~"..n..f.."~"}, {}, {}, {}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}, {}, {}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, nil) or try(p, "log", "o", "hi", "a", "he", g, nil) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- Llanas en -go -co, plural con h https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- Esdrújulas en -go -co, plural sin h. REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or try(p, "", "NO", "NO", "logia", "logie", g, nil) or try(p, "", "o", "i", "a", "e", g, nil) or try(p, "", "o", "i", "o", "e", g, nil) or try(p, "", "a", "i", "a", "e", g, nil) or try(p, "", "e", "i", "e", "i", g, nil) or try(p, "[àù]", "", nil, "", nil, g, nil) or try(p, C, "", nil, "", nil, g, nil) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = flexionar_palabra(a, g, h) local flex2 = copulativa and flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export r5v886yuw5cwd36wup2m75nkg476eh0 5823398 5823397 2025-07-03T02:16:17Z Tmagc 158167 5823398 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end local function try(p, nexo, m, pl, f, fpl, g, h) if h == true and not strfind(pl, "^h") then pl = "h"..pl fpl = "h"..fpl elseif h == false and strfind(pl, "^h") then pl = substr(pl, 2) fpl = substr(fpl, 2) end if g == "m" or g == "mf" then local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then error(type(n)) if not pl then return {{r.."~"..n..m.."~"}, {}, {}, {}} elseif g == "mf" then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {}, {}} end end else -- g == "f" local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if not fpl then return {{r.."~"..n..f.."~"}, {}, {}, {}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}, {}, {}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, nil) or try(p, "log", "o", "hi", "a", "he", g, nil) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- Llanas en -go -co, plural con h https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- Esdrújulas en -go -co, plural sin h. REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or try(p, "", "NO", "NO", "logia", "logie", g, nil) or try(p, "", "o", "i", "a", "e", g, nil) or try(p, "", "o", "i", "o", "e", g, nil) or try(p, "", "a", "i", "a", "e", g, nil) or try(p, "", "e", "i", "e", "i", g, nil) or try(p, "[àù]", "", nil, "", nil, g, nil) or try(p, C, "", nil, "", nil, g, nil) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = flexionar_palabra(a, g, h) local flex2 = copulativa and flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export ce2l0tcbi314h43ceteb2cajxsfbdl7 5823399 5823398 2025-07-03T02:17:05Z Tmagc 158167 5823399 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end local function try(p, nexo, m, pl, f, fpl, g, h) if h == true and not strfind(pl, "^h") then pl = "h"..pl fpl = "h"..fpl elseif h == false and strfind(pl, "^h") then pl = substr(pl, 2) fpl = substr(fpl, 2) end if g == "m" or g == "mf" then local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then if type(n) ~= "string" then n = "" end if not pl then return {{r.."~"..n..m.."~"}, {}, {}, {}} elseif g == "mf" then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {}, {}} end end else -- g == "f" local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if type(n) ~= "string" then n = "" end if not fpl then return {{r.."~"..n..f.."~"}, {}, {}, {}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}, {}, {}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, nil) or try(p, "log", "o", "hi", "a", "he", g, nil) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- Llanas en -go -co, plural con h https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- Esdrújulas en -go -co, plural sin h. REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or try(p, "", "NO", "NO", "logia", "logie", g, nil) or try(p, "", "o", "i", "a", "e", g, nil) or try(p, "", "o", "i", "o", "e", g, nil) or try(p, "", "a", "i", "a", "e", g, nil) or try(p, "", "e", "i", "e", "i", g, nil) or try(p, "[àù]", "", nil, "", nil, g, nil) or try(p, C, "", nil, "", nil, g, nil) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = flexionar_palabra(a, g, h) local flex2 = copulativa and flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export 6ba1nw94oxhsf4oobsh7su9b5cjqfte 5823446 5823399 2025-07-03T03:10:47Z Tmagc 158167 5823446 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end local function try(p, nexo, m, pl, f, fpl, g, h) if h == true and not strfind(pl, "^h") then pl = "h"..pl fpl = "h"..fpl elseif h == false and strfind(pl, "^h") then pl = substr(pl, 2) fpl = substr(fpl, 2) end if g == "m" or g == "mf" then local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then if type(n) ~= "string" then n = "" end if not pl then return {{r.."~"..n..m.."~"}, {}, {}, {}} elseif g == "mf" then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {}, {}} end end else -- g == "f" local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if type(n) ~= "string" then n = "" end if not fpl then return {{r.."~"..n..f.."~"}, {}, {}, {}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}, {}, {}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, nil) or try(p, "log", "o", "hi", "a", "he", g, nil) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- Llanas en -go -co, plural con h https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- Esdrújulas en -go -co, plural sin h. REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or try(p, "", "NO", "NO", "logia", "logie", g, nil) or try(p, "", "tore", "tori", "trice", "trici", g, nil) or try(p, "", "o", "i", "a", "e", g, nil) or try(p, "", "o", "i", "o", "e", g, nil) or try(p, "", "a", "i", "a", "e", g, nil) or try(p, "", "e", "i", "e", "i", g, nil) or try(p, "[àù]", "", nil, "", nil, g, nil) or try(p, C, "", nil, "", nil, g, nil) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = flexionar_palabra(a, g, h) local flex2 = copulativa and flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export 8k1m5z6l6elprzz4j93bnwrhliitkjv 5823491 5823446 2025-07-03T04:16:29Z Tmagc 158167 5823491 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end local function try(p, nexo, m, pl, f, fpl, g, h) if h == true and not strfind(pl, "^h") then pl = "h"..pl fpl = "h"..fpl elseif h == false and strfind(pl, "^h") then pl = substr(pl, 2) fpl = substr(fpl, 2) end if g == "m" or g == "mf" then local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then if type(n) ~= "string" then n = "" end if not pl then return {{r.."~"..n..m.."~"}, {}, {}, {}} elseif g == "mf" and (f ~= m or fpl ~= pl) then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {}, {}} end end else -- g == "f" local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if type(n) ~= "string" then n = "" end if not fpl then return {{r.."~"..n..f.."~"}, {}, {}, {}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}, {}, {}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, nil) or try(p, "log", "o", "hi", "a", "he", g, nil) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- Llanas en -go -co, plural con h https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- Esdrújulas en -go -co, plural sin h. REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or try(p, "", "NO", "NO", "logia", "logie", g, nil) or try(p, "", "tore", "tori", "trice", "trici", g, nil) or try(p, "", "o", "i", "a", "e", g, nil) or try(p, "", "o", "i", "o", "e", g, nil) or try(p, "", "a", "i", "a", "e", g, nil) or try(p, "", "e", "i", "e", "i", g, nil) or try(p, "[àù]", "", nil, "", nil, g, nil) or try(p, C, "", nil, "", nil, g, nil) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = flexionar_palabra(a, g, h) local flex2 = copulativa and flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export mg7w8eghnmvkkkkqlbr7vexkizdxg39 5823502 5823491 2025-07-03T04:54:41Z Tmagc 158167 5823502 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end local function try(p, nexo, m, pl, f, fpl, g, h) if h == true and not strfind(pl, "^h") then pl = "h"..pl fpl = "h"..fpl elseif h == false and strfind(pl, "^h") then pl = substr(pl, 2) fpl = substr(fpl, 2) end if g == "m" or g == "mf" then local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then if type(n) ~= "string" then n = "" end if not pl then return {{r.."~"..n..m.."~"}, {}, {}, {}} elseif g == "mf" and (f ~= m or fpl ~= pl) then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {}, {}} end end else -- g == "f" local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if type(n) ~= "string" then n = "" end if not fpl then return {{r.."~"..n..f.."~"}, {}, {}, {}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}, {}, {}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, nil) or try(p, "log", "o", "hi", "a", "he", g, nil) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- Llanas en -go -co, plural con h https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- Esdrújulas en -go -co, plural sin h. REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or try(p, "", "NO", "NO", "logia", "logie", g, nil) or try(p, "", "tore", "tori", "trice", "trici", g, nil) or try(p, "", "o", "i", "a", "e", g, nil) or try(p, "", "o", "i", "o", "e", g, nil) or try(p, "", "a", "i", "a", "e", g, nil) or try(p, "", "e", "i", "e", "i", g, nil) or try(p, "[àù]", "", nil, "", nil, g, nil) or try(p, C, "", nil, "", nil, g, nil) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = flexionar_palabra(a, g, h) local flex2 = copulativa and flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["mpl"] = {alias_de = "p"}, ["pl"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["fem"] = {alias_de = "f"}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["fempl"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["mpl"] = {alias_de = "p"}, ["pl"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["fem"] = {alias_de = "f"}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["fempl"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export hy62h3gmbkh0ojafi7746nyq1i6a6ky 5823504 5823502 2025-07-03T05:03:34Z Tmagc 158167 5823504 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end local function try(p, nexo, m, pl, f, fpl, g, h) if h == true and not strfind(pl, "^h") then pl = "h"..pl fpl = "h"..fpl elseif h == false and strfind(pl, "^h") then pl = substr(pl, 2) fpl = substr(fpl, 2) end if g == "m" or g == "mf" then local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then if type(n) ~= "string" then n = "" end if not pl then return {{r.."~"..n..m.."~"}, {}, {}, {}} elseif g == "mf" and (f ~= m or fpl ~= pl) then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {}, {}} end end else -- g == "f" local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if type(n) ~= "string" then n = "" end if not fpl then return {{r.."~"..n..f.."~"}, {}, {}, {}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}, {}, {}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, nil) or try(p, "log", "o", "hi", "a", "he", g, nil) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- Llanas en -go -co, plural con h https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- Esdrújulas en -go -co, plural sin h. REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or try(p, "", "NO", "NO", "logia", "logie", g, nil) or try(p, "", "tore", "tori", "trice", "trici", g, nil) or try(p, "", "o", "i", "a", "e", g, nil) or try(p, "", "o", "i", "o", "e", g, nil) or try(p, "", "a", "i", "a", "e", g, nil) or try(p, "", "e", "i", "e", "i", g, nil) or try(p, "[àù]", "", nil, "", nil, g, nil) or try(p, C, "", nil, "", nil, g, nil) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = flexionar_palabra(a, g, h) local flex2 = copulativa and flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["mpl"] = {alias_de = "p"}, ["pl"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["fem"] = {alias_de = "f"}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["fempl"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if not args["g"] then error("Especifique el género del sustantivo: m (masculino), f (femenino) o mf (ambos)") end return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["mpl"] = {alias_de = "p"}, ["pl"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["fem"] = {alias_de = "f"}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["fempl"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export jgeatj3ohbglsdudtdsnr62libun5gx 5823506 5823504 2025-07-03T05:07:05Z Tmagc 158167 5823506 Scribunto text/plain -- Módulo para flexión de sustantivos, adjetivos y verbos -- Autor: Tmagc local export = {} local unpack = unpack or table.unpack local insert = table.insert local concat = table.concat local m_str = require("Módulo:String") local u = m_str.char local strfind = m_str.find local strsubn = m_str.gsub local strsubb = m_str.gsubb local strmatch = m_str.match local strcount = m_str.count local strlen = m_str.ulen local strlower = m_str.lower local substr = m_str.sub local strsplit = m_str.split local function strsub(s, a, b) local x, _ = strsubn(s, a, b) return x end local vocal = "aeiouAEIOU" local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ" local vocales = vocal .. vocal_tildada local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ" local V = "[" .. vocales .. "]" local C = "[" .. consonantes .. "]" local LETRA = "[" .. vocales .. consonantes .. "]" local espacios = "%-‐%s" local ESPACIO = "["..espacios.."]" local NO_ESPACIO = "[^"..espacios.."]" local function f_links(v) v = strsubn(v, "(%S+)", function(m) local nota = strmatch(m, "{([^}]+)}") if nota then m = strsubn(m, "{([^}]+)}", "") end local a = strsubn(m, "[~#]", "") local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") -- por las dudas si hay símbolos que abarquen varias palabras: ej: [[community manager]] -> communit#y managers# (piensa q el plural regular es communities managers), no se puede procesar a = strsubn(a, "[~#{}]", "") b = strsubn(b, "[~#{}]", "") return "[["..a.."|"..b.."]]"..(nota and "<sup>"..nota.."</sup>" or "") end) return v end local function f(v) v = strsubn(v, "(%S+)", function(m) local b = strsubn(m, "##", "") b = strsubn(b, "~~", "") b = strsubn(b, "{([^}]+)}", "<sup>%1</sup>") b = strsubn(b, "#(.-)#", "<span style='color:DarkGoldenrod; font-weight: bold;'>%1</span>") b = strsubn(b, "~(.-)~", "<span style='color:Green; font-weight: bold;'>%1</span>") b = strsubn(b, "[~#{}]", "") -- por las dudas return b end) return v end local function parsear_arreglo(st) st = strsubn(st, "%[", "{") st = strsubn(st, "%]", "}") return strsplit(st, "%s*;%s*") end local function parsear_arreglo_doble(a) local b = {} for i = 1,6 do -- no uso ipairs porque puede haber huecos b[i] = a[i] and parsear_arreglo(a[i]) or {} end return b end local function comprobar_defectivo(a, defectivo) if defectivo then return true end if type(a) == "string" then if (strfind(a, "^%s*no%s*$") or strfind(a, "[^a-zA-ZÀ-ž;:,%.%{%}%[%]%(%)%s]")) then return true end elseif type(a) == "table" then for i=1,6 do -- no uso ipairs porque puede haber huecos if a[i] and (strfind(a[i], "^%s*no%s*$") or strfind(a[i], "[^a-zA-ZÀ-ž;:,%.%s]")) then return true end end end return false end local function combinar_arreglo(destino, origen) local N = #destino for _, o in ipairs(origen) do local insertar = true for _, d in ipairs(destino) do if o == d then insertar = false break end end if insertar then N = N + 1 destino[N] = o end end end local function combinar_arreglo_doble(destino, origen) for i, d in ipairs(destino) do combinar_arreglo(d, origen[i]) end end local function producto_cartesiano(a, b, separador) local c = {} for i,ai in ipairs(a) do c[i] = {} for j,aij in ipairs(ai) do for k,bik in ipairs(b[i]) do insert(c[i], aij..separador..bik) end end end return c end local function esta_en_lista(elem, lista) for _, v in ipairs(lista) do if v == elem then return true end end return false end local function lcs(s, t) local j = 0 for i = 1, #s do if substr(s, i, i) ~= substr(t, i, i) then break end j = j+1 end return substr(t, 1, j), substr(t, j+1) end local function comparar_arreglos(a, b) local irreg if not a or not b then return nil end for i, q in pairs(b) do if type(i) == "number" and type(q) == "string" then if not a[i] then a[i] = "#"..q.."#" irreg = true else local p = strsubn(a[i], "[~#]", "") if p ~= q then local x, y = lcs(p, q) a[i] = x.."#"..y.."#" irreg = true end end end end return irreg end local function arrtit2str(a, tit) if not a[1] then return "" end local t = {} for _,el in ipairs(a) do insert(t, f_links(el)) end return (tit and tit..": " or "")..concat(t, ", ") end local function try(p, nexo, m, pl, f, fpl, g, h) if h == true and not strfind(pl, "^h") then pl = "h"..pl fpl = "h"..fpl elseif h == false and strfind(pl, "^h") then pl = substr(pl, 2) fpl = substr(fpl, 2) end if g == "m" or g == "mf" then local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..m.."$") if n then if type(n) ~= "string" then n = "" end if not pl then return {{r.."~"..n..m.."~"}, {}, {}, {}} elseif g == "mf" and (f ~= m or fpl ~= pl) then return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}} else -- g == m return {{r.."~"..n..m.."~"}, {r.."~"..n..pl.."~"}, {}, {}} end end else -- g == "f" local r, n r, n = strmatch(p, "^(.-)("..nexo..")"..f.."$") if n then if type(n) ~= "string" then n = "" end if not fpl then return {{r.."~"..n..f.."~"}, {}, {}, {}} else return {{r.."~"..n..f.."~"}, {r.."~"..n..fpl.."~"}, {}, {}} end end end return nil end local function flexionar_palabra(p, g, h) local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble try(p, "i", "o", "", "a", "e", g, nil) or try(p, "log", "o", "hi", "a", "he", g, nil) or try(p, "[ia]c", "o", "i", "a", "he", g, h) or try(p, "[^"..vocal_tildada.."]*[cg]", "o", "hi", "a", "he", g, h) or -- Llanas en -go -co, plural con h https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/ try(p, "[cg]", "o", "i", "a", "e", g, h) or -- Esdrújulas en -go -co, plural sin h. REVISAR: hay un grupo de palabras que forman el plural con -i y no con -hi try(p, "[cg]", "a", "hi", "a", "he", g, h) or -- REVISAR: las palabras masculinas terminadas en a forman plural con -hi try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or -- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or try(p, "", "NO", "NO", "logia", "logie", g, nil) or try(p, "", "tore", "tori", "trice", "trici", g, nil) or try(p, "", "o", "i", "a", "e", g, nil) or try(p, "", "o", "i", "o", "e", g, nil) or try(p, "", "a", "i", "a", "e", g, nil) or try(p, "", "e", "i", "e", "i", g, nil) or try(p, "[àù]", "", nil, "", nil, g, nil) or try(p, C, "", nil, "", nil, g, nil) assert(changed, "No se pudo determinar la flexión de la palabra") return changed end function export.flexion_sust_adj(palabras, g, h, copulativa) local a, separador, b = strmatch(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$") if b then if copulativa == nil then error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"") end local flex1 = flexionar_palabra(a, g, h) local flex2 = copulativa and flexionar_palabra(b, g, h) or {{b}, {b}, {b}, {b}} -- si es invariante, necesito copiar el singular en el plural para que genere correctamente las combinaciones (ver [[deíxis catafórica]]) if #flex1[2] == 0 and #flex1[1] > 0 then flex1[2] = flex1[1] end if #flex1[4] == 0 and #flex1[3] > 0 then flex1[4] = flex1[3] end if #flex2[2] == 0 and #flex2[1] > 0 then flex2[2] = flex2[1] end if #flex2[4] == 0 and #flex2[3] > 0 then flex2[4] = flex2[3] end return producto_cartesiano(flex1, flex2, separador) elseif copulativa == true then error("Solo se admiten estructuras copulativas de exactamente dos palabras") end -- sino, flexiono solo la primera palabra local p, resto = strmatch(palabras, "^(%S+)(.-)$") local flex = flexionar_palabra(p, g, h) for i = 1, #flex do for j = 1, #flex[i] do flex[i][j] = flex[i][j]..resto end end return flex end local function formatear_sust_adj(title, args, frame) local modo = args[1] args["p"][1] = args["p"][1] or args[2] args["f"][1] = args["f"][1] or args[3] args["fp"][1] = args["fp"][1] or args[4] local enc if modo then if strfind(modo, "^inv") then enc = "invariante" elseif substr(modo, 1, 1) == "s" then enc = "singularia tantum" elseif substr(modo, 1, 1) == "p" then enc = "pluralia tantum" end if enc then return "'''"..(args["alt"] or title).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "").." (''"..enc.."'')" end end local cop -- = modo == "irreg" and false or args["cop"] falla... if modo == "irreg" then cop = false else cop = args["cop"] end local flex = export.flexion_sust_adj(title, modo, args["h"], cop) local i1 = comparar_arreglos(flex[2], args["p"]) local i2 = comparar_arreglos(flex[3], args["f"]) local i3 = comparar_arreglos(flex[4], args["fp"]) if modo and substr(modo, 1, 1) == "n" then flex[3] = {} flex[4] = {} enc = "sin género" elseif (not flex[3][1] and not flex[4][1] and modo == "mf") then enc = "sin género" elseif not flex[2][1] and not flex[3][1] and not flex[4][1] then enc = "invariante" elseif i1 or i2 or i3 then enc = f("#irregular#") elseif strfind(title, LETRA..ESPACIO..LETRA) then enc = args["cop"] and "copulativa" or "no copulativa" end local t = {} insert(t, "'''"..(args["alt"] or f(flex[1][1])).."'''"..(args["n"] and frame:extensionTag("ref", args["n"]) or "")..(enc and " (''"..enc.."'')" or "")) if flex[2][1] then insert(t, arrtit2str(flex[2], "plural")) end if flex[3][1] then insert(t, arrtit2str(flex[3], "femenino")) end if flex[4][1] then insert(t, arrtit2str(flex[4], "femenino plural")) end if args["comp"][1] then insert(t, arrtit2str(args["comp"], "comparativo")) end if args["sup"][1] then insert(t, arrtit2str(args["sup"], "superlativo")) end return concat(t, "&ensp;¦&ensp;") end function export.sust(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["mpl"] = {alias_de = "p"}, ["pl"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["fem"] = {alias_de = "f"}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["fempl"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) local valido = { ["m"] = true, ["f"] = true, ["mf"] = true, ["n"] = true, ["ng"] = true, ["inv"] = true, ["s"] = true, ["p"] = true } assert(valido[args[1]], "Especifique el género del sustantivo en el primer parámetro: m, f, mf, ng, inv, s, p") return formatear_sust_adj(title, args, frame) end function export.adj(frame) local title_ = mw.title.getCurrentTitle() local title = title_.fullText local params = { ["alt"] = {}, ["h"] = {tipo = "bool"}, ["p"] = {lista = true}, ["mp"] = {alias_de = "p"}, ["mpl"] = {alias_de = "p"}, ["pl"] = {alias_de = "p"}, ["plural"] = {alias_de = "p"}, ["masculinoplural"] = {alias_de = "p"}, ["f"] = {lista = true}, ["fem"] = {alias_de = "f"}, ["femenino"] = {alias_de = "f"}, ["fp"] = {lista = true}, ["femeninoplural"] = {alias_de = "fp"}, ["fempl"] = {alias_de = "fp"}, ["n"] = {}, ["nota"] = {alias_de = "n"}, ["comp"] = {lista = true}, ["comparativo"] = {alias_de = "comp"}, ["sup"] = {lista = true}, ["superlativo"] = {alias_de = "sup"}, ["cop"] = {tipo = "bool"}, ["copulativa"] = {alias_de = "cop"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) args[1] = args[1] or "mf" return formatear_sust_adj(title, args, frame) end local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6 local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"} local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"} local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"} local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"} local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"} local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"} local function obtener_pronombre(p, conj, impers) if impers then if strfind(conj, "^subj") then return IMPERSONALES_SUBJ[p] end return IMPERSONALES[p] else if strfind(conj, "^subj") then return PRONOMBRES_SUBJ[p] elseif strfind(conj, "^imper") then return PRONOMBRES_IMP[p] end return PRONOMBRES[p] end end local sufijos = { ["are"] = { ["ger"] = {"ando"}, ["part"] = {"ato"}, ["part_pres"] = {"ante"}, ["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"}, ["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"}, ["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["fut_alt"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"}, ["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"}, ["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"}, ["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["cond_alt"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"}, ["imper"] = {"-", "a", "i", "iamo", "ate", "ino"} }, ["ere"] = { ["ger"] = {"endo"}, ["part"] = {"uto"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"}, ["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"}, ["perf"] = {"ei", "esti", "é", "emmo", "este", "erono", "etti", nil, "ette", nil, nil, "ettero"}, ["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"}, ["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"}, ["imper"] = {"-", "i", "á", "iamo", "ete", "ano"} }, ["ire"] = { ["ger"] = {"endo"}, ["part"] = {"ito"}, ["part_pres"] = {"ente"}, ["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"}, ["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"}, ["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"}, ["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"}, ["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"}, ["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"}, ["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"}, ["imper"] = {"-", "i", "a", "iamo", "ite", "ano"} }, ["orre"] = { ["ger"] = {"onendo"}, ["part"] = {"osto"}, ["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"}, ["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"}, ["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"}, ["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"}, ["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"}, ["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"}, ["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"}, ["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"} }, ["urre"] = { ["ger"] = {"ucendo"}, ["part"] = {"otto"}, ["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"}, ["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"}, ["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"}, ["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"}, ["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"}, ["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"}, ["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"}, ["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"} } } local auxiliar = { ["essere"] = { ["inf_comp"] = {"essere"}, ["ger_comp"] = {"essendo"}, ["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"}, ["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"}, ["ind_anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"}, ["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"}, ["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"}, ["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"}, ["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"}, }, ["avere"] = { ["inf_comp"] = {"avere"}, ["ger_comp"] = {"avendo"}, ["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"}, ["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"}, ["ind_anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"}, ["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"}, ["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"}, ["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"}, ["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"}, } } local function combinar_nucleo_nexosufijo(nucleo, nexosufijo) return nucleo..nexosufijo end local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo) return prefijo..nucleonexosufijo end local function combinar_nexo_sufijo(nexo, sufijo) if not nexo then return sufijo end if nexo == "i" then if strfind(sufijo, "^i") then return sufijo end elseif nexo == "c" then if strfind(sufijo, "^[ei]") then return "ch"..sufijo end elseif nexo == "g" then if strfind(sufijo, "^[ei]") then return "gh"..sufijo end elseif nexo == "ci" then if strfind(sufijo, "^[ei]") then return "c"..sufijo end elseif nexo == "gi" then if strfind(sufijo, "^[ei]") then return "g"..sufijo end elseif nexo == "C" then if strfind(sufijo, "^[aou]") then return "ci"..sufijo else return "c"..sufijo end end return nexo .. sufijo end local paradigmas_regulares = { ["are"] = { {"bruciare", {"ciare$"}, { nexo = "ci" }}, {"galleggiare", {"giare$"}, { nexo = "gi" }}, {"asciugare", {"gare$"}, { nexo = "g" }}, {"giocare", {"care$"}, { nexo = "c" }}, {"abbaiare", {"abbaiare$"}, { nexo = "i" }}, {"avviare", {"avviare$"}, { }}, {"amare", {"are$"}, { }}, }, ["ere"] = { {"temere", {"ere$"}, { }}, }, ["ire"] = { {"cucire", {"cire$"}, { nexo = "C" }}, {"partire", {"ire$"}, { }}, {"finire", {"ire$"}, { inco = 1, }}, }, ["orre"] = { {"porre", {"orre$"}, { }}, }, ["urre"] = { {"condurre", {"urre$"}, { }}, } } local paradigmas_irregulares = { ["are"] = { {"andare", {"andare$"}, { -- andare, riandare, trasandare ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}}, nucleofut = {"andr"}, subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}, imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}} }}, {"dare", {"dare$"}, { -- dare, addare, ridare, starsi ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}}, perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}}, subj_imp = {sufijos = {"sub_imp_alt"}}, imper = {nil, {"dai", "da'", "dà{†}"}} }}, {"stare", {"stare$"}, { ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}}, perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}}, fut = {sufijos = {"fut_alt"}}, cond = {sufijos = {"cond_alt"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, {"disfare", {"disfare$"}, { ind_pres = {{"disfaccio", "disfo"}, {"disfi", "disfai"}, nil, {"disfacciamo", "disfiamo{x}"}, nil, {"disfano", "disfanno"}}, fut = {sufijos = {"fut_alt", "fut{x}"}}, cond = {sufijos = {"cond_alt", "cond{x}"}}, subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}}, imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}} }}, }, ["ere"] = { {"essere", {"essere$", "riessere$", "trasessere$"}, { nucleo = "ess", part_pres = {"REG{R}"}, ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}}, ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}}, perf = {{"fui"}, {"fosti"}, {"fu"}, {"fummo"}, {"foste"}, {"furono"}}, fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}}, cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}}, subj_ind = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}, subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}}, imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}} }}, {"avere", {"avere$", "riavere$"}, { nucleo = "av", part_pres = {"REG", "abbiente"}, ger_comp = {"avendo"}, ind_pres = {{"ho"}, {"hai"}, {"ha"}, {"abbiamo"}, {"avete"}, {"hanno"}}, ind_imp = {{"avevo"}, {"avevi"}, {"aveva"}, {"avevamo"}, {"avevate"}, {"avevano"}}, perf = {{"ebbi"}, {"avesti"}, {"ebbe"}, {"avemmo"}, {"aveste"}, {"ebbero"}}, fut = {{"avrò"}, {"avrai"}, {"avrà"}, {"avremo"}, {"avrete"}, {"avranno"}}, cond = {{"avrei"}, {"avresti"}, {"avrebbe"}, {"avremmo"}, {"avreste"}, {"avrebbero"}}, subj_ind = {{"abbia"}, {"abbia"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}}, subj_imp = {{"avessi"}, {"avessi"}, {"avesse"}, {"avessimo"}, {"aveste"}, {"avessero"}}, imper = {nil, {"abbi"}, {"abbia"}, {"abbiamo"}, {"abbiate"}, {"abbiano"}} }}, -- combere defectivo sin part {"piacere", {"acere$"}, { -- REVISAR ESTO nucleopres1 = {"acci"}, nucleopres2 = {"acci"}, nucleopret = {"acqu"}, }}, {"vincere", {"vincere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere altpret = {"s-t"}, }}, -- REVISAR cuocere {"cuocere", {"cuocere$"}, { nucleopres1 = {"cuoci"}, altpret = {"ss-tt"} }}, {"leggere", {"eggere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere altpret = {"ss-tt"} }}, {"nuocere", {"nuocere$"}, { -- REVISAR nucleopres1 = {"nocci", "nuocci"}, nucleopret = {"nocqu"}, ger = {"nuocendo", "nocendo{R}"}, part = {"nociuto", "nuociuto{R}"}, part_pres = {"nocente"}, }}, {"nascere", {"nascere$"}, { nucleopret = {"nacqu"}, part = {"nato"}, }}, {"crescere", {"crescere$"}, { -- tb noscere, pero no pascere, mescere altpret = {"bb"}, }}, -- lucere defectivo {"cadere", {"cadere$"}, { nucleopret = {"cadd"}, nucleofut = {"cadr"}, }}, {"adere", {"adere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere altpret = {"s-s"}, }}, {"scindere", {"scindere$"}, { -- affiggere, crocifiggere, infiggere, defiggere, prefiggere, sufiggere, cotere, cutere altpret = {"ss-ss"}, }}, -- REVISAR: succedere, concedere, retrocedere, perdere (paradigmas mixtos) {"chiedere", {"chiedere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere altpret = {"s-st"}, }}, -- credere regular {"possedere", {"possedere$"}, { -- REVISAR nucleopres1 = {"possied", "possegg"}, nucleopres2 = {"possied"}, nucleofut = {"possied", "possed"} }}, {"sedere", {"sedere$"}, { nucleopres1 = {"sied", "segg{†}", "siegg{†}"}, nucleofut = {"sied", "sed"}, }}, {"prevedere", {"prevedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"provedere", {"provedere$", "provvedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto{PART}", "visto{ADJ}"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"ravedere", {"^ravedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr", "veder"}, part_pres = {"REG", "veggente"}, }}, {"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"veduto"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, {"vedere", {"vedere$"}, { nucleo = "ved", nucleopret = {"vid"}, part = {"visto", "veduto{R}"}, nucleofut = {"vedr"}, part_pres = {"REG", "veggente"}, }}, -- stridere defectivo sin participio -- stridere defectivo {"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)? nucleopret = {"spans", "REG{R}"}, part = {"spanto", "spanso"}, }}, {"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc. part = {"REG", "fesso"}, }}, -- splendere defectivo sin participio --{"pendere", {"^pendere$"}, { -- part = {"REG{R}"}, --}}, {"propendere", {"propendere$"}, { part = {"propeso{R}"}, }}, --{"vendere", {"vendere$"}, { --}}, {"fondere", {"fondere$"}, { nucleopret = {"fus"}, part = {"fuso"}, }}, {"tondere", {"tondere$"}, { part = {"REG", "tonso"}, }}, {"godere", {"godere$"}, { nucleofut = {"godr"}, }}, {"plaudere", {"plaudere$"}, { -- REVISAR perf = {sufijos = {"ire"}}, part = {"plaudito"}, }}, {"prudere", {"prudere$"}, { nucleopret = {"REG{R}"}, part = {"no"}, }}, -- REVISAR: sigere, volgere, indulgere, fulgere, angere, spengere, mingere, stringere, ingere, fungere, ungere, spargere, ergere (mergere, spergere), tergere, convergere (divergere), orgere, sorgere, surgere {"redigere", {"redigere$"}, { nucleopret = {"redass"}, part = {"redatto"}, }}, -- REVISAR: estos son ss-tt pero alteran una vocal {"diligere", {"diligere$"}, { nucleopret = {"diless"}, part = {"diletto"}, }}, {"rigere", {"rigere$"}, { nucleopret = {"ress"}, part = {"retto"}, }}, {"sigere", {"sigere$"}, { -- esigere, transigere nucleopret = {"REG{R}"}, part = {"satto"}, }}, {"stringere", {"stringere$"}, { nucleopret = {"strins"}, part = {"stretto"}, }}, -- REVISAR --{"fungere", {"fungere$"}, { -- nucleopret = {"funs"}, -- part = {"funto{R}"}, --}}, -- REVISAR: esto no es -s-t, por qué?? {"ergere", {"^ergere$", "adergere$", "ridergere$"}, { nucleo = "erg", nucleopret = {"ers"}, part = {"erto"}, }}, -- REVISAR: convergere, divergere --{"urgere", {"urgere$"}, { -- nucleopret = {"-"}, -- part = {"-"}, --}}, {"adempiere", {"adempiere$"}, { -- REVISAR: adempiere, compiere, disimpeire ind_pres = {nil, nil, nil, nil, {"adempite"}, nil}, }}, {"empiere", {"empiere$"}, { -- REVISAR tb. riempiere perf = {sufijos = {"ire", "ere{R}"}}, }}, {"valere", {"valere$"}, { nucleopres1 = {"valg"}, altpret = {"s-s"}, nucleofut = {"varr"}, }}, {"pellere", {"pellere$", "avellere$"}, { nucleo = "elle", nucleopret = {"uls"}, part = {"ulso"}, }}, {"svellere", {"svellere$", "divellere$"}, { nucleo = "vell", nucleopres1 = {"REG", "velg"}, altpret = {"s-t"}, }}, {"dolere", {"dolere$"}, { nucleopres1 = {"dolg"}, nucleopres2 = {"duol"}, nucleopret = {"dols"}, nucleofut = {"dorr"}, }}, {"solere", {"solere$"}, { nucleopres1 = {"sogli-sogli"}, nucleopres2 = {"suol"}, nucleopret = {"REG{R}"}, part = {"solito"}, fut = {"no"}, imper = {"no"}, part_pres = {"no"}, }}, -- gemere, fremere, premere, temere los 4 regulares {"redimere", {"redimere$"}, { nucleopret = {"redens"}, part = {"redento"}, }}, {"perplimere", {"perplimere$"}, { part = {"perplesso", "perplimuto{R}"}, }}, -- REVISAR: dirimere, esimere (defectivos) {"primere", {"primere$"}, { nucleopret = {"press"}, part = {"presso"}, }}, {"sumere", {"sumere$"}, { nucleopret = {"suns"}, part = {"sunto"}, }}, {"rimanere", {"rimanere$"}, { nucleopres1 = {"rimang"}, nucleopret = {"rimas"}, part = {"rimasto"}, nucleofut = {"rimarr"}, }}, {"permanere", {"permanere$"}, { nucleopres1 = {"permang"}, nucleopret = {"permas"}, part = {"-"}, nucleofut = {"permarr"}, }}, {"tenere", {"tenere$"}, { nucleopres1 = {"teng"}, nucleopres2 = {"tien"}, nucleopret = {"tenni"}, nucleofut = {"terr"}, }}, {"spegnere", {"spegnere$"}, { nucleopres1 = {"speng"}, nucleopret = {"spens"}, part = {"spento"}, }}, {"cernere", {"^cernere$", "ricernere$"}, { nucleopret = {"no"}, part = {"cernito"}, }}, -- REVISAR: concernere, discernere, serpere {"secernere", {"secernere$"}, { part = {"secreto"}, }}, {"rompere", {"rompere$"}, { nucleopret = {"ruppi"}, part = {"rotto"}, }}, {"^parere", {"^parere$"}, { nucleopres1 = {"pai-pai"}, nucleopret = {"parv"}, nucleofut = {"parr"}, part = {"parso"}, ind_imp = {"no"}, part_pres = {"parvente"}, }}, {"correre", {"correre$"}, { nucleopret = {"cors"}, part = {"corso"}, }}, -- revisar tessere, mietere, ripetere, competere {"cuotere", {"cuotere$"}, { nucleopret = {"coss"}, part = {"cosso"}, }}, -- revisar vertere, controvertere {"estrovertere", {"estrovertere$"}, { nucleopret = {"no"}, part = {"estroverso", "estrovertito{R}"}, }}, {"introvertere", {"introvertere$"}, { nucleopret = {"no"}, part = {"introverso"}, }}, {"sistere", {"sistere$"}, { nucleopret = {"sistito"}, }}, -- rev battere -- rev flettere (mixto) {"mettere", {"mettere$"}, { nucleopret = {"misi"}, part = {"messo"}, }}, -- nettere mixto -- fottere -- ricevere {"convivere", {"convivere$", "sopravivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr", "REG"}, part = {"vissuto"}, }}, {"vivere", {"vivere$"}, { nucleo = "viv", nucleopret = {"viss"}, nucleofut = {"vivr"}, part = {"vissuto"}, }}, -- sciolvere mixto {"volvere", {"volvere$"}, { nucleopret = {"vols", "REG"}, part = {"voluto"}, }}, {"piovere", {"piovere$"}, { nucleopret = {"piovv"}, }}, {"commuovere", {"commuovere$"}, { nucleopret = {"commoss"}, part = {"commosso"}, }}, {"muovere", {"muovere$"}, { nucleopret = {"moss"}, part = {"mosso"}, }}, -- fervere defectivo {"ripetere", {"tere$"}, { perf = {ei = true}, }}, {"togliere", {"gliere$"}, { --scegliere nucleo = "gl", nucleopres1 = {"lg"}, nucleopret = {"ls"}, part = {"lto"}, }}, }, ["ire"] = { {"sorbire", {"sorbire$"}, { inco = {"1", "0{R}"}, }}, -- escire {"cucire", {"cucire$"}, { nucleopres1 = {"cuci"}, }}, {"sdrucire", {"sdrucire$"}, { inco = {"1", "0"}, }}, {"applaudire", {"applaudire$"}, { inco = {"0", "1{R}"}, }}, {"udire", {"^udire$", "riudire$", "traudire$"}, { nucleo = "ud", nucleofut = {"udr"}, }}, {"muggire", {"muggire$"}, { -- fuggire no es inco inco = {"1"}, }}, {"assalire", {"assalire$"}, { inco = {"0, 1{R}"} }}, {"salire", {"salire$"}, { nucleopres1 = {"salg"}, part_pres = {"saliente", "salente"}, }}, {"seppellire", {"seppellire$"}, { inco = {"1"}, part = {"sepolto", "REG"}, }}, {"sbollire", {"sbollire$"}, { inco = {"1", "0"} }}, {"dormire", {"dormire$"}, { part_pres = {"dormiente", "dormente"}, }}, {"venire", {"venire$"}, { nucleopres1 = {"veng"}, nucleopret = {"venn"}, -- REVISAR ESTO part = {"venuto"}, nucleofut = {"verr"}, part_pres = {"veniente"}, }}, {"empire", {"empire$"}, { perf = {sufijos = {"are", "ere"}}, -- REVISAR ESTO part = {"REG", "empiuto{R}"}, ger = {"empiendo"}, part_pres = {"empiente"}, }}, {"mpire", {"mpire$"}, { inco = {"1"}, ger = {"mpiendo"}, part_pres = {"mpiente"}, }}, {"^sparire", {"^sparire$"}, { inco = {"1"}, nucleopret = {"sparv", "spari{R}", "spars{R}"}, -- REVISAR ESTO part = {"sparso"}, }}, {"disparire", {"disparire$"}, { nucleopres1 = {"dispai"}, nucleopret = {"REG", "disparvi"}, }}, {"trasparire", {"trasparire$"}, { inco = {"0", "1"}, nucleopres1 = {"traspai"}, }}, {"parire", {"parire$"}, { inco = {"0", "1"}, nucleopres1 = {"pai"}, nucleopret = {"parv", "REG{R}", "pars{R}"}, -- REVISAR ESTO part = {"parso"}, }}, {"inferire", {"inferire$"}, { inco = {"1"}, nucleopret = {"infers"}, part = {"inferto"}, }}, {"profferire", {"profferire$"}, { inco = {"1"}, nucleopret = {"REG", "proffers"}, part = {"profferto"}, }}, {"offrire", {"offrire$"}, { nucleopret = {"REG", "offers{R}"}, part = {"offerto"}, part_pres = {"offerente"}, }}, {"morire", {"morire$"}, { -- REVISAR las lesser used forms nucleopres1 = {"muoio"}, nucleopres2 = {"muore"}, nucleopret = {"morto"}, nucleofut = {"REG", "morr"}, part_pres = {"morente", "moriente{†}"}, }}, {"aprire", {"aprire$"}, { nucleopret = {"REG", "apers"}, part = {"aperto"}, }}, {"coprire", {"coprire$"}, { nucleopret = {"REG", "copersi"}, part = {"coperto"}, }}, {"borrire", {"borrire$"}, { inco = {"1", "0"}, }}, {"nutrire", {"nutrire$"}, { inco = {"0", "1{R}"}, part_pres = {"nutriente"}, }}, {"^mentire", {"^mentire$"}, { inco = {"0", "1"}, }}, -- pentire y sentire sin participio presente {"presentire", {"presentire$"}, { inco = {"0", "1"}, part_pres = {"no"}, }}, {"sentire", {"sentire$"}, { part_pres = {"sentente{R}", "senziente{ADJ}"}, }}, {"inghiottire", {"inghiottire$"}, { inco = {"1{LIT}", "0{FIG}"}, }}, {"introvertire", {"introvertire$"}, { -- no va vertire inco = {"1"}, nucleopres1 = {"no"}, }}, {"compartire", {"compartire$"}, { inco = {"1", "0"}, }}, {"^sortire", {"^sortire$"}, { -- REVISAR ESTO }}, {"putire", {"putire$"}, { inco = {"1", "0"}, }}, {"languire", {"languire$"}, { inco = {"1", "0"}, }}, {"eseguire", {"eseguire$"}, { inco = {"1", "0"}, }}, }, } local function agregar_forma(arr, forma_, prefijo, nucleos_, nucleo_inf__, nexo_inf_, sufijo_inf_) local sufijo_inf = arr.sufijo_inf or sufijo_inf_ local forma = forma_ -- REVISAR: determinar cuando va el alt if forma == "perf" and arr.nucleo then forma = "perf_alt" end local sufijos_ = sufijos[sufijo_inf][forma] local nucleos local nucleo_inf_ = {nucleo_inf__} if forma == "part" or forma == "ger" or forma == "part_pres" then nucleos = {nucleo_inf_} elseif forma == "ind_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleos_.nucleoprespl, nucleos_.nucleoprespl, nucleos_.nucleopres1} elseif forma == "perf" then nucleos = {nucleos_.nucleopret, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleo_inf_, nucleos_.nucleopret} elseif forma == "fut" or forma == "cond" then nucleos = {nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut, nucleos_.nucleofut} elseif forma == "subj_pres" then nucleos = {nucleos_.nucleopres1, nucleos_.nucleopres1, nucleos_.nucleopres1, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres1} elseif forma == "imper" then nucleos = {{""}, nucleos_.nucleopres2, nucleos_.nucleopres2, nucleo_inf_, nucleo_inf_, nucleos_.nucleopres2} else local n = nucleo_inf_ nucleos = {n, n, n, n, n, n} end local L = #sufijos_ if L > LORO then L = LORO end for i = 1, L do if arr[i] then for j, _ in ipairs(arr[i]) do arr[i][j] = "#"..combinar_prefijo_nucleonexosufijo(prefijo, arr[i][j]).."#" end else arr[i] = {} local nexosufijo = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i], sufijo_inf) for _,nucleo in ipairs(nucleos[i]) do insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf_))) if sufijo_inf_ == "ere" and forma == "perf" and (i == IO or i == LUI or i == LORO) then local nexosufijo2 = combinar_nexo_sufijo(arr.nexo or nexo_inf_, sufijos_[i+6], sufijo_inf) insert(arr[i], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, nucleo_inf_))) end end end end end local function formatear_conjugacion(arr, adv, pron, art, resto, resto_pl, forma, aux, impersonal, desactivar) local t = {} if forma == "inf" then local t2 = {} insert(t2, arr[1]..pron..art..resto) if resto_pl ~= resto then insert(t2, adv..arr[1]..pron..art..resto_pl) end insert(t, concat(t2, ", ")) return t elseif forma == "ger" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do local vpron = v..pron if art and art ~= "" then insert(t2, adv..f(vpron)..art..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f(vpron)..art..f_links(resto_pl)) end else insert(t2, adv..f_links(vpron)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(vpron)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t elseif forma == "part" or forma == "part_pres" then if desactivar then return {"―"} end local t2 = {} for i, v in ipairs(arr) do insert(t2, adv..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..f_links(v)..f_links(resto_pl)) end end insert(t, concat(t2, ", ")) return t elseif forma == "inf_comp" or forma == "ger_comp" then if desactivar then return {"―"} end local t2 = {} local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local h = auxiliar[aux_][forma][1]..pron..art for i, v in ipairs(arr) do insert(t2, adv..h.." "..f_links(v)..f_links(resto)) if (resto_pl ~= resto) then insert(t2, adv..h.." "..f_links(v)..f_links(resto_pl)) end end end insert(t, concat(t2, ", ")) return t else if desactivar then if impersonal == "3" then return {"―"} elseif impersonal == "36" then return {"―", "―"} end return {"―", "―", "―", "―", "―", "―"} end local es_impers = impersonal == "3" or impersonal == "36" local auxs = {} if strfind(aux, "^e?/?a") then insert(auxs, "avere") end if strfind(aux, "^a?/?e") then insert(auxs, "essere") end for _, aux_ in ipairs(auxs) do local hs = auxiliar[aux_][forma] if hs then for i = IO, LORO do local t2 = {} local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart for j, part in ipairs(arr) do insert(t2, adv..pronart..hs[i].." "..f_links(part)..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end else for i, a in ipairs(arr) do local t2 = {} for j, v in ipairs(a) do local vpronart if forma == "imper" then local vpron = v if art and art ~= "" then vpronart = f(vpron)..art else vpronart = f_links(vpron) end else local pronart = pron == "si" and REFLEXIVOS[i].." " or "" pronart = art and pronart..art.." " or pronart vpronart = pronart..f_links(v) end insert(t2, adv..vpronart..f_links(i < NOI and resto or resto_pl)) end insert(t, "<span class='movil'>"..obtener_pronombre(i, forma, es_impers).."&ensp;</span>"..concat(t2, ", ")) end end end end if impersonal == "3" then return {t[LUI]} elseif impersonal == "36" then return {t[LUI], t[LORO]} end return t end function export.v(frame) local title_ = mw.title.getCurrentTitle() local tit = title_.fullText local args = { ["impersonal"] = {}, ["impers"] = {alias_de = "impersonal"}, ["plural"] = {}, ["indirecto"] = {tipo = "bool"}, ["nucleopres1"] = {lista = true}, ["nucleopres"] = {alias_de = "nucleopres1"}, ["núcleopres1"] = {alias_de = "nucleopres1"}, ["núcleopres"] = {alias_de = "nucleopres1"}, ["nucleopres2"] = {lista = true}, ["núcleopres2"] = {alias_de = "nucleopres2"}, ["nucleopret"] = {lista = true}, ["núcleopret"] = {alias_de = "nucleopret"}, ["nucleofut"] = {lista = true}, ["núcleofut"] = {alias_de = "nucleofut"}, ["paradigma"] = {lista = true}, ["nota"] = {}, ["ger"] = {}, ["part"] = {}, ["part_pres"] = {}, ["ind_pres"] = {lista = true}, ["ind_imp"] = {lista = true}, ["perf"] = {lista = true}, ["fut"] = {lista = true}, ["subj_pres"] = {lista = true}, ["subj_imp"] = {lista = true}, ["cond"] = {lista = true}, ["imper"] = {lista = true}, ["aux"] = {}, ["inco"] = {lista = true}, ["altpret"] = {lista = true}, ["alt"] = {alias_de = "altpret"}, } local parent_frame = frame:getParent() local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params) if args["indirecto"] then error("no implementado") end if not args["aux"] or (not strfind(args["aux"], "^a") and not strfind(args["aux"], "^e") and args["part"] ~= "no") then error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo") end local adv, r1 = strmatch(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$") adv = adv or "" r1 = r1 or tit local v, pron, art, resto = strmatch(r1, "^("..NO_ESPACIO.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$") local resto_pl = args["plural"] and strmatch(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..NO_ESPACIO.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto assert(v and v ~= "", "Forma canónica no reconocida") local sufijo_inf = strmatch(v, "[aeiou]r?re$") assert(sufijo_inf) local conjugado = {} conjugado.inf = {} conjugado.ger = args["ger"] and parsear_arreglo(args["ger"]) or {} conjugado.part = args["part"] and parsear_arreglo(args["part"]) or {} conjugado.part_pres = args["part_pres"] and parsear_arreglo(args["part_pres"]) or {} conjugado.part_no_adj = {} conjugado.ind_pres = parsear_arreglo_doble(args["ind_pres"]) conjugado.ind_imp = parsear_arreglo_doble(args["ind_imp"]) conjugado.perf = parsear_arreglo_doble(args["perf"]) conjugado.fut = parsear_arreglo_doble(args["fut"]) conjugado.subj_pres = parsear_arreglo_doble(args["subj_pres"]) conjugado.subj_imp = parsear_arreglo_doble(args["subj_imp"]) conjugado.cond = parsear_arreglo_doble(args["cond"]) conjugado.imper = parsear_arreglo_doble(args["imper"]) -- REVISAR: no debería ir al final esto? local defectivo = false defectivo = comprobar_defectivo(args["ger"], defectivo) defectivo = comprobar_defectivo(args["part"], defectivo) defectivo = comprobar_defectivo(args["ind_pres"], defectivo) defectivo = comprobar_defectivo(args["ind_imp"], defectivo) defectivo = comprobar_defectivo(args["perf"], defectivo) defectivo = comprobar_defectivo(args["fut"], defectivo) defectivo = comprobar_defectivo(args["subj_pres"], defectivo) defectivo = comprobar_defectivo(args["subj_imp"], defectivo) defectivo = comprobar_defectivo(args["cond"], defectivo) defectivo = comprobar_defectivo(args["imper"], defectivo) local paradigmas_reconocidos = {} local es_irregular local m_table = require("Módulo:tabla") for N = 1, math.max(1, m_table.maxIndex(args["paradigma"]), m_table.maxIndex(args["altpret"]), m_table.maxIndex(args["nucleopres1"]), m_table.maxIndex(args["nucleopres2"]), m_table.maxIndex(args["nucleopret"]), m_table.maxIndex(args["nucleofut"])) do local conj = {} if strfind(v, "iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)") end local encontre_irreg = false for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then conj = m_table.deepcopy(p[3], true) es_irregular = true paradigmas_reconocidos[p[1]] = true encontre_irreg = true break end end if encontre_irreg then break end end local encontre_reg = false for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do for _,rx in ipairs(p[2]) do if args["paradigma"][N] == p[1] or strfind(v, rx) then local vacio = true for k, v in pairs(p[3]) do vacio = false if not conj[k] then -- no puede sobreescribir la información del paradigma irregular conj[k] = v paradigmas_reconocidos[p[1]] = true end end if encontre_irreg then -- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar paradigmas_reconocidos["avviare"] = nil paradigmas_reconocidos["amare"] = nil paradigmas_reconocidos["temere"] = nil paradigmas_reconocidos["partire"] = nil paradigmas_reconocidos["porre"] = nil paradigmas_reconocidos["condurre"] = nil elseif vacio then paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]] end encontre_reg = true break end end if encontre_reg then break end end assert(encontre_reg, "paradigma no reconocido") local nucleo_inf = conj.nucleo local nexo_inf = conj.nexo or "" sufijo_inf = conj.sufijo or sufijo_inf local prefijo = conj.prefijo if not nucleo_inf then nucleo_inf = substr(v, 1, strlen(v) - strlen(nexo_inf..sufijo_inf)) -- no busco regex porque pueden haberse cambiado prefijo = "" elseif not prefijo then prefijo = strmatch(v, "^(.*)"..nucleo_inf..".-$") end if not prefijo then -- caso en el que cambié el núcleo prefijo = "" end local nucleos = {} if args["nucleopres1"][N] and args["nucleopres1"][N] ~= "" then local a, b = strmatch(args["nucleopres1"][N], "^(.-)%-(.-)$") nucleos.nucleopres1 = {a} if b and b ~= "" then nucleos.nucleoprespl = {b} else nucleos.nucleoprespl = {nucleo_inf} end else nucleos.nucleopres1 = {nucleo_inf} nucleos.nucleoprespl = {nucleo_inf} end if args["nucleopres2"][N] and args["nucleopres2"][N] ~= "" then nucleos.nucleopres2 = {args["nucleopres2"][N]} else nucleos.nucleopres2 = {nucleo_inf} end if args["nucleopret"][N] and args["nucleopret"][N] ~= "" then nucleos.nucleopret = {args["nucleopret"][N]} else nucleos.nucleopret = {nucleo_inf} end if args["nucleofut"][N] and args["nucleofut"][N] ~= "" then nucleos.nucleofut = {args["nucleofut"][N]} else nucleos.nucleofut = {nucleo_inf} end conj.inf = {{v}} conj.ger = conj.ger and {conj.ger} or {} conj.part = conj.part and {conj.part} or {} conj.part_pres = conj.part_pres and {conj.part_pres} or {} conj.ind_pres = conj.ind_pres or {} conj.ind_imp = conj.ind_imp or {} conj.perf = conj.perf or {} conj.fut = conj.fut or {} conj.subj_pres = conj.subj_pres or {} conj.subj_imp = conj.subj_imp or {} conj.cond = conj.cond or {} conj.imper = conj.imper or {} agregar_forma(conj.ger, "ger", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part, "part", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.part_pres, "part_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_pres, "ind_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.ind_imp, "ind_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.perf, "perf", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.fut, "fut", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_pres, "subj_pres", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.subj_imp, "subj_imp", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.cond, "cond", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) agregar_forma(conj.imper, "imper", prefijo, nucleos, nucleo_inf, nexo_inf, sufijo_inf) combinar_arreglo(conjugado.inf, conj.inf[1], true) combinar_arreglo(conjugado.ger, conj.ger[1], args["ger"] == nil) combinar_arreglo(conjugado.part, conj.part[1], args["part"] == nil) combinar_arreglo(conjugado.part_pres, conj.part_pres[1], args["part_pres"] == nil) combinar_arreglo_doble(conjugado.ind_pres, conj.ind_pres, args["ind_pres"]) combinar_arreglo_doble(conjugado.ind_imp, conj.ind_imp, args["ind_imp"]) combinar_arreglo_doble(conjugado.perf, conj.perf, args["perf"]) combinar_arreglo_doble(conjugado.fut, conj.fut, args["fut"]) combinar_arreglo_doble(conjugado.subj_pres, conj.subj_pres, args["subj_pres"]) combinar_arreglo_doble(conjugado.subj_imp, conj.subj_imp, args["subj_imp"]) combinar_arreglo_doble(conjugado.cond, conj.cond, args["cond"]) combinar_arreglo_doble(conjugado.imper, conj.imper, args["imper"]) end for _,e in ipairs(conjugado.part) do if strfind(e, 'PART') or not strfind(e, 'ADJ') then insert(conjugado.part_no_adj, strsub(e, '%b{}', '')) end end local impers = args["impersonal"] local inf = formatear_conjugacion(conjugado.inf, adv, pron, art, resto, resto_pl, "inf", args["aux"], impers) local ger = formatear_conjugacion(conjugado.ger, adv, pron, art, resto, resto_pl, "ger", args["aux"], impers, args["ger"] == "no") local inf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "inf_comp", args["aux"], impers, args["part"] == "no") local ger_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ger_comp", args["aux"], impers, args["part"] == "no") local part = formatear_conjugacion(conjugado.part, adv, pron, art, resto, resto_pl, "part", args["aux"], impers, args["part"] == "no") local part_pres = formatear_conjugacion(conjugado.part_pres, adv, pron, art, resto, resto_pl, "part_pres", args["aux"], impers, args["part_pres"] == "no") local ind_pres = formatear_conjugacion(conjugado.ind_pres, adv, pron, art, resto, resto_pl, "ind_pres", args["aux"], impers, args["ind_pres"][1] == "no") local ind_imp = formatear_conjugacion(conjugado.ind_imp, adv, pron, art, resto, resto_pl, "ind_imp", args["aux"], impers, args["ind_imp"][1] == "no") local perf = formatear_conjugacion(conjugado.perf, adv, pron, art, resto, resto_pl, "perf", args["aux"], impers, args["perf"][1] == "no") local fut = formatear_conjugacion(conjugado.fut, adv, pron, art, resto, resto_pl, "fut", args["aux"], impers, args["fut"][1] == "no") local perf_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "perf_comp", args["aux"], impers, args["part"] == "no") local ind_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_pluperf", args["aux"], impers, args["part"] == "no") local ind_anter = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "ind_anter", args["aux"], impers, args["part"] == "no") local fut_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "fut_comp", args["aux"], impers, args["part"] == "no") local cond = formatear_conjugacion(conjugado.cond, adv, pron, art, resto, resto_pl, "cond", args["aux"], impers, args["cond"][1] == "no") local cond_comp = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "cond_comp", args["aux"], impers, args["part"] == "no") local subj_pres = formatear_conjugacion(conjugado.subj_pres, adv, pron, art, resto, resto_pl, "subj_pres", args["aux"], impers, args["subj_pres"][1] == "no") local subj_imp = formatear_conjugacion(conjugado.subj_imp, adv, pron, art, resto, resto_pl, "subj_imp", args["aux"], impers, args["subj_imp"][1] == "no") local subj_perf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_perf", args["aux"], impers, args["part"] == "no") local subj_pluperf = formatear_conjugacion(conjugado.part_no_adj, adv, pron, art, resto, resto_pl, "subj_pluperf", args["aux"], impers, args["part"] == "no") local imper = formatear_conjugacion(conjugado.imper, adv, pron, art, resto, resto_pl, "imper", args["aux"], impers, args["imper"][1] == "no") local COLOR_IND = "#C3FDB8" -- Light Jade local COLOR_COND = "AliceBlue" local COLOR_SUBJ = "LemonChiffon" local COLOR_IMPER = "LavenderBlush" local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper if impers == "3" then -- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y) fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"} cs = 2 elseif impers == "36" then fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"} cs = 3 else fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"} fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"} fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"} fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"} cs = 7 mostrar_imper = true end cs1 = math.floor(cs / 2) cs2 = cs - cs1 local t = {} t[1] = {{"Formas no personales (verboides)", colspan=cs}, color="WhiteSmoke", header=true} if impers == "3" then t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1]..", "..inf_comp[1]}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1]..", "..ger_comp[1]}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1]}} t[5] = {{"Participio presente", header=true, color="WhiteSmoke"}, {part_pres[1]}} t[6] = {{"Auxiliar", header=true, color="WhiteSmoke"}, {a[1]}} else t[2] = {{"Infinitivo", header=true, color="WhiteSmoke"}, {inf[1], colspan=cs1-1}, {inf_comp[1], colspan=cs2}} t[3] = {{"Gerundio", header=true, color="WhiteSmoke"}, {ger[1], colspan=cs1-1}, {ger_comp[1], colspan=cs2}} t[4] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part[1], colspan=cs-1}} t[5] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {part_pres[1], colspan=cs-1}} t[6] = {{"Participio pasado", header=true, color="WhiteSmoke"}, {a[1], colspan=cs-1}} end t[7] = {{"Formas personales", colspan=cs}, color="WhiteSmoke", header=true} t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true} t[9] = fila_pronombres_ind t[10] = {{"Presente", color=COLOR_IND, header=true}, unpack(ind_pres)} t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, unpack(ind_imp)} t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, unpack(perf)} t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, unpack(ind_pluperf)} t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, unpack(perf_comp)} t[15] = {{"Futuro", color=COLOR_IND, header=true}, unpack(fut)} t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, unpack(fut_comp)} t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, unpack(ind_anter)} t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true} t[19] = fila_pronombres_cond t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, unpack(cond)} t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, unpack(cond_comp)} t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true} t[23] = fila_pronombres_subj t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, unpack(subj_pres)} t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_imp)} t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, unpack(subj_perf)} t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, unpack(subj_pluperf)} t[30] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true} t[31] = fila_pronombres_imper if mostrar_imper then t[32] = {{"Presente", color=COLOR_IMPER, header=true}, "―", unpack(imper, 2)} else t[32] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}} end t[33] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}} args["nota"] = args["nota"] or "" if args["impersonal"] == "utc3" then args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "umc3" then args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular." end if args["impersonal"] == "utc36" then args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end if args["impersonal"] == "umc36" then args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural." end t[34] = {{args["nota"] and args["nota"] or "", colspan=cs}} local paradigmas_t = {} local cats = {} if es_irregular then insert(cats, "IT:Verbos irregulares") else insert(cats, "IT:Verbos regulares") end for p, _ in pairs(paradigmas_reconocidos) do insert(paradigmas_t, p) insert(cats, "IT:Verbos del paradigma "..p) end if impers == "3" or strfind(impers, "^u[tm]c3$") then insert(cats, "IT:Verbos impersonales") end if impers == "36" or strfind(impers, "^u[tm]c36$") then insert(cats, "IT:Verbos terciopersonales") end if strfind(impers, "^ind") then insert(cats, "IT:Verbos de objeto indirecto") end if defectivo then insert(cats, "IT:Verbos defectivos") end if sufijo_inf == "ar" then insert(cats, "IT:Verbos de la primera conjugación") elseif sufijo_inf == "er" then insert(cats, "IT:Verbos de la segunda conjugación") else -- será ir o ír, ya fue chequeado antes insert(cats, "IT:Verbos de la tercera conjugación") end return require("Módulo:flex").renderizar_tabla( frame, "'''Conjugación de ''"..tit.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, cats) end return export 0bm74bfz7f5xb7aydwfc4xtycc60xce Plantilla:it.sust 10 1055181 5823378 2025-07-03T01:09:39Z Tmagc 158167 Página creada con «{{#invoke:flex/it|sust}}<noinclude>{{documentación}}</noinclude>» 5823378 wikitext text/x-wiki {{#invoke:flex/it|sust}}<noinclude>{{documentación}}</noinclude> n1j73duxtrbdg5asm4rw5eju9bxry81 Plantilla:it.adj 10 1055182 5823379 2025-07-03T01:09:54Z Tmagc 158167 Página creada con «{{#invoke:flex/it|adj}}<noinclude>{{documentación}}</noinclude>» 5823379 wikitext text/x-wiki {{#invoke:flex/it|adj}}<noinclude>{{documentación}}</noinclude> tlxuai4dj5mik2m63l2k9frz4ior17p fijador 0 1055183 5823389 2025-07-03T01:59:22Z Tmagc 158167 Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|fijar|dor}}. ==== {{adjetivo|es}} ==== {{es.adj}} ;1: {{adjetivo de verbo|fijar|fija}}. ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;2 {{csem|fotografía}}: Líquido que sirve para fijar. ;3 {{csem|arte|plástica}}: Líquido que esparcido por medio de un pulverizador sirve para fijar dibujos hechos con carbón o con lápiz. ;4 {{csem|estética|cosmética}}: Susta…» 5823389 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|fijar|dor}}. ==== {{adjetivo|es}} ==== {{es.adj}} ;1: {{adjetivo de verbo|fijar|fija}}. ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;2 {{csem|fotografía}}: Líquido que sirve para fijar. ;3 {{csem|arte|plástica}}: Líquido que esparcido por medio de un pulverizador sirve para fijar dibujos hechos con carbón o con lápiz. ;4 {{csem|estética|cosmética}}: Sustancia utilizada para fijar el cabello. ==== {{sustantivo masculino y femenino|es}} ==== {{es.sust|mf}} ;5 {{csem|ocupaciones|construcción}}: Operario que se encarga en introducir el mortero entre las piedras y en retundir las juntas. ;6 {{csem|ocupaciones|construcción}}: Operario que fija las puertas y ventanas en sus cercos. ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> sd57w2jicoyoxwhb3rrtmmztosxf5qy 5823390 5823389 2025-07-03T02:00:21Z Tmagc 158167 5823390 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|fijar|dor}}. ==== {{adjetivo|es}} ==== {{es.adj}} ;1: {{adjetivo de verbo|fijar|fija}}. ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;2 {{csem|fotografía}}: Líquido que sirve para fijar.<ref name=dle1925>{{DLE1925}}</ref> ;3 {{csem|arte|plástica}}: Líquido que esparcido por medio de un pulverizador sirve para fijar dibujos hechos con carbón o con lápiz.<ref name=dle1925 /> ;4 {{csem|estética|cosmética}}: Sustancia utilizada para fijar el cabello.<ref name=dle1925 /> ==== {{sustantivo masculino y femenino|es}} ==== {{es.sust|mf}} ;5 {{csem|ocupaciones|construcción}}: Operario que se encarga en introducir el mortero entre las piedras y en retundir las juntas.<ref name=dle1925 /> ;6 {{csem|ocupaciones|construcción}}: Operario que fija las puertas y ventanas en sus cercos.<ref name=dle1925 /> ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> 0wrq3523wf2vm05iysjp7tdqcb1e7in mulillero 0 1055184 5823404 2025-07-03T02:23:04Z Tmagc 158167 Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|mulilla|ero}}. ==== {{sustantivo masculino y femenino|es}} ==== {{es.sust|mf}} ;1 {{csem|ocupaciones|tauromaquia}}: Encargado de las mulillas.<ref>{{FBBVA}}</ref> ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references />» 5823404 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|mulilla|ero}}. ==== {{sustantivo masculino y femenino|es}} ==== {{es.sust|mf}} ;1 {{csem|ocupaciones|tauromaquia}}: Encargado de las mulillas.<ref>{{FBBVA}}</ref> ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> t1tjwx2pk6vn4qa897i77fsf2z65hzn 5823409 5823404 2025-07-03T02:26:06Z Tmagc 158167 5823409 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|mulilla|ero}}. ==== {{sustantivo masculino y femenino|es}} ==== {{es.sust|mf}} ;1 {{csem|ocupaciones|tauromaquia}}: Encargado de guiar a las mulillas.<ref>{{FBBVA}}</ref> ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> hria5epkismti0rgbcpp8adtz7v9889 mulilla 0 1055185 5823405 2025-07-03T02:24:01Z Tmagc 158167 Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|dimi|mula}}. ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1 {{csem|ropa}}: {{plm|múleo}} (calzado). == Referencias y notas == <references />» 5823405 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|dimi|mula}}. ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1 {{csem|ropa}}: {{plm|múleo}} (calzado). == Referencias y notas == <references /> dz3a3n27ci536el9h120pu5xr083q9m 5823407 5823405 2025-07-03T02:25:26Z Tmagc 158167 5823407 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|dimi|mula}}. ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1 {{csem|ropa}}: {{plm|múleo}} (calzado).<ref>{{DLE}}</ref> ;2 {{csem|tauromaquia}}: Mula que saca del ruedo a los toros o a los caballos muertos.<ref>{{FBBVA}}</ref> {{uso|umep}} == Referencias y notas == <references /> g0cd4ze7a3353vxhhtr0bnfybuovnl8 5823408 5823407 2025-07-03T02:25:53Z Tmagc 158167 5823408 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|dimi|mula}}. ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1 {{csem|ropa}}: {{plm|múleo}} (calzado).<ref>{{DLE}}</ref> ;2 {{csem|tauromaquia}}: Mula que saca del ruedo a los toros o a los caballos muertos.<ref>{{FBBVA}}</ref> {{uso|umep}} ==== Información adicional ==== {{derivad|mulillero}} == Referencias y notas == <references /> 16gr0hnygjhglg0zg6so00tpb7jmqk7 tarefero 0 1055186 5823411 2025-07-03T02:28:17Z Tmagc 158167 Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|tarefa|ero}}. ==== {{sustantivo masculino y femenino|es}} ==== {{es.sust|mf}} ;1 {{csem|ocupaciones|agro}}: Persona que se dedica a la [[tarefa]]. ==== Véase también ==== {{w}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references />» 5823411 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|tarefa|ero}}. ==== {{sustantivo masculino y femenino|es}} ==== {{es.sust|mf}} ;1 {{csem|ocupaciones|agro}}: Persona que se dedica a la [[tarefa]]. ==== Véase también ==== {{w}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> pge3in3a4ix0oh5vuja19q156bts4so tarefa 0 1055187 5823412 2025-07-03T02:30:51Z Tmagc 158167 Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|pt|tarefa|tarea}}. ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1 {{csem|agro}}: Cosecha de la yerba mate.<ref>{{Damer}}</ref> {{ámbito|Misiones|nota=Argentina}} ==== Información adicional ==== {{derivad|tarefero}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references />» 5823412 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|pt|tarefa|tarea}}. ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1 {{csem|agro}}: Cosecha de la yerba mate.<ref>{{Damer}}</ref> {{ámbito|Misiones|nota=Argentina}} ==== Información adicional ==== {{derivad|tarefero}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> 6w7ni8gsh8fe9ty0l89veimwmn6140g zafrero 0 1055188 5823414 2025-07-03T02:33:18Z Tmagc 158167 Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|zafra|ero}}. ==== {{sustantivo masculino y femenino|es}} ==== {{es.sust}} ;1 {{csem|minería|ocupaciones}}: Operario encargado del [[trecheo]] de la [[zafra]].<ref name=dle>{{DLE}}</ref> ;2 {{csem|ocupaciones}}: En un [[ingenio de azúcar]], el encargado de cortar la caña.<ref name=dle /> ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas ==…» 5823414 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|zafra|ero}}. ==== {{sustantivo masculino y femenino|es}} ==== {{es.sust}} ;1 {{csem|minería|ocupaciones}}: Operario encargado del [[trecheo]] de la [[zafra]].<ref name=dle>{{DLE}}</ref> ;2 {{csem|ocupaciones}}: En un [[ingenio de azúcar]], el encargado de cortar la caña.<ref name=dle /> ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> 1xf5yp90luihelhzp7ft2foewd0dpdh 5823415 5823414 2025-07-03T02:33:33Z Tmagc 158167 5823415 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|zafra|ero}}. ==== {{sustantivo masculino y femenino|es}} ==== {{es.sust|mf}} ;1 {{csem|minería|ocupaciones}}: Operario encargado del [[trecheo]] de la [[zafra]].<ref name=dle>{{DLE}}</ref> ;2 {{csem|ocupaciones}}: En un [[ingenio de azúcar]], el encargado de cortar la caña.<ref name=dle /> ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> 1j59jl7zp55kdumi8rl47fuw4p20o4z Wikcionario:Café/2025 06 4 1055189 5823418 2025-07-03T02:39:01Z MABot 70592 Bot: archivo de 2 hilos procedentes de [[Wikcionario:Café]] 5823418 wikitext text/x-wiki {{Archivo}} == Cómo agregar nuevas pronunciaciones == Hola! quisiera preguntar cómo agregar una nueva pronunciación en la plantilla '''Plantilla:pron-graf,''' ¿puedo agregarlo de forma manual o se necesita tener una página de Referencia de pronunciación,como por ejemplo Wikcionario:Referencia/ES/Pronunciación. En mi caso quiero agregar pronunciaciones desde la lengua Kunza (KUZ), la que no tiene página de referencia de pronunciación. ¿Necesitaría crear la página Wikcionario:Referencia/KUZ/Pronunciación para que me resulte? gracias de antemano [[Usuario:Pcartes|Pcartes]] ([[Usuario discusión:Pcartes|discusión]]) 15:21 21 may 2025 (UTC) :@[[Usuario:Pcartes|Pcartes]] Deberías crear [[Módulo:generar-pron/kuz]], tomando como referencia lo que se hizo con otros idiomas afines, por ejemplo [[Módulo:generar-pron/arn]], [[Módulo:generar-pron/yua]] o [[Módulo:generar-pron/gn]] por tirar ejemplos. Sabés programar en Lua? Tenés ya algún algoritmo hecho? Si no puedo ayudarte con gusto, pero necesito que me expliques cómo debe ser. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:45 21 may 2025 (UTC) ::gracias por la respuesta y disposición para ayudar, la verdad es que no sé programar con Lua pero me interesa aprender. Actualmente estoy trabajando con lingüistas que me podrán ayudar a completar la parte técnica, pero igual agradecería tu ayuda. ¿Hay alguna forma de comunicarnos directamente por correo o solo por aquí? ::Cualquier cosa quedo atento [[Usuario:Pcartes|Pcartes]] ([[Usuario discusión:Pcartes|discusión]]) 16:57 21 may 2025 (UTC) :::@[[Usuario:Pcartes|Pcartes]] Prefiero que nos escribamos en este sitio así queda evidencia de todo lo discutido en caso de que futuros usuarios se vean en la necesidad de revisar el módulo por el motivo que fuere. Para no inundar el Café con una discusión irrelevante e innecesaria para el resto, ahora te escribo en tu página de discusión y seguimos por allí. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:22 21 may 2025 (UTC) ::::Un detalle importantes es que no se sabe cómo sonaba el kunza. En particular, se discute mucho qué quiso decir Vaïsse con su descripción de la consonante ck, muy común en el idioma, como en su propio nombre [[ckunsa]] ("nuestro"). ¿Era /q/, /χ/ o algo diferente? No se sabe. Por eso, antes de crear el módulo habria que revisar las reconstrucciones que se puedan haber publicado. Saludos. [[Usuario:Lin linao|Lin linao]] [[Usuario Discusión:Lin linao|¿dime?]] 21:44 2 jun 2025 (UTC) == Noticias técnicas: 2025-23 == <section begin="technews-2025-W23"/><div class="plainlinks"> Las últimas '''[[m:Special:MyLanguage/Tech/News|noticas técnicas]]''' desde la comunidad técnica de Wikimedia. Por favor, comenta estos cambios con otros usuarios. No todos los cambios te afectarán. [[m:Special:MyLanguage/Tech/News/2025/23|Traducciones en varios idiomas]] están disponibles. '''Lo más destacado de la semana''' * La [[mw:Special:MyLanguage/Extension:Chart|extensión Chart]] ya está disponible en todas las wikis de Wikimedia. Los editores pueden usar esta nueva extensión para crear visualizaciones de datos interactivas como gráficos de barra, línea y torta. La extensión está diseñada para reemplazar muchos de los usos de la [[mw:Special:MyLanguage/Extension:Graph|extensión antigua]]. '''Actualizaciones para editores''' * Ahora es más fácil configurar las citas automáticas para tu wiki con el [[mw:Special:MyLanguage/Citoid/Enabling Citoid on your wiki|generador de citas]] del editor visual. Los administradores pueden establecer una plantilla por defecto usando <code dir=ltr>_default</code> en la página local <bdi lang="en" dir="ltr">[[MediaWiki:Citoid-template-type-map.json]]</bdi> ([[mw:Special:Diff/6969653/7646386|un ejemplo de diff]]). Establecer este valor por defecto también ayudará a preparar tus configuraciones existentes para el futuro cuando se agreguen [[phab:T347823|nuevos tipos de elementos]]. Aún puedes establecer plantillas para tipos individuales, ya que estas tendrán preferencia sobre la plantilla por defecto. [https://phabricator.wikimedia.org/T384709] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:20}} {{PLURAL:20|tarea enviada|tareas enviadas}} por la comunidad que fueron [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resueltas la semana pasada]]. '''Actualizaciones para los colaboradores técnicos''' * A partir de la semana del 2 de junio, los bots que inicien sesión usando <code dir=ltr>action=login</code> o <code dir=ltr>action=clientlogin</code> fallarán con mayor frecuencia. Esto se debe a la mejora en las protecciones contra ingresos sospechosos. Los bots que usen [[mw:Special:MyLanguage/Manual:Bot passwords|contraseñas de bot]] o un mecanismo de autenticación sin inicio de sesión como [[mw:Special:MyLanguage/OAuth/Owner-only consumers|OAuth]] no se verán afectados. Si tu bot no está usando uno de esos mecanismos, deberías actualizarlo; el uso de <code dir=ltr>action=login</code> sin una contraseña de bot fue marcado como obsoleto [[listarchive:list/wikitech-l@lists.wikimedia.org/message/3EEMN7VQX5G7WMQI5K2GP5JC2336DPTD/|en 2016]]. Para la mayoría de los bots, esto solo requiere cambiar la contraseña que usa el bot. [https://phabricator.wikimedia.org/T395205] * A partir de esta semana, las wikis de Wikimedia permitirán características de ES2017 en código JavaScript para código oficial, dispositivos y scripts de usuario. La característica más visible de ES2017 es la sintaxis de <bdi lang="zxx" dir="ltr"><code>async</code>/<code>await</code></bdi>, que permite un código más fácil de leer. Hasta esta semana, la plataforma solo permitía hasta ES2016, y unos meses antes, hasta ES2015. [https://phabricator.wikimedia.org/T381537] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.45/wmf.4|MediaWiki]] '''Reuniones y eventos''' * Las solicitudes de becas para participar en la [[m:Special:MyLanguage/GLAM Wiki 2025|GLAM Wiki Conference 2025]] ya están abiertas. La conferencia se realizará del 30 de octubre al 1 de noviembre en Lisboa, Portugal. Las personas que contribuyen con GLAM y carecen de los medios para participar pueden [[m:Special:MyLanguage/GLAM Wiki 2025/Scholarships|postular aquí]]. Las solicitudes de becas cierran el 7 de junio. ''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/23|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-2025-W23"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:55 2 jun 2025 (UTC) <!-- Mensaje enviado por Usuario:Quiddity (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28819186 --> qekmbijdyehm5zg2wwmw1wc2d7d4xfy desinformador 0 1055190 5823448 2025-07-03T03:14:34Z Tmagc 158167 Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|desinformar|dor}}. ==== {{adjetivo|es}} ==== {{es.adj}} ;1: {{adjetivo de verbo|desinformar|desinforma}}. ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references />» 5823448 wikitext text/x-wiki {{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|desinformar|dor}}. ==== {{adjetivo|es}} ==== {{es.adj}} ;1: {{adjetivo de verbo|desinformar|desinforma}}. ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references /> q0d9zdb4b32xzziey300iqs1mwx2l11 auteur 0 1055191 5823449 2025-07-03T03:28:19Z Tmagc 158167 Página creada con «{{desambiguación|}} == {{lengua|fr}} == {{pron-graf|leng=fr}} === Etimología === {{etimología|leng=fr|frm|aucteur}}, {{etim|leng=fr|fro|auctor}}, {{etim|leng=fr|la}}. Para el femenino irregular, {{etim|la|auctrix|leng=fr}} ==== {{sustantivo masculino y femenino|fr}} ==== {{inflect.fr.sust.ad-lib|auteur|auteurs|autrice|autrices}} ;1: {{plm|autor}}. == Referencias y notas == <references />» 5823449 wikitext text/x-wiki {{desambiguación|}} == {{lengua|fr}} == {{pron-graf|leng=fr}} === Etimología === {{etimología|leng=fr|frm|aucteur}}, {{etim|leng=fr|fro|auctor}}, {{etim|leng=fr|la}}. Para el femenino irregular, {{etim|la|auctrix|leng=fr}} ==== {{sustantivo masculino y femenino|fr}} ==== {{inflect.fr.sust.ad-lib|auteur|auteurs|autrice|autrices}} ;1: {{plm|autor}}. == Referencias y notas == <references /> 4icw7s949158z5qw3lmkwepaq4pg9jz autore 0 1055192 5823450 2025-07-03T03:29:58Z Tmagc 158167 Página creada con «{{desambiguación|}} == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|la|auctōrem}}. ==== {{sustantivo masculino y femenino|it}} ==== {{it.sust|mf}} ;1: {{plm|autor}}. == Referencias y notas == <references />» 5823450 wikitext text/x-wiki {{desambiguación|}} == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|la|auctōrem}}. ==== {{sustantivo masculino y femenino|it}} ==== {{it.sust|mf}} ;1: {{plm|autor}}. == Referencias y notas == <references /> imk8hunm8x6kmkncatxc2skry8p7zja abbachiato 0 1055193 5823489 2025-07-03T04:12:27Z Tmagc 158167 Tmagc trasladó la página [[abbachiato]] a [[abbacchiato]]: Título mal escrito 5823489 wikitext text/x-wiki #REDIRECCIÓN [[abbacchiato]] kl6w3sgzdbzeh21zogemmq4bgun6w49 orologio 0 1055194 5823503 2025-07-03T04:58:14Z Tmagc 158167 Página creada con «{{desambiguación|}} == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|la|alt=hōrologium|horologium}}, {{etim|leng=it|grc|ὡρολόγιον}}. ==== {{sustantivo masculino|it}} ==== {{it.sust}} ;1: {{plm|reloj}}. == Referencias y notas == <references />» 5823503 wikitext text/x-wiki {{desambiguación|}} == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|la|alt=hōrologium|horologium}}, {{etim|leng=it|grc|ὡρολόγιον}}. ==== {{sustantivo masculino|it}} ==== {{it.sust}} ;1: {{plm|reloj}}. == Referencias y notas == <references /> 80vv056k3t36th7zk1zkpbqp8auv60i 5823505 5823503 2025-07-03T05:03:50Z Tmagc 158167 /* {{sustantivo masculino|it}} */ 5823505 wikitext text/x-wiki {{desambiguación|}} == {{lengua|it}} == {{pron-graf|leng=it}} === Etimología === {{etimología|leng=it|la|alt=hōrologium|horologium}}, {{etim|leng=it|grc|ὡρολόγιον}}. ==== {{sustantivo masculino|it}} ==== {{it.sust|m}} ;1: {{plm|reloj}}. == Referencias y notas == <references /> g45irnj2dz72b0d0s4z3jlc8pazjlkh