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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/23|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/23|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/23|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/23|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/23|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/23|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/24|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/25|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/26|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/27|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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§ion=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>▶</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki";
:<small>▶</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>▶</small> Las '''[[Wikcionario:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> Los manuales de '''[[Wikcionario:Estructura|estructura]]''', y de '''[[Wikcionario:Estilo|estilo]]''' son guías esenciales para orientar la redacción;
:<small>▶</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>(~~~~)</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>▶</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki";
:<small>▶</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>▶</small> Las '''[[Wikcionario:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> Los manuales de '''[[Wikcionario:Estructura|estructura]]''', y de '''[[Wikcionario:Estilo|estilo]]''' son guías esenciales para orientar la redacción;
:<small>▶</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>(~~~~)</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>▶</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki";
:<small>▶</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>▶</small> Las '''[[Wikcionario:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> Los manuales de '''[[Wikcionario:Estructura|estructura]]''', y de '''[[Wikcionario:Estilo|estilo]]''' son guías esenciales para orientar la redacción;
:<small>▶</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>(~~~~)</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>▶</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki";
:<small>▶</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>▶</small> Las '''[[Wikcionario:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> Los manuales de '''[[Wikcionario:Estructura|estructura]]''', y de '''[[Wikcionario:Estilo|estilo]]''' son guías esenciales para orientar la redacción;
:<small>▶</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>(~~~~)</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>▶</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki";
:<small>▶</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>▶</small> Las '''[[Wikcionario:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> Los manuales de '''[[Wikcionario:Estructura|estructura]]''', y de '''[[Wikcionario:Estilo|estilo]]''' son guías esenciales para orientar la redacción;
:<small>▶</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>(~~~~)</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 ", " 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 ", " 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] = "|",
[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] = "|",
[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.."] \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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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, " ¦ ")
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).." </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).." </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.."'''''  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]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2025/23|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[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