Wikcionario
eswiktionary
https://es.wiktionary.org/wiki/Wikcionario:Portada
MediaWiki 1.47.0-wmf.6
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
Tesauro
Tesauro discusión
TimedText
TimedText talk
Módulo
Módulo discusión
Evento
Evento discusión
Wikcionario:Café
4
1313
6118071
6117767
2026-06-15T16:48:43Z
MediaWiki message delivery
53277
Sección nueva: /* Noticias técnicas: 2026-25 */
6118071
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}}
{{Archivo}}
<!-- 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>
== VOTACIÓN: Forzar validación de firmas ==
En concordancia con [[Special:Diff/6091870|esta discusión]], propongo modificar [[mw:Manual:$wgSignatureValidation|$wgSignatureValidation]] para que prohíba los comentarios con firmas que tienen errores de sintaxis. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 14:18 10 abr 2026 (UTC)
:{{a favor}}. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 14:45 10 abr 2026 (UTC)
:{{a favor}} — <span style="background:#7EE6CB;color:#5A3696;padding:1px 2px;border-radius:2px">[[User:Genoskill|<span style="color:#5A3696;font-weight:bold">Genoskill</span>]]</span> ([[User talk:Genoskill|discusión]]) 03:47 12 abr 2026 (UTC)
:{{a favor}} --[[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 10:46 12 abr 2026 (UTC)
:{{a favor}}. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 17:12 13 abr 2026 (UTC)
:@[[Usuario:Peter Bowman|Peter Bowman]] No sería la hora ya? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 03:05 30 abr 2026 (UTC)
::@[[Usuario:Tmagc|Tmagc]]: sí, añade tu firma y lanzo la petición en phab. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:09 30 abr 2026 (UTC)
:{{a favor}} [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 13:27 30 abr 2026 (UTC)
He abierto [[phab:T424983]]. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 13:48 30 abr 2026 (UTC)
:@[[Usuario:Tmagc|Tmagc]], @[[Usuario:Genoskill|Genoskill]], @[[Usuario:Cvmontuy|Cvmontuy]], @[[Usuario:Raos10|Raos10]]: se supone que ya está hecho. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 22:18 30 abr 2026 (UTC)
::@[[Usuario:Peter Bowman|Peter Bowman]] parece que todavía no está resuelto; mi firma tiene sobreescrito el color de fondo sin un color correspondiente a nivel de texto. <span style="background:white;">TMAGC ([[Usuario discusión:Tmagc|discusión]])</span> 02:07 1 may 2026 (UTC)
::Por si acaso, probé a propósito con <nowiki><span style="background:white;">TMAGC ([[Usuario discusión:Tmagc|discusión]])</span></nowiki>, entiendo que eso ocasiona un error de sintaxis. <span style="background:white;">TMAGC ([[Usuario discusión:Tmagc|discusión]])</span> 02:08 1 may 2026 (UTC)
::AAAH ya me dí cuenta, el valor por defecto para $wgSignatureAllowedLintErrors es <nowiki>[ 'obsolete-tag', 'night-mode-unaware-background-color' ]</nowiki>. Qué hacemos al respecto? En enwiki y plwiki lo cambiaron a <nowiki>[ 'obsolete-tag' ]</nowiki>. Yo cuando decía "errores de sintaxis" me refería a todos los errores sin excepciones, qué opina el resto? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 02:18 1 may 2026 (UTC)
:::Como mínimo deberíamos quitar <code>obsolete-tag</code>, y sí, según el propósito original de este hilo, también <code>night-mode-unaware-background-color</code>. Es fallo mío, tomé como referencia [[phab:T355462]] (enwiki) y [[phab:T364769]] (plwiki) sin darme cuenta de que también interviene esta segunda variable de configuración [[mw:Manual:$wgSignatureAllowedLintErrors|$wgSignatureAllowedLintErrors]] (para la cual fueron abiertos [[phab:T354013]] y [[phab:T362414]], respectivamente, con anterioridad a los dos anteriores). Interpreto que esto es lo que fue votado (se indicó claramente en el hilo previo a este), próximamente lanzaré otra petición para corregirlo. PD: por cierto, @[[Usuario:Tmagc|Tmagc]], tu bot borró parte de este hilo. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 12:31 1 may 2026 (UTC)
:::Gracias por ocuparte de ls dos cosas. Como quería reorganizar algunas páginas del espacio de Wikcionaro, si son complicados los cambios me descargo las páginas localmente y las edito a mano, luego las vuelvo a subir. Este enfoque usa como premisa la poca actividad que tiene el sitio. Resulta no me di cuenta de que en el medio yo mismo (bruh) modifiqué una de las páginas cuando respondí por el Café. Mil disculpas. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 15:55 1 may 2026 (UTC)
:Acabo de abrir [[phab:T425332]] en relación con esa segunda variable. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:26 4 may 2026 (UTC)
::Ahora sí funciona bien. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 21:47 12 may 2026 (UTC)
== Noticias técnicas: 2026-21 ==
<section begin="technews-2026-W21"/><div class="plainlinks">
Las últimas '''[[m:Special:MyLanguage/Tech/News|noticias 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/2026/21|Traducciones en varios idiomas]] están disponibles.
'''Lo más destacado de la semana'''
* El equipo de Abstract Wikipedia ha identificado cinco posibles wikis piloto para evaluar su interés en adoptar artículos abstractos. Las elegidas son las Wikipedias en malayalam, bengalí, dagbani, árabe e indonesio. El periodo de comentarios estará abierto hasta el 22 de mayo. Si tu comunidad está interesada en convertirse en piloto, [[m:Talk:Abstract Wikipedia|háganoslo saber en Meta]].
'''Actualizaciones para editores'''
* Un experimento para mostrar [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|listas de lectura]] a los lectores sin sesión iniciada se lanzó el 18 de mayo en las Wikipedias en alemán, español, italiano, portugués, polaco, neerlandés, turco y urdu, y se desarrollará durante un mes. Este esfuerzo busca ayudar a los lectores a guardar y organizar artículos para su lectura posterior, a la vez que fomenta hábitos que podrían motivar futuras contribuciones en Wikipedia.
* Para dar soporte al botón de marcadores en la función beta de listas de lectura, se ha actualizado el menú «Herramientas > Acciones» para mostrar iconos, incluyendo la estrella de seguimiento que ayuda a los editores a identificar los artículos temporalmente en la lista de seguimiento. Además, estos iconos ahora coinciden con los utilizados en la versión móvil, mejorando la consistencia entre plataformas. Actualmente, este cambio se limita al menú de acciones y afecta principalmente a los editores con permisos de usuario avanzados. [https://phabricator.wikimedia.org/T426008]
* El [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Modo de sugerencias]] se ha lanzado en fase de [[w:en:A/B test|prueba A/B]] para editores principiantes en la versión web móvil de [[phab:T421189|unas 15 Wikipedias]]. El experimento medirá el impacto de este modo en la proporción de ediciones web de usuarios nuevos que resulten en aportes constructivos (no revertidos). Asimismo, se evaluará el impacto de la herramienta en la retención de usuarios y se monitorearán los cambios en las tasas de reversión y de bloqueo.
* [[File:Reload icon with two arrows.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]]. Por ejemplo, se ha solucionado un error en la aplicación de Wikipedia para Android que provocaba que las imágenes a veces no se cargaran después de abrir una notificación de lista de lectura recomendada. [https://phabricator.wikimedia.org/T418231]
'''Actualizaciones para los colaboradores técnicos'''
* El [[mw:Special:MyLanguage/Wikidata Platform|equipo de la Plataforma de Wikidata]] ha publicado su [[d:Special:MyLanguage/Wikidata:SPARQL query service/WDQS backend update/Backend Replacement|recomendación para el reemplazo del ''backend'']] y la [[wikitech:Wikidata Query Service/WDQS Architecture re-design|arquitectura técnica]] complementaria para la migración del Wikidata Query Service (WDQS) fuera de Blazegraph. Se invita a dejar comentarios hasta el 25 de mayo de 2026, especialmente sobre posibles vacíos e impactos en casos de uso avanzados. Asimismo, se anima a los miembros de la comunidad de Wikidata y a los usuarios del WDQS a ayudar a identificar herramientas y flujos de trabajo de alto impacto que puedan requerir atención en [[d:Wikidata:SPARQL query service/WDQS backend update/High-Impact Use Cases|esta página]]. Los comentarios se pueden compartir en la [[d:Wikidata talk:SPARQL query service/WDQS backend update|página de discusión de la migración]] o durante la [[d:Special:MyLanguage/Wikidata:Blazegraph Migration Office Hours|próxima hora de consultas]]. Consulte el [[d:Special:MyLanguage/Wikidata:Wikidata Platform team/Newsletter|boletín del equipo]] para obtener más detalles.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.47/wmf.3|MediaWiki]]
'''A fondo'''
* En las Wikipedias en inglés, francés, japonés y otras más, se realizó una [[diffblog:2025/09/02/better-detecting-bots-and-replacing-our-captcha/|prueba de hCaptcha]], un servicio de terceros para la detección de bots. La prueba demostró que hCaptcha detectó y disuadió de manera efectiva las actividades automatizadas de mala fe, entregando a los [[w:en:Wikipedia:Village pump (technical)/Archive 225#Introducing SuggestedInvestigations|checkusers y stewards]] información valiosa para su revisión. Debido a estos resultados positivos, hCaptcha se implementará en todas las wikis en las próximas semanas. [[mw:Special:MyLanguage/Product Safety and Integrity/Anti-abuse signals/hCaptcha|Consulte la página del proyecto hCaptcha]] para obtener información técnica sobre la implementación y las garantías de privacidad. [[diffblog:2026/05/04/better-detecting-bots-and-replacing-our-captcha-part-2/|Leer más]]
* Ya está disponible la última actualización de Tecnología Comunitaria, que detalla el progreso en varias iniciativas de la Lista de deseos de la comunidad. Esto incluye la expansión de las listas de lectura desde la aplicación móvil hacia el sitio web, nuevo soporte de idiomas para «¿Quién escribió eso?» y el panel de control personal, mejoras en los gráficos y el renderizado 3D, así como el trabajo futuro en la ordenación de páginas de discusión, reproducción de audio y flujos de trabajo de edición. La actualización también comparte las prioridades actuales, las tendencias del estado de los deseos y oportunidades para dejar comentarios sobre las futuras áreas de interés y el Plan Anual 2026-2027 de la Fundación Wikimedia. [[m:Special:MyLanguage/Community Wishlist/Updates#May 13, 2026: Latest updates from the Community Tech team|Lea el boletín completo para más detalles]].
''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/2026/21|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-2026-W21"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:21 18 may 2026 (UTC)
<!-- Mensaje enviado por Usuario:STei (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30539262 -->
== Noticias técnicas: 2026-22 ==
<section begin="technews-2026-W22"/><div class="plainlinks">
Las últimas '''[[m:Special:MyLanguage/Tech/News|noticias 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/2026/22|Traducciones en varios idiomas]] están disponibles.
'''Lo más destacado de la semana'''
* Siguiendo un [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#LOWM|experimento exitoso de creación de cuentas]], se desplegará un nuevo mensaje de aviso en la edición para las personas sin iniciar sesión en todas las wikis de Wikimedia a partir de la primera semana de junio. Este cambio afectará a los usuarios sin registrarse que abran la interfaz para editar con una cuenta temporal. Los resultados del experimento mostraron un aumento significativo en la creación de cuentas, con un incremento relativo del 27 % entre los usuarios que recibieron el mensaje actualizado. Se espera que, mientras más personas accedan al flujo de creación de cuenta, las cuentas temporales disminuyan en un 16 %. El experimento no mostró cambios significativos en las tasas de ediciones constructivas ni en otras métricas de contribución monitoreadas. [https://phabricator.wikimedia.org/T424595]
'''Actualizaciones para editores'''
* Por razones de seguridad, las personas integrantes de ciertos grupos de usuarios están [[m:Special:MyLanguage/Mandatory two-factor authentication for users with some extended rights|obligadas a activar la autenticación de dos factores]] (2FA). Quienes integren dichos grupos no podrán deshabilitar todos los factores de autenticación de sus cuentas, y será imposible añadir a usuarios que no usen 2FA a esos grupos. Los usuarios aún podrán añadir o eliminar nuevos mecanismos de verificación siempre y cuando mantengan al menos uno activo. En las próximas semanas, los usuarios que no tengan configurado el 2FA serán removidos de esos grupos de manera automática. Cabe destacar que esta medida también se aplica a los burócratas. Consulta las tareas enlazadas para conocer el calendario de despliegue. [https://phabricator.wikimedia.org/T423119][https://phabricator.wikimedia.org/T423120]
* El equipo de [[m:Special:MyLanguage/WMDE Technical Wishes|Deseos Técnicos de WMDE]] ejecutará una [[w:es:Prueba A/B|prueba A/B]] en [[:phab:T415904|10 wikis]], en la que evaluará [[m:WMDE Technical Wishes/References/Reference Previews|posibles mejoras en las previsualizaciones de referencias]]. El experimento se mantendrá activo durante dos semanas, entre finales de mayo y principios de junio, afectando al 10 % de los lectores de la versión de escritorio en las wikis participantes.
* Tras dos experimentos exitosos, el equipo de Crecimiento de la Lectura lanzará la función beta [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Navegación de imágenes]] en todas las versiones web móviles de Wikipedia el 25 de mayo. Esto significa que los usuarios que tengan activadas las funciones beta por defecto comenzarán a ver esta característica, mientras que los demás podrán habilitarla desde sus preferencias. Esta función beta incluirá un carrusel con todas las imágenes al inicio del artículo, además de controles para que los editores puedan [[mw:Readers/Reader_Growth/Image_Browsing#Phase_2.1_beta_feature|excluir imágenes específicas o el artículo completo de esta funcionalidad]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:30}} {{PLURAL:30|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 resolvió un problema con los archivos STL tridimensionales, que estaban siendo renderizados incorrectamente por la extensión 3D del visor de medios. [https://phabricator.wikimedia.org/T416723]
'''Actualizaciones para los colaboradores técnicos'''
* Las clases CSS obsoletas <bdi lang="zxx" dir="ltr"><code><nowiki>tleft</nowiki></code></bdi> y <bdi lang="zxx" dir="ltr"><code><nowiki>tright</nowiki></code></bdi> han sido reemplazadas por <bdi lang="zxx" dir="ltr"><code><nowiki>floatleft</nowiki></code></bdi> y <bdi lang="zxx" dir="ltr"><code><nowiki>floatright</nowiki></code></bdi>, debido a que no funcionaban de manera consistente en todas las plataformas de MediaWiki, principalmente en la web móvil y las aplicaciones móviles. Se anima a los proyectos que dependen de estas clases a revisar su uso y planificar su migración. Asimismo, se hace un llamado a considerar que <bdi lang="zxx" dir="ltr"><code><nowiki>floatleft</nowiki></code></bdi> y <bdi lang="zxx" dir="ltr"><code><nowiki>floatright</nowiki></code></bdi> también podrían ser marcadas como obsoletas en el futuro, aunque actualmente no hay planes para hacerlo. [[phab:T426452|Leer más]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.47/wmf.4|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/2026/22|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-2026-W22"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:52 25 may 2026 (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=30584502 -->
== Vota ahora en las elecciones del U4C de 2026 ==
<section begin="announcement-content" />
Se invita a las y los votantes con derecho a voto a participar en las elecciones de 2026 del [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Comité de Coordinación del Código de Conducta Universal]]. En Meta, en la [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026|página de información sobre las elecciones de 2026]], hay disponible más información, incluyendo una comprobación de elegibilidad, información sobre el proceso de votación, información sobre las y los candidatos y un enlace a la votación. La votación finaliza el 2 de junio de 2026 a las [https://zonestamp.toolforge.org/1780358400 00:00 UTC].
Por favor, vota si tu cuenta es elegible. Los resultados estarán disponibles para el 14 de junio de 2026. -- En cooperación con la U4C,<section end="announcement-content" />
[[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 17:15 27 may 2026 (UTC)
<!-- 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=30513860 -->
== Noticias técnicas: 2026-23 ==
<section begin="technews-2026-W23"/><div class="plainlinks">
Las últimas '''[[m:Special:MyLanguage/Tech/News|noticias 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/2026/23|Traducciones en varios idiomas]] están disponibles.
'''Actualizaciones para editores'''
* El [[mw:Special:MyLanguage/Readers/Reader Experience|equipo de Experiencia de Lectura]] está desarrollando un experimento para mostrar la función beta de [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|listas de lectura]] a los usuarios sin sesión iniciada. El objetivo es evaluar si esta herramienta incentiva de mejor manera la creación de cuentas en comparación con el botón de la lista de seguimiento. El [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists#Experiment timeline|experimento]] se lanzó el 18 de mayo en las Wikipedias en alemán, español, italiano, portugués, polaco, neerlandés, turco y urdu, y se mantendrá activo durante un mes.
* El equipo de Wikimedia Apps ha lanzado la [[mw:Special:MyLanguage/Wikimedia Apps/Team/Explore Feed Refresh/Phase 1|fase 1]] del rediseño del feed de la página de inicio en la versión beta de la aplicación para Android. El nuevo feed incluye una sección renovada de "Comunidad" y una pestaña personalizada de «Para ti» que muestra recomendaciones diarias personalizadas. Este rediseño forma parte de los esfuerzos para mejorar el descubrimiento de contenidos y crear experiencias más atractivas en las aplicaciones de Wikipedia.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:18}} {{PLURAL:18|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 por el cual las imágenes no se cargaban en algunas ediciones sugeridas en [[w:Special:Homepage|Special:Homepage]], lo que dejaba la miniatura colgada en estado de carga. [https://phabricator.wikimedia.org/T424048]
'''Actualizaciones para los colaboradores técnicos'''
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.47/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/2026/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-2026-W23"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:08 1 jun 2026 (UTC)
<!-- Mensaje enviado por Usuario:STei (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30613639 -->
== Noticias técnicas: 2026-24 ==
<section begin="technews-2026-W24"/><div class="plainlinks">
Las últimas '''[[m:Special:MyLanguage/Tech/News|noticias 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/2026/24|Traducciones en varios idiomas]] están disponibles.
'''Lo más destacado de la semana'''
* Wikimedia Enterprise ha aumentado el límite gratuito que ofrece para sus API. El límite mensual de solicitudes para la API bajo demanda se incrementó de 5000 a 50 000 peticiones, mientras que el límite de la API de instantáneas (Snapshot) aumentó de 15 a 30 solicitudes por mes. Además, las instantáneas de contenido estructurado ya se encuentran disponibles para las cuentas gratuitas. Estos cambios expanden el acceso a los datos de Wikimedia Enterprise para desarrolladores, investigadores y organizaciones que utilizan contenidos de Wikimedia. [https://enterprise.wikimedia.com/blog/enhanced-free-api]
'''Actualizaciones para editores'''
* El [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Explore Feed Refresh/Phase 1|feed Explorar renovado]], ahora llamado feed de Inicio, se está lanzando al 50 % de los usuarios de la aplicación de Wikipedia para Android. Este feed ayuda a los lectores a descubrir contenidos mediante dos pestañas nuevas: «Comunidad» y «Para ti». La pestaña de Comunidad muestra un feed de contenidos curados y actualizaciones de la comunidad Wikimedia y del movimiento, mientras que la pestaña «Para ti» entrega una experiencia a pantalla completa que muestra contenidos de acuerdo con los intereses del usuario. Este rediseño forma parte de un esfuerzo con el fin de mejorar el descubrimiento de contenidos y la experiencia de aprendizaje en la app de Wikipedia.
* El juego de trivia diario [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/"Which came first?" Game|¿Qué fue primero?]] ya está disponible en la versión beta de la aplicación de Wikipedia para iOS en inglés, alemán, francés, portugués, ruso, español, árabe, chino y turco. El juego utiliza eventos históricos extraídos de la sección «En este día» de Wikipedia y desafía al lector a adivinar cuál de dos acontecimientos ocurrió primero. Esta función ya se había lanzado previamente en Android. Las comunidades interesadas en que el juego esté disponible en su idioma pueden [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Games#Game availability by language|consultar las instrucciones y los requisitos]].
* [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Subreferenciación]], una nueva función de MediaWiki que permite a los editores reutilizar referencias añadiendo detalles específicos, se comenzará a desplegar en las wikis de Wikimedia tras una exitosa fase piloto. El despliegue iniciará el 8 de junio para la mayoría [[wikitech:Deployments/Train#Wednesday|de las wikis del Grupo 1]] y la Wikipedia en francés, mientras que las demás versiones de Wikipedia comenzarán a recibir esta característica en los meses siguientes. Se anima a las comunidades a prepararse revisando los [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-cite&language=en&action_source=search&filter=%21translated&optional=1&action=translate mensajes sin traducir de la extensión Cite] en sus respectivos idiomas y verificando el uso de [[mw:Special:MyLanguage/Reference Tooltips|Reference Tooltips]], que podrían requerir una [[:phab:T416304#11668731|actualización]] para dar soporte a la nueva funcionalidad. Las wikis que utilizan la [[mw:Special:MyLanguage/Help:Reference Previews|vista previa de referencias]] estándar no necesitan realizar ninguna acción. Asimismo, las comunidades pueden crear la [[Special:TrackingCategories|categoría de seguimiento]] ''cite-tracking-category-ref-details'' como una categoría oculta usando <code><nowiki>__HIDDENCAT__</nowiki></code> (o una plantilla dedicada a este propósito) y conectarla con el elemento de Wikidata [[d:Q129764848]]. [https://phabricator.wikimedia.org/T425662]
* El [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews#Experimentation|experimento de Page Previews]] ha finalizado en la web móvil. El equipo ha decidido no lanzar la característica después de que los resultados no mostraron un impacto significativo en la retención de lectores, que fue definida como la principal métrica del estudio. Page Previews, la cual ya está disponible en las versiones de escritorio y apps, muestra una miniatura, un párrafo inicial y un enlace al artículo completo cuando el usuario selecciona un enlace en azul. El experimento probó esta experiencia en la web para dispositivos móviles en seis Wikipedias.
* La [[mw:Special:MyLanguage/Codex/Design/Icons|biblioteca de iconos para la interfaz de usuario]] será [[phab:T399175|actualizada esta o la próxima semana]]. Cerca de 300 iconos han sido ligeramente redefinidos y se han añadido aproximadamente 30 iconos nuevos. Estos cambios mejorarán los iconos para hacerlos más consistentes y fáciles de entender y proveerán un balance visual cuando se usen en grupos.
* La interfaz del [[mw:Special:MyLanguage/Universal Language Selector|Selector de Idioma Universal]] (ULS en inglés), el cual ayuda a los usuarios a seleccionar contenidos en otros idiomas, fue actualizada. La nueva versión mejora la velocidad y la accesibilidad, y los usuarios de proyectos Wikimedia ahora pueden fijar los idiomas para un cambio más rápido. El despliegue en los sitios de Wikimedia será gradual durante las próximas semanas. Puedes probarlo como una función beta seleccionando [[Special:Preferences#mw-prefsection-betafeatures|funciones beta]] en las preferencias de tu perfil y compartir tus comentarios en [[mw:Special:MyLanguage/Universal Language Selector/New ULS|la página del proyecto]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:21}} {{PLURAL:21|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 resolvió un problema que afectaba al panel de Análisis de Vistas en pageviews.wmcloud.org, el cual había dejado de actualizar los gráficos de mayo de 2026, lo que afectaba a todos los usuarios. [https://phabricator.wikimedia.org/T427171]
'''Actualizaciones para los colaboradores técnicos'''
* La firma de la función <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink()</nowiki></code></bdi> ha sido simplificada. Los desarrolladores ahora pueden pasar el objeto de configuración en lugar de una lista de parámetros posicionales al crear enlaces de portlet. La firma de la función anterior mantendrá la compatibilidad heredada. Por ejemplo, en lugar de <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', '#', 'Stub', 'ca-stubtag', 'Add a stub tag to this page');</nowiki></code></bdi>, use <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', { href: '#', text: 'Stub', id: 'ca-stubtag', tooltip: 'Add a stub tag to this page' });</nowiki></code></bdi>. Se anima a los mantenedores de scripts a revisar los usos existentes de <bdi lang="zxx" dir="ltr"><code><nowiki>addPortletLink()</nowiki></code></bdi> y actualizarlos donde corresponda. Este cambio estará disponible en todas las wikis a partir del 11 de junio. Gracias al voluntario comunitario Gerges por contribuir a esta mejora. [https://phabricator.wikimedia.org/T427945]
* '''Discusión sobre la Lista de deseos de la comunidad''': Producto y Tecnología [[m:Special:MyLanguage/Community Wishlist/Updates#May 20, 2026: Community Tech becomes a program|introdujo cambios]] destinados a aumentar el número y la complejidad de los deseos cumplidos, incluyendo la disolución del equipo de Tecnología Comunitaria. Actualmente, se encuentran [[m:Special:MyLanguage/Community Wishlist/Updates|participando en discusiones]] sobre una [[m:Talk:Community Wishlist#Proposed direction for Wishlist|propuesta de dirección alternativa para la lista de deseos]] presentada por miembros de la comunidad. Esto incluye formas de estructurar la votación anual, un mejor seguimiento de los deseos, la eliminación de las áreas de enfoque y [[m:Special:MyLanguage/Community Wishlist/Updates|actualizaciones sobre el personal]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.47/wmf.6|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/2026/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-2026-W24"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:30 8 jun 2026 (UTC)
<!-- Mensaje enviado por Usuario:STei (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30650573 -->
== Uso de invariable vs invariante en los géneros de los adjetivos ==
Estimados: Como recordarán se había discutido si usar la palabra "invariante o invariable" en relación al género de los adjetivos. Al leer la discusión, me dio la impresión que se había optado por "invariable". Sin embargo, en las páginas quedó "invariante". Debo recordar que nosotros no somos fuente primaria por lo que no podemos inventar conceptos. Así, invariable es [https://www.rae.es/gtg/invariable]. En cambio, invariante es [https://www.rae.es/dpd/invariante]. Saludos cordiales. [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 23:00 11 jun 2026 (UTC)
:En principio coincido en usar "invariable", como manifesté en [[WN:Café/2026 05#Géneros en francés y español]]. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 23:07 11 jun 2026 (UTC)
:Hola, como ya dije no veo mucha diferencia entre ambos términos ni tampoco me queda claro de que exista un consenso generalizado en toda la comunidad por hacer la distinción que propone el DLE. Dicho esto, prefiero mantener la denominación que se venía usando para los sustantivos y adjetivos que no flexionan nada en absoluto, que es "invariante", puesto que lo correcto sería modificar todas las categorías que digan "invariante" por "invariable". Esto lo digo porque si modificamos todas las categorías perderíamos las redirecciones de Google, asunto que fue en su momento tan importante cuando propuse eliminar de cuajo las páginas con las denominaciones antiguas que se usaban para el tesauro. Si ese argumento valió en su momento, no veo razón para no usarlo ahora.
:Aparte en lo personal menos ganas me dan de acceder a los caprichos de [[Usuario:Adelpine|Adelpine]] después de [[Special:Diff/6117749|su diatriba contra este proyecto]], insinuando que el contenido es de mala calidad y que malinformamos a los escolares, cuando todavía no aportó ninguna prueba concreta: ni de que "no estamos entre los mejores diccionarios", ni de que ahora con esta modificación sí pasaríamos a estarlo, ni de que somos o debamos ser profesionales cuando aquí se trabaja plenamente ad honorem, ni de que tengamos que estar alineados con la visión de todas o alguna institución educativa. Realmente no entendí a qué quiere llegar con ninguno de sus dos comentarios. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 23:53 11 jun 2026 (UTC)
::Lo de Google tiene fácil solución: no borrar las redirecciones. Lo de Adelpine no es una diatriba ([https://dle.rae.es/diatriba "discurso o escrito acre y violento contra alguien o algo"]) ni aprecio por su parte que afirme que Wikcionario sea de mala calidad. Lo de que no estamos entre los mejores diccionarios se podría expresar de otra forma con [[WN:Wikcionario no es una fuente primaria]]. Esto es, sí dependemos de otras fuentes "oficiales", profesionales, educativas, etc. para reflejar nuestra propia calidad. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 00:12 12 jun 2026 (UTC)
== Noticias técnicas: 2026-25 ==
<section begin="technews-2026-W25"/><div class="plainlinks">
Las últimas '''[[m:Special:MyLanguage/Tech/News|noticias 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/2026/25|Traducciones en varios idiomas]] están disponibles.
'''Lo más destacado de la semana'''
* El [[mw:Special:MyLanguage/Readers/Reader Growth|equipo de Crecimiento de Lectura]] ha lanzado la función beta [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Image Browsing]] en la versión de la web móvil de todas las Wikipedias. La característica muestra un carrusel de imágenes al inicio del artículo con 3 o más imágenes. Los editores pueden configurar esta característica con los siguientes controles: ocultar una imagen específica de una página, usando <code>class=notpageimage</code> para excluirla de la vista previa de miniaturas; o <code>class=noviewer</code> para excluirla de MediaViewer. El carrusel también se puede deshabilitar en una página utilizando la palabra mágica <code><nowiki>__NOMEDIAVIEWERCAROUSEL__</nowiki></code>. Para enviar retroalimentación o reportar fallos, por favor visite la [[mw:Talk:Readers/Reader Growth/Image Browsing|página del proyecto]].
* [[mw:Special:MyLanguage/Help:Tables#class="wikitable"|Wikitablas]] pueden ser [[mw:Special:MyLanguage/Help:Sortable tables#Forcing the initial sort direction|ordenadas en orden descendente]] al hacer el primer clic al añadir <code dir=ltr>data-sort-order="desc"</code> en la celda de encabezado. Anteriormente, por defecto, al hacer clic en el encabezado de una columna por primera vez, se ordenaba de manera ascendente. Esta opción añade más control y flexibilidad a las wikitablas, mientras se mantiene el comportamiento por defecto de los clics posteriores. [https://phabricator.wikimedia.org/T398416]
'''Actualizaciones para editores'''
* La [[mw:Special:MyLanguage/Article guidance|asistencia de artículos]] es una función que se está probando actualmente con algunos editores al crear nuevos artículos en las Wikipedias en inglés simple, francés y turco. El experimento comenzará próximamente en las Wikipedias en árabe y bengalí. [[w:simple:Special:NewArticle|Esta función]] les entrega una guía creada por la comunidad a los editores para ayudarles a crear algunos artículos siguiendo los estándares comunitarios. Los usuarios con experiencia pueden seguir creando o adaptando criterios para tipos específicos de artículos que comúnmente son creados por usuarios con menos experiencia. Las pautas guían a los usuarios con menos experiencia en la creación de artículos de mejor calidad. Se puede consultar una guía rápida del el marcado usado en las pautas en [[mw:Special:MyLanguage/Article guidance/Test feature guide#Markups in outlines|esta página]]. [[w:simple:Wikipedia:Article Guidance|Las pautas de ejemplos]] que pueden ser adaptadas y sus instrucciones de cómo adaptarlas se encuentran en [[mw:Special:MyLanguage/Article guidance#Adapting a sample outline in a Wikipedia|esta sección]] de la página del proyecto.
* Las wikis que deseen reemplazar el botón "Indefinido" en la página de Especial:Bloquear para cuentas temporales (por ejemplo, wikis que bloquean a los usuarios temporales hasta la expiración de su cuenta) pueden hacerlo al crear [[MediaWiki:ipb-indefinite-expiry-temporary-account]] con la duración del bloqueo que deseen. [https://phabricator.wikimedia.org/T427125]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:41}} {{PLURAL:41|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 finales de junio, se comenzará a requerir una cadena de agente de usuario (''user-agent'') para las descargas automáticas desde dumps.wikimedia.org. Las solicitudes automáticas que provean un agente genérico o vacío serán bloqueadas. Esto es parte del [[phab:T400119|cumplimiento de las normas]] de la [[foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|política de agente de usuario]]. No se cambiará el acceso a los dumps mediante Wikimedia Cloud Services.
* Se completó el proceso de implementación de los [[mw:Wikimedia APIs/Rate limits|límites de solicitudes de la API]], con el cumplimiento de la política en todas las API y con su documentación de niveles para todos los grupos. Bots que se ejecutan desde Toolfoge/WMCS o bots con permisos de usuarios de bot en cualquier wiki se mantendrán exceptuados. Todos los bots deberán seguir las buenas prácticas documentadas para evitar ser limitados.
* La [https://api.wikimedia.org/wiki/Main_Page wiki de API Portal] será marcada como solo lectura a partir de esta semana (del 15 al 18 de junio). La semana siguiente (del 22 al 25 de junio), todas las URLs del portal serán redirigidas a [[mw:Wikimedia APIs|APIs de Wikimedia en mediawiki.org]]. Lee más información en [[wikitech:API Portal/Deprecation|la página del proyecto]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Elemento recurrente]] Actualizaciones detalladas de código de esta semana: [[mw:MediaWiki 1.47/wmf.7|MediaWiki]]
'''Reuniones y eventos'''
* El 17 de junio a las 6pm UTC, la WMF sostendrá una llamada de Discord enfocada en la revisión de código. Hemos escuchado a través de la [[mw:Special:MyLanguage/Developer Satisfaction Survey/2026|Encuesta de satisfacción de desarrolladores]] que los voluntarios tienen problemas con la revisión de código y deseamos discutir sus experiencias, con el objetivo de plantear soluciones. Puedes unirte a la llamada [https://discord.gg/wikipedia?event=1514727511102062664 mediante el servidor de Discord de la comunidad Wikimedia].
* La [[m:Special:MyLanguage/Conferencia Wikimedia de América Latina 2026|Conferencia de Latinoamérica]] tendrá una sesión de hackathon regional que reunirá a la comunidad técnica, que incluye desarrolladores, administradores de sistemas, científicos de datos y usuarios con permisos extendidos. Las personas interesadas en participar pueden [https://docs.google.com/forms/d/e/1FAIpQLSf4osJzTHBJjQbYJk7TMVEJjTEQv7IgtsUDfP-o-qTgeRQQxw/viewform solicitar una beca] para participar hasta el 21 de junio a medianoche (hora de Bolivia, UTC-4)
* Apúntate a los Desafíos en Equipos de Wikimanía para unirte a este evento especial. Los desafíos en equipos tendrán lugar en línea y en persona los días 21 y 22 de julio, antes de la Wikimania. Todas las personas son bienvenidas, sin importar sus conocimientos o su participación en Wikimania. Los equipos trabajarán en 10 desafíos importantes que apoyen a la comunidad Wikimedia. Para más detalles, visita [[wmania:Special:MyLanguage/2026:Team challenges|la página del desafío]] y [https://wikimedia.eventyay.com/wm/teamchallenges/ regístrate aquí]. El registro cierra el 20 de junio a las 11pm UTC.
''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/2026/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-2026-W25"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:48 15 jun 2026 (UTC)
<!-- Mensaje enviado por Usuario:UOzurumba (WMF)@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30689604 -->
8qd4ftejcldzklope0j1lw3m1f6k3ur
Canadá
0
3677
6118114
6117960
2026-06-16T00:31:50Z
Enohecruzl79
181484
se agregó audio voz femenina
6118114
wikitext
text/x-wiki
{{desambiguación|Canada|canada|Canadà|cañada}}
== {{lengua|es}} ==
{{pron-graf|1audio1=Es-Canadá.oga|audio2 =LL-Q1321 (spa)-Enohecruzl79-Canadá.wav|aunota2=voz femenina mexicana}}
=== Etimología ===
{{etimología|lre|kanata|aldea}}.
=== {{sustantivo propio|es|masculino}} ===
[[Archivo:Canada in its region.svg|miniaturadeimagen|[1] Ubicación resaltada en rojo]][[Archivo:Flag of Canada (Pantone).svg|240px|miniaturadeimagen|Bandera de Canadá]]
;1 {{csem|países}}: {{plm|país}} de {{l|es|Norteamérica}}, que ocupa la mayor parte de ese {{l|es|subcontinente}}. Es el país más {{l|es|septentrional}} del {{l|es|mundo}} y el {{l|es|segundo}} con el {{l|es|mayor}} {{l|es|territorio}}. {{l|es|limitar|Limita}} al {{l|es|sur}} y al {{l|es|occidente}} con los {{l|es|Estados Unidos de América}} y al noreste con {{l|es|Groenlandia}}.
{{topónimo|capital1=Ottawa|gentilicio1=canadiense|idioma1=francés|idioma2=inglés|iso1=124|iso2=CAN|iso3=CA|moneda1=dólar|símbolo1=🇨🇦}}
=== Véase también ===
* [[:Categoría:Canadá|Categoría:Canadá]]
{{Commons}}
{{Wikipedia}}
{{Wikinoticias}}
{{Wikiquote}}
{{Wikisource}}
{{Wikiviajes}}
=== Traducciones ===
{{trad-arriba}}
{{t|ace|a1=1|t1=Kanada}}
{{t|af|a1=1|t1=Kanada}}
{{t|sh|a1=1|a2=1|t1=Kanada|t2=Канада}}
{{t|sq|a1=1|t1=Kanadaja}}
{{t|de|a1=1|t1=Kanada}}
{{t|gsw|a1=1|t1=Kanada}}
{{t|hsb|a1=1|t1=Kanada}}
{{t|am|a1=1|t1=ካናዳ}}
{{t|ar|a1=1|t1=كندا}}
{{t|an|a1=1|t1=Canadá}}
{{t|arc|a1=1|t1=ܩܢܕܐ}}
{{t|hy|a1=1|t1=Կանադա}}
{{t|ast|a1=1|t1=Canadá}}
{{t|az|a1=1|t1=Kanada}}
{{t|nds-de|a1=1|t1=Kanada}}
{{t|dsb|a1=1|t1=Kanada}}
{{t|bm|a1=1|t1=Kanada}}
{{t|ba|a1=1|t1=Канада}}
{{t|bar|a1=1|t1=Kanada}}
{{t|bn|a1=1|t1=কানাডা}}
{{t|be|a1=1|t1=Канада}}
{{t|my|a1=1|t1=ကနေဒါနိုင်ငံ}}
{{t|bi|a1=1|t1=Kanada}}
{{t|br|a1=1|t1=Kanada}}
{{t|bg|a1=1|t1=Канада}}
{{t|kab|a1=1|t1=Kanada}}
{{t|yue|a1=1|t1=加拿大}}
{{t|csb|a1=1|t1=Kanada}}
{{t|ca|a1=1|t1=Canadà}}
{{t|ceb|a1=1|t1=Canada}}
{{t|cs|a1=1|t1=Kanada}}
{{t|cv|a1=1|t1=Канада}}
{{t|ko|a1=1|t1=캐나다}}
{{t|kw|a1=1|t1=Kanada}}
{{t|co|a1=1|t1=Canadà}}
{{t|cr|a1=1|t1=ᑳᓇᑕ}}
{{t|ht|a1=1|t1=Kanada}}
{{t|da|a1=1|t1=Canada}}
{{t|dv|a1=1|t1=ކެނެޑާ}}
{{t|dz|a1=1|t1=ཀེ་ན་ཌ་}}
{{t|sco|a1=1|t1=Canadae}}
{{t|cu|a1=1|t1=Канада}}
{{t|sk|a1=1|t1=Kanada}}
{{t|sl|a1=1|t1=Kanada}}
{{t|eo|a1=1|t1=Kanado}}
{{t|et|a1=1|t1=Kanada}}
{{t|eu|a1=1|t1=Kanada}}
{{t|ext|a1=1|t1=Canadá}}
{{t|ee|a1=1|t1=Canada}}
{{t|fo|a1=1|t1=Kanada}}
{{t|fi|a1=1|t1=Kanada}}
{{t|vls|a1=1|t1=Canada}}
{{t|fr|a1=1|g1=m|t1=Canada}}
{{t|frp|a1=1|t1=Canada}}
{{t|fy|a1=1|t1=Kanada}}
{{t|gd|a1=1|t1=Canada}}
{{t|cy|a1=1|t1=Canada}}
{{t|gl|a1=1|t1=Canadá}}
{{t|ka|a1=1|t1=კანადა}}
{{t|el|a1=1|t1=Καναδάς}}
{{t|kl|a1=1|t1=Canada}}
{{t|gn|a1=1|t1=Kanatã}}
{{t|haw|a1=1|t1=Kanakā}}
{{t|he|a1=1|t1=קנדה}}
{{t|hi|a1=1|t1=कनाडा}}
{{t|hu|a1=1|t1=Kanada}}
{{t|io|a1=1|t1=Kanada}}
{{t|ig|a1=1|t1=Canada}}
{{t|ilo|a1=1|t1=Canada}}
{{t|id|a1=1|t1=Kanada}}
{{t|en|a1=1|t1=Canada}}
{{t|ia|a1=1|t1=Canada}}
{{t|iu|a1=1|t1=ᑲᓇᑕ}}
{{t|ik|a1=1|t1=Canada}}
{{t|ga|a1=1|t1=Ceanada}}
{{t|is|a1=1|t1=Kanada}}
{{t|it|a1=1|g1=m|t1=Canada}}
{{t|ja|a1=1|t1=カナダ}}
{{t|jv|a1=1|t1=Kanada}}
{{t|nrm|a1=1|t1=Cannada}}
{{t|kn|a1=1|t1=ಕೆನಡಾ}}
{{t|kk|a1=1|t1=Канада}}
{{t|ky|a1=1|t1=Канада}}
{{t|clm|a1=1|t1=tɬnáʔəč}}
{{t|kv|a1=1|t1=Канада}}
{{t|ku|a1=1|t1=Kanada}}
{{t|la|a1=1|t1=Canada}}
{{t|lv|a1=1|t1=Kanāda}}
{{t|lij|a1=1|t1=Canada}}
{{t|li|a1=1|t1=Canada}}
{{t|ln|a1=1|t1=Kanadá}}
{{t|lt|a1=1|t1=Kanada}}
{{t|jbo|a1=1|t1=kadnygu'e}}
{{t|lmo|a1=1|t1=Canada}}
{{t|lb|a1=1|t1=Kanada}}
{{t|mk|a1=1|t1=Канада}}
{{t|ml|a1=1|t1=കാനഡ}}
{{t|ms|a1=1|t1=Kanada}}
{{t|mg|a1=1|t1=Kanada}}
{{t|zh|a1=1|t1=加拿大}}
{{t|gv|a1=1|t1=Yn Chanadey}}
{{t|mr|a1=1|t1=कॅनडा}}
{{t|nan|a1=1|t1=Canada}}
{{t|mn|a1=1|t1=Канад}}
{{t|nhn|a1=1|t1=Canada}}
{{t|nap|a1=1|t1=Canadà}}
{{t|na|a1=1|t1=Canada}}
{{t|nv|a1=1|t1=Deetéél Bikéyah}}
{{t|nl|a1=1|t1=Canada}}
{{t|ne|a1=1|t1=क्यानाडा}}
{{t|nb|a1=1|t1=Canada}}
{{t|nn|a1=1|t1=Canada}}
{{t|nov|a1=1|t1=Kanada}}
{{t|oc|a1=1|t1=Canadà}}
{{t|om|a1=1|t1=Canada}}
{{t|os|a1=1|t1=Канадæ}}
{{t|pam|a1=1|t1=Canada}}
{{t|pa|a1=1|t1=ਕੈਨੇਡਾ}}
{{t|pap|a1=1|t1=Canada}}
{{t|ps|a1=1|t1=کاناډا}}
{{t|fa|a1=1|t1=کانادا}}
{{t|pms|a1=1|t1=Canadà}}
{{t|pih|a1=1|t1=Kaneda}}
{{t|pl|a1=1|t1=Kanada}}
{{t|pt|a1=1|t1=Canadá}}
{{t|quz|a1=1|t1=Kanada}}
{{t|rmy|a1=1|t1=Kanada}}
{{t|ro|a1=1|t1=Canada}}
{{t|ru|a1=1|t1=Канада}}
{{t|war|a1=1|t1=Kanada}}
{{t|se|a1=1|t1=Kanáda}}
{{t|sgs|a1=1|t1=Kanada}}
{{t|sa|a1=1|t1=केनडा}}
{{t|sc|a1=1|t1=Canada}}
{{t|sh|a1=1|t1=Kanada}}
{{t|scn|a1=1|t1=Canadà}}
{{t|so|a1=1|t1=Canada}}
{{t|sv|a1=1|t1=Kanada}}
{{t|sw|a1=1|t1=Kanada}}
{{t|tl|a1=1|t1=Kanada}}
{{t|ty|a1=1|t1=Tanata}}
{{t|th|a1=1|t1=ประเทศแคนาดา}}
{{t|ta|a1=1|t1=கனடா}}
{{t|tt|a1=1|t1=Канада}}
{{t|crh|a1=1|t1=Kanada}}
{{t|tg|a1=1|t1=Канада}}
{{t|te|a1=1|t1=కెనడా}}
{{t|tet|a1=1|t1=Kanadá}}
{{t|bo|a1=1|t1=ཁ་ན་ཌ།}}
{{t|tpi|a1=1|t1=Kanada}}
{{t|to|a1=1|t1=Kānata}}
{{t|tr|a1=1|t1=Kanada}}
{{t|uk|a1=1|t1=Канада}}
{{t|ug|a1=1|t1=Kanada}}
{{t|ur|a1=1|t1=کینیڈا}}
{{t|uz|a1=1|t1=Kanada}}
{{t|wa|a1=1|t1=Canada}}
{{t|vec|a1=1|t1=Canada}}
{{t|vi|a1=1|t1=Canada}}
{{t|vo|a1=1|t1=Kanadän}}
{{t|wo|a1=1|t1=Kanadaa}}
{{t|ts|a1=1|t1=Canada}}
{{t|sah|a1=1|t1=Канаада}}
{{t|yi|a1=1|t1=קאנאדע}}
{{t|yo|a1=1|t1=Kánádà}}
{{t|zu|a1=1|t1=IKhanada}}
{{trad-abajo}}
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== {{sustantivo propio|es|masculino}} ===
;1 {{csem|leng=gl|países}}: {{plm}}.
== {{lengua|yua}} ==
{{pron-graf|leng=yua}}
=== Etimología ===
{{etimología|leng=yua}}.
=== {{sustantivo|yua}} ===
;1 {{csem|leng=yua|países}}: {{plm|Canadá}}.
== {{lengua|nhn}} ==
{{pron-graf|leng=nhn}}
=== Etimología ===
{{etimología|leng=nhn}}.
=== {{sustantivo|nhn}} ===
;1 {{csem|leng=nhn|países}}: {{plm|Canadá}}.
== {{lengua|nch}} ==
{{pron-graf|leng=nch}}
=== Etimología ===
{{etimología|leng=nch}}.
=== {{sustantivo|nch}} ===
;1 {{csem|leng=nch|países}}: {{plm|Canadá}}.
== {{lengua|nhw}} ==
{{pron-graf|leng=nhw}}
=== Etimología ===
{{etimología|leng=nhw}}.
=== {{sustantivo propio|nhw}} ===
;1 {{csem|leng=nhw|países}}: {{plm|Canadá}}.
== {{lengua|vec}} ==
{{pron-graf|leng=vec}}
=== Etimología ===
{{etimología|leng=vec}}.
=== {{sustantivo|vec}} ===
;1 {{csem|leng=vec|países}}: {{plm|Canadá}}.
{{ámbito|leng=vec|Chipilo}}.
== {{lengua|zai}} ==
{{pron-graf|leng=zai}}
=== Etimología ===
{{etimología|leng=zai}}.
=== {{sustantivo propio|zai}} ===
;1 {{csem|leng=zai|países}}: {{plm|Canadá}}.
== Referencias y notas ==
<references />
t5h7765gs92qdw0k0aan4kon9o62oij
bucear
0
7252
6118187
6116333
2026-06-16T02:30:37Z
Tmagc
158167
6118187
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{etimología}}.
==== {{verbo intransitivo|es}} ====
[[File:Discover Scuba Diving -- St. Croix, US Virgin Islands.jpg|thumb|[1] persona buceando]]
;1: {{ucf|nadar}} [[sumergir|sumergido]] en el [[agua]] con o sin equipo especializado.
{{uso|se refiere a personas o animales que no pueden respirar bajo el agua}}
==== {{verbo transitivo|es}} ====
;2: Mirar a una persona con deseo sexual (coloquialmente "desnudar con la mirada").
{{ámbito|Venezuela}}
{{uso|coloquial|utci}}
==== Conjugación ====
{{es.v}}
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{t|de|t1=eintauchen}}
{{t|br|t1=splujañ}}
{{t|bg|t1=гмуркам се|t2=гмурвам се|t3=гмурна се}}
{{t|fr|t1=plonger}}
{{t|he|t1=לצלול}}
{{t|io|t1=plunjar}}
{{t|id|t1=terjun}}
{{t|en|t1=dive}}
{{t|it|t1=immergere}}
{{t|ja|t1=飛び込む}}
{{t|nl|t1=duiken}}
{{t|pl|t1=pikować}}
{{t|pt|t1=mergulhar}}
{{t|sv|t1=dyka}}
{{trad-abajo}}
== Referencias y notas ==
<references />
te26lb01j8altxs2ta8xk3uvmzqzyf4
play
0
7604
6118059
6048849
2026-06-15T14:12:42Z
Tmagc
158167
-
6118059
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|ayuda1=plei}}
=== Etimología 1 ===
{{etimología|en|play}}.
==== {{sustantivo masculino|es}} ====
{{es.sust|s}}
;1 {{csem|música}}: En los reproductores de música, el botón con el símbolo de triángulo que se usa para iniciar la canción.
{{uso|generalmente con las locuciones “poner play”, “darle al play”, “apretar el play”, etc.}}
{{ejemplo|Vino a hablarme uno medio gay<br>Yo ponía stop y el '''ponía play'''<br>Le gustaba el Big Mac y Tupac<br>Vendía crack y tomaba Prozac|a=El Cuarteto de Nos|c=canción|f=2006|t=Yendo a la casa de Damián}}
=== Etimología 2 ===
{{etimología|marca|Play Station}}
=== {{sustantivo femenino|es}} ===
{{es.sust|s=s}}
;1: Consola de videojuegos de la marca [[Play Station]].
{{ejemplo|La ''play 4'' la pagamos nosotros,<br>tu viaje a Europa lo costeamos nosotros.<br>Al director del cole nosotros adornamos,<br>para que no te rajen por fumar en el baño.|a=Los Herederos de Alberdi|c=canción|t=Son todos fachos menos yo}}
=== Traducciones ===
{{trad-arriba}}
{{trad-abajo}}
== {{lengua|en}} ==
{{pron-graf|leng=en
|2fone2=pʰlæɪ̯
|2fono1=plæɪ|2pron1=Australia, Nueva Zelanda|1audio2=LL-Q1860 (eng)-Back ache-play.wav|1audio3=en-us-play.ogg|1aunota2=Londres|1aunota3=California
|1fone2=pʰleɪ̯|1fono1=ˈpleɪ|ls=1|1pron1=Received Pronunciation, General American, Standard Canadian|rima=eɪ}}
=== Etimología ===
{{etimología|leng=en|ang|pleġian|ejercitar}}.
=== {{verbo intransitivo|en}} ===
;1: {{plm|jugar}}.
=== {{verbo transitivo|en}} ===
;2: {{plm|jugar}} (un juego o deporte).
{{ejemplo|Do you want to play hide and seek?|trad=¿Quieres jugar a las escondidas?}}
;3: {{plm|representar}} (un papel teatral o un rol social).
;4: {{plm|tocar}} (un instrumento musical o género).
;5: {{plm|reproducir}} (una grabación de audio o video).
=== {{sustantivo|en}} ===
{{en.sust|ci}}
;6: {{plm|juego}}.
;7: {{plm|dramatización}}, [[representación]] (teatral); [[obra]] de teatro.
;8: {{plm|jugada}}; [[movida]] (en un juego).
;9: Consola de videojuegos.
=== Conjugación ===
{{en.v}}
== Referencias y notas ==
<references />
mqr9c79tvb4gg4poxdhayyjp3xedfrl
gato
0
7720
6118104
6094739
2026-06-15T23:34:59Z
Starbits140
183106
6118104
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|1audio1=LL-Q1321 (spa)-Millars-gato.wav|1aunota1=España}}
=== Etimología 1 ===
{{etimología|la-vul|cattus}}<ref>{{DRAE2001}}</ref>, {{etim|la|catta}}<ref>{{OED|cat}}</ref>, de origen incierto. La hipótesis más probable lo deriva de alguna lengua afroasiática.<ref>{{etymonline|cat}}</ref> Compárese el catalán {{l+|ca|gat}}, el francés {{l+|fr|chat}}, el inglés {{l+|en|cat}}, el italiano {{l+|it|gatto}} o el portugués {{l+|pt|gato}}. Las lenguas celtas, eslavas, germánicas, helénicas y romances han adoptado casi sin excepción este término, reemplazando a los patrimoniales; el latín {{l+|la|feles}} sólo sobrevive en los derivados {{l+|es|felino}}, {{l+|es|félido}}.
[[Archivo:Stray calico cat near Sagami River-01.jpg|thumb|gato (1)]]
[[Archivo:Domkraft, Nordisk familjebok.png|thumb|gato (7)]]
[[Archivo:Tic tac toe complete-temp.svg|thumb|gato (8)]]
==== {{sustantivo masculino y femenino|es}} ====
{{es.sust|mf}}
;1 {{csem|mamíferos}}: (''[[species:Felis catus|Felis catus]]'') {{plm|animal}} [[carnívoro]] de la familia de los [[felino]]s, [[domesticado]] como [[animal de compañía]] desde al menos el 3500 a. C.
{{sinónimo|minino|micho|nota2=Ecuador, Panamá}}
;2 {{csem|mamíferos}}: Por extensión, cualquier ejemplar de la familia de los [[félido]]s, que comprende 37 especies de [[mamífero]]s [[carnívoro]]s.
{{sinónimo|félido|felino}}
{{hipónimo|gato montés}}
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;3: {{plm|prostituta}} de alto nivel, que solo atiende un número más o menos reducido de clientes regulares.<ref name=l>{{Lunfa2000}}</ref>
{{ámbito|lunfardo}}
{{uso|coloquial|umef}}
;4: Por extensión, prostituta en general, especialmente la de cierto nivel.<ref name=l />
{{ámbito|Rioplatense}}
{{uso|Lunfardismo}}
;5: {{plm|cliente}} regular de una prostituta.<ref name=l />
{{ámbito|Rioplatense}}
{{uso|Lunfardismo}}
;6: {{plm|bisoñé}}, [[peluca]] que usan algunos hombres para disimular su [[calvicie]].<ref name=l />
{{ámbito|Rioplatense}}
{{uso|Lunfardismo}}
;7 {{csem|mecánica|hidráulica}}: Máquina para [[levantar]] grandes [[peso]]s a poca [[altura]].
{{sinónimo|gato hidraúlico|cric|crique|gata}}
;8 {{csem|juegos}}: {{plm|tres en línea}}.
{{ámbito|Chile|Costa Rica|México}}
{{wikisauro|tres en línea}}
;9: Nombre del símbolo [[#]], por su semejanza con el juego llamado "gato", sobre todo hablando de la [[tecla]] que lleva ese símbolo en los [[teléfono]]s.
{{ámbito|Chile|México}}.
{{sinónimo|almohadilla|nota=España|numeral}}.
;10 {{csem|música|danza}}: {{plm|baile}} tradicional de [[Argentina]], de pareja suelta y ritmo alegre.
{{hipónimo|gato con relaciones|gato cordobés|gato cuyano|gato patriótico}}.
{{ejemplo|Yo vengo de aquellos pagos<br>muy cerca de la frontera<br>donde se baila la cueca<br>zamba, '''gato''' y chacarera|c=canción|a=Óscar Palavecino|t=Chacarera pa' mi Tartagal}}
;11: {{gentilicio|Madrid}}.
{{uso|coloquial}}
{{sinónimo|madrileño}}
;12: [[ladrón|Ladrones]] de poca monta (o [[ratero]]s), llamados así por su habilidad para moverse y actuar silenciosamente sin ser detectados, al igual que el animal.
{{ámbito|Algunas provincias argentinas}}
;13: {{plm|sirviente}}, en especial del servicio doméstico.
{{ámbito|México}}
{{uso|despectivo}}
;14 {{csem|plantas}}: (''Salix caprea'') {{plm|árbol}} [[dioico]] de la familia de las salicáceas, nativo de Eurasia, de [[hoja]]s relativamente anchas y [[flor]]es agrupadas en [[amento]]s.
{{ámbito|Chile}}
{{sinónimo|sauce cabruno|sauce alemán|nota2=Chile|meca de gato|nota3=Chiloé}}
;15: [[Estafa]] o [[robo]] de poca monta y mucho sigilo, mas comúnmente dicho, ''de gato'', veáse acep. 12.
{{ámbito|Uruguay}}
{{uso|coloquial}}
==== Locuciones ====
{{trad-arriba|Locuciones con «gato»}}
* [[a gatas]]: apoyando las rodillas y las manos en el suelo
* [[bolsa de gatos]]: [[embrollo]]
* [[buscarle la quinta pata al gato|buscarle la quinta pata]] o [[buscarle los tres pies al gato|los tres pies al gato]]: insistir exageradamente en los defectos de algo.
* [[buscarle las cinco patas al gato]]: cometer imprudencias que pueden traer consecuencias que lamentar. (Venezuela)
* [[a ver quien pone el cascabel al gato]]: Quien se atreve a enfrentarse a alguien problemático o agresivo
* [[cuatro gatos]]: muy poca gente
* [[defenderse como gato boca arriba]], [[defenderse como gato de espaldas|de espaldas]] o [[defenderse como gato panza arriba|panza arriba]]: defenderse agresiva y desesperadamente (coloquial)
* [[de gato]]: adquirido por medios de legalidad dudosa (coloquial, Uruguay)
* [[dar gato por liebre|dar]] o [[pasar gato por liebre]]: engañar dando algo de menor valor que lo acordado
* [[darle el palo al gato]]: acertar, particularmente al lograr un negocio ventajoso (Chile, coloquial)
* [[el gato en la carnicería]] o [[el gato cuidando la carnicería]]
* [[echar el gato a las barbas]]: insultar a alguno (España)
* [[eso lo sabe hasta el gato]]: dicho para denotar que un asunto es muy obvio o sabido y que decirlo sería una [[perogrullada]].
* [[estar más perdido que un gato en una fábrica de sifones]]: estar muy perdido, confuso o desorientado.
* [[estar meado de gato]]: estar con mala suerte (Chile, coloquial)
* [[estar para el gato]]: estar en malas condiciones, o con mala salud (Cono Sur)
* [[gato casero]]: ratero de poca monta (España)
* [[gato colo]]: felino sudamericano (Chile)
* [[gato colocolo]]: felino sudamericano (Chile)
* [[gato de agua]]: trampa para ratones hecha con agua
* [[gato de campo]]: con afición por el robo o habilidad para realizarlo (Chile, coloquial)
* [[gato de río]] o [[gato huillín]]: mamífero mustélido sudamericano (Chile)
* [[gato de mar]]: mamífero mustélido sudamericano (Chile)
* [[gato de nueve colas]]: instrumento de tortura
* [[gato montés]] o [[gato del monte|del monte]]
* [[gato pajero]]: felino sudamericano
* [[gato viejo]]: persona astuta y perspicaz que intenta no parecerlo (España)
* [[gato negro]]: en la Edad Media se relacionó a los gatos negros con la brujería.
* [[gollo de gato]]
* [[haber gato encerrado]]: haber algo oculto o sospechoso.
* [[jugar al gato y al ratón]]: oponerse encarnizadamente
* [[llevarse como el perro y el gato]]: llevarse muy mal
* [[llevarse el gato al agua]]: vencer en un enfrentamiento (España)
* [[mano de gato|mano]] o [[manito de gato]]
* [[más asustado que gato en bote]]
* [[más ladrón que gato de campo]]
* [[más rayado que charango de gato]]: [[loco]], [[delirante]] (Chile, coloquial)
* [[meca de gato]]
* [[mojón de gato]]
* [[ojo de gato]]
* [[pelo de gato]]
* [[quedar como gato mojado]]: resultar humillado (Cataluña)
* [[tener siete vidas como los gatos]]: salir indemne de un accidentes
* [[vivir como perros y gatos]]: vivir en conflicto constante.
{{trad-abajo}}
{{trad-arriba|Refranes con «gato»}}
* [[cierra la puerta que se escapa el gato]]: se usa para reprender a quien revela intimidades frente a un tercero (España).
* [[el gato escaldado, del agua fría huye]]: quien ha sufrido un percance, trata de huir de lo que le recuerda al mismo.
* [[gato con guantes no caza ratones]]: indica que cuando se va a realizar una labor manual hay que llevar la indumentaria adecuada.
* [[hasta los gatos quieren zapatos]]: se usa para reprender ambiciones excesivas.
* [[hijo de gato caza ratón]]: cuando los hijos hacen lo mismo que sus padres o heredan sus habilidades o aun sus mañas.
* [[la curiosidad mató al gato]]: se usa para advertir a quien investiga asuntos turbios o peligrosos.
* [[De gato]]: igual que acepción 12 (Argentina) y acepción 15 (Uruguay).
* [[Como gato entre la leña]]: para referirse a quien sortea las dificultades con gran habilidad o agilidad (Uruguay).
* [[Como gato boca arriba]]: para referirse a alguien que se defiende con mucha resistencia, con mucha determinación, sin darse por vencido fácilmente.
* [[Con un ojo al gato y otro al garabato]]: estar al pendiente de dos asuntos a la vez.
{{trad-abajo}}
==== Véase también ====
{{w}}
* [[felino]]
* [[gatear]]
* [[gatera]]
* [[minino]]
* [[perro]]
==== Traducciones ====
{{trad-arriba}}
{{t|af|a1=1|t1=kat}}
{{t|ay|a1=1|t1=phisi}}
{{t|de|a1=1, 2|t1=Katze|g1=f|a2=1|t2=Kater|g2=m|nota2=gato macho|a3=7|t3=Wagenheber|g3=m|a4=7|t4=Heber|g4=m|a5=8|t5=Kreis und Kreuz|a6=8|t6=Tic Tac Toe}}
{{t|hy|a1=1|t1=կատու|tl1=katu}}
{{t|ast|a1=1|t1=gatu}}
{{t|az|a1=1|t1=pişik}}
{{t|br|a1=1|t1=kazh}}
{{t|bg|t1=котарак|g1=m|t2=котка|g2=f}}
{{t|ca|a1=1|t1=gat|a2=8|t2=tres en ratlla|a3=1|t3=móx|nota3=Islas Beleares}}
{{t|cho|t1=katos}}
{{t|ko|t1=고양이}}
{{t|da|a1=1|t1=kat|a2=7|t2=donkraft|a3=8|t3=kryds og bolle}}
{{t|eo|a1=1|t1=kato|a2=8|t2=eo|t3=tiktakto}}
{{t|et|a1=1|t1=kass}}
{{t|eu|t1=katu}}
{{t|fi|a1=1|t1=kissa|a2=7|t2=tunkki|t3=nosturi}}
{{t|fr|a1=1|t1=chat|g1=m|a2=7|t2=cric|g2=m}}
{{t|cy|a1=1|t1=cath|g1=f}}
{{t|gl|a1=1|t1=gato|g1=m|a2=8|t2=pai fillo nai|a3=8|t3=tres en raia}}
{{t|ka|a1=1|t1=კატა}}
{{t|el|a1=1|t1=γάτα}}
{{t|gn|a1=1|t1=mbarakaja}}
{{t|hu|a1=1|t1=macska}}
{{t|io|a1=1|t1=kato}}
{{t|en|a1=1|t1=cat|a2=3, 4|t2=hooker|a3=5|t3=john|a4=7|t4=jack|a5=8|t5=noughts and crosses|a6=8|t6=tic-tac-toe}}
{{t|ga|a1=1|t1=cat|g1=m}}
{{t|it|a1=1|t1=gatto|g1=m|a2=7|t2=cric|a3=7|t3=cricco|g3=m}}
{{t|ja|a1=1|t1=猫}}
{{t|ja|t1=ジャッキ|a1=7}}
{{t|ja|t1=三目並べ|a1=8}}
{{t|ku|t1=kitik}}
{{t|la|a1=1|t1=feles}}
{{t|lb|a1=1,2|t1=Kaz|g1=f}}
{{t|zh|t1=猫}}
{{t|arn|a1=1|t1=narki|a2=1|t2=ñayki}}
{{t|yua|a1=1|t1=miis}}
{{t|maz|t1=mixi}}
{{t|mmc|t1=mixi}}
{{t|mn|t1=муур}}
{{t|nhn|t1=miztontli}}
{{t|nci|t1=mizton}}
{{t|ngu|t1=miston}}
{{t|nch|t1=misto}}
{{t|nhw|t1=misto}}
{{t|nhe|t1=mistoh|t2=micho}}
{{t|nhm|t1=mistle}}
{{t|nl|a1=1|t1=kat|a2=1|t2=krik|g2=f|a3=8|t3=boter-kaas-en-eieren|a4=8|t4=boterkaas en eieren}}
{{t|nb|a1=1|t1=katt}}
{{t|nn|a1=1|t1=katt}}
{{t|ott|t1=mixi}}
{{t|ote|t1=mixi}}
{{t|pap|a1=1|t1=pushi}}
{{t|pl|a1=1|t1=kot|a2=8|t2=kółko i krzyżyk}}
{{t|pt|a1=1|t1=gato|a2=8|t2=jogo da velha}}
{{t|quh|a1=1|t1=michi}}
{{t|quz|a1=1|t1=michi}}
{{t|qwh|t1=mishi}}
{{t|rap|t1=kuri}}
{{t|ro|a1=1, 2|t1=pisică|a2=1|t2=pisică de casă}}
{{t|ru|a1=1|t1=кот|g1=m|a2=1|t2=кошка|g2=f|a3=8|t3=крестики-нолики}}
{{t|sh|a1=1|t1=мачак|g1=m|a2=1|t2=мачка|g2=f|a3=8|t3=икс-окс}}
{{t|sv|a1=1|t1=katt}}
{{t|uk|a1=1|t1=кіт|g2=m|a3=1|t3=кішка|g3=f}}
{{t|crh|t1=mışıq}}
{{t|yo|a1=1|t1=ológìnní|a2=1|t2=ológbò}}
{{trad-abajo}}
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Etimología 1 ===
{{etimología|leng=gl|roa-opt|gato}}, y este {{etim|leng=gl|la|cattus}}.
==== {{sustantivo masculino|gl}} ====
{{gl.sust}}
;1 {{csem|mamíferos|leng=gl}}: {{plm}}
==== Véase también ====
{{w|leng=gl}}
== {{lengua|lad}} ==
{{pron-graf|leng=lad}}
=== Etimología 1 ===
{{etimología|leng=lad}}.
==== {{sustantivo masculino|lad}} ====
;1 {{csem|mamíferos|leng=lad}}: {{plm|gato}}.
==== Véase también ====
{{w|leng=lad}}
== {{lengua|lfn}} ==
{{pron-graf|leng=lfn}}
=== Etimología ===
{{etimología|leng=lfn}}.
=== {{sustantivo|lfn}} ===
{{lfn.sust}}
;1 {{csem|animales|leng=lfn}}: {{plm}}.
== Referencias y notas ==
<references />
bak9irb6cyt6ti8rbdwkx5sfw84xm43
El Salvador
0
10842
6118120
6117971
2026-06-16T00:46:35Z
Enohecruzl79
181484
se agregó audio voz femenina
6118120
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|1audio1=ES-pe_-_El_Salvador.ogg|audio2 =LL-Q1321 (spa)-Enohecruzl79-El Salvador.wav|aunota2=voz femenina mexicana}}
=== Etimología ===
{{etimología2|De [[w:El Salvador#Toponimia|San Salvador]]}}.
=== {{sustantivo|es|propio}} ===
[[Archivo:El Salvador in its region.svg|miniaturadeimagen|[1] Ubicación resaltada en rojo]][[Archivo: Flag of El Salvador.svg|240px|miniaturadeimagen|Bandera de El Salvador]]
;1 {{csem|países}}: {{plm|país}} {{l|es|tropical}} localizado en {{l|es|Centroamérica}}. Limita con el {{l|es|océano}} {{l|es|Pacífico}}, {{l|es|Guatemala}} y {{l|es|Honduras}}.
{{topónimo|abreviatura1=El Salv|capital1=San Salvador|gentilicio1=salvadoreño|idioma1=español|iso1=222|iso2=SLV|iso3=SV|moneda1=dólar estadounidense|moneda2=bitcoin|nombre1=República de El Salvador|símbolo1=🇸🇻}}
;2 {{csem|ciudades}}: Ciudad minera de [[Chile]].
;3 {{csem|geografía}}: Mina de cobre en [[Chile]].
=== Véase también ===
* [[:Categoría:El Salvador|Categoría:El Salvador]]
* [[:Categoría:ES:El Salvador|Lista de ''salvadoreñismos'' en ''Wikcionario en español'']]
{{Commons}}
{{Wikinoticias}}
{{Wikipedia}}
{{Wikiquote}}
{{Wikisource}}
{{Wikiviajes}}
=== Traducciones ===
{{trad-arriba}}
{{t|de|a1=1|t1=El Salvador}}
{{t|ast|a1=1|t1=El Salvador}}
{{t|br|a1=1|t1=Salvador}}
{{t|bg|a1=1|t1=Салвадор}}
{{t|ca|a1=1|t1=El Salvador}}
{{t|da|a1=1|t1=El Salvador}}
{{t|eo|a1=1|t1=Salvadoro}}
{{t|ext|a1=1|t1=El Salvaol}}
{{t|fi|a1=1|t1=El Salvador}}
{{t|fr|a1=1|t1=Salvador|t2=El Salvador}}
{{t|fy|a1=1|t1=El Salvador}}
{{t|gl|a1=1|t1=O Salvador}}
{{t|el|a1=1|t1=Ελ Σαλβαδόρ}}
{{t|hu|a1=1|t1=El Salvador|t2=Salvador}}
{{t|en|a1=1|t1=El Salvador}}
{{t|ia|a1=1|t1=El Salvador}}
{{t|it|a1=1|t1=El Salvador}}
{{t|ja|a1=1|t1=エルサルバドル}}
{{t|la|a1=1|g1=f|t1=Salvatoria}}
{{t|zh|a1=1|t1=萨尔瓦多}}
{{t|mn|a1=1|t1=Сальвадор}}
{{t|nci|a1=1|t1=Cozcatlan|t2=Cōzcatlān}}
{{t|nl|a1=1|t1=El Salvador}}
{{t|nb|a1=1|t1=El Salvador}}
{{t|pl|a1=1|t1=Salwador}}
{{t|pt|a1=1|t1=El Salvador}}
{{t|ro|a1=1|g1=n|t1=Salvador}}
{{t|ru|a1=1|t1=Сальвадор}}
{{t|sh|a1=1|g1=m|t1=Salvador}}
{{t|sv|a1=1|t1=El Salvador}}
{{t|tr|a1=1|t1=El Salvador}}
{{trad-abajo}}
== {{lengua|de}} ==
{{pron-graf|leng=de|1fone1=ɛl zalvaˈdoːɐ̯|1audio1=De-El Salvador.ogg}}
=== Etimología ===
{{etimología|leng=de|es|El Salvador}}.
=== {{sustantivo propio|de}} ===
;1 {{csem|leng=de|países}}: {{plm}}.
=== Véase también ===
{{Wikipedia|idioma=de}}
=== Declinación ===
{{de.sust|topo}}
== {{lengua|az}} ==
{{pron-graf|leng=az|v1=Salvador}}
=== {{sustantivo propio|az}} ===
;1 {{csem|leng=az|países}}: {{plm}}.
== {{lengua|ca}} ==
{{pron-graf|leng=ca}}
=== Etimología ===
{{etimología|leng=ca|es|El Salvador}}.
=== {{sustantivo propio|ca}} ===
;1 {{csem|leng=ca|países}}: {{plm}}.
=== Véase también ===
{{Wikipedia|idioma=ca}}
== {{lengua|da}} ==
{{pron-graf|leng=da}}
=== Etimología ===
{{etimología|leng=da|es|El Salvador}}.
=== {{sustantivo propio|da}} ===
;1 {{csem|leng=da|países}}: {{plm}}.
=== Véase también ===
{{Wikipedia|idioma=da}}
== {{lengua|fi}} ==
{{pron-graf|leng=fi}}
=== Etimología ===
{{etimología|leng=fi|es|El Salvador}}.
=== {{sustantivo propio|fi}} ===
;1 {{csem|leng=fi|países}}: {{plm}}.
=== Véase también ===
{{Wikipedia|idioma=fi}}
== {{lengua|fy}} ==
{{pron-graf|leng=fy}}
=== Etimología ===
{{etimología|leng=fy|es|El Salvador}}.
=== {{sustantivo propio|fy}} ===
;1 {{csem|leng=fy|países}}: {{plm}}.
=== Véase también ===
{{Wikipedia|idioma=fy}}
== {{lengua|hu}} ==
{{pron-graf|leng=hu}}
=== Etimología ===
{{etimología|leng=hu|es|El Salvador}}.
=== {{sustantivo propio|hu}} ===
;1 {{csem|leng=hu|países}}: {{plm}}.
=== Véase también ===
{{Wikipedia|idioma=hu}}
== {{lengua|en}} ==
{{pron-graf|leng=en}}
=== Etimología ===
{{etimología|leng=en|es|El Salvador}}.
=== {{sustantivo propio|en}} ===
;1 {{csem|leng=en|países}}: {{plm}}.
{{topónimo|capital1=San Salvador|gentilicio1=Salvadoran|gentilicio2=Salvadorian|gentilicio3=Salvadorean|nombre1=Republic of El Salvador}}
=== Véase también ===
{{Wikipedia|idioma=en}}
{{Wikiviajes|leng=en}}
== {{lengua|ia}} ==
{{pron-graf|leng=ia}}
=== Etimología ===
{{etimología|leng=ia|es|El Salvador}}.
=== {{sustantivo propio|ia}} ===
;1 {{csem|leng=ia|países}}: {{plm}}.
=== Véase también ===
{{Wikipedia|idioma=ia}}
== {{lengua|it}} ==
{{pron-graf|leng=it}}
=== Etimología ===
{{etimología|leng=it|es|El Salvador}}.
=== {{sustantivo propio|it}} ===
;1 {{csem|leng=it|países}}: {{plm}}.
{{topónimo|capital1=San Salvador|nombre1=Repubblica di El Salvador}}
=== Véase también ===
{{Wikipedia|idioma=it}}
{{Wikiviajes|leng=it}}
== {{lengua|yua}} ==
{{pron-graf|leng=yua}}
=== {{sustantivo|yua}} ===
;1 {{csem|leng=yua|países}}: {{plm|El Salvador}}.
== {{lengua|nch}} ==
{{pron-graf|leng=nch}}
=== {{sustantivo propio|nch}} ===
;1 {{csem|leng=nch|países}}: {{plm|El Salvador}}.
== {{lengua|nhw}} ==
{{pron-graf|leng=nhw}}
=== {{sustantivo propio|nhw}} ===
;1 {{csem|leng=nhw|países}}: {{plm|El Salvador}}.
== {{lengua|nlv}} ==
{{pron-graf|leng=nlv}}
=== {{sustantivo propio|nlv}} ===
;1 {{csem|leng=nlv|países}}: {{plm|El Salvador}}.
== {{lengua|nl}} ==
{{pron-graf|leng=nl}}
=== Etimología ===
{{etimología|leng=nl|es|El Salvador}}.
=== {{sustantivo propio|nl}} ===
;1 {{csem|leng=nl|países}}: {{plm}}.
=== Véase también ===
{{Wikipedia|idioma=nl}}
{{Wikiviajes|leng=nl}}
== {{lengua|nb}} ==
{{pron-graf|leng=nb}}
=== Etimología ===
{{etimología|leng=nb|es|El Salvador}}.
=== {{sustantivo propio|nb}} ===
;1 {{csem|leng=nb|países}}: {{plm}}.
=== Véase también ===
{{Wikipedia|idioma=nb}}
== {{lengua|pt}} ==
{{pron-graf|leng=pt}}
=== Etimología ===
{{etimología|leng=pt|es|El Salvador}}.
=== {{sustantivo propio|pt}} ===
;1 {{csem|leng=pt|países}}: {{plm}}.
{{topónimo|capital1=San Salvador|gentilicio1=salvadorenho|nombre1=República de El Salvador}}
=== Véase también ===
{{Wikipedia|idioma=pt}}
{{Wikiviajes|leng=pt}}
== {{lengua|quz}} ==
{{pron-graf|leng=quz}}
=== {{sustantivo propio|quz}} ===
;1 {{csem|leng=quz|países}}: {{plm|El Salvador}}.
== {{lengua|quc}} ==
{{pron-graf|leng=quc}}
=== {{sustantivo|quc}} ===
;1 {{csem|leng=quc|países}}: {{plm|El Salvador}}.
== {{lengua|sv}} ==
{{pron-graf|leng=sv}}
=== Etimología ===
{{etimología|leng=sv|es|El Salvador}}.
=== {{sustantivo propio|sv}} ===
;1 {{csem|leng=sv|países}}: {{plm}}.
=== Véase también ===
{{Wikipedia|idioma=sv}}
{{Wikiviajes|leng=sv}}
== {{lengua|tr}} ==
{{pron-graf|leng=tr}}
=== Etimología ===
{{etimología|leng=tr|es|El Salvador}}.
=== {{sustantivo propio|tr}} ===
;1 {{csem|leng=tr|países}}: {{plm}}.
=== Véase también ===
{{Wikipedia|idioma=tr}}
== {{lengua|zai}} ==
{{pron-graf|leng=zai}}
=== {{sustantivo propio|zai}} ===
;1 {{csem|leng=zai|países}}: {{plm|El Salvador}}.
== Referencias y notas ==
<references />
4qpes5pvmgtbqv6q6gtokp6tbfsait5
Costa Rica
0
10844
6118121
6117972
2026-06-16T00:49:15Z
Enohecruzl79
181484
se agregó audio voz femenina
6118121
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|1audio1=LL-Q1321 (spa)-Rodelar-Costa Rica.wav|audio2 =LL-Q1321 (spa)-Enohecruzl79-Costa Rica.wav |aunota2=voz femenina mexicana}}
=== {{sustantivo|es|propio|femenino}} ===
[[Archivo:Costa Rica in its region.svg|miniaturadeimagen|[1] Ubicación resaltada en rojo]][[Archivo: Flag of Costa Rica.svg|240px|miniaturadeimagen|Bandera de Costa Rica]]
;1 {{csem|países}}: {{plm|país}} de {{l|es|Centroamérica}}. {{l|es|limitar|Limita}} al norte con {{l|es|Nicaragua}}, al sureste con {{l|es|Panamá}}, al este con el {{l|es|océano Atlántico}} y al oeste con el {{l|es|océano Pacífico}}.
{{topónimo|capital1=San José|gentilicio1=costarricense|gentilicio2=costarriqueño|gentilicio3=tico|idioma1=español|iso1=188|iso2=CRI|iso3=CR|moneda1=colón|nombre1=República de Costa Rica|símbolo1=🇨🇷}}
=== Véase también ===
*[[:Categoría:Costa Rica|Categoría:Costa Rica]]
*[[:Categoría:ES:Costa Rica|Lista de ''costarriqueñismos'' en ''Wikcionario en español'']]
{{Commons}}
{{Wikinoticias}}
{{Wikipedia}}
{{Wikiviajes}}
=== Traducciones ===
{{trad-arriba}}
{{t|ast|t1=Costa Rica}}
{{t|chr|t1=ᎪᏍᏓ ᎵᎧ}}
{{t|cs|t1=Kostarika}}
{{t|sk|t1=Kostarika}}
{{t|sl|t1=Kostarika}}
{{t|eo|t1=Kostariko}}
{{t|fy|t1=Kosta Rika}}
{{t|el|t1=Κόστα Ρίκα}}
{{t|en|t1=Costa Rica}}
{{t|ja|t1=コスタリカ}}
{{t|cmn|a1=1|t1=哥斯达黎加}}
{{t|mt|t1=Kosta Rika}}
{{t|mn|t1=Коста-Рика}}
{{t|pl|t1=Kostaryka}}
{{t|sh|t1=Kostarika}}
{{t|tr|t1=Kosta Rika}}
{{trad-abajo}}
== {{lengua|fr}} ==
{{pron-graf|leng=fr}}
=== Etimología ===
{{etimología|leng=fr|es|Costa Rica}}.
=== {{sustantivo propio|fr}} ===
;1 {{csem|países|leng=fr}}: {{plm|Costa Rica}}.
{{topónimo|capital1=San José|gentilicio1=costaricien|nombre1=République du Costa Rica}}
=== Véase también ===
{{Wikipedia|leng=fr}}
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== {{sustantivo propio|gl}} ===
;1 {{csem|países|leng=gl}}: {{plm}}.
== {{lengua|en}} ==
{{pron-graf|leng=en}}
=== Etimología ===
{{etimología|leng=en|es|Costa Rica}}.
=== {{sustantivo propio|en}} ===
;1 {{csem|países|leng=en}}: {{plm|Costa Rica}}.
{{topónimo|capital1=San José|gentilicio1=Costa Rican|nombre1=Republic of Costa Rica}}
=== Véase también ===
{{Wikipedia|leng=en}}
== {{lengua|yua}} ==
{{pron-graf|leng=yua}}
=== {{sustantivo|yua}} ===
;1 {{csem|países|leng=yua}}: {{plm|Costa Rica}}.
== {{lengua|nhn}} ==
{{pron-graf|leng=nhn}}
=== {{sustantivo|nhn}} ===
;1 {{csem|países|leng=nhn}}: {{plm|Costa Rica}}.
== {{lengua|ngu}} ==
{{pron-graf|leng=ngu}}
=== {{sustantivo propio|ngu}} ===
;1 {{csem|países|leng=ngu}}: {{plm|Costa Rica}}.
== {{lengua|nch}} ==
{{pron-graf|leng=nch}}
=== {{sustantivo|nch}} ===
;1 {{csem|países|leng=nch}}: {{plm|Costa Rica}}.
== {{lengua|nhw}} ==
{{pron-graf|leng=nhw}}
=== {{sustantivo propio|nhw}} ===
;1 {{csem|países|leng=nhw}}: {{plm|Costa Rica}}.
== {{lengua|nhe}} ==
{{pron-graf|leng=nhe}}
=== {{sustantivo propio|nhe}} ===
;1 {{csem|países|leng=nhe}}: {{plm|Costa Rica}}.
== {{lengua|nlv}} ==
{{pron-graf|leng=nlv}}
=== {{sustantivo propio|nlv}} ===
;1 {{csem|países|leng=nlv}}: {{plm|Costa Rica}}.
== {{lengua|nl}} ==
{{pron-graf|leng=nl}}
=== {{sustantivo propio|nl}} ===
;1 {{csem|países|leng=nl}}: {{plm}}.
=== Véase también ===
{{Wikipedia|idioma=nl}}
== {{lengua|zai}} ==
{{pron-graf|leng=zai}}
=== {{sustantivo propio|zai}} ===
;1 {{csem|países|leng=zai}}: {{plm|Costa Rica}}.
== Referencias y notas ==
<references />
5tpkzn9p4vzms32bhhb7ox7qihtvcvd
Panamá
0
10846
6118122
6117973
2026-06-16T00:50:44Z
Enohecruzl79
181484
se agregó audio voz femenina
6118122
wikitext
text/x-wiki
{{desambiguación|panamá|Panama|Panamà|panama|paṇāma}}
== {{lengua|es}} ==
{{pron-graf|1audio1=Es-Panamá.oga|v1=Ciudad de Panamá|audio2 =LL-Q1321 (spa)-Enohecruzl79-Panamá.wav|aunota2=voz femenina mexicana}}
=== Etimología 1 ===
{{etimología|incierta}}.
[[Archivo:Panama in its region.svg|miniaturadeimagen|[1] Ubicación resaltada en rojo]][[Archivo: Flag of Panama.svg|240px|miniaturadeimagen|Bandera de Panamá]]
{{mapa|id=3306|acepción=2}}
[[Archivo:Panama in Panama (+Guna de Madugandi hatched).svg|miniaturadeimagen|[3] Ubicación resaltada en rojo]]
[[Archivo:Camoruco OSilva.JPG|miniaturadeimagen|[5]]]
==== {{sustantivo|es|propio}} ====
;1 {{csem|países}}: {{plm|país}} de {{l|es|Centroamérica}}, {{l|es|ubicado}} {{l|es|entre}} {{l|es|Costa Rica}} y {{l|es|Colombia}}, el {{l|es|mar}} {{l|es|Caribe}} y el {{l|es|océano}} {{l|es|Pacífico}}. En él se encuentra el [[Wikipedia:es:Canal de Panamá|canal de Panamá]], que une ambos mares.
{{topónimo|capital1=Ciudad de Panamá|gentilicio1=panameño|idioma1=español|iso1=591|iso2=PAN|iso3=PA|moneda1=balboa|moneda2=dólar estadounidense|nombre1=República de Panamá|símbolo1=🇵🇦}}
;2 {{csem|ciudades}}: {{plm|ciudad}} {{l|es|capital}} de Panamá<sub>1</sub>.
;3 {{csem|regiones}}: {{plm|provincia}} de Panamá<sub>1</sub>.
;4 {{csem|regiones}}: {{plm|distrito}} en la provincia de Panamá<sub>3</sub>.
;5 {{csem|árboles}}: (''[[species:Sterculia apetala|Sterculia apetala]]'') {{plm|árbol}} {{l|es|oriundo}} de Centroamérica y el norte de Sudamérica.
{{sinónimo|camoruco}}.
==== Véase también ====
* [[:Categoría:Panamá|Categoría:Panamá]]
* [[:Categoría:ES:Panamá|Panameñismos en ''Wikcionario en español'']]
{{Commons}}
{{Wikinoticias}}
{{w}}
{{Wikisource}}
{{Wikiviajes}}
==== Traducciones ====
{{trad-arriba}}
{{t|de|t1=Panama|g1=n}}
{{t|ast|a1=1|t1=Panamá|a2=2|t2=Ciudá de Panamá}}
{{t|ca|t1=Panamà}}
{{t|fr|t1=Panama|g1=m}}
{{t|hi|t1=पनामा}}
{{t|en|t1=Panama}}
{{t|it|t1=Panama|t2=Panamà|t3=Panamá}}
{{t|ja|a1=1|t1=パナマ|tl1=Panama}}
{{t|nci|t1=Panama}}
{{t|nch|t1=Panamá}}
{{t|mn|t1=Панам}}
{{t|nl|t1=Panama|g1=n}}
{{t|pl|t1=Panama}}
{{trad-abajo}}
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Etimología 1 ===
{{etimología|leng=gl}}.
==== {{sustantivo propio|gl}} ====
;1: {{plm|Panamá}}.
== {{lengua|yua}} ==
{{pron-graf|leng=yua}}
=== Etimología 1 ===
{{etimología|leng=yua}}.
==== {{sustantivo|yua}} ====
;1 {{csem|países|leng=yua}}: {{plm|Panamá}}.
== {{lengua|nhn}} ==
{{pron-graf|leng=nhn}}
=== Etimología 1 ===
{{etimología|leng=nhn}}.
==== {{sustantivo|nhn}} ====
;1 {{csem|países|leng=nhn}}: {{plm|Panamá}}.
== {{lengua|nch}} ==
{{pron-graf|leng=nch}}
=== Etimología 1 ===
{{etimología|leng=nch}}.
==== {{sustantivo|nch}} ====
;1 {{csem|países|leng=nch}}: {{plm|Panamá}}.
== {{lengua|nhw}} ==
{{pron-graf|leng=nhw}}
=== Etimología 1 ===
{{etimología|leng=nhw}}.
==== {{sustantivo propio|nhw}} ====
;1 {{csem|países|leng=nhw}}: {{plm|Panamá}}.
== {{lengua|gym}} ==
{{pron-graf|leng=gym}}
=== Etimología 1 ===
{{etimología|leng=gym}}.
==== {{sustantivo|gym}} ====
;1 {{csem|países|leng=gym}}: {{plm|Panamá}}.
== {{lengua|quc}} ==
{{pron-graf|leng=quc}}
=== Etimología 1 ===
{{etimología|leng=quc}}.
==== {{sustantivo|quc}} ====
;1 {{csem|países|leng=quc}}: {{plm|Panamá}}.
== {{lengua|zai}} ==
{{pron-graf|leng=zai}}
=== Etimología 1 ===
{{etimología|leng=zai}}.
==== {{sustantivo propio|zai}} ====
;1 {{csem|países|leng=zai}}: {{plm|Panamá}}.
== Referencias y notas ==
<references />
3ry849d4qzrybxho0m6bhpxjdyoqut3
Estados Unidos de América
0
10939
6118118
6117967
2026-06-16T00:41:43Z
Enohecruzl79
181484
se agregó audio voz femenina
6118118
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|1audio1=LL-Q1321 (spa)-Rodelar-Estados Unidos de América.wav|v1=Estados Unidos|audio2 =LL-Q1321 (spa)-Enohecruzl79-Estados Unidos de América.wav|aunota2=voz femenina mexicana}}
=== Etimología 1 ===
{{etimología|calco|en|United States of America}}.
[[Archivo:United States in the World.svg|miniaturadeimagen|[1] Ubicación resaltada en rojo]][[Archivo: US flag 49 stars.svg|240px|miniaturadeimagen|Bandera de Estados Unidos de América]]
==== {{sustantivo propio|es}} ====
;1 {{csem|países}}: {{plm|país}} conformado por una {{l|es|federación}} de {{l|es|cincuenta}} {{l|es|estado|estados}}, varios {{l|es|territorio|territorios}} {{l|es|dependiente|dependientes}} y un {{l|es|distrito}} {{l|es|federal}}, ubicados en {{l|es|Norteamérica}}, el {{l|es|Caribe}} y {{l|es|Oceanía}}. En Norteamérica limita por el norte con {{l|es|Canadá}} y al sur con {{l|es|México}}.
{{sinónimo|Gringolandia|nota1=coloquial, América|el país del Tío Sam|Yanquilandia|nota3=coloquial, España}}.
{{topónimo|capital1=Washington D|capital2=C|gentilicio1=estadounidense|iso1=840|iso2=USA|iso3=US|moneda1=dólar|sigla1=EE|sigla2=UU|sigla3=EEUU|sigla4=EUA|símbolo1=🇺🇸}}
==== Véase también ====
* [[:Categoría:Estados Unidos|Categoría:Estados Unidos]]
* [[Apéndice:Estados de los Estados Unidos de América|Lista de Estados de los Estados Unidos de América]]
{{Commons}}
{{Wikinoticias}}
{{w}}
{{Wikiquote}}
{{Wikisource}}
{{Wikiviajes}}
==== Traducciones ====
{{trad-arriba}}
{{t|sq|t1=Shtetet e Bashkuara të Amerikës}}
{{t|de|t1=Vereinigten Staaten von Amerika}}
{{t|ar|t1=الوِلَايَات المُتَّحِدَة الأَمرِيكِيَّة|g1=f}}
{{t|an|t1=Estatos Unitos d'America}}
{{t|hy|t1=Ամերիկայի Միացյալ Նահանգներ}}
{{t|ast|t1=Estaos Xuníos d'América}}
{{t|bg|t1=Съединени американски щати}}
{{t|ca|t1=Estats Units d'Amèrica|g1=m}}
{{t|ko|t1=미국}}
{{t|ko|t1=아메리카 합중국}}
{{t|eo|t1=Unuiĝintaj Ŝtatoj de Ameriko|t2=Usono}}
{{t|eu|t1=Ameriketako Estatu Batuak}}
{{t|fi|t1=Yhdysvallat}}
{{t|fr|t1=États-Unis d'Amérique|g1=m}}
{{t|fy|t1=Feriene Steaten fan Amearika}}
{{t|el|t1=Ηνωμένες Πολιτείες της Αμερικής|g1=f|t2=Ηνωμένες Πολιτείες Αμερικής|g2=f}}
{{t|gn|t1=Tetã peteĩ reko Amérikagua}}
{{t|he|t1=ארצות הברית של אמריקה}}
{{t|en|t1=United States of America}}
{{t|ang|t1=Ȝeānedu Rīcu American}}
{{t|hi|t1=संयुक्त राष्ट्र अमरीका}}
{{t|it|t1=Stati Uniti d'America|g1=m}}
{{t|ja|t1=アメリカ合衆国|t2=アメリカ|t3=米国}}
{{t|la|t1=Respublicae Unitae Americae|t2=Status Uniti Americae|t3=Civitates Foederatae Americae}}
{{t|lt|t1=Jungtinės Amerikos Valstijos}}
{{t|zh|t1=美利坚合众国}}
{{t|zh|t1=美国}}
{{t|mn|t1=Америк Улс|t2=Америкийн Нэгдсэн Улс|t3=АНУ}}
{{t|mt|t1=Stati Uniti tal-Amerika}}
{{t|mn|t1=Америкийн Нэгдсэн Улс}}
{{t|mwl|t1=Stados Ounidos de la América}}
{{t|nci|t1=Tlatlahtocayotl in Cepanca}}
{{t|nl|t1=Verenigde Staten van Amerika|g1=f}}
{{t|nv|t1=Wááshindoon Bikéyah Ałhidadiidzooígíí}}
{{t|oc|t1=Estats Units d'America}}
{{t|pt|t1=Estados Unidos da América}}
{{t|ro|t1=Statele Unite ale Americii}}
{{t|ru|t1=Соединённые Штаты Америки|g1=m}}
{{t|scn|t1=Stati Uniti dâ Mèrica|g1=m}}
{{t|tr|t1=Amerika Birleşik Devletleri}}
{{t|vi|t1=Hợp Chủng Quốc Hoa Kỳ|t2=Hoa Kỳ|t3=Nước Mỹ|t4=Mỹ Quốc}}
{{t|yi|t1=פֿאַראייניקטע שטאַטן פון אַמעריקע}}
{{trad-abajo}}
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Etimología 1 ===
{{etimología}}.
==== {{sustantivo propio|gl}} ====
;1 {{csem|países|leng=gl}}: {{plm|Estados Unidos de América}}.
==== Véase también ====
{{Wikipedia|leng=gl}}
== Referencias y notas ==
<references />
dke9xqbdeuburbq448qog9b56gxjppa
6118136
6118118
2026-06-16T01:34:37Z
Tmagc
158167
/* {{sustantivo propio|es}} */
6118136
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|1audio1=LL-Q1321 (spa)-Rodelar-Estados Unidos de América.wav|v1=Estados Unidos|audio2 =LL-Q1321 (spa)-Enohecruzl79-Estados Unidos de América.wav|aunota2=voz femenina mexicana}}
=== Etimología 1 ===
{{etimología|calco|en|United States of America}}.
[[Archivo:United States in the World.svg|miniaturadeimagen|[1] Ubicación resaltada en rojo]][[Archivo: US flag 49 stars.svg|240px|miniaturadeimagen|Bandera de Estados Unidos de América]]
==== {{sustantivo propio|es}} ====
;1 {{csem|países}}: {{plm|país}} conformado por una {{l|es|federación}} de {{l|es|cincuenta}} {{l|es|estado|estados}}, varios {{l|es|territorio|territorios}} {{l|es|dependiente|dependientes}} y un {{l|es|distrito}} {{l|es|federal}}, ubicados en {{l|es|Norteamérica}}, el {{l|es|Caribe}} y {{l|es|Oceanía}}. En Norteamérica limita por el norte con {{l|es|Canadá}} y al sur con {{l|es|México}}.
{{sinónimo|Gringolandia|nota1=coloquial, América|el país del Tío Sam|Yanquilandia|nota3=coloquial, España}}.
{{topónimo|capital1=Washington D|capital2=C|gentilicio1=estadounidense|iso1=840|iso2=USA|iso3=US|moneda1=dólar|sigla1=EE. UU.|sigla2=EEUU|sigla3=EUA|símbolo1=🇺🇸}}
==== Véase también ====
* [[:Categoría:Estados Unidos|Categoría:Estados Unidos]]
* [[Apéndice:Estados de los Estados Unidos de América|Lista de Estados de los Estados Unidos de América]]
{{Commons}}
{{Wikinoticias}}
{{w}}
{{Wikiquote}}
{{Wikisource}}
{{Wikiviajes}}
==== Traducciones ====
{{trad-arriba}}
{{t|sq|t1=Shtetet e Bashkuara të Amerikës}}
{{t|de|t1=Vereinigten Staaten von Amerika}}
{{t|ar|t1=الوِلَايَات المُتَّحِدَة الأَمرِيكِيَّة|g1=f}}
{{t|an|t1=Estatos Unitos d'America}}
{{t|hy|t1=Ամերիկայի Միացյալ Նահանգներ}}
{{t|ast|t1=Estaos Xuníos d'América}}
{{t|bg|t1=Съединени американски щати}}
{{t|ca|t1=Estats Units d'Amèrica|g1=m}}
{{t|ko|t1=미국}}
{{t|ko|t1=아메리카 합중국}}
{{t|eo|t1=Unuiĝintaj Ŝtatoj de Ameriko|t2=Usono}}
{{t|eu|t1=Ameriketako Estatu Batuak}}
{{t|fi|t1=Yhdysvallat}}
{{t|fr|t1=États-Unis d'Amérique|g1=m}}
{{t|fy|t1=Feriene Steaten fan Amearika}}
{{t|el|t1=Ηνωμένες Πολιτείες της Αμερικής|g1=f|t2=Ηνωμένες Πολιτείες Αμερικής|g2=f}}
{{t|gn|t1=Tetã peteĩ reko Amérikagua}}
{{t|he|t1=ארצות הברית של אמריקה}}
{{t|en|t1=United States of America}}
{{t|ang|t1=Ȝeānedu Rīcu American}}
{{t|hi|t1=संयुक्त राष्ट्र अमरीका}}
{{t|it|t1=Stati Uniti d'America|g1=m}}
{{t|ja|t1=アメリカ合衆国|t2=アメリカ|t3=米国}}
{{t|la|t1=Respublicae Unitae Americae|t2=Status Uniti Americae|t3=Civitates Foederatae Americae}}
{{t|lt|t1=Jungtinės Amerikos Valstijos}}
{{t|zh|t1=美利坚合众国}}
{{t|zh|t1=美国}}
{{t|mn|t1=Америк Улс|t2=Америкийн Нэгдсэн Улс|t3=АНУ}}
{{t|mt|t1=Stati Uniti tal-Amerika}}
{{t|mn|t1=Америкийн Нэгдсэн Улс}}
{{t|mwl|t1=Stados Ounidos de la América}}
{{t|nci|t1=Tlatlahtocayotl in Cepanca}}
{{t|nl|t1=Verenigde Staten van Amerika|g1=f}}
{{t|nv|t1=Wááshindoon Bikéyah Ałhidadiidzooígíí}}
{{t|oc|t1=Estats Units d'America}}
{{t|pt|t1=Estados Unidos da América}}
{{t|ro|t1=Statele Unite ale Americii}}
{{t|ru|t1=Соединённые Штаты Америки|g1=m}}
{{t|scn|t1=Stati Uniti dâ Mèrica|g1=m}}
{{t|tr|t1=Amerika Birleşik Devletleri}}
{{t|vi|t1=Hợp Chủng Quốc Hoa Kỳ|t2=Hoa Kỳ|t3=Nước Mỹ|t4=Mỹ Quốc}}
{{t|yi|t1=פֿאַראייניקטע שטאַטן פון אַמעריקע}}
{{trad-abajo}}
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Etimología 1 ===
{{etimología}}.
==== {{sustantivo propio|gl}} ====
;1 {{csem|países|leng=gl}}: {{plm|Estados Unidos de América}}.
==== Véase también ====
{{Wikipedia|leng=gl}}
== Referencias y notas ==
<references />
pj2ewil5ptdf03rt9u0zbkoflapu9m1
6118137
6118136
2026-06-16T01:35:07Z
Tmagc
158167
/* {{sustantivo propio|es}} */
6118137
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|1audio1=LL-Q1321 (spa)-Rodelar-Estados Unidos de América.wav|v1=Estados Unidos|audio2 =LL-Q1321 (spa)-Enohecruzl79-Estados Unidos de América.wav|aunota2=voz femenina mexicana}}
=== Etimología 1 ===
{{etimología|calco|en|United States of America}}.
[[Archivo:United States in the World.svg|miniaturadeimagen|[1] Ubicación resaltada en rojo]][[Archivo: US flag 49 stars.svg|240px|miniaturadeimagen|Bandera de Estados Unidos de América]]
==== {{sustantivo propio|es}} ====
;1 {{csem|países}}: {{plm|país}} conformado por una {{l|es|federación}} de {{l|es|cincuenta}} {{l|es|estado|estados}}, varios {{l|es|territorio|territorios}} {{l|es|dependiente|dependientes}} y un {{l|es|distrito}} {{l|es|federal}}, ubicados en {{l|es|Norteamérica}}, el {{l|es|Caribe}} y {{l|es|Oceanía}}. En Norteamérica limita por el norte con {{l|es|Canadá}} y al sur con {{l|es|México}}.
{{sinónimo|Gringolandia|nota1=coloquial, América|el país del Tío Sam|Yanquilandia|nota3=coloquial, España}}.
{{topónimo|capital1=Washington D. C.|gentilicio1=estadounidense|iso1=840|iso2=USA|iso3=US|moneda1=dólar|sigla1=EE. UU.|sigla2=EEUU|sigla3=EUA|símbolo1=🇺🇸}}
==== Véase también ====
* [[:Categoría:Estados Unidos|Categoría:Estados Unidos]]
* [[Apéndice:Estados de los Estados Unidos de América|Lista de Estados de los Estados Unidos de América]]
{{Commons}}
{{Wikinoticias}}
{{w}}
{{Wikiquote}}
{{Wikisource}}
{{Wikiviajes}}
==== Traducciones ====
{{trad-arriba}}
{{t|sq|t1=Shtetet e Bashkuara të Amerikës}}
{{t|de|t1=Vereinigten Staaten von Amerika}}
{{t|ar|t1=الوِلَايَات المُتَّحِدَة الأَمرِيكِيَّة|g1=f}}
{{t|an|t1=Estatos Unitos d'America}}
{{t|hy|t1=Ամերիկայի Միացյալ Նահանգներ}}
{{t|ast|t1=Estaos Xuníos d'América}}
{{t|bg|t1=Съединени американски щати}}
{{t|ca|t1=Estats Units d'Amèrica|g1=m}}
{{t|ko|t1=미국}}
{{t|ko|t1=아메리카 합중국}}
{{t|eo|t1=Unuiĝintaj Ŝtatoj de Ameriko|t2=Usono}}
{{t|eu|t1=Ameriketako Estatu Batuak}}
{{t|fi|t1=Yhdysvallat}}
{{t|fr|t1=États-Unis d'Amérique|g1=m}}
{{t|fy|t1=Feriene Steaten fan Amearika}}
{{t|el|t1=Ηνωμένες Πολιτείες της Αμερικής|g1=f|t2=Ηνωμένες Πολιτείες Αμερικής|g2=f}}
{{t|gn|t1=Tetã peteĩ reko Amérikagua}}
{{t|he|t1=ארצות הברית של אמריקה}}
{{t|en|t1=United States of America}}
{{t|ang|t1=Ȝeānedu Rīcu American}}
{{t|hi|t1=संयुक्त राष्ट्र अमरीका}}
{{t|it|t1=Stati Uniti d'America|g1=m}}
{{t|ja|t1=アメリカ合衆国|t2=アメリカ|t3=米国}}
{{t|la|t1=Respublicae Unitae Americae|t2=Status Uniti Americae|t3=Civitates Foederatae Americae}}
{{t|lt|t1=Jungtinės Amerikos Valstijos}}
{{t|zh|t1=美利坚合众国}}
{{t|zh|t1=美国}}
{{t|mn|t1=Америк Улс|t2=Америкийн Нэгдсэн Улс|t3=АНУ}}
{{t|mt|t1=Stati Uniti tal-Amerika}}
{{t|mn|t1=Америкийн Нэгдсэн Улс}}
{{t|mwl|t1=Stados Ounidos de la América}}
{{t|nci|t1=Tlatlahtocayotl in Cepanca}}
{{t|nl|t1=Verenigde Staten van Amerika|g1=f}}
{{t|nv|t1=Wááshindoon Bikéyah Ałhidadiidzooígíí}}
{{t|oc|t1=Estats Units d'America}}
{{t|pt|t1=Estados Unidos da América}}
{{t|ro|t1=Statele Unite ale Americii}}
{{t|ru|t1=Соединённые Штаты Америки|g1=m}}
{{t|scn|t1=Stati Uniti dâ Mèrica|g1=m}}
{{t|tr|t1=Amerika Birleşik Devletleri}}
{{t|vi|t1=Hợp Chủng Quốc Hoa Kỳ|t2=Hoa Kỳ|t3=Nước Mỹ|t4=Mỹ Quốc}}
{{t|yi|t1=פֿאַראייניקטע שטאַטן פון אַמעריקע}}
{{trad-abajo}}
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Etimología 1 ===
{{etimología}}.
==== {{sustantivo propio|gl}} ====
;1 {{csem|países|leng=gl}}: {{plm|Estados Unidos de América}}.
==== Véase también ====
{{Wikipedia|leng=gl}}
== Referencias y notas ==
<references />
lbb6q2qbzxl884j9pw0f56eul631sow
Mexico
0
11029
6118119
6043888
2026-06-16T00:45:16Z
Enohecruzl79
181484
se agregó audio voz femenina
6118119
wikitext
text/x-wiki
{{desambiguación|México}}
== {{lengua|en}} ==
{{pron-graf|leng=en
|1pron1=Reino Unido|1fono1=ˈmɛk.sɪˌkəʊ
|2pron1=EE. UU.|2fono1=ˈmɛk.sɪˌkoʊ|2audio1=en-us-Mexico.ogg|2audio2=México=LL-Q1860 (eng)-Simplificationalizer-Mexico.wav|2aunota2=Nueva Jersey|audio3 =LL-Q1321 (spa)-Enohecruzl79-México.wav|aunota3=voz femenina mexicana
}}
=== Etimología ===
{{etimología|leng=en}}.
=== {{sustantivo propio|en}} ===
;1 {{csem|países|leng=en}}: {{l|es|México}}.
{{topónimo|capital1=Mexico City|gentilicio1=Mexican|nombre1=United Mexican States}}
=== Véase también ===
{{Wikipedia|idioma=en}}
== {{lengua|fr}} ==
{{pron-graf|leng=fr}}
=== Etimología ===
{{etimología|leng=fr}}.
=== {{sustantivo propio|fr}} ===
;1 {{csem|leng=fr|ciudades|p=México}}: [[Ciudad de México]].
=== Información adicional ===
* No se confunda con [[Mexique]], que se refiere al país de [[México]].
=== Véase también ===
{{W|idioma=fr}}
== {{lengua|nci}} ==
{{pron-graf|leng=nci}}
=== Etimología ===
{{etimología|leng=nci}}.
=== {{sustantivo|nci}} ===
;1 {{csem|países|leng=nci}}: {{l|es|México}}.<ref>García Escamilla, Enrique (1994); ''Historia de México narrada en náhuatl y español, acorde al calendario aztecas'', Plaza y Valdés Editores, Ciudad de México.</ref>
== {{lengua|nl}} ==
{{pron-graf|leng=nl}}
=== Etimología ===
{{etimología|leng=nl}}.
=== {{sustantivo propio|nl}} ===
;1 {{csem|países|leng=nl}}: {{l|es|México}}.
=== Véase también ===
{{Wikipedia|idioma=nl}}
== Referencias y notas ==
<references />
qmryqove5azw2b8kexbpidvtvqq5xyp
6118186
6118119
2026-06-16T02:27:21Z
Taichi
334
Se ha deshecho la revisión [[Special:Diff/6118119|6118119]] de [[Special:Contributions/Enohecruzl79|Enohecruzl79]] ([[User talk:Enohecruzl79|disc.]]) - disculpa, pero acabas de insertar este audio en la acepción en inglés, y la pronunciación del audio es netamente español...
6118186
wikitext
text/x-wiki
{{desambiguación|México}}
== {{lengua|en}} ==
{{pron-graf|leng=en
|1pron1=Reino Unido|1fono1=ˈmɛk.sɪˌkəʊ
|2pron1=EE. UU.|2fono1=ˈmɛk.sɪˌkoʊ|2audio1=en-us-Mexico.ogg|2audio2=LL-Q1860 (eng)-Simplificationalizer-Mexico.wav|2aunota2=Nueva Jersey
}}
=== Etimología ===
{{etimología|leng=en}}.
=== {{sustantivo propio|en}} ===
;1 {{csem|países|leng=en}}: {{l|es|México}}.
{{topónimo|capital1=Mexico City|gentilicio1=Mexican|nombre1=United Mexican States}}
=== Véase también ===
{{Wikipedia|idioma=en}}
== {{lengua|fr}} ==
{{pron-graf|leng=fr}}
=== Etimología ===
{{etimología|leng=fr}}.
=== {{sustantivo propio|fr}} ===
;1 {{csem|leng=fr|ciudades|p=México}}: [[Ciudad de México]].
=== Información adicional ===
* No se confunda con [[Mexique]], que se refiere al país de [[México]].
=== Véase también ===
{{W|idioma=fr}}
== {{lengua|nci}} ==
{{pron-graf|leng=nci}}
=== Etimología ===
{{etimología|leng=nci}}.
=== {{sustantivo|nci}} ===
;1 {{csem|países|leng=nci}}: {{l|es|México}}.<ref>García Escamilla, Enrique (1994); ''Historia de México narrada en náhuatl y español, acorde al calendario aztecas'', Plaza y Valdés Editores, Ciudad de México.</ref>
== {{lengua|nl}} ==
{{pron-graf|leng=nl}}
=== Etimología ===
{{etimología|leng=nl}}.
=== {{sustantivo propio|nl}} ===
;1 {{csem|países|leng=nl}}: {{l|es|México}}.
=== Véase también ===
{{Wikipedia|idioma=nl}}
== Referencias y notas ==
<references />
do5e1e29e8ayctdpfi80ce8vihm2voc
Alaska
0
11331
6118113
6117968
2026-06-16T00:30:09Z
Enohecruzl79
181484
se agregó audio voz femenina
6118113
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|audio=LL-Q1321 (spa)-Enohecruzl79-Alaska.wav|aunota1=voz femenina mexicana}}
=== Etimología ===
{{etimología}}.
=== {{sustantivo|es|propio}} ===
[[Archivo:Alaska in United States (US50).svg|miniaturadeimagen|[1] Ubicación resaltada en rojo]][[Archivo: Flag of Alaska.svg |240px|miniaturadeimagen|Bandera de Alaska]]
;1 {{csem|regiones|p=los Estados Unidos}}: {{plm|estado}} de los {{l|es|Estados Unidos de América}}, situado en el {{l|es|extremo}} {{l|es|noroeste}} del {{l|es|continente}} {{l|es|americano}}.
{{topónimo|capital1=Juneau|gentilicio1=alaskeño}}
=== Véase también ===
{{Commons}}
{{Wikinoticias}}
{{Wikipedia}}
{{Wikiviajes}}
{{USA}}
=== Traducciones ===
{{trad-arriba}}
{{t|en|t1=Alaska}}
{{t|ja|t1=アラスカ州}}
{{trad-abajo}}
== Referencias y notas ==
<references />
ienoajxo52b7nkmyqfw2v2wcoe5uyi3
Wikcionario:Vandalismo en curso
4
12436
6118192
6117442
2026-06-16T04:41:37Z
Tmagc
158167
6118192
wikitext
text/x-wiki
{{Archivo discusión}}
{{atajo|WN:VEC}}
Antes de denunciar vandalismos, es muy importante que recuerdes [[w:es:Wikipedia:Presume buena fe|presumir buena fe]] y la [[w:es:Wikipedia:Wikipetiqueta|wikipetiqueta]].
<big>'''Use estas plantillas para denunciar algún vandalismo:'''</big>
*Para usuarios: {{epc|subst:reportevandalismo|(posible vándalo)|(motivo del reporte)}}
*Para IP: {{epc|subst:reportevandalismoIP|(posible vándalo)|(motivo del reporte)}}
Para reportes antiguos: [[Wikcionario:Vandalismo en curso/Archivo|Archivo]]
'''''Nota: por favor añade nuevas alertas al principio de la lista.'''''
----
=== Alex4660 ===
* Posible vándalo: {{vándalo|Alex4660}}
* Motivo del informe: El usuario utiliza LLMs para inventarse cosas que no aparecen en absoluto en las fuentes que cita, además de que también utiliza LLMs cuando interactúa con los demás usuarios para tomarles el pelo.
* Usuario que informa: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:41 16 jun 2026 (UTC)
* Acción administrativa: (a rellenar por un administrador)
=== ~2026-33534-18 ===
* Posible vándalo: {{vándaloIP|~2026-33534-18}}
* Motivo de reporte: reiteradas modificaciones sin sentido en páginas de números
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:55 7 jun 2026 (UTC)
* Acción administrativa: (a rellenar por un administrador)
=== ~2026-27883-60 ===
* Posible vándalo: {{vándaloIP|~2026-27883-60}}
* Motivo de reporte: inserción de contenido pornográfico en [[leche]]
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:01 8 may 2026 (UTC)
* Acción administrativa: Bloqueado, gracias. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:58 8 may 2026 (UTC)
=== ~2026-23348-68 ===
* Posible vándalo: {{vándaloIP|~2026-23348-68}}
* Motivo de reporte: Reiteradas ediciones vandálicas en el Café
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 02:48 16 abr 2026 (UTC)
* Acción administrativa: Parece haberse calmado. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:40 16 abr 2026 (UTC)
=== ~2026-17377-94 ===
* Posible vándalo: {{vándaloIP|~2026-17377-94}}
* Motivo de reporte: ídem anterior
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:04 19 mar 2026 (UTC)
* Acción administrativa: Parece haberse calmado. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:15 19 mar 2026 (UTC)
=== ~2026-17075-73 ===
* Posible vándalo: {{vándaloIP|~2026-17075-73}}
* Motivo de reporte: modificación masiva de fechas en eras prehistóricas
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:04 19 mar 2026 (UTC)
* Acción administrativa: Parece haberse calmado. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:15 19 mar 2026 (UTC)
=== ~2026-47775 ===
* Posible vándalo: {{vándaloIP|~2026-47775}}
* Motivo de reporte: El usuario insiste en imponer su punto de vista en [[tuna]] sin haber obtenido ningún tipo de consenso. Insiste además con agregar una referencia que no cumple el formato indicado en {{ep|referencia}} ni en [[WN:ES]] y se inventa información que no aparece en el artículo que intenta citar.
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 18:38 3 ene 2026 (UTC)
* Acción administrativa: He protegido la entrada y he solicitado al usuario que utilice la página de discusión asociada para llegar a un consenso. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 23:15 3 ene 2026 (UTC)
=== Lioferro22 ===
* Posible vándalo: {{vándalo|Lioferro22}}
* Motivo del informe: Vandalismo encubierto en [[lunfardo]] y [[Apéndice:Glosario del lunfardo]], no sé cómo nadie lo advirtió en su momento. Aunque es tarde, el usuario debería ser advertido como mínimo. Dejo esto para que quede registro en un futuro si el usuario vuelve a insistir con este tipo de ediciones.
* Usuario que informa: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 03:50 29 ago 2025 (UTC)
* Acción administrativa: Usuario advertido. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 20:21 29 ago 2025 (UTC)
=== 186.11.5.206 ===
* Posible vándalo: {{vándaloIP|186.11.5.206}}
* Motivo de reporte: Vandalismo persistente en [[Antonia]] a pesar de las advertencias
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 02:53 10 dic 2024 (UTC)
* Acción administrativa: De momento ha sido puntual; si reincide, lo bloquearemos. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:18 10 dic 2024 (UTC)
=== 77.226.251.134 ===
* Posible vándalo: {{vándaloIP|77.226.251.134}}
* Motivo de reporte: vandalismo reiterado en [[Adolf]] y [[Biblia]]
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:01 9 dic 2024 (UTC)
* Acción administrativa: Lo bloqueé ayer por un día. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:18 10 dic 2024 (UTC)
=== 189.28.94.34 ===
* Posible vándalo: {{vándaloIP|189.28.94.34}}
* Motivo de reporte: Vandalismo reiterado
* Usuario que reporta: [[Usuario:Cysquatch|Cysquatch]] ([[Usuario discusión:Cysquatch|discusión]]) 01:00 12 sep 2024 (UTC)
* Acción administrativa: Parece una proxy, de momento ha sido una cosa puntual. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:42 12 sep 2024 (UTC)
=== Spookin' The Person , Raiki11 , Maxigladiador10 ===
* Posibles vándalos: {{vándalo|Spookin' The Person}}, {{vándalo|Raiki11}}, {{vándalo|Maxigladiador10}}
* Motivo de reporte: Vandalismo coordinado en [[verosímil]] e [[inverosímil]]. Múltiples cuentas coordinadas para vandalismo, esto no merece ningún perdón.
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:21 23 aug 2024 (UTC)
* Acción administrativa: los tres han sido bloqueados. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:32 24 ago 2024 (UTC)
=== 186.134.70.148 ===
* Posible vándalo: {{vándaloIP|186.134.70.148}}
* Motivo de reporte: Ediciones sin sentido. Por favor, eliminar registro de edición en páginas por contenido personal
* Usuario que reporta: — <span style="text-shadow:grey 0.8em 0,5em ;font-family:serif">[[User:Mazbel|ℳazbel]] <sup><nowiki>[</nowiki>[[User talk:Mazbel|Talk]]<nowiki>]</nowiki></sup></span> 02:58 9 ago 2024 (UTC)
* Acción administrativa: hecho. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:32 24 ago 2024 (UTC)
=== 181.43.208.235 ===
* Posible vándalo: {{vándaloIP|181.43.208.235}}
* Motivo de reporte: Está agregando contenido incorrecto
* Usuario que reporta: [[Usuario:Maximillion Pegasus|Maximillion Pegasus]] ([[Usuario discusión:Maximillion Pegasus|discusión]]) 17:59 31 ene 2024 (UTC)
* Acción administrativa: IP bloqueada durante una semana, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 00:30 1 feb 2024 (UTC)
=== 190.199.184.72 ===
* Posible vándalo: {{vándaloIP|190.199.184.72}}
* Motivo de reporte: Ataques a otras personas, probablemente se necesiten ocultar las revisiones.
* Usuario que reporta: [[Usuario:FlyingAce|FlyingAce]] ([[Usuario discusión:FlyingAce|discusión]]) 05:37 9 ene 2022 (UTC)
* Acción administrativa: Parece una IP dinámica y han pasado varias horas, de modo que prescindo del bloqueo salvo que se repita. He borrado/ocultado sus ediciones. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 10:06 9 ene 2022 (UTC)
=== 85.192.72.141 ===
* Posible vándalo: {{vándaloIP|85.192.72.141}}
* Motivo de reporte: [[Especial:Contribuciones/85.192.72.141|Diferentes cambios]]
* Usuario que reporta: [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 13:22 23 mar 2021 (UTC)
* Acción administrativa: Gracias por el aviso, {{u2|Cvmontuy}}, aunque veo que llego tarde. Sobre esas horas suelo estar disponible, de modo que debería ver la notificación si me mencionas. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 20:55 23 mar 2021 (UTC)
=== 186.77.192.0 ===
* Posible vándalo: {{vándaloIP|186.77.192.0}}
* Motivo de reporte: Información falsa en [[divisor]]
* Usuario que reporta: [[Usuario:Dentonius|Dentonius]] ([[Usuario discusión:Dentonius|discusión]]) 22:09 7 mar 2021 (UTC)
* Acción administrativa: llegamos tarde, pero le he bloqueado temporalmente por si intenta volver en las próximas horas. Gracias por el aviso, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 23:10 7 mar 2021 (UTC)
=== 186.86.32.97 ===
* Posible vándalo: {{vándaloIP|186.86.32.97}}
* Motivo de reporte: Blanqueo en [[Apéndice:1000 palabras básicas en español]]
* Usuario que reporta: [[Usuario:Isabelle Belato|Isabelle Belato]] ([[Usuario discusión:Isabelle Belato|discusión]]) 22:19 27 ago 2020 (UTC)
* Acción administrativa: El usuario no ha vuelto a editar desde entonces, no se han aplicado medidas. Gracias por el aviso, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 10:03 28 ago 2020 (UTC)
=== 186.143.138.184 ===
* Posible vándalo: {{vándaloIP|186.143.138.184}}
* Motivo de reporte: Información falsa en [[Aerodinamia]]
* Usuario que reporta: [[Usuario:Isabelle Belato|Isabelle Belato]] ([[Usuario discusión:Isabelle Belato|discusión]]) 16:42 27 ago 2020 (UTC)
* Acción administrativa: Solo tres ediciones en rápida sucesión, aquí hubiera bastado colocar la plantilla {{ep|destruir}}. La página ha sido borrada, gracias por el aviso, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 10:06 28 ago 2020 (UTC)
=== 213.99.113.187 ===
* Posible vándalo: {{vándaloIP|213.99.113.187}}
* Motivo de reporte: Vandalism : blanked page
* Usuario que reporta: [[Usuario:Tomybrz|Tomybrz]] ([[Usuario discusión:Tomybrz|discusión]]) 17:19 10 ene 2019 (UTC)
* Acción administrativa: Siento la intrusión pero el usuario llevaba vandalizando ya unas horas y no ví a ningún administrador local activo así que en uso de mis facultades como steward le he bloqueado por 31 horas. Ruego se me disculpe la intrusión y desde luego quedo a vuestra disposición para cualquier cuestión, aclaración o bronca que se me quiera realizar. Un saludo, --[[Usuario:MarcoAurelio|MarcoAurelio]] ([[Usuario discusión:MarcoAurelio|discusión]]) 17:22 10 ene 2019 (UTC)
*: Hago extensivo el bloqueo también a [[Especial:Contribuciones/Pepitogafas]] por las mismas circunstancias. --[[Usuario:MarcoAurelio|MarcoAurelio]] ([[Usuario discusión:MarcoAurelio|discusión]]) 17:25 10 ene 2019 (UTC)
*::Hola, Gracias. [[Usuario:Tomybrz|Tomybrz]] ([[Usuario discusión:Tomybrz|discusión]]) 17:32 10 ene 2019 (UTC)
*::: Hola, {{u2|MarcoAurelio}}. Ha sido una buena decisión, gracias por estar atento, y gracias {{u2|Tomybrz}} por notificar de esto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 23:28 10 ene 2019 (UTC)
=== Morsoymorsulo ===
* Posible vándalo: {{vándalo|Morsoymorsulo}}
* Motivo del informe: Cuenta creada para vandalizar. Añade basura a las páginas.
* Usuario que informa: [[Usuario:Zerabat|Zerabat]] ([[Usuario discusión:Zerabat|discusión]]) 20:02 23 mar 2018 (UTC)
* Acción administrativa: bloqueado indefinidamente. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:35 24 mar 2018 (UTC)
=== Sonrickslove ===
* Posible vándalo: {{vándalo|Sonrickslove}}
* Motivo del informe: Vandalismo reiterado en [[papu]] pese a las advertencias.
* Usuario que informa: [[Usuario:Ivanics|Ivanics]] ([[Usuario Discusión:Ivanics|Res publica non dominetur]]) 00:39 3 mar 2016 (UTC)
* Acción administrativa: {{ping|Ivanics}} ahora está prohibido editar. Lo siento por la espera. --[[Usuario:Romanophile|<span style="color:#000198">'''R'''omanófilo</span>]] [[Usuario discusión:Romanophile|♞]] ([[Especial:Contribuciones/Romanophile|contribuciones]]) 06:42 3 mar 2016 (UTC)
=== 83.63.210.154 ===
* Posible vándalo: {{vándaloIP|83.63.210.154}}
* Motivo de reporte: Vandalismo persistente y creación de entradas vandálicas
* Usuario que reporta: [[Usuario:Cyrax Cyborg|Cyrax Cyborg]] ([[Usuario discusión:Cyrax Cyborg|discusión]]) 19:21 29 ago 2012 (UTC)
* Acción administrativa: Ya había sido bloqueada, se ha detenido, si reincide se le vuele a bloquear. [[Usuario:Vubo|Vubo]] ([[Usuario discusión:Vubo|discusión]]) 18:31 30 ago 2012 (UTC)
=== 190.28.163.174 ===
* Posible vándalo: {{vándaloIP|190.28.163.174}}
* Motivo de reporte: La IP insiste en añadir spam y autopromoción en varias entradas como se puede ver en sus [[Especial:Contribuciones/190.28.163.174|contribuciones]] aún después de la última advertencia.
* Usuario que reporta: [[Usuario:Cyrax Cyborg|Cyrax Cyborg]] ([[Usuario discusión:Cyrax Cyborg|discusión]]) 21:59 19 sep 2012 (UTC)
* Acción administrativa: {{hecho}}. Gracias a Tegel fué bloqueada por 6 horas. [[Usuario:Cyrax Cyborg|Cyrax Cyborg]] ([[Usuario discusión:Cyrax Cyborg|discusión]]) 22:15 19 sep 2012 (UTC)
=== Wikcionario ===
* Posible vándalo: {{vándalo|Wikcionario}}
* Motivo del informe: Ediciones con grandes cantidades de imágenes y reversión de los etiquetados para borrar
* Usuario que informa: [[Especial:Contribuciones/95.20.45.193|95.20.45.193]] 15:02 21 oct 2012 (UTC)
* Acción administrativa: El usuario ya fue bloqueado por Tegel. Gracias. [[Usuario:Vubo|Vubo]] ([[Usuario discusión:Vubo|discusión]]) 20:12 21 oct 2012 (UTC)
=== 187.174.142.40 ===
* Posible vándalo: {{vándaloIP|187.174.142.40}}
* Motivo del informe: La IP insiste en agregar basura a las páginas. Ver [[Especial:Contribuciones/187.174.142.40|contribuciones]].
* Usuario que informa: [[Usuario:Taba1964|Taba1964]]--[[Usuario:Taba1964|Taba1964]] ([[Usuario discusión:Taba1964|discusión]]) 21:38 26 nov 2012 (UTC)
:Bloqueado un mes, gracias por la información. [[Usuario:Lourdes Cardenal|Lourdes Cardenal]] ([[Usuario discusión:Lourdes Cardenal|discusión]]) 22:41 26 nov 2012 (UTC)
=== 190.12.51.53 ===
* Posible vándalo: {{vándaloIP|190.12.51.53}}
* Motivo de reporte: Ha creado cinco páginas vacías y sigue haciéndolo a pesar de repetidos mensajes en su página de discusión
* Usuario que reporta: [[Usuario:Edgefield|Edgefield]] ([[Usuario discusión:Edgefield|discusión]]) 13:50 21 dic 2012 (UTC)
* Acción administrativa: Juas... esto ya está muy viejo XD. Saludos [[w:es:Usuario:Hprmedina|Hprmedina]] ([[Usuario discusión:Hprmedina|discusión aquí]]) ([[w:es:Usuario discusión:Hprmedina|discusión wp:es]]) 12:28 16 oct 2015 (UTC)
=== Laura Fiurocci ===
* Posible vándalo: {{vándalo|Laura Fiurocci}}
* Motivo del informe: Vandalismo Reiterado en [[medio]] y Suplantación de {{u2|Laura Fiorucci}}.
* Usuario que informa:[[Usuario:AlvaroMolina|AlvaroMolina]] ([[Usuario discusión:AlvaroMolina|discusión]]) 08:03 15 oct 2016 (UTC)
* Acción administrativa: bloqueado indefinidamente, contribuciones ocultadas o borradas del historial. Gracias por el aviso, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 10:54 15 oct 2016 (UTC)
=== Quian prince ===
* Posible vándalo: {{vándalo|Quian prince}}
* Motivo del informe: Repetidas ediciones a la pagina de usuario de [[Usuario:Lin linao|Lin linao]].
* Usuario que informa: [[Usuario:Tom 144|Tom 144]] ([[Usuario discusión:Tom 144|discusión]]) 18:12 19 sep 2017 (UTC)
* Acción administrativa: bloqueado por tres días para que lea las normas del proyecto; yo no le daría más oportunidades. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:29 19 sep 2017 (UTC)
=== 189.216.166.247 ===
* Posible vándalo: {{vándalo|189.216.166.247}}
* Motivo del informe: Vandal, I'm from [[meta:SWMT]]
*Usuario que informa:--[[Usuario:ValeJappo|ValeJappo]] ([[Usuario discusión:ValeJappo|discusión]]) 19:54 27 may 2020 (UTC)
* Acción administrativa: observando, de momento sin ediciones desde la última (hace una hora). [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 20:50 27 may 2020 (UTC)
=== 186.130.60.184 ===
* Posible vándalo: {{vándaloIP|186.130.60.184}}
* Motivo de reporte: Only vandalism, long term abuse (please see [https://es.wikiquote.org/wiki/Especial:Contribuciones/186.130.0.0/18 edit on es.wikiquote])
* Usuario que reporta: [[Usuario:Mtarch11|Mtarch11]] ([[Usuario discusión:Mtarch11|discusión]]) 03:11 20 ene 2021 (UTC)
* Acción administrativa: hecho, he vuelto a bloquear el rango 186.130.0.0/18, esta vez por un periodo de medio año. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 11:11 20 ene 2021 (UTC)
=== Linkai6 ===
* Posible vándalo: {{vándalo|Linkai6}}
* Motivo del informe: evidently vandalism-only account
* Usuario que informa: [[Usuario:LR0725|LR0725]] ([[Usuario discusión:LR0725|discusión]]) 07:46 28 jul 2023 (UTC)
* Acción administrativa: el usuario ha sido bloqueado. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:24 28 jul 2023 (UTC)
[[Categoría:Mantenimiento|Vandalismo en curso]]
[[fr:Wiktionnaire:Demandes aux administrateurs]]
[[pt:Wikcionário:Pedidos a administradores]]
ttpy2atuidalif2ambn7sxhtwhrwf5j
6118195
6118192
2026-06-16T09:25:15Z
Peter Bowman
34685
/* Alex4660 */ +
6118195
wikitext
text/x-wiki
{{Archivo discusión}}
{{atajo|WN:VEC}}
Antes de denunciar vandalismos, es muy importante que recuerdes [[w:es:Wikipedia:Presume buena fe|presumir buena fe]] y la [[w:es:Wikipedia:Wikipetiqueta|wikipetiqueta]].
<big>'''Use estas plantillas para denunciar algún vandalismo:'''</big>
*Para usuarios: {{epc|subst:reportevandalismo|(posible vándalo)|(motivo del reporte)}}
*Para IP: {{epc|subst:reportevandalismoIP|(posible vándalo)|(motivo del reporte)}}
Para reportes antiguos: [[Wikcionario:Vandalismo en curso/Archivo|Archivo]]
'''''Nota: por favor añade nuevas alertas al principio de la lista.'''''
----
=== Alex4660 ===
* Posible vándalo: {{vándalo|Alex4660}}
* Motivo del informe: El usuario utiliza LLMs para inventarse cosas que no aparecen en absoluto en las fuentes que cita, además de que también utiliza LLMs cuando interactúa con los demás usuarios para tomarles el pelo.
* Usuario que informa: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:41 16 jun 2026 (UTC)
* Acción administrativa: Gracias por detectarlo. Le he bloqueado temporalmente, la próxima será definitiva. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:25 16 jun 2026 (UTC)
=== ~2026-33534-18 ===
* Posible vándalo: {{vándaloIP|~2026-33534-18}}
* Motivo de reporte: reiteradas modificaciones sin sentido en páginas de números
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:55 7 jun 2026 (UTC)
* Acción administrativa: (a rellenar por un administrador)
=== ~2026-27883-60 ===
* Posible vándalo: {{vándaloIP|~2026-27883-60}}
* Motivo de reporte: inserción de contenido pornográfico en [[leche]]
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:01 8 may 2026 (UTC)
* Acción administrativa: Bloqueado, gracias. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:58 8 may 2026 (UTC)
=== ~2026-23348-68 ===
* Posible vándalo: {{vándaloIP|~2026-23348-68}}
* Motivo de reporte: Reiteradas ediciones vandálicas en el Café
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 02:48 16 abr 2026 (UTC)
* Acción administrativa: Parece haberse calmado. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:40 16 abr 2026 (UTC)
=== ~2026-17377-94 ===
* Posible vándalo: {{vándaloIP|~2026-17377-94}}
* Motivo de reporte: ídem anterior
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:04 19 mar 2026 (UTC)
* Acción administrativa: Parece haberse calmado. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:15 19 mar 2026 (UTC)
=== ~2026-17075-73 ===
* Posible vándalo: {{vándaloIP|~2026-17075-73}}
* Motivo de reporte: modificación masiva de fechas en eras prehistóricas
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:04 19 mar 2026 (UTC)
* Acción administrativa: Parece haberse calmado. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:15 19 mar 2026 (UTC)
=== ~2026-47775 ===
* Posible vándalo: {{vándaloIP|~2026-47775}}
* Motivo de reporte: El usuario insiste en imponer su punto de vista en [[tuna]] sin haber obtenido ningún tipo de consenso. Insiste además con agregar una referencia que no cumple el formato indicado en {{ep|referencia}} ni en [[WN:ES]] y se inventa información que no aparece en el artículo que intenta citar.
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 18:38 3 ene 2026 (UTC)
* Acción administrativa: He protegido la entrada y he solicitado al usuario que utilice la página de discusión asociada para llegar a un consenso. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 23:15 3 ene 2026 (UTC)
=== Lioferro22 ===
* Posible vándalo: {{vándalo|Lioferro22}}
* Motivo del informe: Vandalismo encubierto en [[lunfardo]] y [[Apéndice:Glosario del lunfardo]], no sé cómo nadie lo advirtió en su momento. Aunque es tarde, el usuario debería ser advertido como mínimo. Dejo esto para que quede registro en un futuro si el usuario vuelve a insistir con este tipo de ediciones.
* Usuario que informa: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 03:50 29 ago 2025 (UTC)
* Acción administrativa: Usuario advertido. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 20:21 29 ago 2025 (UTC)
=== 186.11.5.206 ===
* Posible vándalo: {{vándaloIP|186.11.5.206}}
* Motivo de reporte: Vandalismo persistente en [[Antonia]] a pesar de las advertencias
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 02:53 10 dic 2024 (UTC)
* Acción administrativa: De momento ha sido puntual; si reincide, lo bloquearemos. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:18 10 dic 2024 (UTC)
=== 77.226.251.134 ===
* Posible vándalo: {{vándaloIP|77.226.251.134}}
* Motivo de reporte: vandalismo reiterado en [[Adolf]] y [[Biblia]]
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:01 9 dic 2024 (UTC)
* Acción administrativa: Lo bloqueé ayer por un día. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:18 10 dic 2024 (UTC)
=== 189.28.94.34 ===
* Posible vándalo: {{vándaloIP|189.28.94.34}}
* Motivo de reporte: Vandalismo reiterado
* Usuario que reporta: [[Usuario:Cysquatch|Cysquatch]] ([[Usuario discusión:Cysquatch|discusión]]) 01:00 12 sep 2024 (UTC)
* Acción administrativa: Parece una proxy, de momento ha sido una cosa puntual. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:42 12 sep 2024 (UTC)
=== Spookin' The Person , Raiki11 , Maxigladiador10 ===
* Posibles vándalos: {{vándalo|Spookin' The Person}}, {{vándalo|Raiki11}}, {{vándalo|Maxigladiador10}}
* Motivo de reporte: Vandalismo coordinado en [[verosímil]] e [[inverosímil]]. Múltiples cuentas coordinadas para vandalismo, esto no merece ningún perdón.
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:21 23 aug 2024 (UTC)
* Acción administrativa: los tres han sido bloqueados. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:32 24 ago 2024 (UTC)
=== 186.134.70.148 ===
* Posible vándalo: {{vándaloIP|186.134.70.148}}
* Motivo de reporte: Ediciones sin sentido. Por favor, eliminar registro de edición en páginas por contenido personal
* Usuario que reporta: — <span style="text-shadow:grey 0.8em 0,5em ;font-family:serif">[[User:Mazbel|ℳazbel]] <sup><nowiki>[</nowiki>[[User talk:Mazbel|Talk]]<nowiki>]</nowiki></sup></span> 02:58 9 ago 2024 (UTC)
* Acción administrativa: hecho. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:32 24 ago 2024 (UTC)
=== 181.43.208.235 ===
* Posible vándalo: {{vándaloIP|181.43.208.235}}
* Motivo de reporte: Está agregando contenido incorrecto
* Usuario que reporta: [[Usuario:Maximillion Pegasus|Maximillion Pegasus]] ([[Usuario discusión:Maximillion Pegasus|discusión]]) 17:59 31 ene 2024 (UTC)
* Acción administrativa: IP bloqueada durante una semana, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 00:30 1 feb 2024 (UTC)
=== 190.199.184.72 ===
* Posible vándalo: {{vándaloIP|190.199.184.72}}
* Motivo de reporte: Ataques a otras personas, probablemente se necesiten ocultar las revisiones.
* Usuario que reporta: [[Usuario:FlyingAce|FlyingAce]] ([[Usuario discusión:FlyingAce|discusión]]) 05:37 9 ene 2022 (UTC)
* Acción administrativa: Parece una IP dinámica y han pasado varias horas, de modo que prescindo del bloqueo salvo que se repita. He borrado/ocultado sus ediciones. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 10:06 9 ene 2022 (UTC)
=== 85.192.72.141 ===
* Posible vándalo: {{vándaloIP|85.192.72.141}}
* Motivo de reporte: [[Especial:Contribuciones/85.192.72.141|Diferentes cambios]]
* Usuario que reporta: [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 13:22 23 mar 2021 (UTC)
* Acción administrativa: Gracias por el aviso, {{u2|Cvmontuy}}, aunque veo que llego tarde. Sobre esas horas suelo estar disponible, de modo que debería ver la notificación si me mencionas. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 20:55 23 mar 2021 (UTC)
=== 186.77.192.0 ===
* Posible vándalo: {{vándaloIP|186.77.192.0}}
* Motivo de reporte: Información falsa en [[divisor]]
* Usuario que reporta: [[Usuario:Dentonius|Dentonius]] ([[Usuario discusión:Dentonius|discusión]]) 22:09 7 mar 2021 (UTC)
* Acción administrativa: llegamos tarde, pero le he bloqueado temporalmente por si intenta volver en las próximas horas. Gracias por el aviso, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 23:10 7 mar 2021 (UTC)
=== 186.86.32.97 ===
* Posible vándalo: {{vándaloIP|186.86.32.97}}
* Motivo de reporte: Blanqueo en [[Apéndice:1000 palabras básicas en español]]
* Usuario que reporta: [[Usuario:Isabelle Belato|Isabelle Belato]] ([[Usuario discusión:Isabelle Belato|discusión]]) 22:19 27 ago 2020 (UTC)
* Acción administrativa: El usuario no ha vuelto a editar desde entonces, no se han aplicado medidas. Gracias por el aviso, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 10:03 28 ago 2020 (UTC)
=== 186.143.138.184 ===
* Posible vándalo: {{vándaloIP|186.143.138.184}}
* Motivo de reporte: Información falsa en [[Aerodinamia]]
* Usuario que reporta: [[Usuario:Isabelle Belato|Isabelle Belato]] ([[Usuario discusión:Isabelle Belato|discusión]]) 16:42 27 ago 2020 (UTC)
* Acción administrativa: Solo tres ediciones en rápida sucesión, aquí hubiera bastado colocar la plantilla {{ep|destruir}}. La página ha sido borrada, gracias por el aviso, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 10:06 28 ago 2020 (UTC)
=== 213.99.113.187 ===
* Posible vándalo: {{vándaloIP|213.99.113.187}}
* Motivo de reporte: Vandalism : blanked page
* Usuario que reporta: [[Usuario:Tomybrz|Tomybrz]] ([[Usuario discusión:Tomybrz|discusión]]) 17:19 10 ene 2019 (UTC)
* Acción administrativa: Siento la intrusión pero el usuario llevaba vandalizando ya unas horas y no ví a ningún administrador local activo así que en uso de mis facultades como steward le he bloqueado por 31 horas. Ruego se me disculpe la intrusión y desde luego quedo a vuestra disposición para cualquier cuestión, aclaración o bronca que se me quiera realizar. Un saludo, --[[Usuario:MarcoAurelio|MarcoAurelio]] ([[Usuario discusión:MarcoAurelio|discusión]]) 17:22 10 ene 2019 (UTC)
*: Hago extensivo el bloqueo también a [[Especial:Contribuciones/Pepitogafas]] por las mismas circunstancias. --[[Usuario:MarcoAurelio|MarcoAurelio]] ([[Usuario discusión:MarcoAurelio|discusión]]) 17:25 10 ene 2019 (UTC)
*::Hola, Gracias. [[Usuario:Tomybrz|Tomybrz]] ([[Usuario discusión:Tomybrz|discusión]]) 17:32 10 ene 2019 (UTC)
*::: Hola, {{u2|MarcoAurelio}}. Ha sido una buena decisión, gracias por estar atento, y gracias {{u2|Tomybrz}} por notificar de esto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 23:28 10 ene 2019 (UTC)
=== Morsoymorsulo ===
* Posible vándalo: {{vándalo|Morsoymorsulo}}
* Motivo del informe: Cuenta creada para vandalizar. Añade basura a las páginas.
* Usuario que informa: [[Usuario:Zerabat|Zerabat]] ([[Usuario discusión:Zerabat|discusión]]) 20:02 23 mar 2018 (UTC)
* Acción administrativa: bloqueado indefinidamente. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:35 24 mar 2018 (UTC)
=== Sonrickslove ===
* Posible vándalo: {{vándalo|Sonrickslove}}
* Motivo del informe: Vandalismo reiterado en [[papu]] pese a las advertencias.
* Usuario que informa: [[Usuario:Ivanics|Ivanics]] ([[Usuario Discusión:Ivanics|Res publica non dominetur]]) 00:39 3 mar 2016 (UTC)
* Acción administrativa: {{ping|Ivanics}} ahora está prohibido editar. Lo siento por la espera. --[[Usuario:Romanophile|<span style="color:#000198">'''R'''omanófilo</span>]] [[Usuario discusión:Romanophile|♞]] ([[Especial:Contribuciones/Romanophile|contribuciones]]) 06:42 3 mar 2016 (UTC)
=== 83.63.210.154 ===
* Posible vándalo: {{vándaloIP|83.63.210.154}}
* Motivo de reporte: Vandalismo persistente y creación de entradas vandálicas
* Usuario que reporta: [[Usuario:Cyrax Cyborg|Cyrax Cyborg]] ([[Usuario discusión:Cyrax Cyborg|discusión]]) 19:21 29 ago 2012 (UTC)
* Acción administrativa: Ya había sido bloqueada, se ha detenido, si reincide se le vuele a bloquear. [[Usuario:Vubo|Vubo]] ([[Usuario discusión:Vubo|discusión]]) 18:31 30 ago 2012 (UTC)
=== 190.28.163.174 ===
* Posible vándalo: {{vándaloIP|190.28.163.174}}
* Motivo de reporte: La IP insiste en añadir spam y autopromoción en varias entradas como se puede ver en sus [[Especial:Contribuciones/190.28.163.174|contribuciones]] aún después de la última advertencia.
* Usuario que reporta: [[Usuario:Cyrax Cyborg|Cyrax Cyborg]] ([[Usuario discusión:Cyrax Cyborg|discusión]]) 21:59 19 sep 2012 (UTC)
* Acción administrativa: {{hecho}}. Gracias a Tegel fué bloqueada por 6 horas. [[Usuario:Cyrax Cyborg|Cyrax Cyborg]] ([[Usuario discusión:Cyrax Cyborg|discusión]]) 22:15 19 sep 2012 (UTC)
=== Wikcionario ===
* Posible vándalo: {{vándalo|Wikcionario}}
* Motivo del informe: Ediciones con grandes cantidades de imágenes y reversión de los etiquetados para borrar
* Usuario que informa: [[Especial:Contribuciones/95.20.45.193|95.20.45.193]] 15:02 21 oct 2012 (UTC)
* Acción administrativa: El usuario ya fue bloqueado por Tegel. Gracias. [[Usuario:Vubo|Vubo]] ([[Usuario discusión:Vubo|discusión]]) 20:12 21 oct 2012 (UTC)
=== 187.174.142.40 ===
* Posible vándalo: {{vándaloIP|187.174.142.40}}
* Motivo del informe: La IP insiste en agregar basura a las páginas. Ver [[Especial:Contribuciones/187.174.142.40|contribuciones]].
* Usuario que informa: [[Usuario:Taba1964|Taba1964]]--[[Usuario:Taba1964|Taba1964]] ([[Usuario discusión:Taba1964|discusión]]) 21:38 26 nov 2012 (UTC)
:Bloqueado un mes, gracias por la información. [[Usuario:Lourdes Cardenal|Lourdes Cardenal]] ([[Usuario discusión:Lourdes Cardenal|discusión]]) 22:41 26 nov 2012 (UTC)
=== 190.12.51.53 ===
* Posible vándalo: {{vándaloIP|190.12.51.53}}
* Motivo de reporte: Ha creado cinco páginas vacías y sigue haciéndolo a pesar de repetidos mensajes en su página de discusión
* Usuario que reporta: [[Usuario:Edgefield|Edgefield]] ([[Usuario discusión:Edgefield|discusión]]) 13:50 21 dic 2012 (UTC)
* Acción administrativa: Juas... esto ya está muy viejo XD. Saludos [[w:es:Usuario:Hprmedina|Hprmedina]] ([[Usuario discusión:Hprmedina|discusión aquí]]) ([[w:es:Usuario discusión:Hprmedina|discusión wp:es]]) 12:28 16 oct 2015 (UTC)
=== Laura Fiurocci ===
* Posible vándalo: {{vándalo|Laura Fiurocci}}
* Motivo del informe: Vandalismo Reiterado en [[medio]] y Suplantación de {{u2|Laura Fiorucci}}.
* Usuario que informa:[[Usuario:AlvaroMolina|AlvaroMolina]] ([[Usuario discusión:AlvaroMolina|discusión]]) 08:03 15 oct 2016 (UTC)
* Acción administrativa: bloqueado indefinidamente, contribuciones ocultadas o borradas del historial. Gracias por el aviso, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 10:54 15 oct 2016 (UTC)
=== Quian prince ===
* Posible vándalo: {{vándalo|Quian prince}}
* Motivo del informe: Repetidas ediciones a la pagina de usuario de [[Usuario:Lin linao|Lin linao]].
* Usuario que informa: [[Usuario:Tom 144|Tom 144]] ([[Usuario discusión:Tom 144|discusión]]) 18:12 19 sep 2017 (UTC)
* Acción administrativa: bloqueado por tres días para que lea las normas del proyecto; yo no le daría más oportunidades. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:29 19 sep 2017 (UTC)
=== 189.216.166.247 ===
* Posible vándalo: {{vándalo|189.216.166.247}}
* Motivo del informe: Vandal, I'm from [[meta:SWMT]]
*Usuario que informa:--[[Usuario:ValeJappo|ValeJappo]] ([[Usuario discusión:ValeJappo|discusión]]) 19:54 27 may 2020 (UTC)
* Acción administrativa: observando, de momento sin ediciones desde la última (hace una hora). [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 20:50 27 may 2020 (UTC)
=== 186.130.60.184 ===
* Posible vándalo: {{vándaloIP|186.130.60.184}}
* Motivo de reporte: Only vandalism, long term abuse (please see [https://es.wikiquote.org/wiki/Especial:Contribuciones/186.130.0.0/18 edit on es.wikiquote])
* Usuario que reporta: [[Usuario:Mtarch11|Mtarch11]] ([[Usuario discusión:Mtarch11|discusión]]) 03:11 20 ene 2021 (UTC)
* Acción administrativa: hecho, he vuelto a bloquear el rango 186.130.0.0/18, esta vez por un periodo de medio año. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 11:11 20 ene 2021 (UTC)
=== Linkai6 ===
* Posible vándalo: {{vándalo|Linkai6}}
* Motivo del informe: evidently vandalism-only account
* Usuario que informa: [[Usuario:LR0725|LR0725]] ([[Usuario discusión:LR0725|discusión]]) 07:46 28 jul 2023 (UTC)
* Acción administrativa: el usuario ha sido bloqueado. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:24 28 jul 2023 (UTC)
[[Categoría:Mantenimiento|Vandalismo en curso]]
[[fr:Wiktionnaire:Demandes aux administrateurs]]
[[pt:Wikcionário:Pedidos a administradores]]
pikrtygzyw0ar816kmwok1j6nstms2e
6118196
6118195
2026-06-16T10:59:19Z
Peter Bowman
34685
/* ~2026-33534-18 */ +
6118196
wikitext
text/x-wiki
{{Archivo discusión}}
{{atajo|WN:VEC}}
Antes de denunciar vandalismos, es muy importante que recuerdes [[w:es:Wikipedia:Presume buena fe|presumir buena fe]] y la [[w:es:Wikipedia:Wikipetiqueta|wikipetiqueta]].
<big>'''Use estas plantillas para denunciar algún vandalismo:'''</big>
*Para usuarios: {{epc|subst:reportevandalismo|(posible vándalo)|(motivo del reporte)}}
*Para IP: {{epc|subst:reportevandalismoIP|(posible vándalo)|(motivo del reporte)}}
Para reportes antiguos: [[Wikcionario:Vandalismo en curso/Archivo|Archivo]]
'''''Nota: por favor añade nuevas alertas al principio de la lista.'''''
----
=== Alex4660 ===
* Posible vándalo: {{vándalo|Alex4660}}
* Motivo del informe: El usuario utiliza LLMs para inventarse cosas que no aparecen en absoluto en las fuentes que cita, además de que también utiliza LLMs cuando interactúa con los demás usuarios para tomarles el pelo.
* Usuario que informa: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:41 16 jun 2026 (UTC)
* Acción administrativa: Gracias por detectarlo. Le he bloqueado temporalmente, la próxima será definitiva. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:25 16 jun 2026 (UTC)
=== ~2026-33534-18 ===
* Posible vándalo: {{vándaloIP|~2026-33534-18}}
* Motivo de reporte: reiteradas modificaciones sin sentido en páginas de números
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:55 7 jun 2026 (UTC)
* Acción administrativa: Bloqueado (ese mismo día, aunque olvidara escribir aquí), gracias. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 10:59 16 jun 2026 (UTC)
=== ~2026-27883-60 ===
* Posible vándalo: {{vándaloIP|~2026-27883-60}}
* Motivo de reporte: inserción de contenido pornográfico en [[leche]]
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:01 8 may 2026 (UTC)
* Acción administrativa: Bloqueado, gracias. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:58 8 may 2026 (UTC)
=== ~2026-23348-68 ===
* Posible vándalo: {{vándaloIP|~2026-23348-68}}
* Motivo de reporte: Reiteradas ediciones vandálicas en el Café
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 02:48 16 abr 2026 (UTC)
* Acción administrativa: Parece haberse calmado. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:40 16 abr 2026 (UTC)
=== ~2026-17377-94 ===
* Posible vándalo: {{vándaloIP|~2026-17377-94}}
* Motivo de reporte: ídem anterior
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:04 19 mar 2026 (UTC)
* Acción administrativa: Parece haberse calmado. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:15 19 mar 2026 (UTC)
=== ~2026-17075-73 ===
* Posible vándalo: {{vándaloIP|~2026-17075-73}}
* Motivo de reporte: modificación masiva de fechas en eras prehistóricas
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:04 19 mar 2026 (UTC)
* Acción administrativa: Parece haberse calmado. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:15 19 mar 2026 (UTC)
=== ~2026-47775 ===
* Posible vándalo: {{vándaloIP|~2026-47775}}
* Motivo de reporte: El usuario insiste en imponer su punto de vista en [[tuna]] sin haber obtenido ningún tipo de consenso. Insiste además con agregar una referencia que no cumple el formato indicado en {{ep|referencia}} ni en [[WN:ES]] y se inventa información que no aparece en el artículo que intenta citar.
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 18:38 3 ene 2026 (UTC)
* Acción administrativa: He protegido la entrada y he solicitado al usuario que utilice la página de discusión asociada para llegar a un consenso. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 23:15 3 ene 2026 (UTC)
=== Lioferro22 ===
* Posible vándalo: {{vándalo|Lioferro22}}
* Motivo del informe: Vandalismo encubierto en [[lunfardo]] y [[Apéndice:Glosario del lunfardo]], no sé cómo nadie lo advirtió en su momento. Aunque es tarde, el usuario debería ser advertido como mínimo. Dejo esto para que quede registro en un futuro si el usuario vuelve a insistir con este tipo de ediciones.
* Usuario que informa: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 03:50 29 ago 2025 (UTC)
* Acción administrativa: Usuario advertido. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 20:21 29 ago 2025 (UTC)
=== 186.11.5.206 ===
* Posible vándalo: {{vándaloIP|186.11.5.206}}
* Motivo de reporte: Vandalismo persistente en [[Antonia]] a pesar de las advertencias
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 02:53 10 dic 2024 (UTC)
* Acción administrativa: De momento ha sido puntual; si reincide, lo bloquearemos. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:18 10 dic 2024 (UTC)
=== 77.226.251.134 ===
* Posible vándalo: {{vándaloIP|77.226.251.134}}
* Motivo de reporte: vandalismo reiterado en [[Adolf]] y [[Biblia]]
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:01 9 dic 2024 (UTC)
* Acción administrativa: Lo bloqueé ayer por un día. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:18 10 dic 2024 (UTC)
=== 189.28.94.34 ===
* Posible vándalo: {{vándaloIP|189.28.94.34}}
* Motivo de reporte: Vandalismo reiterado
* Usuario que reporta: [[Usuario:Cysquatch|Cysquatch]] ([[Usuario discusión:Cysquatch|discusión]]) 01:00 12 sep 2024 (UTC)
* Acción administrativa: Parece una proxy, de momento ha sido una cosa puntual. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:42 12 sep 2024 (UTC)
=== Spookin' The Person , Raiki11 , Maxigladiador10 ===
* Posibles vándalos: {{vándalo|Spookin' The Person}}, {{vándalo|Raiki11}}, {{vándalo|Maxigladiador10}}
* Motivo de reporte: Vandalismo coordinado en [[verosímil]] e [[inverosímil]]. Múltiples cuentas coordinadas para vandalismo, esto no merece ningún perdón.
* Usuario que reporta: [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:21 23 aug 2024 (UTC)
* Acción administrativa: los tres han sido bloqueados. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:32 24 ago 2024 (UTC)
=== 186.134.70.148 ===
* Posible vándalo: {{vándaloIP|186.134.70.148}}
* Motivo de reporte: Ediciones sin sentido. Por favor, eliminar registro de edición en páginas por contenido personal
* Usuario que reporta: — <span style="text-shadow:grey 0.8em 0,5em ;font-family:serif">[[User:Mazbel|ℳazbel]] <sup><nowiki>[</nowiki>[[User talk:Mazbel|Talk]]<nowiki>]</nowiki></sup></span> 02:58 9 ago 2024 (UTC)
* Acción administrativa: hecho. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:32 24 ago 2024 (UTC)
=== 181.43.208.235 ===
* Posible vándalo: {{vándaloIP|181.43.208.235}}
* Motivo de reporte: Está agregando contenido incorrecto
* Usuario que reporta: [[Usuario:Maximillion Pegasus|Maximillion Pegasus]] ([[Usuario discusión:Maximillion Pegasus|discusión]]) 17:59 31 ene 2024 (UTC)
* Acción administrativa: IP bloqueada durante una semana, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 00:30 1 feb 2024 (UTC)
=== 190.199.184.72 ===
* Posible vándalo: {{vándaloIP|190.199.184.72}}
* Motivo de reporte: Ataques a otras personas, probablemente se necesiten ocultar las revisiones.
* Usuario que reporta: [[Usuario:FlyingAce|FlyingAce]] ([[Usuario discusión:FlyingAce|discusión]]) 05:37 9 ene 2022 (UTC)
* Acción administrativa: Parece una IP dinámica y han pasado varias horas, de modo que prescindo del bloqueo salvo que se repita. He borrado/ocultado sus ediciones. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 10:06 9 ene 2022 (UTC)
=== 85.192.72.141 ===
* Posible vándalo: {{vándaloIP|85.192.72.141}}
* Motivo de reporte: [[Especial:Contribuciones/85.192.72.141|Diferentes cambios]]
* Usuario que reporta: [[Usuario:Cvmontuy|Cvmontuy ]] [[Usuario_Discusi%C3%B3n:Cvmontuy|<sup>(mensajes)</sup>]] 13:22 23 mar 2021 (UTC)
* Acción administrativa: Gracias por el aviso, {{u2|Cvmontuy}}, aunque veo que llego tarde. Sobre esas horas suelo estar disponible, de modo que debería ver la notificación si me mencionas. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 20:55 23 mar 2021 (UTC)
=== 186.77.192.0 ===
* Posible vándalo: {{vándaloIP|186.77.192.0}}
* Motivo de reporte: Información falsa en [[divisor]]
* Usuario que reporta: [[Usuario:Dentonius|Dentonius]] ([[Usuario discusión:Dentonius|discusión]]) 22:09 7 mar 2021 (UTC)
* Acción administrativa: llegamos tarde, pero le he bloqueado temporalmente por si intenta volver en las próximas horas. Gracias por el aviso, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 23:10 7 mar 2021 (UTC)
=== 186.86.32.97 ===
* Posible vándalo: {{vándaloIP|186.86.32.97}}
* Motivo de reporte: Blanqueo en [[Apéndice:1000 palabras básicas en español]]
* Usuario que reporta: [[Usuario:Isabelle Belato|Isabelle Belato]] ([[Usuario discusión:Isabelle Belato|discusión]]) 22:19 27 ago 2020 (UTC)
* Acción administrativa: El usuario no ha vuelto a editar desde entonces, no se han aplicado medidas. Gracias por el aviso, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 10:03 28 ago 2020 (UTC)
=== 186.143.138.184 ===
* Posible vándalo: {{vándaloIP|186.143.138.184}}
* Motivo de reporte: Información falsa en [[Aerodinamia]]
* Usuario que reporta: [[Usuario:Isabelle Belato|Isabelle Belato]] ([[Usuario discusión:Isabelle Belato|discusión]]) 16:42 27 ago 2020 (UTC)
* Acción administrativa: Solo tres ediciones en rápida sucesión, aquí hubiera bastado colocar la plantilla {{ep|destruir}}. La página ha sido borrada, gracias por el aviso, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 10:06 28 ago 2020 (UTC)
=== 213.99.113.187 ===
* Posible vándalo: {{vándaloIP|213.99.113.187}}
* Motivo de reporte: Vandalism : blanked page
* Usuario que reporta: [[Usuario:Tomybrz|Tomybrz]] ([[Usuario discusión:Tomybrz|discusión]]) 17:19 10 ene 2019 (UTC)
* Acción administrativa: Siento la intrusión pero el usuario llevaba vandalizando ya unas horas y no ví a ningún administrador local activo así que en uso de mis facultades como steward le he bloqueado por 31 horas. Ruego se me disculpe la intrusión y desde luego quedo a vuestra disposición para cualquier cuestión, aclaración o bronca que se me quiera realizar. Un saludo, --[[Usuario:MarcoAurelio|MarcoAurelio]] ([[Usuario discusión:MarcoAurelio|discusión]]) 17:22 10 ene 2019 (UTC)
*: Hago extensivo el bloqueo también a [[Especial:Contribuciones/Pepitogafas]] por las mismas circunstancias. --[[Usuario:MarcoAurelio|MarcoAurelio]] ([[Usuario discusión:MarcoAurelio|discusión]]) 17:25 10 ene 2019 (UTC)
*::Hola, Gracias. [[Usuario:Tomybrz|Tomybrz]] ([[Usuario discusión:Tomybrz|discusión]]) 17:32 10 ene 2019 (UTC)
*::: Hola, {{u2|MarcoAurelio}}. Ha sido una buena decisión, gracias por estar atento, y gracias {{u2|Tomybrz}} por notificar de esto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 23:28 10 ene 2019 (UTC)
=== Morsoymorsulo ===
* Posible vándalo: {{vándalo|Morsoymorsulo}}
* Motivo del informe: Cuenta creada para vandalizar. Añade basura a las páginas.
* Usuario que informa: [[Usuario:Zerabat|Zerabat]] ([[Usuario discusión:Zerabat|discusión]]) 20:02 23 mar 2018 (UTC)
* Acción administrativa: bloqueado indefinidamente. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:35 24 mar 2018 (UTC)
=== Sonrickslove ===
* Posible vándalo: {{vándalo|Sonrickslove}}
* Motivo del informe: Vandalismo reiterado en [[papu]] pese a las advertencias.
* Usuario que informa: [[Usuario:Ivanics|Ivanics]] ([[Usuario Discusión:Ivanics|Res publica non dominetur]]) 00:39 3 mar 2016 (UTC)
* Acción administrativa: {{ping|Ivanics}} ahora está prohibido editar. Lo siento por la espera. --[[Usuario:Romanophile|<span style="color:#000198">'''R'''omanófilo</span>]] [[Usuario discusión:Romanophile|♞]] ([[Especial:Contribuciones/Romanophile|contribuciones]]) 06:42 3 mar 2016 (UTC)
=== 83.63.210.154 ===
* Posible vándalo: {{vándaloIP|83.63.210.154}}
* Motivo de reporte: Vandalismo persistente y creación de entradas vandálicas
* Usuario que reporta: [[Usuario:Cyrax Cyborg|Cyrax Cyborg]] ([[Usuario discusión:Cyrax Cyborg|discusión]]) 19:21 29 ago 2012 (UTC)
* Acción administrativa: Ya había sido bloqueada, se ha detenido, si reincide se le vuele a bloquear. [[Usuario:Vubo|Vubo]] ([[Usuario discusión:Vubo|discusión]]) 18:31 30 ago 2012 (UTC)
=== 190.28.163.174 ===
* Posible vándalo: {{vándaloIP|190.28.163.174}}
* Motivo de reporte: La IP insiste en añadir spam y autopromoción en varias entradas como se puede ver en sus [[Especial:Contribuciones/190.28.163.174|contribuciones]] aún después de la última advertencia.
* Usuario que reporta: [[Usuario:Cyrax Cyborg|Cyrax Cyborg]] ([[Usuario discusión:Cyrax Cyborg|discusión]]) 21:59 19 sep 2012 (UTC)
* Acción administrativa: {{hecho}}. Gracias a Tegel fué bloqueada por 6 horas. [[Usuario:Cyrax Cyborg|Cyrax Cyborg]] ([[Usuario discusión:Cyrax Cyborg|discusión]]) 22:15 19 sep 2012 (UTC)
=== Wikcionario ===
* Posible vándalo: {{vándalo|Wikcionario}}
* Motivo del informe: Ediciones con grandes cantidades de imágenes y reversión de los etiquetados para borrar
* Usuario que informa: [[Especial:Contribuciones/95.20.45.193|95.20.45.193]] 15:02 21 oct 2012 (UTC)
* Acción administrativa: El usuario ya fue bloqueado por Tegel. Gracias. [[Usuario:Vubo|Vubo]] ([[Usuario discusión:Vubo|discusión]]) 20:12 21 oct 2012 (UTC)
=== 187.174.142.40 ===
* Posible vándalo: {{vándaloIP|187.174.142.40}}
* Motivo del informe: La IP insiste en agregar basura a las páginas. Ver [[Especial:Contribuciones/187.174.142.40|contribuciones]].
* Usuario que informa: [[Usuario:Taba1964|Taba1964]]--[[Usuario:Taba1964|Taba1964]] ([[Usuario discusión:Taba1964|discusión]]) 21:38 26 nov 2012 (UTC)
:Bloqueado un mes, gracias por la información. [[Usuario:Lourdes Cardenal|Lourdes Cardenal]] ([[Usuario discusión:Lourdes Cardenal|discusión]]) 22:41 26 nov 2012 (UTC)
=== 190.12.51.53 ===
* Posible vándalo: {{vándaloIP|190.12.51.53}}
* Motivo de reporte: Ha creado cinco páginas vacías y sigue haciéndolo a pesar de repetidos mensajes en su página de discusión
* Usuario que reporta: [[Usuario:Edgefield|Edgefield]] ([[Usuario discusión:Edgefield|discusión]]) 13:50 21 dic 2012 (UTC)
* Acción administrativa: Juas... esto ya está muy viejo XD. Saludos [[w:es:Usuario:Hprmedina|Hprmedina]] ([[Usuario discusión:Hprmedina|discusión aquí]]) ([[w:es:Usuario discusión:Hprmedina|discusión wp:es]]) 12:28 16 oct 2015 (UTC)
=== Laura Fiurocci ===
* Posible vándalo: {{vándalo|Laura Fiurocci}}
* Motivo del informe: Vandalismo Reiterado en [[medio]] y Suplantación de {{u2|Laura Fiorucci}}.
* Usuario que informa:[[Usuario:AlvaroMolina|AlvaroMolina]] ([[Usuario discusión:AlvaroMolina|discusión]]) 08:03 15 oct 2016 (UTC)
* Acción administrativa: bloqueado indefinidamente, contribuciones ocultadas o borradas del historial. Gracias por el aviso, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 10:54 15 oct 2016 (UTC)
=== Quian prince ===
* Posible vándalo: {{vándalo|Quian prince}}
* Motivo del informe: Repetidas ediciones a la pagina de usuario de [[Usuario:Lin linao|Lin linao]].
* Usuario que informa: [[Usuario:Tom 144|Tom 144]] ([[Usuario discusión:Tom 144|discusión]]) 18:12 19 sep 2017 (UTC)
* Acción administrativa: bloqueado por tres días para que lea las normas del proyecto; yo no le daría más oportunidades. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:29 19 sep 2017 (UTC)
=== 189.216.166.247 ===
* Posible vándalo: {{vándalo|189.216.166.247}}
* Motivo del informe: Vandal, I'm from [[meta:SWMT]]
*Usuario que informa:--[[Usuario:ValeJappo|ValeJappo]] ([[Usuario discusión:ValeJappo|discusión]]) 19:54 27 may 2020 (UTC)
* Acción administrativa: observando, de momento sin ediciones desde la última (hace una hora). [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 20:50 27 may 2020 (UTC)
=== 186.130.60.184 ===
* Posible vándalo: {{vándaloIP|186.130.60.184}}
* Motivo de reporte: Only vandalism, long term abuse (please see [https://es.wikiquote.org/wiki/Especial:Contribuciones/186.130.0.0/18 edit on es.wikiquote])
* Usuario que reporta: [[Usuario:Mtarch11|Mtarch11]] ([[Usuario discusión:Mtarch11|discusión]]) 03:11 20 ene 2021 (UTC)
* Acción administrativa: hecho, he vuelto a bloquear el rango 186.130.0.0/18, esta vez por un periodo de medio año. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 11:11 20 ene 2021 (UTC)
=== Linkai6 ===
* Posible vándalo: {{vándalo|Linkai6}}
* Motivo del informe: evidently vandalism-only account
* Usuario que informa: [[Usuario:LR0725|LR0725]] ([[Usuario discusión:LR0725|discusión]]) 07:46 28 jul 2023 (UTC)
* Acción administrativa: el usuario ha sido bloqueado. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:24 28 jul 2023 (UTC)
[[Categoría:Mantenimiento|Vandalismo en curso]]
[[fr:Wiktionnaire:Demandes aux administrateurs]]
[[pt:Wikcionário:Pedidos a administradores]]
l7nbe93ienuscrno3b351qxrei97ju6
pared
0
12687
6118107
5925415
2026-06-15T23:55:50Z
Tmagc
158167
6118107
wikitext
text/x-wiki
{{desambiguación|parêd}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|osp|pared|pared}}, y esta {{etim|la|paries}}.
[[File:Pared_en_fútbol.png|thumb|(4)]]
=== {{sustantivo femenino|es}} ===
{{es.sust}}
;1: Parte estructural arquitectónica que constituye la capa principal de toda edificación, cerrando los espacios entre el suelo, el techo y las columnas. Suele estar hecha de [[concreto]], [[cemento]], [[madera]], [[ladrillo]]s, [[etc.]] según la naturaleza de la obra.
;2 {{csem|física}}: Cara de un objeto.
;3 {{csem|montañismo}}: Parte de una montaña que cae casi verticalmente.
;4 {{csem|fútbol}}: Devolución de la pelota entre dos jugadores que corren paralelamente.
;5: Lado lateral que hace ángulo recto con el frontón, utilizado para hacer rebotar la pelota.
;6: Toda superficie que limita, separa o divide un cuerpo.
{{ejemplo|La ''pared'' de un acuario.}}
;7: Superficie que limita los costados de un cuerpo.
;8: Parte estructural de una edificación cualquiera, que cierra los costados, y formada por cualquier material, correctamente adaptado o no para tal propósito.
{{ejemplo|Una chabola con ''paredes'' de lata.}}
=== Locuciones ===
{{trad-arriba|Locuciones con «pared»}}
* [[manta de pared]]
* [[pared celular]]:
* [[pared ciega]]: La que no tiene puertas ni ventanas.
* [[pared horma]]:
* [[pared maestra]]: Pared más gruesa que soporta una estructura pesada.
* [[pared medianera]]: Pared común a dos edificios.
* [[pared seca]]: Pared que no usa argamasa, yeso o cemento para unir sus elementos
* [[andar a tienta paredes]]
* [[arrimarse a las paredes]]
* [[coserse con la pared]]
* [[darse cabezazos contra una pared]]
* [[darse contra una pared]]
* [[de pared]]
* [[descargar las paredes]]
* [[entre cuatro paredes]]
* [[entre la espada y la pared]]
* [[hablar las paredes]]
* [[hasta la pared de enfrente]]
* [[las paredes oyen]]
* [[las paredes tienen ojos]]
* [[pared en medio]]
* [[pared por medio]]
* [[pegado a la pared]]
* [[piano de pared]]
* [[poner contra la pared]]
* [[ser mas sordo que una pared]]
* [[subirse por las paredes]]
{{trad-abajo}}
=== Refranes ===
* [[entre santa y santo, pared de calicanto]]
=== Véase también ===
{{w}}
=== Traducciones ===
{{trad-arriba}}
{{t|af|t1=muur}}
{{t|sq|t1=mur}}
{{t|de|g1=f|g2=f|t1=Mauer|t2=Wand}}
{{t|an|t1=paret}}
{{t|az|a1=1|t1=divar}}
{{t|br|t1=moger|t2=mur}}
{{t|bg|g1=f|t1=стена}}
{{t|ca|t1=paret|t2=mur}}
{{t|da|t1=mur}}
{{t|sk|t1=stena}}
{{t|eo|t1=muro}}
{{t|et|t1=sein}}
{{t|fi|t1=seinä}}
{{t|fr|a1=1,8|g1=m|g2=f|i2=s|t1=mur|t2=paroi}}
{{t|cy|g1=f|g2=m|t1=wal|t2=pared}}
{{t|gl|t1=parede}}
{{t|he|a1=1|t1=קיר|tr=kīr|g1=m}}
{{t|hu|t1=fal}}
{{t|id|t1=dinding}}
{{t|en|t1=wall}}
{{t|ga|t1=balla}}
{{t|it|t1=muro}}
{{t|la|t1=murus}}
{{t|lv|t1=siena}}
{{t|lt|t1=siena}}
{{t|mt|a1=1|g1=m|t1=ħajt}}
{{t|mn|a1=1|t1=хана}}
{{t|nl|g1=m|g2=m|t1=wand|t2=muur}}
{{t|nb|t1=vegg}}
{{t|pl|t1=mur}}
{{t|pt|t1=parede}}
{{t|ro|t1=perete}}
{{t|sv|t1=väggen}}
{{t|sw|t1=ukuta}}
{{t|tr|t1=duvar}}
{{t|eu|t1=horma}}
{{trad-abajo}}
== {{lengua|osp}} ==
{{pron-graf|leng=osp}}
=== Etimología 1 ===
{{etimología|leng=osp|la|paries|pared|alt=parietem}}.
==== {{sustantivo femenino|osp}} ====
;1 {{csem|leng=osp|arquitectura}}: {{plm}}.
== {{lengua|cy}} ==
{{pron-graf|leng=cy}}
=== Etimología 1 ===
{{etimología|leng=cy}}.
==== {{sustantivo masculino|cy}} ====
;1 {{csem|leng=cy|arquitectura}}: {{plm|pared}}.
{{sinónimo|leng=cy|wal}}.
;2 {{csem|leng=cy|arquitectura}}: {{plm|tabique}}.
==== Véase también ====
{{W|idioma=cy}}
== {{lengua|lad}} ==
{{pron-graf|leng=lad|g1=פאריד|g2=פארידֿ|g3=פארידﬞ|v1=pare|v2=פארי|valt1=paré}}
=== Etimología 1 ===
{{etimología|leng=lad|osp|pared|pared}}, y esta {{etim|leng=lad|la|paries}}.
==== {{sustantivo femenino|lad}} ====
;1 {{csem|leng=lad|arquitectura}}: {{plm}} ({{l|es|muro}}).
== Referencias y notas ==
<references />
n7kqptpshw3wrf7qjo3n1yvn1vxyyok
6118108
6118107
2026-06-15T23:56:58Z
Tmagc
158167
6118108
wikitext
text/x-wiki
{{desambiguación|parêd}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|osp|pared|pared}}, y esta {{etim|la|paries}}.
[[File:Pared_en_fútbol.png|thumb|(4) Pared entre los dos jugadores de rojo]]
=== {{sustantivo femenino|es}} ===
{{es.sust}}
;1: Parte estructural arquitectónica que constituye la capa principal de toda edificación, cerrando los espacios entre el suelo, el techo y las columnas. Suele estar hecha de [[concreto]], [[cemento]], [[madera]], [[ladrillo]]s, [[etc.]] según la naturaleza de la obra.
;2 {{csem|física}}: Cara de un objeto.
;3 {{csem|montañismo}}: Parte de una montaña que cae casi verticalmente.
;4 {{csem|fútbol}}: Devolución de la pelota entre dos jugadores que corren paralelamente.
;5: Lado lateral que hace ángulo recto con el frontón, utilizado para hacer rebotar la pelota.
;6: Toda superficie que limita, separa o divide un cuerpo.
{{ejemplo|La ''pared'' de un acuario.}}
;7: Superficie que limita los costados de un cuerpo.
;8: Parte estructural de una edificación cualquiera, que cierra los costados, y formada por cualquier material, correctamente adaptado o no para tal propósito.
{{ejemplo|Una chabola con ''paredes'' de lata.}}
=== Locuciones ===
{{trad-arriba|Locuciones con «pared»}}
* [[manta de pared]]
* [[pared celular]]:
* [[pared ciega]]: La que no tiene puertas ni ventanas.
* [[pared horma]]:
* [[pared maestra]]: Pared más gruesa que soporta una estructura pesada.
* [[pared medianera]]: Pared común a dos edificios.
* [[pared seca]]: Pared que no usa argamasa, yeso o cemento para unir sus elementos
* [[andar a tienta paredes]]
* [[arrimarse a las paredes]]
* [[coserse con la pared]]
* [[darse cabezazos contra una pared]]
* [[darse contra una pared]]
* [[de pared]]
* [[descargar las paredes]]
* [[entre cuatro paredes]]
* [[entre la espada y la pared]]
* [[hablar las paredes]]
* [[hasta la pared de enfrente]]
* [[las paredes oyen]]
* [[las paredes tienen ojos]]
* [[pared en medio]]
* [[pared por medio]]
* [[pegado a la pared]]
* [[piano de pared]]
* [[poner contra la pared]]
* [[ser mas sordo que una pared]]
* [[subirse por las paredes]]
{{trad-abajo}}
=== Refranes ===
* [[entre santa y santo, pared de calicanto]]
=== Véase también ===
{{w}}
=== Traducciones ===
{{trad-arriba}}
{{t|af|t1=muur}}
{{t|sq|t1=mur}}
{{t|de|g1=f|g2=f|t1=Mauer|t2=Wand}}
{{t|an|t1=paret}}
{{t|az|a1=1|t1=divar}}
{{t|br|t1=moger|t2=mur}}
{{t|bg|g1=f|t1=стена}}
{{t|ca|t1=paret|t2=mur}}
{{t|da|t1=mur}}
{{t|sk|t1=stena}}
{{t|eo|t1=muro}}
{{t|et|t1=sein}}
{{t|fi|t1=seinä}}
{{t|fr|a1=1,8|g1=m|g2=f|i2=s|t1=mur|t2=paroi}}
{{t|cy|g1=f|g2=m|t1=wal|t2=pared}}
{{t|gl|t1=parede}}
{{t|he|a1=1|t1=קיר|tr=kīr|g1=m}}
{{t|hu|t1=fal}}
{{t|id|t1=dinding}}
{{t|en|t1=wall}}
{{t|ga|t1=balla}}
{{t|it|t1=muro}}
{{t|la|t1=murus}}
{{t|lv|t1=siena}}
{{t|lt|t1=siena}}
{{t|mt|a1=1|g1=m|t1=ħajt}}
{{t|mn|a1=1|t1=хана}}
{{t|nl|g1=m|g2=m|t1=wand|t2=muur}}
{{t|nb|t1=vegg}}
{{t|pl|t1=mur}}
{{t|pt|t1=parede}}
{{t|ro|t1=perete}}
{{t|sv|t1=väggen}}
{{t|sw|t1=ukuta}}
{{t|tr|t1=duvar}}
{{t|eu|t1=horma}}
{{trad-abajo}}
== {{lengua|osp}} ==
{{pron-graf|leng=osp}}
=== Etimología 1 ===
{{etimología|leng=osp|la|paries|pared|alt=parietem}}.
==== {{sustantivo femenino|osp}} ====
;1 {{csem|leng=osp|arquitectura}}: {{plm}}.
== {{lengua|cy}} ==
{{pron-graf|leng=cy}}
=== Etimología 1 ===
{{etimología|leng=cy}}.
==== {{sustantivo masculino|cy}} ====
;1 {{csem|leng=cy|arquitectura}}: {{plm|pared}}.
{{sinónimo|leng=cy|wal}}.
;2 {{csem|leng=cy|arquitectura}}: {{plm|tabique}}.
==== Véase también ====
{{W|idioma=cy}}
== {{lengua|lad}} ==
{{pron-graf|leng=lad|g1=פאריד|g2=פארידֿ|g3=פארידﬞ|v1=pare|v2=פארי|valt1=paré}}
=== Etimología 1 ===
{{etimología|leng=lad|osp|pared|pared}}, y esta {{etim|leng=lad|la|paries}}.
==== {{sustantivo femenino|lad}} ====
;1 {{csem|leng=lad|arquitectura}}: {{plm}} ({{l|es|muro}}).
== Referencias y notas ==
<references />
ow2jz7ll90d70m2jf8kgng686p5sggz
follar
0
17438
6118146
6116247
2026-06-16T01:59:29Z
Tmagc
158167
/* Etimología 3 */
6118146
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{etimología|sufijo|fuelle|ar}}.
==== {{verbo transitivo|es}} ====
;1: {{plm|arrojar}} [[aire]] sobre algo empleando un [[fuelle]].
{{uso|desusado}}
==== Conjugación ====
{{es.v|alt=ue}}
=== Etimología 2 ===
{{etimología|la|folium|hoja}}.
==== {{verbo transitivo|es}} ====
;1: {{plm|formar}} [[hoja]]s con algún material.
{{uso|desusado}}
==== Conjugación ====
{{es.v}}
=== Etimología 3 ===
{{etimología|incierta}}, quizá {{etim|osp|folgar|holgar}}.
==== {{verbo|es|transitivo|intransitivo}} ====
;1: {{plm|mantener}} [[relación|relaciones]] [[sexual]]es
{{ámbito|Chile|Colombia|España|México}}
{{uso|malsonante|vulgar}}
{{wikisauro|coito}}
==== {{verbo pronominal|es}} ====
;2: {{plm|arrasar}}, [[devastar]] por medio de la fuerza.
{{ámbito|España}}
{{uso|figurado|malsonante}}
{{ejemplo|Los tanques entraron en el bosque y ''se follaron'' todos los árboles.}}
;3: {{plm|suspender}}, calificar negativamente.
{{ámbito|España}}
{{uso|figurado|malsonante}}
{{ejemplo|El profesor de Biología ''se folló'' a toda la clase.}}
==== Conjugación ====
{{es.v}}
==== Locuciones ====
* [[que te folle un pez]]
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Etimología 4 ===
{{etimología|véase|hollar}}.
==== {{verbo transitivo|es}} ====
;1: {{variante anticuada|hollar}}.
==== Conjugación ====
{{es.v|alt=ue}}
== Referencias y notas ==
<references />
o90dmc819cojb5m1vehgg6td0tui446
Usuario:Cvmontuy
2
17877
6118188
6117704
2026-06-16T02:51:40Z
Tmagc
158167
6118188
wikitext
text/x-wiki
<table>
<tr>
<td valign="top" width="550" align="center">
<table style="width:300px;">
<tr><td>* Usuario del Wikcionario desde mayo de 2006</td></tr>
<tr><td>Wiktionary MediaWiki versión: {{CURRENTVERSION}}</td></tr>
<tr><td>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} </td></tr>
</table>
<table>
<tr>
<td valign="top" width="300" align="center">
<tr><th>LIGAS</th></tr>
<tr><td>[[Wikcionario:Gu%C3%ADa_de_estilo|Guia de estilo]]</td></tr>
<tr><td>[[Ayuda:Cómo_puedo_colaborar|Colaboración]]</td></tr>
<tr><td>[[:Categoría:Plantillas|Plantillas]]</td></tr>
<tr><td>[[:Categoría:Plantillas de fuentes y autorizaciones|Plantillas de fuentes]]</td></tr>
<tr><td>[[Wikcionario:Códigos de idioma|Códigos de idioma]]</td></tr>
<tr><td>[[Wikcionario:Lista_de_etiquetas|Campos semanticos, etiquetas]]</td></tr>
<tr><td>[[:Categoría:Fundamental]]</td></tr>
<tr><td>[[:Especial:Registro|Registros]]</td></tr>
<tr><td>[http://stats.wikimedia.org/wiktionary/EN/TablesWikipediaES.htm Estadísticas]</td></tr>
<tr><td>[http://download.wikimedia.org/ Downloads]</td></tr>
<tr><td>[http://toolserver.org/~soxred93/pcount/ Contador de ediciones]</td></tr>
<tr><td>[[:Categoría:Borrar_%28definitivo%29|Por destruir]]</td></tr>
<tr><td>[[:Especial:Contribuciones/RoboJ2|RoboJ2 Contribuciones]]</td></tr>
<tr><td>[[:Especial:AbuseLog|Filtro]]</td></tr>
<tr><td>[http://es.wiktionary.org/wiki/Especial:Categor%C3%ADasM%C3%A1sUsadas Categorías_más_usadas]</td></tr>
<tr><td>[http://es.wiktionary.org/w/index.php?title=Especial:CambiosRecientes&hideliu=1 Ediciones anónimas]</td></tr>
<tr><td>[[Usuario:Cvmontuy/texts|textos]]</td></tr>
</td>
</tr>
</table>
<td valign="top" width="250" align="center">
<table style="width:242px;border:#99B3FF solid 1px">
<tr><td>{{babel|float=none|es|en-2|fr-1}}</td></tr>
<tr><td><center>Userboxs</center></td></tr>
<tr><td>{{·Ubicación (mx)|Balancán}}</td></tr>
<tr><td>{{Usuario:Userbox/Usuario ajedrez}}</td></tr>
<tr><td>{{Usuario:Userbox/Usuario ciencia}}</td></tr>
<tr><td>{{Userbox/Administrador}}</td></tr>
<-- <tr><td>{{Userbox/Burócrata}}</td></tr> !-->
</table>
</td>
</td>
</tr>
</table>
----
[[Categoría:Usuarios de México]]
e8whcpjol8yt59p7jmjb8makwytvcq3
barra brava
0
21433
6118056
5496173
2026-06-15T13:56:47Z
Tmagc
158167
6118056
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|g=barrabrava}} <!--- 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}}. <!-- 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 -->
==== {{locución sustantiva|es|femenina}} ====
;1 {{csem|fútbol}}: {{grafía|barrabrava}}.
<!-- 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 />
g0eemmmq6iv68kwh24xrkfar1wbmy3i
frío
0
25427
6118090
5945973
2026-06-15T21:38:22Z
Tmagc
158167
6118090
wikitext
text/x-wiki
{{desambiguación|frio|frió}}
== {{lengua|es}} ==
{{pron-graf|1audio1=LL-Q1321 (spa)-Rodelar-frío.wav}}
=== Etimología 1 ===
{{etimología|osp|frido}}, y este {{etim|la|frigidus}}, a su vez {{etim|la|frigere}}, "[[hacer]] [[frío]]", {{etim|la|frigus}}, en última instancia {{etim|ine-pro|*sriges-}} o {{l+|ine-pro|*sriHges-}}.<ref>{{Mallory}}</ref> Compárese el doblete {{l+|es|frígido}}.
==== {{adjetivo|es}} ====
{{es.adj|sup=friísimo|sup2=frigidísimo}}
;1: De [[temperatura]] [[inferior]] a la normal.
{{ejemplo|Pero tiene un problema: en invierno la casa muy ''fría'' y en verano muy calurosa.}}
;2: Figuradamente, poco [[pasible]] de [[emoción]] o [[sentimiento]].
;3: Que se mantiene implacable y lúcido incluso en situaciones de presión.
{{sinónimo|imperturbable|impávido|sereno}}
;4 {{csem|colores}}: Referido a un [[color]], aquel en el que predominan matices [[verde]]s y [[azul]]es (como el agua).
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;5: Ausencia de [[calor]].
;6: Sensación que registra el cuerpo cuando la [[temperatura]] exterior es menor que la del propio organismo.
==== Locuciones ====
{{trad-arriba|Locuciones con «frío»}}
* [[bala fría]]
* [[color frío]]: aquel que provoca sensaciones apacibles, como el verde o el azul
* [[a puerta fría]]: dicho de una venta, a un comprador que no ha demostrado interés previo en el producto
* [[en frío]]: desapasionadamente
* [[dejar frío]]: no provocar pasión ni emoción alguna
{{trad-abajo}}
==== Información adicional ====
{{cognados|fredo|frígido}}
{{derivad|frialdad|friático|fricandol|frío|friolento|friolero|friollego|frior}}.
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{t|ain|a1=1|t1=メアㇴ|t2=メアン|t3=ヤㇺ}}
{{t|af|a1=1|t1=koud}}
{{t|ay|a1=1|t1=ch'uch'u}}
{{t|de|a1=1|t1=kalt}}
{{t|sq|a1=1|t1=ftohtë}}
{{t|ast|a1=1,5,6|t1=fríu|a2=5,6|t2=cutu}}
{{t|az|a1=1,2|t1=soyuq}}
{{t|bm|a1=1|t1=suma}}
{{t|bn|a1=1|t1=জাড়}}
{{t|ca|a1=1|t1=fred}}
{{t|cak|t1=tew}}
{{t|cs|a1=1|t1=studený}}
{{t|ko|a1=1|t1=춥다}}
{{t|da|a1=1|t1=kold}}
{{t|eo|a1=1|t1=afermaniera|a2=1|t2=malvarma}}
{{t|et|a1=1|t1=külm}}
{{t|eu|a1=1|t1=hotza}}
{{t|fi|a1=1|t1=kylmä}}
{{t|fr|a1=1|t1=froid}}
{{t|fy|a1=1|t1=kâld}}
{{t|fo|a1=1|t1=kaldur}}
{{t|gl|a1=1|t1=frío}}
{{t|gd|a1=1|t1=fuar}}
{{t|el|a1=1|t1=κρύος}}
{{t|gn|a1=1|t1=ro'y}}
{{t|gu|a1=1|t1=ઠંડું}}
{{t|he|a1=1|t1=קריר}}
{{t|hi|a1=1|t1=ठंड}}
{{t|hu|a1=1|t1=hideg}}
{{t|id|a1=1, 5, 6|t1=dingin}}
{{t|en|a1=1, 5|t1=cold|a2=5, 6|t2=coldness|a3=1|t3=chilly}}
{{t|ang|a1=1|t1=ceald}}
{{t|it|a1=1|t1=freddo}}
{{t|is|a1=1|t1=kaldur}}
{{t|ja|a1=1|t1=寒い}}
{{t|la|a1=1|t1=frigidus}}
{{t|mnc|a1=1|t1=ᠰᡳ᠋ᠩᡝᠶᡝᠨ}}
{{t|mr|a1=1|t1=थंड}}
{{t|yua|a1=1|t1=ke’el}}
{{t|mn|t1=хүйтэн}}
{{t|nci|a1=1|t1=cecec|a2=5,6|t2=cecuiztli}}
{{t|nl|a1=1|t1=koud|a2=1|t2=kil}}
{{t|nb|a1=1|t1=kald}}
{{t|oc|a1=1|t1=freid}}
{{t|pap|a1=1|t1=friu}}
{{t|pl|a1=1|t1=zimny}}
{{t|pt|a1=1|t1=frio}}
{{t|quz|a1=1|t1=qasa}}
{{t|ro|a1=1|t1=frig|a2=1|t2=rece}}
{{t|ru|a1=1|t1=холодно}}
{{t|sa|a1=1|t1=शीत}}
{{t|sh|a1=1|t1=хладан}}
{{t|scn|a1=1|t1=friddu}}
{{t|srn|a1=1|t1=kowru}}
{{t|sv|a1=1|t1=kall}}
{{t|tl|a1=1|t1=malamíg}}
{{t|th|a1=1|t1=หนาว}}
{{t|tr|a1=1|t1=soğuk}}
{{t|zu|a1=1|t1=-bandayo}}
{{trad-abajo}}
=== Forma flexiva ===
==== Forma verbal ====
;1: {{forma verbo|freír|1s|presente|indicativo}}.
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Etimología 1 ===
{{etimología|leng=gl}}.
==== {{adjetivo|gl}} ====
;1: {{plm|frío}}.
== Referencias y notas ==
<references />
pbpe99jipbd107d8u2idlob4w0nywru
marica
0
30522
6118111
6116070
2026-06-16T00:12:02Z
Tmagc
158167
6118111
wikitext
text/x-wiki
{{desambiguación|Marica}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|María|ica}}. {{diminutivo|lang=es|María}}.
=== {{sustantivo masculino|es}} ===
{{es.sust}}
;1 {{csem|lgbt}}: Hombre que siente [[atracción]] [[sexual]] por [[persona]]s de su [[mismo]] [[sexo]] [[biológico]]
{{uso|despectivo|malsonante|utca}}
{{wikisauro|gay}}
{{antónimo|heterosexual}}
;2: Persona que no tiene [[valor]] para [[enfrentar]]se a las [[dificultad]]es o para [[defender]] sus ideas
{{uso|despectivo|malsonante|utca}}
{{wikisauro|cobarde}}
{{antónimo|audaz|bizarro|corajudo|intrépido|osado|valeroso|valiente}}
;3: {{impropia|Úsase como vocativo}}
{{sinónimo|compa|nota=Colombia, Venezuela|güey|nota2=México|pana|nota3=Colombia, Venezuela|parce|nota4=Colombia|parcero|nota5=Colombia|hueón|nota6=Chile}}
{{ámbito|Colombia}}
{{uso|malsonante}}
;4 {{csem|Internet}}: Persona exageradamente [[intolerante]], [[melodramática]] o [[escandalosa]], especialmente en [[internet]], que reacciona de forma [[desproporcionada]] ante [[gustos]], [[opiniones]] o [[expresiones]] ajenas.
{{uso|despectivo|malsonante|coloquial|utca}}
{{ejemplo|No seas tan '''marica''', es solo un meme de internet; no hay necesidad de armar tanto drama por una tontería.}}
=== {{sustantivo femenino|es}} ===
{{es.sust}}
;5 {{csem|aves}}: (''Cissa'' spp., ''Cyanopica'' spp., ''Pica'' spp., ''Urocissa'' spp.) Cualquiera de trece especies de aves paseriformes de la familia del [[cuervo]], caracterizadas por su larga [[cola]], su ruidoso graznido y un vistoso plumaje de base blanca y negra.
{{sinónimos|urraca}}
{{uso|desusado}}
;6 {{csem|aves}}: (''Pica pica'') {{plm|ave}} de la familia de los córvidos, y es una de las aves más comunes en Europa hasta una altitud no superior a los 1.500 metros. Tiene el cuerpo blanco y negro iridiscente, acabado en una larga cola de color azul o verde metálico dependiendo de como incida el sol, mide en torno a 45cm de longitud con una envergadura de 60cm. Almacena objetos brillantes por los que sienten una debilidad especial, como si fueran sus tesoros.
{{sinónimo|muñoncito|pega|nota2=Zamora|picaraza|picaza|urraca}}
{{ámbito|Castilla}}
=== Traducciones ===
{{trad-arriba}}
<!-- formato: {{t+|idioma|<acepción#>|palabra|género}} p. ej. {{t+|fr|1|chose|f}} -->
{{trad-abajo}}
== Referencias y notas ==
<references />
hdj7egvjbdzqu9ii2h54mqeumukcv9r
dios
0
38534
6118115
5925384
2026-06-16T00:32:37Z
~2026-35250-49
183111
/* */
6118115
wikitext
text/x-wiki
{{desambiguación|Dios}}
== {{lengua|es}} ==
{{pron-graf|v=deesa|vnota=obsoleto|h=Dios}}
=== Etimología ===
Semicultismo. {{etimología|la|deus}}.
[[Archivo:Індійська_богиня.jpg|thumb|diosa Parvati]]
=== {{sustantivo masculino y femenino|es}} ===
{{es.sust|mf}}
;1 {{csem|religión}}: {{plm|entidad}} sobrenatural dotada de poderes superiores a los del hombre.
{{sinónimo|deidad|divo}}.
;2: Figuradamente, [[persona]] con un talento extraordinario en un tema en partícular
{{ejemplo|Él es el ''dios'' del jazz}}3
:Ejército de extraterrestres y humanos, con poca humanidad, violadores, pederastas, parásitos, que se inventan religiones para aborregar a la gente y sacarles el dinero .
:4
:Embustero, manipulador, cobarde, violador, pederasta-pedófilo, repugnante. Extremadamente repugnante.
=== Locuciones ===
* [[a la buena de Dios]]
* [[me cago en Dios]]
=== Véase también ===
{{Wikipedia}}
{{Wikiquote}}
* [[Dios]]
=== Traducciones ===
{{trad-arriba}}
{{t|af|t1=god}}
{{t|de|g1=m|g2=f|n3=p|t1=Gott|t2=Gottheit|t3=Götter}}
{{t|en|t1=god|t2=deity|t3=divinity}}
{{t|ang|t1=god}}
{{t|ar|t1=إلۤهٌ|t2=اله|t3=الهة}}
{{t|eu|t1=jainko}}
{{t|bg|t1=бог}}
{{t|ca|t1=déu}}
{{t|cs|g1=m|t1=bůh}}
{{t|ko|t1=신|t2=神}}
{{t|da|g1=m|t1=gud}}
{{t|sk|g1=m|t1=boh}}
{{t|sl|g1=m|t1=bog}}
{{t|fr|g1=m|t1=dieu}}
{{t|eo|t1=dio}}
{{t|et|t1=jumal}}
{{t|eu|t1=jainko}}
{{t|fi|t1=jumala}}
{{t|fy|t1=god}}
{{t|fo|t1=gud}}
{{t|ga|t1=dia}}
{{t|el|t1=θεός|t2=θεά}}
{{t|hu|t1=isten}}
{{t|he|t1=אלוהים|t2=אל}}
{{t|id|t1=dewa}}
{{t|ia|t1=deo}}
{{t|is|t1=guð}}
{{t|it|g1=m|t1=dio}}
{{t|ja|t1=神|t2=かみ}}
{{t|la|g1=m|g2=f|n3=p|t1=deus|t2=dea|t3=di|t4=divus}}
{{t|nci|t1=teotl}}
{{t|na|t1=gott}}
{{t|nrm|t1=dgieu}}
{{t|nb|t1=gud}}
{{t|nl|t1=godheid}}
{{t|oj|n2=p|t1=manidoo|t2=manidoog}}
{{t|fa|t1=خُدا|t2=خدا}}
{{t|pl|g1=m|t1=bóg}}
{{t|pt|g1=m|t1=deus|t2=divinidade|t3=nume}}
{{t|ine-pro|g1=m|g2=f|t1=*deiu̯ós|t2=*deiu̯íh₂}}
{{t|ro|g1=m|t1=zeu}}
{{t|cgg|t1=ruhanga}}
{{t|ru|g1=m|g2=n|t1=бог|t2=божество|tl1=bog|tl2=božestvo}}
{{t|srn|t1=gado}}
{{t|sv|g1=c|t1=gud}}
{{t|sw|t1=bwana|t2=mabwana|t3=rabi|t4=mungu}}
{{t|th|t1=พระ|t2=เทพ|t3=เจ้าพ่อ}}
{{t|tr|t1=tanrı}}
{{t|yo|a1=1|t1=ọlọ́run}}
{{trad-abajo}}
== {{lengua|lfn}} ==
{{pron-graf|leng=lfn}}
=== Forma sustantiva ===
;1: {{plural|leng=lfn|dio}}.
== Referencias y notas ==
<references />
gjuscy0oio5r68idwo3dvbsods3ffyq
6118163
6118115
2026-06-16T02:18:01Z
Codename Noreste
158013
Revertido el cambio de [[Special:Contributions/~2026-35250-49|~2026-35250-49]] ([[User talk:~2026-35250-49|disc.]]) a la última edición de [[User:TMCbot|TMCbot]]
5925384
wikitext
text/x-wiki
{{desambiguación|Dios}}
== {{lengua|es}} ==
{{pron-graf|v=deesa|vnota=obsoleto|h=Dios}}
=== Etimología ===
Semicultismo. {{etimología|la|deus}}.
[[Archivo:Індійська_богиня.jpg|thumb|diosa Parvati]]
=== {{sustantivo masculino y femenino|es}} ===
{{es.sust|mf}}
;1 {{csem|religión}}: {{plm|entidad}} sobrenatural dotada de poderes superiores a los del hombre.
{{sinónimo|deidad|divo}}.
;2: Figuradamente, [[persona]] con un talento extraordinario en un tema en partícular
{{ejemplo|Él es el ''dios'' del jazz}}
=== Locuciones ===
* [[a la buena de Dios]]
* [[me cago en Dios]]
=== Véase también ===
{{Wikipedia}}
{{Wikiquote}}
* [[Dios]]
=== Traducciones ===
{{trad-arriba}}
{{t|af|t1=god}}
{{t|de|g1=m|g2=f|n3=p|t1=Gott|t2=Gottheit|t3=Götter}}
{{t|en|t1=god|t2=deity|t3=divinity}}
{{t|ang|t1=god}}
{{t|ar|t1=إلۤهٌ|t2=اله|t3=الهة}}
{{t|eu|t1=jainko}}
{{t|bg|t1=бог}}
{{t|ca|t1=déu}}
{{t|cs|g1=m|t1=bůh}}
{{t|ko|t1=신|t2=神}}
{{t|da|g1=m|t1=gud}}
{{t|sk|g1=m|t1=boh}}
{{t|sl|g1=m|t1=bog}}
{{t|fr|g1=m|t1=dieu}}
{{t|eo|t1=dio}}
{{t|et|t1=jumal}}
{{t|eu|t1=jainko}}
{{t|fi|t1=jumala}}
{{t|fy|t1=god}}
{{t|fo|t1=gud}}
{{t|ga|t1=dia}}
{{t|el|t1=θεός|t2=θεά}}
{{t|hu|t1=isten}}
{{t|he|t1=אלוהים|t2=אל}}
{{t|id|t1=dewa}}
{{t|ia|t1=deo}}
{{t|is|t1=guð}}
{{t|it|g1=m|t1=dio}}
{{t|ja|t1=神|t2=かみ}}
{{t|la|g1=m|g2=f|n3=p|t1=deus|t2=dea|t3=di|t4=divus}}
{{t|nci|t1=teotl}}
{{t|na|t1=gott}}
{{t|nrm|t1=dgieu}}
{{t|nb|t1=gud}}
{{t|nl|t1=godheid}}
{{t|oj|n2=p|t1=manidoo|t2=manidoog}}
{{t|fa|t1=خُدا|t2=خدا}}
{{t|pl|g1=m|t1=bóg}}
{{t|pt|g1=m|t1=deus|t2=divinidade|t3=nume}}
{{t|ine-pro|g1=m|g2=f|t1=*deiu̯ós|t2=*deiu̯íh₂}}
{{t|ro|g1=m|t1=zeu}}
{{t|cgg|t1=ruhanga}}
{{t|ru|g1=m|g2=n|t1=бог|t2=божество|tl1=bog|tl2=božestvo}}
{{t|srn|t1=gado}}
{{t|sv|g1=c|t1=gud}}
{{t|sw|t1=bwana|t2=mabwana|t3=rabi|t4=mungu}}
{{t|th|t1=พระ|t2=เทพ|t3=เจ้าพ่อ}}
{{t|tr|t1=tanrı}}
{{t|yo|a1=1|t1=ọlọ́run}}
{{trad-abajo}}
== {{lengua|lfn}} ==
{{pron-graf|leng=lfn}}
=== Forma sustantiva ===
;1: {{plural|leng=lfn|dio}}.
== Referencias y notas ==
<references />
421w2wytjs01m0aoa7z0xz02g873v4k
espíritu
0
56232
6118148
6074641
2026-06-16T02:03:20Z
~2026-35250-49
183111
/* */
6118148
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
{{definición}}
=== Etimología 1 ===
{{etimología|la|spiritus|soplo}}.
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1: Substancia [[inmaterial]] de una [[persona]].
{{sinónimo|alma}}.
;2: Entidad incorpórea.
{{sinónimo|fantasma}}.
;3: La [[esencia]] o [[principio]] de algo.
{{ejemplo|Hay que tener presente, sin embargo, que poner las manos sobre una obra para hacerla más adecuada, aunque no sea más que a las exigencias técnicas de la toma en el estudio de televisión, quiere decir en todos los casos modificarla siempre, traicionando la mayoría de las veces el ''espíritu'' mismo del autor.|c=libro|a=Angelo D'Alessandro|f=1960|t=El guión de televisión|l=Madrid|editorial=Rialp}}
;4: {{plm|entusiasmo}}, [[ánimo]], [[brío]], [[vivacidad]].
;5: Energía vital de los seres vivos, en especial del ser humano, que media entre el cuerpo y el alma.
;6: Dimensión divina que tiene en exclusiva la especie ''[[species:Homo sapiens sapiens|Homo sapiens sapiens]]''.
7
Embuste con el que los videntes te sacan el dinero.
==== Locuciones ====
* [[espíritu inmundo]]
* [[Espíritu Santo]]
* [[espíritu vital]]
==== Véase también ====
{{Wikiquote}}
{{W}}
==== Traducciones ====
{{trad-arriba}}
{{t|eu|t1=espiritu}}
{{t|fr|a1=1-3|t1=esprit}}
{{t|en|a1=1-5|t1=spirit}}
{{t|pt|a1=1-4|t1=espírito|g1=m}}
{{t|sa|i1=s|t1=हृदय|g1=n}}
{{trad-abajo}}
== Referencias y notas ==
<references />
jabie5zhqjbsycigopnp94hvi2ych6q
6118162
6118148
2026-06-16T02:18:01Z
Codename Noreste
158013
Revertido el cambio de [[Special:Contributions/~2026-35250-49|~2026-35250-49]] ([[User talk:~2026-35250-49|disc.]]) a la última edición de [[User:TMCbot|TMCbot]]
6074641
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
{{definición}}
=== Etimología 1 ===
{{etimología|la|spiritus|soplo}}.
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1: Substancia [[inmaterial]] de una [[persona]].
{{sinónimo|alma}}.
;2: Entidad incorpórea.
{{sinónimo|fantasma}}.
;3: La [[esencia]] o [[principio]] de algo.
{{ejemplo|Hay que tener presente, sin embargo, que poner las manos sobre una obra para hacerla más adecuada, aunque no sea más que a las exigencias técnicas de la toma en el estudio de televisión, quiere decir en todos los casos modificarla siempre, traicionando la mayoría de las veces el ''espíritu'' mismo del autor.|c=libro|a=Angelo D'Alessandro|f=1960|t=El guión de televisión|l=Madrid|editorial=Rialp}}
;4: {{plm|entusiasmo}}, [[ánimo]], [[brío]], [[vivacidad]].
;5: Energía vital de los seres vivos, en especial del ser humano, que media entre el cuerpo y el alma.
;6: Dimensión divina que tiene en exclusiva la especie ''[[species:Homo sapiens sapiens|Homo sapiens sapiens]]''.
==== Locuciones ====
* [[espíritu inmundo]]
* [[Espíritu Santo]]
* [[espíritu vital]]
==== Véase también ====
{{Wikiquote}}
{{W}}
==== Traducciones ====
{{trad-arriba}}
{{t|eu|t1=espiritu}}
{{t|fr|a1=1-3|t1=esprit}}
{{t|en|a1=1-5|t1=spirit}}
{{t|pt|a1=1-4|t1=espírito|g1=m}}
{{t|sa|i1=s|t1=हृदय|g1=n}}
{{trad-abajo}}
== Referencias y notas ==
<references />
nuimgwjxpe742b54wuudijo3hxjdtvs
crack
0
58370
6118060
5852555
2026-06-15T14:12:59Z
Tmagc
158167
-
6118060
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{etimología|en|crack|excelente}}, y antes "[[ruptura]]", del inglés medio {{l+|enm|crakken}}, a su vez del antiguo {{l+|en|cracian}}<ref name="auto_ref_id_1">{{OED}}</ref>, del protogermánico {{l+|gem-pro|*krakojan}}, posiblemente onomatopéyico. La primera acepción posiblemente haya llegado por vía del francés, donde también se emplea en ese sentido. La segunda acepción es del apócope inglés de {{l+|en|crack cocaine}}. {{préstamo}}.
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1: {{plm|persona}}, especialmente [[deportista]], que alcanza [[fama]] y [[notoriedad]] en su [[carrera]].
{{sinónimo|as|astro|campeón|luminaria}}
;2: {{plm|pasta}} elaborada de la [[cocción]] de la [[cocaína]], que se consume [[fumar|fumada]] como [[droga]] [[recreativo|recreativa]].
{{sinónimo|base}}
{{ejemplo|Vino a hablarme uno medio gay<br>Yo ponía stop y el ponía play<br>Le gustaba el Big Mac y Tupac<br>Vendía '''crack''' y tomaba Prozac|a=El Cuarteto de Nos|c=canción|f=2006|t=Yendo a la casa de Damián}}
==== {{onomatopeya|es}} ====
;3: {{impropia|Representa el sonido producido por la ruptura o quiebre de un objeto frágil}}.
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== {{lengua|en}} ==
{{pron-graf|leng=en|1audio1=en-us-crack.ogg|1fono1=kræk}}
=== Etimología 1 ===
{{etimología|leng=en|enm|crakken}}, a su vez del antiguo {{l+|en|cracian}}<ref name="auto_ref_id_1" />, del protogermánico {{l+|gem-pro|*krakojan}}, posiblemente onomatopéyico.
==== {{sustantivo|en}} ====
{{en.sust|ci}}
;1: {{plm|fisura}}.
;2: {{plm|grieta}}.
;3: {{plm|chascarrillo}}, [[chiste]], [[broma]].
;4: {{plm|crack}} (narcótico).
;5: {{plm|crujido}}.
;6: {{plm|oportunidad}}.
{{ámbito|leng=en|Estados Unidos}}
{{uso|leng=en|coloquial}}
;7: {{plm|vagina}}.
{{uso|leng=en|coloquial|malsonante}}
;8: {{plm|raja}} entre los glúteos.
{{uso|leng=en|coloquial}}
;9: {{plm|defecto}}.
;10: {{plm|habladuría}}, [[chisme]], [[cotilleo]].
{{ámbito|leng=en|Escocia}}
;11: {{plm|favorito}}, [[as]], [[campeón]].
;12: {{plm|gallo}} (de la voz).
==== {{adjetivo|en}} ====
;13: {{plm|excelente}}, [[campeón]], [[superlativo]].
==== {{adverbio|en}} ====
;14: Tronando, crujiendo.
==== {{verbo intransitivo|en}} ====
;14: {{plm|fisurarse}}.
;15: {{plm|quebrarse}}, [[romperse]].
;16: {{plm|tronar}}, [[crujir]].
;17: {{plm|sucumbir}}.
==== {{verbo transitivo|en}} ====
;18: {{plm|solucionar}}, [[descifrar]], [[resolver]].
==== Locuciones ====
{{trad-arriba|Locuciones con «crack»}}
* [[crack down]]: actuar con mayor energía para controlar, restringir o reprimir.
* [[crack off]]
* [[crack on]]
* [[crack up]]: colapsar; sufrir un accidente
* [[crack a book]]: estudiar intensamente
* [[crack a smile]]: romper a sonreir
* [[crack wise]]
* [[get cracking]]
{{trad-abajo}}
==== Conjugación ====
{{en.v}}
== Referencias y notas ==
<references />
klqkpz3rl5ppjw4ydmnkdbilmq3trih
stop
0
61409
6118058
5915749
2026-06-15T14:12:22Z
Tmagc
158167
-
6118058
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|ayuda=estop}}
=== Etimología 1 ===
{{etimología|en|stop}}.
==== {{sustantivo masculino|es}} ====
{{es.sust|s}}
;1 {{csem|música}}: En los reproductores de música, el botón con el símbolo de cuadrado que se usa para detener la canción.
{{uso|generalmente con las locuciones “poner stop”, “darle al stop”, “apretar el stop”, etc.}}
{{ejemplo|Vino a hablarme uno medio gay<br>Yo '''ponía stop''' y el ponía play<br>Le gustaba el Big Mac y Tupac<br>Vendía crack y tomaba Prozac|a=El Cuarteto de Nos|c=canción|f=2006|t=Yendo a la casa de Damián}}
== {{lengua|en}} ==
{{pron-graf|leng=en
|pron=Received Pronunciation|fono=stɒp|audio=En-uk-a stop.ogg|aunota="a stop", Londres|audio2=LL-Q1860 (eng)-Back ache-stop.wav|aunota2=Londres
|2pron=General American, dialectos de Canadá|2fono=stɑp|2audio=en-us-stop.ogg|2audio2=LL-Q1860 (eng)-Simplificationalizer-stop.wav|2aunota2=Nueva Jersey
|3pron=Standard Canadian, dialectos de los EE. UU.|3fono=stɒp
|4pron=Australia|4fono=stɔp
|5pron=Nueva Zelanda|5fono=stɒp|5fone2=stɔ̟p
}}
=== Etimología ===
{{etimología|leng=en|enm|stoppen|parar}}
=== {{verbo|en}} ===
;1: {{plm|parar}}.
;2: {{plm|detener}}.
;3: {{plm|evitar}}.
=== {{sustantivo|en}} ===
{{en.sust|c}}
;4: {{plm|parada}}.
;5: {{plm|alto}}.
=== Conjugación ===
{{en.v}}
== Referencias y notas ==
<references />
0jzta6k5cmiy1mknb7jb2f7n6qglmpg
recordar
0
72401
6118140
6114838
2026-06-16T01:51:08Z
26agcp
138617
/* Traducciones */
6118140
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{año de documentación|1140}}.<ref name="cndhe">{{CNDHE}}</ref> {{etimología|la|recordari|diacrítico=recordāri}}, y este a su vez de {{l+|la|re-}} y {{l+|la|cor|cor, cordis}} ('corazón'), pues se creía que este era el órgano responsable de la memoria, el pensamiento y los recuerdos.
==== {{verbo transitivo|es}} ====
;1: {{plm|traer}} a la [[memoria]].<ref name="dle1925">{{DLE1925|1032}}</ref>
{{uso|utci}}.
{{ejemplo|«{{plm|mucho}}s [[año]]s [[después]], [[frente]] [[al]] [[pelotón]] [[de]] [[fusilamiento]], [[el]] [[coronel]] {{plm|Aureliano}} {{plm|Buendía}} [[haber|había]] [[de]] '''''recordar''''' [[aquel|aquella]] [[tarde]] [[remoto|remota]] [[en]] [[que]] [[su]] [[padre]] [[lo]] [[llevar|llevó]] [[a]] [[ver]] [[el]] [[hielo]]».|c=libro|a=Gabriel García Márquez|t=Cien años de soledad}}
{{sinónimo|acordarse|conmemorar|evocar|rememorar}}.
{{antónimo|olvidar}}.
;2: {{plm|excitar}} y mover a alguien a que tenga presente algo de que se hizo o que tomó a su cuidado.<ref name="dle1925 />
{{uso|utci|utcp}} [[recordarse]].
{{ejemplo|«{{plm|te}} '''''recuerdo''''' [[tus]] [[obligación|obligaciones]], [[porque]] [[ver|veo]] [[que]] [[te]] [[descuidar|descuidas]] [[en]] [[ellas]]».|editorial=Akal|c=libro|a1=Benito Pérez Galdós|t=Aita Tettauen|p=214|l=Tres Cantos|f=2004}}
;3: {{plm|hacer}} a alguien recordar algo.<ref name="dle1925 />
;4: {{plm|asemejarse}}, poseer semejanza.<ref name="dle">{{DLE}}</ref>
{{ejemplo|«{{l|es|ser|Era}} [[entonces]] [[uno|un]] [[hombre]] [[de]] [[unos]] [[veintidós]] [[año]]s, [[de]] [[una]] [[cara]] [[pálido|pálida]] [[y]] [[afilado|afilada]] [[que]] '''''recordaba''''' [[a]] [[uno|un]] [[galgo]]».|editorial=Ediciones «La Nave»|c=libro|a1=Pío Baroja|t=El puente de las ánimas|l=Madrid|f=1945}}
==== {{verbo intransitivo|es}} ====
;5: {{plm|despertar}}{{subíndice|5}}.<ref name="dle1925 />
{{uso|poco usado|utcp}} [[recordarse]].
{{sinónimo|despertar|despertarse|levantar|levantarse}}.
{{ámbito|Asturias|León|Argentina|Colombia|Ecuador|México|República Dominicana}}
{{uso|anticuado|nota=en el resto de lugares}}
{{sinónimo|despertar|volver en sí|}}
{{antónimo|dormir}}
==== Locuciones ====
* [[si mal no recuerdo]]
==== Conjugación ====
{{es.v|alt=ue}}
==== Traducciones ====
{{trad-arriba}}
{{t|fr|t1=rappeler|t2=souvenir|t3=se souvenir|nota3=de}}
{{t|en|a1=1,2|t1=remember|a2=1,3|t2=remind|a3=4|t3=wake}}
{{t|yua|a1=1|t1=kʼaʼajs/kʼaʼajes}}
{{t|nl|t1=herinneren}}
{{t|sa|a1=1-2|t1=स्मरति|tl1=smarati}}
{{trad-abajo}}
== {{lengua|osp}} ==
{{pron-graf|leng=osp}}
==== Etimología ====
{{año de documentación|leng=osp|1140}}.<ref name="cndhe /> {{etimología|leng=osp|la|recordari|diacrítico=recordāri}}.
==== {{verbo transitivo|osp}} ====
;1: {{plm}}{{subíndice|1}}, [[rememorar]]{{subíndice|1}}.
{{ejemplo|«{{plm|si}} [[oír|oié]] [[razón|razón]] [[bueno|buena]], [[bien]] [[la]] [[saber|sabié]] [[tener]], '''''recordáva'''''[[la]] [[siempre]], [[non]] [[la]] [[querer|querié]] [[perder]]».|a=de Berceo, Gonzalo|t=Vida de Santo Domingo de Silos|fo=1236|editorial=Aldo Ruffinato|f=1992|p=263|c=libro}}
;2: {{plm}}{{subíndice|2}}.
{{ejemplo|c=libro|«{{l|es|y|Et}} [[como]] [[los]] [[ateniense|athenienos]] [[huir|huyeron]] [[aquesto]] [[y|et]] [[los]] eghesteos [[et]] [[los]] leontinos [[fugitivo|fugitiuos]], [[los]] [[cual|quales]] [[les]] preguauan [[que]] [[les]] [[ayudar|aiudasen]] '''''recordando'''''[[les]] [[de]] [[los]] sagramentes [[que]] auien ensemble los mouien a la inpresa…».|a=Juan Fernández de Heredia|título=Traducción de Tucídides|editorial=Universidad de Zaragoza|l=Zaragoza|f=2003|fo=1400~|editor1=Juan Manuel Cacho Blecua|editor2=María Sanz Julián|p=52|obs=BNM, ms. 10801}}
==== {{verbo intransitivo|osp}} ====
;3: {{plm}}{{subíndice|5}}, [[despertar]]{{subíndice|1}}.
{{ejemplo|«{{plm|bien}} [[a]] [[ora]] [[de]] [[víspera|viésperas]], [[el]] [[sol]] [[bien]] enflaquido, / '''''recordó''''' malamientre, [[andar|andava]] [[estordido]]».|a=de Berceo, Gonzalo|t=Milagros de nuestra señora|capítulo=El monje borracho|fo=1250~|f=1992|editorial=Espasa Calpe|editor=Claudio García Turza|p=683|c=libro}}
== Referencias y notas ==
<references />
91tvai9rwja1z8xs6ja713ey2ri72if
chinero
0
79136
6118055
6118015
2026-06-15T13:07:49Z
~2026-34597-22
183061
imagen
6118055
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|china|ero}}.
==== {{sustantivo masculino|es}} ====
{{es.sust}}
[[File:North Star House original sideboard 2025.jpg|thumb|[1]]]
;1: {{ucf|armario}} o [[alacena]] en que se [[guardar|guardan]] piezas de [[china]] o de [[porcelana]], cristal, etc.<ref>{{DLE1925}}</ref>
{{sinónimo|alacena|cristalera|aparador}}
== {{lengua|an}} ==
{{pron-graf|leng=an|fone=tʃiˈneɾo|g=ginero}}
=== Etimología ===
{{etimología|leng=an}}
=== {{sustantivo masculino|an}} ===
{{an.sust}}
<!--[[Categoría:?]]-->
;1: {{plm|enero}}
== Referencias y notas ==
<references />
72xl9nhls706xrrdbr210tzdyz4lp2l
ater
0
100597
6118085
6117404
2026-06-15T19:49:16Z
26agcp
138617
/* {{lengua|la}} */ mejoro formato, agrego descendientes
6118085
wikitext
text/x-wiki
== {{lengua|la}} ==
{{pron-graf|leng=la|ayuda=āter}}
=== Etimología ===
{{etimología|leng=la|itc-pro|*ātros|glosa=negro}}, y este del protoindoeuropeo {{l+|ine-pro|*h₂áh₁tr̥|*h₂eh₁-t(-)r-}} ('lugar donde se hace el fuego'), de {{l+|ine-pro|*h₂eh₁-}} ('estar caliente').<ref name="vaan">{{DeVaan|60}}</ref> Compárense el irlandés antiguo {{l+|sga|áith|glosa=horno}}, el griego antiguo {{l+|grc|αἰθήρ}} (''aithḗr''; '[[aire]]', '[[éter]]'), el avéstico {{l+|ae|𐬁𐬙𐬀𐬭𐬱|glosa=fuego|tr=ātarš}}, el sánscrito {{l+|sa|अथर्वन्|tr=átharvan}}, el armenio antiguo {{l+|xcl|*այր|glosa=fuego|tr=*ayr}}, {{l+|xcl|այրեմ|glosa=arder|tr=ayrem}}, el persa medio {{l+|pal|ātur}} (moderno {{l+|fa|آدر|tr=ādar}}), o el oseta {{l+|os|арт|tr=art}}.<br>→ {{l+|la|areo|āreō}}, {{l+|la|atrox|atrōx}}
==== {{adjetivo|la}} ====
{{comp.la|ater|āter|atr|ātr|iss=r|nota=¹ <small>latín científico, sin testimonios en el clásico</small>|s3=maximē āter|snotapie=¹}}
;1 {{csem|leng=la|colores}}: {{plm|negro}}, de color [[oscuro]].<ref name="ol">{{Oxf-lat}}</ref>
{{antónimo|leng=la|albus}}
;2: {{impropia|Dicho del cabello:}} [[negro]], [[oscuro]], [[castaño]].<ref name="ol" />
;3: {{impropia|Dicho de la piel:}} [[negro]], [[oscuro]], [[moreno]], [[tostado]] (por el sol).<ref name="ol" />
;4: Desprovisto de luz, [[oscuro]], [[fusco]], [[sombrío]].<ref name="ol" />
;5: {{impropia|Dicho de nubes, polvo, etc.:}} [[negro]], [[oscuro]], [[denso]], [[espeso]].<ref name="ol" />
;6: {{impropia|Dicho de bosques:}} [[oscuro]], [[sombrío]], [[tenebroso]].<ref name="ol" />
;7: {{impropia|Dicho de aguas, olas, etc.:}} [[oscuro]], [[turbio]].<ref name="ol" />
;8: {{impropia|Dicho de la noche, la oscuridad, etc.:}} [[negro]], [[oscuro]], [[tenebroso]], [[profundo]].<ref name="ol" />
;9: {{impropia|Dicho de la sangre de heridas, etc.:}} [[ennegrecido]], [[manchado]].<ref name="ol" />
;10: {{plm|negro}} de sangre.<ref name="ol" />
;11: {{plm|manchado}}, [[sórdido]], [[escuálido]].<ref name="ol" />
;12: {{plm|manchado}} de moretones, [[acardenalado]].<ref name="ol" />
;13: {{impropia|Dicho del fuego, de las llamas, etc.:}} [[humeante]], [[humoso]].<ref name="ol" />
;14: {{impropia|Dicho de la ceniza, etc.:}} [[carbonizado]].<ref name="ol" />
;15: {{impropia|Para denotar negatividad, reprobación, etc.:}} [[negro]], [[funesto]], [[desgraciado]], de mala suerte.<ref name="ol" />
;16: {{plm|fúnebre}}.<ref name="ol" />
;17: De [[negro]], de [[luto]].<ref name="ol" />
;18: {{impropia|Como epíteto de la muerte, especialmente personificada, o cosas asociadas a ella:}} [[negro]].<ref name="ol" />
;19: {{plm|mortal}}, [[funesto]], [[terrible]], [[horroroso]].<ref name="ol" />
;20: {{impropia|Dicho especialmente de personas o cosas asociadas al inframundo.}}<ref name="ol" />
;21: {{impropia|Dicho de animales peligrosos, de venenos:}} [[mortal]].<ref name="ol" />
;22: {{impropia|Dicho del miedo o similar, especialmente personificado:}} [[negro]], [[intenso]], [[profundo]].<ref name="ol" />
;23: {{plm|malvado}}, [[malévolo]].<ref name="ol" />
==== Locuciones ====
{{trad-arriba|Locuciones con ''āter''}}
* {{l|la|albus an ater sit}}
* {{l|la|atra bilis}}
* {{l|la|ater dies}}/{{l|la|atra dies}} -[6]- un día negro, de mala suerte, (poét.) el día de la muerte.
{{trad-abajo}}
==== Declinación ====
{{la.adj|āter/ātr.+}}
==== Información adicional ====
{{derivad|leng=la|atritas|atritus|atrox|atrocitas|atrociter}}
==== Descendientes ====
{{trad-arriba|descendientes}}
{{d|es|d1=atro|niv=1}}
{{d|fr|d1=âtre|niv=1}}
{{d|it|d1=atro|niv=1}}
{{d|pt|d1=atro|niv=1}}
{{d|ro|d1=vatră|niv=1}}
{{trad-abajo}}
== Referencias y notas ==
<references />
kpbou5xa377aypm6hf9a0t8bo029pad
continuo
0
105628
6118117
6116472
2026-06-16T00:37:21Z
Tmagc
158167
6118117
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|la|continuus}}.<ref name="dle">{{DLE}}</ref>
==== {{adjetivo|es}} ====
{{es.adj}}
;1: Que dura, obra, se hace o se extiende sin interrupción.<ref name="dle25">{{DLE1925}}</ref>
{{sinónimo|constante|duradero|incesante|ininterrumpido|persistente|prolongado|seguido}}
{{antónimo|discontinuo|discreto|espaciado|intermitente}}
;2: Se dice de dos más cosas unidas entre sí.<ref name="dle25">{{DLE1925}}</ref>
{{sinónimo|ligado|unido}}
{{antónimo|distinto|dividido|interrumpido|separado}}
;3: {{plm|perseverante}} en ejercer algún acto.<ref name="dle25"/>
{{sinónimo|perseverante|constante}}
;4 {{csem|matemáticas}}: {{impropia|Aplicado a una magnitud:}} Que sus valores fluyen sin intervalos abruptos entre sí.<ref name="dle"/>
{{relacionado|función continua}}
==== {{sustantivo|es|masculino}} ====
{{es.sust}}
;5: {{plm|conjunto}} de cosas unidas consideradas como un todo.<ref name="dle25"/>
;6: Varón [[allegado]] a un señor y muy favorecido de él, y a quien éste mantenía. Estaba obligado a seguirle, obedecerle y, en tiempos más antiguos, aun a vengarle cuando no podía más.<ref name="dle25"/>
;7: Cada uno de los que componían el cuerpo de los cien continuos, que antiguamente servía en la casa del rey para la guardia de su persona y custodia del palacio.<ref name="dle25"/>
;8 {{csem|música}}: {{plm|bajo continuo}}.<ref name="dle"/>
{{sinónimo|bajo continuo}}
==== {{adverbio|es}} ====
;9: {{plm|de continuo}}.<ref name="dle25"/>
{{sinónimo|de continuo|continuamente|a la continua|continuadamente|incesantemente|ininterrumpidamente}}
==== Locuciones ====
{{trad-arriba|Locuciones con «continuo»}}
* [[a la continua]]
* [[bajo continuo]]
* [[cantidad continua]]
* [[corriente continua]]
* [[de continuo]]
* [[espectro continuo]]
* [[fracción continua]]
* [[función continua]]
* [[jornada continua]]
* [[letra continua]]
* [[movimiento continuo]]
* [[nombre continuo]]
* [[papel continuo]]
* [[programa continuo]]
* [[proporción continua]]
* [[servidumbre continua]]
* [[sesión continua]]
* [[solución de continuo]]
{{trad-abajo}}
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
o26erf4upvuarcwkgo91txfbvgj8909
holgar
0
109440
6118143
6114597
2026-06-16T01:57:40Z
Tmagc
158167
6118143
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{año de documentación|1140}}. {{etimología|osp|folgar}}, {{etim|la-lat|follicare|alt=follicāre|soplar, respirar}}.<ref name="drae">{{DRAE2001}}</ref>
=== {{verbo intransitivo|es}} ===
;1: Descansar, tomar aliento después de alguna fatiga.<ref name="Salvá">{{Salvá1847|página=590}}</ref>
{{ejemplo|«[[saber|Sé]] que no sé si deseo que [[crecer|crezca]] mi [[mal]] [[esquivo]], '''''huelgo''''', [[trabajar|trabajo]], [[pelear|peleo]], [[correr|corro]], [[descansar|descanso]], rodeo, temo, [[esperar|espero]], [[morir|muero]], vivo, [[tener|tienen]] ya tal [[amistad]] mi [[mal]] y mi [[voluntad]], que [[ahora]] tengo [[despecho]] del [[tiempo]] tan sin [[provecho]] que [[estar|estuve]] en mi [[libertad]]».|a=Anónimo|t=Cancionero de Juan Fernández de Íxar|f=1424|c=libro}}
;2: Estar ocioso, no trabajar.<ref name="Salvá" />
{{ejemplo|«Dijo el [[asno]]: “{{plm|bien}} estaba [[aquí]], donde '''''huelgo''''' más y [[pecar|peco]] menos. Pero anda, [[allá]] vamos; bien [[ver|veo]] que, si al [[principio]] no te creyera, [[cuando|quando]] [[despertar|despertaste]] mi [[codicia]], no fuera metido en [[necesidad]] forzosa como al [[comienzo|comienzo]] fue voluntaria”».|a=Pulgar, Hernando del|t=Letras|f=1470|c=libro}}
{{relacionado|huelga}}.
;3: No estar bien ajustada una cosa con otra,<ref name="Salvá" /> no [[coincidir]], estar [[flojo]].
;4: Divertirse, entretenerse con gusto y [[alegría]] en alguna cosa.<ref name="Salvá" />
{{uso|utcp}}: ''[[holgarse]]''.
;5: Se dice de las cosas inanimadas, que están sin ejercicio o sin uso.<ref name="Salvá" />
{{uso|terciopersonal}}
;6: No tener [[relevancia]] o [[utilidad]]; estar [[de más]].
{{sinónimo|sobrar}}.
{{ejemplo|No dije nada porque ''holgaban'' los comentarios después de tanta discusión.}}
;7: Permanecer en un lugar.
{{relacionado|estar|parar|yacer}}.<ref name="drae" />
=== Conjugación ===
{{es.v|alt=ue|impersonal=umc36}}
=== Información adicional ===
{{derivad|holgarse|holgachón|holgadamente|holgadero|holgado|holganza|holgazanear|holgazanería|holgazán|holgón|holgorio|holgueta|holgura|huelga|huelgo|huelguista|huelguístico|jolgorio}}.
=== Traducciones ===
{{trad-arriba}}
<!-- formato: {{t+|idioma|<acepción#>|palabra}} p. ej. {{t+|fr|1|voir}} si es sustantivo, indicar el género, p. ej. {{t+|fr|voiture|f}} -->
<!--{{t+|de|}}-->
<!--{{t+|ar|}}-->
<!--{{t+|bg|}}-->
<!--{{t+|ca|}}-->
<!--{{t+|eo|}}-->
<!--{{t+|fr|}}-->
{{t|he|a1=1|t1=נח|tr=nakh}}
{{t|en|a1=1|t1=rest|a2=2|t2=idle}}
<!--{{t+|it|}}-->
<!--{{t+|ja|}}-->
<!--{{t+|nl|}}-->
<!--{{t+|pl|}}-->
<!--{{t+|pt|}}-->
{{trad-abajo}}
== Referencias y notas ==
<references />
ciwprshi1dnfndwnetk27ja8t7v9tmf
erupción volcánica
0
159212
6118070
5815596
2026-06-15T16:02:13Z
~2026-34597-22
183061
imagen
6118070
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== {{locución|es|sustantiva|femenina}} ===
{{es.sust|cop=s}}
[[File:Fimmvorduhals second fissure 2010 04 02.JPG|thumb|[1]]]
;1: {{ucf|expulsión}} violenta de [[humo]], [[ceniza]], [[lava]] y otras [[sustancia]]s procedentes del interior de un [[volcán]].
=== Véase también ===
{{w}}
=== Traducciones ===
{{trad-arriba}}
{{t|pl|t1=erupcja wulkaniczna}}
{{trad-abajo}}
== Referencias y notas ==
<references />
q6484hbjgyl9mmnqi9jxm4h45v1qevy
oublier
0
172101
6118149
6095047
2026-06-16T02:06:48Z
26agcp
138617
/* {{lengua|fr}} */ pronunciacion, formato
6118149
wikitext
text/x-wiki
== {{lengua|fr}} ==
{{pron-graf|leng=fr|1audio1=Fr-oublier.ogg|aunota=París
|h1=oubliai
|h2=oublié
|h3=oubliée
|h4=oubliés
|h5=oubliées
|h6=oubliez
|h7=oubliiez}}
=== Etimología ===
{{etimología|leng=fr|frm|oublier}}, y este {{etim|leng=fr|fro|oblier}}, {{l+|fro|obliër}}, {{l+|fro|oublier}} o {{l+|fro|ublier}}, {{etim|leng=fr|la-vul|*oblito|alt=*oblitāre}}, {{etim|leng=fr|la|oblitus}}, participio pasado de {{l+|la|obliviscor}}, de {{l+|la|ob-}} y {{l+|la|levis}}, {{etim|leng=fr|ine-pro|*ley-w-}}, de {{l+|ine-pro|*(s)ley-}}.
==== {{verbo transitivo|fr}} ====
;1: {{plm|olvidar}}.<ref name=c>{{CNRTL}}</ref>
{{antónimo|leng=fr|se rappeler|se remémorer|se souvenir}}.
==== Conjugación ====
{{fr.v}}
== {{lengua|fro}} ==
{{pron-graf|leng=fro}}
=== Etimología ===
{{etimología|leng=fro|la-vul|*oblito|alt=*oblitāre}}, y este del latín {{l+|la|oblitus}}, participio pasado de {{l+|la|obliviscor}}, de {{l+|la|ob-}} y {{l+|la|levis}}, del protoindoeuropeo {{l+|ine-pro|ley-w-}}, de {{l+|ine-pro|(s)ley-}}.
=== {{verbo transitivo|fro}} ===
;1: {{grafía|leng=fro|ublier}}.
=== Conjugación ===
{{fro.v.conj.er|oubli}}
== {{lengua|frm}} ==
{{pron-graf|leng=frm}}
=== Etimología ===
{{etimología|leng=frm|fro|oblier||fro|obliër||fro|oublier||fro|ublier}}, y estos del latín vulgar {{l+|la|*oblito|*oblitāre}}, del latín {{l+|la|oblitus}}, participio pasado de {{l+|la|obliviscor}}, de {{l+|la|ob-}} y {{l+|la|levis}}, del protoindoeuropeo {{l+|ine-pro|ley-w-}}, de {{l+|ine-pro|(s)ley-}}.
=== {{verbo transitivo|frm}} ===
;1: {{plm|olvidar}}.
== {{lengua|nrf}} ==
{{pron-graf|leng=nrf}}
=== Etimología ===
{{etimología|leng=nrf|fro|oblier||fro|obliër||fro|oublier||fro|ublier}}, y estos del latín vulgar {{l+|la|*oblito|*oblitāre}}, del latín {{l+|la|oblitus}}, participio pasado de {{l+|la|obliviscor}}, de {{l+|la|ob-}} y {{l+|la|levis}}, del protoindoeuropeo {{l+|ine-pro|ley-w-}}, de {{l+|ine-pro|(s)ley-}}.
=== {{verbo transitivo|nrf}} ===
;1: {{plm|olvidar}}.
== Referencias y notas ==
<references />
sgzjqhb5b67ii8w0p153411aoulsdqu
creo
0
180673
6118063
5898254
2026-06-15T14:29:29Z
Jemily1
121719
pongo las formas verbales en orden alfabético
6118063
wikitext
text/x-wiki
{{desambiguación|creò|creó}}
== {{lengua|es}} ==
{{pron-graf|p1=creó}}
=== Forma verbal ===
;1: {{forma verbo|crear|1s|pres|ind}}.
;2: {{forma verbo|creer|1s|pres|ind}}.
== {{lengua|ast}} ==
{{pron-graf|leng=ast}}
=== Forma verbal ===
;1: {{f.v|leng=ast|creer|yo|pres|ind}}.
;2: {{f.v|leng=ast|crear|yo|pres|ind}}.
== {{lengua|ca}} ==
{{pron-graf|leng=ca}}
=== Forma verbal ===
;1: {{f.v|leng=ca|crear|1s|pres|ind|pron=jo}}.
;2: {{f.v|leng=ca|crear|1s|pres|sub|pron=jo}}.
;3: {{f.v|leng=ca|crear|3s|pres|sub|pron=ella, vostè, ell}}.
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Forma verbal ===
;1: {{f.v|leng=gl|crer|1s|pres|ind|pron=eu}}.
;2: {{f.v|leng=gl|crear|1s|pres|ind|pron=eu}}.
== {{lengua|it}} ==
{{pron-graf|leng=it}}
=== Forma verbal ===
;1: {{f.v|leng=it|creare|1s|pres|ind|pron=io}}.
== {{lengua|la}} ==
{{pron-graf|leng=la|1audio1=la-cls-creo.ogg|ayuda1=creō}}
=== Etimología ===
{{etimología|leng=la}}
=== {{verbo transitivo|la}} ===
;1: {{plm|crear}}, {{l|es|fabricar}}, {{l|es|generar}}, {{l|es|producir}}.
{{sinónimo|leng=la|construo|alt=cōnstruō}}.
{{antónimo|leng=la|destruo|alt=dēstruō}}.
{{hipónimo|leng=la|recreo|alt=recreō}}.
;2: {{plm|parir}}.
;3: {{plm|causar}}.
;4: {{plm|elegir}}, {{l|es|seleccionar}}.
=== Conjugación ===
{{la.v|1+|sigm=v|creō}}
=== Información adicional ===
{{derivad|creabilis|creamen|creatio|creator|creatrix|creatura|recreatio|recreator|recreo|rrcreabilis}}
==== Descendientes ====
{{trad-arriba|Descendientes}}
{{d|sq|d1=krijoj|niv=1}}
{{d|ast|d1=crear|niv=1}}
{{d|osp|d1=crear|d2=criar|niv=1}}
{{d|ca|d1=crear|niv=1}}
{{d|es|d1=criar|d2=crear|niv=1}}
{{d|eo|d1=krei|niv=1}}
{{d|fr|d1=créer|niv=1}}
{{d|fro|d1=creer|d2=crier|niv=1}}
{{d|frm|d1=creer|niv=1}}
{{d|roa-opt|d1=criar|niv=1}}
{{d|gl|d1=crear|niv=1}}
{{d|en|d1=create|niv=1}}
{{d|ia|d1=crear|niv=1}}
{{d|it|d1=creare|niv=1}}
{{d|nrf|d1=créer|niv=1}}
{{d|lad|d1=krear|niv=1}}
{{d|nl|d1=creëren|niv=1}}
{{d|oc|d1=crear|niv=1}}
{{d|pt|d1=criar|niv=1}}
{{d|ro|d1=crea|niv=1}}
{{d|sc|d1=criai|d2=criare|niv=1}}
{{d|scn|d1=criari|niv=1}}
{{d|sv|d1=kreera|niv=1}}
{{trad-abajo}}
== Referencias y notas ==
<references />
8iqnnwerqidna4b9f09nd9196id6ric
creó
0
301212
6118062
5659801
2026-06-15T14:27:48Z
Jemily1
121719
amplío desambiguación
6118062
wikitext
text/x-wiki
{{desambiguación|creo|creò}}
== {{lengua|es}} ==
{{pron-graf}}
=== Forma verbal ===
;1: {{forma verbo|crear|m=indicativo|p=3s|t=pret ind}}.
== Referencias y notas ==
<references />
n5rq5dmdphpd3wct7cpe5fwydrvktsm
Guilmai
0
434481
6118138
6117393
2026-06-16T01:41:44Z
Tmagc
158167
Revertidos los cambios de [[Special:Contributions/Alex4660|Alex4660]] ([[User talk:Alex4660|disc.]]) a la última edición de [[User:Peter Bowman|Peter Bowman]]
6117364
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v1=Guilmay|v2=Huilmai|v3=Huilmay}}
=== Etimología 1 ===
{{etimología}}.
==== {{sustantivo propio|es}} ====
;1: {{apellido}}.<ref>{{PainemalMorales2011}}</ref>
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
k61g01h3f1ux4ozvizcvm5quzfi685h
obscurecer
0
482714
6118127
5807781
2026-06-16T01:02:51Z
Tmagc
158167
6118127
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|obscuro|ecer}}.<ref name="drae" />
=== {{verbo transitivo|es}} ===
;1: {{variante anticuada|oscurecer}}.<ref name="drae">{{DRAE2001}}</ref>
{{uso|infrecuente|utcp|utci}}.
=== Conjugación ===
{{es.v}}
=== Traducciones ===
{{trad-véase|1|oscurecer}}
== Referencias y notas ==
<references />
1yj2axhffn85pcftmp2a14ty8eizd2k
tumben
0
806448
6118161
4667431
2026-06-16T02:17:14Z
26agcp
138617
entradas similares
6118161
wikitext
text/x-wiki
{{desambiguación|túumben}}
== {{lengua|es}} ==
{{pron-graf}}
=== Forma flexiva ===
==== Forma verbal ====
;1: {{forma verbo|tumbar|3p|t=presente|m=subjuntivo}}.
;2: {{forma verbo|tumbar|p=ustedes|t=imperativo}}.
== Referencias y notas ==
<references />
fsmp9a246jbpzo1wh8epulxzsbhp7hm
berrear
0
870479
6118124
6116560
2026-06-16T00:59:54Z
Tmagc
158167
6118124
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
[[Categoría:ES:Voces de animales]]
=== Etimología 1 ===
{{etimología|onomatopeya}}, o {{etim|la|verrare|alt=*verrāre}}, {{etim|la|verres}} ("[[verraco]], [[cerdo]] [[macho]]").
==== {{verbo intransitivo|es}} ====
;1 {{csem|zoología}}: {{impropia|Dicho de ciertos animales, como el becerro:}} dar [[berrido]]s.<ref name="drae1925">{{DLE1925}}</ref>
{{relacionado|bramar|bufar|fulminar|mugir|rugir|graznar}}
;2: {{impropia|Dicho de un niño:}} [[gritar]] o [[chillar]] sin que nada lo consuele.
{{sinónimos|gritar|chillar}}.
{{antónimos|callar|calmar|amansar}}.
;3: {{impropia|Dicho de una persona adulta:}} gritar sin mesura, como puede suceder por el dolor.
{{sinónimos|gritar|chillar}}.
{{antónimos|calmar}}.
;4: {{impropia|También dicho de una persona adulta:}} tratar de [[cantar]], aunque con resultado nada [[armónico]].
{{ejemplo|He visto a muchos borrachos en mi vida, pero a nadie con una cogorza como la de ese tipo. y '''''berreaba''''' a pleno pulmón algo sobre el nuevo estandarte de ''Colombina''o una canción similar.|título=Estudio en Escarlata|editorial=Edimat|capítulo=1.4. Lo que sabía John Rance|páginas=75|c=libro|a=Arthur Conan Doyle|fecha=1887|obs=trad. de editorial}}
==== Conjugación ====
{{es.v}}
==== Véase también ====
* [[berrearse]]
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
3exyrw0cg1l6aogn1r2vpckgodj48b7
6118125
6118124
2026-06-16T01:00:12Z
Tmagc
158167
/* {{verbo intransitivo|es}} */
6118125
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
[[Categoría:ES:Voces de animales]]
=== Etimología 1 ===
{{etimología|onomatopeya}}, o {{etim|la|verrare|alt=*verrāre}}, {{etim|la|verres}} ("[[verraco]], [[cerdo]] [[macho]]").
==== {{verbo intransitivo|es}} ====
;1 {{csem|zoología}}: {{impropia|Dicho de ciertos animales, como el becerro:}} dar [[berrido]]s.<ref name="drae1925">{{DLE1925}}</ref>
{{relacionado|bramar|bufar|mugir|rugir|graznar}}
;2: {{impropia|Dicho de un niño:}} [[gritar]] o [[chillar]] sin que nada lo consuele.
{{sinónimos|gritar|chillar}}.
{{antónimos|callar|calmar|amansar}}.
;3: {{impropia|Dicho de una persona adulta:}} gritar sin mesura, como puede suceder por el dolor.
{{sinónimos|gritar|chillar}}.
{{antónimos|calmar}}.
;4: {{impropia|También dicho de una persona adulta:}} tratar de [[cantar]], aunque con resultado nada [[armónico]].
{{ejemplo|He visto a muchos borrachos en mi vida, pero a nadie con una cogorza como la de ese tipo. y '''''berreaba''''' a pleno pulmón algo sobre el nuevo estandarte de ''Colombina''o una canción similar.|título=Estudio en Escarlata|editorial=Edimat|capítulo=1.4. Lo que sabía John Rance|páginas=75|c=libro|a=Arthur Conan Doyle|fecha=1887|obs=trad. de editorial}}
==== Conjugación ====
{{es.v}}
==== Véase también ====
* [[berrearse]]
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
iesbyhfhpcz3oz8fvt6n1q5ljynlk0r
bollar
0
873947
6118112
5802488
2026-06-16T00:21:07Z
Tmagc
158167
6118112
wikitext
text/x-wiki
{{desambiguación|Bollar}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{etimología|sufijo|bolla|ar}}
==== {{verbo transitivo|es}} ====
;1: Poner un sello de plomo en los tejidos para que se conozca la fábrica de donde salen.<ref name="drae">{{DLE1925}}</ref>
==== Conjugación ====
{{es.v}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Etimología 2 ===
{{etimología|sufijo|bollo|ar}}
==== {{verbo transitivo|es}} ====
;1: {{variante subestándar|abollar}}.<ref name="drae" />
;2: {{variante|abollonar}}.<ref name="drae" />
==== Conjugación ====
{{es.v}}
== Referencias y notas ==
<references />
61lrc9pjyx0d5qfmvrxzdwef3rucv2x
porno
0
902064
6118128
6116661
2026-06-16T01:04:26Z
Tmagc
158167
6118128
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|apócope|pornográfico}}
=== {{adjetivo|es}} ===
{{es.adj|inv}}
;1: {{plm|pornográfico}}; que pertenece o concierne a la [[pornografía]].
{{uso|coloquial}}
=== {{sustantivo masculino|es}} ===
{{es.sust|s}}
;2: {{plm|pornografía}}.
{{uso|coloquial}}
=== {{sustantivo|es|ambiguo}} ===
{{es.sust}}
[[File:Porn Set 5.jpg|thumb|[3]]]
;3: {{ucf|película}} pornográfica.
{{uso|coloquial}}
{{ejemplo|Y, sin embargo, protesto contra el porno-cinematógrafo, cuyas vistas obscenas, toleradas por la policía, van invadiendo las ciudades latinas, Buenos Aires, Madrid, París, Barcelona. Entendámonos: protesto contra la publicidad. Los fenómenos del amor no deben hacerse públicos|c=pagina|t=El porno-cinematógrafo|f=1908|u=https://es.wikisource.org/wiki/El_porno-cinemat%C3%B3grafo}}
=== Traducciones ===
{{trad-arriba}}
{{t|en|a1=1|t1=porn}}
{{trad-abajo}}
== Referencias y notas ==
<references />
rhf8q9q67pimux89tu76z80qdajme0g
jumper
0
908056
6118135
6117702
2026-06-16T01:32:28Z
Tmagc
158167
quito imagen redundante
6118135
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf|ayuda=yámper}}
=== Etimología ===
{{etimología|en|jumper}}.
[[Archivo:Jumper on motherboard.jpg|miniaturadeimagen|(1) ''Jumper'' conectando dos terminales en una placa.]]
=== {{sustantivo masculino|es}} ===
{{es.sust|s=s}}
;1 {{csem|informática}}: Puente metálico recubierto en plástico que se utiliza para conectar dos terminales de un [[circuito impreso]] sin requerir ninguna herramienta.<ref>{{referencia|c=pagina|t=jumper - GTI - Glosario Terminología Informática|sitio=www.tugurium.com|url=https://web.archive.org/web/20160305173351/http://www.tugurium.com/gti/termino.php?Tr=jumper|a= José Luis Prieto / Madrid, España}}</ref>
=== Véase también ===
{{w}}
=== 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}}
== {{lengua|en}} ==
{{pron-graf|leng=en}}
=== Etimología 1 ===
{{etimología|leng=en|sufijo|jump|er}}.
==== {{sustantivo|en}} ====
{{en.sust|c}}
;1: {{plm|saltador}}, persona, animal u objeto que [[saltar|salta]].
;2 {{csem|leng=en|vestimenta}}: {{plm|jersey}} de [[lana]].
;3 {{csem|leng=en|vestimenta}}: {{plm|chaqueta}} amplia, especialmente usada por [[marinero]]s y [[trabajador]]es.
==== Véase también ====
{{w|leng=en}}
== Referencias y notas ==
<references />
h5sxoq0iduhldv4zke2p3l0uab1dmel
éek' píip
0
979352
6118079
6040546
2026-06-15T18:40:36Z
26agcp
138617
/* Maya yucateco */
6118079
wikitext
text/x-wiki
== {{lengua|yua}} ==
{{pron-graf|leng=yua}}
=== Etimología ===
{{etimología|leng=yua|véase|éekʼpíip}}.
==== {{locución sustantiva|yua}} ====
;1 : {{grafía|leng=yua|éekʼpíip}}.<ref>{{UADY}}</ref>
== Referencias y notas ==
<references />
33jnq30ho63rp10aigvfdkimm3nodzs
perrito caliente
0
980132
6118064
5815632
2026-06-15T14:55:48Z
~2026-34597-22
183061
imagen
6118064
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== {{locución sustantiva|es}} ===
{{es.sust|cop=s}}
[[File:2021-07-11 18 20 37 Two hot dog buns with freshly cooked beef hot dogs, mustard and ketchup in the Dulles section of Sterling, Loudoun County, Virginia.jpg|thumb|perritos calientes]]
;1: {{plm|bocadillo}} de [[salchicha de Viena]] dentro de un [[pan]] alargado aderezado con [[kétchup]], [[mayonesa]], [[mostaza]] y otras [[salsa]]s.
{{sinónimo|perro caliente|hot dog|chévere|completo|pancho|shuco|nota3=El Salvador|nota4=Chile|nota5=Argentina, Paraguay, Uruguay|nota6=Guatemala}}
=== Traducciones ===
{{trad-arriba}}
{{t|en|t1=hot dog}}
{{trad-abajo}}
== Referencias y notas ==
<references />
jlsp8if7ueqgiv1ovvyc44mm0wncjx7
churrete
0
995213
6118084
5926682
2026-06-15T19:42:33Z
Tmagc
158167
6118084
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
[[Archivo:Cinclodes_patagonicus_(8564312760).jpg|thumb|[1].]]
=== Etimología 1 ===
{{etimología|ONOM}}.<ref>{{DiccEtimLenz|Ch|485. CHURRETA}}</ref><ref>{{referencia|issn=02780771|doi=10.2993/0278-0771-40.1.89|a1=José Tomás Ibarra|a2=Julián Caviedes|a3=Pelayo Benavides|fc=2020-10-24|u=https://bioone.org/journals/journal-of-ethnobiology/volume-40/issue-1/0278-0771-40.1.89/Winged-Voices-Mapuche-Ornithology-from-South-American-Temperate-Forests/10.2993/0278-0771-40.1.89.full|t=Winged Voices: Mapuche Ornithology from South American Temperate Forests|f=2020-04-24|vol=40|n=1|p=89|t0=Journal of Ethnobiology|c=publicación}}</ref>
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1 {{csem|aves}}: (''[[species:Cinclodes patagonicus|Cinclodes patagonicus]]'') {{plm|ave}} [[paseriforme]], pequeña, de color parda con una banda superciliar y garganta blancas, que habita cercano a los cursos de agua y las costas del [[Cono Sur]].<ref>{{avesdechile.cl}}</ref>
{{ámbito|Chile}}
{{sinónimos|remolinera araucana|nota=Argentina|churrete común|nota2=Chile|remolinera estriada|nota3=Argentina|piloto|nota4=Chile|remolinera patagónica|churrete del sur}}
==== Locuciones ====
{{trad-arriba|Locuciones}}
* [[agarrar para el churrete]], [[tomar para el churrete]]
{{trad-abajo}}
==== Traducciones ====
{{trad-arriba}}
{{t|de|t1=Streifenbauch-Uferwipper|t2=Streifenbrust-Uferwipper}}
{{t|ca|t1=miner riberenc panxafosc}}
{{t|cs|t1=hrncirík patagonský|t2=skorcovec vodní}}
{{t|da|t1=mørkbuget cinclodes}}
{{t|sh|t1=tamnoleđa rudarica|a2=1|t2=tamnotrbi cinklodes}}
{{t|sk|t1=vodnárec tmavobruchý}}
{{t|fi|t1=tuhkavirtaorneero}}
{{t|fr|t1=cinclode à ventre sombre}}
{{t|nl|t1=grijsbuikwipstaart}}
{{t|en|t1=dark bellied cinclodes|t2=dark-bellied cinclodes}}
{{t|it|t1=batticoda dal ventre scuro|t2=batticoda della Patagonia|t3=cinclode panciascura}}
{{t|ja|t1=パタゴニアカワカマドドリ}}
{{t|lt|t1=tamsiapilvis vandeninis krosnius}}
{{t|nb|t1=stripebergkall}}
{{t|nn|t1=stripebergkall}}
{{t|pl|t1=trzesiogon ciemnobrzuchy}}
{{t|sv|t1=mörkbukad cinclodes|t2=mörkbukig cinklod}}
{{trad-abajo}}
=== Etimología 2 ===
{{etimología|sufijo|churre|ete}}.<ref>{{DLE}}</ref>
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1: Mancha que ensucia a una persona, sobre todo cuando ensucia la cara.
{{ámbito|España}}
{{sinónimo|chafarrinada|chafarrinón}}
;2: {{plm|excremento}}, especialmente en estado líquido.<ref name=damer>{{Damer}}</ref>
{{ámbito|Chile|Perú|Nicaragua|Ecuador}}.
{{uso|vulgar|infantil}}.
==== {{adjetivo|es}} ====
{{es.adj|ng}}
;3: Dicho de una persona: que tiene diarrea.<ref name=damer />
{{ámbito|Chile}}
{{uso|coloquial}}
== Referencias y notas ==
<references />
idjsu5sar03wfu16l09n3hslyn8hsds
matagalpa
0
998873
6118130
6028871
2026-06-16T01:06:17Z
Tmagc
158167
6118130
wikitext
text/x-wiki
{{desambiguación|Matagalpa}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
=== {{adjetivo|es}} ===
{{es.adj|ng}}
;1: Propio de, relativo o perteneciente a una [[etnia]] amerindia que habitaba en El Salvador, Nicaragua y Honduras.
{{uso|utcs}}.
;2 {{csem|lingüística}}: Propio de o relativo al [[idioma]] de este pueblo.
=== {{sustantivo masculino|es}} ===
{{es.sust|s}}
;3 {{csem|glotónimos}}: {{plm|lengua}} {{l|es|extinto|extinta}} de la familia {{l|es|misumalpa}} que se hablaba en las tierras altas centrales de la actual [[Nicaragua]] y el departamento de [[El Paraíso]] en [[Honduras]].
=== Véase también ===
{{w|idioma matagalpa}}
=== Traducciones ===
{{trad-arriba}}
{{t|en|a1=1,2|a2=3|c1=a|t1=Matagalpan|t2=Matagalpa}}
{{trad-abajo}}
== Referencias y notas ==
<references />
twg9sin3etbzkxg0ha0wwmo9idd4kxb
matagalpas
0
998874
6118129
6030638
2026-06-16T01:05:53Z
Tmagc
158167
6118129
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|véase|matagalpa}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;1: {{variante|matagalpa}}.
{{uso|utcs}}
=== Forma flexiva ===
==== Forma adjetiva ====
;1: {{forma adjetivo|matagalpa|número=plural}}.
== Referencias y notas ==
<references />
6w3p6xobgyybujlbgtaidds7ch9anq1
con el diario del lunes
0
1019799
6118141
6117900
2026-06-16T01:53:41Z
Tmagc
158167
6118141
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
Los partidos de fútbol se suelen jugar los domingos, mientras que sus resultados figuran en los diarios del lunes.<ref>{{referencia|c=articulo|a=Pablo Russo|f=2021|u=https://170escalones.com/el-diario-del-lunes-de-las-torres-gemelas/|t=El diario del lunes de las Torres Gemelas|sitio=170 Escalones|issn=25913921}}</ref> Una vez que se conocen los resultados de los encuentros, es trivial formular hipótesis que los expliquen.<ref>{{referencia|c=pagina|u=https://nabhen.com/axioma-diario-del-lunes|t=El axioma del diario del lunes|sitio=Nabhen.com}}</ref> Aquel que opina con el diario del lunes es quien dice saber las razones de lo que ocurrió sin haberse arriesgado a predecirlo antes de que ello ocurriera. {{etimología|metafórico}}.
=== {{locución adverbial|es}} ===
;1: Se dice cuando se opina, juzga o critica un suceso ''a posteriori'', es decir, una vez que el mismo se ha consumado; de modo que la crítica pierde su valor pues cualquiera cuenta con la información suficiente para realizar el mismo juicio.
{{ejemplo|Hablar “'''con el diario del lunes'''” es lo más sencillo del mundo. Y ni hablar en un ambiente devastadoramente resultadista como el fútbol actual, una selva propensa a razonar con los números en la mano, sin permitirse la perspectiva del análisis conceptual.|c=noticia|sitio=El Gráfico|t=Reflexiones sobre Argentina con el diario del viernes|u=https://www.elgrafico.com.ar/articulo/1022/8414/reflexiones-sobre-argentina-con-el-diario-del-viernes|a=Elías Perugino|f=2015-7-3}}
=== Traducciones ===
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
jgmrnro2gbc612g66atzh8hj5zinjjj
6118142
6118141
2026-06-16T01:54:13Z
Tmagc
158167
/* Etimología */
6118142
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
Los partidos de fútbol se suelen jugar los domingos, mientras que sus resultados figuran en los diarios del lunes.<ref>{{referencia|c=articulo|a=Pablo Russo|f=2021|u=https://170escalones.com/el-diario-del-lunes-de-las-torres-gemelas/|t=El diario del lunes de las Torres Gemelas|sitio=170 Escalones|issn=25913921}}</ref> Una vez que se conocen los resultados de los encuentros, es trivial formular hipótesis que los expliquen.<ref>{{referencia|c=pagina|u=https://nabhen.com/axioma-diario-del-lunes|t=El axioma del diario del lunes|sitio=Nabhen.com}}</ref> En otras palabras, aquel que opina con el diario del lunes es quien dice saber las razones de lo que ocurrió sin haberse arriesgado a predecirlo antes de que ello ocurriera. {{etimología|metafórico}}.
=== {{locución adverbial|es}} ===
;1: Se dice cuando se opina, juzga o critica un suceso ''a posteriori'', es decir, una vez que el mismo se ha consumado; de modo que la crítica pierde su valor pues cualquiera cuenta con la información suficiente para realizar el mismo juicio.
{{ejemplo|Hablar “'''con el diario del lunes'''” es lo más sencillo del mundo. Y ni hablar en un ambiente devastadoramente resultadista como el fútbol actual, una selva propensa a razonar con los números en la mano, sin permitirse la perspectiva del análisis conceptual.|c=noticia|sitio=El Gráfico|t=Reflexiones sobre Argentina con el diario del viernes|u=https://www.elgrafico.com.ar/articulo/1022/8414/reflexiones-sobre-argentina-con-el-diario-del-viernes|a=Elías Perugino|f=2015-7-3}}
=== Traducciones ===
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
pccih2jbuajg449gy4i4ennkq74tqaf
normie
0
1038165
6118106
6042002
2026-06-15T23:41:43Z
~2026-35211-13
183110
/* */
6118106
wikitext
text/x-wiki
Persona corriente que sigue las normas obedientemente sin cuestionar nada, que siguen todas las tendencias de moda porque el resto las sigue , sin pensamiento crítico, que cree todo lo que escucha por la televisión y lo repite como una grabadora.Carecen de cultura y conocimientos de hechos historicos aparte del desinterés de corroborarlos por el mismo. La TV es su Dios y las corrientes ideológicas su secta.
== {{lengua|es}} ==
{{pron-graf|ayuda1=normi}} <!--- 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|en|normie|normal}}. {{préstamo}}<!-- 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|ng}}
;1: Genérico, que sigue todas las modas de turno y no destaca del sujeto promedio ideado de la sociedad.<ref>{{referencia|c=pagina|t=¿Qué es un normie? Si te identificas con alguna de estas 41 señales puede que lo seas|sitio=Trendencias|url=https://moda.trendencias.com/otros/que-normie-te-identificas-alguna-estas-41-senales-puede-que-seas|f=2018-9-9}}</ref>
{{uso|despectivo}}
=== 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 />
3tewpvwst14e5d8xbam39kxmw29jxhi
6118110
6118106
2026-06-16T00:07:07Z
Tmagc
158167
Revertido el cambio de [[Special:Contributions/~2026-35211-13|~2026-35211-13]] ([[User talk:~2026-35211-13|disc.]]) a la última edición de [[User:TMCbot|TMCbot]]
6042002
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|ayuda1=normi}} <!--- 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|en|normie|normal}}. {{préstamo}}<!-- 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|ng}}
;1: Genérico, que sigue todas las modas de turno y no destaca del sujeto promedio ideado de la sociedad.<ref>{{referencia|c=pagina|t=¿Qué es un normie? Si te identificas con alguna de estas 41 señales puede que lo seas|sitio=Trendencias|url=https://moda.trendencias.com/otros/que-normie-te-identificas-alguna-estas-41-senales-puede-que-seas|f=2018-9-9}}</ref>
{{uso|despectivo}}
=== 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 />
acb36xyhaol03c67lt7l2sgd6egj5x5
mesa de noche
0
1038334
6118073
5698509
2026-06-15T17:15:36Z
~2026-34597-22
183061
/* {{locución sustantiva|es}} */ imagen
6118073
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|no aplica}}.
=== {{locución sustantiva|es}} ===
[[File:Nightstand 2184073576.jpg|thumb|[1]]]
;1: {{plm|mesa}} o [[armario]] pequeño, generalmente con dos [[cajón|cajones]] uno encima del otro o un cajón y un [[estante]] inferior, colocado al lado de la [[cabecera]] de la [[cama]].
{{sinónimo|mesa de luz|mesilla|velador|buró}}
== Referencias y notas ==
<references />
c8orn4ry64mwfg00n94wi132r8imosm
barrabrava
0
1039934
6118057
5747655
2026-06-15T13:57:32Z
Tmagc
158167
6118057
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|g=barra brava}} <!--- 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|compuesto|barra|brava}}. <!-- 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 -->
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1 {{csem|fútbol}}: Grupo organizado de fanáticos dentro de una hinchada de fútbol, encargado de alentar o amedrentar durante los partidos a los jugadores mediante el despliegue de banderas, la entonación de cánticos y, ocasionalmente, el ataque a los simpatizantes de los clubes rivales, además de defenderse y defender al resto de la propia afición de posibles ataques de hinchadas rivales o de la represión policial.
{{ámbito|Sudamérica}}
==== {{sustantivo masculino y femenino|es}} ====
{{es.sust|mf}}
;2 {{csem|fútbol}}: Miembro de una barrabrava.
{{ámbito|Sudamérica}}
{{relacionado|ultra}}
==== Véase también ====
{{w}}
==== 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 />
tlf0hif4rrgvhyruwyu67bx0dt9qstc
culo roto
0
1041385
6118131
6116979
2026-06-16T01:24:39Z
Tmagc
158167
6118131
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|g=culorroto}} <!--- 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}}. <!-- 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 -->
==== {{locución adjetiva|es}} ====
{{es.adj|cop=s|ng}}
;1: {{grafía|culorroto}}.
{{uso|malsonante}}
{{ámbito|Argentina|Uruguay}}
{{sinónimo|fracasado}}
<!-- 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 />
prpqd0oek1wsf1hikimf0ocfb5j2or1
culorroto
0
1041386
6118132
5714511
2026-06-16T01:24:56Z
Tmagc
158167
6118132
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|g=culo roto|gnota=más común}} <!--- 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|compuesto|culo|roto}}. <!-- 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|inv}}
;1: Que no ha logrado nada o se ha quedado sin nada en la vida.
{{uso|malsonante}}
{{ámbito|Argentina|Uruguay}}
{{sinónimo|fracasado}}
{{ejemplo|La pareja que decide tener su segundo hijo. El problema era cómo comunicárselo al que ya tenían—un nene de cuatro años. Entonces el padre toma la decisión de ir a hablar con el nene y comunicarle la decisión que habían tomado con la mamá de darle un hermanito al pibe. Le dice:<br>—Nene, tengo una hermosa novedad para contarte.<br>—Sí, ¿cuál es?<br>—He decidido encargar un hermanito para vos con la cigüeña de París.<br>—¡Pero papá! ¡Habiendo tantas mujeres justo venís a garcharte un pájaro, viejo degenerado '''culorroto'''!|c=av|a=Yayo|t=85 Minutos de Yayo !|u=https://www.youtube.com/watch?v=Sxm_LTbU0hE|inst=Videomatch|clip=29:00}}
==== 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 />
qc6squbzzqdqbv181oovz927g4vmt8m
tuʼubs
0
1044710
6118095
6076517
2026-06-15T22:56:27Z
26agcp
138617
/* {{verbo|yua|transitivo}} */ antónimo
6118095
wikitext
text/x-wiki
== {{lengua|yua}} ==
{{pron-graf|leng=yua|g=tu'ubs}}
=== Etimología ===
{{etimología|leng=yua|sufijo|tuʼubul|alt=tuʼub(ul)|s}}.
==== {{verbo|yua|transitivo}} ====
;1: {{plm|olvidar}}.<ref>{{UADY|t|cita=TU’UBS}}</ref>
{{antónimo|leng=yua|kʼaʼajs|kʼaʼajes}}
==== Conjugación ====
{{yua.v|t1}}
==== Véase también ====
* {{l|yua|tuʼubul}}
== Referencias y notas ==
<references />
2grqwzztgmzwk1ykdxjmwm3gw4lh1p7
director técnico
0
1045582
6118077
5675239
2026-06-15T18:08:12Z
Tmagc
158167
/* {{lengua|es}} */
6118077
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|g=DT}}
=== Etimología ===
{{etimología|}}.
==== {{locución sustantiva|es}} ====
;1 {{csem|oficios}}: Persona técnica superior de una empresa de software o de ingeniería, estudio de cine, compañía de teatro o estudio de televisión que está a cargo de un equipo y es el principal responsable de la coordinación de los miembros.
;2 {{csem|deporte|oficios}}: Persona encargada del entrenamiento de los jugadores de un equipo y de dirigirlos durante los partidos.
{{sinónimo|entrenador}}
== Referencias y notas ==
<references />
tsqn3sfli3yq163nj1x3xa344t4vk6u
Módulo:flex/es
828
1048487
6118170
6117310
2026-06-16T02:18:18Z
TMCbot
164594
.
6118170
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_traza = require("Módulo:traza")
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local len = m_str.len
local sub = m_str.sub
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
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 guion = "%-"
local VOCAL = "["..vocal.."]"
local CONS = "["..cons.."]"
local CONS_SALVO_H = "[^"..vocal.."hH~#{}]"
local ESPACIO = "["..espacios.."]"
local LETRA = "[^"..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 try(p, rx, pl, f, fpl, pl2, femenino)
local p2, sust = gsubb(p, rx, "~%0~")
if not sust then
return nil
end
if type(pl) == "string" and sub(pl, 1, 1) ~= "#" then
pl = "~"..pl.."~"
end
if type(f) == "string" and sub(f, 1, 1) ~= "#" then
f = "~"..f.."~"
end
if type(fpl) == "string" and sub(fpl, 1, 1) ~= "#" then
fpl = "~"..fpl.."~"
end
if type(pl2) == "string" and sub(pl2, 1, 1) ~= "#" then
pl2 = "~"..pl2.."~"
end
if not pl then
return {m={p2}, p={}, f={}, fp={}}
end
if not femenino or not f then
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={}, fp={}}
else
return {m={p2}, p={gsub1(p, rx, pl)}, f={}, fp={}}
end
end
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}}
else
return {m={p2}, p={gsub1(p, rx, pl)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}}
end
end
function export.flexionar_palabra(p, g, forzar_s)
local mf = g == "mf"
local no_s = not forzar_s
local es_monosilabo = find(p, "^"..CONS.."-[iuü]?[iu]?[aeiou][iu]?"..CONS.."-$")
local sin_tildes = not find(p, "[áéíóúÁÉÍÓÚ]")
local function rep_2_es(v, c) return "~"..quitar_tilde[v]..c.."es~" end
local function rep_2_a(v, c) return "~"..quitar_tilde[v]..c.."a~" end
local function rep_2_as(v, c) return "~"..quitar_tilde[v]..c.."as~" end
local function rep_2_es_yz_llana(v, r, c) return no_s and ("~"..v..r..(c == "z" and "c" or c).."es~") or ("#"..(c == "y" and quitar_tilde[v] or v)..r..(c == "y" and "i" or c).."s#") end
local function rep_2_es_yz_aguda(v, c) return no_s and ("~"..quitar_tilde[v]..(c == "z" and "c" or c).."es~") or ("#"..((c == "y" and not es_monosilabo) and agregar_tilde[v] or v)..(c == "y" and "i" or c).."s#") end
local function rep_2_es_yz_aguda_tilde(v, c) return no_s and ("~"..v..(c == "z" and "c" or c).."es~") or ("#"..v..(c == "y" and "i" or c).."s#") end
local function rep_2_es_n_tilde(v, c) return no_s and "~"..agregar_tilde[v]..c.."es~" or "#"..v..c.."s#" end
local changed = -- vocal
try(p, sin_tildes and "ote$" or "^%A$", "otes", "ota", "otas", nil, mf)
or try(p, sin_tildes and "ete$" or "^%A$", "etes", "eta", "etas", nil, mf)
or try(p, "o$", "os", "a", "as", nil, mf)
or try(p, "[íú]$", "%0s", nil, nil, no_s and "%0es" or nil)
or try(p, VOCAL.."$", "%0s")
-- doble consonante
or try(p, "ch$", no_s and "%0es" or "#%0s#")
or try(p, "("..CONS..")y$", "%1is")
or try(p, "[sz]"..CONS.."$", nil)
or try(p, CONS.."[sz]$", nil)
or try(p, CONS..CONS.."$", "%0s")
-- vocal + consonante
or try(p, es_monosilabo and "[ns]$" or "^%A$", no_s and "%0es" or "#%0s#", "%0a", "%0as", nil, mf) -- monosilabo en n o s
or try(p, sin_tildes and "x$" or "^%A$", no_s and "%0es" or "#%0s#") -- monosilabo o aguda en x
or try(p, "[aeo][íú][nsx]$", no_s and "%0es" or "#%0s#", "%0a", "%0as", nil, mf) -- aguda en n o s (hiato final)
or try(p, "([áéó])([iuü][nsx])$", rep_2_es, rep_2_a, rep_2_as, nil, mf) -- aguda en n o s (diptongo final)
or try(p, "([áéíóú])([nsx])$", rep_2_es, rep_2_a, rep_2_as, nil, mf) -- aguda en n o s
or try(p, sin_tildes and "([aeo])(h?[iuü]?h?[iuü]?h?[aeo][iuü]?h?n)$" or "^%A$", rep_2_es_n_tilde) -- llana en n (hiato entre dos vocales abiertas)
or try(p, "([íú])(h?[iuü]?h?[aeiou]h?[iuü]?h?n)$" or "^%A$", rep_2_es_n_tilde) -- llana en n (hiato decreciente)
or try(p, sin_tildes and "([aeo])(h?[iuü]h?[iuü]?h?[aeiou][iuü]?h?n)" or "^%A$", rep_2_es_n_tilde) -- llana en n (diptongo con sílaba anterior, muy raro)
or try(p, sin_tildes and "([aeiou])(h?[iuü]?h?"..CONS_SALVO_H.."+h?u?[iuü]?h?[aeiou][iuü]?h?n)$" or "^%A$", rep_2_es_n_tilde) -- llana en n (con consonante de separacion)
or try(p, "(["..vocal_tilde.."])(h?[iuü]?h?"..CONS_SALVO_H.."+h?u?[iuü]?h?[aeiou][iuü]?h?n)$", rep_2_es_n_tilde) -- llana en n (con consonante de separacion)
or try(p, "[nsx]$", nil) -- esdrújulas en n, llanas/esdrújulas en x o s
or try(p, sin_tildes and "o[lr]$" or "^%A$", no_s and "%0es" or "#%0s#", "%0a", "%0as", nil, mf) -- -ol, -or (agudo)
or try(p, sin_tildes and "uz$" or "^%A$", "uces", "uza", "%uzas", nil, mf) -- -uz [[andaluz]], [[marfuz]] (REVISAR)
or try(p, "([aeo])úz$", "%1úces", "%1úza", "%1úzas", nil, mf) -- -uz (REVISAR)
or try(p, "úz$", "uces", "uza", "uzas", nil, mf) -- -uz (REVISAR)
or try(p, sin_tildes and "("..VOCAL..")([lrdjyzñ])$" or "^%A$", rep_2_es_yz_aguda) -- agudas en [lrdjyzñ]
or try(p, "([aeo][íú])([lrdjyzñ])$", rep_2_es_yz_aguda_tilde) -- agudas en [lrdjyzñ] (hiatos finales)
or try(p, "(["..vocal_tilde.."])([lrdjyzñ])$", rep_2_es_yz_aguda) -- agudas en [lrdjyzñ] (grafías anticuadas)
or try(p, "([áéó])(h?[iuü]?h?[aeiou][iuü]?)([lrdjyzñ])$", rep_2_es_yz_llana) -- llanas en [lrdjyzñ] (hiato entre vocales)
or try(p, "([íú])(h?[iuü]?h?[aeiou][iuü]?)([lrdjyzñ])$", rep_2_es_yz_llana) -- llanas en [lrdjyzñ] (hiato entre vocales 2)
or try(p, "([áéó])(h?[iuü]h?[iuü]?h?[aeiou][iuü]?h?)([lrdjyzñ])", rep_2_es_yz_llana) -- llanas en [lrdjyzñ] (diptongo con sílaba anterior, muy raro)
or try(p, "([áéó])(h?[iuü]?h?"..CONS_SALVO_H.."+h?u?[iuü]?h?[aeiou][iuü]?)([lrdjyzñ])$", rep_2_es_yz_llana) -- llanas en [lrdjyzñ] (con consonante de separación y diptongo)
or try(p, "([áéíóú])(h?"..CONS_SALVO_H.."+h?u?[iuü]?h?[aeiou][iuü]?)([lrdjyzñ])$", rep_2_es_yz_llana) -- llanas en [lrdjyzñ] (con consonante de separación)
or try(p, "[lrdjyzñ]$", nil) -- esdrújulas en [lrdjyzñ]
or try(p, CONS.."$", "%0s")
assert(changed, "No se pudo determinar la flexión de la palabra")
return changed
end
function export.flexion_sust_adj(palabras, g, forzar_s, copulativa)
local a, separador, b = match(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, forzar_s)
local flex2 = copulativa and export.flexionar_palabra(b, g, forzar_s) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto = match(palabras, "^("..guion.."?"..LETRA.."+)(.-)$")
local flex = export.flexionar_palabra(p, g, forzar_s)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
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["s"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." regulares")
elseif find(title, LETRA..ESPACIO..LETRA) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["n"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "ES:Locuciones sustantivas" or "ES:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "ES:Locuciones adjetivas" or "ES:Adjetivos")
end
local YO, TU, VOS, EL, NOSOTROS, VOSOTROS, ELLOS = 1, 2, 3, 4, 5, 6, 7
local tostr = {"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(forma, impers, indirecto)
if indirecto then
return nil
end
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local formas_no_personales = {
["ger"] = true,
["part"] = true,
["inf"] = true,
}
local formas_personales = {
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["ind_fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["subj_fut"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["ind_perf_comp"] = true,
["ind_pluperf"] = true,
["ind_anter"] = true,
["ind_fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
["subj_fut_comp"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
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 find(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
local _, cnt = gsub(sufijo, "[aeiou]", "")
if cnt == 1
and not find(sufijo, "[áéíóú]")
and find(sub(sufijo, -1), "[aeiouns]") then
if nexo == "cu" then
return sub(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 == "U" then
return "#u#"..sufijo -- [[estatuar]]
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 find(sufijo, "^ar") then
if find(nexo, "^[~#]?[bdr]?r[~#]?$") then
return nexo..sub(sufijo, 3)
end
end
else -- ER/IR/ÍR
if find(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 == "qu" then
return "~c~"..sufijo
end
if nexo == "C" then
return "~zc~"..sufijo
end
end
if find(sufijo, "^[aeoáéó]") then
if nexo == "gü" then
return "g~uy~"..sufijo
end
if nexo == "u" then
return "u~y~"..sufijo
end
end
if find(sufijo, "^i[aeoáéó]") then
if (nexo == "ñ" or nexo == "ll") then
return "~"..nexo..sub(sufijo, 2).."~"
end
if nexo == "gü" then
return "g~uy~"..sub(sufijo, 2)
end
if nexo == "u" then
return "u~y~"..sub(sufijo, 2)
end
if nexo == "e" then
return nexo.."~y~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i[^aeiouáéíóú]") then
if nexo == "e" then
return nexo.."~í~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i[eé]") then
if find(nexo, "u#$") then -- ir --> fuera (subj)
return nexo..sub(sufijo, 2)
end
if nexo == "#j#" or nexo == "~j~" then
return nexo..sub(sufijo, 2)
end
end
if find(sufijo, "^í$") then
if nexo == "#j#" or nexo == "~j~" then
return nexo.."~e~"
end
end
if find(sufijo, "^ió$") then
if nexo == "#j#" or nexo == "~j~" then
return nexo.."~o~"
end
end
if find(sufijo, "^[ie]r") then
if find(nexo, "^[~#]?[bdr]?r[~#]?$") then
return nexo..sub(sufijo, 3)
end
end
end
if nexo == "I" then
return "i"..sufijo -- sinéresis normal
end
if nexo == "U" then -- estatuar
return "u"..sufijo
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_ = gsub(nucleo, "[~#]", "")
local nexosufijo_ = gsub(nexosufijo, "[~#]", "")
if find(nucleo_, "[yi]$") and find(nexosufijo_, "^i") then -- se juntan dos íes o y-i (ej. reír, freír, oír)
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1")
elseif find(nucleo_, "^[^áéíóú]-[aeiou]h?$") and find(nexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- sufijo con i/u tónica (caISTE, caIMOS, caIDO, oID, reHÚyo etc.)
return nucleo..gsub1(nexosufijo, "^([~#]?h?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleo_, "[^gq][aeiou]$") and find(nexosufijo_, "^i[aeiouáéíóú]") then -- se junta [aeiou]i[aeiouáéíóú] -> cambio a y (creYO) PERO [[chinguiar]] -> chinguIando
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~y~")
elseif find(nucleo_, "[aeiou]$") and find(nexosufijo_, "^id$") then -- reír -> reÍd, embaír -> embaÍd
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~í~")
elseif find(nucleo_, "^[^aeiouáéíóú]+$")
and (find(nexosufijo_, "^"..CONS.."?"..CONS.."?".."[iuü]?[áéó][iuü]?[ns]?$") or find(nexosufijo_, "^[íú][ns]?$")) then -- caso de dar, vos *d+ás, debo quitar la tilde
return nucleo..gsub1(nexosufijo, "[áéíóú]", function(v) return "~"..quitar_tilde[v].."~" end)
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
local prefijo_ = gsub(prefijo, "[~#]", "")
local nucleonexosufijo_ = gsub(nucleonexosufijo, "[~#]", "")
if prefijo_ and find(prefijo_, "[aeiou]") and not find(prefijo_, "[áéíóú]") then
if find(prefijo_, "^[^áéíóú]-[aeiou]h?$") and find(nucleonexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- nucleonexosufijo con i/u tónica (rehacer -> rehíce)
return prefijo..gsub1(nucleonexosufijo, "^([~#]?h?[~#]?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleonexosufijo_, "^("..CONS.."*[iuü]?)([aeiou])([iuü]?[ns]?)$") then -- monosílabo: prever --> prevén
return prefijo..gsub1(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ü"
}},
{"quer", {"quer$"}, { -- Existe esto??
nexo = "qu"
}},
{"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ü"
}},
{"delinquir", {"quir$"}, {
nexo = "qu"
}},
{"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"},
}},
{"embaír", {"ír$"}, {
}},
}
}
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"}}
}},
{"estatuar", {"estatuar$"}, {
nexo = "U"
}},
{"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$", "tran?sver$"}, {
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$"}, {
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 = {"impreso{PART/ADJ}", "imprimido{PART}"}
}},
{"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á", "i{x}"}, {"vaya"}, {"vayamos", "vamos"}, 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(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo[forma].sufijo_inf or conjinfo.sufijo_inf
if sufijo_inf == "ar" and conjinfo[forma].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 sufijos_ = obtener_sufijos(sufijo_inf, (forma == "ind_perf" and conjinfo[forma].nucleo) and forma.."_alt" or forma)
local nucleos
if not conjinfo[forma].nucleo then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleos2
elseif forma == "part" then
nucleos = conjinfo.nucleo_inf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos1}
elseif forma == "ind_perf" then
nucleos = {conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos2, conjinfo.nucleos1}
elseif forma == "subj_imp" or forma == "subj_fut" then
local n = conjinfo.nucleos2
nucleos = {n, n, n, n, n, n, n}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleos1}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n, n}
end
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for j, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[1], sufijo_inf)
for _,nucleo in ipairs(nucleos) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, conjinfo.nucleo_inf[1])))
end
end
end
return
end
for i = YO, ELLOS do
local p = tostr[i]
if conjinfo[forma][i] then
for j, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
if forma == "subj_pres" and i == VOS then
for _,fm in ipairs(conjugado[forma..tostr[TU]]) do
insert_if_not(conjugado[forma..p], fm)
end
end
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[i], sufijo_inf)
for _,nucleo in ipairs(nucleos[i]) do
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, conjinfo.nucleo_inf[1])))
end
if forma == "subj_imp" then
local nexosufijo3, _ = combinar_nexo_sufijo(nexo, sufijos_[i+7], sufijo_inf)
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo3, conjinfo.nucleo_inf[1])))
end
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local arr = res[forma]
local t = {}
local tiempo, i = match(forma, "^(.*)(%d)$")
if not i then
tiempo = forma
i = 1
end
i = tonumber(i)
local rest_ = i < NOSOTROS and resto or resto_pl
local rest_pl_ = resto_pl
if tiempo == "imper" and adv == "no " then
tiempo = "subj_pres"
arr = fmtinfo["subj_pres"..tostr[i]]
end
for _, v in ipairs(arr) do
local hs = auxiliar[tiempo]
local v2
local rest = rest_
local rest_pl = rest_pl_
if hs then
rest = " "..v..rest
rest_pl = " "..v..rest_pl
v = hs[i]
v2 = hs[i+7] -- subjuntivo imperfecto
end
if forma == "inf" or forma == "inf_comp" then
if pron ~= "" and art ~= "" then
v = gsub(v, "([aei])r$", function (x) return agregar_tilde[x].."r" end)
end
insert(t, adv..v..pron..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..v..pron..art..f_links(rest_pl))
end
elseif forma == "ger" or forma == "ger_comp" then
local vpron = v..pron
if pron ~= "" or art ~= "" then
vpron = gsub(vpron, "^(.*)([ae])(ndo)", function(x, y, z) return x..agregar_tilde[y]..z end)
end
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..f(vpron)..art..f_links(rest_pl))
end
elseif forma == "part" then
insert(t, adv..f_links(v)..f_links(resto))
if (resto_pl ~= resto) then
insert(t, adv..f_links(v)..f_links(resto_pl))
end
elseif tiempo == "imper" and (pron ~= "" 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
local vpron = gsub(v, "[~#]", "") -- 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 = gsub(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 = gsub(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 = gsub(vpron,
"^([^áéíóú]*"..CONS_SALVO_H.."u?[iuü]?)([áéíóú])([ns]?)$",
function(x, y, z) return x..quitar_tilde[y]..z end
)
vpron = gsub(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 = gsub(vpron, "mos$", "mo")
end
if enc == "os" then -- amaD + os -> amaos, hacED + os -> haceos, salvo idos
vpron = gsub(vpron, "([ae])d$", "%1")
vpron = gsub(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 = gsub(vpron,
"^([^áéíóú]*)([aeiou])([^áéíóú]-)$",
function(x, y, z) return x..agregar_tilde[y]..z end
)
end
vpron = vpron..enc
end
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
else -- si es imperativo y el pronombre y artículo están ambos vacíos, es lo mismo anteponerlos que posponerlos
local pronart = pron == "se" and REFLEXIVOS[i].." " or ""
pronart = art ~= "" and pronart..art.." " or pronart
insert(t, adv..pronart..f_links(v)..f_links(rest))
if v2 then
insert(t, adv..pronart..f_links(v2)..f_links(rest))
end
end
end
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
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"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
if args["indirecto"] then
generar_traza("indirecto")
end
local adv, r1 = match(tit, "^([sSnN][ío]"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiáéí]r)(s?e?)(l?[aeo]?s?)(.-)$")
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[ío]?"..ESPACIO.."?"..LETRA.."*[aeiáéí]rs?e?l?[aeo]?s?(.-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
v = gsub(v, "^(%S*)ár$", "%1ar") -- pronominales
v = gsub(v, "^(%S*)ér$", "%1er") -- pronominales
v = gsub(v, "^(%S*[^aeo])ír$", "%1ir") -- grafías anticuadas
local sufijo_inf = match(v, "[aeií]r$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
for N = 1, math.max(1,
maxindex(args["paradigma"]),
maxindex(args["alt"]),
maxindex(args["nucleopres1"]),
maxindex(args["nucleopret3"])) do
local conjinfo = {}
if find(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 find(v, rx) then
conjinfo = deepcopy(p[3])
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 find(v, rx) then
local vacio = true
for k, v in pairs(p[3]) do
vacio = false
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
if 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")
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
if not conjinfo.nucleo_inf then
conjinfo.nucleo_inf = sub(v, 1, len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
conjinfo.prefijo = ""
elseif not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, len(v) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
if not conjinfo.prefijo then -- caso en el que cambié el núcleo
conjinfo.prefijo = ""
end
conjinfo.nucleos1 = {}
conjinfo.nucleos2 = {}
conjinfo.alt = conjinfo.alt or {}
if args["alt"][N] then
insert_if_not(conjinfo.alt, args["alt"][N])
end
for i, a in ipairs(conjinfo.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 = gsubb(conjinfo.nucleo_inf, "^(.*)["..info[2].."](.-)$", "%1#"..info[3].."#%2")
if info[4] then
n2, sust = gsubb(conjinfo.nucleo_inf, "^(.*)["..info[2].."](.-)$", "%1#"..info[4].."#%2")
end
assert(sust, "Alternancia vocálica no reconocida")
insert_if_not(conjinfo.nucleos1, n1)
insert_if_not(conjinfo.nucleos2, n2)
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
else
insert_if_not(conjinfo.nucleos1, conjinfo.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 gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[3]) == gsub1(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1")
and gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[4]) == gsub1(args["nucleopret3"][N], "^.*#([^#]+)#.*$", "%1")
then
es_irregular = true
paradigmas_reconocidos[v[1]] = true
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
insert_if_not(conjinfo.nucleos2, args["nucleopret3"][N])
break
end
end
else
if not v[4] then
if gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[3]) == gsub1(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1")
then
es_irregular = true
paradigmas_reconocidos[v[1]] = true
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
break
end
end
end
end
end
if not conjinfo.nucleos1[1] then
conjinfo.nucleos1[1] = conjinfo.nucleo_inf
end
if not conjinfo.nucleos2[1] then
conjinfo.nucleos2[1] = conjinfo.nucleo_inf
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if (find(e, 'PART') or not find(e, 'ADJ')) and not find(e, "†") then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, resto=resto, resto_pl=resto_pl,impers=args["impersonal"]}
for _,s in ipairs(tostr) do
fmtinfo["subj_pres"..s] = deepcopy(resultante["subj_pres"..s])
end
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local es_impersonal = args["impersonal"]
local es_indirecto = args["indirecto"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, es_impersonal, es_indirecto)
end)
local impers = args["impersonal"]
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=COLOR_H, header=true}
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
else
resultante.inf.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.part.colspan = cs1-1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."4"]
elseif impers == "36" then
return resultante[tiempo.."4"], resultante[tiempo.."7"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"], resultante[tiempo.."7"]
end
t[5] = {{"Formas personales", colspan=cs}, color=COLOR_H, 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}, ic("ind_pres")}
t[9] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")}
t[10] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("ind_perf")}
t[11] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")}
t[12] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("ind_perf_comp")}
t[13] = {{"Futuro", color=COLOR_IND, header=true}, ic("ind_fut")}
t[14] = {{"Futuro compuesto", color=COLOR_IND, header=true}, ic("ind_fut_comp")}
t[15] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("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}, ic("cond")}
t[19] = {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("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}, ic("subj_pres")}
t[23] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")}
t[24] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")}
t[25] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")}
t[26] = {{f("Futuro{†}"), color=COLOR_SUBJ, header=true}, ic("subj_fut")}
t[27] = {{f("Futuro compuesto{†}"), color=COLOR_SUBJ, header=true}, ic("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}, ic("imper")}
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")
-- 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["embaír"] = nil
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
impers = impers or ""
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "ES:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "ES:Verbos terciopersonales")
end
if find(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 renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")",
t,
ns == 0 and cats or {})
end
return export
8qbnulcugcfoxm06z8zze1mw9skbxnp
balón medicinal
0
1049020
6118069
5698512
2026-06-15T15:17:26Z
~2026-34597-22
183061
Imagen
6118069
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
==== {{locución sustantiva|es}} ====
{{es.sust|cop=s}}
[[File:Pelota Medicinal.jpg|thumb|mujer ejercitando con un balón medicinal]]
;1 {{csem|deporte|fitness}}: {{ucf|pelota}} [[pesado|pesad]]a de gran [[diámetro]], usada para toda clase de [[ejercicio]]s, tanto [[postural]]es como [[aeróbico]]s.<ref>{{referencia|c=pagina|u=https://www.fitnesstech.es/blogs/noticias/para-que-sirve-el-balon-medicinal|t=¿Para qué sirve el balón medicinal?|sitio=Fitness Tech|a=Kathia Softalian|f=2022-7-28}}</ref>
{{sinónimo|bola medicinal|pelota medicinal}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
qj2ybzgzpjkx0mpnnaj2pn6zg8gfwsb
palitos chinos
0
1050487
6118074
5702943
2026-06-15T17:37:10Z
~2026-34597-22
183061
imagen
6118074
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
==== {{locución sustantiva|es}} ====
[[File:Another Pho Bowl.jpg|thumb|[1]]]
{{es.sust|p}}
;1 {{csem|cocina|utensilios}}: [[palito|Palitos]] con los que se [[comer|come]] principalmente el [[arroz]] y otras comidas en los países [[asiático]]s.
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
osfz00kqybs2euq3vx3vmuzyvtmlwwd
atro
0
1054951
6118086
5822757
2026-06-15T19:50:47Z
26agcp
138617
/* Etimología */
6118086
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|la|alt=ātrum|ater}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;1 {{csem|colores}}: Dicho de un color: [[opaco]], [[apagado]], poco llamativo.
{{uso|culto|raro}}
{{sinónimo|mate|fusco}}
{{antónimo|brillante}}
{{ejemplo|; pero también de la India Oriental: su figura es de la de un corazón de Gallina, y de la magnitud de una Nuez moscada menor, por la parte de afuera está cubierta de una película tenue de color gríseo, y la substancia que contiene es de color '''atro''' fusco; se pulveriza con dificultad, su olor es grato, y el sabor amargo...|c=libro|t=Clave botánica o Medicina botánica nueva, y novíssima|a=Francisco Suárez de Ribera|f=1738|u=https://www.google.com.ar/books/edition/Clave_bot%C3%A1nica_o_Medicina_bot%C3%A1nica_nue/jSshECubM1oC?hl=es-419&gbpv=1&dq=de+color+atro&pg=PA262&printsec=frontcover}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
2nl5m63u0y53o7f1gf77yzrzesu164l
Módulo:flex/it
828
1055180
6118176
6117314
2026-06-16T02:18:33Z
TMCbot
164594
.
6118176
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 max = math.max
local m_bool = require("Módulo:sí-no")
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local match = m_str.match
local len = m_str.len
local sub = m_str.sub
local gsplit = m_str.gsplit
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local vocal = "aeiouAEIOU"
local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ"
local vocales = vocal .. vocal_tildada
local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"
local V = "[" .. vocales .. "]"
local C = "[" .. consonantes .. "]"
local espacios = "%-‐%s"
local guion = "%-"
local ESPACIO = "["..espacios.."]"
local LETRA = "[^"..espacios.."]"
local quitar_tilde =
{
["à"] = "a",
["è"] = "e",
["ì"] = "i",
["ò"] = "o",
["ù"] = "u",
["á"] = "a",
["é"] = "e",
["í"] = "i",
["ó"] = "o",
["ú"] = "u",
["a"] = "a",
["e"] = "e",
["i"] = "i",
["o"] = "o",
["u"] = "u",
["À"] = "A",
["È"] = "E",
["Ì"] = "I",
["Ò"] = "O",
["Ù"] = "U",
["Á"] = "A",
["É"] = "E",
["Í"] = "I",
["Ó"] = "O",
["Ú"] = "U",
["A"] = "A",
["E"] = "E",
["I"] = "I",
["O"] = "O",
["U"] = "U",
}
local function try(p, nexo, m, pl, f, fpl, g, h)
if h == true and not find(pl, "^h") then
pl = "#h"..pl.."#"
elseif h == false and find(pl, "^h") then
pl = "#"..sub(pl, 2).."#"
end
if g == "m" or g == "mf" then
local r, n, mascu
r, n, mascu = match(p, "^(.-)("..nexo..")("..m..")$")
if n then
if type(n) ~= "string" then
n = ""
end
r = gsub(r, "["..vocal_tildada.."]", quitar_tilde) -- quito tildes para que genere los enlaces correctos
n = gsub(n, "["..vocal_tildada.."]", quitar_tilde)
if not pl then
return {m={r.."~"..n..mascu.."~"}, p={}, f={}, fp={}}
elseif g == "mf" and (f ~= m or fpl ~= pl) then
return {m={r.."~"..n..mascu.."~"}, p={r.."~"..n..pl.."~"}, f={r.."~"..n..f.."~"}, fp={r.."~"..n..fpl.."~"}}
else -- g == m
return {m={r.."~"..n..mascu.."~"}, p={r.."~"..n..pl.."~"}, f={}, fp={}}
end
end
else -- g == "f"
local r, n, feme
r, n, feme = match(p, "^(.-)("..nexo..")("..f..")$")
if n then
if type(n) ~= "string" then
n = ""
end
r = gsub(r, "["..vocal_tildada.."]", quitar_tilde) -- quito tildes para que genere los enlaces correctos
n = gsub(n, "["..vocal_tildada.."]", quitar_tilde)
if not fpl then
return {m={r.."~"..n..feme.."~"}, p={}, f={}, fp={}}
else
return {m={r.."~"..n..feme.."~"}, p={r.."~"..n..fpl.."~"}, f={}, fp={}}
end
end
end
return nil
end
-- https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/
-- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale
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, V.."fug", "o", "hi", "a", "he", g, h) or -- -fugo, es un caso particular de -co/-go, en este caso siempre es plural con ghi
try(p, V.."fag", "o", "i", "a", "he", g, h) or -- -fago, es un caso particular de -co/-go, el tipo de plural depende de si es persona u objeto
try(p, "olog", "o", "i", "a", "he", g, h) or -- -ologo, es un caso particular de -co/-go asumo que refiere a una persona
try(p, V.."log", "o", "hi", "a", "he", g, h) or -- -logo, para el resto de palabras en -logo asumo que son objetos
try(p, "iac", "o", "i", "a", "he", g, h) or -- -iaco, es un caso particular de -co/-go pero si está este sufijo asumo que es esdrújula
try(p, V..C.."+ic", "o", "i", "a", "he", g, h) or -- -ico (trisílaba), es un caso particular de -co/-go pero si está este sufijo asumo que es esdrújula
try(p, "["..vocal_tildada.."][iu]?"..C.."?[cg]", "o", "hi", "a", "he", g, h) or -- -co/-go (llana)
try(p, "["..vocal_tildada.."][^"..vocal_tildada.."]+[cg]", "o", "i", "a", "he", g, h) or -- -co/-go (esdrújula)
try(p, "[cg]", "o", "hi", "a", "he", g, h) or -- -co/-go (llana)
try(p, "[cg]", "a", "hi", "a", "he", g, h) or
try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or
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, "", "one", "oni", "ona", "one", g, nil) or
try(p, "", "e", "i", "e", "i", g, nil) or
try(p, "", "["..vocal_tildada.."]", nil, "["..vocal_tildada.."]", nil, g, nil) or
try(p, C, "", nil, "", nil, g, nil)
if g == "m" or g == "f" or g == "mf" or g == "ng" then
assert(changed, "No se pudo determinar la flexión de la palabra")
else
changed = changed or {m={p}, p={}, f={}, fp={}}
end
return changed
end
local function flexion_sust_adj(palabras, g, h, copulativa)
local a, separador, b = match(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 {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto = match(palabras, "^("..guion.."?"..LETRA.."+)(.-)$")
local flex = flexionar_palabra(p, g, h)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
if not args["ayuda"] then
args["ayuda"] = title
end
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
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_ = flexion_sust_adj(args["ayuda"], modo, args["h"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." regulares")
elseif find(args["ayuda"], LETRA..ESPACIO..LETRA) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["n"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {alias_de = "ayuda"},
["ayuda"] = {},
["h"] = {tipo = "bool"},
["m"] = {lista = true},
["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,
["irreg"] = true
}
assert(valido[args[1]], "Especifique el género del sustantivo en el primer parámetro: m, f, mf, ng, inv, s, p, irreg")
return formatear_sust_adj(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "IT:Locuciones sustantivas" or "IT:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {alias_de = "ayuda"},
["ayuda"] = {},
["h"] = {tipo = "bool"},
["m"] = {lista = true},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "IT:Locuciones adjetivas" or "IT:Adjetivos")
end
local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6
local tostr = {"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(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers and impers ~= "" then
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local formas_no_personales = {
["ger"] = true,
["part"] = true,
["part_pres"] = true,
["inf"] = true,
}
local formas_personales = {
["ind_pres"] = true,
["ind_imp"] = true,
["perf"] = true,
["fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["perf_comp"] = true,
["ind_pluperf"] = true,
["anter"] = true,
["fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local sufijos = {
["are"] = {
["ger"] = {"ando"},
["part"] = {"ato"},
["part_alt"] = {"o"},
["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"},
["perf_alt"] = {"i", "esti", "e", "emmo", "este", "ero"},
["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"},
["fut_dare"] = {"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_dare"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"},
["imper"] = {"-", "a", "i", "iamo", "ate", "ino"},
["imper_alt"] = {"-", "a", "i", "iamo", "iate", "ino"}
},
["ere"] = {
["ger"] = {"endo"},
["part"] = {"uto"},
["part_alt"] = {"o"},
["part_pres"] = {"ente"},
["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"},
["ind_pres_mpiere"] = {"o", "", "e", "amo", "ite", "ono"},
["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"},
["perf"] = {"ei", "esti", "é", "emmo", "este", "erono",
"etti", nil, "ette", nil, nil, "ettero"},
["perf_alt"] = {"i", "esti", "e", "emmo", "este", "ero"},
["perf_plaudere"] = {"ii", "isti", "ì", "immo", "iste", "irono"},
["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", "a", "iamo", "ete", "ano"},
["imper_alt"] = {"-", "i", "a", "iamo", "iate", "ano"}
},
["ire"] = {
["ger"] = {"endo"},
["part"] = {"ito"},
["part_alt"] = {"o"},
["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"},
["perf_alt"] = {"i", "isti", "i", "immo", "iste", "iro"},
["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"},
["imper_alt"] = {"-", "i", "a", "iamo", "ite", "ano"}
},
["arre"] = {
["ger"] = {"aendo"},
["part"] = {"atto"},
["part_pres"] = {"aente"},
["ind_pres"] = {"aggo", "ai", "ae", "aiamo", "aete", "aggono"},
["ind_imp"] = {"aevo", "aevi", "aeva", "aevamo", "aevate", "aevano"},
["perf"] = {"assi", "aesti", "asse", "aemmo", "aeste", "assero"},
["fut"] = {"arrò", "arrai", "arrà", "arremo", "arrete", "arranno"},
["subj_pres"] = {"agga", "agga", "agga", "aiamo", "aiate", "aggano"},
["subj_imp"] = {"aessi", "aessi", "aesse", "aessimo", "aeste", "aessero"},
["cond"] = {"arrei", "arresti", "arrebbe", "arremmo", "arreste", "arrebbero"},
["imper"] = {"-", "ai", "agga", "aiamo", "aete", "aggano"}
},
["orre"] = {
["ger"] = {"onendo"},
["part"] = {"osto"},
["part_pres"] = {"onente"},
["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"},
["part_pres"] = {"ucente"},
["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"},
["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"},
["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)
if find(nucleo, "[bdfgkprtv]r#$") and find(nexosufijo, "^"..V.."r") then
return nucleo..sub(nexosufijo, 3)
end
if (nucleo == "empi" or nucleo == "mpi" or nucleo == "gli") and find(nexosufijo, "^i") then
return nucleo..sub(nexosufijo, 2)
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
return prefijo..nucleonexosufijo
end
local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf)
if not nexo then
return sufijo
end
if find(sufijo, "^[ei]") then
if nexo == "c" then
return "~ch~"..sufijo
end
if nexo == "g" then
return "~gh~"..sufijo
end
if nexo == "ci" then
return "~c~"..sufijo
end
if nexo == "gi" then
return "~g~"..sufijo
end
end
if find(sufijo, "^i") then
if nexo == "i" then
return 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", {"iare$"}, {
nexo = "i"
}},
{"avviare", {"iare$"}, {
}},
{"amare", {"are$"}, {
}},
},
["ere"] = {
{"prudere", {"prudere$"}, { -- impersonal
nucleoperf = {"REG{R}"},
part = {},
}},
{"stridere", {"stridere$", "concernere$", "discernere$", "serpere$", "splendere$", "lucere$", "combere$", "esimere$", "fervere$"}, {
part = {},
}},
{"controvertere", {"controvertere$"}, {
nucleoperf = {},
part = {},
}},
{"temere", {"ere$"}, {
}},
},
["ire"] = {
{"introvertire", {"introvertire$"}, { -- no va vertire
nucleopres = {"INCO"},
nucleoperf = {},
}},
{"compartire", {"compartire$", "putire$", "languire$", "eseguire$", "borrire$", "sbollire$", "inghiottire$"}, {
nucleopres = {"INCO", "REG"},
}},
{"compartire", {"sorbire$"}, {
nucleopres = {"INCO", "REG{R}"}
}},
{"compartire", {"applaudire$", "assalire$"}, {
nucleopres = {"REG", "INCO{R}"}
}},
{"compartire", {"^mentire$"}, {
nucleopres = {"REG", "INCO"},
}},
{"finire", {"finire$", "muggire$", "asservire$"}, { -- fuggire no es inco
nucleopres = {"INCO"},
}},
{"partire", {"ire$"}, {
}},
-- cuidado con sortire, tiene doble etimología y en una es inco y en la otra no
},
["arre"] = {
{"trarre", {"arre$"}, {
}},
},
["orre"] = {
{"porre", {"orre$"}, {
}},
},
["urre"] = {
{"condurre", {"urre$"}, {
}},
}
}
local paradigmas_irregulares = {
["are"] = {
{"andare", {"andare$"}, { -- andare, riandare, trasandare
nucleo = "and",
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$", "addare$", "ridare$"}, { -- dare, addare, ridare, pero NO guidare, ni otros terminados en -dare
nucleo = "d",
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_dare"},
cond = {sufijos = "cond_dare"},
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_dare"},
cond = {sufijos = "cond_dare"},
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}"}}
}},
-- NOTA: NO puede ir buffare, así que por las dudas ennumero todos los prefijos y compuestos
{"fare", {"^s?fare$"}, {
nucleo = "f",
nucleoperf = {"fec-fac"},
ger = {"facendo"},
part = {"fatto"},
part_pres = {"facente"},
ind_pres = {{"faccio"}, {"fai"}, nil, {"facciamo"}, nil, {"fanno"}},
ind_imp = {{"facevo"}, {"facevi"}, {"faceva"}, {"facevamo"}, {"facevate"}, {"facevano"}},
fut = {sufijos = "fut_dare"},
cond = {sufijos = "cond_dare"},
subj_pres = {{"faccia"}, {"faccia"}, {"faccia"}, {"facciamo"}, {"facciate"}, {"facciano"}},
subj_imp = {{"facessi"}, {"facessi"}, {"facesse"}, {"facessimo"}, {"faceste"}, {"facessero"}},
imper = {nil, {"fai", "fa'"}, {"faccia"}, {"facciamo"}, nil, {"facciano"}}
}},
-- estos van con tilde
{"fare", {"^rifare$", "^affare$", "assuefare$", "confare$", "contraffare$", "disfare$", "dis?a?ssuefare$", "liquefare$", "malfare$", "mansuefare$", "putrefare$", "rarefare$", "sopraffare$", "strafare$", "stupefare$", "torrefare$", "tumefare$"}, {
nucleo = "f",
nucleoperf = {"fec-fac"},
ger = {"facendo"},
part = {"fatto"},
part_pres = {"facente"},
ind_pres = {{"faccio"}, {"fai"}, {"fà"}, {"facciamo"}, nil, {"fanno"}},
ind_imp = {{"facevo"}, {"facevi"}, {"faceva"}, {"facevamo"}, {"facevate"}, {"facevano"}},
fut = {sufijos = "fut_dare"},
cond = {sufijos = "cond_dare"},
subj_pres = {{"faccia"}, {"faccia"}, {"faccia"}, {"facciamo"}, {"facciate"}, {"facciano"}},
subj_imp = {{"facessi"}, {"facessi"}, {"facesse"}, {"facessimo"}, {"faceste"}, {"facessero"}},
imper = {nil, {"fai", "fa'"}, {"faccia"}, {"facciamo"}, nil, {"facciano"}}
}},
},
["ere"] = {
{"essere", {"essere$", "riessere$", "trasessere$"}, {
nucleo = "ess",
part_pres = {"essente{R}"},
ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}},
ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}},
perf = {{"fui"}, {"fosti"}, {"fu{G}"}, {"fummo"}, {"foste"}, {"furono"}},
fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}},
cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}},
subj_pres = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}},
subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}},
imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}
}},
{"avere", {"^avere$", "^riavere$", "^bene?avere$"}, {
nucleo = "av",
nucleopres = {"abbi-abb-abb-abb"},
nucleoperf = {"ebb-av"},
nucleofut = {"avr"},
part_pres = {"avente", "abbiente"},
ger_comp = {"avendo"},
ind_pres = {{"ho"}, {"hai"}, {"ha"}, nil, nil, {"hanno"}},
}},
{"sapere", {"sapere$"}, {
nucleo = "sap",
nucleopres = {"sappi-sapp-sapp-sapp"},
nucleoperf = {"sepp"},
nucleofut = {"sapr"},
part_pres = {},
ind_pres = {{"so{G}"}, {"sai"}, {"sa{G}"}, nil, nil, {"sanno"}},
}},
{"potere", {"potere$"}, {
nucleo = "pot",
nucleopres = {"poss-poss-poss"},
nucleofut = {"potr"},
ind_pres = {nil, {"puoi"}, {"può"}, nil, nil, nil},
imper = {nil, {}, {}, {}, {}, {}}
}},
{"dovere", {"dovere$"}, {
nucleo = "dov",
nucleopres = {"dev-dev-dobb", "debb-dev-dobb"},
nucleofut = {"dovr"},
ind_pres = {{"devo"}},
imper = {nil, {}, {}, {}, {}, {}}
}},
{"piacere", {"acere$"}, { -- REVISAR ESTO
nucleopres = {"acci-REG-acc"},
nucleoperf = {"acqu"},
nucleopart = {"aciut"},
}},
{"nuocere", {"nuocere$"}, { -- REVISAR
nucleopres = {"nocci", "nuocci-nuoc-noc"},
nucleoperf = {"nocqu"},
ger = {"nuocendo", "nocendo{R}"},
part = {"nociuto", "nuociuto{R}"},
part_pres = {"nocente"},
}},
{"nascere", {"nascere$"}, {
nucleoperf = {"nacqu"},
part = {"nato"},
}},
{"crescere", {"crescere$", "noscere$"}, { -- tb -noscere, pero no pascere, mescere
nucleo = "sc",
nucleoperf = {"bb"},
nucleopart = {"sciut"},
}},
{"cadere", {"cadere$"}, {
nucleoperf = {"cadd"},
nucleofut = {"cadr"},
}},
{"possedere", {"possedere$"}, {
nucleopres = {"possied-possied", "possegg-possied"},
nucleofut = {"possied", "possed"}
}},
{"sedere", {"sedere$"}, {
nucleopres = {"sied", "segg{†}", "siegg{†}"},
nucleofut = {"sied", "sed"},
}},
{"prevedere", {"prevedere$"}, {
nucleo = "ved",
nucleoperf = {"vid"},
part = {"visto", "veduto{R}"},
nucleofut = {"vedr", "veder"},
part_pres = {"vedente", "veggente"},
}},
{"provedere", {"provedere$", "provvedere$"}, {
nucleo = "ved",
nucleoperf = {"vid"},
part = {"veduto{PART}", "visto{ADJ}"},
nucleofut = {"vedr", "veder"},
part_pres = {"vedente", "veggente"},
}},
{"ravedere", {"^ravedere$"}, {
nucleo = "ved",
nucleoperf = {"vid"},
part = {"veduto"},
nucleofut = {"vedr", "veder"},
part_pres = {"vedente", "veggente"},
}},
{"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, {
nucleo = "ved",
nucleoperf = {"vid"},
part = {"veduto"},
nucleofut = {"vedr"},
part_pres = {"vedente", "veggente"},
}},
{"vedere", {"vedere$"}, {
nucleo = "ved",
nucleoperf = {"vid"},
part = {"visto", "veduto{R}"},
nucleofut = {"vedr"},
part_pres = {"vedente", "veggente"},
}},
{"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)?
nucleoperf = {"spans", "REG{R}"},
part = {"spanto", "spanso"},
}},
{"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc.
part = {"fenduto", "fesso"},
}},
{"propendere", {"propendere$"}, {
part = {"propeso{R}"},
}},
{"fondere", {"fondere$"}, {
nucleoperf = {"fus"},
part = {"fuso"},
}},
{"tondere", {"tondere$"}, {
part = {"tonduto", "tonso"},
}},
{"godere", {"godere$"}, {
nucleofut = {"godr"},
}},
{"plaudere", {"plaudere$"}, {
perf = {sufijos = "perf_plaudere"},
part = {"plaudito"},
}},
-- estos son ss-tt pero alteran una vocal
{"redigere", {"redigere$"}, {
nucleoperf = {"redass"},
part = {"redatto"},
}},
{"cuocere", {"cuocere$"}, {
nucleopres = {"cuoci-cuoc-cuoc", "cuoci-cuoc-coc{R}"},
nucleoimp = {"cuoci", "coci{R}"},
nucleofut = {"cuoc", "coc{R}"},
nucleoperf = {"ss"},
nucleopart = {"cott"},
}},
{"diligere", {"diligere$"}, {
nucleoperf = {"diless"},
part = {"diletto"},
}},
{"ducere", {"ducere$"}, {
nucleoperf = {"ss"},
nucleofut = {"durr"},
part = {"dotto"},
}},
{"rigere", {"rigere$"}, {
nucleoperf = {"ress"},
part = {"retto"},
}},
{"sigere", {"sigere$"}, { -- esigere, transigere
nucleoperf = {"REG{R}"},
part = {"satto"},
}},
{"stringere", {"stringere$"}, {
nucleoperf = {"strins"},
part = {"stretto"},
}},
{"fungere", {"fungere$"}, {
nucleoperf = {"funs"},
part = {"funto{R}"},
}},
{"ergere", {"^ergere$", "adergere$", "ridergere$"}, {
nucleo = "erg",
nucleoperf = {"s"},
part = {"t"},
}},
{"urgere", {"^urgere$"}, { -- no surgere
nucleoperf = {},
part = {},
}},
{"empiere", {"^empiere$", "riempiere$"}, { -- tb. riempiere
nucleo = "empi",
ind_pres = {sufijos = "ind_pres_mpiere"},
perf = {{"empii", "empiei{R}"}, {"empisti", "empiesti{R}"}, {"empì", "empié{R}"}, {"empimmo", "empiemmo{R}"}, {"empiste", "empieste{R}"}, {"empirono", "empierono{R}"}},
}},
{"adempiere", {"mpiere$"}, { -- adempiere, compiere, disimpeire
nucleo = "mpi",
ind_pres = {sufijos = "ind_pres_mpiere"},
perf = {ei = true},
}},
{"valere", {"valere$"}, {
nucleopres = {"valg"},
nucleoperf = {"vals"},
nucleofut = {"varr"},
part = {"valso"},
}},
{"pellere", {"pellere$", "avellere$"}, {
nucleo = "elle",
nucleoperf = {"uls"},
part = {"ulso"},
}},
{"svellere", {"svellere$", "divellere$"}, {
nucleo = "vell",
nucleopres = {"REG", "velg"},
nucleoperf = {"vels"},
part = {"velto"},
}},
{"dolere", {"dolere$"}, {
nucleopres = {"dolg-duol"},
nucleoperf = {"dols"},
nucleofut = {"dorr"},
}},
{"solere", {"solere$"}, {
nucleopres = {"sogli-suol-sogl"},
nucleoperf = {"REG{R}"},
part = {"solito"},
fut = {{},{},{},{},{},{}},
imper = {{},{},{},{},{},{}},
part_pres = {},
}},
{"volere", {"volere$"}, {
nucleopres = {"vogli-vogl-vogl-vogl"},
ind_pres = {nil, {"vuoi"}, {"vuole"}, nil, nil, nil},
nucleoperf = {"voll"},
nucleofut = {"vorr"},
}},
{"redimere", {"redimere$"}, {
nucleoperf = {"redens"},
part = {"redento"},
}},
{"perplimere", {"perplimere$"}, {
part = {"perplesso", "perplimuto{R}"},
}},
{"dirimere", {"dirimere"}, {
part = {"dirento{†}"},
}},
{"primere", {"primere$"}, {
nucleoperf = {"press"},
part = {"presso"},
}},
{"sumere", {"sumere$"}, {
nucleoperf = {"suns"},
part = {"sunto"},
}},
{"rimanere", {"rimanere$"}, {
nucleopres = {"rimang"},
nucleoperf = {"rimas"},
part = {"rimasto"},
nucleofut = {"rimarr"},
}},
{"permanere", {"permanere$"}, {
nucleopres = {"permang"},
nucleoperf = {"permas"},
part = {},
nucleofut = {"permarr"},
}},
{"tenere", {"tenere$"}, {
nucleopres = {"teng-tien"},
nucleoperf = {"tenn"},
nucleofut = {"terr"},
}},
{"spegnere", {"spegnere$"}, {
nucleopres = {"speng"},
nucleoperf = {"spens"},
part = {"spento"},
}},
{"cernere", {"^cernere$", "ricernere$"}, {
nucleoperf = {},
part = {"cernito"},
}},
{"secernere", {"secernere$"}, {
part = {"secreto"},
}},
{"rompere", {"rompere$"}, {
nucleoperf = {"rupp"},
part = {"rotto"},
}},
{"^parere", {"^parere$"}, {
nucleopres = {"pai-par-pai"},
nucleoperf = {"parv"},
nucleofut = {"parr"},
part = {"parso"},
ind_imp = {{},{},{},{},{},{}},
part_pres = {"parvente"},
}},
{"correre", {"correre$"}, {
nucleoperf = {"cors"},
part = {"corso"},
}},
{"cuotere", {"cuotere$"}, {
nucleoperf = {"coss"},
part = {"cosso"},
}},
-- vertere impersonal
{"estrovertere", {"estrovertere$"}, {
nucleoperf = {},
part = {"estroverso", "estrovertito{R}"},
}},
{"introvertere", {"introvertere$"}, {
nucleoperf = {},
part = {"introverso"},
}},
{"sistere", {"sistere$"}, {
nucleoperf = {"sistito"},
}},
{"flettere", {"flettere$"}, {
nucleoperf = {"REG", "ss"},
perf = {ei = true},
part = {"flesso"},
}},
{"mettere", {"mettere$"}, {
nucleoperf = {"misi"},
part = {"messo"},
}},
{"convivere", {"convivere$", "sopravivere$"}, {
nucleo = "viv",
nucleoperf = {"viss"},
nucleofut = {"vivr", "REG"},
part = {"vissuto"},
}},
{"vivere", {"vivere$"}, {
nucleo = "viv",
nucleoperf = {"viss"},
nucleofut = {"vivr"},
part = {"vissuto"},
}},
{"asciolvere", {"sciolvere$"}, {
nucleoperf = {"REG", "sciols"},
}},
{"volvere", {"volvere$"}, {
nucleoperf = {"vols", "REG"},
part = {"voluto"},
}},
{"bere", {"^bere$"}, {
nucleo = "bev",
nucleoperf = {"bevv", "REG"},
nucleofut = {"berr"},
}},
{"piovere", {"piovere$"}, {
nucleoperf = {"piovv"},
}},
{"muovere", {"muovere$"}, { -- muovere, commuovere
nucleoperf = {"moss"},
part = {"mosso"},
}},
{"ripetere", {"tere$", "tessere$"}, { -- competere, mietere, fotere, vertere, battere, nettere
perf = {ei = true},
}},
{"togliere", {"gliere$"}, { --scegliere
nucleo = "gli",
nucleopres = {"lg"},
nucleoperf = {"ls"},
part = {"lto"},
}},
{"scindere", {"scindere$", "affiggere$", "crocifiggere$", "infiggere$", "defiggere$", "prefiggere$", "sufiggere$", "cotere$", "cutere$"}, {
nucleoperf = {"ss"},
nucleopart = {"ss"},
}},
{"radere", {"[aeiou]dere$", "[eu]ndere$", "ergere$"}, { --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
nucleoperf = {"s"},
nucleopart = {"s"},
}},
{"vincere", {"vincere$", "torcere$", "[lnr]gu?ere$", "solvere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere
nucleoperf = {"s"},
nucleopart = {"t"},
}},
{"succedere", {"succedere$", "concedere$", "retrocedere$", "perdere$"}, {
nucleoperf = {"ss", "REG"},
nucleopart = {"ss", "REG"},
}},
{"leggere", {"ggere$", "scrivere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere
nucleoperf = {"ss"},
nucleopart = {"tt"},
}},
{"chiedere", {"chiedere$", "rimanere$", "s[cp]ondere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere
nucleoperf = {"s"},
nucleopart = {"st"},
}},
--regulares: vendere, credere, gemere, fremere, premere, temere, ricevere
},
["ire"] = {
{"benedire", {"benedire$", "mal[ea]dire$"}, {
nucleo = "d",
ger = {"dicendo"},
part = {"detto"},
part_pres = {"dicente"},
nucleopres = {"dic-dic-dic"},
nucleoperf = {"diss-dic"},
ind_imp = {{"dicevo"}, {"dicevi"}, {"diceva"}, {"dicevamo"}, {"dicevate"}, {"dicevano"}},
subj_imp = {{"dicessi"}, {"dicessi"}, {"dicesse"}, {"dicessimo"}, {"diceste"}, {"dicessero"}},
}},
{"dire", {"^dire$", "^ridd?ire$"}, {
ger = {"dicendo"},
part = {"detto"},
part_pres = {"dicente"},
nucleopres = {"dic-dic-dic"},
nucleoperf = {"diss-dic"},
ind_imp = {{"dicevo"}, {"dicevi"}, {"diceva"}, {"dicevamo"}, {"dicevate"}, {"dicevano"}},
subj_imp = {{"dicessi"}, {"dicessi"}, {"dicesse"}, {"dicessimo"}, {"diceste"}, {"dicessero"}},
imper = {nil, {"dì", "di'"}},
}},
{"cucire", {"cucire$"}, {
nucleopres = {"cuci"},
}},
{"uscire", {"uscire$"}, {
nucleopres = {"esc-esc"},
}},
{"sdrucire", {"sdrucire$"}, {
nucleopres = {"INCO", "sdruci"},
}},
{"udire", {"^udire$", "riudire$", "traudire$"}, {
nucleo = "ud",
nucleopres = {"od-od"},
nucleofut = {"udr"},
}},
{"salire", {"salire$"}, {
nucleopres = {"salg"},
part_pres = {"saliente", "salente"},
}},
{"seppellire", {"seppellire$"}, {
nucleopres = {"INCO"},
part = {"sepolto", "seppellito"},
}},
{"dormire", {"dormire$"}, {
part_pres = {"dormiente", "dormente"},
}},
{"venire", {"venire$"}, {
nucleopres = {"veng"},
nucleoperf = {"venn"},
part = {"venuto"},
nucleofut = {"verr"},
part_pres = {"veniente"},
}},
{"empire", {"empire$"}, {
perf = {{"empii", "empiei{R}"}, {"empisti", "empiesti{R}"}, {"empì", "empié{R}"}, {"empimmo", "empiemmo{R}"}, {"empiste", "empieste{R}"}, {"empirono", "empierono{R}"}},
part = {"empito", "empiuto{R}"},
ger = {"empiendo"},
part_pres = {"empiente"},
}},
{"adempire", {"mpire$"}, {
nucleo = "mp",
nucleopres = {"INCO"},
ger = {"mpiendo"},
part_pres = {"mpiente"},
}},
{"^sparire", {"^sparire$"}, {
nucleopres = {"INCO"},
nucleoperf = {"sparv", "spari{R}", "spars{R}"},
part = {"sparso"},
}},
{"disparire", {"disparire$"}, {
nucleopres = {"dispai"},
nucleoperf = {"REG", "disparvi"},
}},
{"trasparire", {"trasparire$"}, {
nucleopres = {"traspai", "INCO"},
}},
{"parire", {"parire$"}, {
nucleopres = {"pai", "INCO"},
nucleoperf = {"parv", "REG{R}", "pars{R}"},
part = {"parso"},
}},
{"inferire", {"inferire$"}, {
nucleopres = {"INCO"},
nucleoperf = {"infers"},
part = {"inferto"},
}},
{"profferire", {"profferire$"}, {
nucleopres = {"INCO"},
nucleoperf = {"REG", "proffers"},
part = {"profferto"},
}},
{"offrire", {"offrire$"}, {
nucleoperf = {"REG", "offers{R}"},
part = {"offerto"},
part_pres = {"offerente"},
}},
{"morire", {"morire$"}, {
nucleopres = {"muoi-muor"},
nucleoperf = {"mort"},
nucleofut = {"REG", "morr"},
part_pres = {"morente", "moriente{†}"},
}},
{"aprire", {"aprire$"}, {
nucleoperf = {"REG", "apers"},
part = {"aperto"},
}},
{"coprire", {"coprire$"}, {
nucleoperf = {"REG", "copersi"},
part = {"coperto"},
}},
{"nutrire", {"nutrire$"}, {
nucleopres = {"REG", "INCO{R}"},
part_pres = {"nutriente"},
}},
{"presentire", {"presentire$"}, {
nucleopres = {"REG", "INCO"},
part_pres = {},
}},
{"concepire", {"concepire"}, {
nucleopres = {"INCO"},
part_pres = {"concipiente"},
}},
{"sentire", {"sentire$"}, {
part_pres = {"sentente{R}", "senziente{ADJ}"},
}},
},
["arre"] = {
},
["orre"] = {
},
["urre"] = {
},
}
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo.sufijo_inf
local sufijos_ = conjinfo[forma].sufijos and sufijos[sufijo_inf][conjinfo[forma].sufijos]
or ((forma == "part" and conjinfo.hay_nucleopart) and sufijos[sufijo_inf][forma.."_alt"]
or (forma == "perf" and conjinfo.hay_nucleoperf and sufijos[sufijo_inf][forma.."_alt"]
or (forma == "imper" and conjinfo.hay_nucleopres4 and sufijos[sufijo_inf][forma.."_alt"]
or sufijos[sufijo_inf][forma])))
local nucleos
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "part" then
nucleos = conjinfo.nucleopart
elseif forma == "ger" or forma == "part_pres" then
nucleos = conjinfo.nucleo_inf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleopres1, conjinfo.nucleopres2, conjinfo.nucleopres2, conjinfo.nucleopres3, conjinfo.nucleo_inf, conjinfo.nucleopres1}
elseif forma == "ind_imp" or forma == "subj_imp" then
nucleos = {conjinfo.nucleoimp, conjinfo.nucleoimp, conjinfo.nucleoimp, conjinfo.nucleoimp, conjinfo.nucleoimp, conjinfo.nucleoimp}
elseif forma == "perf" then
nucleos = {conjinfo.nucleoperf1, conjinfo.nucleoperf2, conjinfo.nucleoperf1, conjinfo.nucleoperf2, conjinfo.nucleoperf2, conjinfo.nucleoperf1}
elseif forma == "fut" or forma == "cond" then
nucleos = {conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleopres1, conjinfo.nucleopres1, conjinfo.nucleopres1, conjinfo.nucleopres3, conjinfo.nucleopres3, conjinfo.nucleopres1}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleopres2, conjinfo.nucleopres1, conjinfo.nucleopres3, conjinfo.nucleopres4, conjinfo.nucleopres1}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for j, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
for j, n in ipairs(nucleos) do
local nucleo, marca = match(n, "^(.*)([{%[].-[}%]])$")
if not marca then
nucleo = n
marca = ""
end
local sufijos__ = sufijos_
if nucleo == "REG" then
nucleo = conjinfo.nucleo_inf[1]
sufijos__ = sufijos[sufijo_inf][forma]
end
local k = 1
while sufijos__[k] do
local nexosufijo = combinar_nexo_sufijo(nexo, sufijos__[k], sufijo_inf)
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo))..marca)
k = k + 1
end
end
end
return
end
for i = IO, LORO do
local p = tostr[i]
if conjinfo[forma][i] then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
for j,n in ipairs(nucleos[i]) do
local nucleo, marca = match(n, "^(.*)([{%[].-[}%]])$")
if not marca then
nucleo = n
marca = ""
end
local sufijos__ = sufijos_
if nucleo == "REG" then
nucleo = conjinfo.nucleo_inf[1]
sufijos__ = sufijos[sufijo_inf][forma]
end
local k = i
while sufijos__[k] do
local nexosufijo = combinar_nexo_sufijo(nexo, sufijos__[k], sufijo_inf)
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo))..marca)
k = k + 6
if conjinfo[forma].ei then -- [[ripetere]]
break
end
end
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local auxs = fmtinfo.auxs
local arr = res[forma]
local t = {}
local tiempo, i = match(forma, "^(.*)(%d)$")
if not i then
tiempo = forma
i = 1
end
i = tonumber(i)
local rest_ = i < NOI and resto or resto_pl
local rest_pl_ = resto_pl
if auxiliar["essere"][tiempo] and not auxs[1] then -- si es un tiempo compuesto y no hay participio, no debo mostrarlo
res[forma] = t
return
end
for _, v in ipairs(arr) do
local hs = auxiliar[auxs[1]][tiempo]
local v2
local rest = rest_
local rest_pl = rest_pl_
-- necesidad de duplicar los restos puesto que con essere hay que concordarlo en número al verbo
local v_ = v
local rest2 = rest_
local rest_pl2 = rest_pl_
if hs then
if auxs[1] == "essere" and i >= NOI then
v = gsub(v, "o([~#]?)$", "i%1")
end
rest = " "..v..rest
rest_pl = " "..v..rest_pl
v = auxiliar[auxs[1]][tiempo][i]
if auxs[2] then
if auxs[2] == "essere" and i >= NOI then
v_ = gsub(v_, "o([~#]?)$", "i%1")
end
v2 = auxiliar[auxs[2]][tiempo][i]
rest2 = " "..v_..rest2
rest_pl2 = " "..v_..rest_pl2
end
end
if forma == "inf" or forma == "inf_comp" then
if find(v, "[aei]re$") and pron == "si" then
v = sub(v, 1, -2)
end
insert(t, adv..v..pron..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..v..pron..art..f_links(rest_pl))
end
if v2 then
if find(v2, "[aei]re$") and pron == "si" then
v2 = sub(v2, 1, -2)
end
insert(t, adv..v2..pron..art..f_links(rest2))
if rest_pl ~= rest then
insert(t, adv..v2..pron..art..f_links(rest_pl2))
end
end
elseif forma == "ger" or forma == "ger_comp" then
local vpron = v..pron
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..f(vpron)..art..f_links(rest_pl))
end
if v2 then
vpron = v2..pron
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest2))
if rest_pl ~= rest then
insert(t, adv..f(vpron)..art..f_links(rest_pl2))
end
end
elseif forma == "part" or forma == "part_pres" then
insert(t, adv..f_links(v)..f_links(resto))
if (resto_pl ~= resto) then
insert(t, adv..f_links(v)..f_links(resto_pl))
end
elseif tiempo == "imper" and i ~= LUI and i ~= LORO then
local vpron = v
if pron == "si" then
local enc = REFLEXIVOS[i]
vpron = vpron..enc
end
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
else
local pronart = pron == "si" and REFLEXIVOS[i].." " or ""
pronart = art ~= "" and pronart..art.." " or pronart
insert(t, adv..pronart..f_links(v)..f_links(rest))
if v2 then
insert(t, adv..pronart..f_links(v2)..f_links(rest2))
end
end
end
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {alias_de = "aux"},
["impersonal"] = {por_defecto = ""},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["indirecto"] = {tipo = "bool"},
["nucleopres"] = {lista = true},
["núcleopres"] = {alias_de = "nucleopres"},
["nucleoimp"] = {lista = true},
["núcleoimp"] = {alias_de = "nucleoimp"},
["nucleoperf"] = {lista = true},
["núcleoperf"] = {alias_de = "nucleoperf"},
["nucleopart"] = {lista = true},
["núcleopart"] = {alias_de = "nucleopart"},
["nucleofut"] = {lista = true},
["núcleofut"] = {alias_de = "nucleofut"},
["paradigma"] = {lista = true},
["nota"] = {},
["aux"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
if args["part"][1] == "no" or args["part"][1] == "-" then
args["aux"] = "a" -- para simplificar código, no tendrá efecto en las conjugaciones
end
if (args["aux"] ~= "a" and args["aux"] ~= "e" and args["aux"] ~= "ae" and args["part"][1] ~= "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 = match(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$")
if not v then
v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiou]r)(s?i?)(l?[aeo]?s?)(.-)$")
if v then
v = v.."e"
end
end
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..LETRA.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
local sufijo_inf = match(v, "[aeiou]r?re$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
local es_inco
local es_puro
local auxiliares
for N = 1, math.max(1,
maxindex(args["paradigma"]),
maxindex(args["nucleopres"]),
maxindex(args["nucleoimp"]),
maxindex(args["nucleoperf"]),
maxindex(args["nucleopart"]),
maxindex(args["nucleofut"])) do
local conjinfo = {}
if find(v, "[^cg]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
local rxx = match(v, rx)
if args["paradigma"][N] == p[1] or rxx then
assert(rxx)
conjinfo = deepcopy(p[3])
conjinfo.rxx = rxx
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
local rxx = match(v, rx)
if args["paradigma"][N] == p[1] or rxx then
assert(rxx)
local vacio = true
if not conjinfo.rxx then
conjinfo.rxx = rxx -- no puede sobreescribir la información del paradigma irregular
end
for k, v in pairs(p[3]) do
vacio = false
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
if vacio then
paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]]
end
encontre_reg = true
break
end
end
if encontre_reg then
break
end
end
if find(args["nucleopres"][N] or "", "^INCO") then
paradigmas_reconocidos["partire"] = nil
paradigmas_reconocidos["finire"] = true
end
assert(encontre_reg, "paradigma no reconocido")
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
if not conjinfo.nucleo_inf then
if conjinfo.rxx == conjinfo.sufijo_inf then
conjinfo.nucleo_inf = sub(v, 1, max(len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf), 0)) -- no busco regex porque pueden haberse cambiado
else
conjinfo.nucleo_inf = sub(conjinfo.rxx, 1, max(len(conjinfo.rxx) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf), 0))
end
end
if not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, max(len(v) - len(conjinfo.nucleo_inf) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf), 0))
end
conjinfo.nucleopres = args["nucleopres"][N] and {args["nucleopres"][N]} or conjinfo.nucleopres
conjinfo.nucleoimp = args["nucleoimp"][N] and {args["nucleoimp"][N]} or conjinfo.nucleoimp
conjinfo.nucleoperf = args["nucleoperf"][N] and {args["nucleoperf"][N]} or conjinfo.nucleoperf
conjinfo.nucleopart = args["nucleopart"][N] and {args["nucleopart"][N]} or conjinfo.nucleopart
conjinfo.nucleofut = args["nucleofut"][N] and {args["nucleofut"][N]} or conjinfo.nucleofut
local function parsear_nucleo(nucl_)
if not nucl_ then
return conjinfo.nucleo_inf
end
local nucl, marca = match(nucl_, "^(.*)([{%[].-[}%]])$")
if not marca then
nucl = nucl_
marca = ""
end
if nucl == "s" or nucl == "ss" or nucl == "t" or nucl == "tt" or nucl == "st" or nucl == "bb" then
local w = conjinfo.nucleo_inf
w = gsub(w, "nd$", "#"..nucl.."#")
w = gsub(w, "gg$", "#"..nucl.."#")
w = gsub(w, "sc$", "#"..nucl.."#")
w = gsub(w, "gu?$", "#"..nucl.."#")
w = gsub(w, "ll?$", "l#"..nucl.."#")
w = gsub(w, "ci?$", "#"..nucl.."#")
w = gsub(w, C.."$", "#"..nucl.."#")
return w..marca
end
if nucl == "REG" then
return conjinfo.nucleo_inf..marca
end
if nucl == "INCO" then
return gsub1(conjinfo.nucleo_inf, "i?$", "~isc~")..marca
end
if nucl == conjinfo.nucleo_inf then
return nucl..marca
end
return "#"..nucl.."#"..marca
end
local function insertar_nucleo_por_defecto(arr)
if not arr[1] then
arr[1] = conjinfo.nucleo_inf
end
end
conjinfo.nucleopres1 = {}
conjinfo.nucleopres2 = {}
conjinfo.nucleopres3 = {}
conjinfo.nucleopres4 = {}
if conjinfo.nucleopres then
for i,ns in ipairs(conjinfo.nucleopres) do
local a, b, c, d
a, b, c, d = match(ns, "^(.-)%-(.-)%-(.-)%-(.-)$")
if not d then
a, b, c = match(ns, "^(.-)%-(.-)%-(.-)$")
end
if not c then
a, b = match(ns, "^(.-)%-(.-)$")
end
if not b then
a = ns
end
if d then
conjinfo.hay_nucleopres4 = true
end
if find(a, "^INCO") then
insert_if_not(conjinfo.nucleopres1, parsear_nucleo(a))
insert_if_not(conjinfo.nucleopres2, parsear_nucleo(a))
insert_if_not(conjinfo.nucleopres3, conjinfo.nucleo_inf)
insert_if_not(conjinfo.nucleopres4, conjinfo.nucleo_inf)
es_inco = true
else
insert_if_not(conjinfo.nucleopres1, parsear_nucleo(a))
insert_if_not(conjinfo.nucleopres2, parsear_nucleo(b))
insert_if_not(conjinfo.nucleopres3, parsear_nucleo(c))
insert_if_not(conjinfo.nucleopres4, parsear_nucleo(d))
es_puro = true
end
end
else
insert_if_not(conjinfo.nucleopres1, conjinfo.nucleo_inf)
insert_if_not(conjinfo.nucleopres2, conjinfo.nucleo_inf)
insert_if_not(conjinfo.nucleopres3, conjinfo.nucleo_inf)
insert_if_not(conjinfo.nucleopres4, conjinfo.nucleo_inf)
end
conjinfo.nucleoperf1 = {}
conjinfo.nucleoperf2 = {}
if conjinfo.nucleoperf then
local aux = conjinfo.nucleoperf
for _,ns in ipairs(aux) do
local a, b = match(ns, "^(.-)%-(.-)$")
if b then
insert_if_not(conjinfo.nucleoperf1, parsear_nucleo(a))
insert_if_not(conjinfo.nucleoperf2, parsear_nucleo(b))
else
insert_if_not(conjinfo.nucleoperf1, parsear_nucleo(ns))
insert_if_not(conjinfo.nucleoperf2, conjinfo.nucleo_inf)
end
conjinfo.hay_nucleoperf = true
end
else
insert_if_not(conjinfo.nucleoperf1, conjinfo.nucleo_inf)
insert_if_not(conjinfo.nucleoperf2, conjinfo.nucleo_inf)
end
if conjinfo.nucleoimp then
local aux = conjinfo.nucleoimp
conjinfo.nucleoimp = {}
for _,ns in ipairs(aux) do
insert_if_not(conjinfo.nucleoimp, parsear_nucleo(ns))
end
else
conjinfo.nucleoimp = {conjinfo.nucleo_inf}
end
if conjinfo.nucleopart then
local aux = conjinfo.nucleopart
conjinfo.nucleopart = {}
for _,ns in ipairs(aux) do
insert_if_not(conjinfo.nucleopart, parsear_nucleo(ns))
conjinfo.hay_nucleopart = true
end
else
conjinfo.nucleopart = {conjinfo.nucleo_inf}
end
if conjinfo.nucleofut then
local aux = conjinfo.nucleofut
conjinfo.nucleofut = {}
for _,ns in ipairs(aux) do
insert_if_not(conjinfo.nucleofut, parsear_nucleo(ns))
end
else
conjinfo.nucleofut = {conjinfo.nucleo_inf}
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if (find(e, 'PART') or not find(e, 'ADJ')) and not find(e, "†") then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local part_no_adj_pl = {}
for _,e in ipairs(part_no_adj) do
local partpl = gsub(e, "o([#~]?)$", "i%1")
insert(part_no_adj_pl, partpl)
end
local auxs = {}
if args.aux == "a" then
insert(auxs, "avere")
auxiliares = "avere"
elseif args.aux == "e" then
insert(auxs, "essere")
auxiliares = "essere"
elseif args.aux == "ae" then
insert(auxs, "avere")
insert(auxs, "essere")
auxiliares = "avere/essere"
else
auxiliares = "sin participio"
end
local fmtinfo = {adv=adv, pron=pron, art=art, resto=resto, resto_pl=resto_pl,impers=args["impersonal"], auxs=auxs}
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local es_impersonal = args["impersonal"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, es_impersonal)
end)
local impers = args["impersonal"]
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-1) / 2)
cs2 = cs - 1 - cs1
local t = {}
t[1] = {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true}
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio pasado", header=true, color=COLOR_NP}, resultante.part}
t[5] = {{"Participio presente", header=true, color=COLOR_NP}, resultante.part_pres}
t[6] = {{"Auxiliar", header=true, color=COLOR_NP}, {concat(auxs, ", ")}}
else
resultante.inf.colspan = cs1
resultante.ger.colspan = cs1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
resultante.part.colspan = cs - 1
resultante.part_pres.colspan = cs - 1
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp}
t[4] = {{"Participio pasado", header=true, color=COLOR_NP}, resultante.part}
t[5] = {{"Participio presente", header=true, color=COLOR_NP}, resultante.part_pres}
t[6] = {{"Auxiliar", header=true, color=COLOR_NP}, {concat(auxs, ", "), colspan=cs-1}}
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
t[7] = {{"Formas personales", colspan=cs}, color=COLOR_H, 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}, ic("ind_pres")}
t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")}
t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("perf")}
t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")}
t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("perf_comp")}
t[15] = {{"Futuro", color=COLOR_IND, header=true}, ic("fut")}
t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, ic("fut_comp")}
t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("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}, ic("cond")}
t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("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}, ic("subj_pres")}
t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")}
t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")}
t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")}
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}, ic("imper")}
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, R raro, L literario, G geminado, 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, "IT:Verbos irregulares")
paradigmas_reconocidos["avviare"] = nil
paradigmas_reconocidos["amare"] = nil
paradigmas_reconocidos["temere"] = nil
paradigmas_reconocidos["partire"] = nil
paradigmas_reconocidos["porre"] = nil
paradigmas_reconocidos["condurre"] = nil
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 find(impers, "^u[tm]c3$") then
insert(cats, "IT:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "IT:Verbos terciopersonales")
end
if defectivo then
insert(cats, "IT:Verbos defectivos")
end
local inc_enc
if sufijo_inf == "are" then
insert(cats, "IT:Verbos de la primera conjugación")
elseif sufijo_inf == "ere" then
insert(cats, "IT:Verbos de la segunda conjugación")
elseif sufijo_inf == "ire" then
insert(cats, "IT:Verbos de la tercera conjugación")
if not es_inco and not es_puro then
insert(cats, "IT:Verbos puros")
es_puro = true
inc_enc = "puro"
elseif es_inco and es_puro then
insert(cats, "IT:Verbos incoativos")
insert(cats, "IT:Verbos puros")
inc_enc = "incoativo/puro"
elseif es_inco then
insert(cats, "IT:Verbos incoativos")
inc_enc = "incoativo"
elseif es_puro then
insert(cats, "IT:Verbos puros")
inc_enc = "puro"
end
elseif sufijo_inf == "orre" then
insert(cats, "IT:Verbos de la cuarta conjugación")
elseif sufijo_inf == "urre" then
insert(cats, "IT:Verbos de la quinta conjugación")
end
local q_t = {es_irregular and "irregular" or "regular", auxiliares, inc_enc}
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..concat(q_t, ", ")..")",
t,
ns == 0 and cats or {})
end
return export
tly6daswou7wpg5qu6mzyelqga7dj79
Módulo:flex/pt
828
1055289
6118181
6117317
2026-06-16T02:18:42Z
TMCbot
164594
.
6118181
Scribunto
text/plain
-- 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_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local u = m_str.char
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local len = m_str.len
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_INF = m_flex.COLOR_INF
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local tilde = u(0x301)
local unaccented_vowel = "aeiouàAEIOUÀ"
local accented_vowel = "áéíóúýâêôÁÉÍÓÚÝÂÊÔ"
local maybe_accented_vowel = "ãõÃÕ"
local vowel = unaccented_vowel .. accented_vowel .. maybe_accented_vowel
local cons = "bcdfghjklmnpqrstvwxyzçBCDFGHJKLMNPQRSTVWXYZÇ"
local V = "[" .. vowel .. "]"
local AV = "[" .. accented_vowel .. "]"
local NAV = "[^" .. accented_vowel .. "]"
local C = "[" .. cons .. "]"
local espacios = "%s"
local espacios_o_guiones = "%-‐%s"
local ESPACIO = "["..espacios.."]"
local ESPACIO_O_GUION = "["..espacios_o_guiones.."]"
local LETRA = "[^"..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 remove_accent = {
["á"]="a", ["é"]="e", ["í"]="i", ["ó"]="o", ["ú"]="u", ["ý"]="y", ["â"]="a", ["ê"]="e", ["ô"]="o",
["Á"]="A", ["É"]="E", ["Í"]="I", ["Ó"]="O", ["Ú"]="U", ["Ý"]="Y", ["Â"]="A", ["Ê"]="E", ["Ô"]="O"
}
local function es_locucion(tit, cop)
return find(tit, LETRA..ESPACIO_O_GUION..LETRA) or (cop ~= nil and find(tit, LETRA..ESPACIO_O_GUION..LETRA))
end
local function try(p, nexo, m, pl, f, fpl, g, s)
if s == true then
if pl == "es" then
pl = "s"
end
end
local r, n, suf = match(p, "^(.-)("..nexo..")("..m..")$")
if suf then
if type(n) ~= "string" then
n = ""
end
if type(suf) ~= "string" then
suf = ""
end
if pl and find(pl, "#") then
if g == "mf" and f then
return {m={r.."~"..n..suf.."~"}, p={r..n..pl}, f={r..n..f}, fp={r..n..fpl}}
elseif pl then
return {m={r.."~"..n..suf.."~"}, p={r..n..pl}, f={}, fp={}}
else
return {m={r.."~"..n..suf.."~"}, p={}, f={}, fp={}}
end
else
if g == "mf" and f then
return {m={r.."~"..n..suf.."~"}, p={r.."~"..n..pl.."~"}, f={r.."~"..n..f.."~"}, fp={r.."~"..n..fpl.."~"}}
elseif pl then
return {m={r.."~"..n..suf.."~"}, p={r.."~"..n..pl.."~"}, f={}, fp={}}
else
return {m={r.."~"..n..suf.."~"}, p={}, f={}, fp={}}
end
end
end
return nil
end
local function flexionar_palabra(p, g, forzar_s)
local r, v, s = match(p, "^(.*)("..AV..")(.-n)$")
if s then
local w = remove_accent[v]
if g == "mf" then
if forzar_s then
return {m={r.."~"..v..s.."~"}, p={r.."#"..w..s.."s#"}, f={r.."~"..v..s.."a~"}, fp={r.."~"..v..s.."as~"}}
else
return {m={r.."~"..v..s.."~"}, p={r.."~"..v..s.."es~", r.."~"..w..s.."s~"}, f={r.."~"..v..s.."a~"}, fp={r.."~"..v..s.."as~"}}
end
else
if forzar_s then
return {m={r.."~"..v..s.."~"}, p={r.."#"..w..s.."s#"}, f={}, fp={}}
else
return {m={r.."~"..v..s.."~"}, p={r.."~"..v..s.."es~", r.."~"..w..s.."s~"}, f={}, fp={}}
end
end
end
r, v, s = match(p, "^(.*[aeiou])([íú])(s)$") -- [[país]]
if v then
if g == "mf" then
return {m={r.."~"..v..s.."~"}, p={r.."~"..v.."ses~"}, f={r.."~"..v.."sa~"}, fp={r.."~"..v.."sas~"}}
else
return {m={r.."~"..v..s.."~"}, p={r.."~"..v.."ses~"}, f={}, fp={}}
end
end
r, v, s = match(p, "^(.*)(" .. AV .. ")(s)$") -- final -ês, -ós etc.
if v then
local w = remove_accent[v]
if g == "mf" then
return {m={r.."~"..v..s.."~"}, p={r.."~"..w.."ses~"}, f={r.."~"..w.."sa~"}, fp={r.."~"..w.."sas~"}}
else
return {m={r.."~"..v..s.."~"}, p={r.."~"..w.."ses~"}, f={}, fp={}}
end
end
local changed = try(p, "", "ão", forzar_s and "#ãos#" or "ões", forzar_s and "#ã#" or "ona", forzar_s and "#ãs#" or "onas", g, s)
or try(p, AV .. ".*", "[ei]l", "eis", nil, nil, g, s) -- final unstressed -el or -il: inábil, imcerivel
or try(p, "", "el", "éis", nil, nil, g, s) -- final stressed -el: cartel
or try(p, "", "il", "is", nil, nil, g, s) -- final stressed -il: hostil
or try(p, AV .. ".*", "ol", "ois", nil, nil, g, s) -- final unstressed -ol
or try(p, "", "ol", "óis", "ola", "olas", g, s) -- final stressed -ol: espanhol (otras como mongol son comunes en género)
or try(p, V, "l", "is", nil, nil, g, s) -- any other vowel + -l: escencial, baul, etc. sin femenino
or try(p, "", "m", "ns", nil, nil, g, s) -- final -m: jovem, asumo que es invariante aunque para bom sería boa?
or try(p, "or", "", forzar_s and "#s#" or "es", "a", "as", g, s) -- -or con femenino (tutor)
or try(p, "[rz]", "", forzar_s and "#s#" or "es", nil, nil, g, s) -- final -r or -z
or try(p, "", "eu", "eus", "eia", "eias", g, s)
or try(p, "", "u", "us", "ua", "uas", g, s)
or try(p, "", "o", "os", "a", "as", g, s)
or try(p, V, "", "s", nil, nil, g, s) -- final vowel
or try(p, AV .. ".*", "[ui]s", nil, nil, nil, g, s) -- final unstressed -us or -is
or try(p, C, "[ui]s", "es", "a", "as", g, s) -- final stressed -us or -is after consonant
or try(p, "", "[ui]s", nil, nil, nil, g, s) -- final stressed -us or -is after vowel
or try(p, "[sx]", "", nil, nil, nil, g, s)
or try(p, "ch", "", forzar_s and "#s#" or "es", nil, nil, g, s) -- extranjerismos
or try(p, "n", "", forzar_s and "#s#" or "es", "a", "as", g, s)
or try(p, C, "", "s", nil, nil, g, s) -- extranjerismos
assert(changed, "No se pudo determinar la flexión de la palabra")
return changed
end
local function flexion_sust_adj(palabras, g, forzar_s, copulativa)
local a, separador, b
if copulativa == true or copulativa == false then
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO_O_GUION..")("..LETRA.."+)$")
else
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
end
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, forzar_s)
local flex2 = copulativa and flexionar_palabra(b, g, forzar_s) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto
if copulativa == false then
p, resto = match(palabras, "^(%-?[^"..espacios_o_guiones.."]+)(.-)$")
else
p, resto = match(palabras, "^("..LETRA.."+)(.-)$")
end
local flex = flexionar_palabra(p, g, forzar_s)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
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_ = flexion_sust_adj(title, modo, args["s"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." regulares")
elseif es_locucion(title, args["cop"]) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["n"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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(frame, title, ns, args, es_locucion(title, args["cop"]) and "PT:Locuciones sustantivas" or "PT:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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(frame, title, ns, args, es_locucion(title, args["cop"]) and "PT:Locuciones adjetivas" or "PT:Adjetivos")
end
local EU, TU, ELE, NOS, VOS, ELES = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"eu", "tu", "ele, ela, você", "nós", "vós", "vocês, eles, elas"}
local PRONOMBRES_INF = {"por eu", "por tu", "por ele, por ela, por você", "por nós", "por vós", "por vocês, por eles, por elas"}
local PRONOMBRES_SUBJ = {"que eu", "que tu", "que ele, que ela, que você", "que nós", "que vós", "que vocês, que eles, que elas"}
local PRONOMBRES_IMP = {"―", "(tu)", "(você)", "(nós)", "(vós)", "(vocês)"}
local IMPERSONALES_INF = {"", "", "(por isso)", "", "", "(por issos)"}
local IMPERSONALES = {"", "", "(isso)", "", "", "(issos)"}
local IMPERSONALES_SUBJ = {"", "", "(que isso)", "", "", "(que issos)"}
local REFLEXIVOS = {"me", "te", "se", "nos", "vos", "se"}
local formas_no_personales = {
["inf"] = true,
["ger"] = true,
["part"] = true,
}
local formas_personales = {
["inf_pers"] = true,
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["ind_pluperf"] = true,
["ind_fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["subj_fut"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["inf_pers_comp"] = true,
["ind_perf_comp"] = true,
["ind_pluperf_comp"] = true,
["ind_anter"] = true,
["ind_fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
["subj_fut_comp"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local antepuesto = {
["subj_pres"] = true,
["subj_imp"] = true,
["subj_fut"] = true,
["subj_perf"] = true,
["subj_imp_comp"] = true,
["subj_fut_comp"] = true,
}
local interpuesto = {
["ind_fut"] = true,
["ind_fut_comp"] = true,
["cond"] = true,
["cond_comp"] = true
}
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^inf_pers") then
return IMPERSONALES_INF[p]
end
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^inf_pers") then
return PRONOMBRES_INF[p]
elseif find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local sufijos = {
{ -- ar
["ger"] = {"ando"},
["part"] = {"ado"},
["inf_pers"] = {"ar", "ares", "ar", "armos", "ardes", "arem"},
["ind_pres"] = {"o", "as", "a", "amos", "ais", "am"},
["ind_imp"] = {"ava", "avas", "ava", "ávamos", "áveis", "avam"},
["ind_perf"] = {"ei", "aste", "ou", "amos{BR}", "astes", "aram",
nil, nil, nil, "ámos{PT}", nil, nil},
["ind_perf_alt"] = {"ei", "aste", "ou", "amos{BR}", "astes", "aram",
nil, nil, nil, "ámos{PT}", nil, nil},
["ind_pluperf"] = {"ara", "aras", "ara", "áramos", "áreis", "aram"},
["ind_fut"] = {"arei", "arás", "ará", "aremos", "areis", "arão"},
["subj_pres"] = {"e", "es", "e", "emos", "eis", "em"},
["subj_imp"] = {"asse", "asses", "asse", "ássemos", "ásseis", "assem"},
["subj_fut"] = {"ar", "ares", "ar", "armos", "ardes", "arem"},
["cond"] = {"aria", "arias", "aria", "aríamos", "aríeis", "ariam"},
["imper"] = {"-", "a", "e", "emos", "ai", "em"}
},
{ -- er
["ger"] = {"endo"},
["part"] = {"ido"},
["inf_pers"] = {"er", "eres", "er", "ermos", "erdes", "erem"},
["ind_pres"] = {"o", "es", "e", "emos", "eis", "em"},
["ind_imp"] = {"ia", "ias", "ia", "íamos", "íeis", "iam"},
["ind_perf"] = {"i", "este", "eu", "emos", "estes", "eram"},
["ind_perf_alt"] = {"e", "este", "e", "emos", "estes", "eram"},
["ind_pluperf"] = {"era", "eras", "era", "êramos", "êreis", "eram"},
["ind_fut"] = {"erei", "erás", "erá", "eremos", "ereis", "erão"},
["subj_pres"] = {"a", "as", "a", "amos", "ais", "am"},
["subj_imp"] = {"esse", "esses", "esse", "êssemos", "êsseis", "essem"},
["subj_fut"] = {"er", "eres", "er", "ermos", "erdes", "erem"},
["cond"] = {"eria", "erias", "eria", "eríamos", "eríeis", "eriam"},
["imper"] = {"-", "e", "a", "amos", "ei", "am"}
},
{ -- ir
["ger"] = {"indo"},
["part"] = {"ido"},
["inf_pers"] = {"ir", "ires", "ir", "irmos", "irdes", "irem"},
["ind_pres"] = {"o", "es", "e", "imos", "is", "em"},
["ind_imp"] = {"ia", "ias", "ia", "íamos", "íeis", "iam"},
["ind_perf"] = {"i", "iste", "iu", "imos", "istes", "iram"},
["ind_perf_alt"] = {"e", "este", "e", "emos", "estes", "eram"},
["ind_pluperf"] = {"ira", "iras", "ira", "íramos", "íreis", "iram"},
["ind_fut"] = {"irei", "irás", "irá", "iremos", "ireis", "irão"},
["subj_pres"] = {"a", "as", "a", "amos", "ais", "am"},
["subj_imp"] = {"isse", "isses", "isse", "íssemos", "ísseis", "issem"},
["subj_fut"] = {"ir", "ires", "ir", "irmos", "irdes", "irem"},
["cond"] = {"iria", "irias", "iria", "iríamos", "iríeis", "iriam"},
["imper"] = {"-", "e", "a", "amos", "i", "am"}
},
{ -- or
["ger"] = {"ondo"},
["part"] = {"osto"},
["inf_pers"] = {"or", "ores", "or", "ormos", "ordes", "orem"},
["ind_pres"] = {"onho", "ões", "õe", "omos", "ondes", "õem"},
["ind_imp"] = {"unha", "unhas", "unha", "únhamos", "únheis", "unham"},
["ind_perf"] = {"us", "useste", "ôs", "usemos", "usestes", "useram"},
["ind_perf_alt"] = {"e", "este", "e", "emos", "estes", "eram"},
["ind_pluperf"] = {"usera", "useras", "usera", "uséramos", "uséreis", "useram"},
["ind_fut"] = {"orei", "orás", "orá", "oremos", "oreis", "orão"},
["subj_pres"] = {"onha", "onhas", "onha", "onhamos", "onhais", "onham"},
["subj_imp"] = {"usesse", "usesses", "usesse", "uséssemos", "usésseis", "usessem"},
["subj_fut"] = {"user", "useres", "user", "usermos", "userdes", "userem"},
["cond"] = {"oria", "orias", "oria", "oríamos", "oríeis", "oriam"},
["imper"] = {"-", "õe", "onha", "onhamos", "onde", "onham"}
},
}
local auxiliar = {
["inf_comp"] = {"ter"},
["ger_comp"] = {"tendo"},
["inf_pers_comp"] = {"ter", "teres", "ter", "termos", "terdes", "terem"},
["ind_perf_comp"] = {"tenho", "tens", "tem", "temos", "tendes", "têm"},
["ind_pluperf_comp"] = {"tinha", "tinhas", "tinha", "tínhamos", "tínheis", "tinham"},
["ind_anter"] = {"tive", "tiveste", "teve", "tivemos", "tivestes", "tiveram"},
["ind_fut_comp"] = {"terei", "terás", "terá", "teremos", "tereis", "terão"},
["cond_comp"] = {"teria", "terias", "teria", "teríamos", "teríeis", "teriam"},
["subj_perf"] = {"tenha", "tenhas", "tenha", "tenhamos", "tenhais", "tenham"},
["subj_pluperf"] = {"tivesse", "tivesses", "tivesse", "tivéssemos", "tivésseis", "tivessem"},
["subj_fut_comp"] = {"tiver", "tiveres", "tiver", "tivermos", "tiverdes", "tiverem"}
}
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]
elseif sufijo_inf == "ir" then
return sufijos[3][forma]
else
return sufijos[4][forma]
end
end
local paradigmas_regulares = {
["ar"] = {
{"complicar", {"car$"}, {
nexo = "c"
}},
{"frear", {"ear$"}, {
nexo = "e"
}},
{"chegar", {"gar$"}, {
nexo = "g"
}},
{"começar", {"çar$"}, {
nexo = "ç"
}},
{"amar", {"ar$"}, {
}},
},
["er"] = {
{"erguer", {"guer$"}, {
nexo = "gu"
}},
{"parecer", {"cer$"}, {
nexo = "c"
}},
{"proteger", {"ger$"}, {
nexo = "g"
}},
{"roer", {"oer$"}, {
nexo = "o"
}},
{"temer", {"er$"}, {
}},
},
["ir"] = {
{"argüir", {"güir$"}, {
nexo = "gü",
}},
{"delinqüir", {"qüir$"}, {
nexo = "qü",
}},
{"extorquir", {"quir$"}, {
nexo = "qu"
}},
{"distinguir", {"guir$"}, {
nexo = "gu"
}},
{"produzir", {"uzir$"}, {
nexo = "z",
}},
{"ressarcir", {"cir$"}, {
nexo = "c"
}},
{"dirigir", {"gir$"}, {
nexo = "g"
}},
{"fluir", {"uir$"}, {
nexo = "u"
}},
{"partir", {"ir$"}, {
}},
},
["or"] = {
{"pôr", {"or$"}, {
}},
},
["ôr"] = {
{"pôr", {"ôr$"}, {
}}
}
}
local paradigmas_irregulares = {
["ar"] = {
{"dar", {"^dar$", "^redar$", "desdar$"}, { -- no pueden ir otros verbos como "andar o quedar"
nucleo = "d",
ind_pres = {{"dou"}, {"dás"}, {"dá"}, nil, nil, {"dão"}},
ind_perf = {sufijo_inf = "er", {"dei"}},
ind_pluperf = {sufijo_inf = "er"},
subj_pres = {{"dê"}, {"dês"}, {"dê"}, nil, nil, {"deem"}},
subj_imp = {sufijo_inf = "er"},
subj_fut = {sufijo_inf = "er"},
imper = {nil, {"dá"}, {"dê"}, nil, nil, {"deem"}}
}},
{"estar", {"^estar$", "^tar$"}, {
nucleo = "t",
ind_pres = {{"tou"}, {"tás"}, {"tá"}, nil, nil, {"tão"}},
ind_perf = {nucleo = "tiv", sufijo_inf = "er"},
ind_pluperf = {nucleo = "tiv", sufijo_inf = "er"},
subj_pres = {nucleo = "tej", sufijo_inf = "er"},
subj_imp = {nucleo = "tiv", sufijo_inf = "er"},
subj_fut = {nucleo = "tiv", sufijo_inf = "er"},
imper = {nil, {"tá"}, {"teja"}, {"tejamos"}, nil, {"tejam"}}
}},
{"ansiar", {"ansiar$"}, {
alt = {"ei-ei"},
}},
{"fraguar", {V.."guar$"}, {
nexo = "u", -- evitar que acentúe en la "u"
alt = {"´-´"},
}},
{"descafeinar", {"descafeinar$"}, {
alt = {"í-í"},
}},
{"saudar", {"saudar$"}, {
alt = {"ú-ú"},
}},
},
["er"] = {
{"caber", {"^caber$"}, {
nucleo = "cab",
nucleos1 = {"caib"},
ind_perf = {nucleo = "coub"},
ind_pluperf = {nucleo = "coub"},
subj_imp = {nucleo = "coub"},
subj_fut = {nucleo = "coub"},
}},
{"dizer", {"dizer$"}, {
nucleo = "diz",
nucleos1 = {"dig"},
part = {"dito"},
ind_pres = {nil, nil, {"diz"}},
ind_perf = {nucleo = "diss"},
ind_pluperf = {nucleo = "diss"},
subj_imp = {nucleo = "diss"},
subj_fut = {nucleo = "diss"},
ind_fut = {nucleo = "di", nexo="#r#"},
cond = {nucleo = "di", nexo="#r#"},
imper = {nil, {"diz", "dize"}}
}},
{"fazer", {"fazer$"}, {
nucleo = "faz",
nucleos1 = {"faç"},
part = {"feito"},
ind_pres = {nil, nil, {"faz"}},
ind_perf = {nucleo = "fiz", nil, nil, {"fez"}},
ind_pluperf = {nucleo = "fiz"},
subj_imp = {nucleo = "fiz"},
subj_fut = {nucleo = "fiz"},
ind_fut = {nucleo = "fa", nexo = "#r#"},
cond = {nucleo = "fa", nexo = "#r#"},
imper = {nil, {"faz", "faze"}},
}},
{"haver", {"^haver$", "^reaver$"}, {
nucleo = "av",
ind_pres = {{"ei"}, {"ás"}, {"á"}, nil, nil, {"ão"}},
ind_perf = {nucleo = "ouv"},
ind_pluperf = {nucleo = "ouv"},
subj_pres = {nucleo = "aj"},
subj_imp = {nucleo = "ouv"},
subj_fut = {nucleo = "ouv"},
imper = {nil, {"á{†}"}, {"aja{†}"}, {"ajamos{†}"}, {"avei{†}"}, {"ajam{†}"}},
}},
{"prazer", {"prazer$"}, {
nucleo = "praz",
ind_pres = {nil, nil, {"praz"}},
ind_perf = {nucleo = "prouv"},
ind_pluperf = {nucleo = "prouv"},
subj_imp = {nucleo = "prouv"},
subj_fut = {nucleo = "prouv"},
imper = {nil, {"praz", "praze"}}
}},
{"poder", {"poder$"}, {
nucleo = "pod",
nucleos1 = {"poss"},
ind_perf = {nucleo = "pud", nil, nil, {"pôde"}},
ind_pluperf = {nucleo = "pud"},
subj_imp = {nucleo = "pud"},
subj_fut = {nucleo = "pud"},
}},
{"querer", {"querer$"}, {
nucleo = "quer", -- no uso nucleos1 para que no sobreescriba ind_pres
ind_pres = {nil, nil, {"quer"}},
ind_perf = {nucleo = "quis", {"quis"}, nil, {"quis"}},
ind_pluperf = {nucleo = "quis"},
subj_pres = {nucleo = "queir"},
subj_imp = {nucleo = "quis"},
subj_fut = {nucleo = "quis"},
imper = {nil, {"quer"}, {"queira"}, {"queiramos"}, nil, {"queiram"}}
}},
{"rer", {"^rer$"}, { -- según infopédia
nucleos1 = {"rei"},
ind_pres = {nil, {"rês"}, {"rê"}, nil, {"redes"}, {"rêem"}},
imper = {nil, {"rê"}, nil, nil, {"rede"}}
}},
-- según infopédia, raer es regular y defectivo en las formas rizotónicas
{"romper", {"^romper$", "^arromper$"}, { -- no corromper, derromper, entrerromper
nucleo = "romp",
part = {"roto", "rompido"}
}},
{"saber", {"saber$"}, {
nucleo = "sab",
nucleos1 = {"saib"},
ind_pres = {{"sei"}},
ind_perf = {nucleo = "soub"},
ind_pluperf = {nucleo = "soub"},
subj_imp = {nucleo = "soub"},
subj_fut = {nucleo = "soub"},
}},
{"ser", {"^ser$"}, {
nucleos1 = {"sej"},
ind_pres = {{"sou"}, {"és"}, {"é"}, {"somos"}, {"sois"}, {"são"}},
ind_imp = {{"era"}, {"eras"}, {"era"}, {"éramos"}, {"éreis"}, {"eram"}},
ind_perf = {{"fui"}, {"foste"}, {"foi"}, {"fomos"}, {"fostes"}, {"foram"}},
ind_pluperf = {{"fora"}, {"foras"}, {"fora"}, {"fôramos"}, {"fôreis"}, {"foram"}},
subj_imp = {{"fosse"}, {"fosses"}, {"fosse"}, {"fôssemos"}, {"fôsseis"}, {"fossem"}}, -- no puedo poner "u" porque obtendría "fuyera"
subj_fut = {{"for"}, {"fores"}, {"for"}, {"formos"}, {"fordes"}, {"forem"}},
imper = {nil, {"sê"}, nil, nil, {"sede"}}
}},
{"ter", {"^ter$", "suster$", "manter$", "^ater$", "abster$", "obter$", "^reter$", "deter$", "conter$"}, {
nucleo = "t",
nucleos1 = {"tenh"},
ind_pres = {nil, {"tens"}, {"tem"}, nil, {"tendes"}, {"têm"}},
ind_imp = {nucleo = "tinh"},
ind_perf = {nucleo = "tiv"},
ind_pluperf = {nucleo = "tiv"},
subj_imp = {nucleo = "tiv"},
subj_fut = {nucleo = "tiv"},
imper = {nil, {"tem"}, nil, nil, {"tende"}}
}},
{"trazer", {"trazer$"}, {
nucleo = "traz",
nucleos1 = {"trag"},
ind_pres = {nil, nil, {"traz"}},
ind_perf = {nucleo = "troux"},
ind_pluperf = {nucleo = "troux"},
subj_imp = {nucleo = "troux"},
subj_fut = {nucleo = "troux"},
ind_fut = {nucleo = "tra", nexo = "#r#"},
cond = {nucleo = "tra", nexo = "#r#"},
imper = {nil, {"traz"}}
}},
{"ver", {"^ver$", "antever$", "entrever$", "prever$", "^rever$", "prover$"}, {
nucleo = "v",
nucleos1 = {"vej"},
part = {"visto"},
ind_pres = {nil, {"vês"}, {"vê"}, nil, {"vedes"}, {"veem"}},
ind_perf = {sufijo_inf = "ir"},
ind_pluperf = {sufijo_inf = "ir"},
subj_imp = {sufijo_inf = "ir"},
subj_fut = {sufijo_inf = "ir"},
imper = {nil, {"vê"}, nil, nil, {"vede"}}
}},
{"jazer", {"jazer$"}, {
nucleo = "jaz",
ind_pres = {nil, nil, "jaz"}
}},
{"ler", {"^ler$", "^reler$", "crer$"}, {
nucleo = "",
nucleos1 = {"ei"},
ind_pres = {nil, nil, {"ê"}, nil, {"edes"}, {"eem"}},
imper = {nil, {"ê"}, nil, nil, {"ede"}, nil}
}},
{"escrever", {"screver$"}, {
nucleo = "screv",
part = {"scrito"}
}},
{"morrer", {"morrer$"}, {
nucleo = "morr",
part = {"morrido", "morto"},
}},
{"valer", {"valer$"}, {
alt = {"h"},
}},
},
["ir"] = {
{"abrir", {"[^js]abrir$", "^abrir$"}, { -- abrir, cubrir y derivados, pero no "desabrir" ni "jabrir" (son regs.)
nucleo = "abr",
part = {"aberto"}
}},
{"cobrir", {"obrir$"}, { -- 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 = "obr",
part = {"oberto"},
alt = {"u"},
}},
{"rir", {"^rir$", "sorrir$"}, {
nucleo = "r",
nucleos1 = {"ri"},
nucleos2 = {"ri"},
nucleos3 = {"ri"},
ind_pres = {nil, {"ris"}, {"ri"}, nil, {"rides"}},
imper = {nil, {"ri"}, nil, nil, {"ride"}, nil}
}},
{"imprimir", {"imprimir$"}, {
nucleo = "imprim",
part = {"imprimido", "impresso"}
}},
{"ir", {"^ir$"}, {
ind_pres = {{"vou"}, {"vais"}, {"vai"}, {"vamos"}, {"ides"}, {"vão"}},
ind_perf = {{"fui"}, {"foste"}, {"foi"}, {"fomos"}, {"fostes"}, {"foram"}},
ind_pluperf = {nexo = "#fo#", nil, nil, nil, {"fôramos"}, {"fôreis"}},
subj_pres = {{"vá"}, {"vás"}, {"vá"}, {"vamos"}, {"vades"}, {"vão"}},
subj_imp = {nexo = "#fo#", nil, nil, nil, {"fôssemos"}, {"fôsseis"}}, -- no puedo poner "u" porque obtendría "fuyera"
subj_fut = {nexo = "#fo#"},
imper = {nil, {"vai"}, {"vá"}, {"vamos"}, {"ide"}, {"vão"}}
}},
{"vir", {"^vir$", "^avir$", "advir$", "convir$", "contravir$", "devir$", "^desavir$", "entrevir$", "intervir$", "obvir$", "provir$", "^revir$", "sobrevir$"}, {
nucleo = "v",
nucleos1 = {"venh"},
ind_pres = {nil, {"vens"}, {"vem"}, nil, {"vindes"}, {"vêm"}},
ind_imp = {{"vinha"}, {"vinhas"}, {"vinha"}, {"vínhamos"}, {"vínheis"}, {"vinham"}},
ind_perf = {{"vim"}, {"vieste"}, {"veio"}, {"viemos"}, {"viestes"}, {"vieram"}},
ind_pluperf = {{"viera"}, {"vieras"}, {"viera"}, {"viéramos"}, {"viéreis"}, {"vieram"}},
subj_imp = {{"viesse"}, {"viesses"}, {"viesse"}, {"viéssemos"}, {"viésseis"}, {"viessem"}},
subj_fut = {{"vier"}, {"vieres"}, {"vier"}, {"viermos"}, {"vierdes"}, {"vierem"}},
imper = {nil, {"vem"}, nil, nil, {"vinde"}, nil}
}},
{"frigir", {"frigir$"}, {
nucleo = "fri",
part = {"frigido", "frito"},
alt = {"-e"},
}},
{"construir", {"construir$", "destruir$"}, {
nucleo = "tr",
ind_pres = {nil, {"tróis"}, {"trói"}, nil, nil, {"troem"}},
imper = {nil, {"trói"}},
}},
{"cair", {"air$"}, {
nucleo = "a",
alt = {"ai"},
ind_pres = {nil, {"ais"}, {"ai"}},
imper = {nil, {"ai"}},
}},
{"parir", {"parir$"}, {
alt = {"ai"},
}},
{"sentir", {"sentir$"}, {
alt = {"i"},
}},
{"agredir", {"gredir$"}, {
alt = {"i-i-i"}
}},
{"proibir", {"proibir$"}, {
alt = {"í-í"}
}},
{"reunir", {"reunir$"}, {
alt = {"ú-ú"}
}},
{"dormir", {"dormir$"}, {
alt = {"u"},
}},
{"polir", {"polir$"}, {
alt = {"u-u-u"},
}},
{"fugir", {"fugir$"}, { --fugir, bulir
alt = {"-o"},
}},
{"ouvir", {"ouvir$", "edir$"}, {
alt = {"ç"},
}},
{"arguir", {"arguir$"}, {
nexo = "GU",
}},
{"delinquir", {"delinquir$"}, {
nexo = "QU",
}},
},
["or"] = {
},
["ôr"] = {
}
}
local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf, forma)
if not nexo then
return sufijo
end
if sufijo_inf == "ar" then
if find(sufijo, "^[aeo][ms]?$") then
if nexo == "e" then
return "~ei~"..sufijo
end
end
if find(sufijo, "^[eiéí]") then
if nexo == "c" then
return "~qu~"..sufijo
end
if nexo == "g" then
return "g~u~"..sufijo
end
if nexo == "ç" then
return "~c~"..sufijo
end
end
else -- -er/-ir/-or
if sufijo == "e" and forma == "ind_pres" then
if nexo == "z" then
return "~z~"
end
end
if sufijo == "e" and forma == "imper" then
if nexo == "z" then
return "~z~", nexo..sufijo
end
end
if find(sufijo, "^er") then -- [[dizer]]
if nexo == "#r#" then
return nexo..sub(sufijo, 3)
end
end
if find(sufijo, "^[aouáóú]") then
if nexo == "c" then
return "~ç~"..sufijo
end
if nexo == "g" then
return "~j~"..sufijo
end
if nexo == "gu" then
return "~g~"..sufijo
end
if nexo == "gü" then
return "g~u~"..sufijo
end
if nexo == "qu" then
return "~c~"..sufijo
end
if nexo == "qü" then
return "q~u~"..sufijo
end
if nexo == "GU" then
return "#gu#"..sufijo
end
if nexo == "QU" then
return "#qu#"..sufijo
end
end
if find(sufijo, "^es?$") then
if nexo == "o" then
return "~ói~"..sub(sufijo, 2)
end
if nexo == "u" then
return nexo.."~i~"..sub(sufijo, 2)
end
if nexo == "gü" then -- arguir
return nexo.."~i~"..sub(sufijo, 2)
end
if nexo == "GU" then -- arguir
return "gu~i~"..sub(sufijo, 2)
end
end
if find(sufijo, "^is?$") then
if nexo == "gü" then -- arguir
return nexo.."~í~"..sub(sufijo, 2)
end
if nexo == "GU" then -- arguir
return "gu~í~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i") then
if nexo == "o" then
return "o~í~"..sub(sufijo, 2)
end
if nexo == "#fo#" then
return nexo..sub(sufijo, 2)
end
end
if (forma ~= "ind_fut" and forma ~= "cond") and find(sufijo, "^ir[ae]") or find(sufijo, "^i[^ru]") or find(sufijo, "^i$") then
if nexo == "u" then
return nexo.."~í~"..sub(sufijo, 2)
end
end
end
if nexo == "GU" then
return "gu"..sufijo
end
if nexo == "QU" then
return "qu"..sufijo
end
return nexo..sufijo
end
local function combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma)
local nucleo_ = gsub(nucleo, "[~#]", "")
local nexosufijo_ = gsub(nexosufijo, "[~#]", "")
if find(nucleo_, "i$") and find(nexosufijo_, "^i") then -- se juntan dos íes o y-i (ej. reír, freír, oír)
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1")
elseif forma ~= "ind_fut" and forma ~= "cond" and find(nucleo_, "^[^áéíóú]-[aeiou]h?$") and (find(nexosufijo_, "^h?[iu]"..C.."?[st]?[aeo]i?[mns]?$") or find(nexosufijo_, "^h?[iu]s?$")) then -- sufijo con i/u tónica (caISTE, caIMOS, caIDO, oID, reHÚyo etc.)
return nucleo..gsub1(nexosufijo, "^([~#]?h?)([iu])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif ((find(nucleo, "[iu]"..C.."#$") or find(nucleo, "[iu]ss#$")) and find(nexosufijo, "^ê")) or nucleo == "d" then -- pretéritos fuertes, estar, caber
return nucleo..gsub1(nexosufijo, "^([~#]?)ê", "%1é")
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
return prefijo..nucleonexosufijo
end
local alt_info = {
["ar"] = {
["ei-ei"] = {"ansiar", "[i]", "ei", "ei"},
["´-´"] = {"fraguar", "[aeiou]", "%2"..tilde, "%2"..tilde},
["í-í"] = {"descafeinar", "[i]", "í", "í"},
["ú-ú"] = {"saudar", "[u]", "ú", "ú"},
},
["er"] = {
["h"] = {"valer", "", "h"},
},
["ir"] = {
["-e"] = {"frigir", "[i]", nil, "e"},
["-o"] = {"fugir", "[u]", nil, "o"},
["ai"] = {"parir", "[a]", "ai"},
["i"] = {"sentir", "[e]", "i"},
["u"] = {"dormir", "[o]", "u"},
["ç"] = {"ouvir", ".", "ç"},
["í-í"] = {"proibir", "[i]", "í", "í"},
["ú-ú"] = {"reunir", "[u]", "ú", "ú"},
["u-u-u"] = {"polir", "[o]", "u", "u", "u"},
--["i-i"] = {"agredir", "[e]", "i", "i"},
["i-i-i"] = {"agredir", "[e]", "i", "i", "i"},
}
}
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo[forma].sufijo_inf or conjinfo.sufijo_inf
local sufijos_ = obtener_sufijos(sufijo_inf, (forma == "ind_perf" and conjinfo[forma].nucleo) and forma.."_alt" or forma)
local nucleos
if not conjinfo[forma].nucleo then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleo_inf
elseif forma == "part" then
nucleos = conjinfo.nucleo_inf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos3, conjinfo.nucleos3, conjinfo.nucleos1}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleos2, conjinfo.nucleos1, conjinfo.nucleos3, conjinfo.nucleo_inf, conjinfo.nucleos1}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n}
end
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for _, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[1], sufijo_inf, forma)
for _,nucleo in ipairs(nucleos) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma)))
end
end
return
end
for i = EU, ELES do
local p = tostr[i]
if conjinfo[forma][i] then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local k = i
while sufijos_[k] do
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, (conjinfo.v == "pôr" and sufijos_[k] == "or") and "ôr" or sufijos_[k], sufijo_inf, forma)
for _, n in ipairs(nucleos[i]) do
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo, forma)))
if nexosufijo2 then
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo2, forma)))
end
end
k = k + 6
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local art2 = fmtinfo.art2
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local arr = res[forma]
local t = {}
local es_no_personal = formas_no_personales[forma]
local tiempo, i = match(forma, "^(.*)(%d)$")
local j
if not i then
tiempo = forma
i = 1
j = 3
else
j = tonumber(i)
end
i = tonumber(i)
local rest_ = i < NOS and resto or resto_pl
local rest_pl_ = resto_pl
for _, v in ipairs(arr) do
local rest = rest_
local rest_pl = rest_pl_
if auxiliar[tiempo] then
rest = " "..v..rest
v = auxiliar[tiempo][i]
end
if antepuesto[tiempo] then
local pronart = pron == "se" and REFLEXIVOS[j].." " or ""
pronart = (art and art ~= "") and pronart..art2.." " or pronart
insert(t, adv..pronart..f_links(v)..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..f_links(v)..f_links(rest_pl))
end
elseif interpuesto[tiempo] then
local pronart = pron == "se" and "-"..REFLEXIVOS[j].."-" or ""
pronart = (art and art ~= "") and pronart..art.."-" or pronart
if pronart and pronart ~= "" then
v = gsub(v, "^(.*r)(.-)$", function(u, v) return u..pronart..v end)
end
insert(t, adv..f_links(v)..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..f_links(v)..f_links(rest_pl))
end
else -- pospuesto
local pronart = pron == "se" and "-"..REFLEXIVOS[j] or ""
if pronart ~= "" or (art and art ~= "") then
local subs
if (art2 and art2 ~= "") and pron ~= "se" then -- artículo, sin pronombre
v, subs = gsubb(v, "^(.*)[srz]$", "%1")
else
v, subs = gsubb(v, "mos$", "mo")
end
if subs then
pronart = pronart..((art2 and art2 ~= "") and "-"..art2 or "")
else
pronart = pronart..((art and art ~= "") and "-"..art or "")
end
v = v..pronart
end
if forma == "inf" or forma == "inf_pers" then
insert(t, adv..v..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..v..f_links(rest_pl))
end
else
insert(t, adv..f_links(v)..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..f_links(v)..f_links(rest_pl))
end
end
end
end
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["impersonal"] = {},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["alt"] = {lista = true},
["nucleopres1"] = {lista = true},
["nucleopres3"] = {lista = true},
["nucleosubj4"] = {lista = true},
["núcleopres1"] = {alias_de = "nucleopres1"},
["núcleopres3"] = {alias_de = "nucleopres3"},
["núcleosubj4"] = {alias_de = "nucleosubj4"},
["paradigma"] = {lista = true},
["nota"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local adv, r1 = match(tit, "^([sSnN][iã]o?"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeioô]r)%-?(s?e?)%-?(l?[aeo]?s?)(.-)$")
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[iã]?o?"..ESPACIO.."?"..LETRA.."*[aeioô]r%-?s?e?%-?l?[aeo]?s?(.-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
local art2 = ""
if art ~= "" then
assert(find(art, "^l"), "el artículo debe comenzar por l")
art2 = gsub(art, "^l", "")
end
local sufijo_inf = match(v, "[aeioô]r$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
for N = 1, math.max(1,
maxindex(args["paradigma"]),
maxindex(args["alt"]),
maxindex(args["nucleopres1"]),
maxindex(args["nucleopres3"]),
maxindex(args["nucleosubj4"])) do
local conjinfo = {}
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 find(v, rx) then
conjinfo = deepcopy(p[3])
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 find(v, rx) then
for k, v in pairs(p[3]) do
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
end
end
paradigmas_reconocidos[p[1]] = true
encontre_reg = true
break
end
end
if encontre_reg then
break
end
end
assert(encontre_reg, "paradigma no reconocido")
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
if not conjinfo.nucleo_inf then
conjinfo.nucleo_inf = sub(v, 1, len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
conjinfo.prefijo = ""
elseif not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, len(v) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
if not conjinfo.prefijo then -- caso en el que cambié el núcleo
conjinfo.prefijo = ""
end
conjinfo.nucleos1 = conjinfo.nucleos1 or {}
conjinfo.nucleos2 = conjinfo.nucleos2 or {}
conjinfo.nucleos3 = conjinfo.nucleos3 or {}
conjinfo.alt = conjinfo.alt or {}
if args["alt"][N] then
insert_if_not(conjinfo.alt, args["alt"][N])
end
for i, a in ipairs(conjinfo.alt) do
if a ~= "REG" then
local n1, n2, n3
local info = alt_info[sufijo_inf][a]
assert(info, "Valor de alt no reconocido: "..a)
local sust
if info[3] then
n1, sust = gsubb(conjinfo.nucleo_inf, "^(.*)("..info[2]..")(.-)$", "%1#"..info[3].."#%3")
end
if info[4] then
n2, sust = gsubb(conjinfo.nucleo_inf, "^(.*)("..info[2]..")(.-)$", "%1#"..info[4].."#%3")
end
if info[5] then
n3, sust = gsubb(conjinfo.nucleo_inf, "^(.*)("..info[2]..")(.-)$", "%1#"..info[5].."#%3")
end
assert(sust, "Alternancia vocálica no reconocida")
if a == "´-´" then
insert_if_not(conjinfo.nucleos1, n1.."{BR}")
insert_if_not(conjinfo.nucleos2, n2.."{BR}")
insert_if_not(conjinfo.nucleos1, conjinfo.nucleo_inf.."{PT}")
insert_if_not(conjinfo.nucleos2, conjinfo.nucleo_inf.."{PT}")
else -- lo normal
insert_if_not(conjinfo.nucleos1, n1)
insert_if_not(conjinfo.nucleos2, n2)
insert_if_not(conjinfo.nucleos3, n3)
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
else
insert_if_not(conjinfo.nucleos1, conjinfo.nucleo_inf)
end
end
if args["nucleopres1"][N] then
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
end
if args["nucleopres3"][N] then
insert_if_not(conjinfo.nucleos2, args["nucleopres3"][N])
end
if args["nucleosubj4"][N] then
insert_if_not(conjinfo.nucleos3, args["nucleosubj4"][N])
end
if not conjinfo.nucleos3[1] then -- tengo que escribir primero este núcleo
if conjinfo.nucleos1[1] and not conjinfo.nucleos2[1] then
conjinfo.nucleos3[1] = gsub(conjinfo.nucleos1[1], "^[^#~]+$", "#%0#")
else
conjinfo.nucleos3[1] = conjinfo.nucleo_inf
end
else
conjinfo.nucleos3[1] = gsub(conjinfo.nucleos3[1], "^[^#~]+$", "#%0#")
end
if not conjinfo.nucleos1[1] then
conjinfo.nucleos1[1] = conjinfo.nucleo_inf
else
conjinfo.nucleos1[1] = gsub(conjinfo.nucleos1[1], "^[^#~]+$", "#%0#")
end
if not conjinfo.nucleos2[1] then
conjinfo.nucleos2[1] = conjinfo.nucleo_inf
else
conjinfo.nucleos2[1] = gsub(conjinfo.nucleos2[1], "^[^#~]+$", "#%0#")
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if (find(e, 'PART') or not find(e, 'ADJ')) and not find(e, "†") then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, art2=art2, resto=resto, resto_pl=resto_pl,impers=args["impersonal"]}
for _,s in ipairs(tostr) do
fmtinfo["subj_pres"..s] = deepcopy(resultante["subj_pres"..s])
end
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local impers = args["impersonal"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, impers)
end)
local cs, cs1, cs2, fila_pronombres_inf, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper
if impers == "3" then
fila_pronombres_inf = {"", "(por isso)", color=COLOR_INF, header=true, class="pc"}
fila_pronombres_ind = {"", "(isso)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(isso)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que isso)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(isso)", color=COLOR_IMPER, header=true, class="pc"}
cs = 2
elseif impers == "36" then
fila_pronombres_inf = {"", "(por isso)", "(por issos)", color=COLOR_INF, header=true, class="pc"}
fila_pronombres_ind = {"", "(isso)", "(issos)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(isso)", "(issos)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que isso)", "(que issos)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(isso)", "(issos)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_inf = {"", "por eu", "por tu", "por ele, por ela, por você", "por nós", "por vós", "por vocês, por eles, por elas", color=COLOR_INF, header=true, class="pc"}
fila_pronombres_ind = {"", "eu", "tu", "ele, ela, você", "nós", "vós", "vocês, eles, elas", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "eu", "tu", "ele, ela, você", "nós", "vós", "vocês, eles, elas", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que eu", "que tu", "que ele, que ela, que você", "que nós", "que vós", "que vocês, que eles, que elas", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tu)", "(você)", "(nós)", "(vós)", "(vocês)", color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = math.floor(cs / 2)
cs2 = cs - cs1
local t = {}
insert(t, {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true})
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
insert(t, {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf})
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger})
insert(t, {{"Participio", header=true, color=COLOR_NP}, resultante.part})
else
resultante.inf.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.part.colspan = cs1-1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
insert(t, {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp})
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp})
insert(t, {{"Participio", header=true, color=COLOR_NP}, resultante.part})
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
insert(t, {{"Formas personales", colspan=cs}, color=COLOR_H, header=true})
insert(t, {{"Modo infinitivo", colspan=cs}, color=COLOR_INF, header=true})
insert(t, fila_pronombres_inf)
if mostrar_imper then
insert(t, {{"Infinitivo simple", color=COLOR_INF, header=true}, ic("inf_pers")})
insert(t, {{"Infinitivo compuesto", color=COLOR_INF, header=true}, ic("inf_pers_comp")})
else
insert(t, {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de infinitivo personal", color=COLOR_IMPER, header=true, colspan=cs}})
end
insert(t, {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true})
insert(t, fila_pronombres_ind)
insert(t, {{"Presente", color=COLOR_IND, header=true}, ic("ind_pres")})
insert(t, {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")})
insert(t, {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("ind_perf")})
insert(t, {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")})
insert(t, {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("ind_perf_comp")})
insert(t, {{"Pretérito pluscuamperfecto compuesto", color=COLOR_IND, header=true}, ic("ind_pluperf_comp")})
insert(t, {{"Futuro", color=COLOR_IND, header=true}, ic("ind_fut")})
insert(t, {{"Futuro compuesto", color=COLOR_IND, header=true}, ic("ind_fut_comp")})
insert(t, {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("ind_anter")})
insert(t, {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true})
insert(t, fila_pronombres_cond)
insert(t, {{"Condicional simple", color=COLOR_COND, header=true}, ic("cond")})
insert(t, {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("cond_comp")})
insert(t, {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true})
insert(t, fila_pronombres_subj)
insert(t, {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")})
insert(t, {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")})
insert(t, {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")})
insert(t, {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")})
insert(t, {{f("Futuro"), color=COLOR_SUBJ, header=true}, ic("subj_fut")})
insert(t, {{f("Futuro compuesto"), color=COLOR_SUBJ, header=true}, ic("subj_fut_comp")})
insert(t, {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true})
insert(t, fila_pronombres_imper)
if mostrar_imper then
insert(t, {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")})
else
insert(t, {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}})
end
insert(t, {{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
insert(t, {{args["nota"] and args["nota"] or "", colspan=cs}})
local paradigmas_t = {}
local cats = {}
if es_irregular then
insert(cats, "PT:Verbos irregulares")
paradigmas_reconocidos["amar"] = nil
paradigmas_reconocidos["temer"] = nil
paradigmas_reconocidos["partir"] = nil
paradigmas_reconocidos["pôr"] = nil
else
insert(cats, "PT:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "PT:Verbos del paradigma "..p)
end
impers = impers or ""
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "PT:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "PT:Verbos terciopersonales")
end
if find(impers, "^ind") then
insert(cats, "PT:Verbos de objeto indirecto")
end
if defectivo then
insert(cats, "PT:Verbos defectivos")
end
if sufijo_inf == "ar" then
insert(cats, "PT:Verbos de la primera conjugación")
elseif sufijo_inf == "er" then
insert(cats, "PT:Verbos de la segunda conjugación")
elseif sufijo_inf == "ir" then
insert(cats, "PT:Verbos de la tercera conjugación")
else
insert(cats, "PT:Verbos de la cuarta conjugación")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")",
t,
ns == 0 and cats or {})
end
return export
l6lqiab4sa9qbv3t8v25ivsjukufyta
Módulo:flex/ca
828
1055674
6118167
6117309
2026-06-16T02:18:11Z
TMCbot
164594
.
6118167
Scribunto
text/plain
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local max = math.max
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local size = m_table.size
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local len = m_str.len
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local unaccented_vowel = "aeiouïüAEIOUÏÜ"
local accented_vowel = "àèéíòóúÀÈÉÍÒÓÚ"
local vowel = unaccented_vowel .. accented_vowel
local cons = "bcdfghjklmnpqrstvwxyzçBCDFGHJKLMNPQRSTVWXYZÇ·"
local V = "[" .. vowel .. "]"
local AV = "[" .. accented_vowel .. "]"
local NAV = "[^" .. accented_vowel .. "]"
local UAV = "[" .. unaccented_vowel .. "]"
local C = "[" .. cons .. "]"
-- local LETRA = "[" .. vowel .. cons .. "]"
local espacios = "%s"
local espacios_o_guiones = "%-‐%s"
local ESPACIO = "["..espacios.."]"
local ESPACIO_O_GUION = "["..espacios_o_guiones.."]"
local LETRA = "[^"..espacios.."]"
local quitar_tilde =
{
["á"] = "a",
["é"] = "e",
["í"] = "i",
["ó"] = "o",
["ú"] = "u",
["à"] = "a",
["è"] = "e",
["ì"] = "i",
["ò"] = "o",
["ù"] = "u",
["a"] = "a",
["e"] = "e",
["i"] = "i",
["o"] = "o",
["u"] = "u",
["Á"] = "A",
["É"] = "E",
["Í"] = "I",
["Ó"] = "O",
["Ú"] = "U",
["À"] = "A",
["È"] = "E",
["Ì"] = "I",
["Ò"] = "O",
["Ù"] = "U",
["A"] = "A",
["E"] = "E",
["I"] = "I",
["O"] = "O",
["U"] = "U",
}
local tildar = {
["a"] = "à",
["e"] = "è",
["i"] = "í",
["o"] = "ò",
["u"] = "ú",
["ï"] = "í",
["A"] = "À",
["E"] = "È",
["I"] = "Í",
["O"] = "Ò",
["U"] = "Ú",
["Ï"] = "Í",
}
local function es_locucion(tit, cop)
return find(tit, LETRA..ESPACIO_O_GUION..LETRA) or (cop ~= nil and find(tit, LETRA..ESPACIO_O_GUION..LETRA))
end
local function try(p, rx, repl1, repl2)
local p2, sust = gsubb(p, rx, "~%0~")
if sust then
if not repl1 then
return {m={p2}, p={}, f={}, fp={}}
end
local a, sust = gsubb(p, rx, repl1)
if not repl2 then
return {m={p2}, p={a}, f={}, fp={}}
end
local b, sust2 = gsubb(p, rx, repl2)
if sust2 then
return {m={p2}, p={a, b}, f={}, fp={}}
end
return {m={p2}, p={a}, f={}, fp={}}
end
return nil
end
-- https://salt.gva.es/auto/ajuda-salt/puntuacio/plural_dels_substantius.html
local function forma_plural(word, genere, forzar_s)
local no_forzar_s = not forzar_s
local plural = try(word, "s[cpt]$", "~%0s~", no_forzar_s and "~%0os~" or nil)
or try(word, "xt$", "~xts~", no_forzar_s and "~xtos~" or nil)
or try(word, "ig$", "~igs~", no_forzar_s and "~jos~" or nil)
or try(word, "[aio]ç$", (genere == "ng" and no_forzar_s) and "~%0os~" or ((genere == "f" or forzar_s) and "~%0s~" or "~%0os~"), (genere == "ng" and no_forzar_s) and "~%0ces~" or nil)
or try(word, "([^g][aeou])í$", "~%1ïns~")
or try(word, "("..AV..")n?$", function(a) return "~"..quitar_tilde[a].."ns~" end)
or try(word, "[aou]n$", "~%1s~") -- estas también son agudas
or try(word, "^("..C.."*"..V..")n?$", "~%1ns~") -- no considero diptongos
or try(word, "^"..NAV.."*([aeiou])([^aeio]+[ei]n)$", function(a, b) return "~"..tildar[a]..b.."s~" end)
or try(word, "[aàeèéiíïoòóuú].-[aeiou]s$", nil) -- llanas o esdrújulas en -s
or try(word, "([eèóú])s$", function(a) return "~"..quitar_tilde[a].."sos~" end)
or try(word, "([^gq][au])ís$", "~%1ïsos~")
or try(word, "oís$", "~oïssos~")
or try(word, "("..AV..")s$", function(a) return "~"..quitar_tilde[a].."ssos~" end)
or try(word, "^("..C.."*"..V..")s$", "~%1ssos~") -- por las dudas no considero diptongos
or try(word, "^("..C.."*"..V..C.."+)s$", "~%1sos~")
or try(word, "ca$", "~ques~")
or try(word, "ga$", "~gues~")
or try(word, "ça$", "~ces~")
or try(word, "ja$", "~ges~")
or try(word, "([gq])ua$", "~%1ües~")
or try(word, "a$", "~es~")
or try(word, "x$", ((not genere or genere == "m") and not find(word, AV) and no_forzar_s) and "~xos~" or "~xs~")
or try(word, "ç$", forzar_s and "~çs~" or (genere == "f" and "~ces~" or "~ços~"))
or try(word, "ch$", forzar_s and "~chs~" or "~ches~")
or try(word, C.."[^"..vowel.."s]".."$", "~%0s~")
or try(word, "z$", "~zos~") -- REVISAR
or try(word, "[^s]$", "~%0s~")
if not plural then
return {m={word}, p={}, f={}, fp={}}
end
return plural
end
local function forma_femenina(head)
if find(head, "aire$")
or find(head, "ç$") -- audaz, feliz, dulce, etc.
or (find(head, V..".+[ae]l$") and not find(head, AV)) -- -al, -el agudo (tiene qe tener más de una sílaba)
or (find(head, "[aeo][ae]l$") and not find(head, AV)) -- -al, -el agudo (tiene qe tener más de una sílaba)
or find(head, "[^f]il$") -- -il agudo o llano
or find(head, V..".+ar$") -- escolar (varias sílabas y aguda)
or find(head, "[aeo]ar$") -- escolar (varias sílabas y aguda)
or find(head, "rior$") -- anterior
or find(head, V..".+[ae]nt$") -- constant
or find(head, "ble$") -- constant
or find(head, "a$") -- constant
then
return head
end
local fem = head
fem = gsub(fem, "([aeo])í$", "%1ïna")
fem = gsub(fem, "([^gq]u)í$", "%1ïna")
fem = gsub(fem, "([aeio])u$", "%1va")
-- fem = gsub(fem, "([aeiou])l$", "%1l·la") muy dudoso (cf [[cérvol]]), no recuerdo qué quise hacer acá
fem = gsub(fem, "[àèìòùáéíóú]$", function(v) return quitar_tilde[v].."na" end)
fem = gsub(fem, "o$", "a")
fem = gsub(fem, "ce$", "ça")
fem = gsub(fem, "que$", "ca")
fem = gsub(fem, "qüe$", "qua")
fem = gsub(fem, "ge$", "ja")
fem = gsub(fem, "gue$", "ga")
fem = gsub(fem, "güe$", "gua")
fem = gsub(fem, "e$", "a")
fem = gsub(fem, "p$", "ba")
fem = gsub(fem, "f$", "va")
if find(fem, "g$") then
fem = gsub(fem, "leg$", "loga")
fem = gsub(fem, "oig$", "oja")
fem = gsub(fem, "ig$", "tja")
elseif find(fem, "[ei]n$") and not find(fem, "[àèéíòóú]") then
fem = gsub(fem, "a([^aeio]+[ei]n)$", "à%1a")
fem = gsub(fem, "e([^aeio]+[ei]n)$", "è%1a")
fem = gsub(fem, "i([^aeio]+[ei]n)$", "í%1a")
fem = gsub(fem, "o([^aeio]+[ei]n)$", "ò%1a")
fem = gsub(fem, "u([^aeio]+[ei]n)$", "ú%1a")
elseif find(fem, "s$") then
fem = gsub(fem, "[aà]s$", "assa")
fem = gsub(fem, "ès$", "esa")
fem = gsub(fem, "és$", "essa")
fem = gsub(fem, "ís$", "issa")
fem = gsub(fem, "[oò]s$", "ossa")
fem = gsub(fem, "ós$", "osa")
fem = gsub(fem, "ús$", "usa")
end
fem = gsub(fem, "([aiïu])t$", "%1da")
fem = gsub(fem, "a(%l)i$", "à%1ia")
fem = gsub(fem, "i(%l)i$", "í%1ia")
if fem == head and not find(head, "a$") then
fem = head .. "a"
end
return fem
end
local function flexionar_palabra(p, g, s)
if g ~= "mf" then
return forma_plural(p, g, s)
end
local flex = forma_plural(p, "m", s)
local fem = forma_femenina(p)
local flex_f = forma_plural(fem, "f", s)
if not deepequals(flex, flex_f) then
flex.f = flex_f.m
flex.fp = flex_f.p
end
return flex
end
local function flexion_sust_adj(palabras, g, forzar_s, copulativa)
local a, separador, b
if copulativa == true or copulativa == false then
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO_O_GUION..")("..LETRA.."+)$")
else
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
end
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, forzar_s)
local flex2 = copulativa and flexionar_palabra(b, g, forzar_s) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto
if copulativa == false then
p, resto = match(palabras, "^(%-?[^"..espacios_o_guiones.."]+)(.-)$")
else
p, resto = match(palabras, "^("..LETRA.."+)(.-)$")
end
local flex = flexionar_palabra(p, g, forzar_s)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
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_ = flexion_sust_adj(title, modo, args["s"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." regulares")
elseif es_locucion(title, args["cop"]) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["n"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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)
local valido = {
["m"] = true,
["f"] = true,
["mf"] = true,
["n"] = true,
["ng"] = true,
["inv"] = true,
["s"] = true,
["p"] = true,
["irreg"] = true
}
assert(valido[args[1]], "Especifique el género del sustantivo en el primer parámetro: m, f, mf, ng, inv, s, p, irreg")
return formatear_sust_adj(frame, title, ns, args, es_locucion(title, args["cop"]) and "CA:Locuciones sustantivas" or "CA:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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(frame, title, ns, args, es_locucion(title, args["cop"]) and "CA:Locuciones adjetivas" or "CA:Adjetivos")
end
local sufijos = {
["ar"] = { -- ar
["ger"] = {"ant"},
["part"] = {"at"},
["ind_pres"] = {"o", "es", "a", "em", "eu", "en",
"e", nil, nil, "am", "au", nil,
"i", nil, nil, nil, nil, nil,
"", nil, nil, nil, nil, nil},
["ind_imp"] = {"ava", "aves", "ava", "àvem", "àveu", "aven"},
["ind_perf"] = {"í", "ares", "à", "àrem", "àreu", "aren"},
["ind_perf_alt"] = {"é", "aste", "aste", "ó", "amos", "asteis"},
["ind_fut"] = {"aré", "aràs", "arà", "arem", "areu", "aran"},
["subj_pres"] = {"i", "is", "i", "em", "eu", "in",
"e", "es", "e", nil, nil, "en"},
["subj_imp"] = {"és", "essis", "és", "éssim", "éssiu", "essin",
"às", "esses", "às", "éssem", "ésseu", "essen",
"ara", "assis", "ara", "àssim", "àssiu", "assin",
nil, "asses", nil, "àssem", "àsseu", "assen",
nil, "ares", nil, "àrem", "àreu", "aren"},
["cond"] = {"aria", "aries", "aria", "aríem", "aríeu", "arien"},
["imper"] = {nil, "a", "i", "em", "eu", "in",
nil, nil, "e", nil, "au", "en"}
},
["er"] = { -- er
["ger"] = {"ent"},
["part"] = {"ut"},
["ind_pres"] = {"o", "s", "", "em", "eu", "en",
"i", nil, nil, nil, nil, nil,
"", nil, nil, nil, nil, nil},
["ind_imp"] = {"ia", "ies", "ia", "íem", "íeu", "ien"},
["ind_perf"] = {"í", "eres", "é", "érem", "éreu", "eren"},
["ind_perf_alt"] = {"é", "aste", "aste", "ó", "amos", "asteis"},
["ind_fut"] = {"eré", "eràs", "erà", "erem", "ereu", "eran"},
["subj_pres"] = {"i", "is", "i", "em", "eu", "in",
"a", "es", "a", nil, nil, "en"},
["subj_imp"] = {"és", "essis", "és", "éssim", "éssiu", "essin",
"era", "esses", "era", "éssem", "ésseu", "essen",
nil, "eres", nil, "érem", "éreu", "eren",},
["cond"] = {"eria", "eries", "eria", "eríem", "eríeu", "erien"},
["imper"] = {nil, "", "i", "em", "eu", "in",
nil, nil, "a", nil, nil, "en"}
},
["ir"] = { -- ir
["ger"] = {"int"},
["part"] = {"it"},
["ind_pres"] = {"o", "s", "", "im", "iu", "en",
"i", nil, nil, nil, nil, nil,
"", nil, nil, nil, nil, nil,},
["ind_imp"] = {"ia", "ies", "ia", "íem", "íeu", "ien"},
["ind_perf"] = {"í", "ires", "í", "írem", "íreu", "iren"},
["ind_perf_alt"] = {"é", "aste", "aste", "ó", "amos", "asteis"},
["ind_fut"] = {"iré", "iràs", "irà", "irem", "ireu", "iran"},
["subj_pres"] = {"i", "is", "i", "im", "iu", "in",
"a", "es", "a", "iguem", "igueu", "en",},
["subj_imp"] = {"ís", "issis", "ís", "íssim", "íssiu", "issin",
"ira", "isses", "ira", "íssem", "ísseu", "issen",
nil, "ires", nil, "írem", "íreu", "iren",},
["cond"] = {"iria", "iries", "iria", "iríem", "iríeu", "irien"},
["imper"] = {nil, "", "i", "im", "iu", "in",
nil, nil, "a", "iguem", nil, "en",},
},
["re"] = { -- -re, -dre
["ger"] = {"ent"},
["part"] = {"ut"},
["ind_pres"] = {"o", "s", "", "em", "eu", "en",
"i", nil, nil, nil, nil, nil,
"", nil, nil, nil, nil, nil},
["ind_imp"] = {"ia", "ies", "ia", "íem", "íeu", "ien"},
["ind_perf"] = {"í", "eres", "é", "érem", "éreu", "eren"},
["ind_perf_alt"] = {"é", "aste", "aste", "ó", "amos", "asteis"},
["ind_fut"] = {"ré", "ràs", "rà", "rem", "reu", "ran"},
["subj_pres"] = {"i", "is", "i", "em", "eu", "in",
"a", "es", "a", nil, nil, "en"},
["subj_imp"] = {"és", "essis", "és", "éssim", "éssiu", "essin",
"era", "esses", "era", "éssem", "ésseu", "essen",
nil, "eres", nil, "érem", "éreu", "eren",},
["cond"] = {"ria", "ries", "ria", "ríem", "ríeu", "rien"},
["imper"] = {nil, "", "i", "em", "eu", "in",
nil, nil, "a", nil, nil, "en"}
},
}
local pronombres = {"me", "te", "te", "se", "nos", "os", "se"}
local auxiliar = {
["inf_comp"] = {"haver"},
["ger_comp"] = {"havent"},
["ind_perf_comp"] = {"he", "has", "ha", "hem", "heu", "han",
nil, nil, nil, "havem", "haveu", nil,},
["ind_peri"] = {"vaig", "vas", "va", "vem", "vau", "van",
nil, "vares", nil, "vàrem", "vàreu", "varen",},
["ind_pluperf"] = {"havia", "havies", "havia", "havíem", "havíeu", "havien"},
["ind_anter"] = {"haguí", "hagueres", "hagué", "haguérem", "haguéreu", "hagueren",
"vaig haver", "vas haver", "va haver", "vem haver", "vau haver", "van haver",
nil, "vares haver", nil, "vàrem haver", "vàreu haver", "varen haver",},
["ind_fut_comp"] = {"hauré", "hubràs", "haurà", "haurem", "haureu", "hauran"},
["cond_comp"] = {"hauria", "hauries", "hauria", "hauríem", "hauríeu", "haurien",
"haguera", "hagueres", "haguera", "haguérem", "haguéreu", "hagueren",},
["subj_perf"] = {"hagi", "hagis", "hagi", "hàgim", "hàgiu", "hagin",
"haja", "hages", "haja", "hàgem", "hàgeu", "hagen",},
["subj_peri"] = {"vagi", "vagis", "vagi", "vàgim", "vàgiu", "vagin",
"vaja", "vages", "vaja", "vàgem", "vàgeu", "vagen",},
["subj_pluperf"] = {"hagués", "haguessis", "hagués", "haguéssim", "haguéssiu", "haguessin",
"haguera", "haguesses", "haguera", "haguéssem", "haguésseu", "haguessen",
nil, "hagueres", nil, "haguérem", "haguéreu", "hagueren",},
["subj_anter"] = {"vagi haver", "vagis haver", "vagi haver", "vàgim haver", "vàgiu haver", "vagin haver",
"vaja haver", "vages haver", "vaja haver", "vàgem haver", "vàgeu haver", "vagen haver",},
}
local JO, TU, ELL, NOSALTRES, VOSALTRES, ELLS = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"jo", "tu", "el, ella, vostè", "nosaltres", "vosaltres, vós", "ells, elles, vostès"}
local PRONOMBRES_SUBJ = {"que jo", "que tu", "que el, que ella, que vostè", "que nosaltres", "que vosaltres, que vós", "que ells, que elles, que vostès"}
local PRONOMBRES_IMP = {"―", "(tu)", "(vostè)", "(nosaltres)", "(vosaltres)", "(vostès)"}
local IMPERSONALES = {"", "", "", "(això)", "", "", "(ells)"}
local IMPERSONALES_SUBJ = {"", "", "", "(que això)", "", "", "(que elss)"}
local REFLEXIVOS_ANTEPUESTOS = {"em", "et", "es", "ens", "us", "es"}
local REFLEXIVOS_ANTEPUESTOS_CONTRAIDOS = {"m'", "t'", "s'", "ens ", "us ", "s'"}
local REFLEXIVOS_POSPUESTOS = {"-me", "-te", "-se", "-nos", "-vos", "-se"}
local REFLEXIVOS_POSPUESTOS_CONTRAIDOS = {"'m", "'t", "'s", "-nos", "-vos", "'s"}
local formas_no_personales = {
["ger"] = true,
["part"] = true,
["inf"] = true,
}
local formas_personales = {
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["ind_fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["ind_perf_comp"] = true,
["ind_pluperf"] = true,
["ind_peri"] = true,
["ind_anter"] = true,
["ind_fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
["subj_peri"] = true,
["subj_anter"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local paradigmas_regulares = {
["ar"] = {
{"adequar", {"quar$"}, {
nexo = "qu"
}},
{"averiguar", {"guar$"}, {
nexo = "gu"
}},
{"evacuar", {"[^aeiougq]uar$"}, {
nexo = "u",
}},
{"emproar", {"oar$"}, {
nexo = "o",
}},
{"desmaiar", {"[aeou]iar$"}, {
nexo = "I",
}},
{"acariciar", {"[^aeiou]iar$"}, {
nexo = "i",
}},
{"pujar", {"[aeiou]jar$"}, {
nexo = "J",
}},
{"viatjar", {"jar$"}, {
nexo = "j",
}},
{"alçar", {"çar$"}, {
nexo = "ç",
}},
{"educar", {"car$"}, {
nexo = "c",
}},
{"jugar", {"gar$"}, {
nexo = "g",
}},
{"amar", {"ar$"}, {
}},
},
["er"] = {
{"vèncer", {"cer$"}, {
nexo = "c",
}},
{"témer", {"er$"}, {
}},
},
["ir"] = {
{"fugir", {"fugir$"}, { -- NO es irregular, es un cambio ortográfico. Lo que pasa es que es el único que no es inco.
nexo = "g",
}},
{"trair", {"air$"}, {
nexo = "a"
}},
{"trair", {"eir$"}, {
nexo = "e"
}},
{"trair", {"oir$"}, {
nexo = "o"
}},
{"trair", {"uir$"}, {
nexo = "u"
}},
{"argüir", {"üir$"}, {
nexo = "ü"
}},
{"partir", {"ir$"}, {
}},
},
["re"] = {
{"concebre", {"bre$"}, {
nexo = "b"
}},
{"abatre", {"re$"}, {
}},
},
["ur"] = {
{"dur", {"dur$"}, { -- para que no tire error el módulo
}},
}
}
-- partir: paradigma modelo inco
-- dormir: paradigma modelo puro
local verbos_puros = {
"ajupir$", "buixir$", "bullir$", "cruixir$", "dormir$", "funyir$", "grunyir$", "munyir$", "pudir$", "punyir$",
"retrunyir$", "^sentir$", "pressentir$", "^ressentir$", "collir$", "cosir$", "^eixir$", "[^t]eixir$", "escopir$", "fugir$",
"morir$", "^obrir$", "reobrir$", "entreobrir$", "omplir$", "[^c]omplir$", "pruir$", "^sortir$", "[^a][^s]sortir$", "tossir$"}
local verbos_mixtos = {
"acudir$", "arrupir$", "brumir$", "brunzir$", "consumir$", "^resumir$", "presumir$", "mentir$", "percudir$", "consentir$",
"lluir$"}
-- los que quedan son incoativos
local paradigmas_irregulares = {
["ar"] = {
{"aguar", {"^aguar$"}, {
nexo = "GU",
}},
{"anar", {"^anar$"}, { -- cuidado con mandar
nucleopres = {"vaj-vaj"},
ind_pres = {{"vaig"}, {"vas"}, {"va"}, nil, nil, {"van"}},
ind_fut = {{"aniré", "iré"}, {"aniràs", "iràs"}, {"anirà", "irà"}, {"anirem", "irem"}, {"anireu", "ireu"}, {"aniran", "iran"}},
cond = {{"aniria", "iria"}, {"aniries", "iries"}, {"aniria", "iria"}, {"aniríem", "iríem"}, {"aniríeu", "iríeu"}, {"anirien", "irien"}},
imper = {nil, {"vés"}},
}},
{"dar", {"^dar$", "^desdar$"}, { -- no pueden ir otros verbos como "andar o quedar"
nucleo = "d",
ind_pres = {{"do"}, {"das"}, {"da"}, nil, nil, {"dan"}},
subj_pres = {{"de"}, {"des"}, {"de"}, nil, nil, {"den"}},
imper = {nil, {"da"}, {"de"}, nil, {"deu"}, {"den"}}
}},
{"estar", {"^estar$"}, {
ind_pres = {{"estic"}, {"estàs"}, {"està"}, nil, nil, {"estan"}},
subj_pres = {{"estigui", "estiga"}, nil, {"estigui", "estiga"}},
ind_perf = {{"estiguí"}, {"estigueres"}, {"estigué"}, {"estiguérem"}, {"estiguéreu"}, {"estigueren"}},
nucleopres = {"estig"},
part = {"estat"}, -- necesario sobrescribir por la asignación de núcleos
imper = {nil, {"estigues"}, {"estigui", "estiga"}, nil, {"estigueu"}}
}},
},
["er"] = {
-- caler regular imeprs
{"soler", {"^soler$"}, {
nucleopres = {"g"},
}},
{"voler", {"voler$"}, {
nucleopres = {"vulg"},
nucleoperf = {"volg"},
ind_pres = {{"vull"}},
imper = {nil, {"vulgues"}, nil, nil, {"vulgueu"}},
nucleofut = {"voldr"},
}},
{"valer", {"ler$"}, {
nucleopres = {"g"},
nucleofut = {"ldr"},
}},
{"atènyer", {"^atènyer$", "^empènyer$", "^espènyer$"}, {
nucleo = "èny",
part = {"ès"},
}},
{"estrènyer", {"strènyer$"}, {
part = {"stret"},
nucleoperf = {"streng", "streny"},
}},
{"fènyer", {"fènyer$", "plànyer$", "pertànyer$"}, {
nucleo = "ny",
part = {"ngut", "nyut"},
nodial = true,
}},
-- júnyer es junyir
{"saber", {"saber$"}, {
ind_pres = {{"sé"}},
nucleofut = {"sabr"},
subj_pres = {{"sàpiga", "sàpia"}, {"sàpigues", "sàpies"}, {"sàpiga", "sàpia"}, {"sapiguem", "sapiem"}, {"sapigueu", "sapieu"}, {"sàpiguen", "sàpien"}},
imper = {nil, {"sàpigues", "sàpies"}, {"sàpiga", "sàpia"}, {"sapiguem", "sapiem"}, {"sapigueu", "sapieu"}, {"sàpiguen", "sàpien"}}
}},
{"conèixer", {"conèixer$"}, {
part = {"conegut"},
nucleopres = {"coneg"},
}},
{"créixer", {"créixer$"}, {
part = {"crescut"},
nucleoperf = {"cresqu", "REG"},
subj_pres = {{"creixi", "cresca"}, {"creixis", "cresques"}, {"creixi", "cresca"}, {"creixem", "cresquem"}, {"creixeu", "cresqueu"}, {"creixin", "cresquen"}},
imper = {nil, nil, {"creixi", "cresca"}, {"creixem", "cresquem"}, nil, {"creixin", "cresquen"}}
}},
{"merèixer", {"merèixer$", "^irèixer"}, {-- cambia la tilde
nucleo = "rèix",
part = {"rescut"},
nucleoperf = {"resqu", "REG"},
subj_pres = {{"reixi", "resca"}, {"reixis", "resques"}, {"reixi", "resca"}, {"reixem", "resquem"}, {"reixeu", "resqueu"}, {"reixin", "resquen"}},
imper = {nil, nil, {"reixi", "resca"}, {"reixem", "resquem"}, nil, {"reixin", "resquen"}}
}},
{"parèixer", {"parèixer$"}, {--REV, aparèixer
nucleopres = {"pareg"},
}},
{"néixer", {"néixer$", "péixer$"}, {
nucleo = "éix",
nucleopresa = {"aix"},
part = {"ascut"},
ind_imp = {nucleo = "aix"},
nucleoperf = {"asqu", "aix"},
nucleofut = {"aix"},
nodial = true,
}},
{"néixer", {"nàixer$", "pàixer$"}, {
nucleo = "àix",
part = {"ascut"},
nucleoperf = {"asqu", "aix"},
subj_pres = {{"asca", "aixi"}, {"asques", "aixis"}, {"asca", "aixi"}, {"aixem", "asquem"}, {"aixeu", "asqueu"}, {"asquen", "aixin"}},
imper = {nil, nil, {"asca"}, {"aixem", "asquem"}, nil, {"asquen"}},
nodial = true,
}},
{"poder", {"poder$"}, {
nucleopres = {"pug"},
nucleoperf = {"pog"},
nucleofut = {"podr"},
imper = {nucleo = false}
}},
{"caber", {"caber$"}, { -- es cabre
nucleo = false,
}},
{"córrer", {"córrer$"}, {
part = {"corregut"},
ind_pres = {{"corro", "córrec", "corri", "corr"}},
subj_pres = {{"corri", "córrega"}, {"corris", "córregues"}, {"corri", "córrega"}, {"correm", "córregem"}, {"correu", "córregeu"}, {"corrin", "córreguen"}},
nucleoperf = {"correg"},
}},
{"haver", {"haver$"}, { -- aux
nucleopres = {"haj-haj-hàj"},
ind_pres = {{"he"}, {"has"}, {"ha"}, {"hem"}, {"heu"}, {"han"}},
part = {"hagut"},
nucleofut = {"haur"},
nucleoperf = {"hag"},
cond = {nucleo = {"haur", "hag"}},
imper = {nucleo = false}
}},
{"ser", {"^ser$"}, {
part = {"sigut"},
ind_pres = {{"soc"}, {"ets"}, {"és"}, {"som"}, {"sou"}, {"són"}},
ind_imp = {{"era"}, {"eres"}, {"era"}, {"érem"}, {"éreu"}, {"eren"}},
ind_perf = {{"fui"}, {"fores"}, {"fou"}, {"fórem"}, {"fóreu"}, {"foren"}},
subj_pres = {nucleo = "sig"},
subj_imp = {nucleo = "fo"},
imper = {nil, {"sigues"}, {"sigui", "siga"}, {"siguem", "sigam"}, {"sigeu", "sigau"}, {"siguin", "siguen"}}
}},
{"ésser", {"^ésser$", "^esser$"}, {
ger = {"essent"},
part = {"estat"},
nucleo = false,
}},
{"fer", {"^fer$"}, {
part = {"fet"},
ind_pres = {{"faig", "faç"}, {"fas"}, {"fa"}, nil, nil, {"fan"}},
ind_imp = {nucleo = "fe"},
ind_perf = {{"fiu"}, {"feres"}, {"feu"}, {"férem"}, {"féreu"}, {"feren"}},
imper = {nil, {"fes", "fe"}, nil, nil, {"feu", "feis"}},
nucleofut = {"far"},
nucleopres = {"faç-faç"}
}},
-- esprémer no forma paradigma
},
["ir"] = {
{"obrir", {"obrir$"}, {
part = {"obert"},
}},
{"cosir", {"collir$", "osir$", "tossir$", "escopir$", "sortir$"}, {
nucleopres = {"u-u"},
}},
{"complir", {"omplir$"}, {
part = {"omplert", "omplit"},
}},
{"eixir", {"^eixir$", "^deseixir$"}, {
nucleopres = {"i-i"}
}},
{"reeixir", {"reeixir$"}, {
nucleopres = {"ï-ï"},
nodial = true
}},
{"establir", {"establir$"}, {
part = {"establert", "establit"},
}},
-- pruir reg.
{"dir", {"^dir$", "^adir$", "contradir$", "desdir$", "entredir$", "interdir$", "maldir$", "predir$", "^redir$"}, {
nucleo = "d",
ger = {"dient"},
part = {"dit"}, -- necesario sobreescribirlo para que no genere *dig
nucleopres = {"dig-diu-dig"},
ind_imp = {nucleo = "de"},
ind_pres = {nil, nil, nil, {"diem"}, {"dieu"}},
subj_pres = {nil, nil, nil, {"diguem"}, {"digueu"}},
imper = {nil, {"digues"}, nil, {"diguem"}, {"digueu"}}
}},
{"venir", {"^venir$"}, {
ind_pres = {nil, nil, {"ve"}},
part = {"vingut"},
nucleopres = {"ving"},
nucleoperf = {"ving", "veng"},
nucleofut = {"vindr"},
imper = {nil, {"vine"}}
}},
{"prevenir", {"^advenir$", "^avenir$", "contravenir$", "convenir$", "desavenir$", "entrevenir$", "esdevenir$", "intervenir$", "obvenir$", "pervenir$", "prevenir$", "provenir$", "^revenir$", "sobrevenir$", "subvenir$"}, {
nucleo = "ven",
pres = {nil, nil, {"vé"}},
part = {"vingut"},
nucleopres = {"ving"},
nucleoperf = {"ving", "veng"},
nucleofut = {"vindr"},
imper = {nil, {"vine"}}
}},
-- vestir, llegir, servir
{"tenir", {"tenir$"}, { -- y mantenir
nucleopres = {"ting"},
nucleoperf = {"ting", "teng"},
nucleofut = {"tindr", "tendr"},
part = {"tingut", "tengut"},
ind_pres = {nil, nil, {"té"}},
imper = {nil, {"tingues", "ten"}, nil, nil, {"tingueu", "teniu"}}
}},
{"morir", {"morir$"}, {
part = {"mort"},
}},
{"imprimir", {"imprimir$"}, {
part = {"imprès"},
}},
-- oir
},
["re"] = {
{"caldre", {"caldre$", "doldre$", "^oldre$", "soldre$", "valdre$"}, {
nucleopres = {"g"}
}},
{"coldre", {"oldre$"}, { -- moldre, absoldre, dissoldre, toldre
part = {"olt"},
nucleopres = {"g"},
}},
{"romandre", {"^romandre$"}, {
part = {"romàs"},
nucleopres = {"g"},
}},
{"encendre", {"encendre$", "tendre$"}, {
nucleo = "end",
part = {"ès"},
nucleopres = {"g"},
ind_pres = {nil, nil, {"én"}},
imper = {nil, {"én"}},
}},
{"vendre", {"^vendre$"}, {
part = {"venut", "vengut"},
nucleopres = {"g"},
nucleoperf = {"veng", "ven"}
}},
{"advendre", {"vendre$"}, {
part = {"venut", "vengut"},
nucleopres = {"g"},
nucleoperf = {"veng", "ven"},
ind_pres = {nil, nil, {"vèn"}},
imper = {nil, {"vèn"}},
}},
{"fendre", {"^"..C.."*endre$"}, {
nucleo = "end",
part = {"es"},
nucleopres = {"g"},
}},
{"defendre", {"endre$"}, {
nucleo = "end",
part = {"ès"},
nucleopres = {"g"},
ind_pres = {nil, nil, {"èn"}},
imper = {nil, {"èn"}},
}},
{"enfondre", {"^enfondre$"}, {
part = {"enfús"},
nucleopres = {"g"}
}},
{"pondre", {"pondre$"}, {
part = {"post"},
nucleopres = {"g"}
}},
{"fondre", {"^"..C.."*ondre$"}, {
nucleo = "ond",
part = {"os", "us"},
nucleopres = {"g"}
}},
{"difondre", {"ondre$"}, {
part = {"ós"},
nucleopres = {"g"}
}},
{"caure", {"caure$"}, {
nucleopres = {"caig"},
nucleopresa = {"cai"},
ind_imp = {nucleo = "que"},
}},
{"plaure", {"plaure$"}, {
nucleopres = {"g"},
nucleopresa = {"pla"},
}},
{"raure", {"^raure$"}, {
nucleopres = {"g"},
nucleopresa = {"ra"},
part = {"ragut", "ras"}
}},
{"beure", {"beure$", "deure$", "lleure$"}, {
nucleo = "eu",
nucleopres = {"g"},
nucleopresa = {"ev"},
ind_imp = {nucleo = "ev"},
}},
{"creure", {"creure$", "seure$"}, {
nucleo = "eu",
nucleopresa = {"ei"},
nucleopres = {"g"},
}},
{"jeure", {"jeure$", "jaure$"}, {
v = "jeure",
part = {"jagut"},
nucleofut = {"jau"},
nucleopresa = {"jai"},
ind_pres = {{"jec", "jac"}},
nucleopres = {"g"},
ind_imp = {nucleo = "jeu"},
}},
{"treure", {"treure$", "traure$"}, {
part = {"tret"},
nucleofut = {"trau"},
nucleopresa = {"trai"},
nucleoperf = {"trag"},
ind_imp = {nucleo = "tre"},
ind_pres = {{"trec", "trac"}},
nucleopres = {"g"},
}},
{"veure", {"veure$"}, {
part = {"vist"},
nucleopres = {"vej"},
nucleopresa = {"vei"},
nucleoperf = {"vei"},
ind_perf = {{"viu"}},
}},
{"escriure", {"scriure$"}, {
part = {"scrit"},
nucleopres = {"g"},
nucleopresa = {"scrivi"},
nucleoperf = {"scrig", "scriv"},
ind_imp = {nucleo = "scriv"},
subj_imp = {nucleo = "scrig"},
}},
{"riure", {"riure$"}, {
part = {"rigut", "rist"},
nucleopresa = {"ri"},
nucleopres = {"g"},
ind_imp = {nucleo = "re"},
}},
{"viure", {"viure$"}, {
part = {"viscut"},
nucleopres = {"visc"},
nucleopresa = {"vivi"},
ind_pres = {{"visc"}},
ind_imp = {nucleo = "viv"},
}},
{"cloure", {"cloure$"}, { -- REVISAR: tiene dos participios según la etimología
part = {"clos"},
nucleopres = {"g"},
nucleopresa = {"clo"},
}},
{"moure", {"moure$", "ploure$"}, {
part = {"mogut"},
nucleopres = {"g"},
nucleopresa = {"mov"},
ind_imp = {nucleo = "mov"},
}},
{"noure", {"noure$"}, {
part = {"nogut"},
nucleopres = {"g"},
nucleopresa = {"no"},
}},
{"vindre", {"^vindre$"}, {
part = {"vingut", "vengut"},
nucleopres = {"ving-ven-ving"},
nucleopresa = {"veni"},
ind_imp = {nucleo = "veni"},
imper = {nil, {"vine"}},
}},
},
["ur"] = {
{"dur", {"dur$"}, {
nucleo = "du",
sufijo = "re",
nucleopres = {"g"},
part = {"dut"},
ind_pres = {nil, {"duus", "dus"}, {"duu", "du"}},
imper = {nil, {"duu", "du"}}
}},
}
}
local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf, forma)
if not nexo then
return sufijo
end
if sufijo_inf == "ar" then
if sufijo == "" then
if nexo == "gu" then
return nil
end
if nexo == "qu" then
return nil
end
if nexo == "u" or nexo == "o" then
return nexo.."~u~" -- [[evacuar]], [[lloar]]
end
if nexo == "i" then
return nexo.."~i~" -- [[acariciar]]
end
if nexo == "J" then
return "~ig~" -- [[pujar]]
end
if nexo == "GU" then
return "#gúu#" -- [[aguar]]
end
end
if sufijo == "i" and forma == "ind_pres" then
if nexo == "gu" then
return nil
end
end
if find(sufijo, "^í") then
if nexo == "I" then
return "~"..sufijo.."~"
end
end
if find(sufijo, "^i[ns]?$") then
if nexo == "I" then
return "~ï~"..sub(sufijo, 2)
end
if nexo == "i" then
return nexo.."~ï~"..sub(sufijo, 2)
end
if nexo == "o" or nexo == "u" then
return nexo.."~ï~"..sub(sufijo, 2)
end
if nexo == "GU" then
return "gu#ï#"..sub(sufijo, 2)
end
end
if find(sufijo, "^"..UAV.."[ns]?$") then
if nexo == "GU" then
return "#gú#"..sufijo
end
end
if find(sufijo, "^[eiéí]") then
if nexo == "gu" or nexo == "GU" then
return "g~ü~"..sufijo
end
if nexo == "qu" then
return "q~ü~"..sufijo
end
if nexo == "ç" then
return "~c~"..sufijo
end
if nexo == "c" then
return "~qu~"..sufijo
end
if nexo == "g" then
return "~gu~"..sufijo
end
if nexo == "j" or nexo == "J" then
return "~g~"..sufijo
end
end
else -- ER/RE/IR
if sufijo == "" then
if nexo == "b" then
return "~p~"..sufijo
end
if nexo == "c" then
return "~ç~"..sufijo
end
if nexo == "g" then
return "~ig~" -- [[fugir]]
end
if nexo == "u" or nexo == "o" then
return nexo.."~u~" -- [[lluir]]
end
end
if sufijo == "s" then
if nexo == "b" then
return "~p~"..sufijo
end
if nexo == "c" then
return "~ce~"..sufijo
end
if nexo == "g" then
return nexo.."~e~"..sufijo
end
if nexo == "u" then
return nexo.."~u~"..sufijo, nexo..sufijo -- [[lluir]]
end
end
if find(sufijo, "^i") and forma ~= "ind_fut" and forma ~= "cond" and forma ~= "ger" then
if nexo == "a" or nexo == "e" or nexo == "o" or nexo == "u" then
return nexo.."~ï~"..sub(sufijo, 2)
end
if nexo == "ü" then
return "~uï~"..sub(sufijo, 2)
end
end
if find(sufijo, "^[aouáóúàòù]") then
if nexo == "c" then
return "~ç~"..sufijo
end
if nexo == "g" then
return "~j~"..sufijo
end
end
end
if nexo == "I" then
return "i"..sufijo
end
if nexo == "J" then
return "j"..sufijo
end
if nexo == "GU" then
return "gu"..sufijo
end
return nexo..sufijo
end
local function combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma, sufijo_inf)
if not nucleo or not nexosufijo then
return nil
end
if sufijo_inf == "ar" and forma == "ind_pres" and nexosufijo == "" and find(nucleo, "[aeiouï]ss?#?$") then -- passar, envasar, expressar, etc.
return (gsub(nucleo, "([aeiouï])s?(s#?)$", function(a, b) return "~"..tildar[a]..b.."~" end))
end
if sufijo_inf == "ar" and forma == "ind_pres" and nexosufijo == "" and find(nucleo, "[eiï]n#?$") then -- encadenar, eliminar
return (gsub(nucleo, "([eiï])(n#?)$", function(a, b) return "~"..tildar[a]..b.."~" end))
end
if find(nucleo, "d#?$") and sufijo_inf == "re" and forma ~= "ind_fut" and forma ~= "cond" then
nucleo = gsub(nucleo, "d(#?)$", "%1")
end
if find(nucleo, "[aeio]u#?$") and sufijo_inf == "re" and forma ~= "ind_pres" and forma ~= "imper" and forma ~= "ind_fut" and forma ~= "cond" then
nucleo = gsub(nucleo, "([aeio])u(#?)$", "%1%2")
end
if find(nucleo, "[ao]#?$") and forma == "ind_imp" and find(nexosufijo, "^i"..UAV.."*[mns]?$") then
return nucleo..(gsub(nexosufijo, "^i", "~ï~"))
end
if find(nucleo, "e#?$") and forma == "ind_imp" and find(nexosufijo, "^íe") then
return gsub(nucleo, "e(#?)$", "è%1")..(gsub(nexosufijo, "^íe", "~i~e"))
end
if find(nucleo, "o([~#]?)$") and forma == "subj_imp" and find(nexosufijo, "^([~#]?)[eé]") then -- [[ser]]
return nucleo..(gsub(nexosufijo, "^([~#]?)[eé]", "%1"))
end
if find(nucleo, "[nv]i#") and find(nexosufijo, "^e") and sufijo_inf == "re" then -- escriure, viure
return nucleo..sub(nexosufijo, 2)
end
if find(nucleo, "[bdg]#?$") and (nexosufijo == "o" or nexosufijo == "i") and forma == "ind_pres" then
return nil
end
if find(nucleo, "b#?$") and (nexosufijo == "" or nexosufijo == "s") then
return (gsub(nucleo, "b(#?)$", "~p~%1"))..nexosufijo
end
if find(nucleo, "d#?$") and (nexosufijo == "" or nexosufijo == "s") then
return (gsub(nucleo, "d(#?)$", "~t~%1"))..nexosufijo
end
if find(nucleo, "g#?$") and (nexosufijo == "" or nexosufijo == "s") then
return (gsub(nucleo, "g(#?)$", "~c~%1"))..nexosufijo
end
if find(nucleo, "g#$") and find(nexosufijo, "^igu") then
return (gsub(nucleo, "g#$", "gu#"))..sub(nexosufijo, 4)
end
if find(nucleo, "g#$") and find(nexosufijo, "^[eiéí]") then
return (gsub(nucleo, "g#$", "gu#"))..nexosufijo
end
if find(nucleo, "j#$") and find(nexosufijo, "^[eiéí]") then
return (gsub(nucleo, "j#$", "g#"))..nexosufijo
end
if find(nucleo, "gu#$") and find(nexosufijo, "^[eiéí]") then
return (gsub(nucleo, "gu#$", "gü#"))..nexosufijo
end
if find(nucleo, "ç#$") and find(nexosufijo, "^[eiéí]") then
return (gsub(nucleo, "ç#$", "c#"))..nexosufijo
end
if find(nucleo, "c#$") and find(nexosufijo, "^[eiéí]") then
return (gsub(nucleo, "c#$", "qu#"))..nexosufijo
end
if find(nucleo, "[ií]([~#]?)$") and find(nexosufijo, "^([~#]?)[ií]") then
return nucleo..(gsub(nexosufijo, "^([~#]?)[ií]", "%1"))
end
if find(nucleo, "[bdfgkprtvaeiou]r#$") and find(nexosufijo, "^"..V.."r") then
return nucleo..sub(nexosufijo, 3)
elseif (find(nucleo, "[bcdgptr]r([~#]?)$") or find(nucleo, "[srxz]([~#]?)$")) and nexosufijo == "s" then
return nucleo.."~es~"
elseif find(nucleo, "[bcdgptr]r([~#]?)$") and nexosufijo == "" then
return nucleo.."~e~"
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
if not prefijo or not nucleonexosufijo then
return nil
end
return prefijo..nucleonexosufijo
end
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo.sufijo_inf
local sufijos_ = conjinfo[forma].sufijos and sufijos[sufijo_inf][conjinfo[forma].sufijos] or sufijos[sufijo_inf][forma]
local nucleos
if conjinfo[forma].nucleo == nil then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleopresa
elseif forma == "part" then
nucleos = conjinfo.nucleoperf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleopres1, conjinfo.nucleopres2, conjinfo.nucleopres2, conjinfo.nucleopresa, conjinfo.nucleopresa, conjinfo.nucleopres2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleopres1, conjinfo.nucleopres1, conjinfo.nucleopres1, conjinfo.nucleopres3, conjinfo.nucleopres3, conjinfo.nucleopres1}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleopres2, conjinfo.nucleopres1, conjinfo.nucleopres3, conjinfo.nucleopresa, conjinfo.nucleopres1}
elseif forma == "ind_fut" then
nucleos = {conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut}
elseif forma == "cond" then
nucleos = {conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut}
elseif forma == "ind_perf" then
nucleos = {conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf}
elseif forma == "subj_imp" then
nucleos = {conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n}
end
elseif conjinfo[forma].nucleo == false then
nucleos = {{}, {}, {}, {}, {}, {}}
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo_inf
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for _, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
for _,nucleo in ipairs(nucleos) do
local nexosufijo = combinar_nexo_sufijo(find(nucleo, "~eix~") and "" or nexo, sufijos_[1], sufijo_inf, forma)
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma, sufijo_inf)))
end
end
return
end
for i = JO, ELLS do
local p = tostr[i]
if conjinfo[forma][i] then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local k = i
while sufijos_[k] do
for _, n in ipairs(nucleos[i]) do
if (not find(n, "~eix~") and not conjinfo.nodial) or k <= 6 then -- de momento, desactivo las formas dialectales si el verbo es inco
local nexosufijo = combinar_nexo_sufijo(find(n, "~eix~") and "" or nexo, sufijos_[k], sufijo_inf, forma)
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo, forma, sufijo_inf)))
end
end
k = k + 6
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local arr = res[forma]
local t = {}
local tiempo, i = match(forma, "^(.*)(%d)$")
if not i then
i = 1
tiempo = forma
end
i = tonumber(i)
local rest_ = i < NOSALTRES and resto or resto_pl
local rest_pl_ = resto_pl
for _, v in ipairs(arr) do
local hs = auxiliar[tiempo]
local v2, v3
local rest = rest_
local rest_pl = rest_pl_
if hs then
rest = " "..v..rest
rest_pl = " "..v..rest_pl
v = auxiliar[tiempo][i]
if auxiliar[tiempo][i+6] then
v2 = auxiliar[tiempo][i+6]
end
if auxiliar[tiempo][i+12] then
v3 = auxiliar[tiempo][i+12]
end
end
if forma == "inf" or forma == "inf_comp" then
insert(t, adv..v..pron..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..v..pron..art..f_links(rest_pl))
end
elseif forma == "ger" or forma == "ger_comp" then
local vpron = v..pron
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..f(vpron)..art..f_links(rest_pl))
end
elseif forma == "part" then
insert(t, adv..f_links(v)..f_links(rest))
if (rest_pl ~= rest) then
insert(t, adv..f_links(v)..f_links(rest_pl))
end
elseif forma == "imper" then
local vpron = v
if pron == "se" then
local enc = find(v, V.."$") and v..REFLEXIVOS_POSPUESTOS_CONTRAIDOS[i] or v..REFLEXIVOS_POSPUESTOS[i]
vpron = enc
end
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
else
local vpron
if pron == "se" then
vpron = find(v, "^"..V) and REFLEXIVOS_ANTEPUESTOS_CONTRAIDOS[i]..v or REFLEXIVOS_ANTEPUESTOS[i]..v
else
vpron = v
end
local vpronart = vpron..art
insert(t, adv..(art == "" and f_links(vpronart) or f(vpronart))..f_links(rest))
if v2 then
if pron == "se" then
vpron = find(v2, "^"..V) and REFLEXIVOS_ANTEPUESTOS_CONTRAIDOS[i]..v2 or REFLEXIVOS_ANTEPUESTOS[i]..v2
else
vpron = v2
end
vpronart = vpron..art
insert(t, adv..(art == "" and f_links(vpronart) or f(vpronart))..f_links(rest))
end
if v3 then
if pron == "se" then
vpron = find(v3, "^"..V) and REFLEXIVOS_ANTEPUESTOS_CONTRAIDOS[i]..v3 or REFLEXIVOS_ANTEPUESTOS[i]..v3
else
vpron = v3
end
vpronart = vpron..art
insert(t, adv..(art == "" and f_links(vpronart) or f(vpronart))..f_links(rest))
end
end
end
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["paradigma"] = {lista = true},
["impersonal"] = {},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["nucleopres"] = {lista = true},
["núcleopres"] = {alias_de = "nucleopres"},
["nucleopresa"] = {lista = true},
["núcleopresa"] = {alias_de = "nucleopresa"},
["nucleoperf"] = {lista = true},
["núcleoperf"] = {alias_de = "nucleoperf"},
["nucleofut"] = {lista = true},
["núcleofut"] = {alias_de = "nucleofut"},
["nota"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local adv, r1 = match(tit, "^([sSnN][ío]"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiu]r)(s?e?)%-?(l?[oai]?s?)( .-)$")
if not resto then
v, pron, art, resto = match(r1, "^("..LETRA.."*re)(s?e?)%-?(l?[oai]?s?)( .-)$")
end
if not resto then
v, pron, art = match(r1, "^("..LETRA.."*[aeiu]r)(s?e?)%-?(l?[oai]?s?)$")
end
if not art then
v, pron, art = match(r1, "^("..LETRA.."*re)(s?e?)%-?(l?[oai]?s?)$")
end
if not resto then
resto = ""
end
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[ío]?"..ESPACIO.."?"..LETRA.."+( .-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
local sufijo_inf = match(v, "[aeiur][re]$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_inco
local es_puro
local es_irregular
for N = 1, max(1,
maxindex(args["paradigma"]),
maxindex(args["nucleopres"]),
maxindex(args["nucleopresa"]),
maxindex(args["nucleoperf"]),
maxindex(args["nucleofut"])) do
local conjinfo = {}
local encontre_irreg = false
for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
local rxx = match(v, rx)
if args["paradigma"][N] == p[1] or rxx then
conjinfo = deepcopy(p[3])
conjinfo.rxx = rxx
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 find(v, rx) then
if size(p[3]) == 0 then
paradigmas_reconocidos[p[1]] = true
end
for k, v in pairs(p[3]) do
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
encontre_reg = true
break
end
end
if encontre_reg then
break
end
end
assert(encontre_reg, "paradigma no reconocido")
conjinfo.nucleo_inf = conjinfo.nucleo
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
local v_ = gsub(v, "dur$", "dure") -- excepción: en dur no coincide nucleo + sufijo con el verbo entero, necesito forzarlo a que coincida para buscar el prefijo correctamente
if conjinfo.nucleo_inf == nil then -- puede ser false
if conjinfo.rxx then
conjinfo.nucleo_inf = sub(conjinfo.rxx, 1, max(len(conjinfo.rxx) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf), 0)) -- no busco regex porque pueden haberse cambiado
else
conjinfo.nucleo_inf = sub(v_, 1, max(len(v_) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf), 0)) -- no busco regex porque pueden haberse cambiado
end
end
if type(conjinfo.nucleo_inf) == "string" then
if not conjinfo.prefijo then
conjinfo.prefijo = sub(v_, 1, max(len(v_) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf), 0)) -- no busco regex porque pueden haberse cambiado
end
conjinfo.prefijo = gsub(conjinfo.prefijo, AV, quitar_tilde)
conjinfo.nucleo_inf = gsub(conjinfo.nucleo_inf, AV, quitar_tilde)
else
conjinfo.prefijo = ""
end
conjinfo.nucleopres = args["nucleopres"][N] and {args["nucleopres"][N]} or (conjinfo.nucleopres and conjinfo.nucleopres or {})
conjinfo.nucleopresa = args["nucleopresa"][N] and {args["nucleopresa"][N]} or (conjinfo.nucleopresa and conjinfo.nucleopresa or {})
conjinfo.nucleoperf = args["nucleoperf"][N] and {args["nucleoperf"][N]} or (conjinfo.nucleoperf and conjinfo.nucleoperf or {})
conjinfo.nucleofut = args["nucleofut"][N] and {args["nucleofut"][N]} or (conjinfo.nucleofut and conjinfo.nucleofut or {})
conjinfo.nucleopres1 = {}
conjinfo.nucleopres2 = {}
conjinfo.nucleopres3 = {}
local function esta_en_clase(verbo, arr)
for _,a in ipairs(arr) do
if find(verbo, a) then
return true
end
end
return false
end
-- si conjinfo.nucleo_inf == false, no conjugo nada
if conjinfo.nucleo_inf then
if conjinfo.nucleopres[1] == nil and conjinfo.sufijo_inf == "ir" then
if esta_en_clase(v, verbos_mixtos) then
conjinfo.nucleopres[1] = "INCO"
conjinfo.nucleopres[2] = "PURO"
elseif esta_en_clase(v, verbos_puros) then
conjinfo.nucleopres[1] = "PURO"
else
conjinfo.nucleopres[1] = "INCO"
end
end
local function parsear_nucleo(nucl_)
if not nucl_ then
return conjinfo.nucleo_inf
end
local nucl, marca = match(nucl_, "^(.*)([{%[].-[}%]])$")
if not marca then
nucl = nucl_
marca = ""
end
if nucl == "g" then
local aux = conjinfo.nucleo_inf
local sust1, sust2
aux, sust1 = gsubb(aux, "d$", "#g#")
aux, sust2 = gsubb(aux, "([aeio])u$", "%1#g#")
if not sust1 and not sust2 then
aux = aux.."#g#"
end
return aux..marca
end
if nucl == "i" then
return gsub(conjinfo.nucleo_inf, "^(.*)ei?(.-)$", "%1#i#%2")..marca
end
if nucl == "ï" then
return gsub(conjinfo.nucleo_inf, "^(.*)ei?(.-)$", "%1#ï#%2")..marca
end
if nucl == "u" then
return gsub(conjinfo.nucleo_inf, "^(.*)ou?(.-)$", "%1#u#%2")..marca
end
if nucl == "PURO" or nucl == "REG" then
return conjinfo.nucleo_inf..marca
end
if nucl == "INCO" then
return conjinfo.nucleo_inf..conjinfo.nexo_inf.."~eix~"..marca
end
if nucl == conjinfo.nucleo_inf then
return nucl..marca
end
return "#"..nucl.."#"..marca
end
local a, b, c
if conjinfo.nucleopres[1] then
for i,n_ in ipairs(conjinfo.nucleopres) do
a, b, c = match(n_, "^(.-)%-(.-)%-(.-)$")
if not c then
a, b = match(n_, "^(.-)%-(.-)$")
end
if not b then
a = n_
end
if find(a, "^INCO") then
insert_if_not(conjinfo.nucleopres1, parsear_nucleo(a))
insert_if_not(conjinfo.nucleopres2, parsear_nucleo(a))
insert_if_not(conjinfo.nucleopres3, conjinfo.nucleo_inf)
es_inco = true
else
insert_if_not(conjinfo.nucleopres1, parsear_nucleo(a))
insert_if_not(conjinfo.nucleopres2, parsear_nucleo(b))
insert_if_not(conjinfo.nucleopres3, c and parsear_nucleo(c) or ((a and not b) and parsear_nucleo(a) or conjinfo.nucleo_inf))
es_puro = true
end
end
else
insert_if_not(conjinfo.nucleopres1, conjinfo.nucleo_inf)
insert_if_not(conjinfo.nucleopres2, conjinfo.nucleo_inf)
insert_if_not(conjinfo.nucleopres3, conjinfo.nucleo_inf)
end
if not conjinfo.nucleoperf[1] and (a or c) and es_puro and not es_inco then
conjinfo.nucleoperf = deepcopy(conjinfo.nucleopres3)
elseif conjinfo.nucleoperf[1] then
for i,n_ in ipairs(conjinfo.nucleoperf) do
conjinfo.nucleoperf[i] = parsear_nucleo(n_)
conjinfo.hay_nucleoperf = true
end
else
insert_if_not(conjinfo.nucleoperf, conjinfo.nucleo_inf)
end
if conjinfo.nucleofut[1] then
for i,n_ in ipairs(conjinfo.nucleofut) do
conjinfo.nucleofut[i] = parsear_nucleo(n_)
end
else
insert_if_not(conjinfo.nucleofut, conjinfo.nucleo_inf)
end
if conjinfo.nucleopresa[1] then
for i,n_ in ipairs(conjinfo.nucleopresa) do
conjinfo.nucleopresa[i] = parsear_nucleo(n_)
end
else
insert_if_not(conjinfo.nucleopresa, conjinfo.nucleo_inf)
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
else
conjinfo.nucleo_inf = {}
end
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if find(e, 'PART') or not find(e, 'ADJ') then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, resto=resto, resto_pl=resto_pl,impers=args["impersonal"]}
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local impers = args["impersonal"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, impers)
end)
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
error("no implementado aún")
else
fila_pronombres_ind = {"", "(això)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(això)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que això)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(això)", color=COLOR_IMPER, header=true, class="pc"}
end
cs = 2
elseif impers == "36" then
fila_pronombres_ind = {"", "(això)", "(ells)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(això)", "(ells)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que això)", "(que ells)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(això)", "(ells)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_ind = {"", "jo", "tu", "el, ella, vostè", "nosaltres", "vosaltres, vós", "ells, elles, vostès", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "jo", "tu", "el, ella, vostè", "nosaltres", "vosaltres, vós", "ells, elles, vostès", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que jo", "que tu", "que el, que ella, que vostè", "que nosaltres", "que vosaltres, que vós", "que ells, que elles, que vostès", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tu)", "(vostè)", "(nosaltres)", "(vosaltres, vós)", "(vostès)", 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=COLOR_H, header=true}
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
else
resultante.inf.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.part.colspan = cs1-1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
t[5] = {{"Formas personales", colspan=cs}, color=COLOR_H, 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}, ic("ind_pres")}
t[9] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")}
t[10] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("ind_perf")}
t[11] = {{"Pretérito perifrástico", color=COLOR_IND, header=true}, ic("ind_peri")}
t[12] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")}
t[13] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("ind_perf_comp")}
t[14] = {{"Futuro", color=COLOR_IND, header=true}, ic("ind_fut")}
t[15] = {{"Futuro compuesto", color=COLOR_IND, header=true}, ic("ind_fut_comp")}
t[16] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("ind_anter")}
t[17] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true}
t[18] = fila_pronombres_cond
t[19] = {{"Condicional simple", color=COLOR_COND, header=true}, ic("cond")}
t[20] = {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("cond_comp")}
t[21] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true}
t[22] = fila_pronombres_subj
t[23] = {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")}
t[24] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")}
t[25] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")}
t[26] = {{"Pretérito perifrástico", color=COLOR_SUBJ, header=true}, ic("subj_peri")}
t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")}
t[28] = {{f("Pretérito anterior{†}"), color=COLOR_SUBJ, header=true}, ic("subj_anter")}
t[29] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true}
t[30] = fila_pronombres_imper
if mostrar_imper then
t[31] = {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")}
else
t[31] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}}
end
t[32] = {{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[33] = {{args["nota"] and args["nota"] or "", colspan=cs}}
local paradigmas_t = {}
local cats = {}
if es_inco and es_puro then
paradigmas_reconocidos["acudir"] = true
paradigmas_reconocidos["partir"] = nil
paradigmas_reconocidos["dormir"] = nil
elseif es_inco then
paradigmas_reconocidos["acudir"] = nil
paradigmas_reconocidos["partir"] = true
paradigmas_reconocidos["dormir"] = nil
elseif es_puro then
paradigmas_reconocidos["acudir"] = nil
paradigmas_reconocidos["partir"] = nil
paradigmas_reconocidos["dormir"] = true
end
if es_irregular then
insert(cats, "CA:Verbos irregulares")
paradigmas_reconocidos["amar"] = nil
paradigmas_reconocidos["temer"] = nil
paradigmas_reconocidos["acudir"] = nil
paradigmas_reconocidos["partir"] = nil
paradigmas_reconocidos["dormir"] = nil
paradigmas_reconocidos["abatre"] = nil
else
insert(cats, "CA:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "CA:Verbos del paradigma "..p)
end
impers = impers or ""
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "CA:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "CA:Verbos terciopersonales")
end
if find(impers, "^ind") then
insert(cats, "CA:Verbos de objeto indirecto")
end
if defectivo then
insert(cats, "CA:Verbos defectivos")
end
local inc_enc
if sufijo_inf == "ar" then
insert(cats, "CA:Verbos de la primera conjugación")
elseif sufijo_inf == "er" then
insert(cats, "CA:Verbos de la segunda conjugación")
elseif sufijo_inf == "ir" then
insert(cats, "CA:Verbos de la tercera conjugación")
if not es_inco and not es_puro then
insert(cats, "CA:Verbos puros")
es_puro = true
inc_enc = "puro"
elseif es_inco and es_puro then
insert(cats, "CA:Verbos incoativos")
insert(cats, "CA:Verbos puros")
inc_enc = "incoativo/puro"
elseif es_inco then
insert(cats, "CA:Verbos incoativos")
inc_enc = "incoativo"
elseif es_puro then
insert(cats, "CA:Verbos puros")
inc_enc = "puro"
end
else
insert(cats, "CA:Verbos de la cuarta conjugación")
end
local q_t = {es_irregular and "irregular" or "regular", inc_enc}
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..concat(q_t, ", ")..")",
t,
ns == 0 and cats or {})
end
return export
pki3ehaf85wyz2j0yjuyi53ncfj2rxd
Módulo:flex/ast
828
1055819
6118165
6117308
2026-06-16T02:18:09Z
TMCbot
164594
.
6118165
Scribunto
text/plain
-- Flexión del asturiano
-- Autor: Tmagc
local export = {}
local max = math.max
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local len = m_str.len
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local vocal_no_tilde = "aeiouAEIOU"
local vocal_tilde = "áéíóúÁÉÍÓÚ"
local vocal = vocal_no_tilde..vocal_tilde
local cons = "bcdfghjklmnñpqrstvwxyzḥḷBCFGHJKLMNÑPQRSTVWXYZḤḶ"
local espacios = "%-‐%s"
local guion = "%-"
local VOCAL = "["..vocal.."]"
local CONS = "["..cons.."]"
local CONS_SALVO_H = "[^"..vocal.."hH~#{}]"
local ESPACIO = "["..espacios.."]"
local LETRA = "[^"..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 try(p, rx, pl, f, fpl, n, pl2, n2, femenino)
local p2, sust = gsubb(p, rx, "~%0~")
if not sust then
return nil
end
if not pl then
return {m={p2}, p={}, f={}, fp={}, n={}}
end
if not femenino or not f then
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={}, fp={}, n={}}
else
return {m={p2}, p={gsub1(p, rx, pl)}, f={}, fp={}, n={}}
end
end
if not n then
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}, n={}}
else
return {m={p2}, p={gsub1(p, rx, pl)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}, n={}}
end
end
if pl2 and n2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}, n={gsub1(p, rx, n), gsub1(p, rx, n2)}}
elseif pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}, n={gsub1(p, rx, n)}}
elseif n2 then
return {m={p2}, p={gsub1(p, rx, pl)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}, n={gsub1(p, rx, n), gsub1(p, rx, n2)}}
end
return {m={p2}, p={gsub1(p, rx, pl)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}, n={gsub1(p, rx, n)}}
end
-- https://www.alladixital.org/wp-content/uploads/2015/03/Normes-Ortogr%C3%A1fiques-7%C2%AA-edici%C3%B3n-2012.pdf
local function flexionar_palabra(p, g, forzar_s, on)
local adj = g == "mf"
local r, v, c
r, v, c = match(p, "^([^áéíóú]*)([aeiou])([iu]?"..CONS.."+[iu]?[aeiou][iu]?[n])$") -- llanas en n --> agrego tilde
if not c then
r, v, c = match(p, "^([^áéíóú]*[aeo])([aeo])("..CONS.."*[iu]?[aeiou][iu]?[n])$") -- llanas en n --> agrego tilde
end
if c then
local w = agregar_tilde[v]
return {m={r..v.."~"..c.."~"}, p={r..w..c.."~es~"}, f={}, fp={}, n={}}
end
r, v, c = match(p, "^([^áéíóú]*)([aeiou])("..CONS.."+e)u$") -- llanas en diptongo terminado en -eu --> agrego tilde + -os cf. [[gluteu]], [[aereu]]
if c then
local w = agregar_tilde[v]
if adj then
return {m={r..v..c.."~u~"}, p={r..w..c.."~os~"}, f={r..w..c.."~a~"}, fp={r..w..c.."~es~"}, n={r..w..c.."~o~"}}
end
return {m={r..v..c.."~u~"}, p={r..w..c.."~os~"}, f={}, fp={}, n={}}
end
local function rep_a(v, c) return "~"..quitar_tilde[v]..c.."a~" end
local function rep_o(v, c) return "~"..quitar_tilde[v]..c.."o~" end
local function rep_es(v, c) return "~"..quitar_tilde[v]..c.."es~" end
local function rep_os(v, c) return "~"..quitar_tilde[v]..c.."os~" end
local es_monosilabo = find(p, "^"..CONS.."-[iuü]?[iu]?[aeoiu][iu]?"..CONS.."-$")
local fl = try(p, es_monosilabo and "es$" or "és$", "~eses~", "~esa~", "~eses~", "~és~", nil, "~eso~", adj)
or try(p, "[aeiou][íú]s$", "~%0es~", "~%0a~", "~%0es~", "~%0o~", nil, nil, adj) -- hiatos como en [[país]]
or try(p, es_monosilabo and "([aiou])(s)$" or "([áíóú])(s)$", rep_es, rep_a, rep_es, rep_o, nil, nil, adj)
or try(p, es_monosilabo and "on$" or "ón$", "~ones~", "~ona~", "~ones~", "~ón~", on and "~onos~" or nil, "~ono~", adj)
or try(p, es_monosilabo and "([ae])(n)$" or "([áé])(n)$", rep_es, rep_a, rep_es, rep_o, nil, nil, adj)
or try(p, "[aeiou][íú]n$", "~%0os~", "~%0a~", "~%0es~", "~%0o~", nil, nil, adj) -- hiatos como en [[saín]]
or try(p, es_monosilabo and "([iu])(n)$" or "([íú])(n)$", rep_os, rep_a, rep_es, rep_o, nil, nil, adj)
or try(p, "[aá]u$", "~aos~", "~ada~", "~aes~", "~ao~", nil, nil, adj)
or try(p, "[oó]u$", "~oos~", "~oa~", "~oes~", "~oo~", nil, nil, adj)
or try(p, "éu$", "~eos~", "~eda~", "~ees~", "~eo~", nil, nil, adj)
or try(p, "íu$", "~íos~", "~ida~", "~íes~", "~ío~", nil, nil, adj)
or try(p, "izu$", "~izos~", "~iza~", "~ices~", "~izo~", nil, nil, adj)
or try(p, "nte$", "~ntes~")
or try(p, "c[ou]$", "~cos~", "~ca~", "~ques~", "~co~", nil, nil, adj)
or try(p, "gu[ou]$", "~guos~", "~gua~", "~gües~", "~guo~", nil, nil, adj)
or try(p, "g[ou]$", "~gos~", "~ga~", "~gues~", "~go~", nil, nil, adj)
or try(p, "z[ou]$", "~zos~", "~za~", "~ces~", "~zo~", nil, nil, adj)
or try(p, "[ou]$", "~os~", "~a~", "~es~", "~o~", nil, nil, adj)
or try(p, "az$", "~azos~", "~az~", "~aces~", "~az~", nil, nil, adj) -- debe ir antes que za?$
or try(p, "ca$", "~ques~")
or try(p, "gua$", "~gües~")
or try(p, "ga$", "~gues~")
or try(p, "(["..vocal_tilde.."].*[aei])da$", "~%1des~") -- las esdrújulas mantienen la d intervocálica
or try(p, "peda$", "~pedes~") -- las que terminan en -peda mantienen la d intervocálica
or try(p, "([ae])d?a$", "~%1es~")
or try(p, "ida$", "~íes~")
or try(p, "za?$", "~ces~")
or try(p, "([dt])á$", "~%1aes~") -- equivale a -dad (ciudad) creo que innecesario
or try(p, "tú$", "~túes~") -- equivale a -tud (virtud)
or try(p, "a$", "~es~")
or try(p, VOCAL.."$", "~%0s~")
or try(p, "ol$", "~%0es~", "~%0a~", "~%0es~", "~%0~", nil, nil, adj)
or try(p, "or$", "~%0es~", "~%0a~", "~%0es~", "~%0~", nil, "~%0o~", adj)
or try(p, VOCAL.."[lrxñ]$", "~%0es~") -- pex, limaz, animal
or try(p, "[ns]$", nil) -- esdrújulas en n, llanas/esdrújulas en s
or try(p, VOCAL..CONS.."$", "~%0s~")
or try(p, "ch$", forzar_s and "~%0s~" or "~%0es~")
or try(p, CONS.."[sz]$", nil)
or try(p, "[sz]"..CONS.."$", nil)
or try(p, CONS..CONS.."$", "s")
if fl then
return fl
end
error("No se pudo determinar la flexión de la palabra")
end
local function flexion_sust_adj(palabras, g, forzar_s, on, copulativa)
local a, separador, b = match(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, forzar_s, on)
local flex2 = copulativa and flexionar_palabra(b, g, forzar_s, on) or {m={b}, p={}, f={}, fp={}, n={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex1.n = flex1.n[1] and flex1.n or flex1.m
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
flex2.n = flex2.n[1] and flex2.n or flex2.m
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.n, flex.m) then
flex.n = {}
end
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto = match(palabras, "^("..guion.."?"..LETRA.."+)(.-)$")
local flex = flexionar_palabra(p, g, forzar_s, on)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["nota"],
{},
ns == 0 and cats or {}
)
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_ = flexion_sust_adj(title, modo, args["s"], args["on"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." regulares")
elseif find(title, LETRA..ESPACIO..LETRA) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["nota"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"neutro", flex.n},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
[5] = {alias_de="n"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["on"] = {tipo = "bool"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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"] = {lista = true},
["nota"] = {},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "AST:Locuciones sustantivas" or "AST:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
[5] = {alias_de="n"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["on"] = {tipo = "bool"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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"] = {lista = true},
["nota"] = {},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "AST:Locuciones adjetivas" or "AST:Adjetivos")
end
local YO, TU, EL, NOSOTROS, VOSOTROS, ELLOS = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"yo", "tu", "él, elli, (v)usté", "nosotros", "vosotros", "(v)ustedes, ellos"}
local PRONOMBRES_SUBJ = {"que yo", "que tu", "que él, que elli, (v)usté", "que nosotros", "que vosotros", "que (v)ustedes, ellos"}
local PRONOMBRES_IMP = {"―", "(tu)", "((v)usté)", "(nosotros)", "(vosotros)", "((v)ustedes)"}
local IMPERSONALES = {"", "", "(ello)", "", "", "(ellos)"}
local IMPERSONALES_SUBJ = {"", "", "(que ello)", "", "", "(que ellos)"}
local REFLEXIVOS = {"me", "te", "se", "nos", "vos", "se"}
local function obtener_pronombre(forma, impers, indirecto)
if indirecto then
return nil
end
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local formas_no_personales = {
["ger"] = true,
["part"] = true,
["inf"] = true,
}
local formas_personales = {
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["ind_pluperf"] = true,
["fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["cond"] = true,
["imper"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["ind_perf_comp"] = true,
["ind_anter"] = true,
["fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
}
local sufijos = {
{
["ger"] = {"ando"},
["part"] = {"ao"},
["ind_pres"] = {"o", "es", "a", "amos", "áis", "en"},
["ind_imp"] = {"aba", "abes", "aba", "ábamos", "abais", "aben",
nil, nil, nil, "ábemos", "abeis", nil},
["ind_perf"] = {"é", "asti", "ó", "emos", "astis", "aron",
nil, "esti", nil, nil, "estis", nil},
["ind_perf_alt"] = {"uvi", "uvisti", "uvo", "uvimos", "uvistis", "uvieron",
"evi", "uviesti", "evo", "uviemos", "uviestis"
},
["ind_pluperf"] = {"ara", "aras", "ara", "áramos", "arais", "aran",
"are", "ares", "are", "áremos", "areis", "aren"},
["ind_pluperf_alt"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["fut"] = {"aré", "arás", "ará", "aremos", "aréis", "arán"},
["subj_pres"] = {"e", "as", "e", "emos", "éis", "an",
nil, "es", nil, nil, nil, "en"},
["subj_imp"] = {"ara", "aras", "ara", "áramos", "arais", "aran",
"are", "ares", "are", "áremos", "areis", "aren"},
["subj_imp_alt"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["cond"] = {"aría", "aríes", "aría", "aríamos", "aríais", "aríen",
nil, nil, nil, "aríemos", "aríeis", nil},
["imper"] = {"-", "a", "e", "emos", "ái", "an",
nil, nil, nil, nil, nil, "en"}
},
{
["ger"] = {"iendo"},
["part"] = {"ío"},
["ind_pres"] = {"o", "es", "e", "emos", "éis", "en"},
["ind_imp"] = {"ía", "íes", "ía", "íamos", "íais", "íen",
nil, nil, nil, "íemos", "íeis", nil},
["ind_perf"] = {"í", "iesti", "ió", "iemos", "iestis", "ieron",
nil, "isti", nil, "imos", "istis", nil},
["ind_perf_alt"] = {"i", "isti", "o", "imos", "istis", "ieron",
nil, "iesti", nil, "iemos", "iestis"
},
["ind_pluperf"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["ind_pluperf_alt"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["fut"] = {"eré", "erás", "erá", "eremos", "eréis", "erán"},
["subj_pres"] = {"a", "as", "a", "amos", "áis", "an"},
["subj_imp"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["subj_imp_alt"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["cond"] = {"ería", "eríes", "ería", "eríamos", "eríais", "eríen",
nil, nil, nil, "eríemos", "eríeis", nil},
["imper"] = {"-", "i", "a", "amos", "éi", "an"}
},
{
["ger"] = {"iendo"},
["part"] = {"ío"},
["ind_pres"] = {"o", "es", "e", "imos", "ís", "en"},
["ind_imp"] = {"ía", "íes", "ía", "íamos", "íais", "íen",
nil, nil, nil, "íemos", "íeis", nil},
["ind_perf"] = {"í", "iesti", "ió", "iemos", "iestis", "ieron",
nil, "isti", nil, "imos", "istis", nil},
["ind_perf_alt"] = {"i", "isti", "o", "imos", "istis", "ieron",
nil, "iesti", nil, "iemos", "iestis"
},
["ind_pluperf"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["ind_pluperf_alt"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["fut"] = {"iré", "irás", "irá", "iremos", "iréis", "irán"},
["subj_pres"] = {"a", "as", "a", "amos", "áis", "an"},
["subj_imp"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["subj_imp_alt"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["cond"] = {"iría", "irías", "iría", "iríamos", "iríais", "iríen",
nil, nil, nil, "iríemos", "iríeis", nil},
["imper"] = {"-", "i", "a", "amos", "íi", "an"}
},
}
local pronombres = {"me", "te", "se", "nos", "os", "se"}
local auxiliar = {
["inf_comp"] = {"tener"},
["ger_comp"] = {"teniendo"},
["ind_perf_comp"] = {"tengo", "tienes", "tien", "tenemos", "tenéis", "tienen"},
-- ["ind_pluperf"] = {"tenía", "teníes", "tenía", "teníamos", "teníais", "teníen"},
["ind_anter"] = {"tuvi", "tuvisti", "tuvo", "tuvimos", "tuvistis", "tuvieron"},
["fut_comp"] = {"tendré", "tendrás", "tendrá", "tendremos", "tendréis", "tendrán"},
["cond_comp"] = {"tendría", "tendríes", "tendría", "tendríamos", "tendríais", "tendríen"},
["subj_perf"] = {"tenga", "tengas", "tenga", "tengamos", "tengáis", "tengan"},
["subj_pluperf"] = {"tuviera", "tuvieras", "tuviera", "tuviéramos", "tuvierais", "tuvieran",
"tuviese", "tuvieses", "tuviese", "tuviésemos", "tuvieseis", "tuviesen"},
}
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 find(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
local _, cnt = gsub(sufijo, "[aeiou]", "")
if cnt == 1
and not find(sufijo, "[áéíóú]")
and find(sub(sufijo, -1), "[aeiouns]") then
-- no existe adecúo
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
end
if find(sufijo, "^ar") then
if find(nexo, "^[~#]?[bdeir]?r[~#]?$") then
return nexo..sub(sufijo, 3)
end
end
else -- ER/IR/ÍR
if sufijo == "e" then -- 3ra del presente
if nexo == "C" then
return "~z~"
end
if nexo == "L" then -- l de goler
return "~l~"
end
if nexo == "l" then -- l de valir, salir
return "~l~"
end
if nexo == "R" then
return "~r~"
end
if nexo == "S" then
return "~s~"
end
if nexo == "X" then
return "~x~", "x"..sufijo
end
end
if sufijo == "i" then -- 1ra del imperativo
if nexo == "C" then
return "~z~"
end
if nexo == "L" then -- l de goler
return "~l~", "l"..sufijo
end
if nexo == "l" then -- l de valir, salir
return "~l~"
end
if nexo == "R" then
return "~r~"
end
if nexo == "S" then
return "~s~", "s"..sufijo
end
if nexo == "X" then
return "~x~", "x"..sufijo
end
end
if find(sufijo, "^[aáoóuú]") then
if nexo == "C" then
return "~z~"..sufijo
end
if nexo == "c" then
return "~z~"..sufijo
end
if nexo == "g" then
return "~x~"..sufijo
end
if nexo == "gu" then
return "g~"..sufijo.."~"
end
if nexo == "qu" then
return "~c~"..sufijo
end
end
if find(sufijo, "^[ei][ns]?$") then
if nexo == "gü" then
return "g~ú~"..(gsub(sufijo, "e", "i"))
end
if nexo == "u" then
return "~ú~"..(gsub(sufijo, "e", "i"))
end
end
if find(sufijo, "^ie") then
if find(nexo, "u#$") then -- ir --> fuera (subj)
return nexo..sub(sufijo, 2)
end
if find(nexo, "o#$") then -- ir --> fora (subj)
return nexo..sub(sufijo, 3)
end
end
if find(sufijo, "^ié") then
if find(nexo, "u#$") then -- ir --> fuera (subj)
return nexo..sub(sufijo, 2)
end
if find(nexo, "o#$") then -- ir --> fora (subj)
return sub(nexo, 1, -3).."ó#"..sub(sufijo, 3)
end
end
if find(sufijo, "^í$") then
if nexo == "#x#" or nexo == "~x~" then
return nexo.."~i~"
end
end
if find(sufijo, "^ió$") then
if nexo == "#x#" or nexo == "~x~" then
return nexo.."~o~"
end
end
if find(sufijo, "^[ie]r") then
if find(nexo, "^[~#]?[bdeir]?r[~#]?$") then
return nexo..sub(sufijo, 3)
end
end
if find(sufijo, "^[aeoáéó]") then
if nexo == "gü" then
return "g~uy~"..sufijo
end
if nexo == "u" then
return "u~y~"..sufijo
end
end
if find(sufijo, "^i[aeoáéó]") then
if nexo == "ñ" or nexo == "ll" or nexo == "#x#" or nexo == "~x~" or nexo == "x" then
return "~"..nexo..sub(sufijo, 2).."~"
end
if nexo == "X" then
return "~x"..sub(sufijo, 2).."~"
end
if nexo == "gü" then
return "g~uy~"..sub(sufijo, 2)
end
if nexo == "u" then
return "u~y~"..sub(sufijo, 2)
end
if nexo == "e" then
return nexo.."~y~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i[^aeiouáéíóú]") then
if nexo == "e" then
return nexo.."~í~"..sub(sufijo, 2)
end
end
end
if nexo == "C" then
return "c"..sufijo
end
if nexo == "L" then
return "l"..sufijo
end
if nexo == "R" then
return "r"..sufijo
end
if nexo == "S" then
return "s"..sufijo
end
if nexo == "X" then
return "x"..sufijo
end
return nexo..sufijo
end
local function combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf)
local nucleo_ = gsub(nucleo, "[~#]", "")
local nexosufijo_ = gsub(nexosufijo, "[~#]", "")
if find(nucleo_, "ca[yi]$") and nexosufijo_ == "i" then -- [[cayer]], pero no [[coyer]]
return gsub1(nucleo, "[yi]([~#]?)$", "%1")..nexosufijo
elseif find(nucleo_, "[xy]([~#]?)$") and find(nexosufijo_, "^i"..VOCAL) then -- yió -> yó, xió -> xó
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1")
elseif find(nucleo_, "i$") and find(nexosufijo_, "^i") then -- se juntan dos íes o y-i (ej. reír, freír, oír)
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1")
elseif find(nucleo_, "í[~#]?$") and find(nexosufijo_, "^á") then -- cambiar síáis por síais
return nucleo..gsub1(nexosufijo, "^([~#]?)á", "%1a")
elseif find(nucleo_, "^[^áéíóú]-[aeiou]h?$") and find(nexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- sufijo con i/u tónica (caISTE, caIMOS, caIDO, oID, reHÚyo etc.)
return nucleo..gsub1(nexosufijo, "^([~#]?h?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleo_, "[^gq][aeiou]$") and find(nexosufijo_, "^i[aeiouáéíóú]") then -- se junta [aeiou]i[aeiouáéíóú] -> cambio a y (creYO) PERO [[chinguiar]] -> chinguIando
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~y~")
elseif find(nucleo_, "[aeiou]$") and find(nexosufijo_, "^id$") then -- reír -> reÍd, embaír -> embaÍd
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~í~")
elseif find(nucleo_, "[bdeir]r[~#]?$") and find(nexosufijo_, "^er.") then -- moler, moldr
return nucleo..sub(nexosufijo, 3)
elseif find(nucleo_, "^[^aeiouáéíóú]+$")
and (find(nexosufijo_, "^"..CONS.."?"..CONS.."?".."[iuü]?[áéó][iuü]?[ns]?$") or find(nexosufijo_, "^[íú][ns]?$")) then -- caso de dar, vos *d+ás, debo quitar la tilde
return nucleo..gsub1(nexosufijo, "[áéíóú]", function(v) return "~"..quitar_tilde[v].."~" end)
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
local prefijo_ = gsub(prefijo, "[~#]", "")
local nucleonexosufijo_ = gsub(nucleonexosufijo, "[~#]", "")
if prefijo_ and find(prefijo_, "[aeiou]") and not find(prefijo_, "[áéíóú]") then
if find(prefijo_, "^[^áéíóú]-[aeiou]h?$") and find(nucleonexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- nucleonexosufijo con i/u tónica (rehacer -> rehíce)
return prefijo..gsub1(nucleonexosufijo, "^([~#]?h?[~#]?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleonexosufijo_, "^("..CONS.."*[iuü]?)([aeiou])([iuü]?[ns]?)$") then -- monosílabo: prever --> prevén
return prefijo..gsub1(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"] = {
{"añunciar", {"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ü"
}},
{"quer", {"quer$"}, { -- Existe esto??
nexo = "qu"
}},
{"paecer", {"[aeious]cer$"}, {
nexo = "C"
}},
{"vencer", {"[^aeious]cer$"}, { -- los verbos en -scer NO entran en este paradigma (ver fosforescer o evanescer)
nexo = "c"
}},
{"caler", {"[ao]ler$"}, { -- caler, goler
nexo = "L"
}},
{"querer", {"erer$"}, {
nexo = "R"
}},
{"coser", {"[aeiou]ser$"}, {
nexo = "S"
}},
{"texer", {"[aeiou]xer$"}, {
nexo = "X"
}},
{"lleer", {"eer$"}, {
nexo = "e"
}},
{"proteger", {"ger$"}, {
nexo = "g"
}},
{"atañer", {"ñer$"}, {
nexo = "ñ"
}},
{"uer", {"uer$"}, { -- Existe esto??
nexo = "u"
}},
{"emerxer", {"xer$"}, {
nexo = "x"
}},
{"temer", {"er$"}, {
}},
},
["ir"] = {
{"escabullir", {"llir$"}, {
nexo = "ll"
}},
{"distinguir", {"guir$"}, {
nexo = "gu"
}},
{"argüir", {"güir$"}, {
nexo = "gü"
}},
{"delinquir", {"quir$"}, {
nexo = "qu"
}},
{"llucir", {"[aeious]cir$"}, {
nexo = "C"
}},
{"fruncir", {"[^aeious]cir$"}, {
nexo = "c"
}},
{"inxerir", {"erir$"}, {
nexo = "R"
}},
{"tusir", {"[aeiou]sir$"}, {
nexo = "S"
}},
{"elixir", {"[aeiou]xir$"}, {
nexo = "X"
}},
{"dirigir", {"gir$"}, {
nexo = "g"
}},
{"gruñir", {"ñir$"}, {
nexo = "ñ"
}},
{"construir", {"uir$"}, { -- var. construyir
nexo = "u"
}},
{"finxir", {"xir$"}, {
nexo = "x"
}},
{"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 = {nucleo = "and"},
ind_pluperf = {nucleo = "anduv"},
subj_imp = {nucleo = "anduv"},
}},
{"dar", {"^d?e?s?dar$"}, { -- no pueden ir otros verbos como "andar o quedar"
nucleo = "d",
ind_pres = {{"doi", "do"}, {"das"}, nil, nil, nil, {"dan"}},
ind_perf = {sufijo_inf = "er"},
ind_pluperf = {sufijo_inf = "er"},
subj_pres = {{"dea"}, {"deas"}, {"dea"}, {"deamos"}, {"deáis"}, {"dean"}},
subj_imp = {sufijo_inf = "er"},
imper = {nil, nil, {"dea"}, {"deamos"}, nil, {"dean"}},
}},
{"errar", {"^errar$"}, {
nucleo = "err",
alt = {"ye"},
}},
{"inhestar", {"inhestar$"}, {
alt = {"ie"},
part = {"inhiesto"}
}},
{"tar", {"^tar$"}, {
ind_pres = {{"toi", "to"}, {"tas"}, nil, nil, nil, {"tán"}},
ind_perf = {nucleo = "t"},
ind_pluperf = {nucleo = "tuv"},
subj_pres = {{"tea"}, {"teas"}, {"tea"}, {"teamos"}, {"teáis"}, {"tean"}},
subj_imp = {nucleo = "tuv"},
imper = {nil, nil, {"tea"}, nil, {"tai"}, {"tean"}}
}},
--{"ensugar", {"ensugar$"}, {
-- part = {"ensugao", "ensucho"},
--}},
{"triar", {"triar$"}, {
nexo = "i",
}},
{"aislar", {"aislar$"}, {
alt = {"í"}
}},
{"avergoñar", {"avergoñar$"}, {
alt = {"üe"}
}},
{"auñar", {"^auñar$"}, { -- REVISAR
alt = {"ú"}
}},
{"contar", {"contar$"}, {
alt = {"ue"}
}},
{"pensar", {"^pensar$"}, { -- no puede ir compensar
alt = {"ie"}
}},
},
["er"] = {
{"caber", {"^caber$"}, {
ind_pres = {{"quepo"}},
fut = {nucleo = "ca", nexo = "#br#"},
ind_perf = {nucleo = "cup"},
ind_pluperf = {nucleo = "cup"},
subj_pres = {nucleo = "quep"},
subj_imp = {nucleo = "cup"},
cond = {nucleo = "ca", nexo = "#br#"},
imper = {nil, nil, {"quepa"}, {"quepamos"}, nil, {"quepan"}}
}},
{"caer", {"caer$"}, {
nucleo = "ca",
ind_pres = {{"caigo"}, nil, {"cai"}},
subj_pres = {nucleo = "caig"},
imper = {nil, nil, {"caiga"}, {"caigamos"}, nil, {"caigan"}}
}},
{"cayer", {"cayer$"}, {
ind_pres = {nil, {"caes"}, {"cai"}},
}},
{"encender", {"encender$"}, {
alt = {"ie"},
-- part = {"encendío", "encenso"}, -- encenso adjetivo??
}},
{"facer", {"[hfj]acer$"}, { -- REVISAR
nucleo = "a",
nexo = "c", -- evitar "C", necesito forzarlo
part = {"echo"},
ind_pres = {{"ago"}, {"aes"}, {"ai"}, nil, nil, {"aen"}},
ind_perf = {nucleo = "i"},
ind_pluperf = {nucleo = "i"},
fut = {nucleo = "a", nexo = "#dr#"},
subj_pres = {nucleo = "ag", nexo = ""},
subj_imp = {nucleo = "i"},
cond = {nucleo = "a", nexo = "#dr#"},
imper = {nil, {"ai"}, {"aga"}, {"agamos"}, nil, {"agan"}}
}},
{"faer", {"[hfj]aer$"}, { -- REVISAR
nucleo = "a",
part = {"echo"},
ind_pres = {{"aigo"}, nil, {"ai"}},
ind_perf = {nucleo = "ix"},
ind_pluperf = {nucleo = "ix"},
fut = {nucleo = "a", nexo = "#ir#"},
subj_pres = {nucleo = "aig", nexo = ""},
subj_imp = {nucleo = "ix"},
cond = {nucleo = "a", nexo = "#ir#"},
imper = {nil, nil, {"aiga"}, {"aigamos"}, nil, {"aigan"}}
}},
{"haber", {"^haber$"}, {
ind_pres = {{"he"}, {"has"}, {"ha", "hai{IMPERSONAL}"}, {"hemos", "habemos"}, nil, {"han"}},
ind_perf = {nucleo = "hub", {"hubi", "hebi"}, nil, {"hubo", "hebo"}},
ind_pluperf = {nucleo = "hub"},
fut = {nucleo = "ha", nexo = "#br#"},
subj_pres = {nucleo = {"hay", "heb"}},
subj_imp = {nucleo = "hub"},
cond = {nucleo = "ha", nexo = "#br#"},
imper = {nil, {"he{†}", "habe{†}"}, {"he{†}", "habe{†}"}, {"haya{†}"}, {"hayamos{†}"}, nil, {"hayan{†}"}},
}},
{"moler", {"[^g]oler$"}, { -- no goler porque muta a üe
nucleo = "o",
nexo = "L",
alt = {"ue"},
ind_pres = {{"uelo", "uelgo"}},
subj_pres = {nucleo = {"uel", "uelg"}, nexo = "", nil, nil, nil, {"olamos", "olgamos"}, {"oláis", "olgáis"}},
fut = {nucleo = {"ol", "oldr"}, nexo = ""},
cond = {nucleo = {"ol", "oldr"}, nexo = ""},
imper = {nil, nil, {"uela", "uelga"}, {"olamos", "olgamos"}, nil, {"uelan", "uelgan"}}
}},
{"morrer", {"morrer$"}, {
nucleo = "morr",
alt = {"ue"},
part = {"muerto"},
}},
{"goler", {"^goler$"}, {
alt = {"üe"},
}},
{"volver", {"olver$"}, {
nucleo = "olv",
alt = {"ue"},
part = {"uelto"}
}},
{"oyer", {"^oyer$"}, { -- pero no coyer
ind_pres = {{"oigo"}},
subj_pres = {nucleo = "oig"},
imper = {nil, nil, nil, {"oiga"}, {"oigamos"}, nil, {"oigan"}}
}},
-- placer sale solo como sust.
{"poder", {"poder$"}, {
nucleo = "pod",
alt = {"ue"},
ger = {"pudiendo"},
ind_perf = {nucleo = "pud"},
ind_pluperf = {nucleo = "pud"},
fut = {nucleo = "po", nexo = "#dr#"},
subj_imp = {nucleo = "pud"},
cond = {nucleo = "po", nexo = "#dr#"},
}},
{"poner", {"poner$"}, {
nucleo = "pon",
part = {"puesto"},
ind_pres = {{"pongo"}},
ind_perf = {nucleo = "punx"},
ind_pluperf = {nucleo = "punx"},
fut = {nucleo = "pon", nexo = "#dr#"},
subj_pres = {nucleo = "pong"},
subj_imp = {nucleo = "punx"},
cond = {nucleo = "pon", nexo = "#dr#"},
imper = {nil, {"pon"}, {"ponga"}, nil, nil, {"pongan"}},
}},
{"proveer", {"proveer$"}, {
nucleo = "prov",
part = {"provisto"}
}},
{"querer", {"querer$"}, { -- REVISAR
nucleo = "quer",
alt = {"ie"},
ind_perf = {nucleo = "quix"},
ind_pluperf = {nucleo = "quix"},
fut = {nucleo = "que", nexo = "#dr#"},
subj_imp = {nucleo = "quix"},
cond = {nucleo = "que", nexo = "#dr#"},
}},
{"raer", {"^raer$"}, { -- no contraer, etc. REVISAR
ind_pres = {{"raigo"}},
subj_pres = {nucleo = "raig"},
imper = {nil, nil, {"raiga"}, nil, nil, {"raigan"}}
}},
-- rayer regular?
{"roer", {"roer$"}, { -- REVISAR
nucleo = "ro",
ind_pres = {{"roigo"}},
subj_pres = {nucleo = "roig"},
imper = {nil, nil, {"roiga"}, nil, nil, {"roigan"}}
}},
-- royer regular?
{"romper", {"^romper$", "^arromper$"}, { -- no corromper, derromper, entrerromper
nucleo = "romp",
alt = {"ue"},
part = {"roto"}
}},
{"corromper", {"romper$"}, {
nucleo = "romp",
alt = {"ue"},
}},
{"saber", {"saber$"}, {
nucleo = "sab",
ind_pres = {{"sé"}},
ind_perf = {nucleo = "sup"},
ind_pluperf = {nucleo = "sup"},
fut = {nucleo = "sa", nexo = "#br#"},
subj_pres = {nucleo = "sep"},
subj_imp = {nucleo = "sup"},
cond = {nucleo = "sa", nexo = "#br#"},
imper = {nil, nil, {"sepa"}, nil, nil, {"sepan"}}
}},
{"ser", {"^ser$"}, {
ind_pres = {{"soi", "so"}, {"yes"}, {"ye"}, {"somos"}, {"sois"}, {"son"}},
ind_imp = {{"yera"}, {"yeres"}, {"yera"}, {"yéramos", "yéremos"}, {"yerais", "yereis"}, {"yeren"}},
ind_pluperf = {nucleo = "", nexo = {"#fu#", "#fo#"}},
ind_perf = {{"fui"}, {"fosti", "fuesti", "fuisti"}, {"foi", "fo"}, {"fomos", "fuemos", "fuimos"}, {"fostis", "fuestis", "fuistis"}, {"foron", "fueron"}},
subj_pres = {nucleo = {"sey", "sí"}},
subj_imp = {nucleo = "", nexo = {"#fu#", "#fo#"}}, -- no puedo poner "u" porque obtendría "fuyera" -- REVISAR: hay que agregar la variante con fo
imper = {nil, {"sé"}, {"seya", "sía"}, {"seyamos", "síamos"}, nil, {"seyan", "sían"}}
}},
{"tener", {"tener$", "^ter$"}, {
nucleo = "ten",
alt = {"ie"},
ind_pres = {{"tengo", "teo{P}", "to{P}"}},
ind_perf = {nucleo = "tuv", {"tuvi", "tevi"}, nil, {"tuvo", "tevo"}},
ind_pluperf = {nucleo = "tuv"},
fut = {nucleo = "ten", nexo = "#dr#"},
subj_pres = {nucleo = "teng"},
subj_imp = {nucleo = "tuv"},
cond = {nucleo = "ten", nexo = "#dr#"},
imper = {nil, {"ten"}, {"tenga"}, {"tengamos"}, nil, {"tengan"}}
}},
{"traer", {"traer$"}, {
nucleo = "tra",
ind_pres = {{"traigo"}},
ind_perf = {nucleo = "tra", nexo = "#x#"},
ind_pluperf = {nucleo = "tra", nexo = "#x#"},
subj_pres = {nucleo = "traig"},
subj_imp = {nucleo = "tra", nexo = "#x#"},
imper = {nil, nil, nil, {"traiga"}, {"traigamos"}, nil, {"traigan"}}
}},
{"trayer", {"trayer$"}, {
nucleo = "tra",
ind_perf = {nucleo = "tra", nexo = "#x#"},
ind_pluperf = {nucleo = "tra", nexo = "#x#"},
subj_imp = {nucleo = "tra", nexo = "#x#"},
}},
{"ver", {"^ver$", "^antever$", "^entrever$", "^prever$", "^rever$"}, {
nucleo = "v",
part = {"visto"},
ind_pres = {{"veo"}},
subj_pres = {nucleo = "ve"},
imper = {nil, {"ve"}, {"vea"}, nil, nil, {"vean"}}
}},
{"yacer", {"^yacer$", "^subyacer$"}, { -- REVISAR: existe esto? xacer me sale como sustantivo
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"}, {"yazca", "yazga", "yaga"}, nil, nil, {"yazcan", "yazgan", "yagan"}}
}},
{"mover", {"mover$"}, {
alt = {"ue"},
}},
{"entender", {"entender$"}, {
alt = {"ie"},
}},
},
["ir"] = {
-- asir no existe
{"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í) --> esto no existe en ast creo
-- 3. bendecir, maldecir: agrego bendito, maldito al pp
-- 4. condecir, contradecir, desdecir, predecir: parto de 1 pero agrego el futuro regular que esta aceptado
{"dicir", {"^dicir$", "^redicir$", "^entredicir$", "^antedicir$"}, {
nucleo = "di",
part = {"dicho"},
ind_pres = {{"digo"}},
ind_perf = {nexo = "#x#"},
ind_pluperf = {nexo = "#x#"},
fut = {nucleo = "d", nexo=""},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#x#"},
cond = {nucleo = "d", nexo=""},
imper = {nil, {"di"}, {"diga"}, {"digamos"}, nil, {"digan"}}
}},
{"bendicir", {"bendicir$", "maldicir$"}, {
nucleo = "di",
part = {"dicío{PART}", "dito{ADJ}"},
ind_pres = {{"digo"}},
ind_perf = {nexo = "#x#"},
ind_pluperf = {nexo = "#x#"},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#x#"},
imper = {nil, {"diz"}, {"diga"}, nil, nil, {"digan"}}
}},
{"predicir", {"dicir$"}, {
nucleo = "di",
part = {"dichu"},
ind_pres = {{"digo"}},
ind_perf = {nexo = "#x#"},
ind_pluperf = {nexo = "#x#"},
fut = {nucleo = {"dec", "d"}, nexo=""},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#x#"},
cond = {nucleo = {"dec", "d"}, nexo=""},
imper = {nil, {"dí"}, {"diga"}, nil, nil, {"digan"}}
}},
-- erguir (erguer) es regular
--{"imprimir", {"imprimir$"}, {
-- nucleo = "imprim",
-- part = {"imprimíu{PART}", "impresu{PART/ADJ}"}
--}},
{"dir", {"^dir$"}, {
ind_pres = {{"voi", "vo"}, {"vas"}, {"va"}, {"vamos"}, {"vais"}, {"van"}},
ind_imp = {{"diba"}, {"dibas"}, {"diba"}, {"díbamos", "díbemos"}, {"dibais", "dibeis"}, {"diben"}},
ind_perf = {{"fui"}, {"fosti", "fuesti", "fuisti"}, {"foi", "fo"}, {"fomos", "fuemos", "fuimos"}, {"fuestis", "fuistis"}, {"foron", "fueron"}},
ind_pluperf = {nucleo = "", nexo = {"#fu#", "#fo#"}},
subj_pres = {{"vaiga", "vaya"}, {"vaigas", "vayas"}, {"vaiga", "vaya"}, {"vaigamos", "vayamos"}, {"vaigáis", "vayáis"}, {"vaigan", "vayan"}},
subj_imp = {nucleo = "", nexo = {"#fu#", "#fo#"}}, -- no puedo poner "u" porque obtendría "fuyera" -- REVISAR: faltan los otros nexos posibles
imper = {nil, {"ve"}, {"vaiga", "vaya"}, {"vaigamos", "vayamos"}, {"vaigáis", "vayáis"}, {"vaigan", "vayan"}}
}},
-- pudrir es podrecer (simil paecer)
{"salir", {"salir$"}, {
nucleo = "sa",
nexo = "l",
ind_pres = {{"salgo"}},
fut = {nucleo = "sal", nexo = "#dr#"},
subj_pres = {nucleo = "salg", nexo = ""},
cond = {nucleo = "sal", nexo = "#dr#"},
imper = {nil, {"sal"}, {"salga"}, {"salgamos"}, nil, {"salgan"}}
}},
{"escribir", {"scribir$"}, {
nucleo = "scrib",
part = {"scrito"}
}},
{"producir", {"ducir$"}, {
ind_perf = {nexo = {"c", "#x#"}},
ind_pluperf = {nexo = {"c", "#x#"}},
subj_imp = {nexo = {"c", "#x#"}},
}},
{"valir", {"valir$"}, {
nucleo = "va",
nexo = "l",
ind_pres = {{"valgo"}},
fut = {nucleo = "val", nexo = "#dr#"},
subj_pres = {nucleo = "valg", nexo = ""},
cond = {nucleo = "val", nexo = "#dr#"},
imper = {nil, nil, {"valga"}, {"valgamos"}, nil, {"valgan"}}
}},
{"venir", {"venir$"}, {
nucleo = "ven",
alt = {"ie-i"},
ind_pres = {{"vengo"}, nil, {"vien"}},
fut = {nexo = "#dr#"},
ind_perf = {nucleo = "vin", nil, nil, {"vieno"}}, -- REVISAR: la 3s es él vIEno, no *vino, hay más verbos así?
subj_pres = {nucleo = "veng"},
cond = {nexo = "#dr#"},
imper = {nil, {"ven"}, {"venga"}, {"vengamos"}, nil, {"vengan"}}
}},
{"rir", {"^rir$", "^frir$"}, {
nucleo = "r",
part = {"frío", "frito"},
ind_pres = {{"río"}},
subj_pres = {nucleo = "rí"},
imper = {nil, nil, {"ría"}, {"riamos"}, nil, {"rían"}}
}},
{"sentir", {"sentir$"}, { -- discernir entra en este paradigma tmb.
alt = {"ie-i"}
}},
{"podrir", {"podrir$"}, {
alt = {"u-u"},
}},
{"reunir", {"reunir$"}, {
alt = {"ú"}
}},
{"prohibir", {"prohibir$"}, {
alt = {"í"}
}},
{"rehenchir", {"rehenchir$"}, {
alt = {"í-i"}
}},
{"repetir", {"repetir$"}, {
alt = {"i-i"}
}},
{"dormir", {"dormir$"}, {
alt = {"ue-u"}
}},
},
["í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}"},
--}},
},
}
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"},
["üe"] = {"goler", "o", "üe"},
},
["ir"] = {
["i"] = {"???", "e", "i"}, -- REVISAR: existe esto??
["í"] = {"prohibir", "i", "í"},
["í-i"] = {"rehenchir", "e", "í", "i"},
["i-i"] = {"repetir", "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 doble_imperativo(alt, nexo, sufijo_inf)
if sufijo_inf == "ar" or nexo:find("[CLRSX]") then
return false
end
for _,a in ipairs(alt) do
if a == "ie" or a == "ue" or a == "üe" or a == "ie-i" or a == "ue-u" then
return true
end
end
return false
end
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo[forma].sufijo_inf or conjinfo.sufijo_inf
local sufijos_ = obtener_sufijos(sufijo_inf, ((forma == "ind_perf" or forma == "ind_pluperf" or forma == "subj_imp") and conjinfo[forma].nucleo) and forma.."_alt" or forma)
local nucleos
if not conjinfo[forma].nucleo then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleos2
elseif forma == "part" then
nucleos = conjinfo.nucleo_inf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos1}
elseif forma == "ind_perf" then
nucleos = {conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos2, conjinfo.nucleos1}
elseif forma == "ind_pluperf" or forma == "subj_imp" then
local n = conjinfo.nucleos2
nucleos = {n, n, n, n, n, n}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleos1}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n}
end
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
if not nexo then
nexo = ""
end
local prefijo = conjinfo.prefijo
if type(nexo) == "string" then
nexo = {nexo}
end
if forma == "imper" and doble_imperativo(conjinfo.alt, conjinfo.nexo or "", conjinfo.sufijo_inf) then
nucleos[TU] = deepcopy(nucleos[TU]) -- para no modificar los demás núcleos
insert_if_not(nucleos[TU], conjinfo.nucleo_inf[1])
end
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for j, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo[1], sufijos_[1], sufijo_inf)
for _,nucleo in ipairs(nucleos) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, conjinfo.nucleo_inf[1])))
end
end
end
return
end
for i = YO, ELLOS do
local p = tostr[i]
if conjinfo[forma][i] then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local k = i
while sufijos_[k] do
for _, nx in ipairs(nexo) do
for _, n in ipairs(nucleos[i]) do
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nx, sufijos_[k], sufijo_inf)
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo2, conjinfo.nucleo_inf[1])))
if forma == "imper" and i == TU and (conjinfo.v:find("goler$") or conjinfo.v:find("coser$")) then -- excepciones con triple imperativo harcodeadas
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(conjinfo.nucleo_inf[1], nexosufijo2, conjinfo.nucleo_inf[1])))
end
end
end
end
k = k + 6
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local arr = res[forma]
local t = {}
local tiempo, i = match(forma, "^(.*)(%d)$")
if not i then
tiempo = forma
i = 1
end
i = tonumber(i)
local rest_ = i < NOSOTROS and resto or resto_pl
local rest_pl_ = resto_pl
if tiempo == "imper" and adv == "no " then
tiempo = "subj_pres"
arr = fmtinfo["subj_pres"..tostr[i]]
end
for _, v in ipairs(arr) do
local hs = auxiliar[tiempo]
local v2
local rest = rest_
local rest_pl = rest_pl_
if hs then
rest = " "..v..rest
rest_pl = " "..v..rest_pl
v = hs[i]
v2 = hs[i+7] -- subjuntivo imperfecto
end
if forma == "inf" or forma == "inf_comp" then
if pron ~= "" and art ~= "" then
v = gsub(v, "([aei])r$", function (x) return agregar_tilde[x].."r" end)
end
insert(t, adv..v..pron..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..v..pron..art..f_links(rest_pl))
end
elseif forma == "ger" or forma == "ger_comp" then
local vpron = v..pron
if pron ~= "" or art ~= "" then
vpron = gsub(vpron, "^(.*)([ae])(ndo)", function(x, y, z) return x..agregar_tilde[y]..z end)
end
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..f(vpron)..art..f_links(rest_pl))
end
elseif forma == "part" then
insert(t, adv..f_links(v)..f_links(resto))
if (resto_pl ~= resto) then
insert(t, adv..f_links(v)..f_links(resto_pl))
end
elseif tiempo == "imper" and (pron ~= "" 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
local vpron = gsub(v, "[~#]", "") -- 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 = gsub(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 = gsub(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 = gsub(vpron,
"^([^áéíóú]*"..CONS_SALVO_H.."u?[iuü]?)([áéíóú])([ns]?)$",
function(x, y, z) return x..quitar_tilde[y]..z end
)
vpron = gsub(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 = gsub(vpron, "mos$", "mo")
end
if enc == "os" then -- amaD + os -> amaos, hacED + os -> haceos, salvo idos
vpron = gsub(vpron, "([ae])d$", "%1")
vpron = gsub(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 = gsub(vpron,
"^([^áéíóú]*)([aeiou])([^áéíóú]-)$",
function(x, y, z) return x..agregar_tilde[y]..z end
)
end
vpron = vpron..enc
end
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
else -- si es imperativo y el pronombre y artículo están ambos vacíos, es lo mismo anteponerlos que posponerlos
local pronart = pron == "se" and REFLEXIVOS[i].." " or ""
pronart = art ~= "" and pronart..art.." " or pronart
insert(t, adv..pronart..f_links(v)..f_links(rest))
if v2 then
insert(t, adv..pronart..f_links(v2)..f_links(rest))
end
end
end
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["impersonal"] = {},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["indirecto"] = {tipo = "bool"},
["alt"] = {lista = true},
["paradigma"] = {lista = true},
["nota"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local adv, r1 = match(tit, "^([sSnN][íu]n?"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiáéí]r)(s?e?)(l?[aeo]?s?)(.-)$")
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[ío]?"..ESPACIO.."?"..LETRA.."*[aeiáéí]rs?e?l?[aeo]?s?(.-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
v = gsub(v, "^(%S*)ár$", "%1ar") -- pronominales
v = gsub(v, "^(%S*)ér$", "%1er") -- pronominales
v = gsub(v, "^(%S*[^aeo])ír$", "%1ir") -- grafías anticuadas
local sufijo_inf = match(v, "[aeií]r$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
for N = 1, math.max(1,
maxindex(args["paradigma"]),
maxindex(args["alt"])) do
local conjinfo = {}
if find(v, "iar$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then
error("Especifique el (los) paradigma(s) para los verbos en -iar (añunciar, triar)")
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 find(v, rx) then
conjinfo = deepcopy(p[3])
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 find(v, rx) then
local vacio = true
for k, v in pairs(p[3]) do
vacio = false
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
if 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")
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
if not conjinfo.nucleo_inf then
conjinfo.nucleo_inf = sub(v, 1, len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
conjinfo.prefijo = ""
elseif not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, len(v) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
if not conjinfo.prefijo then -- caso en el que cambié el núcleo
conjinfo.prefijo = ""
end
conjinfo.nucleos1 = {}
conjinfo.nucleos2 = {}
conjinfo.alt = conjinfo.alt or {}
if args["alt"][N] then
insert_if_not(conjinfo.alt, args["alt"][N])
end
for i, a in ipairs(conjinfo.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 = gsubb(conjinfo.nucleo_inf, "^(.*)["..info[2].."](.-)$", "%1#"..info[3].."#%2")
if info[4] then
n2, sust = gsubb(conjinfo.nucleo_inf, "^(.*)["..info[2].."](.-)$", "%1#"..info[4].."#%2")
end
assert(sust, "Alternancia vocálica no reconocida")
insert_if_not(conjinfo.nucleos1, n1)
insert_if_not(conjinfo.nucleos2, n2)
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
else
insert_if_not(conjinfo.nucleos1, conjinfo.nucleo_inf)
end
end
if not conjinfo.nucleos1[1] then
conjinfo.nucleos1[1] = conjinfo.nucleo_inf
end
if not conjinfo.nucleos2[1] then
conjinfo.nucleos2[1] = conjinfo.nucleo_inf
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if find(e, 'PART') or not find(e, 'ADJ') and not find(e, "†") and not find(e, "{x}") then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, resto=resto, resto_pl=resto_pl,impers=args["impersonal"]}
for _,s in ipairs(tostr) do
fmtinfo["subj_pres"..s] = deepcopy(resultante["subj_pres"..s])
end
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local impers = args["impersonal"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, impers)
end)
local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper
if impers == "3" then
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"}
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", "tu", "él, vusté", "nós", "vós", "ellos", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "yo", "tu", "él, vusté", "nos", "vos", "ellos", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que yo", "que tu", "qu'él, que vusté", "que nos", "que vos", "qu'ellos", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tu)", "(vusté)", "(nosotros)", "(vosotros)", "(vustedes)", color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = math.floor(cs / 2)
cs2 = cs - cs1
local t = {}
insert(t, {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true})
if impers == "3" then
-- resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
-- resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
insert(t, {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf})
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger})
insert(t, {{"Participio", header=true, color=COLOR_NP}, resultante.part})
else
resultante.inf.colspan = cs
resultante.ger.colspan = cs
resultante.part.colspan = cs
-- resultante.inf.colspan = cs1-1
-- resultante.ger.colspan = cs1-1
-- resultante.part.colspan = cs1-1
-- resultante.inf_comp.colspan = cs2
-- resultante.ger_comp.colspan = cs2
insert(t, {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf})
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger})
insert(t, {{"Participio", header=true, color=COLOR_NP}, resultante.part})
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
insert(t, {{"Formas personales", colspan=cs}, color=COLOR_H, header=true})
insert(t, {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true})
insert(t, fila_pronombres_ind)
insert(t, {{"Presente", color=COLOR_IND, header=true}, ic("ind_pres")})
insert(t, {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")})
insert(t, {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("ind_perf")})
insert(t, {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")})
-- insert(t, {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("ind_perf_comp")})
-- insert(t, {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("ind_anter")})
insert(t, {{"Modo potencial", colspan=cs}, color=COLOR_COND, header=true})
insert(t, fila_pronombres_cond)
insert(t, {{"Futuro", color=COLOR_COND, header=true}, ic("fut")})
--insert(t, {{"Futuro compuesto", color=COLOR_COND, header=true}, ic("fut_comp")})
insert(t, {{"Condicional simple", color=COLOR_COND, header=true}, ic("cond")})
-- insert(t, {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("cond_comp")})
insert(t, {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true})
insert(t, fila_pronombres_subj)
insert(t, {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")})
insert(t, {{"Pretérito", color=COLOR_SUBJ, header=true}, ic("subj_imp")})
-- insert(t, {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")})
-- insert(t, {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")})
insert(t, {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true})
insert(t, fila_pronombres_imper)
if mostrar_imper then
insert(t, {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")})
else
insert(t, {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}})
end
insert(t, {{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 ""
impers = impers or ""
if impers == "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 impers == "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 impers == "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 impers == "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
insert(t, {{args["nota"] and args["nota"] or "", colspan=cs}})
local paradigmas_t = {}
local cats = {}
if es_irregular then
insert(cats, "AST:Verbos irregulares")
-- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar
paradigmas_reconocidos["añunciar"] = nil
paradigmas_reconocidos["amar"] = nil
paradigmas_reconocidos["temer"] = nil
paradigmas_reconocidos["partir"] = nil
paradigmas_reconocidos["ír"] = nil
else
insert(cats, "AST:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "AST:Verbos del paradigma "..p)
end
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "AST:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "AST:Verbos terciopersonales")
end
if find(impers, "^ind") then
insert(cats, "AST:Verbos de objeto indirecto")
end
if defectivo then
insert(cats, "AST:Verbos defectivos")
end
if sufijo_inf == "ar" then
insert(cats, "AST:Verbos de la primera conjugación")
elseif sufijo_inf == "er" then
insert(cats, "AST:Verbos de la segunda conjugación")
else -- será ir o ír, ya fue chequeado antes
insert(cats, "AST:Verbos de la tercera conjugación")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")",
t,
ns == 0 and cats or {})
end
return export
3n6dq0h78u66r3umfpwxum66mvyrjp7
Categoría:IT:Sustantivos invariables en género
14
1056056
6118150
6117318
2026-06-16T02:12:19Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:IT:Sustantivos invariantes en género]] a [[Categoría:IT:Sustantivos invariables en género]] sin dejar una redirección: obsoleta
5835627
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Categoría:IT:Adjetivos invariables en género
14
1056057
6118152
6117320
2026-06-16T02:12:29Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:IT:Adjetivos invariantes en género]] a [[Categoría:IT:Adjetivos invariables en género]] sin dejar una redirección: obsoleta
5835628
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Categoría:ES:Adjetivos invariables en género
14
1056290
6118151
6117319
2026-06-16T02:12:23Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:ES:Adjetivos invariantes en género]] a [[Categoría:ES:Adjetivos invariables en género]] sin dejar una redirección: obsoleta
5836294
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Módulo:flex/gl
828
1056411
6118173
6117313
2026-06-16T02:18:25Z
TMCbot
164594
.
6118173
Scribunto
text/plain
-- 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_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local len = m_str.len
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_INF = m_flex.COLOR_INF
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local unaccented_vowel = "aeiouàAEIOUÀ"
local accented_vowel = "áéíóúýâêôÁÉÍÓÚÝÂÊÔ"
local maybe_accented_vowel = "ãõÃÕ"
local vowel = unaccented_vowel .. accented_vowel .. maybe_accented_vowel
local cons = "bcdfghjklmnñpqrstvwxyzçBCDFGHJKLMNÑPQRSTVWXYZÇ" -- agrego la ñ y mantengo las consonantes del portugués por las dudas que haya extranjerismos o palabras "reintegracionistas"
local V = "[" .. vowel .. "]"
local AV = "[" .. accented_vowel .. "]"
local NAV = "[^" .. accented_vowel .. "]"
local C = "[" .. cons .. "]"
local espacios = "%s"
local espacios_o_guiones = "%-‐%s"
local ESPACIO = "["..espacios.."]"
local ESPACIO_O_GUION = "["..espacios_o_guiones.."]"
local LETRA = "[^"..espacios.."]"
local agregar_tilde =
{
["a"] = "á",
["e"] = "é",
["i"] = "í",
["o"] = "ó",
["u"] = "ú",
["á"] = "á",
["é"] = "é",
["í"] = "í",
["ó"] = "ó",
["ú"] = "ú",
["A"] = "Á",
["E"] = "É",
["I"] = "Í",
["O"] = "Ó",
["U"] = "Ú",
["Á"] = "Á",
["É"] = "É",
["Í"] = "Í",
["Ó"] = "Ó",
["Ú"] = "Ú",
}
local quitar_tilde = {
["á"]="a", ["é"]="e", ["í"]="i", ["ó"]="o", ["ú"]="u", ["ý"]="y", ["â"]="a", ["ê"]="e", ["ô"]="o",
["Á"]="A", ["É"]="E", ["Í"]="I", ["Ó"]="O", ["Ú"]="U", ["Ý"]="Y", ["Â"]="A", ["Ê"]="E", ["Ô"]="O"
}
local function es_locucion(tit, cop)
return find(tit, LETRA..ESPACIO_O_GUION..LETRA) or (cop ~= nil and find(tit, LETRA..ESPACIO_O_GUION..LETRA))
end
local function try(p, nexo, m, pl, f, fpl, g, s)
if s == true then
if pl == "es" then
pl = "s"
end
end
local r, n, suf
if nexo:sub(1, 1) == "^" then
r = ""
n, suf = match(p, "^("..nexo:sub(2, -1)..")("..m..")$")
else
r, n, suf = match(p, "^(.-)("..nexo..")("..m..")$")
end
if suf then
if type(n) ~= "string" then
n = ""
end
if type(suf) ~= "string" then
suf = ""
end
if pl and find(pl, "#") then
if g == "mf" and f then
return {m={r.."~"..n..suf.."~"}, p={r..n..pl}, f={r..n..f}, fp={r..n..fpl}}
elseif pl then
return {m={r.."~"..n..suf.."~"}, p={r..n..pl}, f={}, fp={}}
else
return {m={r.."~"..n..suf.."~"}, p={}, f={}, fp={}}
end
else
if g == "mf" and f then
return {m={r.."~"..n..suf.."~"}, p={r.."~"..n..pl.."~"}, f={r.."~"..n..f.."~"}, fp={r.."~"..n..fpl.."~"}}
elseif pl then
return {m={r.."~"..n..suf.."~"}, p={r.."~"..n..pl.."~"}, f={}, fp={}}
else
return {m={r.."~"..n..suf.."~"}, p={}, f={}, fp={}}
end
end
end
return nil
end
-- https://www.lingua.gal/c/document_library/get_file?file_path=/portal-lingua/celga/celga-1/material-alumno/Manual_Aula_de_Galego_1_resumo_gramatical.pdf
local function flexionar_palabra(p, g, forzar_s)
local r, v, s
r, v, s = match(p, "^(.*[aeiouü])([íú])(s)$") -- [[país]]
if v then
if g == "mf" then
return {m={r.."~"..v..s.."~"}, p={r.."~"..v.."ses~"}, f={r.."~"..v.."sa~"}, fp={r.."~"..v.."sas~"}}
else
return {m={r.."~"..v..s.."~"}, p={r.."~"..v.."ses~"}, f={}, fp={}}
end
end
r, v, s = match(p, "^(.*)(" .. AV .. ")(s)$") -- final -ês, -ós etc.
if v then
local w = quitar_tilde[v]
if g == "mf" then
return {m={r.."~"..v..s.."~"}, p={r.."~"..w.."ses~"}, f={r.."~"..w.."sa~"}, fp={r.."~"..w.."sas~"}}
else
return {m={r.."~"..v..s.."~"}, p={r.."~"..w.."ses~"}, f={}, fp={}}
end
end
local changed = try(p, "", "ão", forzar_s and "#ãos#" or "ões", forzar_s and "#ã#" or "ona", forzar_s and "#ãs#" or "onas", g, s)
or try(p, V.."[iu]s", "", "es", nil, nil, g, s) -- diptongo final con -s ejemplo [[deus]]
or try(p, "^"..C.."-[iuü]?[aeiou]s", "", "es", nil, nil, g, s) -- monosilabos en -s, ejemplo [[gas]]
or try(p, V, "bel", "beis", nil, nil, g, s) -- -able, -ible
or try(p, "^"..C.."-[iuü]?[iu]?[aeoiu][iu]?l", "", "es", nil, nil, g, s) -- monosílabos en -l
or try(p, AV..".*l", "", "es", nil, nil, g, s) -- llanas/esdrújulas en -l
or try(p, "", "ol", "ois", "ola", "olas", g, s) -- agudas en -ol
or try(p, "", "il", "ís", nil, nil, g, s) -- agudas en -il
or try(p, "[aeou]", "l", "is", nil, nil, g, s) -- agudas en -l
or try(p, "or", "", forzar_s and "#ors#" or "es", "a", "as", g, s) -- -or con femenino (tutor)
or try(p, "r", "", forzar_s and "#s#" or "es", nil, nil, g, s) -- final -r
or try(p, "", "z", "ces", nil, nil, g, s) -- final -z, por las dudas no flexiono en -a excepciones son [[rapaz]] o [[andaluz]]
or try(p, "", "eu", "eus", "ía", "ías", g, s)
or try(p, "^"..C.."*", "u", "us", "úa", "úas", g, s) -- [[nu]] --> núa, [[cru]] --> [[crúa]]
or try(p, "", "o", "os", "a", "as", g, s)
or try(p, V, "", "s", nil, nil, g, s) -- final vowel
or try(p, "[sx]", "", nil, nil, nil, g, s)
or try(p, "", "án", "áns", "á", "ás", g, s) -- CUIDADO: remite a los adjetivos que vienen de -anus, -anum, pero no a palabras como "folgazán", "mentirán"
or try(p, "", "ín", "íns", "ina", "inas", g, s) -- única excepción [[ruín]]
or try(p, "", "ón", "óns", "ona", "onas", g, s) -- CUIDADO: hay un gran grupo de palabras que forma el sufijo con -oa https://es.wikibooks.org/wiki/Gallego/Gram%C3%A1tica/Sufijos_y_terminaciones
or try(p, "", "ún", "úns", "úa", "úas", g, s) -- CUIDADO: consultar referencia anterior
or try(p, "^"..C.."*[iuü]?", "an", "ans", "á", "ás", g, s)
or try(p, "^"..C.."*[iuü]?", "in", "ins", "ina", "inas", g, s)
or try(p, "^"..C.."*[iuü]?", "on", "ons", "ona", "onas", g, s)
or try(p, "^"..C.."*[iuü]?", "un", "uns", "úa", "úas", g, s)
or try(p, C, "", "s", nil, nil, g, s) -- extranjerismos
assert(changed, "No se pudo determinar la flexión de la palabra")
return changed
end
local function flexion_sust_adj(palabras, g, forzar_s, copulativa)
local a, separador, b
if copulativa == true or copulativa == false then
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO_O_GUION..")("..LETRA.."+)$")
else
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
end
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, forzar_s)
local flex2 = copulativa and flexionar_palabra(b, g, forzar_s) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto
if copulativa == false then
p, resto = match(palabras, "^(%-?[^"..espacios_o_guiones.."]+)(.-)$")
else
p, resto = match(palabras, "^("..LETRA.."+)(.-)$")
end
local flex = flexionar_palabra(p, g, forzar_s)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
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_ = flexion_sust_adj(title, modo, args["s"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." regulares")
elseif es_locucion(title, args["cop"]) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["n"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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(frame, title, ns, args, es_locucion(title, args["cop"]) and "GL:Locuciones sustantivas" or "GL:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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(frame, title, ns, args, es_locucion(title, args["cop"]) and "GL:Locuciones adjetivas" or "GL:Adjetivos")
end
local EU, TU, ELE, NOS, VOS, ELES = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"eu", "ti", "el, el, vostede", "nós", "vós", "vostedes, eles, elas"}
local PRONOMBRES_INF = {"por . eu", "por . ti", "por . ele, por . ela, por . vostede", "por . nós", "por . vós", "por . vostedes, por . eles, por . elas"}
local PRONOMBRES_SUBJ = {"que eu", "que ti", "que ele, que ela, que vostede", "que nós", "que vós", "que vostedes, que eles, que elas"}
local PRONOMBRES_IMP = {"―", "(ti)", "(vostede)", "(nós)", "(vós)", "(vostedes)"}
local IMPERSONALES_INF = {"", "", "(por . iso)", "", "", "(por . isos)"}
local IMPERSONALES = {"", "", "(iso)", "", "", "(isos)"}
local IMPERSONALES_SUBJ = {"", "", "(que iso)", "", "", "(que isos)"}
local REFLEXIVOS = {"me", "te", "se", "nos", "vos", "se"}
local formas_no_personales = {
["inf"] = true,
["ger"] = true,
["part"] = true,
}
local formas_personales = {
["inf_pers"] = true,
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["ind_pluperf"] = true,
["ind_fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["subj_fut"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["inf_pers_comp"] = true,
["ind_perf_comp"] = true,
["ind_pluperf_comp"] = true,
["ind_anter"] = true,
["ind_fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
["subj_fut_comp"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local antepuesto = {
["subj_pres"] = true,
["subj_imp"] = true,
["subj_fut"] = true,
["subj_perf"] = true,
["subj_imp_comp"] = true,
["subj_fut_comp"] = true,
}
local interpuesto = {
["ind_fut"] = true,
["ind_fut_comp"] = true,
["cond"] = true,
["cond_comp"] = true
}
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^inf_pers") then
return IMPERSONALES_INF[p]
end
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^inf_pers") then
return PRONOMBRES_INF[p]
elseif find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local sufijos = {
{ -- ar
["ger"] = {"ando"},
["part"] = {"ado"},
["inf_pers"] = {"ar", "ares", "ar", "armos", "ardes", "aren"},
["ind_pres"] = {"o", "as", "a", "amos", "ades", "an"},
["ind_imp"] = {"aba", "abas", "aba", "abamos", "abades", "aban"},
["ind_perf"] = {"ei", "aches", "ou", "amos", "astes", "aron"},
["ind_perf_alt"] = {"ei", "aches", "ou", "amos", "astes", "aron"},
["ind_pluperf"] = {"ara", "aras", "ara", "aramos", "arades", "aran"},
["ind_fut"] = {"arei", "arás", "ará", "aremos", "aredes", "arán"},
["subj_pres"] = {"e", "es", "e", "emos", "edes", "en"},
["subj_imp"] = {"ase", "ases", "ase", "ásemos", "ásedes", "asen"},
["subj_fut"] = {"ar", "ares", "ar", "armos", "ardes", "aren"},
["cond"] = {"aría", "arías", "aría", "ariamos", "ariades", "arían"},
["imper"] = {"-", "a", "e", "emos", "ade", "en"}
},
{ -- er
["ger"] = {"endo"},
["part"] = {"ido"},
["inf_pers"] = {"er", "eres", "er", "ermos", "erdes", "eren"},
["ind_pres"] = {"o", "es", "e", "emos", "edes", "en"},
["ind_imp"] = {"ía", "ías", "ía", "iamos", "iades", "ían"},
["ind_perf"] = {"ín", "iches", "eu", "emos", "estes", "eron"},
["ind_perf_alt"] = {"en", "eches", "o", "emos", "estes", "eron"},
["ind_pluperf"] = {"era", "eras", "era", "eramos", "erades", "eran"},
["ind_fut"] = {"erei", "erás", "erá", "eremos", "eredes", "erán"},
["subj_pres"] = {"a", "as", "a", "amos", "ades", "an"},
["subj_imp"] = {"ese", "eses", "ese", "ésemos", "ésedes", "esen"},
["subj_fut"] = {"er", "eres", "er", "ermos", "erdes", "eren"},
["cond"] = {"ería", "erías", "ería", "eriamos", "eriades", "erían"},
["imper"] = {"-", "e", "a", "amos", "ede", "an"}
},
{ -- ir
["ger"] = {"indo"},
["part"] = {"ido"},
["inf_pers"] = {"ir", "ires", "ir", "irmos", "irdes", "iren"},
["ind_pres"] = {"o", "es", "e", "imos", "ides", "en"},
["ind_imp"] = {"ía", "ías", "ía", "iamos", "iades", "ían"},
["ind_perf"] = {"ín", "iches", "iu", "imos", "istes", "iron"},
["ind_perf_alt"] = {"en", "eches", "o", "emos", "estes", "eron"},
["ind_pluperf"] = {"ira", "iras", "ira", "iramos", "irades", "iran"},
["ind_fut"] = {"irei", "irás", "irá", "iremos", "iredes", "irán"},
["subj_pres"] = {"a", "as", "a", "amos", "ades", "an"},
["subj_imp"] = {"ise", "ises", "ise", "ísemos", "ísedes", "isen"},
["subj_fut"] = {"ir", "ires", "ir", "irmos", "irdes", "iren"},
["cond"] = {"iría", "irías", "iría", "iriamos", "iriades", "irían"},
["imper"] = {"-", "e", "a", "amos", "ide", "an"}
},
{ -- or
["ger"] = {"ondo"},
["part"] = {"osto"},
["inf_pers"] = {"or", "ores", "or", "ormos", "ordes", "oren"},
["ind_pres"] = {"oño", "ós", "ón", "omos", "ondes", "ón"},
["ind_imp"] = {"uña", "uñas", "uña", "uñamos", "uñades", "uñan"},
["ind_perf"] = {"uxen", "uxeches", "uxo", "uxemos", "uxestes", "uxeron"},
["ind_perf_alt"] = {"en", "eches", "o", "emos", "estes", "eron"},
["ind_pluperf"] = {"uxera", "uxeras", "uxera", "uxeramos", "uxerades", "uxeran"},
["ind_fut"] = {"orei", "orás", "orá", "oremos", "oredes", "orán"},
["subj_pres"] = {"oña", "oñas", "oña", "oñamos", "oñades", "oñan"},
["subj_imp"] = {"uxese", "uxeses", "uxese", "uxésemos", "uxésedes", "uxesen"},
["subj_fut"] = {"uxer", "uxeres", "uxer", "uxermos", "uxerdes", "uxeren"},
["cond"] = {"oría", "orías", "oría", "oriamos", "oriades", "orían"},
["imper"] = {"-", "ón", "oña", "oñamos", "onde", "oñan"}
},
}
local auxiliar = {
["inf_comp"] = {"ter"},
["ger_comp"] = {"tendo"},
["inf_pers_comp"] = {"ter", "teres", "ter", "termos", "terdes", "teren"},
["ind_perf_comp"] = {"teño", "tes", "ten", "temos", "tendes", "teñen"},
["ind_pluperf_comp"] = {"tiña", "tiñas", "tiña", "tiñamos", "tiñades", "tiñan"},
["ind_anter"] = {"tiven", "tiveches", "tivo", "tivemos", "tivestes", "tiveron"},
["ind_fut_comp"] = {"terei", "terás", "terá", "teremos", "teredes", "terán"},
["cond_comp"] = {"tería", "terías", "tería", "teriamos", "teriades", "terían"},
["subj_perf"] = {"teña", "teñas", "teña", "teñamos", "teñades", "teñan"},
["subj_pluperf"] = {"tivese", "tiveses", "tivese", "tivésemos", "tivésedes", "tivesen"},
["subj_fut_comp"] = {"tiver", "tiveres", "tiver", "tivermos", "tiverdes", "tiveren"}
}
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]
elseif sufijo_inf == "ir" or sufijo_inf == "ír" then
return sufijos[3][forma]
else
return sufijos[4][forma]
end
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"
}},
{"chegar", {"gar$"}, {
nexo = "g"
}},
{"actuar", {"uar$"}, {
nexo = "u"
}},
{"comezar", {"zar$"}, {
nexo = "z"
}},
{"amar", {"ar$"}, {
}},
},
["er"] = {
{"ller", {"ller$"}, { -- Existe esto??
nexo = "ll"
}},
{"güer", {"güer$"}, { -- Existe esto??
nexo = "gü"
}},
{"quer", {"quer$"}, { -- Existe esto??
nexo = "qu"
}},
{"erguer", {"guer$"}, {
nexo = "gu"
}},
{"parecer", {"cer$"}, {
nexo = "c"
}},
{"proteger", {"ger$"}, {
nexo = "g"
}},
{"temer", {"er$"}, {
}},
},
["ir"] = {
{"argüir", {"güir$"}, {
nexo = "gü",
}},
{"delinquir", {"quir$"}, {
nexo = "qu"
}},
{"distinguir", {"guir$"}, {
nexo = "gu"
}},
{"resarcir", {"cir$"}, {
nexo = "c"
}},
{"dirigir", {"gir$"}, {
nexo = "g"
}},
{"partir", {"ir$"}, {
}},
},
["ír"] = {
{"argüír", {"güír$"}, {
nexo = "gü",
}},
{"fluír", {"uír$"}, {
nexo = "u"
}},
{"partir", {"ír$"}, {
}},
},
["or"] = {
{"pór", {"or$"}, {
}},
},
["ór"] = {
{"pór", {"ór$"}, {
}}
}
}
local paradigmas_irregulares = {
["ar"] = {
{"dar", {"^dar$", "^redar$", "desdar$"}, { -- no pueden ir otros verbos como "andar o quedar"
nucleo = "d",
ind_pres = {{"dou"}, {"dás"}, {"dá"}, nil, nil, {"dán"}},
ind_perf = {sufijo_inf = "er", {"dei"}, {"deches"}},
ind_pluperf = {sufijo_inf = "er"},
subj_pres = {sufijo_inf = "er", nucleo = "de"},
subj_imp = {sufijo_inf = "er"},
subj_fut = {sufijo_inf = "er"},
imper = {nil, {"dá"}, {"dea"}, {"deamos"}, nil, {"dean"}}
}},
{"estar", {"^estar$", "^tar$"}, {
nucleo = "t",
ind_pres = {{"tou"}, {"tás"}, {"tá"}, nil, nil, {"tán"}},
ind_perf = {nucleo = "tiv", sufijo_inf = "er"},
ind_pluperf = {nucleo = "tiv", sufijo_inf = "er"},
subj_pres = {nucleo = "te", sufijo_inf = "er"},
subj_imp = {nucleo = "tiv", sufijo_inf = "er"},
subj_fut = {nucleo = "tiv", sufijo_inf = "er"},
imper = {nil, {"tá"}, {"tea"}, {"teamos"}, nil, {"tean"}}
}},
{"enviar", {"enviar$"}, {
nexo = "i"
}},
{"descafeinar", {"descafeinar$"}, {
alt = {"í-í"},
}},
{"saudar", {"saudar$"}, {
alt = {"ú-ú"},
}},
},
["er"] = {
{"caber", {"^caber$"}, {
nucleo = "cab",
nucleos1 = {"caib"},
ind_perf = {nucleo = "coub"},
ind_pluperf = {nucleo = "coub"},
subj_imp = {nucleo = "coub"},
subj_fut = {nucleo = "coub"},
}},
{"facer", {"facer$"}, {
nucleo = "fac",
nexo = "",
nucleos1 = {"fag"},
part = {"feito"},
ind_pres = {nil, {"fás"}, {"fai"}, nil, nil, {"fán"}},
ind_perf = {nucleo = "fix"},
ind_pluperf = {nucleo = "fix"},
subj_imp = {nucleo = "fix"},
subj_fut = {nucleo = "fix"},
ind_fut = {nucleo = "fa", nexo = "#r#"},
cond = {nucleo = "fa", nexo = "#r#"},
imper = {nil, {"fai"}},
}},
{"haber", {"^haber$", "^rehaber$"}, {
nucleo = "ab",
ind_pres = {{"ei"}, {"ás"}, {"á", "ai"}, nil, nil, {"án"}},
ind_perf = {nucleo = "oub"},
ind_pluperf = {nucleo = "oub"},
subj_pres = {nucleo = "ax"},
subj_imp = {nucleo = "oub"},
subj_fut = {nucleo = "oub"},
imper = {nil, {"á{†}"}, {"axa{†}"}, {"axamos{†}"}, {"abei{†}"}, {"axan{†}"}},
}},
{"pracer", {"pracer$"}, {
nucleo = "pra",
ind_perf = {nucleo = "proug"},
ind_pluperf = {nucleo = "proug"},
subj_imp = {nucleo = "proug"},
subj_fut = {nucleo = "proug"},
}},
{"poder", {"poder$"}, {
nucleo = "pod",
ind_perf = {nucleo = "puid"},
ind_pluperf = {nucleo = "puid"},
subj_pres = {nucleo = "poid"},
subj_imp = {nucleo = "puid"},
subj_fut = {nucleo = "puid"},
}},
{"poñer", {"poñer$"}, {
nucleo = "poñ",
part = {"posto"},
ind_pres = {nil, {"pós"}, {"pón"}},
ind_perf = {nucleo = "pux"},
ind_pluperf = {nucleo = "pux"},
subj_imp = {nucleo = "pux"},
subj_fut = {nucleo = "pux"},
imper = {nil, {"pón"}}
}},
{"querer", {"querer$"}, {
nucleo = "quer", -- no uso nucleos1 para que no sobreescriba ind_pres
ind_perf = {nucleo = "quix"},
ind_pluperf = {nucleo = "quix"},
subj_pres = {nucleo = "queir"},
subj_imp = {nucleo = "quix"},
subj_fut = {nucleo = "quix"},
}},
{"romper", {"^romper$", "^arromper$"}, { -- no corromper, derromper, entrerromper
nucleo = "romp",
part = {"roto", "rompido"}
}},
{"saber", {"saber$"}, {
nucleo = "sab",
ind_pres = {{"sei"}},
ind_perf = {nucleo = "soub"},
ind_pluperf = {nucleo = "soub"},
subj_pres = {nucleo = "saib"},
subj_imp = {nucleo = "soub"},
subj_fut = {nucleo = "soub"},
}},
{"ser", {"^ser$"}, {
nucleos1 = {"sex"},
ind_pres = {{"son"}, {"es"}, {"é"}, {"somos"}, {"sodes"}, {"son"}},
ind_imp = {{"era"}, {"eras"}, {"era"}, {"eramos"}, {"erades"}, {"eran"}},
ind_perf = {{"fun"}, {"fuches"}, {"foi"}, {"fomos"}, {"fostes"}, {"foron"}},
ind_pluperf = {{"fora"}, {"foras"}, {"fora"}, {"foramos"}, {"forades"}, {"foran"}},
subj_imp = {{"fose"}, {"foses"}, {"fose"}, {"fósemos"}, {"fósedes"}, {"fosen"}}, -- no puedo poner "u" porque obtendría "fuyera"
subj_fut = {{"for"}, {"fores"}, {"for"}, {"formos"}, {"fordes"}, {"foren"}},
imper = {nil, {"sé"}, nil, nil, {"sede"}}
}},
{"ter", {"^ter$", "suster$", "manter$", "^ater$", "abster$", "obter$", "^reter$", "deter$", "conter$"}, {
nucleo = "t",
nucleos1 = {"teñ"},
ind_pres = {nil, {"tés"}, {"tén"}, nil, {"tendes", "tedes"}, {"teñen"}},
ind_imp = {{"tiña"}, {"tiñas"}, {"tiña"}, {"tiñamos"}, {"tiñades"}, {"tiñan"}},
ind_perf = {nucleo = "tiv"},
ind_pluperf = {nucleo = "tiv"},
subj_imp = {nucleo = "tiv"},
subj_fut = {nucleo = "tiv"},
imper = {nil, {"tén"}, nil, nil, {"tende", "tede"}}
}},
{"traer", {"traer$"}, { -- REVISAR fut y cond
nucleos1 = {"trai"},
ind_perf = {nucleo = "troux"},
ind_pluperf = {nucleo = "troux"},
subj_imp = {nucleo = "troux"},
subj_fut = {nucleo = "troux"},
}},
{"ver", {"^ver$", "antever$", "entrever$", "prever$", "^rever$", "prover$"}, {
nucleo = "v",
nucleos1 = {"vex"},
part = {"visto"},
ind_pres = {nil, {"vés"}, {"vé"}, nil, nil, {"vén"}},
ind_perf = {sufijo_inf = "ir"},
ind_pluperf = {sufijo_inf = "ir"},
subj_imp = {sufijo_inf = "ir"},
subj_fut = {sufijo_inf = "ir"},
imper = {nil, {"vé"}},
}},
{"ler", {"^ler$", "^reler$", "crer$"}, {
nucleo = "",
nucleos1 = {"e"},
ind_pres = {nil, {"és"}, {"é"}, nil, nil, {"én"}},
imper = {nil, {"é"}},
}},
{"morrer", {"morrer$"}, {
nucleo = "morr",
part = {"morto"},
}},
{"valer", {"valer$"}, {
alt = {"ll"},
}},
{"moer", {"oer$"}, {
alt = {"oi"},
}},
},
["ir"] = {
{"abrir", {"[^js]abrir$", "^abrir$"}, { -- abrir, cubrir y derivados, pero no "desabrir" ni "jabrir" (son regs.)
nucleo = "abr",
part = {"aberto"}
}},
{"cubrir", {"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 = {"uberto"},
alt = {"o"},
}},
{"dicir", {"dicir$"}, {
nucleo = "di",
nucleos1 = {"dig"},
part = {"dito"},
ind_pres = {nil, nil, {"di"}, nil, nil, {"din"}},
ind_perf = {nucleo = "dix"},
ind_pluperf = {nucleo = "dix"},
subj_imp = {nucleo = "dix"},
subj_fut = {nucleo = "dix"},
ind_fut = {nucleo = "di", nexo="#r#"},
cond = {nucleo = "di", nexo="#r#"},
imper = {nil, {"di"}}
}},
{"escribir", {"scribir$"}, {
nucleo = "scrib",
part = {"scrito"}
}},
{"rir", {"^rir$", "sorrir$"}, {
nucleo = "r",
ind_pres = {nil, {"rís"}, {"rí"}, nil, nil, {"rín"}},
nucleos1 = {"rí"},
nucleos2 = {"ri"},
nucleos3 = {"ri"},
imper = {nil, {"rí"}},
}},
{"imprimir", {"imprimir$"}, {
nucleo = "imprim",
part = {"imprimido", "impreso"}
}},
{"ir", {"^ir$"}, {
ind_pres = {{"vou"}, {"vas"}, {"vai"}, nil, nil, {"ván"}},
ind_perf = {{"fun"}, {"fuches"}, {"foi"}, {"fomos"}, {"fostes"}, {"foron"}},
ind_pluperf = {nexo = "#fo#"},
subj_pres = {nucleo = "vai"},
subj_imp = {nexo = "#fo#", nil, nil, nil, {"fósemos"}, {"fósedes"}}, -- no puedo poner "u" porque obtendría "fuyera"
subj_fut = {nexo = "#fo#"},
imper = {nil, {"vai"}, {"vaia"}, {"vamos"}, nil, {"vaian"}}
}},
{"vir", {"^vir$", "^avir$", "advir$", "convir$", "contravir$", "devir$", "^desavir$", "entrevir$", "intervir$", "obvir$", "provir$", "^revir$", "sobrevir$"}, {
nucleo = "v",
nucleos1 = {"veñ"},
ind_pres = {nil, {"vés"}, {"vén"}, nil, {"vindes", "vides"}, {"veñen"}},
ind_imp = {{"viña"}, {"viñas"}, {"viña"}, {"viñamos"}, {"viñades"}, {"viñan"}},
ind_perf = {{"vin"}, {"viñeches"}, {"veu"}, {"viñemos"}, {"viñestes"}, {"viñeron"}},
ind_pluperf = {{"viñera"}, {"viñeras"}, {"viñera"}, {"viñeramos"}, {"viñerades"}, {"viñeran"}},
subj_imp = {{"viñese"}, {"viñeses"}, {"viñese"}, {"viñésemos"}, {"viñésedes"}, {"viñesen"}},
subj_fut = {{"viñer"}, {"viñeres"}, {"viñer"}, {"viñermos"}, {"viñerdes"}, {"viñeren"}},
imper = {nil, {"ven"}, nil, nil, {"vinde", "vide"}, nil}
}},
{"frixir", {"frixir$"}, {
part = {"frigido", "frito"},
-- alt = {"-e"},
}},
{"cair", {"air$"}, {
nucleo = "a",
alt = {"ai"},
imper = {nil, {"ae"}},
}},
{"parir", {"parir$"}, {
alt = {"ai"},
}},
{"sentir", {"sentir$"}, {
alt = {"i"},
}},
{"agredir", {"gredir$"}, {
alt = {"i-i-i"}
}},
{"proibir", {"proibir$"}, {
alt = {"í-í"}
}},
{"reunir", {"reunir$"}, {
alt = {"ú-ú"}
}},
{"fuxir", {"fuxir$"}, { --fuxir, bulir, durmir
alt = {"-o"},
}},
{"ouvir", {"ouvir$"}, {
alt = {"z"},
}},
},
["ír"] = {
{"saír", {"aír$"}, {
alt = {"ai"},
}},
{"oír", {"oír$"}, {
alt = {"oi"},
}},
},
["or"] = {
},
["ór"] = {
}
}
local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf, forma)
if not nexo then
return sufijo
end
if sufijo_inf == "ar" then
if find(sufijo, "^[aeo][ns]?$") then
if nexo == "e" then
return "~ei~"..sufijo
end
end
if find(sufijo, "^[eiéí]") 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
end
local _, cnt = gsub(sufijo, "[aeiouü]", "")
if cnt == 1
and not find(sufijo, "[áéíóú]")
and find(sub(sufijo, -1), "[aeiouns]") then
if nexo == "cu" then
return sub(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
end
else -- -er/-ir/-or
if find(sufijo, "^er") then -- [[dicir]]
if nexo == "#r#" then
return nexo..sub(sufijo, 3)
end
end
local _, cnt = gsub(sufijo, "[aeiouü]", "")
if cnt == 1
and not find(sufijo, "[áéíóú]")
and find(sub(sufijo, -1), "[aeiouns]") then
if nexo == "gü" then
return "g~ú~"..sufijo
end
if nexo == "u" then
return "~ú~"..sufijo
end
end
if find(sufijo, "^[aouáóú]") then
if nexo == "c" then
return "~z~"..sufijo
end
if nexo == "g" then
return "~j~"..sufijo
end
if nexo == "gu" then
return "~g~"..sufijo
end
if nexo == "gü" then
return "g~u~"..sufijo
end
if nexo == "qu" then
return "~c~"..sufijo
end
if nexo == "qü" then
return "q~u~"..sufijo
end
end
if find(sufijo, "^es?$") then
if nexo == "u" then
return nexo.."~i~"..sub(sufijo, 2)
end
if nexo == "gü" then -- arguir
return nexo.."~i~"..sub(sufijo, 2)
end
end
if find(sufijo, "^is?$") then
if nexo == "gü" then -- arguir
return nexo.."~í~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i") then
if nexo == "#fo#" then
return nexo..sub(sufijo, 2)
end
end
if (forma ~= "ind_fut" and forma ~= "cond") then
if find(sufijo, "^ia[md][oe]s$") then
if nexo == "u" then
return nexo.."~ï~"..sub(sufijo, 2)
end
if nexo == "gü" then -- arguir
return nexo.."~ï~"..sub(sufijo, 2)
end
end
if find(sufijo, "^ir[aeo]"..C.."*$") or find(sufijo, "^i[^r]") or find(sufijo, "^ir[^aeiouü]") or find(sufijo, "^ir?$") then
if nexo == "u" then
return nexo.."~í~"..sub(sufijo, 2)
end
if nexo == "gü" then -- arguir
return nexo.."~í~"..sub(sufijo, 2)
end
end
end
end
return nexo..sufijo
end
local function combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma)
local nucleo_ = gsub(nucleo, "[~#]", "")
local nexosufijo_ = gsub(nexosufijo, "[~#]", "")
if find(nucleo_, "i$") and find(nexosufijo_, "^i") then -- se juntan dos íes o y-i (ej. reír, freír, oír)
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1")
elseif forma == "ind_imp" and find (nucleo_, "^[^áéíóú]-[aeiouü]h?$") and (find(nexosufijo_, "[ií]a[md][eo]s$")) then -- sair
return nucleo..gsub1(nexosufijo, "^([~#]?)[ií]", "%1~ï~")
elseif forma == "ind_perf" and find (nucleo_, "^[^áéíóú]-[aeiouü]h?$") and (find(nexosufijo_, "^iu$")) then -- sair
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~í~")
elseif forma ~= "ind_fut" and forma ~= "cond" and find(nucleo_, "^[^áéíóú]-[aeiouü]h?$") and (find(nexosufijo_, "^h?[iu]"..C.."*[aeo]i?[mns]?$") or find(nexosufijo_, "^h?[iu][rs]?$")) then -- sufijo con i/u tónica (caISTE, caIMOS, caIDO, oID, reHÚyo etc.)
return nucleo..gsub1(nexosufijo, "^([~#]?h?)([iu])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
local prefijo_ = gsub(prefijo, "[~#]", "")
local nucleonexosufijo_ = gsub(nucleonexosufijo, "[~#]", "")
if find(prefijo_, "^[^aeiouáéíóú]*$")
and nucleonexosufijo_ ~= "é" and nucleonexosufijo_ ~= "sé" -- excepción: ser
and (find(nucleonexosufijo_, "^"..C.."?"..C.."?".."[iuü]?[áéó][iuü]?[ns]?$") or find(nucleonexosufijo_, "^"..C.."?"..C.."?".."[íú][ns]?$")) then -- caso de dar, vos *d+ás, debo quitar la tilde
return prefijo..gsub1(nucleonexosufijo, "[áéíóú]", function(v) return quitar_tilde[v] end)
end
return prefijo..nucleonexosufijo
end
local alt_info = {
["ar"] = {
["í-í"] = {"descafeinar", "[i]", "í", "í"},
["ú-ú"] = {"saudar", "[u]", "ú", "ú"},
},
["er"] = {
["oi"] = {"moer", "[o]", "oi"},
["ll"] = {"valer", "l", "ll"},
},
["ir"] = {
--["-e"] = {"frigir", "[i]", nil, "e"},
["-o"] = {"fuxir", "[u]", nil, "o"},
["ai"] = {"parir", "[a]", "ai"},
["i"] = {"sentir", "[e]", "i"},
--["u"] = {"dormir", "[o]", "u"},
["z"] = {"ouvir", ".", "z"},
["í-í"] = {"proibir", "[i]", "í", "í"},
["ú-ú"] = {"reunir", "[u]", "ú", "ú"},
--["u-u-u"] = {"polir", "[o]", "u", "u", "u"},
--["i-i"] = {"agredir", "[e]", "i", "i"},
["i-i-i"] = {"agredir", "[e]", "i", "i", "i"},
},
["ír"] = {
["ai"] = {"saír", "[a]", "ai"},
["oi"] = {"oír", "[o]", "oi"},
},
}
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo[forma].sufijo_inf or conjinfo.sufijo_inf
local sufijos_ = obtener_sufijos(sufijo_inf, (forma == "ind_perf" and conjinfo[forma].nucleo) and forma.."_alt" or forma)
local nucleos
if not conjinfo[forma].nucleo then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleo_inf
elseif forma == "part" then
nucleos = conjinfo.nucleo_inf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos3, conjinfo.nucleos3, conjinfo.nucleos1}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleos4, conjinfo.nucleos1, conjinfo.nucleos3, conjinfo.nucleo_inf, conjinfo.nucleos1}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n}
end
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for _, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[1], sufijo_inf, forma)
for _,nucleo in ipairs(nucleos) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma)))
end
end
return
end
for i = EU, ELES do
local p = tostr[i]
if conjinfo[forma][i] then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local k = i
while sufijos_[k] do
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, (conjinfo.v == "pór" and sufijos_[k] == "or") and "ór" or sufijos_[k], sufijo_inf, forma)
for _, n in ipairs(nucleos[i]) do
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo, forma)))
if nexosufijo2 then
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo2, forma)))
end
end
k = k + 6
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local art2 = fmtinfo.art2
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local arr = res[forma]
local t = {}
local es_no_personal = formas_no_personales[forma]
local tiempo, i = match(forma, "^(.*)(%d)$")
local j
if not i then
tiempo = forma
i = 1
j = 3
else
j = tonumber(i)
end
i = tonumber(i)
local rest_ = i < NOS and resto or resto_pl
local rest_pl_ = resto_pl
for _, v in ipairs(arr) do
local rest = rest_
local rest_pl = rest_pl_
if auxiliar[tiempo] then
rest = " "..v..rest
v = auxiliar[tiempo][i]
end
if antepuesto[tiempo] then
local pronart = pron == "se" and REFLEXIVOS[j].." " or ""
pronart = (art and art ~= "") and pronart..art2.." " or pronart
insert(t, adv..pronart..f_links(v)..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..f_links(v)..f_links(rest_pl))
end
elseif interpuesto[tiempo] then
local pronart = pron == "se" and "-"..REFLEXIVOS[j].."-" or ""
pronart = (art and art ~= "") and pronart..art.."-" or pronart
if pronart and pronart ~= "" then
v = gsub(v, "^(.*r)(.-)$", function(u, v) return u..pronart..v end)
end
insert(t, adv..f_links(v)..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..f_links(v)..f_links(rest_pl))
end
else -- pospuesto
local pronart = pron == "se" and "-"..REFLEXIVOS[j] or ""
if pronart ~= "" or (art and art ~= "") then
local subs
if (art2 and art2 ~= "") and pron ~= "se" then -- artículo, sin pronombre
v, subs = gsubb(v, "^(.*)[srz]$", "%1")
else
v, subs = gsubb(v, "mos$", "mo")
end
if subs then
pronart = pronart..((art2 and art2 ~= "") and "-"..art2 or "")
else
pronart = pronart..((art and art ~= "") and "-"..art or "")
end
v = v..pronart
end
if forma == "inf" or forma == "inf_pers" then
insert(t, adv..v..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..v..f_links(rest_pl))
end
else
insert(t, adv..f_links(v)..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..f_links(v)..f_links(rest_pl))
end
end
end
end
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["impersonal"] = {},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["alt"] = {lista = true},
["nucleopres1"] = {lista = true},
["nucleopres3"] = {lista = true},
["nucleosubj4"] = {lista = true},
["nucleoimper"] = {lista = true},
["núcleopres1"] = {alias_de = "nucleopres1"},
["núcleopres3"] = {alias_de = "nucleopres3"},
["núcleosubj4"] = {alias_de = "nucleosubj4"},
["núcleoimper"] = {alias_de = "nucleoimper"},
["paradigma"] = {lista = true},
["nota"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local adv, r1 = match(tit, "^([sSnN][io]n?"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiíoó]r)%-?(s?e?)%-?(l?[aeo]?s?)(.-)$")
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[io]?n?"..ESPACIO.."?"..LETRA.."*[aeiíoó]r%-?s?e?%-?l?[aeo]?s?(.-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
local art2 = ""
if art ~= "" then
assert(find(art, "^l"), "el artículo debe comenzar por l")
art2 = gsub(art, "^l", "")
end
local sufijo_inf = match(v, "[aeiíoó]r$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
for N = 1, math.max(1,
maxindex(args["paradigma"]),
maxindex(args["alt"]),
maxindex(args["nucleopres1"]),
maxindex(args["nucleopres3"]),
maxindex(args["nucleosubj4"]),
maxindex(args["nucleoimper"])) do
local conjinfo = {}
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 find(v, rx) then
conjinfo = deepcopy(p[3])
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 find(v, rx) then
for k, v in pairs(p[3]) do
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
end
end
paradigmas_reconocidos[p[1]] = true
encontre_reg = true
break
end
end
if encontre_reg then
break
end
end
assert(encontre_reg, "paradigma no reconocido")
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
if not conjinfo.nucleo_inf then
conjinfo.nucleo_inf = sub(v, 1, len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
conjinfo.prefijo = ""
elseif not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, len(v) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
if not conjinfo.prefijo then -- caso en el que cambié el núcleo
conjinfo.prefijo = ""
end
conjinfo.nucleos1 = conjinfo.nucleos1 or {}
conjinfo.nucleos2 = conjinfo.nucleos2 or {}
conjinfo.nucleos3 = conjinfo.nucleos3 or {}
conjinfo.nucleos4 = conjinfo.nucleos4 or {}
conjinfo.alt = conjinfo.alt or {}
if args["alt"][N] then
insert_if_not(conjinfo.alt, args["alt"][N])
end
for i, a in ipairs(conjinfo.alt) do
if a ~= "REG" then
local n1, n2, n3
local info = alt_info[sufijo_inf][a]
assert(info, "Valor de alt no reconocido: "..a)
local sust
if info[3] then
n1, sust = gsubb(conjinfo.nucleo_inf, "^(.*)("..info[2]..")(.-)$", "%1#"..info[3].."#%3")
end
if info[4] then
n2, sust = gsubb(conjinfo.nucleo_inf, "^(.*)("..info[2]..")(.-)$", "%1#"..info[4].."#%3")
end
if info[5] then
n3, sust = gsubb(conjinfo.nucleo_inf, "^(.*)("..info[2]..")(.-)$", "%1#"..info[5].."#%3")
end
assert(sust, "Alternancia vocálica no reconocida")
insert_if_not(conjinfo.nucleos1, n1)
insert_if_not(conjinfo.nucleos2, n2)
insert_if_not(conjinfo.nucleos3, n3)
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
else
insert_if_not(conjinfo.nucleos1, conjinfo.nucleo_inf)
end
end
if args["nucleopres1"][N] then
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
end
if args["nucleopres3"][N] then
insert_if_not(conjinfo.nucleos2, args["nucleopres3"][N])
end
if args["nucleosubj4"][N] then
insert_if_not(conjinfo.nucleos3, args["nucleosubj4"][N])
end
if args["nucleoimper"][N] then
insert_if_not(conjinfo.nucleos4, args["nucleoimper"][N])
end
if not conjinfo.nucleos4[1] then -- tengo que escribir primero este núcleo
if (conjinfo.nucleos1[1] and conjinfo.nucleos2[1]) or conjinfo.alt[1] == "i" then
conjinfo.nucleos4[1] = gsub(conjinfo.nucleos1[1], "^[^#~]+$", "#%0#")
else
conjinfo.nucleos4[1] = conjinfo.nucleo_inf
end
end
if not conjinfo.nucleos3[1] then -- tengo que escribir primero este núcleo
if conjinfo.nucleos1[1] and not conjinfo.nucleos2[1] then
conjinfo.nucleos3[1] = gsub(conjinfo.nucleos1[1], "^[^#~]+$", "#%0#")
else
conjinfo.nucleos3[1] = conjinfo.nucleo_inf
end
else
conjinfo.nucleos3[1] = gsub(conjinfo.nucleos3[1], "^[^#~]+$", "#%0#")
end
if not conjinfo.nucleos1[1] then
conjinfo.nucleos1[1] = conjinfo.nucleo_inf
else
conjinfo.nucleos1[1] = gsub(conjinfo.nucleos1[1], "^[^#~]+$", "#%0#")
end
if not conjinfo.nucleos2[1] then
conjinfo.nucleos2[1] = conjinfo.nucleo_inf
else
conjinfo.nucleos2[1] = gsub(conjinfo.nucleos2[1], "^[^#~]+$", "#%0#")
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if (find(e, 'PART') or not find(e, 'ADJ')) and not find(e, "†") then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, art2=art2, resto=resto, resto_pl=resto_pl,impers=args["impersonal"]}
for _,s in ipairs(tostr) do
fmtinfo["subj_pres"..s] = deepcopy(resultante["subj_pres"..s])
end
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local impers = args["impersonal"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, impers)
end)
local cs, cs1, cs2, fila_pronombres_inf, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper
if impers == "3" then
fila_pronombres_inf = {"", "(por iso)", color=COLOR_INF, header=true, class="pc"}
fila_pronombres_ind = {"", "(iso)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(iso)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que iso)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(iso)", color=COLOR_IMPER, header=true, class="pc"}
cs = 2
elseif impers == "36" then
fila_pronombres_inf = {"", "(por iso)", "(por isos)", color=COLOR_INF, header=true, class="pc"}
fila_pronombres_ind = {"", "(iso)", "(isos)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(iso)", "(isos)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que iso)", "(que isos)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(iso)", "(isos)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_inf = {"", "por . eu", "por . tu", "por . ele, por . ela, por . vostede", "por . nós", "por . vós", "por . vostedes, por . eles, por . elas", color=COLOR_INF, header=true, class="pc"}
fila_pronombres_ind = {"", "eu", "tu", "ele, ela, vostede", "nós", "vós", "vostedes, eles, elas", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "eu", "tu", "ele, ela, vostede", "nós", "vós", "vostedes, eles, elas", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que eu", "que tu", "que ele, que ela, que vostede", "que nós", "que vós", "que vostedes, que eles, que elas", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tu)", "(vostede)", "(nós)", "(vós)", "(vostedes)", color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = math.floor(cs / 2)
cs2 = cs - cs1
local t = {}
insert(t, {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true})
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
insert(t, {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf})
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger})
insert(t, {{"Participio", header=true, color=COLOR_NP}, resultante.part})
else
resultante.inf.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.part.colspan = cs1-1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
insert(t, {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp})
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp})
insert(t, {{"Participio", header=true, color=COLOR_NP}, resultante.part})
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
insert(t, {{"Formas personales", colspan=cs}, color=COLOR_H, header=true})
insert(t, {{"Modo infinitivo", colspan=cs}, color=COLOR_INF, header=true})
insert(t, fila_pronombres_inf)
if mostrar_imper then
insert(t, {{"Infinitivo simple", color=COLOR_INF, header=true}, ic("inf_pers")})
insert(t, {{"Infinitivo compuesto", color=COLOR_INF, header=true}, ic("inf_pers_comp")})
else
insert(t, {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de infinitivo personal", color=COLOR_IMPER, header=true, colspan=cs}})
end
insert(t, {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true})
insert(t, fila_pronombres_ind)
insert(t, {{"Presente", color=COLOR_IND, header=true}, ic("ind_pres")})
insert(t, {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")})
insert(t, {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("ind_perf")})
insert(t, {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")})
insert(t, {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("ind_perf_comp")})
insert(t, {{"Pretérito pluscuamperfecto compuesto", color=COLOR_IND, header=true}, ic("ind_pluperf_comp")})
insert(t, {{"Futuro", color=COLOR_IND, header=true}, ic("ind_fut")})
insert(t, {{"Futuro compuesto", color=COLOR_IND, header=true}, ic("ind_fut_comp")})
insert(t, {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("ind_anter")})
insert(t, {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true})
insert(t, fila_pronombres_cond)
insert(t, {{"Condicional simple", color=COLOR_COND, header=true}, ic("cond")})
insert(t, {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("cond_comp")})
insert(t, {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true})
insert(t, fila_pronombres_subj)
insert(t, {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")})
insert(t, {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")})
insert(t, {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")})
insert(t, {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")})
insert(t, {{f("Futuro{†}"), color=COLOR_SUBJ, header=true}, ic("subj_fut")})
insert(t, {{f("Futuro compuesto{†}"), color=COLOR_SUBJ, header=true}, ic("subj_fut_comp")})
insert(t, {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true})
insert(t, fila_pronombres_imper)
if mostrar_imper then
insert(t, {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")})
else
insert(t, {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}})
end
insert(t, {{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
insert(t, {{args["nota"] and args["nota"] or "", colspan=cs}})
local paradigmas_t = {}
local cats = {}
if es_irregular then
insert(cats, "GL:Verbos irregulares")
paradigmas_reconocidos["amar"] = nil
paradigmas_reconocidos["temer"] = nil
paradigmas_reconocidos["partir"] = nil
paradigmas_reconocidos["pór"] = nil
else
insert(cats, "GL:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "GL:Verbos del paradigma "..p)
end
impers = impers or ""
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "GL:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "GL:Verbos terciopersonales")
end
if find(impers, "^ind") then
insert(cats, "GL:Verbos de objeto indirecto")
end
if defectivo then
insert(cats, "GL:Verbos defectivos")
end
if sufijo_inf == "ar" then
insert(cats, "GL:Verbos de la primera conjugación")
elseif sufijo_inf == "er" then
insert(cats, "GL:Verbos de la segunda conjugación")
elseif sufijo_inf == "ir" or sufijo_inf == "ír" then
insert(cats, "GL:Verbos de la tercera conjugación")
else
insert(cats, "GL:Verbos de la cuarta conjugación")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")",
t,
ns == 0 and cats or {})
end
return export
4z79lsk0m0xeis2l9jieaceqxf3t3zf
Módulo:flex/ext
828
1056427
6118171
6117311
2026-06-16T02:18:20Z
TMCbot
164594
.
6118171
Scribunto
text/plain
-- Flexión del extremeño
-- Autor: Tmagc
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local maxindex = m_table.maxIndex
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local len = m_str.len
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local vocal_no_tilde = "aeiouüAEIOUÜ"
local vocal_tilde = "áéíóúÁÉÍÓÚ"
local vocal = vocal_no_tilde..vocal_tilde
local cons = "bcdfghjklmnñpqrstvwxyzçBCFGHJKLMNÑPQRSTVWXYZÇ"
local espacios = "%-‐%s"
local guion = "%-"
local VOCAL = "["..vocal.."]"
local CONS = "["..cons.."]"
local CONS_SALVO_H = "[^"..vocal.."hH~#{}]"
local ESPACIO = "["..espacios.."]"
local LETRA = "[^"..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 try(p, rx, pl, f, fpl, pl2, femenino)
local p2, sust = gsubb(p, rx, "~%0~")
if not sust then
return nil
end
if not pl then
return {m={p2}, p={}, f={}, fp={}}
end
if not femenino or not f then
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={}, fp={}}
else
return {m={p2}, p={gsub1(p, rx, pl)}, f={}, fp={}}
end
end
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}}
end
return {m={p2}, p={gsub1(p, rx, pl)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}}
end
-- https://elcanton.org/2016/02/17/sengulal-i-plural/
local function flexionar_palabra(p, g, forzar_s, on)
local adj = g == "mf"
local function rep_a(v) return "~"..quitar_tilde[v].."a~" end
local function rep_as(v) return "~"..quitar_tilde[v].."as~" end
local function rep_is(v) return "~"..quitar_tilde[v].."is~" end
local function rep_a_2(v, c) return "~"..quitar_tilde[v]..c.."a~" end
local function rep_as_2(v, c) return "~"..quitar_tilde[v]..c.."as~" end
local function rep_is_2(v, c) return "~"..quitar_tilde[v]..c.."is~" end
local function rep_n(v, c) return "~"..agregar_tilde[v]..c.."~" end
local es_monosilabo = find(p, "^"..CONS.."-[iuü]?[aeoiu][iu]?"..CONS.."-$")
local sin_tilde = not find(p, "["..vocal_tilde.."]")
local fl = try(p, "o$", "~os~", "~a~", "~as~", nil, adj)
or try(p, "u$", "~us~", "~a~", "~as~", nil, adj)
or try(p, "([td]i?)á$", "~%1ais~", nil, nil, nil, adj) -- -dad, -tad, -idad [[libertá]]
or try(p, "tú$", "~tuis~", nil, nil, nil, adj) -- tud, [[virtú]]
or try(p, VOCAL.."$", "~%0s~", nil, nil, nil, adj)
or try(p, "o[lr]$", "~oris~", "~ora~", "~oras~", nil, adj)
or try(p, "[aeiou][íú][ns]$", "~%0is~", "~%0a~", "~%0as~", nil, adj)
or try(p, es_monosilabo and "([aeiou])([ns])$" or "([áéíóú])([ns])$", rep_is_2, rep_a_2, rep_as_2, nil, adj) -- agudas/monosílabos en n, s
or try(p, (es_monosilabo or sin_tilde) and "x$" or "^%A$", forzar_s and "~xs~" or "~xis~", nil, nil, nil, adj) -- agudas/monosílabos en x
or try(p, "x$", nil, nil, nil, nil, adj) -- llanas/esdrújulas en x
or try(p, sin_tilde and "([aeiou])([ui]?"..CONS.."+[iu]?[aeiou][iu]?n)$" or "^%A$", "~%0~", nil, nil, rep_n, adj) -- llanas en n
or try(p, "[ns]$", nil, nil, nil, nil, adj) -- llanas/esdrújulas en s, esdrújulas en n
or try(p, sin_tilde and VOCAL.."[lrdjzñ]$" or "^%A$", "~%0is~", nil, nil, nil, adj)
or try(p, VOCAL.."[lrdjzñ]$", nil)
or try(p, "("..CONS..")y$", "~%1is~", nil, nil, nil, adj) -- ferry, REVISAR
or try(p, CONS.."[sz]$", nil)
or try(p, "[sz]"..CONS.."$", nil)
or try(p, "ch$", forzar_s and "~%0s~" or "~%0es~")
or try(p, CONS..CONS.."$", "~%0s~")
or try(p, CONS.."$", "~%0s~")
if fl then
return fl
end
error("No se pudo determinar la flexión de la palabra")
end
local function flexion_sust_adj(palabras, g, forzar_s, on, copulativa)
local a, separador, b = match(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, forzar_s, on)
local flex2 = copulativa and flexionar_palabra(b, g, forzar_s, on) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto = match(palabras, "^("..guion.."?"..LETRA.."+)(.-)$")
local flex = flexionar_palabra(p, g, forzar_s, on)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["nota"],
{},
ns == 0 and cats or {}
)
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_ = flexion_sust_adj(title, modo, args["s"], args["on"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." regulares")
elseif find(title, LETRA..ESPACIO..LETRA) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["nota"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["on"] = {tipo = "bool"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "EXT:Locuciones sustantivas" or "EXT:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["on"] = {tipo = "bool"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "EXT:Locuciones adjetivas" or "EXT:Adjetivos")
end
-- FALTA TERMINAR LOS VERBOS
local YO, TU, EL, NOSOTROS, VOSOTROS, ELLOS = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"yo", "tu", "él, vusté", "nusotrus", "vusotrus", "ellus"}
local PRONOMBRES_SUBJ = {"que yo", "que tu", "que él, vusté", "que nusotrus", "que vusotrus", "que ellus"}
local PRONOMBRES_IMP = {"―", "(tú)", "(vusté)", "(nusotrus)", "(vusotrus)", "―"}
local IMPERSONALES = {"", "", "(ello)", "", "", "(ellus)"}
local IMPERSONALES_SUBJ = {"", "", "(que ello)", "", "", "(que ellus)"}
local REFLEXIVOS = {"me", "te", "se", "nos", "os", "se"}
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local formas_no_personales = {
["ger"] = true,
["part"] = true,
["inf"] = true,
}
local formas_personales = {
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["ind_fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["subj_fut"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["ind_perf_comp"] = true,
["ind_pluperf"] = true,
["ind_anter"] = true,
["ind_fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
["subj_fut_comp"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local sufijos = {
["al"] = {
["ger"] = {"andu"},
["part"] = {"au"},
["ind_pres"] = {"u", "as", "a", "amus", "ais", "an"},
["ind_imp"] = {"ava", "avas", "ava", "avamus", "avais", "avan",
nil, nil, nil, "ávamus", "ávais", nil,
nil, nil, nil, nil, "avis"},
["ind_perf"] = {"é", "asti", "ó", "émus", "aistis", "arun",
"ei", "esti", nil, nil, "estis", "orin"},
["ind_perf_alt"] = {"é", "asti", "ó", "emos", "astis", "arun"},
["ind_fut"] = {"aré", "arás", "ará", "aremus", "areis", "arán",
"arei"},
["subj_pres"] = {"i", "is", "i", "emus", "eis", "in"},
["subj_imp"] = {"ara", "aras", "ara", "áramus", "árais", "aran"},
["subj_fut"] = {"ari", "aris", "ari", "árimus", "áris", "arin"},
["cond"] = {"aría", "arías", "aría", "ariamus", "ariais", "arían",
"aríe", "aríes", "aríe", "ariemus", "arieis", "aríen"},
["imper"] = {nil, "a", "i", nil, "ai", "in"}
},
["el"] = {
["ger"] = {"iendu"},
["part"] = {"íu"},
["ind_pres"] = {"u", "is", "i", "emus", "eis", "in"},
["ind_imp"] = {"ía", "ías", "ía", "iamus", "iais", "ían",
nil, nil, nil, nil, "ivis", nil},
["ind_perf"] = {"í", "isti", "ió", "imus", "istis", "ierun",
nil, nil, nil, nil, nil, "iorin"},
["ind_perf_alt"] = {"e", "isti", "o", "imus", "istis", "ierun"},
["ind_fut"] = {"eré", "erás", "erá", "eremus", "ereis", "erán",
"erei"},
["subj_pres"] = {"a", "as", "a", "amus", "ais", "an"},
["subj_imp"] = {"iera", "ieras", "iera", "iéramus", "iérais", "ieran"},
["subj_fut"] = {"ieri", "ieris", "ieri", "iérimus", "iéris", "ierin"},
["cond"] = {"ería", "eríes", "ería", "eríamos", "eríais", "eríen",
"eríe", "eríes", "eríe", "eríemos", "eríeis", "eríen"},
["imper"] = {"-", "i", "a", nil, "ei", "an"}
},
["il"] = {
["ger"] = {"iendu"},
["part"] = {"íu"},
["ind_pres"] = {"u", "is", "i", "imus", "ís", "in"},
["ind_imp"] = {"ía", "ías", "ía", "iamus", "iais", "ían",
nil, nil, nil, nil, "ivis", nil},
["ind_perf"] = {"í", "isti", "ió", "imus", "istis", "ierun",
nil, nil, nil, nil, nil, "iorin"},
["ind_perf_alt"] = {"e", "isti", "o", "imus", "istis", "ierun"},
["ind_fut"] = {"iré", "irás", "irá", "iremus", "ireis", "irán",
"irei"},
["subj_pres"] = {"a", "as", "a", "amus", "ais", "an"},
["subj_imp"] = {"iera", "ieras", "iera", "iéramus", "iérais", "ieran"},
["subj_fut"] = {"ieri", "ieris", "ieri", "iérimus", "iéris", "ierin"},
["cond"] = {"iría", "iríes", "iría", "iríamos", "iríais", "iríen",
"iríe", "iríes", "iríe", "iríemos", "iríeis", "iríen"},
["imper"] = {"-", "i", "a", nil, "í", "an"}
},
}
local pronombres = {"me", "te", "se", "nos", "os", "se"}
local auxiliar = {
["inf_comp"] = {"tenel"},
["ger_comp"] = {"teniendu"},
["ind_perf_comp"] = {"é", "ás", "á", "avemus", "aveis", "ain",
"ei", nil, nil, "amus", "eis", "án"},
["ind_cont"] = {"tengu", "tienis", "tien", "tenemus", "teneis", "tienin",
nil, nil, "tieni"},
["ind_pluperf"] = {"avía", "avías", "avía", "aviamus", "aviais", "avían",
"vía", "vías", "vía", "viamus", "viais", "vían",
"diva", "divas", "diva", "divamus", "divais", "divan",
"iva", "ivas", "iva", "ivamus", "ivais", "ivan"},
["ind_anter"] = {"ubi", "abisti", "ubu", "abimus", "abistis", "ubun"},
["ind_fut_comp"] = {"abré", "abrás", "abrá", "abremus", "abreis", "abrán",
"bré", "brás", "brá", "bremus", "breis", "brán",
"averé", "averás", "averá", "averemus", "avereis", "averán"},
["cond_comp"] = {"uviera", "uvieras", "uviera", "uviéramus", "uviérais", "uvieran",
"aviera", "avieras", "aviera", "aviéramus", "aviérais", "avieran"},
["subj_perf"] = {"aiga", "aigas", "aiga", "aigamus", "aigais", "aigan"},
["subj_pluperf"] = {"huera", "hueras", "huera", "huéramus", "huérais", "hueran"},
}
local function obtener_sufijos(sufijo_inf, forma)
if sufijo_inf == "al" then
return sufijos[1][forma]
elseif sufijo_inf == "el" 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 == "al" then
if find(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
local _, cnt = gsub(sufijo, "[aeiou]", "")
if cnt == 1
and not find(sufijo, "[áéíóú]")
and find(sub(sufijo, -1), "[aeiouns]") then
if nexo == "cu" then
return sub(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
end
if find(sufijo, "^ar") then
if find(nexo, "^[~#]?[bdr]?r[~#]?$") then
return nexo..sub(sufijo, 3)
end
end
else -- ER/IR/ÍR
if find(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 == "qu" then
return "~c~"..sufijo
end
if nexo == "C" then
return "~zc~"..sufijo
end
end
if find(sufijo, "^[aeoáéó]") then
if nexo == "gü" then
return "g~uy~"..sufijo
end
if nexo == "u" then
return "u~y~"..sufijo
end
end
if find(sufijo, "^i[aeoáéó]") then
if (nexo == "ñ" or nexo == "ll") then
return "~"..nexo..sub(sufijo, 2).."~"
end
if nexo == "gü" then
return "g~uy~"..sub(sufijo, 2)
end
if nexo == "u" then
return "u~y~"..sub(sufijo, 2)
end
if nexo == "e" then
return nexo.."~y~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i[^aeiouáéíóú]") then
if nexo == "e" then
return nexo.."~í~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i[eé]") then
if find(nexo, "u#$") then -- ir --> fuera (subj)
return nexo..sub(sufijo, 2)
end
if nexo == "#j#" or nexo == "~j~" then
return nexo..sub(sufijo, 2)
end
end
if find(sufijo, "^í$") then
if nexo == "#j#" or nexo == "~j~" then
return nexo.."~e~"
end
end
if find(sufijo, "^ió$") then
if nexo == "#j#" or nexo == "~j~" then
return nexo.."~o~"
end
end
if find(sufijo, "^[ie]r") then
if find(nexo, "^[~#]?[bdr]?r[~#]?$") then
return nexo..sub(sufijo, 3)
end
end
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_ = gsub(nucleo, "[~#]", "")
local nexosufijo_ = gsub(nexosufijo, "[~#]", "")
if find(nucleo_, "[yi]$") and find(nexosufijo_, "^i") then -- se juntan dos íes o y-i (ej. reír, freír, oír)
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1")
elseif find(nucleo_, "^[^áéíóú]-[aeiou]h?$") and find(nexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- sufijo con i/u tónica (caISTE, caIMOS, caIDO, oID, reHÚyo etc.)
return nucleo..gsub1(nexosufijo, "^([~#]?h?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleo_, "[^gq][aeiou]$") and find(nexosufijo_, "^i[aeiouáéíóú]") then -- se junta [aeiou]i[aeiouáéíóú] -> cambio a y (creYO) PERO [[chinguiar]] -> chinguIando
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~y~")
elseif find(nucleo_, "[aeiou]$") and find(nexosufijo_, "^id$") then -- reír -> reÍd, embaír -> embaÍd
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~í~")
elseif find(nucleo_, "^[^aeiouáéíóú]+$")
and (find(nexosufijo_, "^"..CONS.."?"..CONS.."?".."[iuü]?[áéó][iuü]?[ns]?$") or find(nexosufijo_, "^[íú][ns]?$")) then -- caso de dar, vos *d+ás, debo quitar la tilde
return nucleo..gsub1(nexosufijo, "[áéíóú]", function(v) return "~"..quitar_tilde[v].."~" end)
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
local prefijo_ = gsub(prefijo, "[~#]", "")
local nucleonexosufijo_ = gsub(nucleonexosufijo, "[~#]", "")
if prefijo_ and find(prefijo_, "[aeiou]") and not find(prefijo_, "[áéíóú]") then
if find(prefijo_, "^[^áéíóú]-[aeiou]h?$") and find(nucleonexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- nucleonexosufijo con i/u tónica (rehacer -> rehíce)
return prefijo..gsub1(nucleonexosufijo, "^([~#]?h?[~#]?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleonexosufijo_, "^("..CONS.."*[iuü]?)([aeiou])([iuü]?[ns]?)$") then -- monosílabo: prever --> prevén
return prefijo..gsub1(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 = {
["al"] = {
{"añuncial", {"ial$"}, { --necesidad de explicitar el diptongo, aunque esta variante es la que consideramos como la regular
}},
{"evacual", {"cual$"}, {
nexo = "cu"
}},
{"averigual", {"gual$"}, {
nexo = "gu"
}},
{"complical", {"cal$"}, {
nexo = "c"
}},
{"llegal", {"gal$"}, {
nexo = "g"
}},
{"actual", {"ual$"}, {
nexo = "u"
}},
{"realizal", {"zal$"}, {
nexo = "z"
}},
{"amal", {"al$"}, {
}},
},
["el"] = {
{"llel", {"llel$"}, { -- Existe esto??
nexo = "ll"
}},
{"guel", {"guel$"}, { -- Existe esto??
nexo = "gu"
}},
{"güel", {"güel$"}, { -- Existe esto??
nexo = "gü"
}},
{"quel", {"quel$"}, { -- Existe esto??
nexo = "qu"
}},
{"parecel", {"[aeiou]cel$"}, {
nexo = "C"
}},
{"vencel", {"[^aeious]cel$"}, { -- los verbos en -scer NO entran en este paradigma (ver fosforescer o evanescer)
nexo = "c"
}},
{"leel", {"eel$"}, {
nexo = "e"
}},
{"protegel", {"gel$"}, {
nexo = "g"
}},
{"atañel", {"ñel$"}, {
nexo = "ñ"
}},
{"uel", {"uel$"}, { -- Existe esto??
nexo = "u"
}},
{"temel", {"el$"}, {
}},
},
["il"] = {
{"producil", {"ducil$"}, { -- REVISAR
nucleo = "du",
nexo = "C",
ind_perf = {nexo = "~j~"},
subj_imp = {nexo = "~j~"},
}},
{"escabullil", {"llil$"}, {
nexo = "ll"
}},
{"distinguil", {"guil$"}, {
nexo = "gu"
}},
{"argüil", {"güil$"}, {
nexo = "gü"
}},
{"delinquil", {"quil$"}, {
nexo = "qu"
}},
{"lucil", {"[aeiou]cil$"}, {
nexo = "C"
}},
{"fruncil", {"[^aeious]cil$"}, {
nexo = "c"
}},
{"dirigil", {"gil$"}, {
nexo = "g"
}},
{"gruñil", {"ñil$"}, {
nexo = "ñ"
}},
{"construil", {"uil$"}, {
nexo = "u"
}},
{"partil", {"il$"}, {
}},
},
["íl"] = {
{"reíl", {"eíl$"}, {
nucleo = "e",
alt = {"í-i"},
}},
{"íl", {"íl$"}, { -- para que oír no tire error
}},
}
}
local paradigmas_irregulares = {
["al"] = {
{"andal", {"^d?e?s?andal$"}, { -- cuidado con mandar
nucleo = "and",
ind_perf = {nucleo = "anduv"},
subj_imp = {nucleo = "anduv"},
}},
{"dal", {"^d?e?s?dal$"}, { -- no pueden ir otros verbos como "andar o quedal"
nucleo = "d",
ind_pres = {{"doi", "do"}},
ind_perf = {sufijo_inf = "el"},
subj_pres = {nucleo = "de"},
subj_imp = {sufijo_inf = "el"},
}},
{"erral", {"^erral$"}, {
nucleo = "err",
alt = {"ye"},
}},
{"inhestal", {"inhestal$"}, {
alt = {"ie"},
part = {"inhiesto"}
}},
{"tal", {"^tal$"}, {
ind_pres = {{"toi", "to"}},
ind_perf = {nucleo = "tuv"},
subj_pres = {nucleo = "te"},
subj_imp = {nucleo = "tuv"},
imper = {nil, nil, {"tea"}, nil, {"tai"}, {"tean"}}
}},
{"enfrial", {"enfrial$"}, {
nexo = "i",
}},
--{"culial", {"culial$"}, { por precaución sacamos esto
-- nexo = "I"
--}},
{"aislal", {"aislal$"}, {
alt = {"í"}
}},
{"avergoñal", {"avergoñal$"}, {
alt = {"üe"}
}},
{"auñal", {"^auñal$"}, { -- REVISAR
alt = {"ú"}
}},
{"contal", {"contal$"}, {
alt = {"ue"}
}},
{"pensal", {"^pensal$"}, { -- no puede ir compensar
alt = {"ie"}
}},
},
["el"] = {
{"cabel", {"^cabel$"}, {
ind_pres = {{"quepo"}},
ind_fut = {nucleo = "ca", nexo = "#br#"},
ind_perf = {nucleo = "cup"},
subj_pres = {nucleo = "quep"},
subj_imp = {nucleo = "cup"},
cond = {nucleo = "ca", nexo = "#br#"},
}},
{"cael", {"cael$"}, { -- REVISAR http://ast.oslin.org/index.php?action=lemma&lemma=11064 hay alguna regla detrás de esto??
nucleo = "ca",
ind_pres = {{"caigo", "cayo"}, {"caes", "cayes"}, nil, {"caemos", "cayemos"}, {"caéis", "cayéis"}, {"caen", "cayen"}},
subj_pres = {nucleo = "caig"},
imper = {nil, nil, nil, {"caiga"}, {"caigamos"}, nil, {"caigan"}}
}},
{"cocel", {"cocel$"}, {
nucleo = "co",
nexo = "S", -- evitar C (epéntesis con zc)
alt = {"ue"},
}},
{"facel", {"[hfj]acel$"}, { -- REVISAR
nucleo = "a",
nexo = "S", -- evitar C (epéntesis con zc)
part = {"echu"},
ind_pres = {{"ago", "aigo"}},
ind_perf = {nucleo = "i"},
ind_fut = {nucleo = "a", nexo = "#dr#"},
subj_pres = {nucleo = "ag", nexo = ""},
subj_imp = {nucleo = "i"},
cond = {nucleo = "a", nexo = "#dr#"},
}},
{"habel", {"^habel$"}, {
ind_pres = {{"he"}, {"has"}, {"ha", "hai{IMPERSONAL}"}, {"hemos", "habemos"}, nil, {"han"}},
ind_perf = {nucleo = "hub"},
ind_fut = {nucleo = "ha", nexo = "#br#"},
subj_pres = {nucleo = "hay"},
subj_imp = {nucleo = "hub"},
cond = {nucleo = "ha", nexo = "#br#"},
imper = {nil, {"he{†}", "habe{†}"}, {"he{†}", "habe{†}"}, {"haya{†}"}, {"hayamos{†}"}, nil, {"hayan{†}"}},
}},
{"mecel", {"^r?e?mecel$"}, {
nexo = "S", -- evitar C (epéntesis con zc)
}},
{"morrel", {"morrel$"}, {
nucleo = "morr",
alt = {"ue"},
part = {"muertu"},
}},
{"golel", {"^golel$"}, {
alt = {"üe"},
}},
{"volvel", {"olvel$"}, {
nucleo = "olv",
alt = {"ue"},
part = {"ueltu"}
}},
{"placel", {"placel$"}, { -- REVISAR, existe esto??
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},
}},
{"podel", {"podel$"}, {
nucleo = "pod",
alt = {"ue"},
ger = {"pudiendo"},
ind_perf = {nucleo = "pud"},
ind_fut = {nucleo = "po", nexo = "#dr#"},
subj_imp = {nucleo = "pud"},
cond = {nucleo = "po", nexo = "#dr#"},
}},
{"ponel", {"ponel$"}, {
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"},
cond = {nucleo = "pon", nexo = "#dr#"},
imper = {nil, {"pon"}, {"ponga"}, nil, nil, {"pongan"}},
}},
{"proveel", {"proveel$"}, {
nucleo = "prov",
part = {"provisto", "proveído{†}"}
}},
{"querel", {"querel$"}, { -- REVISAR
nucleo = "quer",
alt = {"ie"},
ind_perf = {nucleo = "quis"},
ind_fut = {nucleo = "que", nexo = "#dr#"},
subj_imp = {nucleo = "quis"},
cond = {nucleo = "que", nexo = "#dr#"},
}},
{"rael", {"^rael$", "^rayel$"}, { -- no contraer, etc. REVISAR
ind_pres = {{"raigo", "rayo"}},
subj_pres = {nucleo = {"raig", "ray"}},
imper = {nil, nil, {"raiga", "raya"}, nil, {"raíi", "rayíi"}, {"raigan", "rayan"}}
}},
{"roel", {"roel$", "royel$"}, { -- REVISAR
nucleo = "ro",
ind_pres = {{"roigo", "royo"}},
subj_pres = {nucleo = {"roig", "roy"}},
imper = {nil, nil, {"roiga", "roya"}, nil, {"roíi", "royíi"}, {"roigan", "royan"}}
}},
{"rompel", {"^rompel$", "^arrompel$"}, { -- no corromper, derromper, entrerromper
nucleo = "romp",
alt = {"ue"},
part = {"rotu"}
}},
{"sabel", {"sabel$"}, {
nucleo = "sab",
ind_pres = {{"sé"}},
ind_perf = {nucleo = "sup"},
ind_fut = {nucleo = "sa", nexo = "#br#"},
subj_pres = {nucleo = "sep"},
subj_imp = {nucleo = "sup"},
cond = {nucleo = "sa", nexo = "#br#"},
imper = {nil, nil, {"sepa"}, nil, nil, {"sepan"}}
}},
{"sel", {"^sel$"}, {
ind_pres = {{"soi", "so"}, {"yes"}, {"ye"}, {"somos"}, {"sois"}, {"son"}},
ind_imp = {{"yera"}, {"yeres"}, {"yera"}, {"yéramos", "yéremos"}, {"yerais", "yereis"}, {"yeren"}},
ind_perf = {{"fui"}, {"fosti", "fuesti", "fuisti"}, {"foi", "fo"}, {"fomos", "fuemos", "fuimos"}, {"fostis", "fuestis", "fuistis"}, {"foron", "fueron"}},
subj_pres = {nucleo = {"sey", "sí"}},
subj_imp = {nucleo = "", nexo = "#fu#"}, -- no puedo poner "u" porque obtendría "fuyera" -- REVISAR: hay que agregar la variante con fo
imper = {nil, {"sé"}, {"sea"}, nil, nil, {"sean"}}
}},
{"tenel", {"tenel$", "^tel$"}, {
nucleo = "ten",
alt = {"ie"},
ind_pres = {{"tengo", "teo", "to"}},
ind_perf = {nucleo = {"tev", "tuv"}},
ind_fut = {nucleo = "ten", nexo = "#dr#"},
subj_pres = {nucleo = "teng"},
subj_imp = {nucleo = "tuv"},
cond = {nucleo = "ten", nexo = "#dr#"},
imper = {nil, {"ten"}, {"tenga"}, nil, nil, {"tengan"}}
}},
{"trael", {"trael$", "trayel$"}, {
nucleo = "tra",
ind_pres = {{"traigo"}},
ind_perf = {nucleo = "tra", nexo = "#j#"},
subj_pres = {nucleo = "traig"},
subj_imp = {nucleo = "tra", nexo = "#j#"},
imper = {nil, nil, nil, {"traiga"}, {"traigamos"}, nil, {"traigan"}}
}},
{"vel", {"^vel$", "^antevel$", "^entrevel$", "^prevel$", "^revel$"}, {
nucleo = "v",
part = {"visto"},
ind_pres = {{"veo"}},
subj_pres = {nucleo = "ve"},
imper = {nil, nil, {"vea"}, nil, nil, {"vean"}}
}},
{"yacel", {"^yacel$", "^subyacel$"}, { -- REVISAR: existe esto?
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"}, {"yazca", "yazga", "yaga"}, nil, nil, {"yazcan", "yazgan", "yagan"}}
}},
{"movel", {"movel$"}, {
alt = {"ue"},
}},
{"entendel", {"entendel$"}, {
alt = {"ie"},
}},
},
["il"] = {
{"asil", {"asil$"}, { -- REVISAR: existe esto
nucleo = "as",
ind_pres = {{"asgo"}},
subj_pres = {nucleo = "asg"},
imper = {nil, nil, {"asga"}, {"asgamos"}, nil, {"asgan"}}
}},
{"abril", {"[^js]abril$", "^abril$"}, { -- abrir, cubrir y derivados, pero no "desabrir" ni "jabrir" (son regs.)
nucleo = "abr",
part = {"abiertu"}
}},
{"abril", {"ubril$"}, { -- 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 = {"ubiertu"}
}},
-- 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í) --> esto no existe en ast creo
-- 3. bendecir, maldecir: agrego bendito, maldito al pp
-- 4. condecir, contradecir, desdecir, predecir: parto de 1 pero agrego el futuro regular que esta aceptado
{"dicil", {"^dicil$", "^redicil$", "^entredicil$", "^antedicil$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"dichu"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
ind_fut = {nucleo = "d", nexo=""},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
cond = {nucleo = "d", nexo=""},
imper = {nil, {"di"}, {"diga"}, nil, nil, {"digan"}}
}},
{"bendicil", {"bendicil$", "maldicil$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"decíu{PART}", "ditu{ADJ}"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
imper = {nil, {"diz"}, {"diga"}, nil, nil, {"digan"}}
}},
{"predicil", {"dicil$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"dichu"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
ind_fut = {nucleo = {"dec", "d"}, nexo=""},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
cond = {nucleo = {"dec", "d"}, nexo=""},
imper = {nil, {"dí"}, {"diga"}, nil, nil, {"digan"}}
}},
{"erguil", {"^erguil$"}, {
nucleo = "el",
alt = {"ye-i", "i-i"},
}},
{"imprimil", {"imprimil$"}, {
nucleo = "imprim",
part = {"imprimíu{PART}", "impresu{ADJ}"}
}},
{"dil", {"^dil$"}, {
ind_pres = {{"voi", "vo"}, {"vas"}, {"va"}, {"vamos"}, {"vais"}, {"van"}},
ind_imp = {{"diba"}, {"dibas"}, {"diba"}, {"díbamos", "díbemos"}, {"dibais", "dibeis"}, {"diben"}},
ind_perf = {{"fui"}, {"fosti", "fuesti", "fuisti"}, {"foi", "fo"}, {"fomos", "fuemos", "fuimos"}, {"fuestis", "fuistis"}, {"foron", "fueron"}},
subj_pres = {{"fora", "vaiga", "vaya"}, {"vaigas", "vayas"}, {"fora", "vaiga", "vaya"}, {"vaigamos", "vayamos"}, {"vaigáis", "vayáis"}, {"vaigan", "vayan"}},
subj_imp = {nucleo = "", nexo = "#fu#"}, -- no puedo poner "u" porque obtendría "fuyera" -- REVISAR: faltan los otros nexos posibles
imper = {nil, {"ve"}, {"vaya"}, nil, nil, {"vayan"}}
}},
{"pudril", {"pudril$"}, { -- REVISAR: existe esto?
nucleo = "pudr",
part = {"podridu"}
}},
{"salil", {"salil$"}, {
nucleo = "sal",
ind_pres = {{"salgo"}},
ind_fut = {nucleo = "sal", nexo = "#dr#"},
subj_pres = {nucleo = "salg"},
cond = {nucleo = "sal", nexo = "#dr#"},
imper = {nil, {"sal"}, {"salga"}, nil, nil, {"salgan"}}
}},
{"escribil", {"scribil$"}, {
nucleo = "scrib",
part = {"scrito"}
}},
{"valil", {"valil$"}, {
nucleo = "val",
ind_pres = {{"valgo"}},
ind_fut = {nucleo = "val", nexo = "#dr#"},
subj_pres = {nucleo = "valg"},
cond = {nucleo = "val", nexo = "#dr#"},
imper = {nil, nil, {"valga"}, nil, nil, {"valgan"}}
}},
{"venil", {"venil$"}, {
nucleo = "ven",
alt = {"ie-i"},
ind_pres = {{"vengo"}},
ind_fut = {nexo = "#dr#"},
ind_perf = {nucleo = "vin"}, -- REVISAR: la 3s es él vIEno, no *vino, hay más verbos así?
subj_pres = {nucleo = "veng"},
cond = {nexo = "#dr#"},
imper = {nil, {"ven"}, {"venga"}, nil, nil, {"vengan"}}
}},
{"sentil", {"sentil$"}, { -- discernir entra en este paradigma tmb.
alt = {"ie-i"}
}},
{"podril", {"podril$"}, {
alt = {"u-u"},
}},
{"reunil", {"reunil$"}, {
alt = {"ú"}
}},
{"prohibil", {"prohibil$"}, {
alt = {"í"}
}},
{"rehenchil", {"rehenchil$"}, {
alt = {"í-i"}
}},
{"dormil", {"dormil$"}, {
alt = {"ue-u"}
}},
},
["íl"] = {
{"desvaíl", {"desvaíl$"}, { -- 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íl", {"freíl$"}, {
nucleo = "fre",
part = {"frito{PART/ADJ}", "freído{PART}"},
}},
{"oíl", {"oíl$"}, {
nucleo = "o",
alt = {"oy"},
ger = {"oyendo"},
ind_pres = {{"oigo"}},
subj_pres = {nucleo = "oig"},
imper = {nil, nil, nil, {"oiga"}, {"oigamos"}, nil, {"oigan"}}
}},
},
}
local alt_info = {
["al"] = {
["í"] = {"aislal", "i", "í"}, -- tb. descafeinar
["ú"] = {"aunal", "u", "ú"}, -- tb. rehusar
["ie"] = {"pensal", "e", "ie"},
["ue"] = {"contal", "ou", "ue"}, -- también jugar
["üe"] = {"agoral", "o", "üe"},
["hue"] = {"desosal", "ou", "hue"},
["ye"] = {"erral", "e", "ye"},
},
["el"] = {
["i"] = {"???", "e", "i"}, -- REVISAR: existe esto??
["ie"] = {"entendel", "e", "ie"},
["ue"] = {"movel", "o", "ue"},
["üe"] = {"golel", "o", "üe"},
},
["il"] = {
["i"] = {"???", "e", "i"}, -- REVISAR: existe esto??
["í"] = {"prohibil", "i", "í"},
["í-i"] = {"rehenchil", "e", "í", "i"},
-- ["i-i"] = {"pedil", "e", "i", "i"},
--["ie"] = {"discernil", "ei", "ie"}, -- por las dudas también la i, por inquirir
["ie-i"] = {"sentil", "ei", "ie", "i"}, -- inquirir
["u"] = {"???", "o", "u", "u"},
["ú"] = {"reunil", "u", "ú"},
["u-u"] = {"podril", "o", "u", "u"}, -- REVISAR: existe esto??
["ue-u"] = {"dormil", "o", "ue", "u"},
["ye-i"] = {"erguil", "e", "ye", "i"},
},
["íl"] = {
["í-i"] = {"reíl", "e", "í", "i"},
["oy"] = {"oíl", "o", "oy", "oy"},
}
}
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo[forma].sufijo_inf or conjinfo.sufijo_inf
if sufijo_inf == "ar" and conjinfo[forma].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 sufijos_ = obtener_sufijos(sufijo_inf, (forma == "ind_perf" and conjinfo[forma].nucleo) and forma.."_alt" or forma)
local nucleos
if not conjinfo[forma].nucleo then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleos2
elseif forma == "part" then
nucleos = conjinfo.nucleo_inf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos1}
elseif forma == "ind_perf" then
nucleos = {conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos2, conjinfo.nucleos1}
elseif forma == "subj_imp" or forma == "subj_fut" then
local n = conjinfo.nucleos2
nucleos = {n, n, n, n, n, n}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleos1}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n}
end
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for j, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[1], sufijo_inf)
for _,nucleo in ipairs(nucleos) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, conjinfo.nucleo_inf[1])))
end
end
end
return
end
for i = YO, ELLOS do
local p = tostr[i]
if conjinfo[forma][i] then
for j, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local k = i
while sufijos_[k] do
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[k], sufijo_inf)
for _,nucleo in ipairs(nucleos[i]) do
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, conjinfo.nucleo_inf[1])))
end
end
k = k + 6
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local arr = res[forma]
local t = {}
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["impersonal"] = {},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["alt"] = {lista = true},
["nucleopres1"] = {lista = true},
["nucleopret3"] = {lista = true},
["núcleopres1"] = {alias_de = "nucleopres1"},
["núcleopret3"] = {alias_de = "nucleopret3"},
["paradigma"] = {lista = true},
["nota"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local adv, r1 = match(tit, "^([sSnN][íu]n?"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiáéí]r)(s?e?)(l?[aeo]?s?)(.-)$")
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[ío]?"..ESPACIO.."?"..LETRA.."*[aeiáéí]rs?e?l?[aeo]?s?(.-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
v = gsub(v, "^(%S*)ál$", "%1al") -- pronominales
v = gsub(v, "^(%S*)él$", "%1el") -- pronominales
v = gsub(v, "^(%S*[^aeo])íl$", "%1il") -- grafías anticuadas
local sufijo_inf = match(v, "[aeií]r$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
for N = 1, math.max(1,
maxindex(args["paradigma"]),
maxindex(args["alt"]),
maxindex(args["nucleopres1"]),
maxindex(args["nucleopret3"])) do
local conjinfo = {}
if find(v, "ial$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then
error("Especifique el (los) paradigma(s) para los verbos en -iar (añuncial, enfrial)")
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 find(v, rx) then
conjinfo = deepcopy(p[3])
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 find(v, rx) then
local vacio = true
for k, v in pairs(p[3]) do
vacio = false
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
if 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")
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
if not conjinfo.nucleo_inf then
conjinfo.nucleo_inf = sub(v, 1, len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
conjinfo.prefijo = ""
elseif not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, len(v) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
if not conjinfo.prefijo then -- caso en el que cambié el núcleo
conjinfo.prefijo = ""
end
conjinfo.nucleos1 = {}
conjinfo.nucleos2 = {}
conjinfo.alt = conjinfo.alt or {}
if args["alt"][N] then
insert_if_not(conjinfo.alt, args["alt"][N])
end
for i, a in ipairs(conjinfo.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 = gsubb(conjinfo.nucleo_inf, "^([^"..info[2].."]*)["..info[2].."]([^"..info[2].."]*)$", "%1#"..info[3].."#%2")
if info[4] then
n2, sust = gsubb(conjinfo.nucleo_inf, "^([^"..info[2].."]*)["..info[2].."]([^"..info[2].."]*)$", "%1#"..info[4].."#%2")
end
assert(sust, "Alternancia vocálica no reconocida")
insert_if_not(conjinfo.nucleos1, n1)
insert_if_not(conjinfo.nucleos2, n2)
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
else
insert_if_not(conjinfo.nucleos1, conjinfo.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 gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[3]) == gsub1(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1")
and gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[4]) == gsub1(args["nucleopret3"][N], "^.*#([^#]+)#.*$", "%1")
then
es_irregular = true
paradigmas_reconocidos[v[1]] = true
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
insert_if_not(conjinfo.nucleos2, args["nucleopret3"][N])
break
end
end
else
if not v[4] then
if gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[3]) == gsub1(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1")
then
es_irregular = true
paradigmas_reconocidos[v[1]] = true
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
break
end
end
end
end
end
if not conjinfo.nucleos1[1] then
conjinfo.nucleos1[1] = conjinfo.nucleo_inf
end
if not conjinfo.nucleos2[1] then
conjinfo.nucleos2[1] = conjinfo.nucleo_inf
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if (find(e, 'PART') or not find(e, 'ADJ')) and not find(e, "†") then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, resto=resto, resto_pl=resto_pl,impers=args["impersonal"]}
for _,s in ipairs(tostr) do
fmtinfo["subj_pres"..s] = deepcopy(resultante["subj_pres"..s])
end
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local es_impersonal = args["impersonal"]
local es_indirecto = args["indirecto"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, es_impersonal)
end)
local impers = args["impersonal"]
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
error("No implementado aún")
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)", "(ellus)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(ello)", "(ellus)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que ello)", "(que ellus)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(ello)", "(ellus)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_ind = {"", "yo", "tu", "él, vusté", "nusotrus", "vusotrus", "ellus", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "yo", "tu", "él, vusté", "nusotrus", "vusotrus", "ellus", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que yo", "que tu", "que él, vusté", "que nusotrus", "que vusotrus", "que ellus", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tú)", "(vusté)", "(nusotrus)", "(vusotrus)", "―", 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=COLOR_H, header=true}
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
else
resultante.inf.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.part.colspan = cs1-1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
t[5] = {{"Formas personales", colspan=cs}, color=COLOR_H, 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}, ic("ind_pres")}
t[9] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")}
t[10] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("ind_perf")}
t[11] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")}
t[12] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("ind_perf_comp")}
t[13] = {{"Futuro", color=COLOR_IND, header=true}, ic("ind_fut")}
t[14] = {{"Futuro compuesto", color=COLOR_IND, header=true}, ic("ind_fut_comp")}
t[15] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("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}, ic("cond")}
t[19] = {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("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}, ic("subj_pres")}
t[23] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")}
t[24] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")}
t[25] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")}
t[26] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true}
t[27] = fila_pronombres_imper
if mostrar_imper then
t[28] = {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")}
else
t[29] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}}
end
t[30] = {{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[31] = {{args["nota"] and args["nota"] or "", colspan=cs}}
local paradigmas_t = {}
local cats = {}
if es_irregular then
insert(cats, "EXT:Verbos irregulares")
paradigmas_reconocidos["añuncial"] = nil
paradigmas_reconocidos["amal"] = nil
paradigmas_reconocidos["temel"] = nil
paradigmas_reconocidos["partil"] = nil
paradigmas_reconocidos["íl"] = nil
else
insert(cats, "EXT:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "EXT:Verbos del paradigma "..p)
end
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "EXT:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "EXT:Verbos terciopersonales")
end
if find(impers, "^ind") then
insert(cats, "EXT:Verbos de objeto indirecto")
end
if defectivo then
insert(cats, "EXT:Verbos defectivos")
end
if sufijo_inf == "al" then
insert(cats, "EXT:Verbos de la primera conjugación")
elseif sufijo_inf == "el" then
insert(cats, "EXT:Verbos de la segunda conjugación")
else -- será ir o ír, ya fue chequeado antes
insert(cats, "EXT:Verbos de la tercera conjugación")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")",
t,
ns == 0 and cats or {})
end
return export
8czmy9yzscrs4fcw6tdkbpc8foeqtqr
Módulo:flex/an
828
1056431
6118164
6117307
2026-06-16T02:18:06Z
TMCbot
164594
.
6118164
Scribunto
text/plain
-- Flexión del aragonés
-- Autor: Tmagc
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local len = m_str.len
local find = m_str.find
local gsub1 = m_str.gsub1
local gsub = m_str.gsub
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local vocal_no_tilde = "aeiouüAEIOUÜ"
local vocal_tilde = "áéíóúÁÉÍÓÚ"
local vocal = vocal_no_tilde..vocal_tilde
local cons = "bcdfghjklmnñpqrstvwxyzçBCFGHJKLMNÑPQRSTVWXYZÇ"
local espacios = "%-‐%s"
local guion = "%-"
local VOCAL = "["..vocal.."]"
local CONS = "["..cons.."]"
local CONS_SALVO_H = "[^"..vocal.."hH~#{}]"
local ESPACIO = "["..espacios.."]"
local LETRA = "[^"..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 try(p, rx, pl, f, fpl, pl2, femenino)
local p2, sust = gsubb(p, rx, "~%0~")
if not sust then
return nil
end
if not pl then
return {m={p2}, p={}, f={}, fp={}}
end
if not femenino or not f then
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={}, fp={}}
else
return {m={p2}, p={gsub1(p, rx, pl)}, f={}, fp={}}
end
end
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}}
end
return {m={p2}, p={gsub1(p, rx, pl)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}}
end
-- https://an.wikipedia.org/wiki/Numero_gramatical_en_aragon%C3%A9s
local function flexionar_palabra(p, g, forzar_s, on)
local adj = g == "mf"
local function rep_a_2(v, c) return "~"..quitar_tilde[v]..c.."a~" end
local function rep_as_2(v, c) return "~"..quitar_tilde[v]..c.."as~" end
local function rep_s_2(v, c) return "~"..quitar_tilde[v]..c.."s~" end
local function rep_es_2(v, c) return "~"..quitar_tilde[v]..c.."es~" end
local function rep_n_2(v, c) return "~"..agregar_tilde[v]..c.."s~" end
local es_monosilabo = find(p, "^"..CONS.."-[iuü]?[aeoiu][iu]?"..CONS.."-$")
local diptongo_final_ns = find(p, "[aeiouü][ui][ns]$") -- las palabras que terminen en diptongo con u/i final y n/s no llevan tilde
local sin_tilde = not find(p, "["..vocal_tilde.."]")
local fl = try(p, "o$", "~os~", "~a~", "~as~", nil, adj)
or try(p, "ce$", "~ces~", "~za~", "~zas~", nil, adj)
or try(p, "eu$", "~eus~", "~eua~", "~euas~", nil, adj)
or try(p, "au$", "~aus~", "~ada~", "~adas~", nil, adj)
or try(p, "íu$", "~íus~", "~ida~", "~idas~", nil, adj)
or try(p, VOCAL.."$", "~%0s~", nil, nil, nil, adj)
or try(p, "("..VOCAL..")[td]$", "~%1z~", nil, nil, nil, adj) -- -d, -t
or try(p, "rt$", "~rz~", nil, nil, nil, adj) -- -rt
or try(p, "([oe]r)$", "~%1s~", "~%1a~", "~%1as~", nil, adj) -- -er (-ero en castellano), -or
or try(p, "(ol)$", "~%1s~", "~%1a~", "~%1as~", nil, adj) -- -er (-ero en castellano), -or
or try(p, "[aeiou][íú]n$", "~%0s~", "~%0a~", "~%0as~", nil, adj) -- hiatos con n
or try(p, "[aeiou][íú]s$", "~%0es~", "~%0a~", "~%0as~", nil, adj) -- hiatos con s
or try(p, (es_monosilabo or diptongo_final_ns) and "([aeiou])(n)$" or "([áéíóú])(n)$", rep_s_2, rep_a_2, rep_as_2, nil, adj) -- agudas/monosílabos en n
or try(p, (es_monosilabo or diptongo_final_ns) and "([aeiou])(s)$" or "([áéíóú])(s)$", rep_es_2, rep_a_2, rep_as_2, nil, adj) -- agudas/monosílabos en s
or try(p, (es_monosilabo or sin_tilde) and "x$" or "^%A$", forzar_s and "~xs~" or "~xes~", nil, nil, nil, adj) -- agudas/monosílabos en x
or try(p, sin_tilde and "([aeiou])([ui]?"..CONS.."+[iu]?[aeiou][iu]?n)$" or "^%A$", rep_n_2, nil, nil, nil, adj) -- llanas en n
or try(p, "[nsx]$", nil, nil, nil, nil, adj) -- esdrújulas en n, llanas/esdrújulas s, x
or try(p, "("..VOCAL..")z$", "~%1ces~", nil, nil, nil, adj)
or try(p, "("..VOCAL..")c$", "~%1ques~", nil, nil, nil, adj)
or try(p, "("..CONS..")y$", "~%1is~", nil, nil, nil, adj) -- ferry, REVISAR
or try(p, CONS.."[sz]$", nil)
or try(p, "[sz]"..CONS.."$", nil)
or try(p, "ch$", forzar_s and "~%0s~" or "~%0es~")
or try(p, CONS..CONS.."$", "~%0s~")
or try(p, CONS.."$", "~%0s~")
if fl then
return fl
end
error("No se pudo determinar la flexión de la palabra")
end
local function flexion_sust_adj(palabras, g, forzar_s, on, copulativa)
local a, separador, b = match(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, forzar_s, on)
local flex2 = copulativa and flexionar_palabra(b, g, forzar_s, on) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto = match(palabras, "^("..guion.."?"..LETRA.."+)(.-)$")
local flex = flexionar_palabra(p, g, forzar_s, on)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["nota"],
{},
ns == 0 and cats or {}
)
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_ = flexion_sust_adj(title, modo, args["s"], args["on"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." regulares")
elseif find(title, LETRA..ESPACIO..LETRA) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["nota"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["on"] = {tipo = "bool"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "AN:Locuciones sustantivas" or "AN:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["on"] = {tipo = "bool"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "AN:Locuciones adjetivas" or "AN:Adjetivos")
end
-- FALTA TERMINAR LOS VERBOS
local YO, TU, EL, NOSOTROS, VOSOTROS, ELLOS = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"yo", "tu", "él, vusté", "nosotros", "vosotros", "vustedes, ellos"}
local PRONOMBRES_SUBJ = {"que yo", "que tu", "que él, vusté", "que nosotros", "que vosotros", "que vustedes, ellos"}
local PRONOMBRES_IMP = {"―", "(tú)", "(vusté)", "(nosotros)", "(vosotros)", "(vustedes)"}
local IMPERSONALES = {"", "", "(ello)", "", "", "(ellos)"}
local IMPERSONALES_SUBJ = {"", "", "(que ello)", "", "", "(que ellos)"}
local REFLEXIVOS = {"me", "te", "se", "nos", "os", "se"}
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local formas_no_personales = {
["ger"] = true,
["part"] = true,
["inf"] = true,
}
local formas_personales = {
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["ind_fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["ind_perf_comp"] = true,
["ind_pluperf"] = true,
["ind_anter"] = true,
["ind_fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local sufijos = {
["ar"] = {
["ger"] = {"ando"},
["part"] = {"áu"},
["ind_pres"] = {"o", "es", "a", "amos", "áis", "en"},
["ind_imp"] = {"aba", "abes", "aba", "ábamos", "abais", "aben",
nil, nil, nil, "ábemos", "abeis", nil},
["ind_perf"] = {"é", "asti", "ó", "emos", "astis", "aron",
nil, "esti", nil, nil, "estis", nil},
["ind_perf_alt"] = {"é", "asti", "ó", "emos", "astis", "aron"},
["ind_fut"] = {"aré", "arás", "ará", "aremos", "aréis", "arán"},
["subj_pres"] = {"e", "as", "e", "emos", "éis", "an",
nil, "es", nil, nil, nil, "en"},
["subj_imp"] = {"ara", "aras", "ara", "áramos", "arais", "aran",
"are", "ares", "are", "áremos", "areis", "aren"},
["cond"] = {"aría", "aríes", "aría", "aríamos", "aríais", "aríen",
nil, nil, nil, "aríemos", "aríeis", nil},
["imper"] = {"-", "a", "e", "emos", "ái", nil}
},
["er"] = {
["ger"] = {"iendo"},
["part"] = {"íu"},
["ind_pres"] = {"o", "es", "e", "emos", "éis", "en"},
["ind_imp"] = {"ía", "íes", "ía", "íamos", "íais", "íen",
nil, nil, nil, "íemos", "íeis", nil},
["ind_perf"] = {"í", "iesti", "iera", "iemos", "iestis", "ieron",
nil, "isti", "iere", "imos", "istis", nil},
["ind_perf_alt"] = {"e", "iste", "o", "imos", "istis", "ieron"},
["ind_fut"] = {"eré", "erás", "erá", "eremos", "eréis", "erán"},
["subj_pres"] = {"a", "as", "a", "amos", "áis", "an"},
["subj_imp"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["cond"] = {"ería", "eríes", "ería", "eríamos", "eríais", "eríen",
nil, nil, nil, "eríemos", "eríeis", nil},
["imper"] = {"-", "i", "a", "amos", "éi", nil}
},
["ir"] = {
["ger"] = {"iendo"},
["part"] = {"ido"},
["ind_pres"] = {"o", "es", "e", "imos", "ís", "en"},
["ind_imp"] = {"ía", "íes", "ía", "íamos", "íais", "íen",
nil, nil, nil, "íemos", "íeis", nil},
["ind_perf"] = {"í", "iesti", "ió", "iemos", "iesteis", "ieron",
nil, "isti", nil, "imos", "istis", nil},
["ind_perf_alt"] = {"e", "iste", "o", "imos", "isteis", "ieron"},
["ind_fut"] = {"iré", "irás", "irá", "iremos", "iréis", "irán"},
["subj_pres"] = {"a", "as", "a", "amos", "áis", "an"},
["subj_imp"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["cond"] = {"iría", "irías", "iría", "iríamos", "iríais", "iríen",
nil, nil, nil, "iríemos", "iríeis", nil},
["imper"] = {"-", "i", "a", "amos", "íi", nil}
},
}
local pronombres = {"me", "te", "se", "nos", "os", "se"}
local auxiliar = {
["inf_comp"] = {"tener"},
["ger_comp"] = {"teniendo"},
["ind_perf_comp"] = {"tengo", "tienes", "tien", "tenemos", "tenéis", "tienen"},
["ind_pluperf"] = {"tenía", "teníes", "tenía", "teníamos", "teníais", "teníen"},
["ind_anter"] = {"tuvi", "tuvisti", "tuvo", "tuvimos", "tuvistis", "tuvieron"},
["ind_fut_comp"] = {"tendré", "tendrás", "tendrá", "tendremos", "tendréis", "tendrán"},
["cond_comp"] = {"tendría", "tendríes", "tendría", "tendríamos", "tendríais", "tendríen"},
["subj_perf"] = {"tenga", "tengas", "tenga", "tengamos", "tengáis", "tengan"},
["subj_pluperf"] = {"tuviera", "tuvieras", "tuviera", "tuviéramos", "tuvierais", "tuvieran",
"tuviese", "tuvieses", "tuviese", "tuviésemos", "tuvieseis", "tuviesen"},
}
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 find(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
local _, cnt = gsub(sufijo, "[aeiou]", "")
if cnt == 1
and not find(sufijo, "[áéíóú]")
and find(sub(sufijo, -1), "[aeiouns]") then
if nexo == "cu" then
return sub(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 find(sufijo, "^ar") then
if find(nexo, "^[~#]?[bdr]?r[~#]?$") then
return nexo..sub(sufijo, 3)
end
end
else -- ER/IR/ÍR
if find(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 == "qu" then
return "~c~"..sufijo
end
if nexo == "C" then
return "~zc~"..sufijo
end
end
if find(sufijo, "^[aeoáéó]") then
if nexo == "gü" then
return "g~uy~"..sufijo
end
if nexo == "u" then
return "u~y~"..sufijo
end
end
if find(sufijo, "^i[aeoáéó]") then
if (nexo == "ñ" or nexo == "ll") then
return "~"..nexo..sub(sufijo, 2).."~"
end
if nexo == "gü" then
return "g~uy~"..sub(sufijo, 2)
end
if nexo == "u" then
return "u~y~"..sub(sufijo, 2)
end
if nexo == "e" then
return nexo.."~y~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i[^aeiouáéíóú]") then
if nexo == "e" then
return nexo.."~í~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i[eé]") then
if find(nexo, "u#$") then -- ir --> fuera (subj)
return nexo..sub(sufijo, 2)
end
if nexo == "#j#" or nexo == "~j~" then
return nexo..sub(sufijo, 2)
end
end
if find(sufijo, "^í$") then
if nexo == "#j#" or nexo == "~j~" then
return nexo.."~e~"
end
end
if find(sufijo, "^ió$") then
if nexo == "#j#" or nexo == "~j~" then
return nexo.."~o~"
end
end
if find(sufijo, "^[ie]r") then
if find(nexo, "^[~#]?[bdr]?r[~#]?$") then
return nexo..sub(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_ = gsub(nucleo, "[~#]", "")
local nexosufijo_ = gsub(nexosufijo, "[~#]", "")
if find(nucleo_, "[yi]$") and find(nexosufijo_, "^i") then -- se juntan dos íes o y-i (ej. reír, freír, oír)
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1")
elseif find(nucleo_, "^[^áéíóú]-[aeiou]h?$") and find(nexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- sufijo con i/u tónica (caISTE, caIMOS, caIDO, oID, reHÚyo etc.)
return nucleo..gsub1(nexosufijo, "^([~#]?h?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleo_, "[^gq][aeiou]$") and find(nexosufijo_, "^i[aeiouáéíóú]") then -- se junta [aeiou]i[aeiouáéíóú] -> cambio a y (creYO) PERO [[chinguiar]] -> chinguIando
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~y~")
elseif find(nucleo_, "[aeiou]$") and find(nexosufijo_, "^id$") then -- reír -> reÍd, embaír -> embaÍd
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~í~")
elseif find(nucleo_, "^[^aeiouáéíóú]+$")
and (find(nexosufijo_, "^"..CONS.."?"..CONS.."?".."[iuü]?[áéó][iuü]?[ns]?$") or find(nexosufijo_, "^[íú][ns]?$")) then -- caso de dar, vos *d+ás, debo quitar la tilde
return nucleo..gsub1(nexosufijo, "[áéíóú]", function(v) return "~"..quitar_tilde[v].."~" end)
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
local prefijo_ = gsub(prefijo, "[~#]", "")
local nucleonexosufijo_ = gsub(nucleonexosufijo, "[~#]", "")
if prefijo_ and find(prefijo_, "[aeiou]") and not find(prefijo_, "[áéíóú]") then
if find(prefijo_, "^[^áéíóú]-[aeiou]h?$") and find(nucleonexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- nucleonexosufijo con i/u tónica (rehacer -> rehíce)
return prefijo..gsub1(nucleonexosufijo, "^([~#]?h?[~#]?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleonexosufijo_, "^("..CONS.."*[iuü]?)([aeiou])([iuü]?[ns]?)$") then -- monosílabo: prever --> prevén
return prefijo..gsub1(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"] = {
{"añunciar", {"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ü"
}},
{"quer", {"quer$"}, { -- Existe esto??
nexo = "qu"
}},
{"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$"}, { -- REVISAR
nucleo = "du",
nexo = "C",
ind_perf = {nexo = "~j~"},
subj_imp = {nexo = "~j~"},
}},
{"escabullir", {"llir$"}, {
nexo = "ll"
}},
{"distinguir", {"guir$"}, {
nexo = "gu"
}},
{"argüir", {"güir$"}, {
nexo = "gü"
}},
{"delinquir", {"quir$"}, {
nexo = "qu"
}},
{"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 = {nucleo = "anduv"},
subj_imp = {nucleo = "anduv"},
}},
{"dar", {"^d?e?s?dar$"}, { -- no pueden ir otros verbos como "andar o quedar"
nucleo = "d",
ind_pres = {{"doi", "do"}},
ind_perf = {sufijo_inf = "er"},
subj_pres = {nucleo = "de"},
subj_imp = {sufijo_inf = "er"},
}},
{"errar", {"^errar$"}, {
nucleo = "err",
alt = {"ye"},
}},
{"inhestar", {"inhestar$"}, {
alt = {"ie"},
part = {"inhiesto"}
}},
{"tar", {"^tar$"}, {
ind_pres = {{"toi", "to"}},
ind_perf = {nucleo = "tuv"},
subj_pres = {nucleo = "te"},
subj_imp = {nucleo = "tuv"},
imper = {nil, nil, {"tea"}, nil, {"tai"}, {"tean"}}
}},
{"enfriar", {"enfriar$"}, {
nexo = "i",
}},
--{"culiar", {"culiar$"}, { por precaución sacamos esto
-- nexo = "I"
--}},
{"aislar", {"aislar$"}, {
alt = {"í"}
}},
{"avergoñar", {"avergoñar$"}, {
alt = {"üe"}
}},
{"auñar", {"^auñar$"}, { -- REVISAR
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"},
cond = {nucleo = "ca", nexo = "#br#"},
}},
{"caer", {"caer$"}, { -- REVISAR http://ast.oslin.org/index.php?action=lemma&lemma=11064 hay alguna regla detrás de esto??
nucleo = "ca",
ind_pres = {{"caigo", "cayo"}, {"caes", "cayes"}, nil, {"caemos", "cayemos"}, {"caéis", "cayéis"}, {"caen", "cayen"}},
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"},
}},
{"facer", {"[hfj]acer$"}, { -- REVISAR
nucleo = "a",
nexo = "S", -- evitar C (epéntesis con zc)
part = {"echu"},
ind_pres = {{"ago", "aigo"}},
ind_perf = {nucleo = "i"},
ind_fut = {nucleo = "a", nexo = "#dr#"},
subj_pres = {nucleo = "ag", nexo = ""},
subj_imp = {nucleo = "i"},
cond = {nucleo = "a", nexo = "#dr#"},
}},
{"haber", {"^haber$"}, {
ind_pres = {{"he"}, {"has"}, {"ha", "hai{IMPERSONAL}"}, {"hemos", "habemos"}, nil, {"han"}},
ind_perf = {nucleo = "hub"},
ind_fut = {nucleo = "ha", nexo = "#br#"},
subj_pres = {nucleo = "hay"},
subj_imp = {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)
}},
{"morrer", {"morrer$"}, {
nucleo = "morr",
alt = {"ue"},
part = {"muertu"},
}},
{"goler", {"^goler$"}, {
alt = {"üe"},
}},
{"volver", {"olver$"}, {
nucleo = "olv",
alt = {"ue"},
part = {"ueltu"}
}},
{"placer", {"placer$"}, { -- REVISAR, existe esto??
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},
}},
{"poder", {"poder$"}, {
nucleo = "pod",
alt = {"ue"},
ger = {"pudiendo"},
ind_perf = {nucleo = "pud"},
ind_fut = {nucleo = "po", nexo = "#dr#"},
subj_imp = {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"},
cond = {nucleo = "pon", nexo = "#dr#"},
imper = {nil, {"pon"}, {"ponga"}, nil, nil, {"pongan"}},
}},
{"proveer", {"proveer$"}, {
nucleo = "prov",
part = {"provisto", "proveído{†}"}
}},
{"querer", {"querer$"}, { -- REVISAR
nucleo = "quer",
alt = {"ie"},
ind_perf = {nucleo = "quis"},
ind_fut = {nucleo = "que", nexo = "#dr#"},
subj_imp = {nucleo = "quis"},
cond = {nucleo = "que", nexo = "#dr#"},
}},
{"raer", {"^raer$", "^rayer$"}, { -- no contraer, etc. REVISAR
ind_pres = {{"raigo", "rayo"}},
subj_pres = {nucleo = {"raig", "ray"}},
imper = {nil, nil, {"raiga", "raya"}, nil, {"raíi", "rayíi"}, {"raigan", "rayan"}}
}},
{"roer", {"roer$", "royer$"}, { -- REVISAR
nucleo = "ro",
ind_pres = {{"roigo", "royo"}},
subj_pres = {nucleo = {"roig", "roy"}},
imper = {nil, nil, {"roiga", "roya"}, nil, {"roíi", "royíi"}, {"roigan", "royan"}}
}},
{"romper", {"^romper$", "^arromper$"}, { -- no corromper, derromper, entrerromper
nucleo = "romp",
alt = {"ue"},
part = {"rotu"}
}},
{"saber", {"saber$"}, {
nucleo = "sab",
ind_pres = {{"sé"}},
ind_perf = {nucleo = "sup"},
ind_fut = {nucleo = "sa", nexo = "#br#"},
subj_pres = {nucleo = "sep"},
subj_imp = {nucleo = "sup"},
cond = {nucleo = "sa", nexo = "#br#"},
imper = {nil, nil, {"sepa"}, nil, nil, {"sepan"}}
}},
{"ser", {"^ser$"}, {
ind_pres = {{"soi", "so"}, {"yes"}, {"ye"}, {"somos"}, {"sois"}, {"son"}},
ind_imp = {{"yera"}, {"yeres"}, {"yera"}, {"yéramos", "yéremos"}, {"yerais", "yereis"}, {"yeren"}},
ind_perf = {{"fui"}, {"fosti", "fuesti", "fuisti"}, {"foi", "fo"}, {"fomos", "fuemos", "fuimos"}, {"fostis", "fuestis", "fuistis"}, {"foron", "fueron"}},
subj_pres = {nucleo = {"sey", "sí"}},
subj_imp = {nucleo = "", nexo = "#fu#"}, -- no puedo poner "u" porque obtendría "fuyera" -- REVISAR: hay que agregar la variante con fo
imper = {nil, {"sé"}, {"sea"}, nil, nil, {"sean"}}
}},
{"tener", {"tener$", "^ter$"}, {
nucleo = "ten",
alt = {"ie"},
ind_pres = {{"tengo", "teo", "to"}},
ind_perf = {nucleo = {"tev", "tuv"}},
ind_fut = {nucleo = "ten", nexo = "#dr#"},
subj_pres = {nucleo = "teng"},
subj_imp = {nucleo = "tuv"},
cond = {nucleo = "ten", nexo = "#dr#"},
imper = {nil, {"ten"}, {"tenga"}, nil, nil, {"tengan"}}
}},
{"traer", {"traer$", "trayer$"}, {
nucleo = "tra",
ind_pres = {{"traigo"}},
ind_perf = {nucleo = "tra", nexo = "#j#"},
subj_pres = {nucleo = "traig"},
subj_imp = {nucleo = "tra", nexo = "#j#"},
imper = {nil, nil, nil, {"traiga"}, {"traigamos"}, nil, {"traigan"}}
}},
{"ver", {"^ver$", "^antever$", "^entrever$", "^prever$", "^rever$"}, {
nucleo = "v",
part = {"visto"},
ind_pres = {{"veo"}},
subj_pres = {nucleo = "ve"},
imper = {nil, nil, {"vea"}, nil, nil, {"vean"}}
}},
{"yacer", {"^yacer$", "^subyacer$"}, { -- REVISAR: existe esto?
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"}, {"yazca", "yazga", "yaga"}, nil, nil, {"yazcan", "yazgan", "yagan"}}
}},
{"mover", {"mover$"}, {
alt = {"ue"},
}},
{"entender", {"entender$"}, {
alt = {"ie"},
}},
},
["ir"] = {
{"asir", {"asir$"}, { -- REVISAR: existe esto
nucleo = "as",
ind_pres = {{"asgo"}},
subj_pres = {nucleo = "asg"},
imper = {nil, nil, {"asga"}, {"asgamos"}, nil, {"asgan"}}
}},
{"abrir", {"[^js]abrir$", "^abrir$"}, { -- abrir, cubrir y derivados, pero no "desabrir" ni "jabrir" (son regs.)
nucleo = "abr",
part = {"abiertu"}
}},
{"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 = {"ubiertu"}
}},
-- 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í) --> esto no existe en ast creo
-- 3. bendecir, maldecir: agrego bendito, maldito al pp
-- 4. condecir, contradecir, desdecir, predecir: parto de 1 pero agrego el futuro regular que esta aceptado
{"dicir", {"^dicir$", "^redicir$", "^entredicir$", "^antedicir$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"dichu"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
ind_fut = {nucleo = "d", nexo=""},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
cond = {nucleo = "d", nexo=""},
imper = {nil, {"di"}, {"diga"}, nil, nil, {"digan"}}
}},
{"bendicir", {"bendicir$", "maldicir$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"decíu{PART}", "ditu{ADJ}"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
imper = {nil, {"diz"}, {"diga"}, nil, nil, {"digan"}}
}},
{"predicir", {"dicir$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"dichu"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
ind_fut = {nucleo = {"dec", "d"}, nexo=""},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
cond = {nucleo = {"dec", "d"}, nexo=""},
imper = {nil, {"dí"}, {"diga"}, nil, nil, {"digan"}}
}},
{"erguir", {"^erguir$"}, {
nucleo = "er",
alt = {"ye-i", "i-i"},
}},
{"imprimir", {"imprimir$"}, {
nucleo = "imprim",
part = {"imprimíu{PART}", "impresu{ADJ}"}
}},
{"dir", {"^dir$"}, {
ind_pres = {{"voi", "vo"}, {"vas"}, {"va"}, {"vamos"}, {"vais"}, {"van"}},
ind_imp = {{"diba"}, {"dibas"}, {"diba"}, {"díbamos", "díbemos"}, {"dibais", "dibeis"}, {"diben"}},
ind_perf = {{"fui"}, {"fosti", "fuesti", "fuisti"}, {"foi", "fo"}, {"fomos", "fuemos", "fuimos"}, {"fuestis", "fuistis"}, {"foron", "fueron"}},
subj_pres = {{"fora", "vaiga", "vaya"}, {"vaigas", "vayas"}, {"fora", "vaiga", "vaya"}, {"vaigamos", "vayamos"}, {"vaigáis", "vayáis"}, {"vaigan", "vayan"}},
subj_imp = {nucleo = "", nexo = "#fu#"}, -- no puedo poner "u" porque obtendría "fuyera" -- REVISAR: faltan los otros nexos posibles
imper = {nil, {"ve"}, {"vaya"}, nil, nil, {"vayan"}}
}},
{"pudrir", {"pudrir$"}, { -- REVISAR: existe esto?
nucleo = "pudr",
part = {"podridu"}
}},
{"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"}, {"salga"}, nil, nil, {"salgan"}}
}},
{"escribir", {"scribir$"}, {
nucleo = "scrib",
part = {"scrito"}
}},
{"valir", {"valir$"}, {
nucleo = "val",
ind_pres = {{"valgo"}},
ind_fut = {nucleo = "val", nexo = "#dr#"},
subj_pres = {nucleo = "valg"},
cond = {nucleo = "val", nexo = "#dr#"},
imper = {nil, nil, {"valga"}, nil, nil, {"valgan"}}
}},
{"venir", {"venir$"}, {
nucleo = "ven",
alt = {"ie-i"},
ind_pres = {{"vengo"}},
ind_fut = {nexo = "#dr#"},
ind_perf = {nucleo = "vin"}, -- REVISAR: la 3s es él vIEno, no *vino, hay más verbos así?
subj_pres = {nucleo = "veng"},
cond = {nexo = "#dr#"},
imper = {nil, {"ven"}, {"venga"}, nil, nil, {"vengan"}}
}},
{"sentir", {"sentir$"}, { -- discernir entra en este paradigma tmb.
alt = {"ie-i"}
}},
{"podrir", {"podrir$"}, {
alt = {"u-u"},
}},
{"reunir", {"reunir$"}, {
alt = {"ú"}
}},
{"prohibir", {"prohibir$"}, {
alt = {"í"}
}},
{"rehenchir", {"rehenchir$"}, {
alt = {"í-i"}
}},
{"dormir", {"dormir$"}, {
alt = {"ue-u"}
}},
},
["í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"},
["üe"] = {"goler", "o", "üe"},
},
["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(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo[forma].sufijo_inf or conjinfo.sufijo_inf
if sufijo_inf == "ar" and conjinfo[forma].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 sufijos_ = obtener_sufijos(sufijo_inf, (forma == "ind_perf" and conjinfo[forma].nucleo) and forma.."_alt" or forma)
local nucleos
if not conjinfo[forma].nucleo then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleos2
elseif forma == "part" then
nucleos = conjinfo.nucleo_inf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos1}
elseif forma == "ind_perf" then
nucleos = {conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos2, conjinfo.nucleos1}
elseif forma == "subj_imp" then
local n = conjinfo.nucleos2
nucleos = {n, n, n, n, n, n}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleos1}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n}
end
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for j, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[1], sufijo_inf)
for _,nucleo in ipairs(nucleos) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, conjinfo.nucleo_inf[1])))
end
end
end
return
end
for i = YO, ELLOS do
if conjinfo[forma][i] then
for j, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..tostr[i]], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local k = i
while sufijos_[k] do
for _, n in ipairs(nucleos[i]) do
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[k], sufijo_inf)
insert_if_not(conjugado[forma..tostr[i]], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma..tostr[i]], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo2, conjinfo.nucleo_inf[1])))
end
end
k = k + 6
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local arr = res[forma]
local t = {}
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
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"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local adv, r1 = match(tit, "^([sSnN][íu]n?"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiáéí]r)(s?e?)(l?[aeo]?s?)(.-)$")
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[ío]?"..ESPACIO.."?"..LETRA.."*[aeiáéí]rs?e?l?[aeo]?s?(.-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
v = gsub(v, "^(%S*)ár$", "%1ar") -- pronominales
v = gsub(v, "^(%S*)ér$", "%1er") -- pronominales
v = gsub(v, "^(%S*[^aeo])ír$", "%1ir") -- grafías anticuadas
local sufijo_inf = match(v, "[aeií]r$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
for N = 1, math.max(1,
maxindex(args["paradigma"]),
maxindex(args["alt"]),
maxindex(args["nucleopres1"]),
maxindex(args["nucleopret3"])) do
local conjinfo = {}
if find(v, "iar$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then
error("Especifique el (los) paradigma(s) para los verbos en -iar (añunciar, enfriar)")
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 find(v, rx) then
conjinfo = deepcopy(p[3])
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 find(v, rx) then
local vacio = true
for k, v in pairs(p[3]) do
vacio = false
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
if 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")
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
if not conjinfo.nucleo_inf then
conjinfo.nucleo_inf = sub(v, 1, len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
conjinfo.prefijo = ""
elseif not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, len(v) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
if not conjinfo.prefijo then -- caso en el que cambié el núcleo
conjinfo.prefijo = ""
end
conjinfo.nucleos1 = {}
conjinfo.nucleos2 = {}
conjinfo.alt = conjinfo.alt or {}
if args["alt"][N] then
insert(conjinfo.alt, args["alt"][N])
end
for i, a in ipairs(conjinfo.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 = gsubb(conjinfo.nucleo_inf, "^([^"..info[2].."]*)["..info[2].."]([^"..info[2].."]*)$", "%1#"..info[3].."#%2")
if info[4] then
n2, sust = gsubb(conjinfo.nucleo_inf, "^([^"..info[2].."]*)["..info[2].."]([^"..info[2].."]*)$", "%1#"..info[4].."#%2")
end
assert(sust, "Alternancia vocálica no reconocida")
insert_if_not(conjinfo.nucleos1, n1)
insert_if_not(conjinfo.nucleos2, n2)
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
else
insert_if_not(conjinfo.nucleos1, conjinfo.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 gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[3]) == gsub1(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1")
and gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[4]) == gsub1(args["nucleopret3"][N], "^.*#([^#]+)#.*$", "%1")
then
es_irregular = true
paradigmas_reconocidos[v[1]] = true
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
insert_if_not(conjinfo.nucleos2, args["nucleopret3"][N])
break
end
end
else
if not v[4] then
if gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[3]) == gsub1(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1")
then
es_irregular = true
paradigmas_reconocidos[v[1]] = true
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
break
end
end
end
end
end
if not conjinfo.nucleos1[1] then
conjinfo.nucleos1[1] = conjinfo.nucleo_inf
end
if not conjinfo.nucleos2[1] then
conjinfo.nucleos2[1] = conjinfo.nucleo_inf
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if find(e, 'PART') or not find(e, 'ADJ') then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, resto=resto, resto_pl=resto_pl,impers=args["impersonal"]}
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for _,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for _,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local es_impersonal = args["impersonal"]
local es_indirecto = args["indirecto"]
if es_indirecto then
error("no implementado")
end
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, es_impersonal)
end)
local impers = args["impersonal"]
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
error("No implementado aún")
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", "tu", "él, vusté", "nosotros", "vosotros", "vustedes, ellos", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "yo", "tu", "él, vusté", "nosotros, nosotres, nós", "vosotros", "vustedes, ellos", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que yo", "que tu", "que él, vusté", "que nosotros", "que vosotros", "que vustedes, ellos", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tú)", "(vusté)", "(nosotros)", "(vosotros)", "(vustedes)", 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=COLOR_H, header=true}
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
else
resultante.inf.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.part.colspan = cs1-1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
end
t[5] = {{"Formas personales", colspan=cs}, color=COLOR_H, 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}, resultante.ind_pres1, resultante.ind_pres2, resultante.ind_pres3, resultante.ind_pres4, resultante.ind_pres5, resultante.ind_pres6}
t[9] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, resultante.ind_imp1, resultante.ind_imp2, resultante.ind_imp3, resultante.ind_imp4, resultante.ind_imp5, resultante.ind_imp6}
t[10] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, resultante.ind_perf1, resultante.ind_perf2, resultante.ind_perf3, resultante.ind_perf4, resultante.ind_perf5, resultante.ind_perf6}
t[11] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, resultante.ind_pluperf1, resultante.ind_pluperf2, resultante.ind_pluperf3, resultante.ind_pluperf4, resultante.ind_pluperf5, resultante.ind_pluperf6}
t[12] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, resultante.ind_perf_comp1, resultante.ind_perf_comp2, resultante.ind_perf_comp3, resultante.ind_perf_comp4, resultante.ind_perf_comp5, resultante.ind_perf_comp6}
t[13] = {{"Futuro", color=COLOR_IND, header=true}, resultante.ind_fut1, resultante.ind_fut2, resultante.ind_fut3, resultante.ind_fut4, resultante.ind_fut5, resultante.ind_fut6}
t[14] = {{"Futuro compuesto", color=COLOR_IND, header=true}, resultante.ind_fut_comp1, resultante.ind_fut_comp2, resultante.ind_fut_comp3, resultante.ind_fut_comp4, resultante.ind_fut_comp5, resultante.ind_fut_comp6}
t[15] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, resultante.ind_anter1, resultante.ind_anter2, resultante.ind_anter3, resultante.ind_anter4, resultante.ind_anter5, resultante.ind_anter6}
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}, resultante.cond1, resultante.cond2, resultante.cond3, resultante.cond4, resultante.cond5, resultante.cond6}
t[19] = {{"Condicional compuesto", color=COLOR_COND, header=true}, resultante.cond_comp1, resultante.cond_comp2, resultante.cond_comp3, resultante.cond_comp4, resultante.cond_comp5, resultante.cond_comp6}
t[20] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true}
t[21] = fila_pronombres_subj
t[22] = {{"Presente", color=COLOR_SUBJ, header=true}, resultante.subj_pres1, resultante.subj_pres2, resultante.subj_pres3, resultante.subj_pres4, resultante.subj_pres5, resultante.subj_pres6}
t[23] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, resultante.subj_imp1, resultante.subj_imp2, resultante.subj_imp3, resultante.subj_imp4, resultante.subj_imp5, resultante.subj_imp6}
t[24] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, resultante.subj_perf1, resultante.subj_perf2, resultante.subj_perf3, resultante.subj_perf4, resultante.subj_perf5, resultante.subj_perf6}
t[25] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, resultante.subj_pluperf1, resultante.subj_pluperf2, resultante.subj_pluperf3, resultante.subj_pluperf4, resultante.subj_pluperf5, resultante.subj_pluperf6}
t[26] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true}
t[27] = fila_pronombres_imper
if mostrar_imper then
t[28] = {{"Presente", color=COLOR_IMPER, header=true}, resultante.imper}
else
t[29] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}}
end
t[30] = {{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[31] = {{args["nota"] and args["nota"] or "", colspan=cs}}
local paradigmas_t = {}
local cats = {}
if es_irregular then
insert(cats, "AN:Verbos irregulares")
-- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar
paradigmas_reconocidos["añunciar"] = nil
paradigmas_reconocidos["amar"] = nil
paradigmas_reconocidos["temer"] = nil
paradigmas_reconocidos["partir"] = nil
paradigmas_reconocidos["ír"] = nil
else
insert(cats, "AN:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "AN:Verbos del paradigma "..p)
end
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "AN:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "AN:Verbos terciopersonales")
end
if find(impers, "^ind") then
insert(cats, "AN:Verbos de objeto indirecto")
end
if defectivo then
insert(cats, "AN:Verbos defectivos")
end
if sufijo_inf == "ar" then
insert(cats, "AN:Verbos de la primera conjugación")
elseif sufijo_inf == "er" then
insert(cats, "AN:Verbos de la segunda conjugación")
else -- será ir o ír, ya fue chequeado antes
insert(cats, "AN:Verbos de la tercera conjugación")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")",
t,
ns == 0 and cats or {})
end
return export
agko32qu513vxosb2wjk55tu8f5zqer
Módulo:flex/fr
828
1056508
6118172
6117312
2026-06-16T02:18:23Z
TMCbot
164594
.
6118172
Scribunto
text/plain
-- Flexión de sustantivos, adjetivos y verbos en francés
-- Autor: Tmagc
local export = {}
local max = math.max
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local size = m_table.size
local m_str = require("Módulo:string")
local u = m_str.char
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local len = m_str.len
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local CFLEX = u(0x302)
local DIER = u(0x308)
local vocales = "aàâeéèêiîoôuûäëïöüÿæœAÀÂEÉÈÊIÎOÔUÛÄËÏÖÜŸÆŒ"
local consonantes_salvo_cglryx = "bdfhjkmnpqstvwzçBDFHJKMNPQSTVWZÇ"
local V = "[" .. vocales .. "]"
local C = "[" .. consonantes_salvo_cglryx .. "cglryxCGLRYX]"
local C_SALVO_Y = "[" .. consonantes_salvo_cglryx .. "cglrxCGLRX]"
local C_SALVO_CGY = "[" .. consonantes_salvo_cglryx .. "lrxLRX]"
local C_SALVO_YX = "[" .. consonantes_salvo_cglryx .. "cglrCGLR]"
local C_SALVO_LRYX = "[" .. consonantes_salvo_cglryx .. "cgCG]"
local espacios = "%s"
local espacios_o_guiones = "%-‐%s"
local ESPACIO = "["..espacios.."]"
local ESPACIO_O_GUION = "["..espacios_o_guiones.."]"
local LETRA = "[^"..espacios.."]"
local function es_locucion(tit, cop)
return find(tit, LETRA..ESPACIO_O_GUION..LETRA) or (cop ~= nil and find(tit, LETRA..ESPACIO_O_GUION..LETRA))
end
local function try(p, rx, pl, f, fpl, femenino)
local p2, sust = gsubb(p, rx, "~%0~")
if not sust then
return nil
end
if not pl then
return {m={p2}, p={}, f={}, fp={}}
end
if not femenino or not f then
if pl == sub(rx, 1, -2) then
return {m={p2}, p={}, f={}, fp={}}
else
return {m={p2}, p={gsub1(p, rx, "~"..pl.."~")}, f={}, fp={}}
end
end
return {m={p2}, p={gsub1(p, rx, "~"..pl.."~")}, f={gsub1(p, rx, "~"..f.."~")}, fp={gsub1(p, rx, "~"..fpl.."~")}}
end
-- https://fr.wiktionary.org/wiki/Annexe:Pluriels_irr%C3%A9guliers_en_fran%C3%A7ais
-- https://fr.wiktionary.org/wiki/Module:fr-flexion
-- https://dictionnaire.lerobert.com/guide/feminin-des-noms
-- https://www.alloprof.qc.ca/fr/eleves/bv/francais/le-pluriel-des-noms-f1489
-- https://web.unica.it/unica/protected/409843/0/def/ref/MAT407472/s
local function flexionar_palabra(p, g)
local femenino = g == "mf"
local changed = try(p, "ieur$", "ieurs", "ieure", "ieures", femenino) or
try(p, "teur$", "teurs", "trice", "trices", femenino) or
try(p, "ain$", "ains", "aine", "aines", femenino) or
try(p, "eau$", "eaux", "elle", "elles", femenino) or
try(p, "eux$", "eux", "euse", "euses", femenino) or
try(p, "eur$", "eurs", "euse", "euses", femenino) or -- CUIDADO: multiples excepciones
try(p, "oeu$", "oeux", "oeue", "oeues", femenino) or -- grafía no estándar, se repite abajo
try(p, "al$", "aux", "ale", "ales", femenino) or
try(p, "an$", "ans", "ane", "anes", femenino) or -- no duplico porque es más común la consonante simple
try(p, "el$", "els", "elle", "elles", femenino) or
try(p, "en$", "ens", "enne", "ennes", femenino) or
try(p, "er$", "ers", "ère", "ères", femenino) or
try(p, "et$", "ets", "ette", "ettes", femenino) or -- agregar excepciones
try(p, "gu$", "gus", "güe", "gües", femenino) or
try(p, "if$", "ifs", "ive", "ives", femenino) or
try(p, "on$", "ons", "onne", "onnes", femenino) or -- excepciones?
try(p, "[aeœ]u$", "%0x", "%0e", "%0es", femenino) or
try(p, "f$", "fs", "ve", "ves", femenino) or
try(p, "p$", "ps", "ve", "ves", femenino) or
try(p, "c$", "cs", "que", "ques", femenino) or -- REVISAR
try(p, "x$", "x", "se", "ses", femenino) or
try(p, "s$", "s", "se", "ses", femenino) or -- agregar excepciones que dupliquen la s, si las hay
try(p, "z$", "z", "ze", "zes", femenino) or
try(p, "e$", "es", nil, nil, femenino) or
try(p, LETRA.."$", "%0s", "%0e", "%0es", femenino)
assert(changed, "No se pudo determinar la flexión de la palabra")
return changed
end
local function flexion_sust_adj(palabras, g, copulativa)
local a, separador, b
if copulativa == true or copulativa == false then
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO_O_GUION..")("..LETRA.."+)$")
else
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
end
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)
local flex2 = copulativa and flexionar_palabra(b, g) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto
if copulativa == false then
p, resto = match(palabras, "^(%-?[^"..espacios_o_guiones.."]+)(.-)$")
else
p, resto = match(palabras, "^("..LETRA.."+)(.-)$")
end
local flex = flexionar_palabra(p, g)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
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_ = flexion_sust_adj(title, modo, cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." regulares")
elseif es_locucion(title, args["cop"]) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["n"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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(frame, title, ns, args, es_locucion(title, args["cop"]) and "FR:Locuciones sustantivas" or "FR:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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(frame, title, ns, args, es_locucion(title, args["cop"]) and "FR:Locuciones adjetivas" or "FR:Adjetivos")
end
local sufijos = {
{ -- er
["ger"] = {"ant"},
["part"] = {"é"},
["ind_pres"] = {"e", "es", "e", "ons", "ez", "ent"},
["ind_imp"] = {"ais", "ais", "ait", "ions", "iez", "aient"},
["ind_perf"] = {"ai", "as", "a", "âmes", "âtes", "èrent"},
["fut"] = {"erai", "eras", "era", "erons", "erez", "eront"},
["subj_pres"] = {"e", "es", "e", "ions", "iez", "ent"},
["subj_imp"] = {"asse", "asses", "ât", "assions", "assiez", "assent"},
["cond"] = {"erais", "erais", "erait", "erions", "eriez", "eraient"},
["imper"] = {nil, "e", nil, "ons", "ez", nil}
},
{ -- ir, re
["ger"] = {"ant"},
["part"] = {""},
["ind_pres"] = {"s", "s", "t", "ons", "ez", "ent"},
["ind_pres_alt"] = {"e", "es", "e", "ons", "ez", "ent"},
["ind_imp"] = {"ais", "ais", "ait", "ions", "iez", "aient"},
["ind_perf"] = {"s", "s", "t", CFLEX.."mes", CFLEX.."tes", "rent"},
["ind_perf_alt"] = {"ai", "as", "a", "âmes", "âtes", "èrent"},
["fut"] = {"ai", "as", "a", "ons", "ez", "ont"},
["subj_pres"] = {"e", "es", "e", "ions", "iez", "ent"},
["subj_imp"] = {"sse", "sses", CFLEX.."t", "ssions", "ssiez", "ssent"},
["subj_imp_alt"] = {"asse", "asses", "ât", "assions", "assiez", "assent"},
["cond"] = {"ais", "ais", "ait", "ions", "iez", "aient"},
["imper"] = {nil, "s", nil, "ons", "ez", nil},
["imper_alt"] = {nil, "e", nil, "ons", "ez", nil}
},
}
local nucleos = {
["er"] = {
},
["ër"] = {
},
["ir"] = {
nucleopres1 = {"-i"},
nucleopres2 = {"-iss"},
nucleopres3 = {"-iss"},
nucleosubj1 = {"-iss"},
nucleosubj2 = {"-iss"},
nucleoperf = {"-i"},
nucleofut = {"-ir"},
},
["ïr"] = {
nucleopres1 = {"-ï"},
nucleopres2 = {"-ïss"},
nucleopres3 = {"-ïss"},
nucleosubj1 = {"-ïss"},
nucleosubj2 = {"-ïss"},
nucleoperf = {"-ï"},
nucleofut = {"-ïr"}
},
["re"] = {
nucleoperf = {"-i"},
nucleofut = {"-r"},
},
}
local auxiliar = {
["avoir"] = {
["inf_comp"] = {"avoir"},
["ger_comp"] = {"en (ayant)"},
["ind_perf_comp"] = {"ai", "as", "a", "avons", "avez", "ont"},
["ind_pluperf"] = {"avais", "avais", "avait", "avions", "aviez", "avaient"},
["ind_anter"] = {"eus", "eus", "eut", "eûmes", "eûtes", "eurent"},
["fut_comp"] = {"aurai", "auras", "aura", "aurons", "aurez", "auront"},
["cond_comp"] = {"aurais", "aurais", "aurait", "aurions", "auriez", "auraient"},
["subj_perf"] = {"aie", "aies", "ait", "ayons", "ayez", "aient"},
["subj_pluperf"] = {"eusse", "eusses", "eût", "eussions", "eussiez", "eussent"},
},
["etre"] = {
["inf_comp"] = {"être"},
["ger_comp"] = {"en (étant)"},
["ind_perf_comp"] = {"suis", "es", "est", "sommes", "êtes", "sont"},
["ind_pluperf"] = {"étais", "étais", "était", "étions", "étiez", "étaient"},
["ind_anter"] = {"fus", "fus", "fut", "fûmes", "fûtes", "furent"},
["fut_comp"] = {"serai", "seras", "sera", "serons", "serez", "seront"},
["cond_comp"] = {"serais", "serais", "serait", "serions", "seriez", "seraient"},
["subj_perf"] = {"sois", "sois", "soit", "soyons", "soyez", "soient"},
["subj_pluperf"] = {"fusse", "fusses", "fût", "fussions", "fussiez", "fussent"},
}
}
local function obtener_sufijos(sufijo_inf, forma)
if sufijo_inf == "er" or sufijo_inf == "ër" then
return sufijos[1][forma]
else
return sufijos[2][forma]
end
end
local JE, TU, IL, NOUS, VOUS, ILLS = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"je/j'", "tu", "il, elle, on", "nous", "vous", "ils/elles"}
local PRONOMBRES_SUBJ = {"que je/j'", "que tu", "qu'il, qu'elle, qu'on", "que nous", "que vous", "qu'ils, qu'elles"}
local PRONOMBRES_IMP = {"―", "(tu)", "―", "(nous)", "(vous)", "―"}
local IMPERSONALES = {"", "", "", "il, elle", "", "", "ils, elles"}
local IMPERSONALES_SUBJ = {"", "", "", "qu'il, qu'elle", "", "", "qu'ils, qu'elles"}
local REFLEXIVOS_ANTEPUESTOS = {"me", "te", "se", "nous", "vous", "se"}
local REFLEXIVOS_ANTEPUESTOS_CONTRAIDOS = {"m'", "t'", "s'", "nous ", "vous ", "s'"}
local REFLEXIVOS_POSPUESTOS = {"-me", "-toi", "-se", "-nous", "-vous", "-se"}
local formas_no_personales = {
["inf"] = true,
["ger"] = true,
["part"] = true,
}
local formas_personales = {
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["ind_perf_comp"] = true,
["ind_pluperf"] = true,
["ind_anter"] = true,
["fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
-- NOTA: los siguientes verbos no forman paradigma aparte, ora porque solamente
-- presentan mutaciones fonéticas que no se escriben, ora porque pueden ser
-- representados como una combinación de paradigmas existentes:
--[[
fluorescer, escer$
pailler, iller$
rocouier, ouier$
abréyer, éyer$
planchéier, éier$
créer, éer$
simplifier, ier$
paranoïer, ïer$
tuer, uer$
argüer, üer$
--]]
local paradigmas_regulares1 = {
["er"] = {
{"modeler", {"eler$"}, { -- todos salvo appeler
alternar = "el",
}},
{"acheter", {"eter$"}, { -- todos salvo jeter
alternar = "et",
}},
{"beder", {"e"..C_SALVO_YX.."er$"}, {
alternar = "e"
}},
{"beder", {"e"..C_SALVO_LRYX.."[lr]er$"}, { -- [[sevrer]], pero no -ller, -rrer, -rler ([[perler]])
alternar = "e"
}},
{"espérer", {"é"..C_SALVO_Y.."*"..C_SALVO_CGY.."er$"}, {
alternar = "é"
}},
{"espérer", {"é[gq]uer$"}, { -- [[alléguer]], [[disséquer]]
alternar = "é",
}},
{"espérer", {"é[cgï]er$"}, { -- [[capéïer]], [[rapiécer]]
alternar = "é",
}},
{"aimer", {"cobayer$"}, { -- única excepción que no admite i
}},
{"payer", {"ayer$"}, { -- y o i
alternar = "ay",
}},
{"noyer", {"[ou]yer$"}, { -- solo i
alternar = "y",
}},
},
["ër"] = {
},
["ir"] = {
},
["ïr"] = {
},
["re"] = {
},
}
local paradigmas_regulares2 = {
["er"] = {
{"commencer", {"cer$"}, {
nexo = "c"
}},
{"changer", {"ger$"}, {
nexo = "g",
}},
{"aimer", {"er$"}, {
}},
},
["ër"] = {
{"arguër", {"uër$"}, {
nexo = "u",
}},
},
["ir"] = {
{"finir", {"ir$"}, {
}},
},
["ïr"] = {
{"amuïr", {"ïr$"}, {
}},
},
["re"] = {
{"vendre", {"re$"}, {
}},
},
}
local paradigmas_irregulares = {
["er"] = {
{"envoyer", {"envoyer$"}, {
nucleofut = {"enverr"},
}},
{"appeler", {"appeler$"}, {
alternar = "EL"
}},
{"jeter", {"jeter$"}, {
alternar = "ET"
}},
{"aller", {"aller$"}, {
sufijo_inf = "ir",
nucleopres1 = {"va"},
nucleopres2 = {"all"},
nucleoperf = {"all"},
nucleofut = {"ir"},
part = {"allé"},
nucleosubj1 = {"aill"},
nucleosubj2 = {"all"},
ind_pres = {nil, {"vas"}, {"va"}, nil, nil, {"vont"}},
imper = {nil, {"va"}},
ind_perf = {alt=true},
subj_imp = {alt=true}
}},
},
["ër"] = {
},
["ir"] = {
{"faillir", {"^faillir$"}, {
nucleopres1 = {"fau"},
nucleopres2 = {"faill"},
nucleopres3 = {"faill"},
nucleoperf = {"failli"},
nucleofut = {"faudr", "faillir"},
ind_pres = {{"faux"}, {"faux"}},
imper = {nil, {"faux"}}
}},
{"défaillir", {"faillir$"}, {
nucleo = "ill",
nucleopres1 = {"ill"},
nucleoperf = {"illi"},
nucleofut = {"illir"},
ind_pres = {alt=true},
imper = {alt=true}
}},
{"saillir", {"aillir$", "cueillir$"}, {
nucleo = "ill",
nucleopres1 = {"ill"},
nucleoperf = {"illi"},
nucleofut = {"illir", "iller"},
ind_pres = {alt=true},
imper = {alt=true}
}},
{"bouillir", {"ouillir$"}, {
nucleopres1 = {"ou"},
nucleopres2 = {"ouill"},
nucleopres3 = {"ouill"},
nucleoperf = {"ouilli"},
}},
{"dormir", {"dormir$"}, {
nucleopres1 = {"dor"},
nucleopres2 = {"dorm"},
nucleopres3 = {"dorm"},
nucleoperf = {"dormi"},
}},
{"dormir", {"partir$", "sortir$", "sentir$", "mentir$", "repentir$"}, {
nucleo = "t",
nucleopres1 = {""},
nucleopres2 = {"t"},
nucleopres3 = {"t"},
nucleoperf = {"ti"},
}},
{"dormir", {"servir$"}, {
nucleo = "v",
nucleopres1 = {""},
nucleopres2 = {"v"},
nucleopres3 = {"v"},
nucleoperf = {"vi"},
}},
{"vêtir", {"vêtir$"}, {
nucleopres1 = {"vêt"},
part = {"vêtu"}
}},
{"venir", {"enir$"}, {
nucleopres1 = {"ien"},
nucleopres2 = {"en"},
nucleopres3 = {"ienn"},
nucleoperf = {"in"},
nucleofut = {"iendr"},
part = {"enu"},
}},
{"férir", {"férir$"}, {
nucleo = false,
part = {"féru"}
}},
{"gésir", {"gésir$"}, {
nucleopres1 = {"gi"},
nucleopres2 = {"gis"},
nucleopres3 = {"gis"},
nucleoperf = {},
nucleofut = {},
nucleosubj1 = {},
nucleosubj2 = {}
}},
{"asseoir", {"asseoir$"}, {
nucleopres1 = {"assoi", "assied"},
nucleopres2 = {"assoy", "assey"},
nucleopres3 = {"assoi", "assey"},
nucleoperf = {"assi"},
nucleofut = {"assoir", "assiér"},
part = {"assis"},
impers = "36"
}},
{"surseoir", {"surseoir$"}, {
nucleopres1 = {"sursoi"},
nucleopres2 = {"sursoy"},
nucleopres3 = {"sursoi"},
nucleoperf = {"sursi"},
nucleofut = {"surseoir"},
part = {"sursis"},
impers = "36"
}},
{"seoir", {"seoir$", "soir$"}, { -- CUIDADO, -soir es una variante defectiva
nucleopres1 = {"sied"},
nucleopres2 = {"sey"},
nucleopres3 = {"sié"},
nucleoperf = {},
nucleofut = {"siér"},
impers = "36"
}},
{"échoir", {"^échoir$"}, {
nucleopres1 = {"échoi"},
nucleopres2 = {"échoy"},
nucleopres3 = {"échoi"},
nucleoperf = {"échu"},
nucleofut = {"échoir", "écherr"},
impers = "36"
}},
{"choir", {"choir$"}, {
nucleopres1 = {"choi"},
nucleopres2 = {"choy"},
nucleopres3 = {"choi"},
nucleoperf = {"chu"},
nucleofut = {"choir"},
ger = {"-"},
ind_imp = {{},{},{},{},{},{}},
subj_pres = {{},{},{},{},{},{}},
imper = {{},{},{},{},{},{}},
}},
{"prévaloir", {"prévaloir$"}, {
nucleopres1 = {"prévau"},
nucleopres2 = {"préval"},
nucleopres3 = {"préval"},
nucleoperf = {"prévalu"},
nucleofut = {"prévaudr"},
nucleosubj1 = {"préval"},
nucleosubj2 = {"préval"},
ind_pres = {{"prévaux"}, {"prévaux"}},
imper = {nil, {"prévaux"}}
}},
{"valoir", {"valoir$"}, {
nucleopres1 = {"vau"},
nucleopres2 = {"val"},
nucleopres3 = {"val"},
nucleoperf = {"valu"},
nucleofut = {"vaudr"},
nucleosubj1 = {"vaill"},
nucleosubj2 = {"val"},
ind_pres = {{"vaux"}, {"vaux"}},
imper = {nil, {"vaux"}}
}},
{"falloir", {"falloir$"}, {
nucleopres1 = {"fau"},
nucleopres2 = {"fall"},
nucleopres3 = {"fall"},
nucleoperf = {"fallu"},
nucleofut = {"faudr"},
nucleosubj1 = {"faill"},
impers = "3"
}},
{"vouloir", {"^vouloir$"}, {
nucleopres1 = {"veu"},
nucleopres2 = {"voul"},
nucleopres3 = {"veul"},
nucleoperf = {"voulu"},
nucleofut = {"voudr"},
nucleosubj1 = {"veuill"},
ind_pres = {{"veux"}, {"veux"}},
imper = {nil, {"veux", "veuille"}, nil, {"voulons", "veuillons"}, {"voulez", "veuillez"}}
}},
{"revouloir", {"ouloir$"}, {
nucleopres1 = {"eu"},
nucleopres2 = {"oul"},
nucleopres3 = {"eul"},
nucleoperf = {"oulu"},
nucleofut = {"oudr"},
nucleosubj1 = {"euill"},
ind_pres = {{"eux"}, {"eux"}},
imper = {nil, {"euille"}, nil, {"oulons"}, {"euillez"}}
}},
{"savoir", {"savoir$"}, {
nucleopres1 = {"sai"},
nucleopres2 = {"sav"},
nucleopres3 = {"sav"},
nucleoperf = {"su"},
nucleofut = {"saur"},
nucleosubj1 = {"sach"},
imper = {nil, {"sache"}, nil, {"sachons"}, {"sachez"}},
ger = {"sachant"}
}},
{"avoir", {"avoir$"}, {
nucleopres1 = {"a"},
nucleopres2 = {"av"},
nucleoperf = {"eu"},
nucleofut = {"aur"},
nucleosubj1 = {"ai"},
nucleosubj2 = {"ay"},
ger = {"ayant"},
ind_pres = {{"ai"}, {"as"}, {"a"}, nil, nil, {"ont"}},
subj_pres = {nil, nil, {"ait"}, {"ayons"}, {"ayez"}},
imper = {nil, {"aie"}, nil, {"ayons"}, {"ayez"}}
}},
--{"ramentevoir", {"ramentevoir$"}, {
--}},
{"recevoir", {"cevoir$"}, {
nucleopres1 = {"çoi"},
nucleopres2 = {"cev"},
nucleopres3 = {"çoiv"},
nucleoperf = {"çu"},
nucleofut = {"cevr"}
}},
{"devoir", {"^devoir$"}, {
nucleopres1 = {"doi"},
nucleopres2 = {"dev"},
nucleopres3 = {"doiv"},
nucleoperf = {"dû"},
}},
{"redevoir", {"devoir$"}, {
nucleopres1 = {"doi"},
nucleopres2 = {"dev"},
nucleopres3 = {"doiv"},
nucleoperf = {"du"},
}},
{"pleuvoir", {"pleuvoir$"}, {
nucleopres1 = {"pleu"},
nucleopres2 = {"pleuv"},
nucleopres3 = {"pleuv"},
nucleoperf = {"plu"},
nucleofut = {"pleuvr"},
}},
{"mouvoir", {"^mouvoir$"}, {
nucleopres1 = {"meu"},
nucleopres2 = {"mouv"},
nucleopres3 = {"meuv"},
nucleoperf = {"mu"},
part = {"mû"},
nucleofut = {"mouvr"}
}},
{"promouvoir", {"mouvoir$"}, {
nucleopres1 = {"meu"},
nucleopres2 = {"mouv"},
nucleopres3 = {"meuv"},
nucleoperf = {"mu"},
nucleofut = {"mouvr"}
}},
{"pourvoir", {"pourvoir$"}, {
nucleopres1 = {"pourvoi"},
nucleopres2 = {"pourvoy"},
nucleopres3 = {"pourvoi"},
nucleoperf = {"puorvu"},
}},
{"pouvoir", {"pouvoir$"}, {
nucleopres1 = {"peu"},
nucleopres2 = {"pouv"},
nucleopres3 = {"peuv"},
nucleoperf = {"pu"},
nucleofut = {"pourr"},
nucleosubj1 = {"puiss"},
ind_pres = {{"peux", "puis"}, {"peux"}},
imper = {{},{},{},{},{},{}},
}},
{"voir", {"voir$"}, {
nucleopres1 = {"voi"},
nucleopres2 = {"voy"},
nucleopres3 = {"voi"},
nucleoperf = {"vi"},
nucleofut = {"verr"},
part = {"vu"},
}},
{"quérir", {"quérir$"}, {
nucleopres1 = {"quier"},
nucleopres2 = {"quér"},
nucleopres3 = {"quièr"},
nucleoperf = {"qui"},
nucleofut = {"querr"},
part = {"quis"}
}},
{"courir", {"courir$"}, {
nucleopres1 = {"cour"},
nucleopres2 = {"cour"},
nucleopres3 = {"cour"},
nucleoperf = {"couru"},
nucleofut = {"courr"},
}},
{"mourir", {"mourir$"}, {
nucleopres1 = {"meur"},
nucleopres2 = {"mour"},
nucleopres3 = {"meur"},
nucleoperf = {"mouru"},
nucleofut = {"mourr"},
part = {"mort"}
}},
{"ouvrir", {"ouvrir$", "ffrir$"}, {
nucleo = "r",
nucleopres1 = {"r"},
nucleoperf = {"ri"},
part = {"ert"},
ind_pres = {alt=true},
imper = {alt=true}
}},
{"issir", {"^issir$"}, {
nucleopres1 = {"is"},
nucleopres2 = {"iss"},
nucleopres3 = {"iss"},
part = {"issu"},
impers = "36"
}},
{"fuir", {"fuir$"}, {
nucleopres1 = {"fui"},
nucleopres2 = {"fuy"},
nucleopres3 = {"fui"},
nucleoperf = {"fui"},
}},
},
["ïr"] = {
{"haïr", {"haïr$"}, {
nucleopres1 = {"-i"},
nucleopres2 = {"-ïss"}, -- necesito volver a poner los valores por defecto para que no propague nucleopres1
nucleopres3 = {"-ïss"},
nucleosubj1 = {"-ïss"},
nucleosubj2 = {"-ïss"},
}},
{"ouïr", {"ouïr$"}, {
nucleopres1 = {"ouï", "oi"},
nucleopres2 = {"ouïss", "oy"},
nucleopres3 = {"ouïss", "oi"},
nucleoperf = {"ouï"},
nucleofut = {"ouïr", "oir", "orr"}
}},
},
["re"] = {
{"vaincre", {"cre$"}, {
nucleo = "c",
nucleopres1 = {"c"},
nucleopres2 = {"qu"},
nucleopres3 = {"qu"},
nucleoperf = {"qui"},
part = {"cu"},
}},
{"prendre", {"prendre$"}, {
nucleopres1 = {"prend"},
nucleopres2 = {"pren"},
nucleopres3 = {"prenn"},
nucleoperf = {"pri"},
part = {"pris"},
}},
{"peindre", {"indre$"}, {
nucleopres1 = {"in"},
nucleopres2 = {"ign"},
nucleopres3 = {"ign"},
nucleoperf = {"igni"},
part = {"int"}
}},
{"coudre", {"coudre$"}, {
nucleopres1 = {"coud"},
nucleopres2 = {"cous"},
nucleopres3 = {"cous"},
nucleoperf = {"cousi"},
part = {"cousu"},
}},
{"moudre", {"moudre$"}, {
nucleopres1 = {"moud"},
nucleopres2 = {"moul"},
nucleopres3 = {"moul"},
nucleoperf = {"moulu"},
}},
{"résoudre", {"résoudre$"}, {
nucleopres1 = {"résou"},
nucleopres2 = {"résolv"},
nucleopres3 = {"résolv"},
nucleoperf = {"résolu"},
}},
{"absoudre", {"soudre$"}, {
nucleopres1 = {"sou"},
nucleopres2 = {"solv"},
nucleopres3 = {"solv"},
nucleoperf = {"solu"},
part = {"sous"}
}},
{"faire", {"faire$"}, {
nucleopres1 = {"fai"},
nucleopres2 = {"fais"},
nucleopres3 = {"fais"},
nucleoperf = {"fi"},
nucleofut = {"fer"},
part = {"fait"},
nucleosubj1 = {"fass"},
ind_pres = {nil, nil, nil, nil, {"faites"}, {"font"}},
imper = {nil, nil, nil, nil, {"faites"}}
}},
{"plaire", {"plaire$"}, {
nucleopres1 = {"plai"},
nucleopres2 = {"plais"},
nucleopres3 = {"plais"},
nucleoperf = {"plu"},
}},
{"distraire", {"raire$"}, {
nucleopres1 = {"rai"},
nucleopres2 = {"ray"},
nucleopres3 = {"rai"},
nucleoperf = {"ray"},
part = {"rait"},
ind_perf = {alt=true},
subj_imp = {alt=true}
}},
{"taire", {"taire$"}, {
nucleopres1 = {"tai"},
nucleopres2 = {"tais"},
nucleopres3 = {"tais"},
nucleoperf = {"tu"},
}},
{"circoncire", {"circoncire$"}, {
nucleopres1 = {"circonci"},
nucleopres2 = {"circoncis"},
nucleopres3 = {"circoncis"},
nucleoperf = {"circonci"},
part = {"circoncis"}
}},
{"dire", {"^dire$", "^redire$"}, {
nucleo = "di",
nucleopres1 = {"di"},
nucleopres2 = {"dis"},
nucleopres3 = {"dis"},
nucleoperf = {"di"},
part = {"dit"},
ind_pres = {nil, nil, nil, nil, {"dites"}},
imper = {nil, nil, nil, nil, {"dites"}},
}},
{"maudire", {"dire$"}, {
nucleopres1 = {"di"},
nucleopres2 = {"dis"},
nucleopres3 = {"dis"},
nucleoperf = {"di"},
part = {"dit"}
}},
{"suffire", {"suffire$"}, {
nucleopres1 = {"suffi"},
nucleopres2 = {"suffis"},
nucleopres3 = {"suffis"},
nucleoperf = {"suffi"},
}},
{"confire", {"confire$"}, {
nucleopres1 = {"confi"},
nucleopres2 = {"confis"},
nucleopres3 = {"confis"},
nucleoperf = {"confi"},
part = {"confit"}
}},
{"lire", {"lire$"}, {
nucleopres1 = {"li"},
nucleopres2 = {"lis"},
nucleopres3 = {"lis"},
nucleoperf = {"lu"},
}},
{"luire", {"luire$"}, {
nucleopres1 = {"lui"},
nucleopres2 = {"luis"},
nucleopres3 = {"luis"},
nucleoperf = {"lui", "luisi"},
part = {"lui"}
}},
{"boire", {"boire$"}, {
nucleopres1 = {"boi"},
nucleopres2 = {"buv"},
nucleopres3 = {"boiv"},
nucleoperf = {"bu"},
}},
{"croire", {"croire$"}, {
nucleopres1 = {"croi"},
nucleopres2 = {"croy"},
nucleopres3 = {"croi"},
nucleoperf = {"cru"},
}},
{"écrire", {"crire$"}, {
nucleopres1 = {"cri"},
nucleopres2 = {"criv"},
nucleopres3 = {"criv"},
nucleoperf = {"crivi"},
part = {"crit"}
}},
{"frire", {"frire$"}, {
nucleopres1 = {"fri"},
nucleopres2 = {"fri"},
nucleopres3 = {"fri"},
nucleoperf = {"fri"},
part = {"frit"},
ind_imp = {{},{},{},{},{},{}},
ind_perf = {{},{},{},{},{},{}},
fut = {{},{},{},{},{},{}},
cond = {{},{},{},{},{},{}},
subj_pres = {{},{},{},{},{},{}},
subj_imp = {{},{},{},{},{},{}},
imper = {{},{},{},{},{},{}},
impers = "sg"
}},
{"rire", {"rire$"}, {
nucleopres1 = {"ri"},
nucleopres2 = {"ri"},
nucleopres3 = {"ri"},
nucleoperf = {"ri"},
}},
{"bruire", {"bruire$"}, {
nucleopres1 = {"bruis"},
nucleopres2 = {"bruiss"},
nucleopres3 = {"bruiss"},
nucleoperf = {"brui"},
impers = "36"
}},
{"nuire", {"nuire$"}, {
nucleopres1 = {"nui"},
nucleopres2 = {"nuis"},
nucleopres3 = {"nuis"},
nucleoperf = {"nuisi"},
part = {"nui"}
}},
{"cuire", {"uire$"}, {
nucleopres1 = {"ui"},
nucleopres2 = {"uis"},
nucleopres3 = {"uis"},
nucleoperf = {"uisi"},
part = {"uit"}
}},
{"clore", {"clore$"}, {
nucleopres1 = {"clo"},
nucleopres2 = {"clos"},
nucleopres3 = {"clos"},
nucleoperf = {},
part = {"clos"}
}},
{"rompre", {"pre$"}, {
nucleopres1 = {"p"},
nucleopres2 = {"p"},
nucleopres3 = {"p"},
nucleoperf = {"pi"},
part = {"pu"}
}},
{"être", {"^être$"}, {
nucleopres1 = {"e"},
nucleopres2 = {"ét"},
nucleoperf = {"fu"},
nucleofut = {"ser"},
part = {"été"},
nucleosubj1 = {"soi"},
nucleosubj2 = {"soy"},
ind_pres = {{"suis"}, {"es"}, {"est"}, {"sommes"}, {"êtes"}, {"sont"}},
subj_pres = {{"sois"}, {"sois"}, {"soit"}, {"soyons"}, {"soyez"}},
imper = {nil, {"sois"}, nil, {"soyons"}, {"soyez"}}
}},
{"naitre", {"^na[iî]tre$", "rena[iî]tre$"}, { -- no connaitre, va en el paradigma de abajo
nucleo = "nait",
nucleopres1 = {"nai"},
nucleopres2 = {"naiss"},
nucleopres3 = {"naiss"},
nucleoperf = {"naqui"},
part = {"né"},
}},
{"paitre", {"a[iî]tre$"}, { -- tb. repaitre, etc
nucleopres1 = {"ai"},
nucleopres2 = {"aiss"},
nucleopres3 = {"aiss"},
nucleoperf = {"u"},
}},
{"croitre", {"o[iî]tre$"}, {
nucleopres1 = {"oi"},
nucleopres2 = {"oiss"},
nucleopres3 = {"oiss"},
nucleoperf = {"u"},
}},
{"battre", {"battre$"}, {
nucleopres1 = {"bat"},
nucleopres2 = {"batt"},
nucleopres3 = {"batt"},
nucleoperf = {"batti"},
part = {"battu"}
}},
{"mettre", {"mettre$"}, {
nucleopres1 = {"met"},
nucleopres2 = {"mett"},
nucleopres3 = {"mett"},
nucleoperf = {"mi"},
part = {"mis"}
}},
{"foutre", {"foutre$"}, {
nucleopres1 = {"fou"},
nucleopres2 = {"fout"},
nucleoperf = {"fouti"},
part = {"foutu"}
}},
{"inclure", {"inclure$", "transclure$", "occlure$"}, {
nucleo = "clu",
nucleopres1 = {"clu"},
nucleopres2 = {"clu"},
nucleopres3 = {"clu"},
nucleoperf = {"clu"},
part = {"clus"}
}},
{"conclure", {"clure$"}, {
nucleopres1 = {"clu"},
nucleopres2 = {"clu"},
nucleopres3 = {"clu"},
nucleoperf = {"clu"},
}},
{"ensuivre", {"ensuivre$"}, {
nucleopres1 = {"sui"},
nucleopres2 = {"suiv"},
nucleopres3 = {"suiv"},
nucleoperf = {"suivi"},
impers = "36"
}},
{"suivre", {"suivre$"}, {
nucleopres1 = {"sui"},
nucleopres2 = {"suiv"},
nucleopres3 = {"suiv"},
nucleoperf = {"suivi"},
}},
{"vivre", {"vivre$"}, {
nucleopres1 = {"vi"},
nucleopres2 = {"viv"},
nucleopres3 = {"viv"},
nucleoperf = {"vécu"},
}},
},
}
local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf)
if not nexo then
return sufijo
end
if sufijo_inf == "er" then
if find(sufijo, "^[aouâ]") then
if nexo == "c" then
return "~ç~"..sufijo
end
if nexo == "g" then
return "~ge~"..sufijo
end
end
elseif sufijo_inf == "ër" then
if find(sufijo, "^[aouâéí]") then
if nexo == "u" then
return "~ü~"..sufijo
end
end
if find(sufijo, "^[ei]") then
if nexo == "u" then
return nexo.."~"..sub(sufijo, 1, 1)..DIER.."~"..sub(sufijo, 2)
end
end
end
return nexo..sufijo
end
local function combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma, alternar)
if not nucleo or not nexosufijo then
return nil
end
if alternar and (forma == "fut" or forma == "cond" or find(nexosufijo, "^.?e[ns]?t?$")) then
if alternar == "ay" then
return nucleo..nexosufijo, (gsub(nucleo, "ay$", "a~i~"))..nexosufijo
end
if alternar == "el" then
return (gsub(nucleo, "el$", "~è~l"))..nexosufijo, (gsub(nucleo, "el$", "e~ll~"))..nexosufijo
end
if alternar == "et" then
return (gsub(nucleo, "et$", "~è~t"))..nexosufijo, (gsub(nucleo, "et$", "e~tt~"))..nexosufijo
end
if alternar == "EL" then
return (gsub(nucleo, "el$", "e#ll#"))..nexosufijo
end
if alternar == "ET" then
return (gsub(nucleo, "et$", "e#tt#"))..nexosufijo
end
if alternar == "y" then
return (gsub(nucleo, "y$", "~i~"))..nexosufijo
end
if alternar == "é" then
if forma == "fut" or forma == "cond" then
return (gsub(nucleo, "é(.-)$", "~è~%1"))..nexosufijo, nucleo..nexosufijo
else
return (gsub(nucleo, "é(.-)$", "~è~%1"))..nexosufijo
end
end
if alternar == "e" then
return (gsub(nucleo, "e(.-)$", "~è~%1"))..nexosufijo
end
end
if find(nucleo, "[tdc][~#]?$") and nexosufijo == "t" then
return nucleo
end
if not find(nucleo, "[aiu][~#]?$") and find(nexosufijo, "^"..CFLEX) then
return nucleo..sub(nexosufijo, 2)
end
if find(nucleo, "[aiu][~#]$") and find(nexosufijo, "^"..CFLEX) then
return (gsub(nucleo, "([aiu])([~#])$", "%1"..CFLEX.."%2"))..sub(nexosufijo, 2)
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
if not prefijo or not nucleonexosufijo then
return nil
end
return prefijo..nucleonexosufijo
end
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijos_ = obtener_sufijos(conjinfo.sufijo_inf, conjinfo[forma].alt and forma.."_alt" or forma)
local nucleos
if not conjinfo[forma].nucleo then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleopres2
elseif forma == "part" then
nucleos = conjinfo.nucleoperf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleopres1, conjinfo.nucleopres1, conjinfo.nucleopres1, conjinfo.nucleopres2, conjinfo.nucleopres2, conjinfo.nucleopres3}
elseif forma == "ind_imp" then
nucleos = {conjinfo.nucleopres2, conjinfo.nucleopres2, conjinfo.nucleopres2, conjinfo.nucleopres2, conjinfo.nucleopres2, conjinfo.nucleopres2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleosubj1, conjinfo.nucleosubj1, conjinfo.nucleosubj1, conjinfo.nucleosubj2, conjinfo.nucleosubj2, conjinfo.nucleosubj1}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleopres1, {}, conjinfo.nucleopres2, conjinfo.nucleopres2, {}}
elseif forma == "fut" then
nucleos = {conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut}
elseif forma == "cond" then
nucleos = {conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut}
elseif forma == "ind_perf" then
nucleos = {conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf}
elseif forma == "subj_imp" then
nucleos = {conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf}
else
local n
if conjinfo.nucleo_inf then
n = {conjinfo.nucleo_inf}
else
n = {}
end
nucleos = {n, n, n, n, n, n}
end
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for _, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local nexosufijo = combinar_nexo_sufijo(nexo, sufijos_[1], conjinfo.sufijo_inf)
for _,nucleo in ipairs(nucleos) do
local nxs1, nxs2 = combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma, conjinfo.alternar)
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, nxs1))
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, nxs2))
end
end
return
end
for i = JE, ILLS do
local p = tostr[i]
if conjinfo[forma][i] then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local k = i
while sufijos_[k] do
local nexosufijo = combinar_nexo_sufijo(nexo, sufijos_[k], conjinfo.sufijo_inf)
for _, n in ipairs(nucleos[i]) do
local nxs1, nxs2 = combinar_nucleo_nexosufijo(n, nexosufijo, forma, conjinfo.alternar)
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, nxs1))
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, nxs2))
end
k = k + 6
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local etre = fmtinfo.etre
local arr = res[forma]
local t = {}
local es_no_personal = formas_no_personales[forma]
local tiempo, i = match(forma, "^(.*)(%d)$")
local j
if not i then
tiempo = forma
i = 1
j = 3
else
i = tonumber(i)
j = i
end
local rest_ = i < NOUS and resto or resto_pl
local rest_pl_ = resto_pl
local vaux = (etre or pron == "se" or pron == "s'") and "etre" or "avoir"
for _, v in ipairs(arr) do
local hs = auxiliar[vaux][tiempo]
local rest = rest_
local rest_pl = rest_pl_
if hs then
if vaux == "etre" and i >= NOUS then
v = gsub(v, "("..LETRA..")([~#]?)$", "%1s%2")
end
rest = " "..v..rest
rest_pl = " "..v..rest_pl
v = auxiliar[vaux][tiempo][i]
end
if tiempo == "imper" then -- lo único pospuesto es el imperativo
local vpronart = v
if pron == "se" or pron == "s'" then
vpronart = vpronart..REFLEXIVOS_POSPUESTOS[j]
end
if art and art ~= "" then
vpronart = vpronart.."-"..art
end
insert(t, adv..((pron or art) and f(vpronart) or f_links(vpronart))..f_links(rest))
else -- antepuesto
local pronartv = v
if art and art ~= "" then
pronartv = find(pronartv, "^[~#]?"..V) and (gsub(art, "^l.*$", "l'"))..pronartv or art.." "..pronartv
end
if pron == "se" or pron == "s'" then
pronartv = find(pronartv, "^[~#]?"..V) and REFLEXIVOS_ANTEPUESTOS_CONTRAIDOS[j]..pronartv or REFLEXIVOS_ANTEPUESTOS[j].." "..pronartv
end
insert(t, adv..((pron or art) and f(pronartv) or f_links(pronartv))..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..((pron or art) and f(pronartv) or f_links(pronartv))..f_links(rest_pl))
end
end
end
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["nucleopres1"] = {lista = true},
["núcleopres1"] = {alias_de = "nucleopres1"},
["nucleopres2"] = {lista = true},
["núcleopres2"] = {alias_de = "nucleopres2"},
["nucleopres3"] = {lista = true},
["núcleopres3"] = {alias_de = "nucleopres3"},
["nucleosubj1"] = {lista = true},
["núcleosubj1"] = {alias_de = "nucleosubj1"},
["nucleosubj2"] = {lista = true},
["núcleosubj2"] = {alias_de = "nucleosubj2"},
["nucleoperf"] = {lista = true},
["núcleoperf"] = {alias_de = "nucleoperf"},
["nucleofut"] = {lista = true},
["núcleofut"] = {alias_de = "nucleofut"},
["paradigma"] = {lista = true},
["impersonal"] = {},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["etre"] = {tipo = "bool"},
["être"] = {alias_de = "etre"},
["nota"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local adv, r1 = match(tit, "^([o]?[uUnN][ieo]n?"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local pron, art, v, resto = match(r1, "^(se)"..ESPACIO.."(l[ae]?s?'?)"..ESPACIO.."("..LETRA.."*[eëiïr][re])( .-)$") -- obligo a que haya un espacio después: si o sí es el sufijo del verbo
if not v then
local pron, art, v, resto = match(r1, "^(s')(l[ae]?s?'?)"..ESPACIO.."("..LETRA.."*[eëiïr][re])( .-)$")
end
if not v then
pron, v, resto = match(r1, "^(se)"..ESPACIO.."("..LETRA.."*[eëiïr][re])( .-)$")
end
if not v then
pron, v, resto = match(r1, "^(s')("..LETRA.."*[eëiïr][re])( .-)$")
end
if not v then
art, v, resto = match(r1, "^(l[ae]?s?'?)"..ESPACIO.."("..LETRA.."*[eëiïr][re])( .-)$")
end
if not v then
pron, art, v = match(r1, "^(se)"..ESPACIO.."(l[ae]?s?'?)"..ESPACIO.."("..LETRA.."*[eëiïr][re])$") -- sin resto: si o sí tiene que ser el final
end
if not v then
pron, art, v = match(r1, "^(s')(l[ae]?s?'?)"..ESPACIO.."("..LETRA.."*[eëiïr][re])$") -- sin resto: si o sí tiene que ser el final
end
if not v then
pron, v = match(r1, "^(se)"..ESPACIO.."("..LETRA.."*[eëiïr][re])$")
end
if not v then
pron, v = match(r1, "^(s')("..LETRA.."*[eëiïr][re])$")
end
if not v then
art, v = match(r1, "^(l[ae]?s?'?)"..ESPACIO.."("..LETRA.."*[eëiïr][re])$")
end
if not v then
v = match(r1, LETRA.."*[eëiïr][re]$")
end
if not resto then
resto = ""
end
local resto_pl = args["plural"] and match(args["plural"], "^s?e?"..ESPACIO.."?l?[ae]?s?'?"..ESPACIO.."?"..LETRA.."*[eëiïr][re]( .-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
local sufijo_inf = match(v, "[eëiïr][re]$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
for N = 1, max(1,
maxindex(args["paradigma"]),
maxindex(args["nucleopres1"]),
maxindex(args["nucleopres2"]),
maxindex(args["nucleopres3"]),
maxindex(args["nucleosubj1"]),
maxindex(args["nucleosubj2"]),
maxindex(args["nucleoperf"]),
maxindex(args["nucleofut"])) do
local conjinfo = {}
local encontrado1 = false
local encontrado2 = false
for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
conjinfo = deepcopy(p[3])
conjinfo.rxx = match(v, rx)
es_irregular = true
paradigmas_reconocidos[p[1]] = true
encontrado1 = true
break
end
end
if encontrado1 then
break
end
end
encontrado1 = false
for _,p in ipairs(paradigmas_regulares1[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
if size(p[3]) == 0 then
paradigmas_reconocidos[p[1]] = true
end
for k, v in pairs(p[3]) do
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
encontrado1 = true
break
end
end
if encontrado1 then
break
end
end
for _,p in ipairs(paradigmas_regulares2[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
if size(p[3]) == 0 and not encontrado1 then
paradigmas_reconocidos[p[1]] = true
end
for k, v in pairs(p[3]) do
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
encontrado2 = true
break
end
end
if encontrado2 then
break
end
end
assert(encontrado2, "paradigma no reconocido")
conjinfo.nucleo_inf = conjinfo.nucleo
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo_inf or sufijo_inf
if conjinfo.nucleo_inf == nil then -- puede ser false
if conjinfo.rxx then
conjinfo.nucleo_inf = sub(conjinfo.rxx, 1, len(conjinfo.rxx) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
else
conjinfo.nucleo_inf = sub(v, 1, len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
end
if type(conjinfo.nucleo_inf) == "string" then
if not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, len(v) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
else
conjinfo.prefijo = ""
end
local sobreescrito = {}
local function parsear_nucleo(n, pd)
if conjinfo.nucleo_inf == false or conjinfo[n] == false then
conjinfo[n] = {}
return
end
local por_defecto
if pd and sobreescrito[pd] then
por_defecto = deepcopy(conjinfo[pd])
else
por_defecto = nucleos[conjinfo.sufijo_inf][n] and deepcopy(nucleos[conjinfo.sufijo_inf][n]) or {conjinfo.nucleo_inf}
end
for i, nucl in ipairs(por_defecto) do
if sub(nucl, 1, 1) == "-" then
nucl = conjinfo.nucleo_inf..sub(nucl, 2)
end
por_defecto[i] = nucl
end
if not conjinfo[n] then
if args[n][N] then
conjinfo[n] = {args[n][N]}
else
conjinfo[n] = por_defecto
end
end
for i, nucl in ipairs(conjinfo[n]) do
if sub(nucl, 1, 1) == "-" then
nucl = conjinfo.nucleo_inf..sub(nucl, 2)
end
if find(nucl, "#") then
sobreescrito[n] = true
end
if nucl ~= por_defecto[1] and not find(nucl, "#") then -- si por_defecto traía más núcleos, lo considero irregular
nucl = "#"..nucl.."#"
sobreescrito[n] = true
end
conjinfo[n][i] = nucl
end
end
parsear_nucleo("nucleopres1")
parsear_nucleo("nucleopres2", "nucleopres1")
parsear_nucleo("nucleopres3", "nucleopres2")
parsear_nucleo("nucleosubj1", "nucleopres3")
parsear_nucleo("nucleosubj2", "nucleopres2")
parsear_nucleo("nucleoperf")
parsear_nucleo("nucleofut")
if not conjinfo.part and sufijo_inf == "re" then
local pp = sobreescrito["nucleoperf"] and deepcopy(conjinfo.nucleoperf) or {conjinfo.nucleo_inf}
for i,p in ipairs(pp) do
p = gsub(p, "[~#]", "")
p = gsub(p, "u?$", "u", 1) -- para que no inserte dos úes
pp[i] = p
end
conjinfo.part = pp
end
conjinfo.v = v
args["impersonal"] = args["impersonal"] or conjinfo.impers
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(conjugado.part) do
if (find(e, 'PART') or not find(e, 'ADJ')) and not find(e, "†") then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, resto=resto, resto_pl=resto_pl, impers=args["impersonal"], etre=args["etre"]}
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local impers = args["impersonal"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, impers)
end)
local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper
if impers == "3" then
fila_pronombres_ind = {"", "il", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "il", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "qu'il", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(il)", color=COLOR_IMPER, header=true, class="pc"}
cs = 2
elseif impers == "36" then
fila_pronombres_ind = {"", "il, elle", "ils, elles", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "il, elle", "ils, elles", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "qu'il, qu'elle", "qu'ils, qu'elles", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(il, elle)", "(ils, elles)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_ind = {"", "je/j'", "tu", "il, elle, on", "nous", "vous", "ils/elles", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "je/j'", "tu", "il, elle, on", "nous", "vous", "ils/elles", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que je/j'", "que tu", "qu'il, qu'elle, qu'on", "que nous", "que vous", "qu'ils, qu'elles", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tu)", "―", "(nous)", "(vous)", "―", 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=COLOR_H, header=true}
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
else
resultante.inf.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.part.colspan = cs1-1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
t[5] = {{"Formas personales", colspan=cs}, color=COLOR_H, 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}, ic("ind_pres")}
t[9] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")}
t[10] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("ind_perf")}
t[11] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")}
t[12] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("ind_perf_comp")}
t[13] = {{"Futuro", color=COLOR_IND, header=true}, ic("fut")}
t[14] = {{"Futuro compuesto", color=COLOR_IND, header=true}, ic("fut_comp")}
t[15] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("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}, ic("cond")}
t[19] = {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("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}, ic("subj_pres")}
t[23] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")}
t[24] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")}
t[25] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")}
t[26] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true}
t[27] = fila_pronombres_imper
if mostrar_imper then
t[28] = {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")}
else
t[28] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}}
end
t[29] = {{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[30] = {{args["nota"] and args["nota"] or "", colspan=cs}}
local paradigmas_t = {}
local cats = {}
if es_irregular then
insert(cats, "FR:Verbos irregulares")
paradigmas_reconocidos["aimer"] = nil
paradigmas_reconocidos["arguër"] = nil
paradigmas_reconocidos["finir"] = nil
paradigmas_reconocidos["haïr"] = nil
paradigmas_reconocidos["vendre"] = nil
else
insert(cats, "FR:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "FR:Verbos del paradigma "..p)
end
impers = impers or ""
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "FR:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "FR:Verbos terciopersonales")
end
if defectivo then
insert(cats, "FR:Verbos defectivos")
end
if sufijo_inf == "er" or sufijo_inf == "ër" then
insert(cats, "FR:Verbos de la primera conjugación")
elseif sufijo_inf == "ir" or sufijo_inf == "ïr" then
insert(cats, "FR:Verbos de la segunda conjugación")
else
insert(cats, "FR:Verbos de la tercera conjugación")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")",
t,
ns == 0 and cats or {})
end
return export
750qhyg92w0xscco27dds87svcqleqk
Módulo:flex/en
828
1056551
6118168
6076985
2026-06-16T02:18:15Z
TMCbot
164594
.
6118168
Scribunto
text/plain
-- Flexión de sustantivos, adjetivos y verbos en inglés
-- Parte de este módulo está copiado de [[en:Module:en-utilities]]
-- Autor: Tmagc
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local deepcopy = m_table.deepCopy
local merge = m_table.merge
local insert_if_not = m_table.insertIfNot
local m_str = require("Módulo:string")
local find = m_str.find
local gsub1 = m_str.gsub1
local lower = m_str.lower
local match = string.match
local sub = string.sub
local m_str_avanzado = require("Módulo:string/avanzado")
local toNFD = m_str_avanzado.toNFD
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local vocales = "aàâeéèêiîoôuûäëïöüÿæœAÀÂEÉÈÊIÎOÔUÛÄËÏÖÜŸÆŒ"
local consonantes = "bcdfghjklmnpqrstvwxyzçBCDFGHJKLMNPQRSTVWXYZÇ"
local V = "[" .. vocales .. "]"
local C = "[" .. consonantes .. "]"
local LETRA = "[" .. vocales .. consonantes .. "]"
local espacios = "%s"
local ESPACIO = "["..espacios.."]"
local NO_ESPACIO = "[^"..espacios.."]"
local vowels = "aæᴀᴁɐɑɒ@eᴇǝⱻəɛɘɜɞɤiıɪɨᵻoøœᴏɶɔᴐɵuᴜʉᵾɯꟺʊʋʌyʏ"
local hyphens = "%-‐‑‒–—―"
-- Loaders for objects, which load data (or some other object) into some variable,
-- which can then be accessed as "foo or get_foo()", where the function get_foo
-- sets the object to "foo" and then returns it. This ensures they are only loaded
-- when needed, and avoids the need to check for the existence of the object each
-- time, since once "foo" has been set, "get_foo" will not be called again.
local diacritics
local function get_diacritics()
diacritics, get_diacritics = mw.loadData("Módulo:flex/en/diacríticos").diacritics_all .. "+", nil
return diacritics
end
-- Normalize a string, so that case and diacritics are ignored. By default, "gu"
-- and "qu" are normalized to "g" and "q", because they behave like consonants
-- under certain conditions (e.g. final "y" does not usually have the plural
-- "ies" after a vowel, but it's regular for "quy" to become "quies". The flag
-- `not_gu` prevents this happening to "gu", and is needed because terms ending
-- "-guy" are almost always compounds of "guy" (→ "guys").
local function normalize(str, followed_by, not_gu)
if not followed_by then
followed_by = ""
end
str = gsub1(toNFD(str) .. followed_by, "([" .. (not_gu and "" or "Gg") .. "Qq])u([".. vowels .. "])", "%1%2")
return lower(gsub1(sub(str, 1, #str - #followed_by), diacritics or get_diacritics(), ""))
end
local function epenthetic_e_default(stem)
return sub(stem, -1) ~= "e"
end
local function epenthetic_e_for_s(stem, term)
-- If the stem is different, it must be from "y" → "i".
if stem ~= term then
return true
end
local final
if match(stem, "^[^\128-\255]*$") then
final = sub(stem, -1)
else
stem = gsub1(toNFD(stem), diacritics or get_diacritics(), "")
final = sub(stem, -1)
end
-- Epenthetic "e" is added after a sibilant or sibilant-affricate. The vast
-- majority of these are spelled "s", "x", "z", "ch" and "sh", but "dg"
-- (→ "dge") and "ß" (→ "ss") can be found in obsolete spellings, "shh" in
-- onomatopoeia, and "zh", "dj", "jj" (and more) in loanwords.
return (
final == "g" and sub(stem, -2, -2) == "d" or
final == "h" and match(stem, "[csz]h+$") or
final == "j" and match(stem, "[^" .. vowels .. "]j$") or
final == "s" or
final == "u" and match(stem, "%f[%w']u$") or
final == "x" or
final == "z" or
final == "ß"
)
end
local suffixes = {}
suffixes["'s"] = {
truncated = function(stem)
return sub(stem, -1) == "s" and "'" or "'s"
end,
}
suffixes["s.plural"] = {
final_y_is_i = true,
epenthetic_e = epenthetic_e_for_s,
modifies_possessive = true,
}
suffixes["s.verb"] = {
final_y_is_i = true,
final_consonant_is_doubled = true,
epenthetic_e = epenthetic_e_for_s
}
suffixes["ing"] = {
final_consonant_is_doubled = true,
remove_silent_e = true,
}
suffixes["d"] = {
final_y_is_i = true,
final_consonant_is_doubled = true,
epenthetic_e = epenthetic_e_default,
}
suffixes["dst"] = suffixes["d"]
suffixes["st.verb"] = suffixes["d"]
suffixes["th"] = suffixes["d"]
suffixes["n"] = {
final_y_is_i = true,
final_y_is_i_after_vowel = true,
final_guy_is_gui = true,
final_consonant_is_doubled = true,
-- No epenthetic "e" after an "e", or an "i", "r" or "w" preceded by a vowel.
epenthetic_e = function(stem)
return not (
sub(stem, -1) == "e" or
match(normalize(stem), "[" .. vowels .. "][irw]$")
)
end,
}
suffixes["r"] = {
final_y_is_i = true,
final_ey_is_i = true,
final_guy_is_gui = true,
final_consonant_is_doubled = true,
epenthetic_e = epenthetic_e_default
}
suffixes["st.superlative"] = suffixes["r"]
local function remove_possessive(stem)
return match(stem, "^(.*)'s$") or match(stem, "^(.*s)'$") or stem
end
-- Returns the stem used for suffixes that sometimes convert final "y" into "i",
-- such as "-es" ("-ies"), e.g. "penny" → "penni" ("pennies"). If
-- `final_ey_is_i` is true, final "ey" may also be converted, e.g. "plaguey" →
-- "plagui"; this is needed for "-er" ("-ier") and "-est" ("-iest"). If `not_gu`
-- is true, then normalize() will be called with the `not_gu` flag (see there
-- for more info); this is true in most cases.
local function convert_final_y_to_i(str, not_gu, final_ey_is_i, final_y_is_i_after_vowel)
local final3 = sub(str, -3)
-- Special case: treat "eey" as "ee" + "y" (e.g. "treey" → "treeiest").
-- "oey" and "uey" are usually vowel + "ey", but examples of "oe" + "y" and
-- "ue" = "y" do also exist: compare "go" → "goey" → "goier" with "doe" →
-- "doey" → "doeier"; "flu" → "fluey" → "fluiest" and "flue" → "fluey" →
-- "flueiest" form a theoretically possible minimal pair.
if final3 == "eey" then
return sub(str, 1, -2) .. "i"
end
local final2 = sub(str, -2)
-- If `final_ey_is_i` is true, treat final "-ey" can also be reduced.
if final_ey_is_i and final2 == "ey" then
-- Remove "ey" to get the base stem.
local base_stem = sub(str, 1, -3)
-- Special case: allow final "-ey" ("potato-ey" → "potato-iest").
if match(final3, "[" .. hyphens .. "]ey") then
return base_stem .. "i"
end
-- Final "ey" becomes "i" iff the term is polysyllabic (e.g. not
-- "grey"). "ey" is common if the base stem ends in a vowel ("echo →
-- "echoey"), so the presence of a vowel anywhere in the base stem is
-- sufficient to deem it polysyllabic. ("echoey" → "echo" → "echoiest",
-- "beigey" → "beig" → "beigiest", but "grey" → "gr" → "greyest"). The
-- first "y" in "-yey" can be treated as a vowel as long as it's
-- preceded by something ("clayey" → "clay" → "clayiest", "cryey" →
-- "cry" → "cryiest", but "*yey" → "*y" → "*yeyest"), so it needs to be
-- treated as a special case.
local normalized = normalize(base_stem, "ey")
if sub(normalized, -1) == "y" then
if match(normalized, "[%w@][yY]$") then
return base_stem .. "i"
end
elseif match(normalized, "[" .. vowels .. "%d]%w*$") then
return base_stem .. "i"
end
-- Special cases:
-- Final "quy" ("soliloquy" → "soliloquies").
-- Final "guy" iff `not_gu` is false ("roguy" → "roguiest").
-- Final "y" after a vowel iff `final_y_is_i_after_vowel` is true ("slay" →
-- "slain").
-- Final "-y" ("bro-y" → "bro-iest"), accounting for hyphen variation.
elseif match(final2, "[" .. hyphens .. "]y") then
-- Replace final "y" with "i".
return sub(str, 1, -2) .. "i"
-- Otherwise, final "y" becomes "i" iff it's not preceded by a vowel
-- ("shy" → "shiest", "horsy" → "horsies", but "day" → "days", "coy" →
-- "coyest").
else
-- Remove "y" to get the base stem.
local base_stem = sub(str, 1, -2)
if match(normalize(base_stem, "y", not_gu), "[^%s%p" .. (final_y_is_i_after_vowel and "" or vowels) .. "]$") then
return base_stem .. "i"
end
end
return str
end
local function double_final_consonant(str, final)
local initial = match(normalize(sub(str, 1, -2), final), "^.*%f[^%z%s" .. hyphens .. "…]([%l%p]*)[" .. vowels .. "]$")
return initial and (
initial == "" or
initial == "y" or
match(initial, "^.[\128-\191]*$") and match(initial, "[^" .. vowels .. "]") or
match(initial, "^[^" .. vowels .. "]*%f[^%l]$")
) and (str .. final) or str
end
local function remove_silent_e(str)
local final2 = sub(str, -2)
if final2 == "ie" then
-- Replace "ie" with "y", unless it follows another "y" (e.g.
-- "spulyie" → "spulyieing").
return gsub1(str, "([^yY%s%p])ie$", "%1y")
end
local base_stem = sub(str, 1, -2)
-- Silent "e" occurs after "u" or a consonant (cluster) preceded by a vowel.
return (
final2 == "ue" or
match(normalize(base_stem, "e"), "[" .. vowels .. "][^" .. vowels .. "]+$")
) and base_stem or str
end
local function add_suffix(term, suffix, pos)
local data, possessive = suffixes[suffix], nil
-- If modifies_possessive is set, check for and remove any possessive
-- suffix, which will be re-added again at the end.
if data.modifies_possessive then
local new = remove_possessive(term)
if new ~= term then
term, possessive = new, true
end
end
suffix = match(suffix, "^([^.]*)")
local final, stem = sub(term, -1)
-- Proper nouns don't have a final "y" changed to "i" (e.g. "the Gettys",
-- "the public Ivys").
if data.final_y_is_i and final == "y" and pos ~= "proper noun" then
stem = convert_final_y_to_i(term, not data.final_guy_is_gui, data.final_ey_is_i, data.final_y_is_i_after_vowel)
elseif data.remove_silent_e and final == "e" then
stem = remove_silent_e(term)
else
stem = term
end
local epenthetic_e = data.epenthetic_e
if epenthetic_e and epenthetic_e(stem, term) then
suffix = "e" .. suffix
end
if (
data.final_consonant_is_doubled and
match(final, "^[bcdfgjklmnpqrstvz]$") and -- Only double regular consonants.
match(suffix, "^[" .. vowels .. "]")
) then
stem = double_final_consonant(term, final)
end
local truncated = data.truncated
if truncated then
suffix = truncated(stem)
end
local output = stem .. suffix
-- Re-add the possessive suffix, if applicable.
if possessive then
output = add_suffix(output, "'s", pos)
end
return output
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {requerido=true},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["p"] = {lista = true},
["plural"] = {alias_de = "p"},
["n"] = {},
["nota"] = {alias_de = "n"},
["pnota"] = {lista = true},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local modo = args[1]
args["p"][1] = args["p"][1] or args[2]
args["p"][2] = args["p"][2] or args[3]
args["p"][3] = args["p"][3] or args[4]
args["p"][4] = args["p"][4] or args[5]
local cat_pref = find(title, LETRA..ESPACIO..LETRA) and "EN:Locuciones sustantivas" or "EN:Sustantivos"
local cats = {}
local enc
if modo then
if find(modo, "inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
insert(cats, cat_pref.." irregulares")
elseif find(modo, "inc") then
enc = "incontable"
insert(cats, cat_pref.." incontables")
insert(cats, cat_pref.." regulares")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
end
local pos = find(title, "^[A-Z]") and "proper noun" or "noun"
local plural = args["s"] == true and title.."#s#" or add_suffix(title, "s.plural", pos)
local flex_ = {{title}, {plural}}
args[1] = {}
args[2] = args["p"]
local flex, i1 = sobreescribir_formas(flex_, args)
if not flex[2][1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif i1 or args["s"] then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
else
if modo == "ci" then
enc = "contable e incontable"
insert(cats, cat_pref.." contables")
insert(cats, cat_pref.." incontables")
elseif find(modo, "umc?i") or find(modo, "gi") then
enc = "generalmente incontable"
insert(cats, cat_pref.." contables")
insert(cats, cat_pref.." incontables")
elseif find(modo, "umc?c") or find(modo, "gc") then
enc = "generalmente contable"
insert(cats, cat_pref.." contables")
insert(cats, cat_pref.." incontables")
else
insert(cats, cat_pref.." contables")
end
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex[1][1]),
enc,
args["n"],
{{"plural", flex[2], args["pnota"]}},
ns == 0 and cats or {}
)
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["alt"] = {},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["compnota"] = {lista = true},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["supnota"] = {lista = true},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local modo = args[1]
args["comp"][1] = args["comp"][1] or args[2]
args["sup"][1] = args["sup"][1] or args[3]
local cat_pref = find(title, LETRA..ESPACIO..LETRA) and "EN:Locuciones adjetivas" or "EN:Adjetivos"
local cats = {}
local corto = find(modo, "c")
local largo = find(modo, "l")
local further = find(modo, "f")
local gral = find(modo, "g")
if further then
largo = true
end
if corto and gral then
largo = true
end
if largo and gral then
corto = true
end
local enc
local flex_ = {{title}, {}, {}}
if find(modo, "i?nc") or (args["comp"][1] == "no" and args["sup"][1] == "no") then
enc = "sin comparativo ni superlativo"
insert(cats, cat_pref.." sin comparativo")
insert(cats, cat_pref.." sin superlativo")
return renderizar_encabezado(
frame,
args["alt"] or f(flex_[1][1]),
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
assert (corto or largo, "Especifique 'c' (corto), 'l' (largo) o 'f' (further) en el primer parámetro.")
if corto and largo then
if find(modo, "gc") then
enc = "generalmente corto"
elseif find(modo, "gl") then
enc = "generalmente largo"
else
enc = "corto y largo"
end
insert(cats, cat_pref.." cortos")
insert(cats, cat_pref.." largos")
if further then
insert(cats, cat_pref.." largos con further")
end
elseif corto then
enc = "corto"
insert(cats, cat_pref.." cortos")
else
enc = "largo"
insert(cats, cat_pref.." largos")
if further then
insert(cats, cat_pref.." largos con further")
end
end
if corto then
insert(flex_[2], add_suffix(title, "r"))
insert(flex_[3], add_suffix(title, "st.superlative"))
end
args[1] = {}
args[2] = args["comp"]
args[3] = args["sup"]
local flex, i1 = sobreescribir_formas(flex_, args)
-- necesito insertar los largos después de insertar los cortos irregulares, para no sobreescribir
if largo and not further then
insert(flex[2], "more "..title)
insert(flex[3], "most "..title)
end
if largo and further then
insert(flex[2], "further "..title)
insert(flex[3], "furthest "..title)
end
if args["comp"][1] == "no" then
enc = enc..", sin comparativo"
insert(cats, cat_pref.." sin comparativo")
return renderizar_encabezado(
frame,
args["alt"] or f(flex[1][1]),
enc,
args["n"],
{{"superlativo", flex[3], args["supnota"]}},
ns == 0 and cats or {}
)
elseif args["sup"][1] == "no" then
enc = enc..", sin superlativo"
insert(cats, cat_pref.." sin superlativo")
return renderizar_encabezado(
frame,
args["alt"] or f(flex[1][1]),
enc,
args["n"],
{{"comparativo", flex[2], args["compnota"]}},
ns == 0 and cats or {}
)
end
if i1 then
enc = enc..", "..f("#irregular#")
insert(cats, cat_pref.." irregulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex[1][1]),
enc,
args["n"],
{{"comparativo", flex[2], args["compnota"]},
{"superlativo", flex[3], args["supnota"]}},
ns == 0 and cats or {}
)
end
function export.adv(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["alt"] = {},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["compnota"] = {lista = true},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["supnota"] = {lista = true},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local modo = args[1]
args["comp"][1] = args["comp"][1] or args[2]
args["sup"][1] = args["sup"][1] or args[3]
local cat_pref = find(title, LETRA..ESPACIO..LETRA) and "EN:Locuciones adverbiales" or "EN:Adverbios"
local cats = {}
local corto = find(modo, "c")
local largo = find(modo, "l")
local further = find(modo, "f")
local gral = find(modo, "g")
if further then
largo = true
end
if corto and gral then
largo = true
end
if largo and gral then
corto = true
end
local enc
local flex_ = {{title}, {}, {}}
if find(modo, "i?nc") or (args["comp"][1] == "no" and args["sup"][1] == "no") then
enc = "sin comparativo ni superlativo"
insert(cats, cat_pref.." sin comparativo")
insert(cats, cat_pref.." sin superlativo")
return renderizar_encabezado(
frame,
args["alt"] or f(flex_[1][1]),
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
assert (corto or largo, "Especifique 'c' (corto), 'l' (largo) o 'f' (further) en el primer parámetro.")
if corto and largo then
if find(modo, "gc") then
enc = "generalmente corto"
elseif find(modo, "gl") then
enc = "generalmente largo"
else
enc = "corto y largo"
end
insert(cats, cat_pref.." cortos")
insert(cats, cat_pref.." largos")
if further then
insert(cats, cat_pref.." largos con further")
end
elseif corto then
enc = "corto"
insert(cats, cat_pref.." cortos")
else
enc = "largo"
insert(cats, cat_pref.." largos")
if further then
insert(cats, cat_pref.." largos con further")
end
end
if corto then
insert(flex_[2], add_suffix(title, "r"))
insert(flex_[3], add_suffix(title, "st.superlative"))
end
args[1] = {}
args[2] = args["comp"]
args[3] = args["sup"]
local flex, i1 = sobreescribir_formas(flex_, args)
-- necesito insertar los largos después de insertar los cortos irregulares, para no sobreescribir
if largo and not further then
insert(flex[2], "more "..title)
insert(flex[3], "most "..title)
end
if largo and further then
insert(flex[2], "further "..title)
insert(flex[3], "furthest "..title)
end
if args["comp"][1] == "no" then
enc = enc..", sin comparativo"
insert(cats, cat_pref.." sin comparativo")
return renderizar_encabezado(
frame,
args["alt"] or f(flex[1][1]),
enc,
args["n"],
{{"superlativo", flex[3], args["supnota"]}},
ns == 0 and cats or {}
)
elseif args["sup"][1] == "no" then
enc = enc..", sin superlativo"
insert(cats, cat_pref.." sin superlativo")
return renderizar_encabezado(
frame,
args["alt"] or f(flex[1][1]),
enc,
args["n"],
{{"comparativo", flex[2], args["compnota"]}},
ns == 0 and cats or {}
)
end
if i1 then
enc = enc..", "..f("#irregular#")
insert(cats, cat_pref.." irregulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex[1][1]),
enc,
args["n"],
{{"comparativo", flex[2], args["compnota"]},
{"superlativo", flex[3], args["supnota"]}},
ns == 0 and cats or {}
)
end
local auxiliar = {
["pret_comp"] = {"have", "have", "has", "have"},
["pret_ant"] = {"had", "had", "had", "had"},
["fut"] = {"will", "will", "will", "will"},
["fut_comp"] = {"will have", "will have", "will have", "will have"},
["cond"] = {"would", "would", "would", "would"},
["cond_comp"] = {"would have", "would have", "would have", "would have"},
}
local I, YOU, HE, WE = 1, 2, 3, 4
local tostr = {"1", "2", "3", "4"}
local PRONOMBRES = {"I", "you", "he, she, it", "we, you, they"}
local PRONOMBRES_IMP = {"―", "(you)", "―", "(we)"}
local IMPERSONALES = {"", "", "(it)", "(they)"}
local IMPERSONALES_SUBJ = {"", "", "(it)", "(they)"}
local formas_no_personales = {
["inf"] = true,
["ger"] = true,
["part"] = true,
}
local formas_personales = {
pres = true,
pret = true,
subj_pres = true,
subj_pret = true
}
local formas_personales_compuestas = {
pret_comp = true,
pret_ant = true,
fut = true,
fut_comp = true,
cond = true,
cond_comp = true,
}
local formas = merge(formas_no_personales, formas_personales)
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
end
if find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
local function agregar_forma(conjugado, forma, v)
local ed
for i = 1, 4 do
local vconj, vconj2
if forma == "inf" then
conjugado.inf = {v}
return
elseif forma == "ger" then
vconj = add_suffix(v, "ing", "verb")
elseif forma == "part" then
vconj = add_suffix(v, "d", "verb")
elseif forma == "pret" then
if not ed then
ed = add_suffix(v, "d", "verb")
end
vconj = ed
if i == YOU then
vconj2 = add_suffix(v, "dst", "verb").."{†}"
end
elseif forma == "subj_pret" then
if not ed then
ed = add_suffix(v, "d", "verb")
end
vconj = ed
elseif forma == "pres" then
if i == YOU then
vconj = v
vconj2 = add_suffix(v, "st.verb", "verb").."{†}"
elseif i == HE then
vconj = add_suffix(v, "s.verb", "verb")
vconj2 = add_suffix(v, "th", "verb").."{†}"
else
vconj = v
end
else
vconj = v
end
if formas_no_personales[forma] then
insert_if_not(conjugado[forma], vconj)
if vconj2 then
insert_if_not(conjugado[forma], vconj2)
end
return
end
local p = tostr[i]
insert_if_not(conjugado[forma..p], vconj)
if vconj2 then
insert_if_not(conjugado[forma..p], vconj2)
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local tit = fmtinfo.tit
local arr = res[forma]
local t = {}
if forma == "imper1" or forma == "imper3" then
res[forma] = {}
return
elseif forma == "imper2" then
local v = fmtinfo.v
local imp1 = (adv == "not " and "don't " or adv)..(v ~= tit and f_links(v) or f(v))..f_links(resto)
res[forma] = {imp1}
return
elseif forma == "imper4" then
local v = fmtinfo.v
local imp2 = "let's "..adv..(v ~= tit and f_links(v) or f(v))..f_links(resto_pl)
res[forma] = {imp2}
return
end
local es_no_personal = formas_no_personales[forma]
local tiempo, i = match(forma, "^(.*)(%d)$")
if not i then
tiempo = forma
i = 1
end
i = tonumber(i)
local rest = i >= WE and resto_pl or resto
local aux = auxiliar[tiempo] and auxiliar[tiempo][i].." " or ""
for _, v in ipairs(arr) do
insert(t, adv..aux..(v ~= tit and f_links(v) or f(v))..f_links(rest))
end
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["plural"] = {},
["impersonal"] = {},
["impers"] = {alias_de = "impersonal"},
["imper"] = {},
["n"] = {},
["nota"] = {alias_de = "n"},
["ll"] = {tipo = "bool"},
[1] = {tipo=parsear_arreglo, por_defecto={}},
[2] = {tipo=parsear_arreglo, por_defecto={}},
[3] = {tipo=parsear_arreglo, por_defecto={}},
[4] = {tipo=parsear_arreglo, por_defecto={}}
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
for forma,_ in pairs(formas_personales_compuestas) do
params[forma] = {}
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local tit2 = match(tit, "^to (.*)$") -- no considero el "to" inicial para las conjugaciones
tit = tit2 or tit
local adv, r1 = match(tit, "^([dn]ot?"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, resto = match(r1, "^("..NO_ESPACIO.."*)( .-)$") -- obligo a que haya un espacio después: si o sí es el sufijo del verbo
resto = resto or ""
v = v or tit
local resto_pl = args["plural"] and match(args["plural"], "^"..NO_ESPACIO.."*( .-)$") or resto
local z = sub(v, -1) -- ultimo caracter
if args["ll"] then
if z == "l" then
args[1] = {v.."ed[US]", v..z.."ed[UK]"}
args[2] = {v.."ed[US]", v..z.."ed[UK]"}
args[3] = {v.."ing[US]", v..z.."ing[UK]"}
else
args[1] = {v.."ed", v..z.."ed"}
args[2] = {v.."ed", v..z.."ed"}
args[3] = {v.."ing", v..z.."ing"}
end
end
local duplica
if find(args[1][1] or "", v..z.."ed") then
duplica = true
if not args[3][1] then
args[3][1] = v..z.."ing"
end
elseif find(args[1][1] or "", v.."ked") then
duplica = true
if not args[3][1] then
args[3][1] = v.."king"
end
end
args["pres3"] = args["pres3"][1] and args["pres3"] or args[4]
args["ger"] = args["ger"][1] and args["ger"] or args[3]
args["part"] = args["part"][1] and args["part"] or (args[2][1] and args[2] or args[1])
args["pret1"] = args["pret1"][1] and args["pret1"] or args[1]
args["pret2"] = args["pret2"][1] and args["pret2"] or args[1]
args["pret3"] = args["pret3"][1] and args["pret3"] or args[1]
args["pret4"] = args["pret4"][1] and args["pret4"] or args[1]
args["subj_pret1"] = args["subj_pret1"][1] and args["subj_pret1"] or args[1]
args["subj_pret2"] = args["subj_pret2"][1] and args["subj_pret2"] or args[1]
args["subj_pret3"] = args["subj_pret3"][1] and args["subj_pret3"] or args[1]
args["subj_pret4"] = args["subj_pret4"][1] and args["subj_pret4"] or args[1]
-- parche para be, para que sean más prácticas las locuciones
if v == "be" then
args["part"] = args["part"][1] and args["part"] or {"been"}
args["pres1"] = args["pres1"][1] and args["pres1"] or {"am"}
args["pres2"] = args["pres2"][1] and args["pres2"] or {"are"}
args["pres3"] = args["pres3"][1] and args["pres3"] or {"is"}
args["pres4"] = args["pres4"][1] and args["pres4"] or {"are"}
args["pret1"] = args["pret1"][1] and args["pret1"] or {"was"}
args["pret2"] = args["pret2"][1] and args["pret2"] or {"were"}
args["pret3"] = args["pret3"][1] and args["pret3"] or {"was"}
args["pret4"] = args["pret4"][1] and args["pret4"] or {"were"}
args["subj_pret1"] = args["subj_pret1"][1] and args["subj_pret1"] or {"were"}
args["subj_pret2"] = args["subj_pret2"][1] and args["subj_pret2"] or {"were"}
args["subj_pret3"] = args["subj_pret3"][1] and args["subj_pret3"] or {"was"}
args["subj_pret4"] = args["subj_pret4"][1] and args["subj_pret4"] or {"were"}
end
for forma, _ in pairs(formas) do
agregar_forma(conjugado, forma, v)
end
local resultante, es_irregular = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {}, tostr)
local pret3, part1 = resultante.pret3[1], resultante.part[1]
pret3 = pret3 or "―"
part1 = part1 or "―"
local impers = args["impersonal"]
local part = deepcopy(resultante.part)
local infinit = deepcopy(resultante.inf)
local fmtinfo = {adv=adv, resto=resto, resto_pl=resto_pl, impers=impers, tit=tit, v=v}
for form, _ in pairs(formas_no_personales) do
if args[form] == "-" or args[form] == "no" then
resultante[form..s] = {}
else
formatear_conjugacion(resultante, fmtinfo, form)
end
end
for form, _ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
if args[form] == "-" or args[form] == "no" then
resultante[form..s] = {}
else
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
end
for form, _ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
if args[form] == "-" or args[form] == "no" then
resultante[form..s] = {}
else
if form == "fut" or form == "cond" then
resultante[form..s] = infinit
else
resultante[form..s] = part
end
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
end
if args["imper"] ~= "no" and args["imper"] ~= "-" then
formatear_conjugacion(resultante, fmtinfo, "imper1")
formatear_conjugacion(resultante, fmtinfo, "imper2")
formatear_conjugacion(resultante, fmtinfo, "imper3")
formatear_conjugacion(resultante, fmtinfo, "imper4")
else
resultante["imper1"] = {}
resultante["imper2"] = {}
resultante["imper3"] = {}
resultante["imper4"] = {}
end
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, impers)
end)
local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper
if impers == "3" then
fila_pronombres_ind = {"", "(it)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(it)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(it)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(it)", color=COLOR_IMPER, header=true, class="pc"}
cs = 2
elseif impers == "36" then
fila_pronombres_ind = {"", "(it)", "(they)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(it)", "(they)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(it)", "(they)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(it)", "(they)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_ind = {"", "I", "you (thou)", "he, she, it", "we, you, they", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "I", "you", "he, she, it", "we, you, they", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "I", "you", "he, she, it", "we, you, they", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(you)", "―", "(we)", color=COLOR_IMPER, header=true, class="pc"}
cs = 5
mostrar_imper = true
end
cs1 = math.floor(cs / 2)
cs2 = cs - cs1
local t = {}
t[1] = {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true}
resultante.inf.colspan=cs-1
resultante.ger.colspan=cs-1
resultante.part.colspan=cs-1
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."4"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"]
end
t[5] = {{"Formas personales", colspan=cs}, color=COLOR_H, 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}, ic("pres")}
t[9] = {{"Pretérito", color=COLOR_IND, header=true}, ic("pret")}
t[10] = {{"Pretérito compuesto", color=COLOR_IND, header=true}, ic("pret_comp")}
t[11] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("pret_ant")}
t[12] = {{"Futuro", color=COLOR_IND, header=true}, ic("fut")}
t[13] = {{"Futuro compuesto", color=COLOR_IND, header=true}, ic("fut_comp")}
t[14] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true}
t[15] = fila_pronombres_cond
t[16] = {{"Condicional simple", color=COLOR_COND, header=true}, ic("cond")}
t[17] = {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("cond_comp")}
t[18] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true}
t[19] = fila_pronombres_subj
t[20] = {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")}
t[21] = {{"Pretérito", color=COLOR_SUBJ, header=true}, ic("subj_pret")}
t[22] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true}
t[23] = fila_pronombres_imper
if mostrar_imper then
t[24] = {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")}
else
t[24] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}}
end
t[25] = {{f("Leyenda: † arcaico, x no normativo, ~■~ 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[26] = {{args["nota"] and args["nota"] or "", colspan=cs}}
local cats = {}
if es_irregular then
insert(cats, "EN:Verbos irregulares")
else
insert(cats, "EN:Verbos regulares")
if duplica then
insert(cats, "EN:Verbos con duplicación de consonante final")
end
end
impers = impers or ""
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "EN:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "EN:Verbos terciopersonales")
end
if defectivo then
insert(cats, "EN:Verbos defectivos")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'' ("..f(pret3)..", "..f(part1)..")''' ".." ("..(es_irregular and "irregular" or "regular")..")",
t,
ns == 0 and cats or {}
)
end
return export
lr0vf3xk7ipqk509blb3lokgl4fuf55
Categoría:FR:Adjetivos invariables en género
14
1057416
6118156
6117324
2026-06-16T02:12:53Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:FR:Adjetivos invariantes en género]] a [[Categoría:FR:Adjetivos invariables en género]] sin dejar una redirección: obsoleta
5857028
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Categoría:PT:Adjetivos invariables en género
14
1057757
6118157
6117325
2026-06-16T02:12:59Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:PT:Adjetivos invariantes en género]] a [[Categoría:PT:Adjetivos invariables en género]] sin dejar una redirección: obsoleta
5858535
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Categoría:GL:Adjetivos invariables en género
14
1057758
6118153
6117321
2026-06-16T02:12:35Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:GL:Adjetivos invariantes en género]] a [[Categoría:GL:Adjetivos invariables en género]] sin dejar una redirección: obsoleta
5858537
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Categoría:CA:Adjetivos invariables en género
14
1057964
6118154
6117322
2026-06-16T02:12:41Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:CA:Adjetivos invariantes en género]] a [[Categoría:CA:Adjetivos invariables en género]] sin dejar una redirección: obsoleta
5859320
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Módulo:flex/sv
828
1058820
6118183
6077007
2026-06-16T02:18:47Z
TMCbot
164594
.
6118183
Scribunto
text/plain
-- Declinación para el sueco
-- Basado en el módulo de en.wikt
-- Autor: Tmagc
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local deepcopy = m_table.deepCopy
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local match = m_str.match
local split = m_str.split
local sub = m_str.sub
local len = m_str.len
local m_flex = require("Módulo:flex")
local parsear_arreglo = m_flex.parsear_arreglo
local sobreescribir_formas = m_flex.sobreescribir_formas
local desactivar_formas = m_flex.desactivar_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local agregar_enlaces = m_flex.agregar_enlaces
local formatear_formas = m_flex.formatear_formas
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local VOWEL = "[aeiouyåäö]"
local CONSONANT = "[bcdfghjklmnpqrstvwxz]"
local decl_noun = {}
decl_noun["c-ar"] = function(args)
local par1 = args["tit"]
local par2 = args[2]
local fv = args.fv or ""
par2 = (par2 or par1) .. fv
local s = "s"
if par1:find("[sxzSXZ]:?$") then
s = ""
end
local forms = {}
forms["indf_nom_sg"] = {par1}
forms["indf_gen_sg"] = {par1 .. s}
forms["defn_nom_sg"] = {par2 .. "en"}
forms["defn_gen_sg"] = {par2 .. "ens"}
forms["indf_nom_pl"] = {par2 .. "ar"}
forms["indf_gen_pl"] = {par2 .. "ars"}
forms["defn_nom_pl"] = {par2 .. "arna"}
forms["defn_gen_pl"] = {par2 .. "arnas"}
return forms
end
decl_noun["c-er"] = function(args)
local par1 = args["tit"]
local par2 = args[2]
local fv = args.fv or ""
local ien = args.ien
--local sg_nom_def = args["sg-nom-def"]
--local sg_gen_def = args["sg-gen-def"]
--if sg_nom_def or sg_gen_def then
-- track("manual")
--end
par2 = (par2 or par1) .. fv
local s = "s"
if par1:find("[sxzSXZ]:?$") then
s = ""
end
local forms = {}
forms["indf_nom_sg"] = {par1}
forms["indf_gen_sg"] = {par1 .. s}
forms["defn_nom_sg"] = {par2 .. "en"}
forms["defn_gen_sg"] = {par2 .. "ens"}
forms["indf_nom_pl"] = {par2 .. "er"}
forms["indf_gen_pl"] = {par2 .. "ers"}
forms["defn_nom_pl"] = {par2 .. "erna"}
forms["defn_gen_pl"] = {par2 .. "ernas"}
if ien then
insert(forms["defn_nom_sg"], 1, par2 .. "n")
insert(forms["defn_gen_sg"], 1, par2 .. "ns")
end
return forms
end
decl_noun["c-or"] = function(args)
local par1 = args["tit"]
if par1:sub(-1) == "a" then
par1 = par1:sub(1, -2)
else
error(("Infinitive '%s' doesn't end in -a"):format(par1))
end
local forms = {}
forms["indf_nom_sg"] = {par1 .. "a"}
forms["indf_gen_sg"] = {par1 .. "as"}
forms["defn_nom_sg"] = {par1 .. "an"}
forms["defn_gen_sg"] = {par1 .. "ans"}
forms["indf_nom_pl"] = {par1 .. "or"}
forms["indf_gen_pl"] = {par1 .. "ors"}
forms["defn_nom_pl"] = {par1 .. "orna"}
forms["defn_gen_pl"] = {par1 .. "ornas"}
return forms
end
decl_noun["c-r"] = function(args)
local par1 = args["tit"]
local par2 = args[2]
local par3 = args[3]
par2 = par2 or par1
par3 = par3 or par2 or par1
local s = "s"
if par1:find("[sxzSXZ]:?$") then
s = ""
end
local forms = {}
forms["indf_nom_sg"] = {par1}
forms["indf_gen_sg"] = {par1 .. s}
forms["defn_nom_sg"] = {par2 .. "n"}
forms["defn_gen_sg"] = {par2 .. "ns"}
forms["indf_nom_pl"] = {par3 .. "r"}
forms["indf_gen_pl"] = {par3 .. "rs"}
forms["defn_nom_pl"] = {par3 .. "rna"}
forms["defn_gen_pl"] = {par3 .. "rnas"}
return forms
end
decl_noun["c-irreg"] = function(args)
local par1 = args["tit"]
local par2 = args[2]
local par3 = args[3]
local par4 = args[4]
par2 = par2 or par1.."en"
par3 = par3 or par1
par4 = par4 or par3.."na" or par1.."na"
local s = "s"
if par1:find("[sxzSXZ]:?$") then
s = ""
end
local forms = {}
forms["indf_nom_sg"] = {par1}
forms["indf_gen_sg"] = {par1 .. s}
forms["defn_nom_sg"] = {par2}
forms["defn_gen_sg"] = {par2 .. "s"}
s = "s"
if par3:find("[sxzSXZ]:?$") then
s = ""
end
forms["indf_nom_pl"] = {par3}
forms["indf_gen_pl"] = {par3 .. s}
forms["defn_nom_pl"] = {par4}
forms["defn_gen_pl"] = {par4 .. "s"}
return forms
end
decl_noun["c-zero"] = function(args)
local par1 = args["tit"]
local par2 = args[2]
local par3 = args[3]
par2 = par2 or par1
par3 = par3 or par2 or par1
local s = "s"
if par1:find("[sxzSXZ]:?$") then
s = ""
end
local forms = {}
forms["indf_nom_sg"] = {par1}
forms["indf_gen_sg"] = {par1 .. s}
forms["defn_nom_sg"] = {par2 .. "n"}
forms["defn_gen_sg"] = {par2 .. "ns"}
forms["indf_nom_pl"] = {par1}
forms["indf_gen_pl"] = {par1 .. s}
forms["defn_nom_pl"] = {par3 .. "na"}
forms["defn_gen_pl"] = {par3 .. "nas"}
return forms
end
decl_noun["c-are"] = function(args)
local title_text = args["tit"]
if not title_text:sub(-3) == "are" then
error("The noun must end in -are.")
end
local forms = {}
forms["indf_nom_sg"] = {title_text}
forms["indf_gen_sg"] = {title_text .. "s"}
forms["defn_nom_sg"] = {title_text .. "n"}
forms["defn_gen_sg"] = {title_text .. "ns"}
forms["indf_nom_pl"] = {title_text}
forms["indf_gen_pl"] = {title_text .. "s"}
forms["defn_nom_pl"] = {title_text:sub(1, -2) .. "na"}
forms["defn_gen_pl"] = {title_text:sub(1, -2) .. "nas"}
return forms
end
decl_noun["c-nde"] = function(args)
local title_text = args["tit"]
if not title_text:sub(-3) == "nde" then
error("The noun must end in -nde.")
end
local forms = {}
forms["indf_nom_sg"] = {title_text}
forms["indf_gen_sg"] = {title_text .. "s"}
forms["defn_nom_sg"] = {title_text .. "n"}
forms["defn_gen_sg"] = {title_text .. "ns"}
forms["indf_nom_pl"] = {title_text}
forms["indf_gen_pl"] = {title_text .. "s"}
forms["defn_nom_pl"] = {title_text .. "na"}
forms["defn_gen_pl"] = {title_text .. "nas"}
return forms
end
decl_noun["n-n"] = function(args)
local par1 = args["tit"]
local par2 = args[2]
local par3 = args[3]
par2 = par2 or par1
par3 = par3 or par2 or par1
local s = "s"
if par1:find("[sxzSXZ]:?$") then
s = ""
end
local forms = {}
forms["indf_nom_sg"] = {par1}
forms["indf_gen_sg"] = {par1 .. s}
forms["defn_nom_sg"] = {par2 .. "t"}
forms["defn_gen_sg"] = {par2 .. "ts"}
forms["indf_nom_pl"] = {par3 .. "n"}
forms["indf_gen_pl"] = {par3 .. "ns"}
forms["defn_nom_pl"] = {par3 .. "na"}
forms["defn_gen_pl"] = {par3 .. "nas"}
return forms
end
decl_noun["n-r"] = function(args)
local par1 = args["tit"]
local par2 = args[2]
par2 = par2 or par1
local s = "s"
if par1:find("[sxzSXZ]:?$") then
s = ""
end
local forms = {}
forms["indf_nom_sg"] = {par1}
forms["indf_gen_sg"] = {par1 .. s}
forms["defn_nom_sg"] = {par2 .. "t"}
forms["defn_gen_sg"] = {par2 .. "ts"}
forms["indf_nom_pl"] = {par2 .. "r"}
forms["indf_gen_pl"] = {par2 .. "rs"}
forms["defn_nom_pl"] = {par2 .. "rna"}
forms["defn_gen_pl"] = {par2 .. "rnas"}
return forms
end
decl_noun["n-zero"] = function(args)
local par1 = args["tit"]
local par2 = args[2] or args.stem
local par3 = args[3]
par2 = par2 or par1
par3 = par3 or par2 or par1
local s = "s"
if par1:find("[sxzSXZ]:?$") then
s = ""
end
local forms = {}
forms["indf_nom_sg"] = {par1}
forms["indf_gen_sg"] = {par1 .. s}
forms["defn_nom_sg"] = {par2 .. "et"}
forms["defn_gen_sg"] = {par2 .. "ets"}
forms["indf_nom_pl"] = {par1}
forms["indf_gen_pl"] = {par1 .. s}
forms["defn_nom_pl"] = {par3 .. "en"}
forms["defn_gen_pl"] = {par3 .. "ens"}
return forms
end
decl_noun["n-irreg"] = function(args)
local par1 = args["tit"]
local par2 = args[2]
local par3 = args[3]
local par4 = args[4]
par2 = par2 or par1.."et"
par3 = par3 or par1
par4 = par4 or par3.."en" or par1.."en"
local s = "s"
if par1:find("[sxzSXZ]:?$") then
s = ""
end
local forms = {}
forms["indf_nom_sg"] = {par1}
forms["indf_gen_sg"] = {par1 .. s}
forms["defn_nom_sg"] = {par2}
forms["defn_gen_sg"] = {par2 .. "s"}
s = "s"
if par3:find("[sxzSXZ]:?$") then
s = ""
end
forms["indf_nom_pl"] = {par3}
forms["indf_gen_pl"] = {par3 .. s}
forms["defn_nom_pl"] = {par4}
forms["defn_gen_pl"] = {par4 .. "s"}
return forms
end
-- Functions that do the actual inflecting by creating the forms of a basic term.
local decl_adj = {}
decl_adj["reg"] = function(args)
local tit = args["tit"]
local n = args["n"] or args[2] or tit
local alt = args["alt"] or args[3] or tit
local forms = {}
forms["pos_indf_c_sg"] = {tit}
forms["pos_indf_n_sg"] = {find(n, "t$") and n or (n .. "t")}
forms["pos_indf_pl"] = {alt .. "a"}
forms["pos_indf_m_pl"] = {alt .. "e"}
forms["pos_defn_m_sg"] = {alt .. "e"}
forms["pos_defn_all"] = {alt .. "a"}
forms["comp_indf_c_sg"] = {alt .. "are"}
forms["comp_indf_n_sg"] = {alt .. "are"}
forms["comp_indf_pl"] = {alt .. "are"}
forms["comp_defn_m_sg"] = {alt .. "are"}
forms["comp_defn_all"] = {alt .. "are"}
forms["sup_indf_c_sg"] = {alt .. "ast"}
forms["sup_indf_n_sg"] = {alt .. "ast"}
forms["sup_indf_pl"] = {alt .. "ast"}
forms["sup_defn_m_sg"] = {alt .. "aste"}
forms["sup_defn_all"] = {alt .. "aste"}
return forms
end
decl_adj["abs"] = function(args)
local tit = args["tit"]
local n = args["n"] or args[2] or tit
local alt = args["alt"] or args[3] or tit
local forms = {}
forms["pos_indf_c_sg"] = {tit}
forms["pos_indf_n_sg"] = {find(n, "t$") and n or (n .. "t")}
forms["pos_indf_pl"] = {alt .. "a"}
forms["pos_indf_m_pl"] = {alt .. "e"}
forms["pos_defn_m_sg"] = {alt .. "e"}
forms["pos_defn_all"] = {alt .. "a"}
return forms
end
decl_adj["peri"] = function(args)
local tit = args["tit"]
local n = args["n"] or args[2] or tit
local alt = args["alt"] or args[3] or tit
local forms = {}
forms["pos_indf_c_sg"] = {tit}
forms["pos_indf_n_sg"] = {find(n, "t$") and n or (n .. "t")}
forms["pos_indf_pl"] = {alt .. "a"}
forms["pos_indf_m_pl"] = {alt .. "e"}
forms["pos_defn_m_sg"] = {alt .. "e"}
forms["pos_defn_all"] = {alt .. "a"}
forms["comp_indf_c_sg"] = {"mer " .. tit}
forms["comp_indf_n_sg"] = {"mer " .. (find(n, "t$") and n or (n .. "t"))}
forms["comp_indf_pl"] = {"mer " .. alt .. "a"}
forms["comp_defn_m_sg"] = {"mer " .. alt .. "e"}
forms["comp_defn_all"] = {"mer " .. alt .. "a"}
forms["sup_indf_c_sg"] = {"mest " .. tit}
forms["sup_indf_n_sg"] = {"mest " .. (find(n, "t$") and n or (n .. "t"))}
forms["sup_indf_pl"] = {"mest " .. alt .. "a"}
forms["sup_defn_m_sg"] = {"mest " .. alt .. "e"}
forms["sup_defn_all"] = {"mest " .. alt .. "a"}
return forms
end
decl_adj["inv"] = function(args)
local tit = args["tit"]
local forms = {}
forms["pos_indf_c_sg"] = {tit}
forms["pos_indf_n_sg"] = {tit}
forms["pos_indf_pl"] = {tit}
forms["pos_indf_m_pl"] = {tit}
forms["pos_defn_m_sg"] = {tit}
forms["pos_defn_all"] = {tit}
forms["comp_indf_c_sg"] = {"mer " .. tit}
forms["comp_indf_n_sg"] = {"mer " .. tit}
forms["comp_indf_pl"] = {"mer " .. tit}
forms["comp_defn_m_sg"] = {"mer " .. tit}
forms["comp_defn_all"] = {"mer " .. tit}
forms["sup_indf_c_sg"] = {"mest " .. tit}
forms["sup_indf_n_sg"] = {"mest " .. tit}
forms["sup_indf_pl"] = {"mest " .. tit}
forms["sup_defn_m_sg"] = {"mest " .. tit}
forms["sup_defn_all"] = {"mest " .. tit}
return forms
end
decl_adj["irreg"] = function(args)
local par1 = args["tit"] or args[2]; if par1 == "" then par1 = nil end
local par2 = args[3]; if par2 == "" then par2 = nil end
local par3 = args[4]; if par3 == "" then par3 = nil end
local par4 = args[5]; if par4 == "" then par4 = nil end
local par5 = args[6]; if par5 == "" then par5 = nil end
local par6 = args[7]; if par6 == "" then par6 = nil end
local par7 = args[8]; if par7 == "" then par7 = nil end
local par8 = args[9]; if par8 == "" then par8 = nil end
local par9 = args[10]; if par9 == "" then par9 = nil end
local a1 = split(par1, ";")
local a2 = split(par2, ";")
local a3 = split(par3, ";")
local a4 = split(par4, ";")
local a5 = split(par5, ";")
local a6 = split(par6, ";")
local a7 = split(par7, ";")
local a8 = split(par8, ";")
local a9 = split(par9, ";")
local forms = {}
forms["pos_indf_c_sg"] = deepcopy(a1)
forms["pos_indf_n_sg"] = deepcopy(a2)
forms["pos_indf_pl"] = deepcopy(a5)
forms["pos_indf_m_pl"] = deepcopy(a5)
forms["pos_defn_m_sg"] = deepcopy(a3)
forms["pos_defn_all"] = deepcopy(a4)
forms["comp_indf_c_sg"] = deepcopy(a6)
forms["comp_indf_n_sg"] = deepcopy(a6)
forms["comp_indf_pl"] = deepcopy(a6)
forms["comp_defn_m_sg"] = deepcopy(a6)
forms["comp_defn_all"] = deepcopy(a6)
forms["sup_indf_c_sg"] = deepcopy(a9)
forms["sup_indf_n_sg"] = deepcopy(a9)
forms["sup_indf_pl"] = deepcopy(a9)
forms["sup_defn_m_sg"] = deepcopy(a7)
forms["sup_defn_all"] = deepcopy(a8)
return forms
end
decl_adj["prespart"] = function(args)
local tit = args["tit"]
local forms = {}
forms["pos_indf_c_sg"] = {tit}
forms["pos_indf_n_sg"] = {tit}
forms["pos_indf_pl"] = {tit}
forms["pos_indf_m_pl"] = {tit}
forms["pos_defn_m_sg"] = {tit}
forms["pos_defn_all"] = {tit}
return forms
end
decl_adj["pastpart"] = function(args)
local par1 = args["tit"]
local par2 = args[2]
local par3 = args[3] or (par1 .. "e")
local par4 = args[4] or par3
local par5 = args[5] or par4
local enstem = args["enstem"]; if enstem == "" then enstem = nil end
local forms = {}
if enstem then
forms["pos_indf_c_sg"] = {enstem .. "en"}
forms["pos_indf_n_sg"] = {enstem .. "et"}
forms["pos_indf_pl"] = {enstem .. "na"}
forms["pos_indf_m_pl"] = {enstem .. "ne"}
forms["pos_defn_m_sg"] = {enstem .. "ne"}
forms["pos_defn_all"] = {enstem .. "na"}
else
forms["pos_indf_c_sg"] = {par1}
forms["pos_indf_n_sg"] = {par2}
forms["pos_indf_pl"] = {par5}
forms["pos_indf_m_pl"] = {par3}
forms["pos_defn_m_sg"] = {par3}
forms["pos_defn_all"] = {par4}
end
return forms
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
["tit"] = {},
["title"] = {alias_de="tit"},
["lemma"] = {alias_de="tit"},
["fv"] = {},
["ien"] = {},
["stem"] = {},
["num"]= {por_defecto="sgpl"},
["núm"]= {alias_de="num"},
["indf_nom_sg"] = {lista=true},
["indf_gen_sg"] = {lista=true},
["defn_nom_sg"] = {lista=true},
["defn_gen_sg"] = {lista=true},
["indf_nom_pl"] = {lista=true},
["indf_gen_pl"] = {lista=true},
["defn_nom_pl"] = {lista=true},
["defn_gen_pl"] = {lista=true},
["nota"] = {},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
assert(not find(title, " "), "locuciones no soportadas aún") -- REVISAR
if not args["tit"] then
args["tit"] = title
end
local cats = {}
local sg = find(args.num, "sg")
local pl = find(args.num, "pl")
local cb = decl_noun[args[1]]
assert(cb, "especifique uno de los siguientes valores en el primer parámetro: c-ar, c-er, c-or, c-r, c-zero, c-are, c-nde, n-n, n-r, n-zero")
local declinfo = cb(args)
local labels = {
["indf_nom_sg"] = "sg.",
["indf_gen_sg"] = "sg.",
["defn_nom_sg"] = "sg.",
["defn_gen_sg"] = "sg.",
["indf_nom_pl"] = "pl.",
["indf_gen_pl"] = "pl.",
["defn_nom_pl"] = "pl.",
["defn_gen_pl"] = "pl.",
}
local forms, irr = sobreescribir_formas(declinfo, args)
forms = desactivar_formas(forms,
function (form)
local xx = sub(form, -2)
return (xx == "sg" and not sg) or (xx == "pl" and not pl)
end
)
if not sg then
insert(cats, "SV:Sustantivos solo en plural")
end
if not pl then
insert(cats, "SV:Sustantivos solo en singular")
end
if irr then
insert(cats, "SV:Sustantivos irregulares")
end
forms = agregar_enlaces(forms, title)
forms = formatear_formas(forms, labels)
insert(cats, "SV:Sustantivos "..args[1])
local t = {}
insert(t, {{"Indefinido", colspan=3}, header=true, color=COLOR_H})
insert(t, {{""}, {"singular"}, {"plural"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Nominativo", header=true, color=COLOR_H}, forms["indf_nom_sg"], forms["indf_nom_pl"]})
insert(t, {{"Genitivo", header=true, color=COLOR_H}, forms["indf_gen_sg"], forms["indf_gen_pl"]})
insert(t, {{"Definido", colspan=3, header=true, color=COLOR_H}})
insert(t, {{""}, {"singular"}, {"plural"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Nominativo", header=true, color=COLOR_H}, forms["defn_nom_sg"], forms["defn_nom_pl"]})
insert(t, {{"Genitivo", header=true, color=COLOR_H}, forms["defn_gen_sg"], forms["defn_gen_pl"]})
insert(t, {{args["nota"] or "", colspan=3}})
return renderizar_tabla(
frame,
"'''Declinación de ''"..title.."'''''  tipo: "..args[1],
t,
ns == 0 and cats or {}
)
end
local normalizacion = {
["inc"] = "abs",
["partpres"] = "prespart",
["partpast"] = "pastpart",
["partpret"] = "pastpart",
["pretpart"] = "pastpart",
["irr"] = "irreg"
}
local c_to_cat = {
["reg"] = "regulares",
["abs"] = "incomparables",
["peri"] = "perifrásticos",
["inv"] = "invariables",
["prespart"] = "de participio presente",
["pastpart"] = "de participio pretérito",
["irreg"] = "irregulares"
}
local c_to_cat_sg = {
["reg"] = "regular",
["abs"] = "incomparable",
["peri"] = "perifrástico",
["inv"] = "invariable",
["prespart"] = "de participio presente",
["pastpart"] = "de participio pretérito",
["irreg"] = "irregular"
}
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
["tit"] = {},
["title"] = {alias_de="tit"},
["lemma"] = {alias_de="tit"},
["num"] = {},
["n"] = {},
["alt"] = {},
["enstem"] = {},
["en"] = {alias_de="enstem"},
["en-stem"] = {alias_de="enstem"},
["pos_indf_c_sg"] = {lista=true},
["pos_indf_n_sg"] = {lista=true},
["pos_indf_pl"] = {lista=true},
["pos_indf_m_pl"] = {lista=true},
["pos_defn_m_sg"] = {lista=true},
["pos_defn_all"] = {lista=true},
["pos_defn_otro"] = {alias_de="pos_defn_all"},
["pos_defn"] = {alias_de="pos_defn_all"},
["comp_indf_c_sg"] = {lista=true},
["comp_indf_n_sg"] = {lista=true},
["comp_indf_pl"] = {lista=true},
["comp_defn_m_sg"] = {lista=true},
["comp_defn_all"] = {lista=true},
["comp_defn_otro"] = {alias_de="comp_defn_all"},
["comp_defn"] = {alias_de="comp_defn_all"},
["sup_indf_c_sg"] = {lista=true},
["sup_indf_n_sg"] = {lista=true},
["sup_indf_pl"] = {lista=true},
["sup_defn_m_sg"] = {lista=true},
["sup_defn_all"] = {lista=true},
["sup_defn_otro"] = {alias_de="sup_defn_all"},
["sup_defn"] = {alias_de="sup_defn_all"},
["nota"] = {},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
assert(not find(title, " "), "locuciones no soportadas aún") -- REVISAR
if not args["tit"] then
args["tit"] = title
end
local x = normalizacion[args[1]]
if x then
args[1] = x
end
local cb = decl_adj[args[1]]
assert(cb, "especifique uno de los siguientes valores en el primer parámetro: reg, abs, peri, inv, prespart, pastpart, irreg")
local declinfo = cb(args)
local labels = {
["pos_indf_c_sg"] = "pos.",
["pos_indf_n_sg"] = "pos.",
["pos_indf_pl"] = "pos.",
["pos_indf_m_pl"] = "pos.",
["pos_defn_m_sg"] = "pos.",
["pos_defn_all"] = "pos.",
["comp_indf_c_sg"] = "comp.",
["comp_indf_n_sg"] = "comp.",
["comp_indf_pl"] = "comp.",
["comp_defn_m_sg"] = "comp.",
["comp_defn_all"] = "comp.",
["sup_indf_c_sg"] = "sup.",
["sup_indf_n_sg"] = "sup.",
["sup_indf_pl"] = "sup.",
["sup_defn_m_sg"] = "sup.",
["sup_defn_all"] = "sup.",
}
local forms = sobreescribir_formas(declinfo, args)
forms = agregar_enlaces(forms, title)
forms = formatear_formas(forms, labels)
local cats = {}
cats[1] = "SV:Adjetivos "..c_to_cat[args[1]]
local t = {}
insert(t, {{"Indefinido", colspan=4}, header=true, color=COLOR_H})
insert(t, {{""}, {"positivo"}, {"comparativo"}, {"superlativo"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"singular común", header=true, color=COLOR_H}, forms["pos_indf_c_sg"], forms["comp_indf_c_sg"], forms["sup_indf_c_sg"]})
insert(t, {{"singular neutro", header=true, color=COLOR_H}, forms["pos_indf_n_sg"], forms["comp_indf_n_sg"], forms["sup_indf_n_sg"]})
insert(t, {{"plural", header=true, color=COLOR_H}, forms["pos_indf_pl"], forms["comp_indf_pl"], forms["sup_indf_pl"]})
insert(t, {{"masculino plural", header=true, color=COLOR_H}, forms["pos_indf_m_pl"], forms["comp_indf_pl"], forms["sup_indf_pl"]})
insert(t, {{"Definido", colspan=4, header=true, color=COLOR_H}})
insert(t, {{""}, {"positivo"}, {"comparativo"}, {"superlativo"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"singular masculino", header=true, color=COLOR_H}, forms["pos_defn_m_sg"], forms["comp_defn_m_sg"], forms["sup_defn_m_sg"]})
insert(t, {{"otros", header=true, color=COLOR_H}, forms["pos_defn_all"], forms["comp_defn_all"], forms["sup_defn_all"]})
insert(t, {{args["nota"] or "", colspan=4}})
return renderizar_tabla(
frame,
"'''Declinación de ''"..title.."'''''  tipo: "..c_to_cat_sg[args[1]],
t,
ns == 0 and cats or {}
)
end
local weak_present_endings = {
["r"] = "",
["a"] = "r",
["vw"] = "r",
["fv"] = "ver",
["mm"] = "mer",
["nn"] = "ner"
}
local weak_past_endings = {
["t"] = "",
["d"] = "",
["s"] = "t",
["vl"] = "t",
["vw"] = "dd"
}
local weak_sup_endings = {
["t"] = "",
["vw"] = "tt"
}
local weak_part_endings = {
["vw"] = "ende"
}
local weak_prespasv_endings1 = {
["nn"] = "ns"
}
local weak_prespasv_endings2 = {
["fv"] = "ves",
["mm"] = "mes",
["nn"] = "nes"
}
local weak_subj_endings = {
["mm"] = "me",
["nn"] = "ne"
}
local weak_impp_endings = {
["vw"] = "n",
["fv"] = "ven",
["mm"] = "men",
["nn"] = "nen"
}
local strong_pres_endings = {
["r"] = "",
["vw"] = "r",
["fv"] = "ver",
["mm"] = "mer",
["nn"] = "ner"
}
local strong_sup_endings = {
["fv"] = "vit",
["mm"] = "mit",
["nn"] = "nit"
}
local strong_pastpart_endings = {
["fv"] = "ven",
["mm"] = "men",
["nn"] = "nen"
}
local strong_subj_endings = {
["vw"] = "",
["fv"] = "ve",
["mm"] = "me",
["nn"] = "ne"
}
local strong_impp_endings = {
["vw"] = "n",
["fv"] = "ven",
["mm"] = "men",
["nn"] = "nen"
}
local function get_final_vowel(stem)
return match(stem, ".*(" .. VOWEL .. ")")
end
local function try_detect_strong_class(pres, past, sup, endc)
local presv = get_final_vowel(pres)
local pastv = get_final_vowel(past)
local supv = get_final_vowel(sup)
if supv == "i" or supv == "ä" or supv == "e" then
if supv == "i" and pastv == "e" and presv == "i" then
return "1"
elseif (pastv == "a" or pastv == "å") and (presv == "e" or presv == "i" or presv == "ä") then
return "5"
end
elseif supv == "u" then
if pastv == "ö" and (presv == "u" or presv == "y") then
return "2"
elseif pastv == "a" then
if presv == "i" then
return "3"
elseif presv == "e" or presv == "ä" then
if pres:find(CONSONANT .. CONSONANT .. "$") then
return "3"
else
return "4"
end
end
end
elseif supv == "a" or supv == "å" then
if supv == "a" and pastv == "o" and presv == "a" then
return "6"
elseif (pastv == "ö" or pastv == "ä") and (presv == "å" or presv == "a") then
return "7"
end
end
return "?"
end
local function make_weak_present_form(stem, endc)
local result = {stem .. (weak_present_endings[endc] or "er")}
if endc == "dj" then
table.insert(result, stem .. "jer")
end
return result
end
local function make_weak_prespasv_form(stem, endc)
if endc == "s" then
return {stem .. "es"}
end
local result = {stem .. (weak_prespasv_endings1[endc] or "s")}
if endc ~= "vw" and endc ~= "a" then
table.insert(result, stem .. (weak_prespasv_endings2[endc] or "es"))
end
if endc == "dj" then
table.insert(result, stem .. "jes")
end
return result
end
local function make_strong_prespasv_form(stem, endc)
if endc == "s" then
return {stem .. "es"}
end
local result = {stem .. (weak_prespasv_endings1[endc] or "s")}
if endc ~= "vw" and endc ~= "a" then
insert(result, stem .. (weak_prespasv_endings2[endc] or "es"))
end
if endc == "dj" then
insert(result, stem .. "jes")
end
return result
end
local function make_strong_ppl_stem(class, endc, past, sup)
local base
if class == "3" or class == "4" then
base = sup
else
base = past
end
if endc == "mm" then
base = base .. "m"
elseif endc == "nn" then
base = base .. "n"
end
return base
end
local function make_passive(forms)
local pasv = {}
if type(forms) == "string" then
forms = {forms}
end
for i, subform in ipairs(forms) do
insert(pasv, subform .. "s")
end
return pasv
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {},
[3] = {},
[4] = {},
["nop"] = {tipo="bool"},
["tipo"] = {por_defecto="s"},
["type"] = {alias_de="tipo"},
["tit"] = {},
["title"] = {alias_de="tit"},
["lemma"] = {alias_de="tit"},
["end"] = {},
["class"] = {},
["clase"] = {alias_de="class"},
["full"] = {},
["ppl"] = {},
["part"] = {lista=true},
["part_pres"] = {lista=true},
["sup"] = {lista=true},
["ind_pres"] = {lista=true},
["ind_pret"] = {lista=true},
["ind_pres_pl"] = {lista=true},
["ind_pret_pl"] = {lista=true},
["subj_pres"] = {lista=true},
["subj_pret"] = {lista=true},
["imper"] = {lista=true},
["imper_pl"] = {lista=true},
["inf_pas"] = {lista=true},
["sup_pas"] = {lista=true},
["ind_pres_pas"] = {lista=true},
["ind_pret_pas"] = {lista=true},
["ind_pres_pl_pas"] = {lista=true},
["ind_pret_pl_pas"] = {lista=true},
["subj_pres_pas"] = {lista=true},
["subj_pret_pas"] = {lista=true},
["imper_pas"] = {lista=true},
["imper_pl_pas"] = {lista=true},
["nota"] = {},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
assert(not find(title, " "), "locuciones no soportadas aún") -- REVISAR
if not args["tit"] then
args["tit"] = title
end
local fuerte = find(args["tipo"], "f")
local v = args["tit"]
local nop = args["nop"]
local cats = {}
local enc
local forms = {}
forms.inf = v
local head = v
-- remove passive final -s to make forms correct
if head:find("s$") and args["noa"] then
head = sub(head, 1, len(head) - 1)
end
if fuerte then
local endc = args["end"] or ""
local pres = args[1] or error("At least 3 arguments required for strong verb inflections (missing present stem)")
local past = args[2] or error("At least 3 arguments required for strong verb inflections (missing past stem)")
local sup = args[3]
-- it's fine to not specify the supine stem if supine and pp forms are manually given
if not sup and (not args["sup"] or not (args["pp"] or args["nopp"])) then
error("At least 3 arguments required for strong verb inflections (missing supine stem; alternatively specify supine and past participle forms manually)")
elseif not sup then
sup = sub(args["sup"], 1, len(args["sup"]) - 1)
end
local class = args["class"] or try_detect_strong_class(pres, past, sup, endc)
local full = args["full"] or (head .. (endc == "vw" and "e" or ""))
local ppl = args["ppl"] or make_strong_ppl_stem(class, endc, past, sup)
if class == "5" then -- for class 5, replace final -a- with -å- in plural/subjunctive stem
ppl = gsub(ppl, "(.*)a(.*)", "%1å%2")
end
if endc == "fv" and ppl:find("f$") then
ppl = ppl .. "v"
end
forms.sup = sup .. (strong_sup_endings[endc] or "it")
forms.part_pres = full .. "nde"
forms.part = sup .. (strong_pastpart_endings[endc] or "en")
forms.ind_pres = pres .. (strong_pres_endings[endc] or "er")
forms.ind_pret = past
forms.ind_pres_pl = v
forms.ind_pret_pl = ppl .. "o"
forms.subj_pres = pres .. (strong_subj_endings[endc] or "e")
forms.subj_pret = ppl .. "e"
forms.imper = pres
forms.imper_pl = pres .. (strong_impp_endings[endc] or "en")
forms.inf_pas = make_passive(forms.inf)
forms.ind_pres_pas = make_strong_prespasv_form(pres, endc)
forms.ind_pret_pas = make_passive(forms.ind_pret)
forms.sup_pas = make_passive(forms.sup)
forms.imper_pas = make_passive(forms.imper)
forms.imper_pl_pas = make_passive(forms.imper_pl)
forms.ind_pres_pl_pas = make_passive(forms.ind_pres_pl)
forms.ind_pret_pl_pas = make_passive(forms.ind_pret_pl)
forms.subj_pres_pas = make_passive(forms.subj_pres)
forms.subj_pret_pas = make_passive(forms.subj_pret)
enc = "fuerte, irregular"
insert(cats, "SV:Verbos fuertes")
insert(cats, "SV:Verbos irregulares")
if class then
insert(cats, "SV:Verbos fuertes clase "..class)
end
else
local basic = args[1] or head
local past = args[2] or basic
local full = args["full"] or head
local endc = args["end"] or (args[1] and "" or "a")
local bare = basic
local vowelstem = find(basic, VOWEL .. "$")
if endc == "a" then
bare = sub(bare, 1, len(bare) - 1)
vowelstem = false
end
forms.sup = past .. (weak_sup_endings[endc] or "t")
forms.part_pres = full .. (not args["full"] and weak_part_endings[endc] or "nde")
forms.part = past .. (weak_past_endings[endc] or "d")
forms.ind_pres = make_weak_present_form(basic, endc)
forms.ind_pret = past .. (weak_past_endings[endc] or "d") .. "e"
forms.ind_pres_pl = v
forms.ind_pret_pl = past .. (weak_past_endings[endc] or "d") .. "e"
forms.subj_pres = vowelstem and v or bare .. (weak_subj_endings[endc] or "e")
forms.subj_pret = past .. (weak_past_endings[endc] or "d") .. "e"
forms.imper = basic .. ((endc == "nn") and "n" or "")
forms.imper_pl = bare .. (weak_impp_endings[endc] or "en")
forms.inf_pas = make_passive(forms.inf)
forms.ind_pres_pas = make_weak_prespasv_form(basic, endc)
forms.ind_pret_pas = make_passive(forms.ind_pret)
forms.sup_pas = make_passive(forms.sup)
forms.imper_pas = make_passive(forms.imper)
forms.imper_pl_pas = make_passive(forms.imper_pl)
forms.ind_pres_pl_pas = forms.inf_pas
forms.ind_pret_pl_pas = forms.ind_pret_pas
forms.subj_pres_pas = make_passive(forms.subj_pres)
forms.subj_pret_pas = forms.ind_pret_pas
insert(cats, "SV:Verbos débiles")
end
local res, irr = sobreescribir_formas(forms, args)
res = desactivar_formas(res,
function (form)
local xxx = sub(form, -3)
return (xxx == "pas" and nop)
end
)
comprobar_defectivo(res)
if not fuerte then
if irr then
enc = "débil, irregular"
insert(cats, "SV:Verbos irregulares")
else
enc = "débil, regular"
insert(cats, "SV:Verbos regulares")
end
end
local labels = {
--["inf"] = "",
["part"] = "part. pret.",
["part_pres"] = "part. pres.",
["sup"] = "sup.",
["inf_pas"] = "pas. sg.",
["sup_pas"] = "pas. sg.",
["ind_pres"] = "act. sg.",
["ind_pret"] = "act. sg.",
["ind_pres_pl"] = "act. pl.",
["ind_pret_pl"] = "act. pl.",
["ind_pres_pas"] = "pas. sg.",
["ind_pret_pas"] = "pas. sg.",
["ind_pres_pl_pas"] = "pas. pl.",
["ind_pret_pl_pas"] = "pas. pl.",
["subj_pres"] = "act.",
["subj_pret"] = "act.",
["subj_pres_pas"] = "pas.",
["subj_pret_pas"] = "pas.",
["imper"] = "act. sg.",
["imper_pl"] = "act. pl.",
["imper_pas"] = "pas. sg.",
["imper_pl_pas"] = "pas. pl.",
}
res = agregar_enlaces(res, title)
res = formatear_formas(res, labels)
res.inf.colspan = 2
res.inf_pas.colspan = 2
res.part.colspan = 2
res.part_pres.colspan = 2
res.sup.colspan = 2
res.sup_pas.colspan = 2
res.subj_pres.colspan = 2
res.subj_pres_pas.colspan = 2
res.subj_pret.colspan = 2
res.subj_pret_pas.colspan = 2
local t = {}
insert(t, {{"Formas no personales", colspan=5}, header=true, color=COLOR_H})
insert(t, {{""}, {"Activo", colspan=2}, {"Pasivo", colspan=2}, header=true, color=COLOR_H, class = "pc"})
insert(t, {{"Infinitivo", header=true, color=COLOR_NP}, res["inf"], res["inf_pas"]})
insert(t, {{"Participio pretérito", header=true, color=COLOR_NP}, res["part"], {colspan=2}})
insert(t, {{"Participio presente", header=true, color=COLOR_NP}, res["part_pres"], {colspan=2}})
insert(t, {{"Supino", header=true, color=COLOR_NP}, res["sup"], res["sup_pas"]})
insert(t, {{"Formas personales", colspan=5, header=true, color=COLOR_H}})
insert(t, {{""}, {"Activo singular"}, {"Activo plural"}, {"Pasivo singular"}, {"Pasivo plural"}, header=true, color=COLOR_H, class = "pc"})
insert(t, {{"Presente indicativo", header=true, color=COLOR_IND}, res["ind_pres"], res["ind_pres_pl"], res["ind_pres_pas"], res["ind_pres_pl_pas"]})
insert(t, {{"Pretérito indicativo", header=true, color=COLOR_IND}, res["ind_pret"], res["ind_pret_pl"], res["ind_pret_pas"], res["ind_pret_pl_pas"]})
insert(t, {{"Presente subjuntivo", header=true, color=COLOR_SUBJ}, res["subj_pres"], res["subj_pres_pas"]})
insert(t, {{"Pretérito subjuntivo", header=true, color=COLOR_SUBJ}, res["subj_pret"], res["subj_pret_pas"]})
insert(t, {{"Imperativo", header=true, color=COLOR_IMPER}, res["imper"], res["imper_pl"], res["imper_pas"], res["imper_pl_pas"]})
insert(t, {{args["nota"] or "", colspan=5}})
return renderizar_tabla(
frame,
"'''Declinación de ''"..title.."'''''  tipo: "..enc,
t,
ns == 0 and cats or {}
)
end
return export
cqrrb1wxso4cd6frhcfqljoary85nbq
Módulo:flex/eo
828
1059240
6118169
6076986
2026-06-16T02:18:16Z
TMCbot
164594
.
6118169
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 find = m_str.find
local match = m_str.match
local sub = m_str.sub
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local agregar_enlaces = m_flex.agregar_enlaces
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local LETRA = "%S"
local ESPACIO = "%s"
local guion = "%-"
function export.flexionar_palabra(p)
if find(p, "^[aeiou]$") or find(p, "^[bcĉdfgĝhĥjĵklmnprsŝtŭvz]o$") then
return {s={p}, p={p.."~-oj~"}, acc={p.."~-on~"}, accp={p.."~-ojn~"}}
end
return {s={p}, p={p.."~j~"}, acc={p.."~n~"}, accp={p.."~jn~"}}
end
local function flexion_sust_adj(palabras, copulativa)
local a, separador, b = match(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)
local flex2 = copulativa and export.flexionar_palabra(b) or {s={b}, p={b}, acc={b}, accp={b}}
local flex = combinar_copulativa(flex1, flex2, separador)
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto = match(palabras, "^("..guion.."?"..LETRA.."+)(.-)$")
local flex = export.flexionar_palabra(p)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
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_ = flexion_sust_adj(title, cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.acc[1] and not flex.accp[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
flex.p = {}
flex.accp = {}
elseif modo and sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
flex.p = {}
flex.accp = {}
elseif find(title, LETRA..ESPACIO..LETRA) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.s[1]),
enc,
args["n"],
{{"plural", flex.p},
{"acusativo", flex.acc},
{"acusativo plural", flex.accp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de = "p"},
[3] = {alias_de = "acc"},
[4] = {alias_de = "accp"},
["alt"] = {},
["s"] = {lista = true},
["p"] = {lista = true},
["nomp"] = {alias_de = "p"},
["acc"] = {lista = true},
["accs"] = {alias_de = "acc"},
["accp"] = {lista = true},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "EO:Locuciones sustantivas" or "EO:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de = "p"},
[3] = {alias_de = "acc"},
[4] = {alias_de = "accp"},
["alt"] = {},
["s"] = {lista = true},
["p"] = {lista = true},
["nomp"] = {alias_de = "p"},
["acc"] = {lista = true},
["accs"] = {alias_de = "acc"},
["accp"] = {lista = true},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "EO:Locuciones adjetivas" or "EO:Adjetivos")
end
local formas = {
inf = "i",
imper = "u",
cond = "us",
pers = "s",
part_pas = "ta",
part_act = "nta",
part_nom_pas = "to",
part_nom_act = "nto",
part_adv_pas = "te",
part_adv_act = "nte",
}
local formas_con_tiempo = {
pers = true,
part_pas = true,
part_act = true,
part_nom_pas = true,
part_nom_act = true,
part_adv_pas = true,
part_adv_act = true,
}
local formas_con_flexion = {
part_pas = true,
part_act = true,
part_nom_pas = true,
part_nom_act = true,
}
local tiempos = {
pres = "a",
pret = "i",
fut = "o",
}
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
tr = {tipo="bool"},
transitivo = {alias_de="tr"},
nota = {}
}
local v = title
if find(v, ESPACIO) then
error("Locuciones no implementadas aún")
end
local r = match(v, "^(.*)i$")
assert(r, "Forma canónica no reconocida")
local conjugado = {}
for forma, sufijo in pairs(formas) do
if formas_con_tiempo[forma] then
for tiempo, infijo in pairs(tiempos) do
conjugado[forma.."_"..tiempo] = {r..infijo..sufijo}
params[forma.."_"..tiempo] = {tipo=parsear_arreglo, por_defecto={}}
if formas_con_flexion[forma] then
conjugado[forma.."_"..tiempo][2] = r..infijo..sufijo.."j"
conjugado[forma.."_"..tiempo][3] = r..infijo..sufijo.."n"
conjugado[forma.."_"..tiempo][4] = r..infijo..sufijo.."jn"
end
end
else
conjugado[forma] = {r..sufijo}
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
end
end
local args = require("Módulo:parámetros").obtener_parametros(frame:getParent().args, params)
local res, irr = sobreescribir_formas(conjugado, args)
local def = comprobar_defectivo(res, {}, {})
res = agregar_enlaces(res, title)
res = formatear_formas(res, function (x)
if x:find("pres") then
return "pres."
end
if x:find("pret") then
return "pret."
end
if x:find("fut") then
return "fut."
end
return nil
end)
res.inf.colspan = 3
res.cond.colspan = 3
res.imper.colspan = 3
local t = {}
insert(t, {{"Infinitivo", header=true, color=COLOR_H}, res.inf})
insert(t, {{"Condicional", header=true, color=COLOR_H}, res.cond})
insert(t, {{"Imperativo", header=true, color=COLOR_H}, res.imper})
insert(t, {{""}, {"Presente"}, {"Pretérito"}, {"Futuro"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Personal", header=true, color=COLOR_H}, res.pers_pres, res.pers_pret, res.pers_fut})
insert(t, {{"Part. activo", header=true, color=COLOR_H}, res.part_act_pres, res.part_act_pret, res.part_act_fut})
insert(t, {{"Part. activo nominal", header=true, color=COLOR_H}, res.part_nom_act_pres, res.part_nom_act_pret, res.part_nom_act_fut})
insert(t, {{"Part. activo adverbial", header=true, color=COLOR_H}, res.part_adv_act_pres, res.part_adv_act_pret, res.part_adv_act_fut})
if args.tr then
insert(t, {{"Part. pasivo", header=true, color=COLOR_H}, res.part_pas_pres, res.part_pas_pret, res.part_pas_fut})
insert(t, {{"Part. pasivo nominal", header=true, color=COLOR_H}, res.part_nom_pas_pres, res.part_nom_pas_pret, res.part_nom_pas_fut})
insert(t, {{"Part. pasivo adverbial", header=true, color=COLOR_H}, res.part_adv_pas_pres, res.part_adv_pas_pret, res.part_adv_pas_fut})
end
insert(t, {{args.nota or "", colspan=4}})
local cats = {}
if irr then
insert(cats, "EO:Verbos irregulares")
end
if def then
insert(cats, "EO:Verbos defectivos")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..title.."'''''  ("..(irr and "irregular" or "regular")..")",
t,
ns == 0 and cats or {})
end
return export
dard0f1toh9q4kben389polvpdc7ktr
Módulo:flex/ro
828
1059290
6118089
6077004
2026-06-15T21:01:10Z
26agcp
138617
vista móvil
6118089
Scribunto
text/plain
-- Flexión para el rumano
-- Reciclado de en.wikt por Tmagc
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local sort = table.sort
local min = math.min
local max = math.max
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local len = m_str.len
local sub = m_str.sub
local split = m_str.split
local tsub = function(t, i, j)
local res = deepcopy(t)
if type(res) == "string" then
res = {res}
end
for k, form in ipairs(res) do
res[k] = sub(form, i, j)
end
return res
end
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local desactivar_formas = m_flex.desactivar_formas
local agregar_enlaces = m_flex.agregar_enlaces
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local vocal = "aăâeêĕiîĭoôŏuûŭyAĂÂEĔÊIĬÎOŎÔUŬÛY"
local vowels = vocal
local espacios = "%-‐%s"
local guion = "%-"
local VOCAL = "["..vocal.."]"
local CONS = "[^"..vocal..espacios.."]"
local ESPACIO = "["..espacios.."]"
local LETRA = "[^"..espacios.."]"
local adj_lb = {
na_indef_sg_m = "m./n. sg.",
na_indef_sg_f = "f. sg.",
na_indef_pl_m = "m./n. pl.",
na_indef_pl_f = "f. pl.",
na_def_sg_m = "m./n. sg.",
na_def_sg_f = "f. sg.",
na_def_pl_m = "m./n. pl.",
na_def_pl_f = "f. pl.",
gd_indef_sg_m = "m. sg.",
gd_indef_sg_f = "f./n. sg.",
gd_indef_pl_m = "m. pl.",
gd_indef_pl_f = "f./n. pl.",
gd_def_sg_m = "m. sg.",
gd_def_sg_f = "f./n. sg.",
gd_def_pl_m = "m. pl.",
gd_def_pl_f = "f./n. pl.",
}
local sust_lb = {
na_indef_sg = "sg.",
na_indef_pl = "pl.",
na_def_sg = "sg.",
na_def_pl = "pl.",
gd_indef_sg = "sg.",
gd_indef_pl = "pl.",
gd_def_sg = "sg.",
gd_def_pl = "pl.",
voc_sg = "sg.",
voc_pl = "pl."
}
local consonants = {
i = {
str = 'ștr';
st = 'șt';
sc = 'șt';
d = 'z';
s = 'ș';
t = 'ț';
x = 'cș';
},
e = {
sc = 'șt';
}
}
-- these adjectives have different defaults
local endings = {
{pattern = "([stz])or$", fs = "%1oare", mp = "%1ori", fp = "%1oare"},
{pattern = "os$", fs = "oasă", mp = "oși", fp = "oase"},
{pattern = "iesc$", fs = "iască", mp = "iești", fp = "iești"},
{pattern = "esc$", fs = "ească", mp = "ești", fp = "ești"},
{pattern = "([iy])an$", fs = "%1ană", mp = "%1eni", fp = "%1ene"},
{pattern = "ean$", fs = "eană", mp = "eni", fp = "ene"},
{pattern = "eț$", fs = "eață", mp = "eți", fp = "ețe"},
{pattern = "iu$", fs = "ie", mp = "ii", fp = "ii"},
}
local function make_na_def_sg(word, gender)
local definite
if gender == "m" or gender == "n" then
if find(word, "u$") then
definite = word .. "l"
elseif find(word, "e$") then
definite = word .. "le"
else
definite = word .. "ul"
end
elseif gender == "f" then
if find(word, "ă$") then
definite = gsub(word, "ă$", "a")
elseif find(word, "[aeiouăâî]ie") then
definite = gsub(word, "e$", "a")
elseif find(word, "ie$") then
definite = gsub(word, "e$", "a")
elseif find(word, "e$") then
definite = word .. "a"
elseif find(word, "a$") then
definite = word .. "ua"
end
else
error("Invalid or missing gender")
end
return definite
end
local function make_na_indef_sg_f(word)
local f
if find(word, "e$") then
f = word
elseif find(word, "[aăâiîeou]i$") then
f = word .. "e"
elseif find(word, "iu$") then
f = gsub(word, "u$", "e")
elseif find(word, "u$") then
f = sub(word, 1, -2) .. "ă"
elseif find(word, "[cg]h?i$") then
f = sub(word, 1, -2) .. "e"
elseif find(word, "[^aioăâî]$") then
f = word .. "ă"
else
error("Feminine of \"" .. word .. "\" could not be generated automatically")
end
if f then
f = gsub(f, "([âei])ă$", "%1e")
end
return f
end
local function split_stem(word)
local stem, cons
stem, cons = match(word, '^(.-[aeiouăâî])([iu])$')
if cons then
return stem, cons
end
stem, cons = match(word, '^(.-[aeiouăâî]-)([bcdfghj-np-tv-zșț]-)$')
return stem, cons
end
local function find_cons(cons, mode)
for i = -3, -1 do
if consonants[mode][sub(cons, i)] and not match(sub(cons, 1, i-1), "^[șj]$") then
cons = sub(cons, 1, i-1) .. consonants[mode][sub(cons, i)]
break
end
end
return cons
end
local function adj_make_na_indef_pl(word, g)
local pl
local suf1, suf2, pre1 = sub(word, -1), sub(word, -2), sub(word, 1, -2)
if g == 'm' then
if suf1 == 'i' then
pl = word
else
local stem, cons = split_stem(match(word, '^(.-)[eu]?$'))
cons = find_cons(cons, 'i')
pl = stem .. cons .. 'i'
end
elseif g == 'f' then
if suf1 == 'a' then
if suf2 == 'ea' then
pl = pre1 .. 'le'
elseif suf2 == 'ia' then
pl = pre1 .. 'ele'
else
pl = word .. 'le'
end
else
if suf1 == 'e' then
pl = word
elseif suf1 == 'ă' then
local stem, cons = split_stem(match(word, '^(.-)ă$'))
cons = find_cons(cons, 'e')
pl = stem .. cons .. 'e'
end
end
end
return pl
end
local function noun_make_na_indef_pl(word, g)
local pl
local suf1, suf2, pre1 = sub(word, -1), sub(word, -2), sub(word, 1, -2)
local suf4 = sub(word, -4)
if g == 'm' then
if suf1 == 'i' then
pl = word
else
local stem, cons = split_stem(match(word, '^(.-)[eu]?$'))
cons = find_cons(cons, 'i')
pl = stem .. cons .. 'i'
end
elseif g == 'f' then
if suf4 == "tate" then
pl = sub(word, 1, -5).."tăți"
elseif suf1 == 'a' then
if suf2 == 'ea' then -- revisar: existe este sufijo en sustantivos tmb?
pl = pre1 .. 'le'
elseif suf2 == 'ia' then -- revisar: existe este sufijo en sustantivos tmb?
pl = pre1 .. 'ele'
elseif suf2 == "ie" then
pl = pre1
else
pl = word .. 'le' -- revisar: existe este sufijo en sustantivos tmb?
end
else
if suf1 == 'e' then
pl = pre1..'i'
elseif suf1 == 'ă' then
local stem, cons = split_stem(match(word, '^(.-)ă$'))
cons = find_cons(cons, 'e')
pl = stem .. cons .. 'e'
end
end
elseif g == 'n' then
pl = find(word, "e$") and word or word.."e"
end
assert(pl)
return pl
end
local form_names = {
"na_indef_sg_m",
"na_indef_sg_f",
"na_indef_pl_m",
"na_indef_pl_f",
"na_def_sg_m",
"na_def_sg_f",
"na_def_pl_m",
"na_def_pl_f",
"gd_indef_sg_m",
"gd_indef_sg_f",
"gd_indef_pl_m",
"gd_indef_pl_f",
"gd_def_sg_m",
"gd_def_sg_f",
"gd_def_pl_m",
"gd_def_pl_f",
}
local function fun(arr, f)
if type(arr) == "string" then
return f(arr)
end
local arr2 = {}
for _,a in ipairs(arr) do
insert(arr2, f(a))
end
return arr2
end
local function decl_adj(p, imode, det, fs, mp, fp)
local flex = {}
flex.na_indef_sg_m = p
if #fs > 0 then
flex.na_indef_sg_f = fs
end
if #mp > 0 then
flex.na_indef_pl_m = mp
end
if #fp > 0 then
flex.na_indef_pl_f = fp
end
for _,info in ipairs(endings) do
if find(p, info.pattern) then
flex.na_indef_sg_f = flex.na_indef_sg_f or gsub(p, info.pattern, info.fs)
flex.na_indef_pl_m = flex.na_indef_pl_m or gsub(p, info.pattern, info.mp)
flex.na_indef_pl_f = flex.na_indef_pl_f or gsub(p, info.pattern, info.fp)
break
end
end
flex.na_indef_sg_f = flex.na_indef_sg_f or make_na_indef_sg_f(p)
flex.na_indef_pl_m = flex.na_indef_pl_m or adj_make_na_indef_pl(p, "m")
flex.na_indef_pl_f = flex.na_indef_pl_f or (imode and flex.na_indef_pl_m or adj_make_na_indef_pl(type(flex.na_indef_sg_f) == "table" and flex.na_indef_sg_f[1] or flex.na_indef_sg_f, "f"))
if det then
flex.gd_indef_sg_m = match(p, "^(.*)[eu]?$").."ui"
flex.gd_indef_sg_f = match(p, "^(.*)[eu]?$").."ei"
flex.gd_indef_pl_m = match(p, "^(.*)[eu]?$").."or"
flex.gd_indef_pl_f = flex.gd_indef_pl_m
flex.na_def_sg_m = {}
flex.na_def_sg_f = {}
flex.na_def_pl_m = {}
flex.na_def_pl_f = {}
flex.gd_def_sg_m = {}
flex.gd_def_sg_f = {}
flex.gd_def_pl_m = {}
flex.gd_def_pl_f = {}
else
flex.gd_indef_sg_m = flex.na_indef_sg_m
flex.gd_indef_sg_f = flex.na_indef_pl_f
flex.gd_indef_pl_m = flex.na_indef_pl_m
flex.gd_indef_pl_f = flex.na_indef_pl_f
flex.na_def_sg_m = make_na_def_sg(p, "m")
flex.na_def_sg_f = fun(flex.na_indef_sg_f, function (x)
return make_na_def_sg(x, "f")
end)
flex.na_def_pl_m = fun(flex.na_indef_pl_m, function (x)
return x.."i"
end)
flex.na_def_pl_f = fun(flex.na_indef_pl_f, function (x)
return x.."le"
end)
flex.gd_def_sg_m = fun(flex.na_def_sg_m, function (x)
return find(x, "e$") and sub(x, 1, -2).."ui" or x.."ui"
end)
if type(flex.na_indef_sg_f) == "string" then
flex.na_indef_sg_f = {flex.na_indef_sg_f}
end
if type(flex.na_indef_pl_f) == "string" then
flex.na_indef_pl_f = {flex.na_indef_pl_f}
end
flex.gd_def_sg_f = {}
for i=1, min(#flex.na_indef_sg_f, #flex.na_indef_pl_f) do
insert_if_not(flex.gd_def_sg_f, find(flex.na_indef_pl_f[i], "[^aăâeiîou]ii$") and flex.na_indef_sg_f[i].."i" or flex.na_indef_pl_f[i].."i")
end
flex.gd_def_pl_m = fun(flex.na_indef_pl_m, function (x)
return x.."lor"
end)
flex.gd_def_pl_f = fun(flex.na_indef_pl_f, function (x)
return x.."lor"
end)
end
return flex
end
local function decl_sust(p, g, pl)
local flex = {}
flex.na_indef_sg = p
flex.na_indef_pl = #pl > 0 and pl or noun_make_na_indef_pl(p, g)
if g == "m" or g == "n" then
flex.gd_indef_sg = flex.na_indef_sg
flex.gd_indef_pl = flex.na_indef_pl
else
flex.gd_indef_sg = flex.na_indef_pl
flex.gd_indef_pl = flex.na_indef_pl
end
flex.na_def_sg = make_na_def_sg(p, g)
if g == "m" then
flex.na_def_pl = fun(flex.na_indef_pl, function (x)
return x.."i"
end)
else
flex.na_def_pl = fun(flex.na_indef_pl, function (x)
return x.."le"
end)
end
if g == "m" or g == "n" then
flex.gd_def_sg = fun(flex.na_def_sg, function (x)
return find(x, "e$") and sub(x, 1, -2).."ui" or x.."ui"
end)
else
if type(flex.na_indef_sg) == "string" then
flex.na_indef_sg = {flex.na_indef_sg}
end
if type(flex.na_indef_pl) == "string" then
flex.na_indef_pl = {flex.na_indef_pl}
end
flex.gd_def_sg = {}
for i=1, min(#flex.na_indef_sg, #flex.na_indef_pl) do
insert_if_not(flex.gd_def_sg, find(flex.na_indef_pl[i], "[^aăâeiîou]ii$") and flex.na_indef_sg[i].."i" or flex.na_indef_pl[i].."i")
end
end
flex.gd_def_pl = fun(flex.na_indef_pl, function (x)
return x.."lor"
end)
if g == "m" or g == "n" then
flex.voc_sg = find(p, "e$") and {p} or (find(p, "u$") and {p.."le"} or {p.."ule"})
else
if find(p, "ie$") then
flex.voc_sg = {p, gsub1(p, "e$", "o")}
elseif find(p, "ă$") then
flex.voc_sg = {p, gsub1(p, "ă$", "o")}
elseif find(p, "a$") then
flex.voc_sg = {p}
else
flex.voc_sg = {p, p.."o"}
end
end
flex.voc_pl = flex.gd_def_pl
return flex
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {por_defecto=""},
["ayuda"] = {por_defecto=title},
["title"] = {alias_de="ayuda"},
["i"] = {tipo="bool"},
["num"] = {por_defecto=""},
["núm"] = {alias_de="num"},
["def"] = {por_defecto=""},
["nota"] = {},
}
for form,_ in pairs(adj_lb) do
params[form] = {lista=true}
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
if find(args["ayuda"], "%s") then
error("locuciones no soportadas")
end
local decl = {}
local cats = {}
local enc = "regular"
local irr
local defect
local sg = find(args["num"], "s")
local pl = find(args["num"], "p")
local def = find(args["def"], "^def")
local indef = find(args["def"], "indef")
if find(args[1], "^in") then
for form,_ in pairs(adj_lb) do
decl[form] = {args["ayuda"]}
end
enc = "invariante"
insert(cats, "RO:Adjetivos invariantes")
else
decl = decl_adj(args["ayuda"], args.i, find(args[1], "det"), args.na_indef_sg_f, args.na_indef_pl_m, args.na_indef_pl_f)
decl, irr = sobreescribir_formas(decl, args, false, {})
if irr then
enc = "irregular"
insert(cats, "RO:Adjetivos irregulares")
else
insert(cats, "RO:Adjetivos regulares")
end
local defect2 = comprobar_defectivo(decl)
if defect2 then
insert(cats, "RO:Adjetivos defectivos")
end
decl, defect = desactivar_formas(decl, function (x)
return (find(x, "pl") and sg) or (find(x, "sg") and pl) or (find(x, "_def") and indef) or (find(x, "indef") and def)
end)
if defect then
insert(cats, "RO:Adjetivos defectivos")
end
end
decl = agregar_enlaces(decl, title)
decl = formatear_formas(decl, adj_lb)
local t = {}
insert(t, {{""}, {"Masculino/neutro singular"}, {"Masculino/neutro plural"}, {"Femenino singular"}, {"Femenino plural"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Nom./acc. indefinido", header=true, color=COLOR_H}, decl.na_indef_sg_m, decl.na_indef_pl_m, decl.na_indef_sg_f, decl.na_indef_pl_f})
insert(t, {{"Nom./acc. definido", header=true, color=COLOR_H}, decl.na_def_sg_m, decl.na_def_pl_m, decl.na_def_sg_f, decl.na_def_pl_f})
insert(t, {{""}, {"Masculino singular"}, {"Masculino plural"}, {"Femenino/neutro singular"}, {"Femenino/neutro plural"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Gen./dat. indefinido", header=true, color=COLOR_H}, decl.gd_indef_sg_m, decl.gd_indef_pl_m, decl.gd_indef_sg_f, decl.gd_indef_pl_f})
insert(t, {{"Gen./dat. definido", header=true, color=COLOR_H}, decl.gd_def_sg_m, decl.gd_def_pl_m, decl.gd_def_sg_f, decl.gd_def_pl_f})
insert(t, args.nota)
return renderizar_tabla(
frame,
"'''Declinación de ''"..args["ayuda"].."'''''  ("..enc..")",
t,
cats
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
["ayuda"] = {por_defecto=title},
["title"] = {alias_de="ayuda"},
["i"] = {tipo="bool"},
["num"] = {por_defecto=""},
["núm"] = {alias_de="num"},
["def"] = {por_defecto=""},
["nota"] = {},
}
for form,_ in pairs(sust_lb) do
params[form] = {lista=true}
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
if find(title, "%s") then
error("locuciones no soportadas")
end
assert(args[1], "especifique el género en el primer parámetro")
local decl = {}
local cats = {}
local enc = "regular"
local irr
local defect
local sg = find(args["num"], "s")
local pl = find(args["num"], "p")
local def = find(args["def"], "^def")
local indef = find(args["def"], "indef")
if find(args[1], "^in") then
for form,_ in pairs(sust_lb) do
decl[form] = args["ayuda"]
end
enc = "invariante"
insert(cats, "RO:Sustantivos invariantes")
else
decl = decl_sust(args["ayuda"], args[1], args.na_indef_pl)
decl, irr = sobreescribir_formas(decl, args, false, {})
if irr then
enc = "irregular"
insert(cats, "RO:Sustantivos irregulares")
else
insert(cats, "RO:Sustantivos regulares")
end
local defect2 = comprobar_defectivo(decl)
if defect2 then
insert(cats, "RO:Adjetivos defectivos")
end
decl, defect = desactivar_formas(decl, function (x)
return (find(x, "pl") and sg) or (find(x, "sg") and pl) or (find(x, "_def") and indef) or (find(x, "indef") and def)
end)
if defect then
insert(cats, "RO:Sustantivos defectivos")
end
end
decl = agregar_enlaces(decl, title)
decl = formatear_formas(decl, sust_lb)
local t = {}
insert(t, {{""}, {"Singular"}, {"Plural"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Nom./acc. indefinido", header=true, color=COLOR_H}, decl.na_indef_sg, decl.na_indef_pl})
insert(t, {{"Gen./dat. indefinido", header=true, color=COLOR_H}, decl.gd_indef_sg, decl.gd_indef_pl})
insert(t, {{"Nom./acc. definido", header=true, color=COLOR_H}, decl.na_def_sg, decl.na_def_pl})
insert(t, {{"Gen./dat. definido", header=true, color=COLOR_H}, decl.gd_def_sg, decl.gd_def_pl})
insert(t, {{"Vocativo", header=true, color=COLOR_H}, decl.voc_sg, decl.voc_pl})
insert(t, args.nota)
return renderizar_tabla(
frame,
"'''Declinación de ''"..args["ayuda"].."'''''  ("..enc..")",
t,
cats
)
end
local EU, TU, EL, NOI, VOI, EI = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"eu, io", "tu", "el, ea", "noi", "voi", "ei, ele"}
local PRONOMBRES_IMP = {"-", "(tu)", "-", "-", "(voi)", "-"}
local IMPERSONALES = {"", "", "(ăsta)", "", "", "(astea)"}
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers and impers ~= "" then
return IMPERSONALES[p]
else
if find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local formas_no_personales = {
["ger"] = true,
["part"] = true,
["inf"] = true,
}
local formas_personales = {
["pres"] = true,
["imp"] = true,
["perf"] = true,
["pluperf"] = true,
["imper"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local consonants_verb = {
["i_"] = {
{"[sș][ct]$", "șt"},
{"^d$", "z"},
{"^t$", "ț"},
{"([^șj])d$", "%1z"},
{"([^șj])t$", "%1ț"},
{"s$", "ș"},
{"x$", "cș"},
},
["i"] = {
{"[sș]c$", "șt"},
{"x$", "cș"},
},
["e"] = {
{"[sș]c$", "șt"},
},
}
local consonants_23_verb = {
["i_"] = {
{"^n$", ""},
},
["u"] = {
{"^d$", "z"},
},
["â"] = {
{"d$", "z"},
-- {"t$", "ț"}, -- inconsistent
}
}
-- stressed stems for null, ă, e and i endings
-- the given stems should not include the unstressed stem (unless it happens to
-- coincide with one of the other forms)
local vow_changes = {
-- sort order: aeiouâîă
["a-e"] = { -- zbiera/așeza, a variant of e-ea below
["-"] = "e",
["ă"] = "a",
["e"] = "e",
["i"] = "e",
},
["a-e-ă"] = { -- spăla
["-"] = "ă",
["ă"] = "a",
["e"] = "e",
["i"] = "e",
},
["a-ă"] = { -- arăta
["-"] = "ă",
["ă"] = "a",
["e"] = "a",
["i"] = "ă",
},
["e-ea"] = { -- încerca
["-"] = "e",
["ă"] = "ea",
["e"] = "e",
["i"] = "e",
},
["e-ea-2"] = { -- lepăda
["-"] = {"e", "ea"},
["ă"] = "ea",
["e"] = "e",
["i"] = "e",
},
["e-ă"] = { -- supăra
["-"] = "ă",
["ă"] = "ă",
["e"] = "e",
["i"] = "e",
},
["i-â"] = { -- vinde (might be the only one)
["-"] = "â",
["ă"] = "â",
["e"] = "i",
["i"] = "i",
},
["o-oa"] = { -- toca
["-"] = "o",
["ă"] = "oa",
["e"] = "oa",
["i"] = "o",
},
}
local segunda_conjugacion = {
"avea$",
"^bea$",
"cădea$",
"căpea$",
"durea$",
"mânea$",
"părea$",
"plăcea$",
"putea$",
"ședea$",
"tăcea$",
"ținea$",
"vedea$",
"vrea$",
"zăcea$",
"zbea$"
}
-- format: conj = {lemma, stems, stem}
local template_defaults = {
["a"] = {"aduna"},
["a-ez"] = {"lucra"},
["i"] = {"dormi", "dorm/doarm"},
["i-esc"] = {"munci"},
["î"] = {"coborî", "cobor/coboar"},
["î-ăsc"] = {"hotărî"},
["e-s"] = {"ajunge"},
["e-t"] = {"sparge", "sparg", "spărg"},
["e-pt"] = {"rupe"},
["e-ut"] = {"trece", "trec/treac"},
["ea-ut"] = {"cădea", "cad"},
}
local function split_svc(word)
local stem, vow, cons
if match(word, "[" .. vowels .. "][iu]$") then
stem, vow, cons = match(word, "^(.-)([" .. vowels .. "]-)([iu])$")
else
stem, vow, cons = match(word, "^(.-)([" .. vowels .. "]-)([^" .. vowels .. "]-)$")
end
return stem, vow, cons
end
local function split_vow(vow)
local pre, post = "", ""
if len(vow) > 1 then
pre, vow, post = match(vow, "^([iu]?)(.-)([iu]?)$")
end
return pre, vow, post
end
-- todo: somehow account for hiatus (deochea)
local function get_vow_changes(words, result)
local all_dupes = true
for _, val in ipairs(words) do
if val ~= words[1] then
all_dupes = false
break
end
end
if all_dupes then
insert(result, words[1])
return
else
local split_words = {}
for _, val in ipairs(words) do
if val == "" then
error("Cannot match stems, should only have different vowels")
end
local stem, pre, vow, post, cons
local res = {}
stem, vow, cons = split_svc(val)
pre, vow, post = split_vow(vow)
insert(res, stem)
insert(res, pre)
insert(res, vow)
insert(res, post)
insert(res, cons)
insert(split_words, res)
end
local vowel_appearances, found_vowels = {}, {}
for i, val in ipairs(split_words) do
-- compare pre-vowel, post-vowel, cons
if val[5] ~= split_words[1][5] then
error("Stems differ in something other than main vowels: "
.. words[1] .. ", " .. words[i] .. ", "
.. (val[5] or "fjdfl") .. ", " .. (split_words[1][5] or " fda"))
end
if val[4] ~= split_words[1][4] then
error("Stems differ in something other than main vowels: "
.. words[1] .. ", " .. words[i] .. ", "
.. val[4] .. ", " .. split_words[1][4])
end
if val[2] ~= split_words[1][2] then
error("Stems differ in something other than main vowels: "
.. words[1] .. ", " .. words[i] .. ", "
.. val[2] .. ", " .. split_words[1][2])
end
-- add the vowel
vowel_appearances[val[3]] = true
end
for vow, _ in pairs(vowel_appearances) do
insert(found_vowels, vow)
end
sort(found_vowels)
-- replace words with stems
for key, _ in ipairs(words) do
words[key] = split_words[key][1]
end
get_vow_changes(words, result)
-- join pre-vowel to last consonant
result[#result] = result[#result] .. split_words[1][2]
-- add all the vowel variations
insert(result, concat(found_vowels, "-"))
-- add post-vowel + last cons
insert(result, split_words[1][4] .. split_words[1][5])
return
end
end
-- given a comma-separated list of slash-separated lists of stems
-- get a list of stems for each ending
local function get_stems(stems, inf_stem)
local stem_types = {"-", "ă", "e", "i"}
local res = {}
for _, stype in ipairs(stem_types) do
res[stype] = {}
end
if not stems then
local stem = inf_stem
for _, val in ipairs(stem_types) do
res[val] = stem
end
else
local stem_lists = split(stems, " *; *")
for _, stem_set in ipairs(stem_lists) do
-- make a new resi table to hold all the stems
local resi = {}
local stems2, stem_parts = split(stem_set, " */ *"), {}
get_vow_changes(stems2, stem_parts)
for _, stype in ipairs(stem_types) do
resi[stype] = {""}
for i = 1, #stem_parts, 2 do
for j, _ in ipairs(resi[stype]) do
resi[stype][j] = resi[stype][j] .. stem_parts[i]
end
-- which syllable this is, counting from the end
local syln = (#stem_parts - i) / 2
if stem_parts[i + 1] then
local vc = vow_changes[stem_parts[i + 1] .. "-" .. syln]
or vow_changes[stem_parts[i + 1]]
if not vc then
-- no vowel alternation found for these vowels
if not find(stem_parts[i + 1], "%-") then
-- there's only one vowel, so use it
for k, stem in ipairs(resi[stype]) do
resi[stype][k] = stem .. stem_parts[i + 1]
end
else
-- multiple vowels not matching a known vowel alternation
error(stem_parts[i + 1] ..
" is not a valid vowel change")
end
elseif type(vc[stype]) == "string" then
-- only one vowel can be used with that ending
for k, stem in ipairs(resi[stype]) do
resi[stype][k] = stem .. vc[stype]
end
elseif type(vc[stype]) == "table" then
-- multiple vowels for that ending, so make a copy
-- of the partial stem for each one
local copy = resi[stype]
resi[stype] = {}
for _, vow in ipairs(vc[stype]) do
for _, stem in ipairs(copy) do
insert(resi[stype], stem .. vow)
end
end
end
end
end
end
-- add only the stems that are not already in res
for _, stype in ipairs(stem_types) do
for _, stemi in ipairs(resi[stype]) do
local is_new = true
for _, stem in ipairs(res[stype]) do
if stem == stemi then
is_new = false
break
end
end
if is_new then
insert(res[stype], stemi)
end
end
end
end
end
return res
end
local function find_cons_verb(cons, mode, conj_23, vow)
local n
-- ugly hack
if conj_23 and mode == "â" and cons == "t"
and find(vow, "[eio]$") then
cons = "ț"
return cons
end
if conj_23 and consonants_23_verb[mode] then
for _, p in ipairs(consonants_23_verb[mode]) do
cons, n = gsub(cons, p[1], p[2], 1)
if n >= 1 then
return cons
end
end
end
if consonants_verb[mode] then
for _, p in pairs(consonants_verb[mode]) do
cons, n = gsub(cons, p[1], p[2], 1)
if n >= 1 then
return cons
end
end
end
return cons
end
-- common for both functions below
local join_ending_common = function(stem, ending)
ending = ending or ""
local res = {}
if type(stem) == "string" then
stem = {stem}
end
for _, s in ipairs(stem) do
if ending == "" then
if match(s, "[cg]h$") or match(s, "[^" .. vowels .. "]i$") then
insert(res, s .. "i")
elseif match(s, "[^" .. vowels .. "][lr]$") then
insert(res, s .. "u")
end
elseif match(s, "[cg]h$") then
if match(ending, "^a") then
insert(res, s .. "e" .. ending)
elseif match(ending, "^ă") then
insert(res, s .. gsub(ending, "^ă", "e"))
elseif match(ending, "^[âî]") then
insert(res, s .. gsub(ending, "^[âî]", "i"))
end
elseif match(s, "i$") then
if match(ending, "^ă") then
insert(res, s .. gsub(ending, "^ă", "e"))
elseif match(ending, "^ea") then
insert(res, s .. gsub(ending, "^e", ""))
elseif match(ending, "^[âi]") then
if match(s, "[" .. vowels .. "]i$") then
insert(res, s .. gsub(ending, "^[âi]", ""))
else
insert(res, s .. gsub(ending, "^[âi]", "i"))
end
end
end
end
return res
end
-- no consonant change
local join_ending_2 = function(stem, ending)
ending = ending or ""
local res = join_ending_common(stem, ending)
if #res == 0 then
if type(stem) == "string" then
stem = {stem}
end
for _, s in ipairs(stem) do
if match(ending, "^[ei]") and match(s, "[cg]$") then
insert(res, s .. "h" .. ending)
else
insert(res, s .. ending)
end
end
end
for i, form in ipairs(res) do
res[i] = match(form, "^(.-)_?$")
end
return res
end
-- consonant change
local join_ending = function(stem, ending, conj_23)
ending = ending or ""
local res = join_ending_common(stem, ending)
if #res == 0 then
if type(stem) == "string" then
stem = {stem}
end
for _, s in ipairs(stem) do
if match(ending, "^[ei]") or (conj_23 and match(ending, "^[uâ]")) then
local st, vow, cons = split_svc(s)
local ending_vow = ending == "i_" and "i_" or sub(ending, 1, 1)
cons = find_cons_verb(cons, ending_vow, conj_23, vow)
insert(res, st .. vow .. cons .. ending)
else
insert(res, s .. ending)
end
end
end
for i, form in ipairs(res) do
res[i] = match(form, "^(.-)_?$")
end
return res
end
local add_form = function(t, name, new_form)
if type(new_form) == "string" then
new_form = {new_form}
end
if not t[name] then
t[name] = {}
end
for _,e in ipairs(new_form) do
insert_if_not(t[name], e)
end
end
local add_repeated_forms_new = function(t)
add_form(t, "imp1", join_ending(t.impf_stem, "am"))
add_form(t, "imp2", join_ending(t.impf_stem, "ai"))
add_form(t, "imp3", join_ending(t.impf_stem, "a"))
add_form(t, "imp4", join_ending(t.impf_stem, "am"))
add_form(t, "imp5", join_ending(t.impf_stem, "ați"))
add_form(t, "imp6", join_ending(t.impf_stem, "au"))
add_form(t, "pluperf1", join_ending(t.plup_stem, "sem"))
add_form(t, "pluperf2", join_ending(t.plup_stem, "seși"))
add_form(t, "pluperf3", join_ending(t.plup_stem, "se"))
add_form(t, "pluperf4", join_ending(t.plup_stem, "serăm"))
add_form(t, "pluperf5", join_ending(t.plup_stem, "serăți"))
add_form(t, "pluperf6", join_ending(t.plup_stem, "seră"))
add_form(t, "subj1", deepcopy(t.pres1))
add_form(t, "subj2", deepcopy(t.pres2))
add_form(t, "subj4", deepcopy(t.pres4))
add_form(t, "subj5", deepcopy(t.pres5))
add_form(t, "subj6", deepcopy(t.subj3))
add_form(t, "imper5", deepcopy(t.pres5))
end
local conjugations_new = {}
conjugations_new["a"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before ă ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before i ending
if not ppstem or #ppstem == 0 then
ppstem = stem
end
add_form(t, "ger", join_ending(stem, "ând"))
add_form(t, "part", join_ending(ppstem, "at"))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_"))
add_form(t, "pres3", join_ending(stem_ah, "ă"))
add_form(t, "pres4", join_ending(stem, "ăm"))
add_form(t, "pres5", join_ending(stem, "ați"))
add_form(t, "pres6", deepcopy(t.pres3))
t.impf_stem = stem
add_form(t, "perf1", join_ending(ppstem, "ai"))
add_form(t, "perf2", join_ending(ppstem, "ași"))
add_form(t, "perf3", join_ending(ppstem, "ă"))
add_form(t, "perf4", join_ending(ppstem, "arăm"))
add_form(t, "perf5", join_ending(ppstem, "arăți"))
add_form(t, "perf6", join_ending(ppstem, "ară"))
t.plup_stem = join_ending(ppstem, "a")
add_form(t, "subj3", join_ending(stem_e, "e"))
add_form(t, "imper2", deepcopy(t.pres3))
end
conjugations_new["a-ez"] = function(t, stem, stems, ppstem)
local stem = stem
local stem_ez = join_ending_2(stem, "ez")
local stem_eaz = join_ending_2(stem, "eaz")
conjugations_new["a"](t, stem, {["-"] = stem_ez,
["ă"] = stem_eaz,
["e"] = stem_ez,
["i"] = stem_ez}, ppstem)
end
conjugations_new["i"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before ă ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before i ending
if not ppstem or #ppstem == 0 then
ppstem = stem
end
add_form(t, "ger", join_ending(stem, "ind"))
add_form(t, "part", join_ending(ppstem, "it"))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_"))
add_form(t, "pres3", join_ending(stem_e, "e"))
add_form(t, "pres4", join_ending(stem, "im"))
add_form(t, "pres5", join_ending(stem, "iți"))
-- todo: this is probably based on stress
add_form(t, "pres6", deepcopy(match(type(stem_) == "table" and stem_[1] or stem_, "[" .. vowels .. "]i$"))
and t.pres3 or t.pres1)
t.impf_stem = tsub(join_ending(stem, "ea"), 1, -2)
add_form(t, "perf1", join_ending(ppstem, "ii"))
add_form(t, "perf2", join_ending(ppstem, "iși"))
add_form(t, "perf3", join_ending(ppstem, "i"))
add_form(t, "perf4", join_ending(ppstem, "irăm"))
add_form(t, "perf5", join_ending(ppstem, "irăți"))
add_form(t, "perf6", join_ending(ppstem, "iră"))
t.plup_stem = join_ending(ppstem, "i")
add_form(t, "subj3", join_ending(stem_ah, "ă"))
add_form(t, "imper2", deepcopy(t.pres3))
end
conjugations_new["i-esc"] = function(t, stem, stems, ppstem)
local stem = stem
local stem_esc = join_ending(stem, "esc")
local stem_easc = join_ending(stem, "easc")
conjugations_new["i"](t, stem, {["-"] = stem_esc,
["ă"] = stem_easc,
["e"] = stem_esc,
["i"] = stem_esc}, ppstem)
end
conjugations_new["î"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before ă ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before i ending
if not ppstem or #ppstem == 0 then
ppstem = stem
end
add_form(t, "ger", join_ending(stem, "ând"))
add_form(t, "part", join_ending(ppstem, "ât"))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_"))
add_form(t, "pres3", join_ending(stem_ah, "ă"))
add_form(t, "pres4", join_ending(stem, "âm"))
add_form(t, "pres5", join_ending(stem, "âți"))
-- todo: change this
add_form(t, "pres6", deepcopy(t.pres3))
t.impf_stem = stem
add_form(t, "perf1", join_ending(ppstem, "âi"))
add_form(t, "perf2", join_ending(ppstem, "âși"))
add_form(t, "perf3", join_ending(ppstem, "î"))
add_form(t, "perf4", join_ending(ppstem, "ârăm"))
add_form(t, "perf5", join_ending(ppstem, "ârăți"))
add_form(t, "perf6", join_ending(ppstem, "âră"))
t.plup_stem = join_ending(ppstem, "â")
add_form(t, "subj3", join_ending(stem_e, "e"))
add_form(t, "imper2", deepcopy(t.pres3))
end
conjugations_new["î-ăsc"] = function(t, stem, stems, ppstem)
local stem = stem
local stem_ = join_ending(stem, "ăsc") -- stressed stem before zero ending
local stem_ah = join_ending(stem, "asc") -- stressed stem before ă ending
local stem_e = stem_ -- stressed stem before e ending
local stem_i = stem_ -- stressed stem before i ending
if not ppstem or #ppstem == 0 then
ppstem = stem
end
add_form(t, "ger", join_ending(stem, "ând"))
add_form(t, "part", join_ending(ppstem, "ât"))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_"))
add_form(t, "pres3", join_ending(stem_e, "e"))
add_form(t, "pres4", join_ending(stem, "âm"))
add_form(t, "pres5", join_ending(stem, "âți"))
add_form(t, "pres6", deepcopy(t.pres1))
t.impf_stem = stem
add_form(t, "perf1", join_ending(ppstem, "âi"))
add_form(t, "perf2", join_ending(ppstem, "âși"))
add_form(t, "perf3", join_ending(ppstem, "î"))
add_form(t, "perf4", join_ending(ppstem, "ârăm"))
add_form(t, "perf5", join_ending(ppstem, "ârăți"))
add_form(t, "perf6", join_ending(ppstem, "âră"))
t.plup_stem = join_ending(ppstem, "â")
add_form(t, "subj3", join_ending(stem_ah, "ă"))
add_form(t, "imper2", deepcopy(t.pres3))
end
conjugations_new["e-s"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before i ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before ă ending
local pp_stem = tsub(stem, 1, -2)
local pp_stem_ = tsub(stem_, 1, -2)
local pp_stem_e = tsub(stem_e, 1, -2)
if type(ppstem) == "string" or type(ppstem) == "table" and #ppstem > 0 then -- parche para [[scrie]]
pp_stem = ppstem
pp_stem_ = ppstem
pp_stem_e = ppstem
end
add_form(t, "ger", join_ending(stem, "ând", true))
add_form(t, "part", join_ending(pp_stem_, "s"))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_", true))
add_form(t, "pres3", join_ending(stem_e, "e"))
add_form(t, "pres4", join_ending(stem_e, "em"))
add_form(t, "pres5", join_ending(stem_e, "eți"))
add_form(t, "pres6", deepcopy(t.pres1))
t.impf_stem = tsub(join_ending(stem, "ea"), 1, -2)
add_form(t, "perf1", join_ending(pp_stem, "sei"))
add_form(t, "perf2", join_ending(pp_stem, "seși"))
add_form(t, "perf3", join_ending(pp_stem_e, "se"))
add_form(t, "perf4", join_ending(pp_stem_e, "serăm"))
add_form(t, "perf5", join_ending(pp_stem_e, "serăți"))
add_form(t, "perf6", join_ending(pp_stem_e, "seră"))
t.plup_stem = join_ending(pp_stem, "se")
add_form(t, "subj3", join_ending(stem_ah, "ă"))
add_form(t, "imper2", deepcopy(t.pres3))
end
-- same as e-s except for the past participle
conjugations_new["e-t"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before i ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before ă ending
local pp_stem = tsub(stem, 1, -2)
local pp_stem_ = tsub(stem_, 1, -2)
local pp_stem_e = tsub(stem_e, 1, -2)
if type(ppstem) == "string" or type(ppstem) == "table" and #ppstem > 0 then -- parche para [[scrie]]
pp_stem = ppstem
pp_stem_ = ppstem
pp_stem_e = ppstem
end
add_form(t, "ger", join_ending(stem, "ând", true))
add_form(t, "part", join_ending(pp_stem_, "t"))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_", true))
add_form(t, "pres3", join_ending(stem_e, "e"))
add_form(t, "pres4", join_ending(stem_e, "em"))
add_form(t, "pres5", join_ending(stem_e, "eți"))
add_form(t, "pres6", deepcopy(t.pres1))
t.impf_stem = tsub(join_ending(stem, "ea"), 1, -2)
add_form(t, "perf1", join_ending(pp_stem, "sei"))
add_form(t, "perf2", join_ending(pp_stem, "seși"))
add_form(t, "perf3", join_ending(pp_stem_e, "se"))
add_form(t, "perf4", join_ending(pp_stem_e, "serăm"))
add_form(t, "perf5", join_ending(pp_stem_e, "serăți"))
add_form(t, "perf6", join_ending(pp_stem_e, "seră"))
t.plup_stem = join_ending(pp_stem, "se")
add_form(t, "subj3", join_ending(stem_ah, "ă"))
add_form(t, "imper2", deepcopy(t.pres3))
end
conjugations_new["e-pt"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before i ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before ă ending
local pp_stem = tsub(stem, 1, -2)
local pp_stem_ = tsub(stem_, 1, -2)
local pp_stem_e = tsub(stem_e, 1, -2)
if type(ppstem) == "string" or type(ppstem) == "table" and #ppstem > 0 then -- parche para [[scrie]]
pp_stem = ppstem
pp_stem_ = ppstem
pp_stem_e = ppstem
end
add_form(t, "ger", join_ending(stem, "ând", true))
add_form(t, "part", join_ending(pp_stem_, "pt"))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_", true))
add_form(t, "pres3", join_ending(stem_e, "e"))
add_form(t, "pres4", join_ending(stem_e, "em"))
add_form(t, "pres5", join_ending(stem_e, "eți"))
add_form(t, "pres6", deepcopy(t.pres1))
t.impf_stem = tsub(join_ending(stem, "ea"), 1, -2)
add_form(t, "perf1", join_ending(pp_stem, "psei"))
add_form(t, "perf2", join_ending(pp_stem, "pseși"))
add_form(t, "perf3", join_ending(pp_stem_e, "pse"))
add_form(t, "perf4", join_ending(pp_stem_e, "pserăm"))
add_form(t, "perf5", join_ending(pp_stem_e, "pserăți"))
add_form(t, "perf6", join_ending(pp_stem_e, "pseră"))
t.plup_stem = join_ending(pp_stem, "pse")
add_form(t, "subj3", join_ending(stem_ah, "ă"))
add_form(t, "imper2", deepcopy(t.pres3))
end
conjugations_new["e-ut"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before i ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before ă ending
if not ppstem or #ppstem == 0 then
ppstem = stem
end
add_form(t, "ger", join_ending(stem, "ând", true))
add_form(t, "part", join_ending(ppstem, "ut", true))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_", true))
add_form(t, "pres3", join_ending(stem_e, "e"))
add_form(t, "pres4", join_ending(stem_e, "em"))
add_form(t, "pres5", join_ending(stem_e, "eți"))
add_form(t, "pres6", deepcopy(t.pres1))
t.impf_stem = tsub(join_ending(stem, "ea"), 1, -2)
add_form(t, "perf1", join_ending(ppstem, "ui", true))
add_form(t, "perf2", join_ending(ppstem, "uși", true))
add_form(t, "perf3", join_ending(ppstem, "u", true))
add_form(t, "perf4", join_ending(ppstem, "urăm", true))
add_form(t, "perf5", join_ending(ppstem, "urăți", true))
add_form(t, "perf6", join_ending(ppstem, "ură", true))
t.plup_stem = join_ending(ppstem, "u", true)
add_form(t, "subj3", join_ending(stem_ah, "ă"))
add_form(t, "imper2", deepcopy(t.pres3))
end
conjugations_new["ea-ut"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before i ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before ă ending
if not ppstem or #ppstem == 0 then
ppstem = stem
end
add_form(t, "ger", join_ending(stem, "ând", true))
add_form(t, "part", join_ending(ppstem, "ut", true))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_", true))
add_form(t, "pres3", join_ending(stem_e, "e"))
add_form(t, "pres4", join_ending(stem, "em"))
add_form(t, "pres5", join_ending(stem, "eți"))
add_form(t, "pres6", deepcopy(t.pres1))
t.impf_stem = tsub(join_ending(stem, "ea"), 1, -2)
add_form(t, "perf1", join_ending(ppstem, "ui", true))
add_form(t, "perf2", join_ending(ppstem, "uși", true))
add_form(t, "perf3", join_ending(ppstem, "u", true))
add_form(t, "perf4", join_ending(ppstem, "urăm", true))
add_form(t, "perf5", join_ending(ppstem, "urăți", true))
add_form(t, "perf6", join_ending(ppstem, "ură", true))
t.plup_stem = join_ending(ppstem, "u", true)
add_form(t, "subj3", join_ending(stem_ah, "ă"))
add_form(t, "imper2", deepcopy(t.pres3))
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {},
["nucleoperf"] = {por_defecto = ""},
["núcleoperf"] = {alias_de = "nucleoperf"},
["tipo"] = {},
["impersonal"] = {por_defecto = ""},
["impers"] = {alias_de = "impersonal"},
["paradigma"] = {lista = true}, -- sin uso
["nota"] = {},
["aux"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local v = tit
assert(not find(v, " "), "locuciones no soportadas")
local sufijo_inf
local paradigmas_reconocidos = {} -- sin uso
local es_irregular
local es_inco
local es_puro
local conjinfo = {}
for _,rx in ipairs(segunda_conjugacion) do
if find(v, rx) then
conjinfo.sufijo_inf = "ea"
end
end
if not conjinfo.sufijo_inf then
conjinfo.sufijo_inf = match(v, "[aeiî]$")
end
assert(conjinfo.sufijo_inf, "forma canónica no reconocida")
sufijo_inf = conjinfo.sufijo_inf
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
if not conjinfo.nucleo_inf then
conjinfo.nucleo_inf = sub(v, 1, max(len(v) - len(conjinfo.sufijo_inf), 0))
end
conjinfo.prefijo = "" -- por ahora sin uso
local stems = get_stems(args[1], conjinfo.nucleo_inf)
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
if not args.tipo then
args.tipo = conjinfo.sufijo_inf
end
if args.tipo == "e" then
args.tipo = "e-s"
elseif args.tipo == "ea" then
args.tipo = "ea-ut"
end
if find(args.tipo, "sc") or find(args.tipo, "ez") then
es_inco = true
else
es_puro = true
end
if args[1] or args[2] or args.nucleoperf ~= "" then
es_irregular = true
end
conjugations_new[args.tipo](conjugado, args[2] and split(args[2], " */ *") or conjinfo.nucleo_inf, stems, split(args.nucleoperf, " *; *"))
add_repeated_forms_new(conjugado)
conjugado.inf = {v}
local resultante, irr = sobreescribir_formas(conjugado, args)
es_irregular = es_irregular or irr
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
resultante = agregar_enlaces(resultante, tit)
local es_impersonal = args["impersonal"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, es_impersonal)
end)
local impers = args["impersonal"]
local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_imper, mostrar_imper
if impers == "3" then
fila_pronombres_ind = {"", "(ăsta)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_imper = {"", "(ăsta)", color=COLOR_IMPER, header=true, class="pc"}
cs = 2
elseif impers == "36" then
fila_pronombres_ind = {"", "(ăsta)", "(astea)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_imper = {"", "(ăsta)", "(astea)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_ind = {"", "eu, io", "tu", "el, ea", "noi", "voi", "ei, ele", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tu)", "―", "―", "(voi)", "―", color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = math.floor((cs-1) / 2)
cs2 = cs - 1 - cs1
local t = {}
t[1] = {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true}
if impers == "3" then
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
else
resultante.inf.colspan = cs - 1
resultante.ger.colspan = cs - 1
resultante.part.colspan = cs - 1
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
t[5] = {{"Formas personales", colspan=cs}, color=COLOR_H, 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}, ic("pres")}
t[9] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("imp")}
t[10] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("perf")}
t[11] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("pluperf")}
t[12] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true}
t[13] = fila_pronombres_imper
if mostrar_imper then
t[14] = {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")}
else
t[14] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}}
end
t[15] = {{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[16] = {{args["nota"] and args["nota"] or "", colspan=cs}}
local cats = {}
local enc = {}
if not es_inco and not es_puro then
es_puro = true
end
if sufijo_inf == "a" then
insert(cats, "RO:Verbos de la primera conjugación")
insert(enc, "primera conjugación")
if es_inco then
insert(cats, "RO:Verbos incoativos")
insert(enc, "incoativo")
end
if es_puro then
insert(cats, "RO:Verbos puros")
insert(enc, "puro")
end
elseif sufijo_inf == "ea" then
insert(cats, "RO:Verbos de la segunda conjugación")
insert(enc, "segunda conjugación")
elseif sufijo_inf == "e" then
insert(cats, "RO:Verbos de la tercera conjugación")
insert(enc, "tercera conjugación")
elseif sufijo_inf == "i" or sufijo_inf == "î" then
insert(cats, "RO:Verbos de la cuarta conjugación")
insert(enc, "cuarta conjugación")
if es_inco then
insert(cats, "RO:Verbos incoativos")
insert(enc, "incoativo")
end
if es_puro then
insert(cats, "RO:Verbos puros")
insert(enc, "puro")
end
end
if es_irregular then
insert(cats, "RO:Verbos irregulares")
insert(enc, "irregular")
else
insert(cats, "RO:Verbos regulares")
insert(enc, "regular")
end
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "RO:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "RO:Verbos terciopersonales")
end
if defectivo then
insert(cats, "RO:Verbos defectivos")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''   ("..concat(enc, ", ")..")",
t,
ns == 0 and cats or {})
end
return export
g8o8yzdyjwg3owimkdjxco27gqy7ya7
6118182
6118089
2026-06-16T02:18:44Z
TMCbot
164594
.
6118182
Scribunto
text/plain
-- Flexión para el rumano
-- Reciclado de en.wikt por Tmagc
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local sort = table.sort
local min = math.min
local max = math.max
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local len = m_str.len
local sub = m_str.sub
local split = m_str.split
local tsub = function(t, i, j)
local res = deepcopy(t)
if type(res) == "string" then
res = {res}
end
for k, form in ipairs(res) do
res[k] = sub(form, i, j)
end
return res
end
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local desactivar_formas = m_flex.desactivar_formas
local agregar_enlaces = m_flex.agregar_enlaces
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local vocal = "aăâeêĕiîĭoôŏuûŭyAĂÂEĔÊIĬÎOŎÔUŬÛY"
local vowels = vocal
local espacios = "%-‐%s"
local guion = "%-"
local VOCAL = "["..vocal.."]"
local CONS = "[^"..vocal..espacios.."]"
local ESPACIO = "["..espacios.."]"
local LETRA = "[^"..espacios.."]"
local adj_lb = {
na_indef_sg_m = "m./n. sg.",
na_indef_sg_f = "f. sg.",
na_indef_pl_m = "m./n. pl.",
na_indef_pl_f = "f. pl.",
na_def_sg_m = "m./n. sg.",
na_def_sg_f = "f. sg.",
na_def_pl_m = "m./n. pl.",
na_def_pl_f = "f. pl.",
gd_indef_sg_m = "m. sg.",
gd_indef_sg_f = "f./n. sg.",
gd_indef_pl_m = "m. pl.",
gd_indef_pl_f = "f./n. pl.",
gd_def_sg_m = "m. sg.",
gd_def_sg_f = "f./n. sg.",
gd_def_pl_m = "m. pl.",
gd_def_pl_f = "f./n. pl.",
}
local sust_lb = {
na_indef_sg = "sg.",
na_indef_pl = "pl.",
na_def_sg = "sg.",
na_def_pl = "pl.",
gd_indef_sg = "sg.",
gd_indef_pl = "pl.",
gd_def_sg = "sg.",
gd_def_pl = "pl.",
voc_sg = "sg.",
voc_pl = "pl."
}
local consonants = {
i = {
str = 'ștr';
st = 'șt';
sc = 'șt';
d = 'z';
s = 'ș';
t = 'ț';
x = 'cș';
},
e = {
sc = 'șt';
}
}
-- these adjectives have different defaults
local endings = {
{pattern = "([stz])or$", fs = "%1oare", mp = "%1ori", fp = "%1oare"},
{pattern = "os$", fs = "oasă", mp = "oși", fp = "oase"},
{pattern = "iesc$", fs = "iască", mp = "iești", fp = "iești"},
{pattern = "esc$", fs = "ească", mp = "ești", fp = "ești"},
{pattern = "([iy])an$", fs = "%1ană", mp = "%1eni", fp = "%1ene"},
{pattern = "ean$", fs = "eană", mp = "eni", fp = "ene"},
{pattern = "eț$", fs = "eață", mp = "eți", fp = "ețe"},
{pattern = "iu$", fs = "ie", mp = "ii", fp = "ii"},
}
local function make_na_def_sg(word, gender)
local definite
if gender == "m" or gender == "n" then
if find(word, "u$") then
definite = word .. "l"
elseif find(word, "e$") then
definite = word .. "le"
else
definite = word .. "ul"
end
elseif gender == "f" then
if find(word, "ă$") then
definite = gsub(word, "ă$", "a")
elseif find(word, "[aeiouăâî]ie") then
definite = gsub(word, "e$", "a")
elseif find(word, "ie$") then
definite = gsub(word, "e$", "a")
elseif find(word, "e$") then
definite = word .. "a"
elseif find(word, "a$") then
definite = word .. "ua"
end
else
error("Invalid or missing gender")
end
return definite
end
local function make_na_indef_sg_f(word)
local f
if find(word, "e$") then
f = word
elseif find(word, "[aăâiîeou]i$") then
f = word .. "e"
elseif find(word, "iu$") then
f = gsub(word, "u$", "e")
elseif find(word, "u$") then
f = sub(word, 1, -2) .. "ă"
elseif find(word, "[cg]h?i$") then
f = sub(word, 1, -2) .. "e"
elseif find(word, "[^aioăâî]$") then
f = word .. "ă"
else
error("Feminine of \"" .. word .. "\" could not be generated automatically")
end
if f then
f = gsub(f, "([âei])ă$", "%1e")
end
return f
end
local function split_stem(word)
local stem, cons
stem, cons = match(word, '^(.-[aeiouăâî])([iu])$')
if cons then
return stem, cons
end
stem, cons = match(word, '^(.-[aeiouăâî]-)([bcdfghj-np-tv-zșț]-)$')
return stem, cons
end
local function find_cons(cons, mode)
for i = -3, -1 do
if consonants[mode][sub(cons, i)] and not match(sub(cons, 1, i-1), "^[șj]$") then
cons = sub(cons, 1, i-1) .. consonants[mode][sub(cons, i)]
break
end
end
return cons
end
local function adj_make_na_indef_pl(word, g)
local pl
local suf1, suf2, pre1 = sub(word, -1), sub(word, -2), sub(word, 1, -2)
if g == 'm' then
if suf1 == 'i' then
pl = word
else
local stem, cons = split_stem(match(word, '^(.-)[eu]?$'))
cons = find_cons(cons, 'i')
pl = stem .. cons .. 'i'
end
elseif g == 'f' then
if suf1 == 'a' then
if suf2 == 'ea' then
pl = pre1 .. 'le'
elseif suf2 == 'ia' then
pl = pre1 .. 'ele'
else
pl = word .. 'le'
end
else
if suf1 == 'e' then
pl = word
elseif suf1 == 'ă' then
local stem, cons = split_stem(match(word, '^(.-)ă$'))
cons = find_cons(cons, 'e')
pl = stem .. cons .. 'e'
end
end
end
return pl
end
local function noun_make_na_indef_pl(word, g)
local pl
local suf1, suf2, pre1 = sub(word, -1), sub(word, -2), sub(word, 1, -2)
local suf4 = sub(word, -4)
if g == 'm' then
if suf1 == 'i' then
pl = word
else
local stem, cons = split_stem(match(word, '^(.-)[eu]?$'))
cons = find_cons(cons, 'i')
pl = stem .. cons .. 'i'
end
elseif g == 'f' then
if suf4 == "tate" then
pl = sub(word, 1, -5).."tăți"
elseif suf1 == 'a' then
if suf2 == 'ea' then -- revisar: existe este sufijo en sustantivos tmb?
pl = pre1 .. 'le'
elseif suf2 == 'ia' then -- revisar: existe este sufijo en sustantivos tmb?
pl = pre1 .. 'ele'
elseif suf2 == "ie" then
pl = pre1
else
pl = word .. 'le' -- revisar: existe este sufijo en sustantivos tmb?
end
else
if suf1 == 'e' then
pl = pre1..'i'
elseif suf1 == 'ă' then
local stem, cons = split_stem(match(word, '^(.-)ă$'))
cons = find_cons(cons, 'e')
pl = stem .. cons .. 'e'
end
end
elseif g == 'n' then
pl = find(word, "e$") and word or word.."e"
end
assert(pl)
return pl
end
local form_names = {
"na_indef_sg_m",
"na_indef_sg_f",
"na_indef_pl_m",
"na_indef_pl_f",
"na_def_sg_m",
"na_def_sg_f",
"na_def_pl_m",
"na_def_pl_f",
"gd_indef_sg_m",
"gd_indef_sg_f",
"gd_indef_pl_m",
"gd_indef_pl_f",
"gd_def_sg_m",
"gd_def_sg_f",
"gd_def_pl_m",
"gd_def_pl_f",
}
local function fun(arr, f)
if type(arr) == "string" then
return f(arr)
end
local arr2 = {}
for _,a in ipairs(arr) do
insert(arr2, f(a))
end
return arr2
end
local function decl_adj(p, imode, det, fs, mp, fp)
local flex = {}
flex.na_indef_sg_m = p
if #fs > 0 then
flex.na_indef_sg_f = fs
end
if #mp > 0 then
flex.na_indef_pl_m = mp
end
if #fp > 0 then
flex.na_indef_pl_f = fp
end
for _,info in ipairs(endings) do
if find(p, info.pattern) then
flex.na_indef_sg_f = flex.na_indef_sg_f or gsub(p, info.pattern, info.fs)
flex.na_indef_pl_m = flex.na_indef_pl_m or gsub(p, info.pattern, info.mp)
flex.na_indef_pl_f = flex.na_indef_pl_f or gsub(p, info.pattern, info.fp)
break
end
end
flex.na_indef_sg_f = flex.na_indef_sg_f or make_na_indef_sg_f(p)
flex.na_indef_pl_m = flex.na_indef_pl_m or adj_make_na_indef_pl(p, "m")
flex.na_indef_pl_f = flex.na_indef_pl_f or (imode and flex.na_indef_pl_m or adj_make_na_indef_pl(type(flex.na_indef_sg_f) == "table" and flex.na_indef_sg_f[1] or flex.na_indef_sg_f, "f"))
if det then
flex.gd_indef_sg_m = match(p, "^(.*)[eu]?$").."ui"
flex.gd_indef_sg_f = match(p, "^(.*)[eu]?$").."ei"
flex.gd_indef_pl_m = match(p, "^(.*)[eu]?$").."or"
flex.gd_indef_pl_f = flex.gd_indef_pl_m
flex.na_def_sg_m = {}
flex.na_def_sg_f = {}
flex.na_def_pl_m = {}
flex.na_def_pl_f = {}
flex.gd_def_sg_m = {}
flex.gd_def_sg_f = {}
flex.gd_def_pl_m = {}
flex.gd_def_pl_f = {}
else
flex.gd_indef_sg_m = flex.na_indef_sg_m
flex.gd_indef_sg_f = flex.na_indef_pl_f
flex.gd_indef_pl_m = flex.na_indef_pl_m
flex.gd_indef_pl_f = flex.na_indef_pl_f
flex.na_def_sg_m = make_na_def_sg(p, "m")
flex.na_def_sg_f = fun(flex.na_indef_sg_f, function (x)
return make_na_def_sg(x, "f")
end)
flex.na_def_pl_m = fun(flex.na_indef_pl_m, function (x)
return x.."i"
end)
flex.na_def_pl_f = fun(flex.na_indef_pl_f, function (x)
return x.."le"
end)
flex.gd_def_sg_m = fun(flex.na_def_sg_m, function (x)
return find(x, "e$") and sub(x, 1, -2).."ui" or x.."ui"
end)
if type(flex.na_indef_sg_f) == "string" then
flex.na_indef_sg_f = {flex.na_indef_sg_f}
end
if type(flex.na_indef_pl_f) == "string" then
flex.na_indef_pl_f = {flex.na_indef_pl_f}
end
flex.gd_def_sg_f = {}
for i=1, min(#flex.na_indef_sg_f, #flex.na_indef_pl_f) do
insert_if_not(flex.gd_def_sg_f, find(flex.na_indef_pl_f[i], "[^aăâeiîou]ii$") and flex.na_indef_sg_f[i].."i" or flex.na_indef_pl_f[i].."i")
end
flex.gd_def_pl_m = fun(flex.na_indef_pl_m, function (x)
return x.."lor"
end)
flex.gd_def_pl_f = fun(flex.na_indef_pl_f, function (x)
return x.."lor"
end)
end
return flex
end
local function decl_sust(p, g, pl)
local flex = {}
flex.na_indef_sg = p
flex.na_indef_pl = #pl > 0 and pl or noun_make_na_indef_pl(p, g)
if g == "m" or g == "n" then
flex.gd_indef_sg = flex.na_indef_sg
flex.gd_indef_pl = flex.na_indef_pl
else
flex.gd_indef_sg = flex.na_indef_pl
flex.gd_indef_pl = flex.na_indef_pl
end
flex.na_def_sg = make_na_def_sg(p, g)
if g == "m" then
flex.na_def_pl = fun(flex.na_indef_pl, function (x)
return x.."i"
end)
else
flex.na_def_pl = fun(flex.na_indef_pl, function (x)
return x.."le"
end)
end
if g == "m" or g == "n" then
flex.gd_def_sg = fun(flex.na_def_sg, function (x)
return find(x, "e$") and sub(x, 1, -2).."ui" or x.."ui"
end)
else
if type(flex.na_indef_sg) == "string" then
flex.na_indef_sg = {flex.na_indef_sg}
end
if type(flex.na_indef_pl) == "string" then
flex.na_indef_pl = {flex.na_indef_pl}
end
flex.gd_def_sg = {}
for i=1, min(#flex.na_indef_sg, #flex.na_indef_pl) do
insert_if_not(flex.gd_def_sg, find(flex.na_indef_pl[i], "[^aăâeiîou]ii$") and flex.na_indef_sg[i].."i" or flex.na_indef_pl[i].."i")
end
end
flex.gd_def_pl = fun(flex.na_indef_pl, function (x)
return x.."lor"
end)
if g == "m" or g == "n" then
flex.voc_sg = find(p, "e$") and {p} or (find(p, "u$") and {p.."le"} or {p.."ule"})
else
if find(p, "ie$") then
flex.voc_sg = {p, gsub1(p, "e$", "o")}
elseif find(p, "ă$") then
flex.voc_sg = {p, gsub1(p, "ă$", "o")}
elseif find(p, "a$") then
flex.voc_sg = {p}
else
flex.voc_sg = {p, p.."o"}
end
end
flex.voc_pl = flex.gd_def_pl
return flex
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {por_defecto=""},
["ayuda"] = {por_defecto=title},
["title"] = {alias_de="ayuda"},
["i"] = {tipo="bool"},
["num"] = {por_defecto=""},
["núm"] = {alias_de="num"},
["def"] = {por_defecto=""},
["nota"] = {},
}
for form,_ in pairs(adj_lb) do
params[form] = {lista=true}
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
if find(args["ayuda"], "%s") then
error("locuciones no soportadas")
end
local decl = {}
local cats = {}
local enc = "regular"
local irr
local defect
local sg = find(args["num"], "s")
local pl = find(args["num"], "p")
local def = find(args["def"], "^def")
local indef = find(args["def"], "indef")
if find(args[1], "^in") then
for form,_ in pairs(adj_lb) do
decl[form] = {args["ayuda"]}
end
enc = "invariable"
insert(cats, "RO:Adjetivos invariables")
else
decl = decl_adj(args["ayuda"], args.i, find(args[1], "det"), args.na_indef_sg_f, args.na_indef_pl_m, args.na_indef_pl_f)
decl, irr = sobreescribir_formas(decl, args, false, {})
if irr then
enc = "irregular"
insert(cats, "RO:Adjetivos irregulares")
else
insert(cats, "RO:Adjetivos regulares")
end
local defect2 = comprobar_defectivo(decl)
if defect2 then
insert(cats, "RO:Adjetivos defectivos")
end
decl, defect = desactivar_formas(decl, function (x)
return (find(x, "pl") and sg) or (find(x, "sg") and pl) or (find(x, "_def") and indef) or (find(x, "indef") and def)
end)
if defect then
insert(cats, "RO:Adjetivos defectivos")
end
end
decl = agregar_enlaces(decl, title)
decl = formatear_formas(decl, adj_lb)
local t = {}
insert(t, {{""}, {"Masculino/neutro singular"}, {"Masculino/neutro plural"}, {"Femenino singular"}, {"Femenino plural"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Nom./acc. indefinido", header=true, color=COLOR_H}, decl.na_indef_sg_m, decl.na_indef_pl_m, decl.na_indef_sg_f, decl.na_indef_pl_f})
insert(t, {{"Nom./acc. definido", header=true, color=COLOR_H}, decl.na_def_sg_m, decl.na_def_pl_m, decl.na_def_sg_f, decl.na_def_pl_f})
insert(t, {{""}, {"Masculino singular"}, {"Masculino plural"}, {"Femenino/neutro singular"}, {"Femenino/neutro plural"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Gen./dat. indefinido", header=true, color=COLOR_H}, decl.gd_indef_sg_m, decl.gd_indef_pl_m, decl.gd_indef_sg_f, decl.gd_indef_pl_f})
insert(t, {{"Gen./dat. definido", header=true, color=COLOR_H}, decl.gd_def_sg_m, decl.gd_def_pl_m, decl.gd_def_sg_f, decl.gd_def_pl_f})
insert(t, args.nota)
return renderizar_tabla(
frame,
"'''Declinación de ''"..args["ayuda"].."'''''  ("..enc..")",
t,
cats
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
["ayuda"] = {por_defecto=title},
["title"] = {alias_de="ayuda"},
["i"] = {tipo="bool"},
["num"] = {por_defecto=""},
["núm"] = {alias_de="num"},
["def"] = {por_defecto=""},
["nota"] = {},
}
for form,_ in pairs(sust_lb) do
params[form] = {lista=true}
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
if find(title, "%s") then
error("locuciones no soportadas")
end
assert(args[1], "especifique el género en el primer parámetro")
local decl = {}
local cats = {}
local enc = "regular"
local irr
local defect
local sg = find(args["num"], "s")
local pl = find(args["num"], "p")
local def = find(args["def"], "^def")
local indef = find(args["def"], "indef")
if find(args[1], "^in") then
for form,_ in pairs(sust_lb) do
decl[form] = args["ayuda"]
end
enc = "invariable"
insert(cats, "RO:Sustantivos invariables")
else
decl = decl_sust(args["ayuda"], args[1], args.na_indef_pl)
decl, irr = sobreescribir_formas(decl, args, false, {})
if irr then
enc = "irregular"
insert(cats, "RO:Sustantivos irregulares")
else
insert(cats, "RO:Sustantivos regulares")
end
local defect2 = comprobar_defectivo(decl)
if defect2 then
insert(cats, "RO:Adjetivos defectivos")
end
decl, defect = desactivar_formas(decl, function (x)
return (find(x, "pl") and sg) or (find(x, "sg") and pl) or (find(x, "_def") and indef) or (find(x, "indef") and def)
end)
if defect then
insert(cats, "RO:Sustantivos defectivos")
end
end
decl = agregar_enlaces(decl, title)
decl = formatear_formas(decl, sust_lb)
local t = {}
insert(t, {{""}, {"Singular"}, {"Plural"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Nom./acc. indefinido", header=true, color=COLOR_H}, decl.na_indef_sg, decl.na_indef_pl})
insert(t, {{"Gen./dat. indefinido", header=true, color=COLOR_H}, decl.gd_indef_sg, decl.gd_indef_pl})
insert(t, {{"Nom./acc. definido", header=true, color=COLOR_H}, decl.na_def_sg, decl.na_def_pl})
insert(t, {{"Gen./dat. definido", header=true, color=COLOR_H}, decl.gd_def_sg, decl.gd_def_pl})
insert(t, {{"Vocativo", header=true, color=COLOR_H}, decl.voc_sg, decl.voc_pl})
insert(t, args.nota)
return renderizar_tabla(
frame,
"'''Declinación de ''"..args["ayuda"].."'''''  ("..enc..")",
t,
cats
)
end
local EU, TU, EL, NOI, VOI, EI = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"eu, io", "tu", "el, ea", "noi", "voi", "ei, ele"}
local PRONOMBRES_IMP = {"-", "(tu)", "-", "-", "(voi)", "-"}
local IMPERSONALES = {"", "", "(ăsta)", "", "", "(astea)"}
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers and impers ~= "" then
return IMPERSONALES[p]
else
if find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local formas_no_personales = {
["ger"] = true,
["part"] = true,
["inf"] = true,
}
local formas_personales = {
["pres"] = true,
["imp"] = true,
["perf"] = true,
["pluperf"] = true,
["imper"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local consonants_verb = {
["i_"] = {
{"[sș][ct]$", "șt"},
{"^d$", "z"},
{"^t$", "ț"},
{"([^șj])d$", "%1z"},
{"([^șj])t$", "%1ț"},
{"s$", "ș"},
{"x$", "cș"},
},
["i"] = {
{"[sș]c$", "șt"},
{"x$", "cș"},
},
["e"] = {
{"[sș]c$", "șt"},
},
}
local consonants_23_verb = {
["i_"] = {
{"^n$", ""},
},
["u"] = {
{"^d$", "z"},
},
["â"] = {
{"d$", "z"},
-- {"t$", "ț"}, -- inconsistent
}
}
-- stressed stems for null, ă, e and i endings
-- the given stems should not include the unstressed stem (unless it happens to
-- coincide with one of the other forms)
local vow_changes = {
-- sort order: aeiouâîă
["a-e"] = { -- zbiera/așeza, a variant of e-ea below
["-"] = "e",
["ă"] = "a",
["e"] = "e",
["i"] = "e",
},
["a-e-ă"] = { -- spăla
["-"] = "ă",
["ă"] = "a",
["e"] = "e",
["i"] = "e",
},
["a-ă"] = { -- arăta
["-"] = "ă",
["ă"] = "a",
["e"] = "a",
["i"] = "ă",
},
["e-ea"] = { -- încerca
["-"] = "e",
["ă"] = "ea",
["e"] = "e",
["i"] = "e",
},
["e-ea-2"] = { -- lepăda
["-"] = {"e", "ea"},
["ă"] = "ea",
["e"] = "e",
["i"] = "e",
},
["e-ă"] = { -- supăra
["-"] = "ă",
["ă"] = "ă",
["e"] = "e",
["i"] = "e",
},
["i-â"] = { -- vinde (might be the only one)
["-"] = "â",
["ă"] = "â",
["e"] = "i",
["i"] = "i",
},
["o-oa"] = { -- toca
["-"] = "o",
["ă"] = "oa",
["e"] = "oa",
["i"] = "o",
},
}
local segunda_conjugacion = {
"avea$",
"^bea$",
"cădea$",
"căpea$",
"durea$",
"mânea$",
"părea$",
"plăcea$",
"putea$",
"ședea$",
"tăcea$",
"ținea$",
"vedea$",
"vrea$",
"zăcea$",
"zbea$"
}
-- format: conj = {lemma, stems, stem}
local template_defaults = {
["a"] = {"aduna"},
["a-ez"] = {"lucra"},
["i"] = {"dormi", "dorm/doarm"},
["i-esc"] = {"munci"},
["î"] = {"coborî", "cobor/coboar"},
["î-ăsc"] = {"hotărî"},
["e-s"] = {"ajunge"},
["e-t"] = {"sparge", "sparg", "spărg"},
["e-pt"] = {"rupe"},
["e-ut"] = {"trece", "trec/treac"},
["ea-ut"] = {"cădea", "cad"},
}
local function split_svc(word)
local stem, vow, cons
if match(word, "[" .. vowels .. "][iu]$") then
stem, vow, cons = match(word, "^(.-)([" .. vowels .. "]-)([iu])$")
else
stem, vow, cons = match(word, "^(.-)([" .. vowels .. "]-)([^" .. vowels .. "]-)$")
end
return stem, vow, cons
end
local function split_vow(vow)
local pre, post = "", ""
if len(vow) > 1 then
pre, vow, post = match(vow, "^([iu]?)(.-)([iu]?)$")
end
return pre, vow, post
end
-- todo: somehow account for hiatus (deochea)
local function get_vow_changes(words, result)
local all_dupes = true
for _, val in ipairs(words) do
if val ~= words[1] then
all_dupes = false
break
end
end
if all_dupes then
insert(result, words[1])
return
else
local split_words = {}
for _, val in ipairs(words) do
if val == "" then
error("Cannot match stems, should only have different vowels")
end
local stem, pre, vow, post, cons
local res = {}
stem, vow, cons = split_svc(val)
pre, vow, post = split_vow(vow)
insert(res, stem)
insert(res, pre)
insert(res, vow)
insert(res, post)
insert(res, cons)
insert(split_words, res)
end
local vowel_appearances, found_vowels = {}, {}
for i, val in ipairs(split_words) do
-- compare pre-vowel, post-vowel, cons
if val[5] ~= split_words[1][5] then
error("Stems differ in something other than main vowels: "
.. words[1] .. ", " .. words[i] .. ", "
.. (val[5] or "fjdfl") .. ", " .. (split_words[1][5] or " fda"))
end
if val[4] ~= split_words[1][4] then
error("Stems differ in something other than main vowels: "
.. words[1] .. ", " .. words[i] .. ", "
.. val[4] .. ", " .. split_words[1][4])
end
if val[2] ~= split_words[1][2] then
error("Stems differ in something other than main vowels: "
.. words[1] .. ", " .. words[i] .. ", "
.. val[2] .. ", " .. split_words[1][2])
end
-- add the vowel
vowel_appearances[val[3]] = true
end
for vow, _ in pairs(vowel_appearances) do
insert(found_vowels, vow)
end
sort(found_vowels)
-- replace words with stems
for key, _ in ipairs(words) do
words[key] = split_words[key][1]
end
get_vow_changes(words, result)
-- join pre-vowel to last consonant
result[#result] = result[#result] .. split_words[1][2]
-- add all the vowel variations
insert(result, concat(found_vowels, "-"))
-- add post-vowel + last cons
insert(result, split_words[1][4] .. split_words[1][5])
return
end
end
-- given a comma-separated list of slash-separated lists of stems
-- get a list of stems for each ending
local function get_stems(stems, inf_stem)
local stem_types = {"-", "ă", "e", "i"}
local res = {}
for _, stype in ipairs(stem_types) do
res[stype] = {}
end
if not stems then
local stem = inf_stem
for _, val in ipairs(stem_types) do
res[val] = stem
end
else
local stem_lists = split(stems, " *; *")
for _, stem_set in ipairs(stem_lists) do
-- make a new resi table to hold all the stems
local resi = {}
local stems2, stem_parts = split(stem_set, " */ *"), {}
get_vow_changes(stems2, stem_parts)
for _, stype in ipairs(stem_types) do
resi[stype] = {""}
for i = 1, #stem_parts, 2 do
for j, _ in ipairs(resi[stype]) do
resi[stype][j] = resi[stype][j] .. stem_parts[i]
end
-- which syllable this is, counting from the end
local syln = (#stem_parts - i) / 2
if stem_parts[i + 1] then
local vc = vow_changes[stem_parts[i + 1] .. "-" .. syln]
or vow_changes[stem_parts[i + 1]]
if not vc then
-- no vowel alternation found for these vowels
if not find(stem_parts[i + 1], "%-") then
-- there's only one vowel, so use it
for k, stem in ipairs(resi[stype]) do
resi[stype][k] = stem .. stem_parts[i + 1]
end
else
-- multiple vowels not matching a known vowel alternation
error(stem_parts[i + 1] ..
" is not a valid vowel change")
end
elseif type(vc[stype]) == "string" then
-- only one vowel can be used with that ending
for k, stem in ipairs(resi[stype]) do
resi[stype][k] = stem .. vc[stype]
end
elseif type(vc[stype]) == "table" then
-- multiple vowels for that ending, so make a copy
-- of the partial stem for each one
local copy = resi[stype]
resi[stype] = {}
for _, vow in ipairs(vc[stype]) do
for _, stem in ipairs(copy) do
insert(resi[stype], stem .. vow)
end
end
end
end
end
end
-- add only the stems that are not already in res
for _, stype in ipairs(stem_types) do
for _, stemi in ipairs(resi[stype]) do
local is_new = true
for _, stem in ipairs(res[stype]) do
if stem == stemi then
is_new = false
break
end
end
if is_new then
insert(res[stype], stemi)
end
end
end
end
end
return res
end
local function find_cons_verb(cons, mode, conj_23, vow)
local n
-- ugly hack
if conj_23 and mode == "â" and cons == "t"
and find(vow, "[eio]$") then
cons = "ț"
return cons
end
if conj_23 and consonants_23_verb[mode] then
for _, p in ipairs(consonants_23_verb[mode]) do
cons, n = gsub(cons, p[1], p[2], 1)
if n >= 1 then
return cons
end
end
end
if consonants_verb[mode] then
for _, p in pairs(consonants_verb[mode]) do
cons, n = gsub(cons, p[1], p[2], 1)
if n >= 1 then
return cons
end
end
end
return cons
end
-- common for both functions below
local join_ending_common = function(stem, ending)
ending = ending or ""
local res = {}
if type(stem) == "string" then
stem = {stem}
end
for _, s in ipairs(stem) do
if ending == "" then
if match(s, "[cg]h$") or match(s, "[^" .. vowels .. "]i$") then
insert(res, s .. "i")
elseif match(s, "[^" .. vowels .. "][lr]$") then
insert(res, s .. "u")
end
elseif match(s, "[cg]h$") then
if match(ending, "^a") then
insert(res, s .. "e" .. ending)
elseif match(ending, "^ă") then
insert(res, s .. gsub(ending, "^ă", "e"))
elseif match(ending, "^[âî]") then
insert(res, s .. gsub(ending, "^[âî]", "i"))
end
elseif match(s, "i$") then
if match(ending, "^ă") then
insert(res, s .. gsub(ending, "^ă", "e"))
elseif match(ending, "^ea") then
insert(res, s .. gsub(ending, "^e", ""))
elseif match(ending, "^[âi]") then
if match(s, "[" .. vowels .. "]i$") then
insert(res, s .. gsub(ending, "^[âi]", ""))
else
insert(res, s .. gsub(ending, "^[âi]", "i"))
end
end
end
end
return res
end
-- no consonant change
local join_ending_2 = function(stem, ending)
ending = ending or ""
local res = join_ending_common(stem, ending)
if #res == 0 then
if type(stem) == "string" then
stem = {stem}
end
for _, s in ipairs(stem) do
if match(ending, "^[ei]") and match(s, "[cg]$") then
insert(res, s .. "h" .. ending)
else
insert(res, s .. ending)
end
end
end
for i, form in ipairs(res) do
res[i] = match(form, "^(.-)_?$")
end
return res
end
-- consonant change
local join_ending = function(stem, ending, conj_23)
ending = ending or ""
local res = join_ending_common(stem, ending)
if #res == 0 then
if type(stem) == "string" then
stem = {stem}
end
for _, s in ipairs(stem) do
if match(ending, "^[ei]") or (conj_23 and match(ending, "^[uâ]")) then
local st, vow, cons = split_svc(s)
local ending_vow = ending == "i_" and "i_" or sub(ending, 1, 1)
cons = find_cons_verb(cons, ending_vow, conj_23, vow)
insert(res, st .. vow .. cons .. ending)
else
insert(res, s .. ending)
end
end
end
for i, form in ipairs(res) do
res[i] = match(form, "^(.-)_?$")
end
return res
end
local add_form = function(t, name, new_form)
if type(new_form) == "string" then
new_form = {new_form}
end
if not t[name] then
t[name] = {}
end
for _,e in ipairs(new_form) do
insert_if_not(t[name], e)
end
end
local add_repeated_forms_new = function(t)
add_form(t, "imp1", join_ending(t.impf_stem, "am"))
add_form(t, "imp2", join_ending(t.impf_stem, "ai"))
add_form(t, "imp3", join_ending(t.impf_stem, "a"))
add_form(t, "imp4", join_ending(t.impf_stem, "am"))
add_form(t, "imp5", join_ending(t.impf_stem, "ați"))
add_form(t, "imp6", join_ending(t.impf_stem, "au"))
add_form(t, "pluperf1", join_ending(t.plup_stem, "sem"))
add_form(t, "pluperf2", join_ending(t.plup_stem, "seși"))
add_form(t, "pluperf3", join_ending(t.plup_stem, "se"))
add_form(t, "pluperf4", join_ending(t.plup_stem, "serăm"))
add_form(t, "pluperf5", join_ending(t.plup_stem, "serăți"))
add_form(t, "pluperf6", join_ending(t.plup_stem, "seră"))
add_form(t, "subj1", deepcopy(t.pres1))
add_form(t, "subj2", deepcopy(t.pres2))
add_form(t, "subj4", deepcopy(t.pres4))
add_form(t, "subj5", deepcopy(t.pres5))
add_form(t, "subj6", deepcopy(t.subj3))
add_form(t, "imper5", deepcopy(t.pres5))
end
local conjugations_new = {}
conjugations_new["a"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before ă ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before i ending
if not ppstem or #ppstem == 0 then
ppstem = stem
end
add_form(t, "ger", join_ending(stem, "ând"))
add_form(t, "part", join_ending(ppstem, "at"))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_"))
add_form(t, "pres3", join_ending(stem_ah, "ă"))
add_form(t, "pres4", join_ending(stem, "ăm"))
add_form(t, "pres5", join_ending(stem, "ați"))
add_form(t, "pres6", deepcopy(t.pres3))
t.impf_stem = stem
add_form(t, "perf1", join_ending(ppstem, "ai"))
add_form(t, "perf2", join_ending(ppstem, "ași"))
add_form(t, "perf3", join_ending(ppstem, "ă"))
add_form(t, "perf4", join_ending(ppstem, "arăm"))
add_form(t, "perf5", join_ending(ppstem, "arăți"))
add_form(t, "perf6", join_ending(ppstem, "ară"))
t.plup_stem = join_ending(ppstem, "a")
add_form(t, "subj3", join_ending(stem_e, "e"))
add_form(t, "imper2", deepcopy(t.pres3))
end
conjugations_new["a-ez"] = function(t, stem, stems, ppstem)
local stem = stem
local stem_ez = join_ending_2(stem, "ez")
local stem_eaz = join_ending_2(stem, "eaz")
conjugations_new["a"](t, stem, {["-"] = stem_ez,
["ă"] = stem_eaz,
["e"] = stem_ez,
["i"] = stem_ez}, ppstem)
end
conjugations_new["i"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before ă ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before i ending
if not ppstem or #ppstem == 0 then
ppstem = stem
end
add_form(t, "ger", join_ending(stem, "ind"))
add_form(t, "part", join_ending(ppstem, "it"))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_"))
add_form(t, "pres3", join_ending(stem_e, "e"))
add_form(t, "pres4", join_ending(stem, "im"))
add_form(t, "pres5", join_ending(stem, "iți"))
-- todo: this is probably based on stress
add_form(t, "pres6", deepcopy(match(type(stem_) == "table" and stem_[1] or stem_, "[" .. vowels .. "]i$"))
and t.pres3 or t.pres1)
t.impf_stem = tsub(join_ending(stem, "ea"), 1, -2)
add_form(t, "perf1", join_ending(ppstem, "ii"))
add_form(t, "perf2", join_ending(ppstem, "iși"))
add_form(t, "perf3", join_ending(ppstem, "i"))
add_form(t, "perf4", join_ending(ppstem, "irăm"))
add_form(t, "perf5", join_ending(ppstem, "irăți"))
add_form(t, "perf6", join_ending(ppstem, "iră"))
t.plup_stem = join_ending(ppstem, "i")
add_form(t, "subj3", join_ending(stem_ah, "ă"))
add_form(t, "imper2", deepcopy(t.pres3))
end
conjugations_new["i-esc"] = function(t, stem, stems, ppstem)
local stem = stem
local stem_esc = join_ending(stem, "esc")
local stem_easc = join_ending(stem, "easc")
conjugations_new["i"](t, stem, {["-"] = stem_esc,
["ă"] = stem_easc,
["e"] = stem_esc,
["i"] = stem_esc}, ppstem)
end
conjugations_new["î"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before ă ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before i ending
if not ppstem or #ppstem == 0 then
ppstem = stem
end
add_form(t, "ger", join_ending(stem, "ând"))
add_form(t, "part", join_ending(ppstem, "ât"))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_"))
add_form(t, "pres3", join_ending(stem_ah, "ă"))
add_form(t, "pres4", join_ending(stem, "âm"))
add_form(t, "pres5", join_ending(stem, "âți"))
-- todo: change this
add_form(t, "pres6", deepcopy(t.pres3))
t.impf_stem = stem
add_form(t, "perf1", join_ending(ppstem, "âi"))
add_form(t, "perf2", join_ending(ppstem, "âși"))
add_form(t, "perf3", join_ending(ppstem, "î"))
add_form(t, "perf4", join_ending(ppstem, "ârăm"))
add_form(t, "perf5", join_ending(ppstem, "ârăți"))
add_form(t, "perf6", join_ending(ppstem, "âră"))
t.plup_stem = join_ending(ppstem, "â")
add_form(t, "subj3", join_ending(stem_e, "e"))
add_form(t, "imper2", deepcopy(t.pres3))
end
conjugations_new["î-ăsc"] = function(t, stem, stems, ppstem)
local stem = stem
local stem_ = join_ending(stem, "ăsc") -- stressed stem before zero ending
local stem_ah = join_ending(stem, "asc") -- stressed stem before ă ending
local stem_e = stem_ -- stressed stem before e ending
local stem_i = stem_ -- stressed stem before i ending
if not ppstem or #ppstem == 0 then
ppstem = stem
end
add_form(t, "ger", join_ending(stem, "ând"))
add_form(t, "part", join_ending(ppstem, "ât"))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_"))
add_form(t, "pres3", join_ending(stem_e, "e"))
add_form(t, "pres4", join_ending(stem, "âm"))
add_form(t, "pres5", join_ending(stem, "âți"))
add_form(t, "pres6", deepcopy(t.pres1))
t.impf_stem = stem
add_form(t, "perf1", join_ending(ppstem, "âi"))
add_form(t, "perf2", join_ending(ppstem, "âși"))
add_form(t, "perf3", join_ending(ppstem, "î"))
add_form(t, "perf4", join_ending(ppstem, "ârăm"))
add_form(t, "perf5", join_ending(ppstem, "ârăți"))
add_form(t, "perf6", join_ending(ppstem, "âră"))
t.plup_stem = join_ending(ppstem, "â")
add_form(t, "subj3", join_ending(stem_ah, "ă"))
add_form(t, "imper2", deepcopy(t.pres3))
end
conjugations_new["e-s"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before i ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before ă ending
local pp_stem = tsub(stem, 1, -2)
local pp_stem_ = tsub(stem_, 1, -2)
local pp_stem_e = tsub(stem_e, 1, -2)
if type(ppstem) == "string" or type(ppstem) == "table" and #ppstem > 0 then -- parche para [[scrie]]
pp_stem = ppstem
pp_stem_ = ppstem
pp_stem_e = ppstem
end
add_form(t, "ger", join_ending(stem, "ând", true))
add_form(t, "part", join_ending(pp_stem_, "s"))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_", true))
add_form(t, "pres3", join_ending(stem_e, "e"))
add_form(t, "pres4", join_ending(stem_e, "em"))
add_form(t, "pres5", join_ending(stem_e, "eți"))
add_form(t, "pres6", deepcopy(t.pres1))
t.impf_stem = tsub(join_ending(stem, "ea"), 1, -2)
add_form(t, "perf1", join_ending(pp_stem, "sei"))
add_form(t, "perf2", join_ending(pp_stem, "seși"))
add_form(t, "perf3", join_ending(pp_stem_e, "se"))
add_form(t, "perf4", join_ending(pp_stem_e, "serăm"))
add_form(t, "perf5", join_ending(pp_stem_e, "serăți"))
add_form(t, "perf6", join_ending(pp_stem_e, "seră"))
t.plup_stem = join_ending(pp_stem, "se")
add_form(t, "subj3", join_ending(stem_ah, "ă"))
add_form(t, "imper2", deepcopy(t.pres3))
end
-- same as e-s except for the past participle
conjugations_new["e-t"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before i ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before ă ending
local pp_stem = tsub(stem, 1, -2)
local pp_stem_ = tsub(stem_, 1, -2)
local pp_stem_e = tsub(stem_e, 1, -2)
if type(ppstem) == "string" or type(ppstem) == "table" and #ppstem > 0 then -- parche para [[scrie]]
pp_stem = ppstem
pp_stem_ = ppstem
pp_stem_e = ppstem
end
add_form(t, "ger", join_ending(stem, "ând", true))
add_form(t, "part", join_ending(pp_stem_, "t"))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_", true))
add_form(t, "pres3", join_ending(stem_e, "e"))
add_form(t, "pres4", join_ending(stem_e, "em"))
add_form(t, "pres5", join_ending(stem_e, "eți"))
add_form(t, "pres6", deepcopy(t.pres1))
t.impf_stem = tsub(join_ending(stem, "ea"), 1, -2)
add_form(t, "perf1", join_ending(pp_stem, "sei"))
add_form(t, "perf2", join_ending(pp_stem, "seși"))
add_form(t, "perf3", join_ending(pp_stem_e, "se"))
add_form(t, "perf4", join_ending(pp_stem_e, "serăm"))
add_form(t, "perf5", join_ending(pp_stem_e, "serăți"))
add_form(t, "perf6", join_ending(pp_stem_e, "seră"))
t.plup_stem = join_ending(pp_stem, "se")
add_form(t, "subj3", join_ending(stem_ah, "ă"))
add_form(t, "imper2", deepcopy(t.pres3))
end
conjugations_new["e-pt"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before i ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before ă ending
local pp_stem = tsub(stem, 1, -2)
local pp_stem_ = tsub(stem_, 1, -2)
local pp_stem_e = tsub(stem_e, 1, -2)
if type(ppstem) == "string" or type(ppstem) == "table" and #ppstem > 0 then -- parche para [[scrie]]
pp_stem = ppstem
pp_stem_ = ppstem
pp_stem_e = ppstem
end
add_form(t, "ger", join_ending(stem, "ând", true))
add_form(t, "part", join_ending(pp_stem_, "pt"))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_", true))
add_form(t, "pres3", join_ending(stem_e, "e"))
add_form(t, "pres4", join_ending(stem_e, "em"))
add_form(t, "pres5", join_ending(stem_e, "eți"))
add_form(t, "pres6", deepcopy(t.pres1))
t.impf_stem = tsub(join_ending(stem, "ea"), 1, -2)
add_form(t, "perf1", join_ending(pp_stem, "psei"))
add_form(t, "perf2", join_ending(pp_stem, "pseși"))
add_form(t, "perf3", join_ending(pp_stem_e, "pse"))
add_form(t, "perf4", join_ending(pp_stem_e, "pserăm"))
add_form(t, "perf5", join_ending(pp_stem_e, "pserăți"))
add_form(t, "perf6", join_ending(pp_stem_e, "pseră"))
t.plup_stem = join_ending(pp_stem, "pse")
add_form(t, "subj3", join_ending(stem_ah, "ă"))
add_form(t, "imper2", deepcopy(t.pres3))
end
conjugations_new["e-ut"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before i ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before ă ending
if not ppstem or #ppstem == 0 then
ppstem = stem
end
add_form(t, "ger", join_ending(stem, "ând", true))
add_form(t, "part", join_ending(ppstem, "ut", true))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_", true))
add_form(t, "pres3", join_ending(stem_e, "e"))
add_form(t, "pres4", join_ending(stem_e, "em"))
add_form(t, "pres5", join_ending(stem_e, "eți"))
add_form(t, "pres6", deepcopy(t.pres1))
t.impf_stem = tsub(join_ending(stem, "ea"), 1, -2)
add_form(t, "perf1", join_ending(ppstem, "ui", true))
add_form(t, "perf2", join_ending(ppstem, "uși", true))
add_form(t, "perf3", join_ending(ppstem, "u", true))
add_form(t, "perf4", join_ending(ppstem, "urăm", true))
add_form(t, "perf5", join_ending(ppstem, "urăți", true))
add_form(t, "perf6", join_ending(ppstem, "ură", true))
t.plup_stem = join_ending(ppstem, "u", true)
add_form(t, "subj3", join_ending(stem_ah, "ă"))
add_form(t, "imper2", deepcopy(t.pres3))
end
conjugations_new["ea-ut"] = function(t, stem, stems, ppstem)
local stem = stem -- unstressed stem
local stem_ = stems["-"] or stem -- stressed stem before zero ending
local stem_ah = stems["ă"] or stem -- stressed stem before i ending
local stem_e = stems["e"] or stem -- stressed stem before e ending
local stem_i = stems["i"] or stem -- stressed stem before ă ending
if not ppstem or #ppstem == 0 then
ppstem = stem
end
add_form(t, "ger", join_ending(stem, "ând", true))
add_form(t, "part", join_ending(ppstem, "ut", true))
add_form(t, "pres1", join_ending(stem_, ""))
add_form(t, "pres2", join_ending(stem_i, "i_", true))
add_form(t, "pres3", join_ending(stem_e, "e"))
add_form(t, "pres4", join_ending(stem, "em"))
add_form(t, "pres5", join_ending(stem, "eți"))
add_form(t, "pres6", deepcopy(t.pres1))
t.impf_stem = tsub(join_ending(stem, "ea"), 1, -2)
add_form(t, "perf1", join_ending(ppstem, "ui", true))
add_form(t, "perf2", join_ending(ppstem, "uși", true))
add_form(t, "perf3", join_ending(ppstem, "u", true))
add_form(t, "perf4", join_ending(ppstem, "urăm", true))
add_form(t, "perf5", join_ending(ppstem, "urăți", true))
add_form(t, "perf6", join_ending(ppstem, "ură", true))
t.plup_stem = join_ending(ppstem, "u", true)
add_form(t, "subj3", join_ending(stem_ah, "ă"))
add_form(t, "imper2", deepcopy(t.pres3))
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {},
["nucleoperf"] = {por_defecto = ""},
["núcleoperf"] = {alias_de = "nucleoperf"},
["tipo"] = {},
["impersonal"] = {por_defecto = ""},
["impers"] = {alias_de = "impersonal"},
["paradigma"] = {lista = true}, -- sin uso
["nota"] = {},
["aux"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local v = tit
assert(not find(v, " "), "locuciones no soportadas")
local sufijo_inf
local paradigmas_reconocidos = {} -- sin uso
local es_irregular
local es_inco
local es_puro
local conjinfo = {}
for _,rx in ipairs(segunda_conjugacion) do
if find(v, rx) then
conjinfo.sufijo_inf = "ea"
end
end
if not conjinfo.sufijo_inf then
conjinfo.sufijo_inf = match(v, "[aeiî]$")
end
assert(conjinfo.sufijo_inf, "forma canónica no reconocida")
sufijo_inf = conjinfo.sufijo_inf
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
if not conjinfo.nucleo_inf then
conjinfo.nucleo_inf = sub(v, 1, max(len(v) - len(conjinfo.sufijo_inf), 0))
end
conjinfo.prefijo = "" -- por ahora sin uso
local stems = get_stems(args[1], conjinfo.nucleo_inf)
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
if not args.tipo then
args.tipo = conjinfo.sufijo_inf
end
if args.tipo == "e" then
args.tipo = "e-s"
elseif args.tipo == "ea" then
args.tipo = "ea-ut"
end
if find(args.tipo, "sc") or find(args.tipo, "ez") then
es_inco = true
else
es_puro = true
end
if args[1] or args[2] or args.nucleoperf ~= "" then
es_irregular = true
end
conjugations_new[args.tipo](conjugado, args[2] and split(args[2], " */ *") or conjinfo.nucleo_inf, stems, split(args.nucleoperf, " *; *"))
add_repeated_forms_new(conjugado)
conjugado.inf = {v}
local resultante, irr = sobreescribir_formas(conjugado, args)
es_irregular = es_irregular or irr
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
resultante = agregar_enlaces(resultante, tit)
local es_impersonal = args["impersonal"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, es_impersonal)
end)
local impers = args["impersonal"]
local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_imper, mostrar_imper
if impers == "3" then
fila_pronombres_ind = {"", "(ăsta)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_imper = {"", "(ăsta)", color=COLOR_IMPER, header=true, class="pc"}
cs = 2
elseif impers == "36" then
fila_pronombres_ind = {"", "(ăsta)", "(astea)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_imper = {"", "(ăsta)", "(astea)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_ind = {"", "eu, io", "tu", "el, ea", "noi", "voi", "ei, ele", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tu)", "―", "―", "(voi)", "―", color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = math.floor((cs-1) / 2)
cs2 = cs - 1 - cs1
local t = {}
t[1] = {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true}
if impers == "3" then
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
else
resultante.inf.colspan = cs - 1
resultante.ger.colspan = cs - 1
resultante.part.colspan = cs - 1
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
t[5] = {{"Formas personales", colspan=cs}, color=COLOR_H, 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}, ic("pres")}
t[9] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("imp")}
t[10] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("perf")}
t[11] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("pluperf")}
t[12] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true}
t[13] = fila_pronombres_imper
if mostrar_imper then
t[14] = {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")}
else
t[14] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}}
end
t[15] = {{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[16] = {{args["nota"] and args["nota"] or "", colspan=cs}}
local cats = {}
local enc = {}
if not es_inco and not es_puro then
es_puro = true
end
if sufijo_inf == "a" then
insert(cats, "RO:Verbos de la primera conjugación")
insert(enc, "primera conjugación")
if es_inco then
insert(cats, "RO:Verbos incoativos")
insert(enc, "incoativo")
end
if es_puro then
insert(cats, "RO:Verbos puros")
insert(enc, "puro")
end
elseif sufijo_inf == "ea" then
insert(cats, "RO:Verbos de la segunda conjugación")
insert(enc, "segunda conjugación")
elseif sufijo_inf == "e" then
insert(cats, "RO:Verbos de la tercera conjugación")
insert(enc, "tercera conjugación")
elseif sufijo_inf == "i" or sufijo_inf == "î" then
insert(cats, "RO:Verbos de la cuarta conjugación")
insert(enc, "cuarta conjugación")
if es_inco then
insert(cats, "RO:Verbos incoativos")
insert(enc, "incoativo")
end
if es_puro then
insert(cats, "RO:Verbos puros")
insert(enc, "puro")
end
end
if es_irregular then
insert(cats, "RO:Verbos irregulares")
insert(enc, "irregular")
else
insert(cats, "RO:Verbos regulares")
insert(enc, "regular")
end
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "RO:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "RO:Verbos terciopersonales")
end
if defectivo then
insert(cats, "RO:Verbos defectivos")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''   ("..concat(enc, ", ")..")",
t,
ns == 0 and cats or {})
end
return export
r2cgy8lujepptmm8bxvhsznx8tvu24v
Categoría:ES:Sustantivos invariables en género
14
1059329
6118158
6117326
2026-06-16T02:13:05Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:ES:Sustantivos invariantes en género]] a [[Categoría:ES:Sustantivos invariables en género]] sin dejar una redirección: obsoleta
5868563
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Categoría:FR:Sustantivos invariables en género
14
1059331
6118155
6117323
2026-06-16T02:12:47Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:FR:Sustantivos invariantes en género]] a [[Categoría:FR:Sustantivos invariables en género]] sin dejar una redirección: obsoleta
5868565
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
moto acuática
0
1059517
6118072
5882093
2026-06-15T16:51:21Z
~2026-34597-22
183061
imagen
6118072
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}
==== {{locución|es|sustantivo|femenino}} ====
{{es.sust|cop=s}}
[[File:Two girls on a personal water craft - Yuba Lake 2000.jpg|thumb|[1]]]
;1: {{ucf|embarcación}} [[acuático|acuática]] individual o biplaza, ligera y a motor con un sistema de motorización similar al de una [[motocicleta]] convencional.
{{sinónimo|moto de agua|moto náutica}}
==== Véase también ====
{{W}}
==== Traducciones ====
{{trad-arriba}}
{{t|it|t1=modo d'acqua}}
{{t|en|t1=jet ski}}
{{t|fr|t1=motomarine}}
{{t|pt|t1=moto aquática}}
{{trad-abajo}}
== Referencias y notas ==
<references />
cup5s6hwrp8yh1dai5i6p6t5obchg8q
Módulo:flex/yua
828
1059887
6118185
6077010
2026-06-16T02:18:50Z
TMCbot
164594
.
6118185
Scribunto
text/plain
-- FLEXIÓN DEL MAYA YUCATECO
-- Autor: Tmagc
-- basado en las indicaciones de 26agcp
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local list_to_set = m_table.listToSet
local keys_to_list = m_table.keysToList
local insert_if_not = m_table.insertIfNot
local deep_copy = m_table.deepCopy
local contains = m_table.contains
local append = m_table.append
local merge = m_table.merge
local m_str = require("Módulo:string")
local u = m_str.char
local match = m_str.match
local sub = m_str.sub
local gsub = m_str.gsub
local gsubb = m_str.gsubb
local split = m_str.split
local gsplit = m_str.gsplit
local find = m_str.find
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local separar_palabras = m_flex.separar_palabras
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local desactivar_formas = m_flex.desactivar_formas
local agregar_enlaces = m_flex.agregar_enlaces
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local apostrofe = "'ʼꞌꞋ’" -- son distintos
local APOSTROFE = "["..apostrofe.."]"
local divsil = "%-"
local separador = "%s"..divsil
local SEPARADOR = "[" .. separador .. "]"
local vocales = "aeiouáéíóúàèìòùüýAEIOUÁÉÍÓÚÀÈÌÒÙÜÝ"
local vocales_tildadas = "áéíóúàèìòùüýÁÉÍÓÚÀÈÌÒÙÜÝ"
local VOCAL = "["..vocales.."]"
local VOCAL_TILDADA = "["..vocales_tildadas.."]"
local ESPACIO = "%s"
local guion = "%-"
local consonantes = "bcdfghjklmnñpqrstvwxyzBCDFGHJKLMNÑPQRSTVWXYZ"
local CONS = "[^"..vocales..separador.."]" -- tomo el complemento, asumo que el apóstrofe es consonante
local LETRA = "[^"..separador.."]"
local function flexionar_palabra(p, sust_adj)
local r, a, b
if find(p, VOCAL.."$") then
return {s={p}, p={}}
end
if sust_adj == "sust" then
r, a = match(p, "^(.*)("..VOCAL..APOSTROFE..")$")
if a then
return {s={r.."~"..a.."~"}, p={r.."~"..a.."ob~"}}
end
r, a = match(p, "^(.*)(.)$")
return {s={r.."~"..a.."~"}, p={r.."~"..a.."oʼob~"}}
else
r, a, b = match(p, "^(.*)("..VOCAL..")("..APOSTROFE..")$")
if a then
return {s={r.."~"..a..b.."~"}, p={r.."~"..a..b..a.."tak~", r.."~"..a..b..a.."takoʼob~"}}
end
r, a = match(p, "^(.*)(.)$")
return {s={r.."~"..a.."~"}, p={r.."~"..a.."tak~", r.."~"..a.."takoʼob~"}}
end
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
end
local flex_ = flexionar_palabra(title, args["cg"])
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
flex.p = {}
elseif modo and sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
flex.p = {}
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.s[1]),
enc,
args["n"],
{{"plural", flex.p},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de = "p"},
["alt"] = {},
["s"] = {lista = true},
["p"] = {lista = true},
["plural"] = {alias_de = "p"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
args["cg"] = "sust"
return formatear_sust_adj(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "YUA:Locuciones sustantivas" or "YUA:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de = "p"},
["alt"] = {},
["s"] = {lista = true},
["p"] = {lista = true},
["plural"] = {alias_de = "p"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
args["cg"] = "adj"
return formatear_sust_adj(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "YUA:Locuciones adjetivas" or "YUA:Adjetivos")
end
local TEEN, TEECH, LETI, TOON, TEEX, LETIOB = 1, 2, 3, 4, 5, 6
local PRONOMBRES = {"(teen)", "(teech)", "(letiʼ)", "(toʼon)", "(teʼex)", "(letiʼob)"}
local tostr = {"1", "2", "3", "4", "5", "6"}
local quitar_tilde = {
["á"] = "a",
["é"] = "e",
["í"] = "i",
["ó"] = "o",
["ú"] = "u",
["ü"] = "u",
["ý"] = "y",
["a"] = "a",
["e"] = "e",
["i"] = "i",
["o"] = "o",
["u"] = "u",
["y"] = "y"
}
local formas_no_personales = {
inf = true,
part = true
}
local formas_personales = {
-- formas intransitivas
inc = true,
com = true,
res = true,
subj = true,
-- formas transitivas
inc_act = true,
com_act = true,
res_act = true,
subj_act = true,
inc_pas = true,
com_pas = true,
res_pas = true,
subj_pas = true,
--
imper = true,
}
local formas = merge(formas_no_personales, formas_personales)
local prefijos = {
tr = {
inf = {""},
part = {""},
inc_act = {"kin ","ka ","ku ","k ","ka ","ku ",
nil,nil,nil,"kin "
},
com_act = {"tin ","ta ","tu ","t(k) ","ta ","tu ",
nil,nil,nil,"tin ","ta ","tu ",
nil,nil,nil,"tin "
},
res_act = {"in ","a ","u ","k ","a ","u ",
nil,nil,nil,"in ","a ","u ",
nil,nil,nil,"in "
},
subj_act = {"in ","a ","u ","k ","a ","u ",
nil,nil,nil,"in "
},
inc_pas = {"kin ","ka ","ku ","k ","ka ","ku ",
nil,nil,nil,"kin "
},
com_pas = {"(j)","(j)","(j)","(j)","(j)","(j)"},
res_pas = {"","","","","",""},
subj_pas = {"","","","","",""},
imper = {nil,"",nil,nil,"",nil},
},
intr = {
inf = {""},
part = {nil},
inc = {"kin ","ka ","ku ","k ","ka ","ku ",
nil,nil,nil,"kin "
},
com = {"(j)","(j)","(j)","(j)","(j)","(j)"},
res = {"","","","","",""},
subj = {"","","","","",""},
imper = {nil,"",nil,nil,"",nil},
}
}
local sufijos = {
tr = {
inf = {"ik"},
part = {"bil"},
inc_act = {"ik","ik","ik","ik","ikeʼex","ikoʼob",
nil,nil,nil,"ikoʼon{OTE}"
},
com_act = {"aj","aj","aj","aj","ajeʼex","ajoʼob",
nil,nil,nil,"ajoʼon{OTE}","eʼex{COL}","oʼob{COL}",
nil,nil,nil,"oʼon{OTE/COL}"
},
res_act = {"maj","maj","maj","maj","majeʼex","majoʼob",
nil,nil,nil,"majoʼon{OTE}","meʼex{COL}","moʼob{COL}",
nil,nil,nil,"moʼon{OTE/COL}"
},
subj_act = {"ej{*}","ej{*}","ej{*}","ej{*}","eʼex","oʼob",
nil,nil,nil,"oʼon{OTE}"
},
inc_pas = {"","","","","eʼex","oʼob",
nil,nil,nil,"oʼon{OTE}"
},
com_pas = {"en","ech","ij{*}","oʼon","eʼex","oʼob"},
res_pas = {"en","ech","","oʼon","eʼex","oʼob"},
subj_pas = {"en","ech","","oʼon","eʼex","oʼob"},
imper = {nil,"ej{*}",nil,nil,"eʼex",nil},
},
intr = {
inf = {""},
part = {nil},
inc = {"","","","","eʼex","oʼob",
nil,nil,nil,"oʼon{OTE}"
},
com = {"en","ech","ij{*}","oʼon","eʼex","oʼob"},
res = {"en","ech","","oʼon","eʼex","oʼob"},
subj = {"en","ech","","oʼon","eʼex","oʼob"},
imper = {nil,"",nil,nil,"eʼex",nil},
}
}
local function normalizar_enlace(x)
return x:gsub("%b()", "")
end
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
return PRONOMBRES[p]
end
return PRONOMBRES[p]
end
local paradigmas_irregulares = {
{"uʼuy", {"^u"..APOSTROFE.."uy$"}, {
tipo = "t1",
inc_act = {nil, nil, {"ku yuʼubik"}, nil, nil, {"ku yuʼubikoʼob"}},
com_act = {nil, nil, {"tu yuʼubaj"}, nil, nil, {"tu yuʼubajoʼob", "tu yuʼuboʼob{COL}"}},
res_act = {nil, nil, {"u yuʼubmaj"}, nil, nil, {"u yuʼubmajoʼob", "u yuʼubmoʼob{COL}"}},
subj_act = {nil, nil, {"u yuʼubej{*}"}, nil, nil, {"u yuʼuboʼob"}},
inc_pas = {nil, nil, {"ku yuʼubaʼal"}, nil, nil, {"ku yuʼubaʼaloʼob"}},
}},
{"tsʼáaj", {"^ts"..APOSTROFE.."áaj$"}, {
tipo = "t2",
nucleoincp = {"tsʼaʼabal"},
nucleocomp = {"tsʼaʼab"},
nucleoresp = {"tsʼaʼan"},
nucleosubjp = {"tsʼaʼabak"},
com_act = {{"tin tsʼáaj"}, {"ta tsʼáaj"}, {"tu tsʼáaj"}, {"t(k) tsʼáaj", "tin tsʼáajoʼon{OTE}"}, {"ta tsʼáajeʼex"}, {"tu tsʼáajoʼob"}},
}},
{"síij", {"^síij$"}, {
tipo = "t2",
inf = {"síik"},
part = {"síibil"},
nucleoinc = {"sí"},
nucleores = {"síi"},
nucleoincp = {"siʼibil"},
nucleocomp = {"siʼib"},
nucleoresp = {"siʼan"},
nucleosubjp = {"siʼibik"}
}},
}
local function combinar_prefijo_nucleosufijo(prefijo, nucleosufijo)
if find(nucleosufijo, "^[~#]?"..VOCAL) then
if prefijo == "(j)" then
return "(j-)"..nucleosufijo
end
if prefijo == "kin " or prefijo == "ka " or prefijo == "tin " or prefijo == "ta " or prefijo == "in " or prefijo == "a " then
return prefijo.."~w~"..nucleosufijo
end
if prefijo == "ku " or prefijo == "tu " or prefijo == "u " then
return prefijo.."~y~"..nucleosufijo
end
end
return prefijo..nucleosufijo
end
local function combinar_nucleo_sufijo(nucleo, sufijo)
if find(sufijo, "^b") then
local a = match(nucleo, "("..VOCAL..")"..APOSTROFE.."[~#]?$")
if a then
return nucleo.."~"..a.."~"..sufijo
end
local b, c = match(nucleo, "^(.*)n([~#]?)$")
if b then
return b.."~m~"..c..sufijo
end
end
if find(sufijo, "^"..VOCAL..APOSTROFE) then
if find(nucleo, VOCAL..APOSTROFE.."[~#]?$") then
return nucleo.."~"..sub(sufijo, 3).."~"
end
end
return nucleo..sufijo
end
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local nucleos
if forma == "inc_act" then
nucleos = conjinfo.nucleoinc
elseif forma == "com" or forma == "com_act" then
nucleos = conjinfo.nucleocom
elseif forma == "res" or forma == "res_act" then
nucleos = conjinfo.nucleores
elseif forma == "subj" then
nucleos = conjinfo.nucleosubj
elseif forma == "inc_pas" then
nucleos = conjinfo.nucleoincp
elseif forma == "com_pas" then
nucleos = conjinfo.nucleocomp
elseif forma == "res_pas" then
nucleos = conjinfo.nucleoresp
elseif forma == "subj_pas" then
nucleos = conjinfo.nucleosubjp
elseif forma == "imper" then
nucleos = conjinfo.nucleoimper
else
nucleos = conjinfo.nucleo
end
local sufijos_ = sufijos[conjinfo.tr_intr][forma] or {}
local prefijos_ = prefijos[conjinfo.tr_intr][forma] or {}
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for _, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], (gsub(fm, LETRA.."+$", "#%0#")))
end
else
for _, prefijo in ipairs(prefijos_) do
for _, sufijo in ipairs(sufijos_) do
for _,nucleo in ipairs(nucleos) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleosufijo(prefijo, combinar_nucleo_sufijo(nucleo, sufijo)))
end
end
end
end
return
end
for i = TEEN, LETIOB do
local p = tostr[i]
if conjinfo[forma][i] then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], (gsub(fm, LETRA.."+$", "#%0#")))
end
else
local k = i
while prefijos_[k] or sufijos_[k] do
for j, n in ipairs(nucleos) do
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleosufijo(prefijos_[k], combinar_nucleo_sufijo(n, sufijos_[k])))
end
k = k + 6
end
end
end
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {requerido = true}, -- tipo = i, a, m, p, d, t1, t2
["impers"] = {}, -- 3, 36
["impersonal"] = {alias_de = "impers"},
["nucleoinc"] = {lista = true},
["núcleoinc"] = {alias_de="nucleoinc"},
["nucleocom"] = {lista = true},
["núcleocom"] = {alias_de="nucleocom"},
["nucleores"] = {lista = true},
["núcleores"] = {alias_de="nucleores"},
["nucleosubj"] = {lista = true},
["núcleosubj"] = {alias_de="nucleosubj"},
["nucleoincp"] = {lista = true},
["núcleoincp"] = {alias_de="nucleoincp"},
["nucleocomp"] = {lista = true},
["núcleocomp"] = {alias_de="nucleocomp"},
["nucleoresp"] = {lista = true},
["núcleoresp"] = {alias_de="nucleoresp"},
["nucleosubjp"] = {lista = true},
["núcleosubjp"] = {alias_de="nucleosubjp"},
["nucleoimper"] = {lista = true},
["núcleoimper"] = {alias_de="nucleoimper"},
["nota"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
assert(not find(tit, " "), "locuciones no soportadas aún")
local v = tit
local tr_intr
local ninc, ncom, nres, nsubj, nimper, nincp, ncomp, nresp, nsubjp
local no_imperativo_msj
local subs
local raiz = v
local cats = {}
local enc = {}
local es_irregular
for k,arr in pairs(args) do
if type(k) == "string" and k:find("nucleo") then
for i,el in ipairs(arr) do
arr[i] = "#"..el.."#"
es_irregular = true
end
end
end
local conjinfo = {}
for _,p in ipairs(paradigmas_irregulares) do
for _,rx in ipairs(p[2]) do
if find(v, rx) then
for y,z in pairs(p[3]) do
conjinfo[y] = deep_copy(z)
end
es_irregular = true
break
end
end
end
local tipo = conjinfo.tipo or args[1]
for k,arr in pairs(conjinfo) do
if type(k) == "string" and k:find("nucleo") then
for i,el in ipairs(arr) do
arr[i] = "#"..el.."#"
es_irregular = true
end
end
end
if tipo == "i" then
tr_intr = "intr"
ncom = gsub(raiz, VOCAL.."l$", "")
nres, subs = gsubb(raiz, VOCAL_TILDADA.."("..VOCAL..CONS.."+)"..VOCAL.."l$", "%1aʼan")
if not subs then
nres = ncom.."aʼan"
end
nsubj = ncom..sub(raiz, -2, -2).."k"
if find(raiz, "pajal$") or find(raiz, "kʼajal$") then
no_imperativo_msj = "Como verbo intransitivo terminado en -pajal o -kʼajal, ''"..v.."'' CARECE de imperativo"
else
nimper = ncom.."en"
end
insert(enc, "intransitivo, de raíz")
insert(cats, "YUA:Verbos intransitivos")
insert(cats, "YUA:Verbos intransitivos de raíz")
elseif tipo == "a" then
tr_intr = "intr"
local a = match(raiz, "("..VOCAL..")"..APOSTROFE.."$") or ""
ncom = raiz..a.."naj"
nres = raiz..a.."najaʼan"
nsubj = raiz..a.."nak"
nimper = raiz..a.."nen"
insert(enc, "intransitivo, antipasivo")
insert(cats, "YUA:Verbos intransitivos")
insert(cats, "YUA:Verbos intransitivos antipasivos")
elseif tipo == "m" then
tr_intr = "intr"
local r, a, b, c, d = match(raiz, "^(.*)("..VOCAL_TILDADA..")("..VOCAL..CONS.."+)("..VOCAL..")(l)$")
assert(d)
local e = quitar_tilde[a]
ncom = r..a..b
nres = r..e..b..c..d
nsubj = r..a..b..c.."k"
no_imperativo_msj = "Como verbo intransitivo mediopasivo, ''"..v.."'' CARECE de imperativo"
insert(enc, "intransitivo, mediopasivo")
insert(cats, "YUA:Verbos intransitivos")
insert(cats, "YUA:Verbos intransitivos mediopasivos")
elseif tipo == "p" then
tr_intr = "intr"
local r = match(raiz, "^(.-)l?tal$")
assert(r)
ncom = r.."laj"
nres = r.."lajaʼan"
nsubj = r.."lak"
nimper = r.."len"
insert(enc, "intransitivo, posicional")
insert(cats, "YUA:Verbos intransitivos")
insert(cats, "YUA:Verbos intransitivos posicionales")
elseif tipo == "d" then
tr_intr = "intr"
local r = match(raiz, "^(.*)tal$") or match(raiz, "^(.*)chajal")
assert(r)
ncom = r.."chaj"
nres = r.."chajaʼan"
nsubj = r.."chajak"
no_imperativo_msj = "Como verbo intransitivo denominal/deadjetival, ''"..v.."'' CARECE de imperativo"
insert(enc, "intransitivo, denominal/deadjetival")
insert(cats, "YUA:Verbos intransitivos")
insert(cats, "YUA:Verbos intransitivos denominales/deadjetivales")
elseif tipo == "t1" then
tr_intr = "tr"
ninc = raiz
ncom = raiz
nres = raiz
nincp = raiz.."aʼal"
ncomp = raiz.."aʼab"
nresp = raiz.."aʼan"
nsubjp = raiz.."aʼak"
nimper = raiz
insert(enc, "transitivo, tipo 1")
insert(cats, "YUA:Verbos transitivos")
insert(cats, "YUA:Verbos transitivos tipo 1")
elseif tipo == "t2" then
tr_intr = "tr"
local a = match(raiz, "("..VOCAL..")"..APOSTROFE.."$")
if a then
ninc = raiz
ncom = raiz
nres = raiz..a
nincp = raiz..a.."b"..a.."l"
ncomp = raiz..a.."b"
nresp = raiz.."an"
nsubjp = raiz..a.."b"..a.."k"
nimper = raiz
else
local r, b
r, a, b = match(raiz, "^(.*)("..VOCAL..")("..CONS.."+)$")
assert(b)
ninc = raiz
ncom = raiz
nres = raiz
nincp = r..a.."ʼ"..a..b..a.."l"
ncomp = r..a.."ʼ"..a..b
nresp = r..a..b.."aʼan"
nsubjp = r..a.."ʼ"..a..b..a.."k"
nimper = raiz
end
insert(enc, "transitivo, tipo 2")
insert(cats, "YUA:Verbos transitivos")
insert(cats, "YUA:Verbos transitivos tipo 2")
else
error("subtipo no reconocido")
end
args.nucleoinc[1] = args.nucleoinc[1] or ninc
args.nucleocom[1] = args.nucleocom[1] or ncom
args.nucleores[1] = args.nucleores[1] or nres
args.nucleosubj[1] = args.nucleosubj[1] or nsubj
args.nucleoincp[1] = args.nucleoincp[1] or nincp
args.nucleocomp[1] = args.nucleocomp[1] or ncomp
args.nucleoresp[1] = args.nucleoresp[1] or nresp
args.nucleosubjp[1] = args.nucleosubjp[1] or nsubjp
args.nucleoimper[1] = args.nucleoimper[1] or nimper
conjinfo.tipo = tipo
conjinfo.nucleo = {v}
conjinfo.nucleoinc = conjinfo.nucleoinc or args.nucleoinc
conjinfo.nucleocom = conjinfo.nucleocom or args.nucleocom
conjinfo.nucleores = conjinfo.nucleores or args.nucleores
conjinfo.nucleosubj = conjinfo.nucleosubj or args.nucleosubj
conjinfo.nucleoincp = conjinfo.nucleoincp or args.nucleoincp
conjinfo.nucleocomp = conjinfo.nucleocomp or args.nucleocomp
conjinfo.nucleoresp = conjinfo.nucleoresp or args.nucleoresp
conjinfo.nucleosubjp = conjinfo.nucleosubjp or args.nucleosubjp
conjinfo.nucleoimper = conjinfo.nucleoimper or args.nucleoimper
conjinfo.tr_intr = conjinfo.tr_intr or tr_intr
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
local resultante = sobreescribir_formas(conjugado, args)
local vozact = f(resultante.inf[1] or "―")
local vozpas = f(conjinfo.nucleoincp[1] or "―")
local exclusiones = tr_intr == "tr" and {"^imper", "^inc$", "^com$", "^res$", "^subj$"} or {"^imper", "^part$", "_act", "_pas"}
local defectivo = comprobar_defectivo(resultante, exclusiones, tostr)
resultante = agregar_enlaces(resultante, tit, normalizar_enlace, "%S")
local impers = conjinfo.impers or args["impers"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, es_impersonal)
end)
local cs, cs1, cs2, fila_pronombres
if impers == "3" then
fila_pronombres = {"", PRONOMBRES[3], header=true, class="pc"}
cs = 2
if not no_imperativo_msj then
no_imperativo_msj = "Como verbo impersonal, ''"..v.."'' CARECE de imperativo"
end
elseif impers == "36" then
fila_pronombres = {"", PRONOMBRES[3], PRONOMBRES[6], header=true, class="pc"}
cs = 3
if not no_imperativo_msj then
no_imperativo_msj = "Como verbo terciopersonal, ''"..v.."'' CARECE de imperativo"
end
else
fila_pronombres = {"", PRONOMBRES[1], PRONOMBRES[2], PRONOMBRES[3], PRONOMBRES[4], PRONOMBRES[5], PRONOMBRES[6], header=true, class="pc"}
cs = 7
end
cs1 = cs -- math.floor(cs / 2)
-- cs2 = cs - cs1
local t = {}
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
if tr_intr == "tr" then
resultante.inf.colspan = cs-1
resultante.part.colspan = cs-1
insert(t, {{"Formas no personales (verboides)", colspan=cs}, header=true, color=COLOR_H})
insert(t, {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf})
insert(t, {{"Participio pasivo", header=true, color=COLOR_NP}, resultante.part})
insert(t, {{"Formas personales", colspan=cs}, header=true, color=COLOR_H})
insert(t, {{"Voz activa", colspan=cs}, header=true, color=COLOR_H})
insert(t, fila_pronombres)
insert(t, {{"Indicativo incompletivo", color=COLOR_IND, header=true}, ic("inc_act")})
insert(t, {{"Indicativo completivo", color=COLOR_IND, header=true}, ic("com_act")})
insert(t, {{"Indicativo resultativo", color=COLOR_IND, header=true}, ic("res_act")})
insert(t, {{"Subjuntivo", color=COLOR_SUBJ, header=true}, ic("subj_act")})
if not no_imperativo_msj then
insert(t, {{"Imperativo", color=COLOR_IMPER, header=true}, ic("imper")})
else
insert(t, {{no_imperativo_msj, color=COLOR_IMPER, header=true, colspan=cs}})
end
insert(t, {{"Voz pasiva", colspan=cs}, header=true, color=COLOR_H})
insert(t, fila_pronombres)
insert(t, {{"Indicativo incompletivo", color=COLOR_IND, header=true}, ic("inc_pas")})
insert(t, {{"Indicativo completivo", color=COLOR_IND, header=true}, ic("com_pas")})
insert(t, {{"Indicativo resultativo", color=COLOR_IND, header=true}, ic("res_pas")})
insert(t, {{"Subjuntivo", color=COLOR_SUBJ, header=true}, ic("subj_pas")})
else
resultante.inf.colspan = cs-1
insert(t, {{"Formas no personales (verboides)", colspan=cs}, header=true, color=COLOR_H})
insert(t, {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf})
insert(t, {{"Formas personales", colspan=cs}, header=true, color=COLOR_H})
insert(t, fila_pronombres)
insert(t, {{"Indicativo incompletivo", color=COLOR_IND, header=true}, ic("inc")})
insert(t, {{"Indicativo completivo", color=COLOR_IND, header=true}, ic("com")})
insert(t, {{"Indicativo resultativo", color=COLOR_IND, header=true}, ic("res")})
insert(t, {{"Subjuntivo", color=COLOR_SUBJ, header=true}, ic("subj")})
if not no_imperativo_msj then
insert(t, {{"Imperativo", color=COLOR_IMPER, header=true}, ic("imper")})
else
insert(t, {{no_imperativo_msj, color=COLOR_IMPER, header=true, colspan=cs}})
end
end
insert(t, {{f("Leyenda: † arcaico, x no normativo, ~■~ cambio ortográfico, #■# irregularidad, OTE: forma usada en el oriente de Yucatán y centro de Quintana Roo, COL: coloquial, * los sufijos -ej/-ij se eliminan en posición no terminal."), colspan=cs}})
args["nota"] = args["nota"] or ""
if conjinfo.impers == "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 conjinfo.impers == "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 conjinfo.impers == "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 conjinfo.impers == "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
insert(t, {{args["nota"] and args["nota"] or "", colspan=cs}})
impers = impers or ""
if impers == "3" then
insert(enc, "impersonal")
insert(cats, "YUA:Verbos impersonales")
end
if impers == "36" then
insert(enc, "terciopersonal")
insert(cats, "YUA:Verbos terciopersonales")
end
if defectivo then
insert(enc, "defectivo")
insert(cats, "YUA:Verbos defectivos")
end
if es_irregular then
insert(enc, "irregular")
insert(cats, "YUA:Verbos irregulares")
else
insert(enc, "regular")
insert(cats, "YUA:Verbos regulares")
end
local actpasstr = ""
if tr_intr == "tr" then
actpasstr = " ("..vozact..", "..vozpas..")"
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..v.."''"..actpasstr.."'''  ("..concat(enc, ", ")..")",
t,
ns == 0 and cats or {})
end
return export
e3togx1owhd855urfaauan4iss29ovr
Módulo:flex/br
828
1059940
6118166
6076979
2026-06-16T02:18:10Z
TMCbot
164594
.
6118166
Scribunto
text/plain
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local deepcopy = m_table.deepCopy
local merge = m_table.merge
local insert_if_not = m_table.insertIfNot
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local lower = m_str.lower
local match = m_str.match
local sub = m_str.sub
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local function try(p, a, b)
local q, sust = gsub(p, a, b)
if sust > 0 then
return q
end
return nil
end
local function mutacion_cola(x)
x = gsub(x, "b$", "p")
x = gsub(x, "d$", "t")
x = gsub(x, "g$", "k")
x = gsub(x, "z$", "s")
x = gsub(x, "zh$", "sh")
return x
end
local function mutacion_suave(x)
x = gsub(x, "^m", "v")
x = gsub(x, "^M", "V")
x = gsub(x, "^b", "v")
x = gsub(x, "^B", "V")
x = gsub(x, "^d", "z")
x = gsub(x, "^D", "Z")
x = gsub(x, "^p", "b")
x = gsub(x, "^P", "B")
x = gsub(x, "^t", "d")
x = gsub(x, "^T", "D")
x = gsub(x, "^gw", "w")
x = gsub(x, "^Gw", "W")
x = gsub(x, "^gou", "ou")
x = gsub(x, "^Gou", "Ou")
x = gsub(x, "^g", "c'h")
x = gsub(x, "^G", "C'h")
x = gsub(x, "^k", "g")
x = gsub(x, "^K", "G")
return x
end
local function mutacion_dura(x)
x = gsub(x, "^b", "p")
x = gsub(x, "^B", "P")
x = gsub(x, "^d", "t")
x = gsub(x, "^D", "T")
x = gsub(x, "^g", "k")
x = gsub(x, "^G", "K")
return x
end
local function mutacion_aspirada(x)
x = gsub(x, "^p", "f")
x = gsub(x, "^P", "F")
x = gsub(x, "^t", "z")
x = gsub(x, "^T", "Z")
x = gsub(x, "^k", "c'h")
x = gsub(x, "^K", "C'h")
return x
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de = "pl"},
[3] = {alias_de = "f"},
[4] = {alias_de = "fpl"},
["alt"] = {},
["n"] = {},
["nota"] = {alias_de = "n"},
["pl"] = {lista = true},
["plural"] = {alias_de = "pl"},
["plnota"] = {},
["du"] = {lista = true},
["dual"] = {alias_de = "du"},
["dunota"] = {},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fnota"] = {},
["fpl"] = {lista = true},
["femeninoplural"] = {alias_de = "fpl"},
["fplnota"] = {},
["fdu"] = {lista = true},
["femeninodual"] = {alias_de = "fdu"},
["fdunota"] = {},
["s"] = {lista = true},
["singular"] = {alias_de = "s"},
["snota"] = {},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local modo = args[1]
args["pl"][1] = args["pl"][1] or args[2]
local cat_pref = "BR:Sustantivos"
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
elseif sub(modo, 1, 1) == "c" then
enc = "colectivo"
insert(cats, cat_pref.." colectivos")
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{{"singular", args.s, args["snota"]}},
ns == 0 and cats or {}
)
elseif not find(modo, "^irr") then
error("modo no reconocido")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
end
local flex_ = {du={},pl={title.."où"},f={},fpl={},fdu={}}
local flex, i1 = sobreescribir_formas(flex_, args)
flex.sg = {title}
for forma,arr in pairs(flex) do
local arr2 = {}
for i,a in ipairs(arr) do
insert(arr2, a)
insert_if_not(arr2, mutacion_suave(a))
insert_if_not(arr2, mutacion_dura(a))
insert_if_not(arr2, mutacion_aspirada(a))
end
flex[forma] = arr2
end
if i1 then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(concat(flex.sg, ", ")),
enc,
args["n"],
{{"dual", flex.du, args["dunota"]},
{"plural", flex.pl, args["plnota"]},
{"femenino", flex.f, args["fnota"]},
{"femenino dual", flex.fdu, args["fdunota"]},
{"femenino plural", flex.fpl, args["fplnota"]}
},
ns == 0 and cats or {}
)
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["alt"] = {},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["compnota"] = {lista = true},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["supnota"] = {lista = true},
["exc"] = {lista = true},
["exclamativo"] = {alias_de = "exc"},
["excnota"] = {lista = true},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local modo = args[1]
args["comp"][1] = args["comp"][1] or args[1]
args["sup"][1] = args["sup"][1] or args[2]
args["exc"][1] = args["exc"][1] or args[3]
if find(title, "%s") then
error("locuciones no soportadas")
end
local cat_pref = "BR:Adjetivos"
local cats = {}
local enc
local flex_ = {p=title}
flex_.comp = {mutacion_cola(title).."oc’h"}
flex_.sup = {mutacion_cola(title).."añ"}
flex_.exc = {mutacion_cola(title).."at"}
args.p = {} -- para que no arroje "irregular"
local flex, i1 = sobreescribir_formas(flex_, args)
if i1 then
enc = enc and enc..", "..f("#irregular#") or f("#irregular#")
insert(cats, cat_pref.." irregulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.p[1]),
enc,
args["n"],
{{"comparativo", flex.comp, args["compnota"]},
{"superlativo", flex.sup, args["supnota"]},
{"exclamativo", flex.exc, args["excnota"]}},
ns == 0 and cats or {}
)
end
return export
fapncaa2wqh1fsnq11j3cuc9jk85sj3
tuʼubul
0
1059972
6118092
5905872
2026-06-15T22:38:12Z
26agcp
138617
/* {{lengua|yua}} */ + uso, antónimo, ejemplo
6118092
wikitext
text/x-wiki
== {{lengua|yua}} ==
{{pron-graf|leng=yua|g=tu'ubul}}
=== Etimología ===
{{etimología|leng=yua}}.
==== {{verbo|yua|intransitivo}} ====
;1: Ser {{l|es|olvidado}}.
{{uso|leng=yua|a menudo con objeto indirecto, el cual indica quién realiza la acción de olvidar}}
{{antónimo|leng=yua|kʼaʼajal}}
{{ejemplo|Paalale’ex, ma’atáan u '''tu’ubul''' ten, ma’atáan u '''tu’ubul''' ten, te’ tu chuun k’úumche’...|trad=Hijos, no se me '''olvida''', no se me '''olvida''', fue en el tronco del bonete...|c=artículo|revista=K’aaylay|u=https://brucelove.com/wp-content/uploads/2018/08/kaaylay-03.pdf|vol=1|edicion=3|a1=Antonio Martínez Martín|t=Tu chuun k’úumche’|f=2006-9-4|p=12|trac=artículo|tradrevista=K’aaylay|tradu=https://brucelove.com/wp-content/uploads/2018/08/kaaylay-03.pdf|tradvol=1|tradedicion=3|trada1=Antonio Martínez Martín|tradt=En el tronco del bonete|tradf=2006-9-4|tradp=13}}
==== Conjugación ====
{{yua.v|i|nucleores=tubaʼan|imper2=no|imper5=no|nota=NOTA: ''tuʼubul'' se usa como voz pasiva, por lo que carece de imperativo.}}
==== Véase también ====
* {{l|yua|tuʼubs}}
== Referencias y notas ==
<references />
lu5815f7wmwcsx8bi6dnpx2sp5eu03o
Categoría:ES:Sustantivos invariables
14
1059988
6118160
5899587
2026-06-16T02:13:17Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:ES:Sustantivos invariantes]] a [[Categoría:ES:Sustantivos invariables]] sin dejar una redirección: obsoleta
5899587
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Módulo:flex/ia
828
1060087
6118174
5904509
2026-06-16T02:18:30Z
TMCbot
164594
.
6118174
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 find = m_str.find
local match = m_str.match
local sub = m_str.sub
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local agregar_enlaces = m_flex.agregar_enlaces
local renderizar_encabezado = m_flex.renderizar_encabezado
local LETRA = "%S"
local ESPACIO = "%s"
local guion = "%-"
function export.flexionar_palabra(p)
local r, a
r, a = match(p, "^(.*)([aeiouAEIOU])$")
if a then
return {s={r.."~"..a.."~"}, p={r.."~"..a.."s~"}}
end
r, a = match(p, "^(.*)([cC])$")
if a then
return {s={r.."~"..a.."~"}, p={r.."~"..a.."hes~"}}
end
r, a = match(p, "^(.*)(.)$")
return {s={r.."~"..a.."~"}, p={r.."~"..a.."es~"}}
end
local function flexion_sust_adj(palabras, copulativa)
local a, separador, b = match(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)
local flex2 = copulativa and export.flexionar_palabra(b) or {s={b}, p={b}}
local flex = combinar_copulativa(flex1, flex2, separador)
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto = match(palabras, "^("..guion.."?"..LETRA.."+)(.-)$")
local flex = export.flexionar_palabra(p)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
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_ = flexion_sust_adj(title, cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
flex.p = {}
elseif modo and sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
flex.p = {}
elseif find(title, LETRA..ESPACIO..LETRA) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.s[1]),
enc,
args["n"],
{{"plural", flex.p},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de = "p"},
["alt"] = {},
["s"] = {lista = true},
["p"] = {lista = true},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "IA:Locuciones sustantivas" or "IA:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de = "p"},
["alt"] = {},
["s"] = {lista = true},
["p"] = {lista = true},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "IA:Locuciones adjetivas" or "IA:Adjetivos")
end
return export
pb3mtjieds7lq4r3dyaykqbkwzswdtz
Módulo:flex/io
828
1060095
6118175
5904508
2026-06-16T02:18:31Z
TMCbot
164594
.
6118175
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 find = m_str.find
local match = m_str.match
local sub = m_str.sub
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local agregar_enlaces = m_flex.agregar_enlaces
local renderizar_encabezado = m_flex.renderizar_encabezado
local LETRA = "%S"
local ESPACIO = "%s"
local guion = "%-"
function export.flexionar_palabra(p)
local r, a
r, a = match(p, "^(.*)([oO])$")
if a then
return {s={r.."~"..a.."~"}, p={r.."~i~"}}
end
return {s={p}, p={}}
end
local function flexion_sust_adj(palabras, copulativa)
local a, separador, b = match(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)
local flex2 = copulativa and export.flexionar_palabra(b) or {s={b}, p={b}}
local flex = combinar_copulativa(flex1, flex2, separador)
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto = match(palabras, "^("..guion.."?"..LETRA.."+)(.-)$")
local flex = export.flexionar_palabra(p)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
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_ = flexion_sust_adj(title, cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
flex.p = {}
elseif modo and sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
flex.p = {}
elseif find(title, LETRA..ESPACIO..LETRA) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.s[1]),
enc,
args["n"],
{{"plural", flex.p},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de = "p"},
["alt"] = {},
["s"] = {lista = true},
["p"] = {lista = true},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "IO:Locuciones sustantivas" or "IO:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de = "p"},
["alt"] = {},
["s"] = {lista = true},
["p"] = {lista = true},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "IO:Locuciones adjetivas" or "IO:Adjetivos")
end
return export
6tjpf3ackxjum4f69oh5ydx9t8btgat
Módulo:flex/nl
828
1060510
6118179
6077000
2026-06-16T02:18:37Z
TMCbot
164594
.
6118179
Scribunto
text/plain
-- Flexión de sustantivos, adjetivos y verbos en neerlandés
-- Autor: Tmagc, rehecho a partir de los módulos de en.wikt
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local deepcopy = m_table.deepCopy
local merge = m_table.merge
local insert_if_not = m_table.insertIfNot
local list_to_set = m_table.listToSet
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local lower = m_str.lower
local match = m_str.match
local sub = m_str.sub
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local irregular_diminutives = {
{"blad", "blaadje"},
{"gat", "gaatje"},
{"glas", "glaasje"},
{"jongen", "jongetje"},
{"meid", "meisje"},
{"pad", "paadje"},
{"schip", "scheepje"},
{"vat", "vaatje"},
}
local remove_diacritic = {
["ä"] = "a",
["ë"] = "e",
["ï"] = "i",
["ö"] = "o",
["ü"] = "u",
["â"] = "a",
["ê"] = "e",
["î"] = "i",
["ô"] = "o",
["û"] = "u",
}
local vowels = "AEIOUaeiouäëïöüâêîôû"
local V = "[" .. vowels .. "]"
local NV = "[^" .. vowels .. "]"
local long_vowels = list_to_set {
-- long monophthongs
"aa", "ee", "ie", "oo", "uu",
-- diphthongs
"ai", "au", "ei", "eu", "ij", "oe", "ou", "oi", "ui"
}
local unstressed_last_two_letters_noun = list_to_set {
"er", "el", "en", "or", "em", "um"
}
local unstressed_last_two_letters_adjective = list_to_set {
"er", "el", "en", "or", "em", "um", "ig"
}
local lengthen = {
["a"] = "aa",
["e"] = "ee",
["i"] = "ie",
["o"] = "oo",
["u"] = "uu",
["A"] = "Aa",
["E"] = "Ee",
["I"] = "Ie",
["O"] = "Oo",
["U"] = "Uu",
-- FIXME: Do the following ever occur and if so are these correct?
["ä"] = "äa",
["ë"] = "ëe",
["ï"] = "ïe",
["ö"] = "öo",
["ü"] = "üu",
-- FIXME: Do the following ever occur and if so are these correct?
["â"] = "âa",
["ê"] = "êe",
["î"] = "îe",
["ô"] = "ôo",
["û"] = "ûu",
}
local devoice = {
["z"] = "s", -- grijze -> grijs
["v"] = "f", -- gave -> gaafje
}
local function devoice_final(form)
local butlast, last = match(form, "^(.*)(.)$")
return butlast .. (devoice[last] or last)
end
local function normalize_form(form)
local y, _ = gsub(lower(form), "[äëïöüâêîôû]", remove_diacritic)
return y
end
local function ends_in_long_vowel(form)
local last_two = match(normalize_form(form), "(..)$")
return last_two and long_vowels[last_two]
end
local function remove_final_e(form, final_multisyllable_stress)
-- Must end in -e preceded by at least one vowel.
local butlast = match(form, "^(.*" .. V .. NV .. "*)[eë]$")
if not butlast then
return form
end
-- If ends in long vowel + -e (e.g. frije, luie), just truncate the -e.
if ends_in_long_vowel(butlast) then
return butlast
end
-- If ends in long vowel including + -e (e.g. twee?), return the whole thing.
if ends_in_long_vowel(form) then
return form
end
form = butlast
local butlast = match(form, "^(.*)" .. NV .. "$")
if butlast and ends_in_long_vowel(butlast) then
return devoice_final(form)
end
if not final_multisyllable_stress then
local last_two = match(normalize_form(form), V .. NV .. "*(..)$")
if last_two and unstressed_last_two_letters_adjective[last_two] then
return devoice_final(form)
end
end
local butlast_two, last_v, last_c = match(form, "^(.*)(" .. V .. ")(" .. NV .. ")$")
if butlast_two then
return butlast_two .. lengthen[last_v] .. devoice_final(last_c)
end
local base, last_c = match(form, "^(.*)(" .. NV .. ")%2$")
if base then
return base .. devoice_final(last_c)
end
return devoice_final(form)
end
local function add_e(stem, weak_final, lengthen)
-- Vowel lengthening
if lengthen then
return gsub(stem, "i(.)$", "e%1") .. "e"
-- Final weak syllable, no consonant doubling
elseif weak_final then
if stem:find("ie$") then
return stem:gsub("ie$", "ië")
else
return stem .. "e"
end
else
-- Ends in ee, ie, oe
if stem:find("[eio]e$") then
return stem .. "ë"
-- Ends in e
elseif stem:find("e$") then
return stem
-- Ends in double vowel + single consonant, remove one of the vowels
elseif stem:find("([aeou])%1[bcdfgklmnpqrstvxz]$") then
-- Add a diaeresis if the removal would create a digraph
if find(stem, "[io]ee.$") then
return gsub(stem, "..(.)$", "ë%1e")
else
return gsub(stem, ".(.)$", "%1e")
end
-- Ends in single vowel + single consonant, double the consonant
elseif stem:find("[AaEeIiOoUu][bcdfgklmnpqrstvz]$") and not find(stem, "[IiïOoö]e.$")
and (not find(stem, "[AaäEeëOoöUuü]i.$") or find(stem, "qui.$")) and not find(stem, "[AaäEeëOoö]u.$") then
return gsub(stem, "(.)$", "%1%1e")
-- for obsolete spellings on -sch (except -isch)
elseif stem:find("[AaEeIOoUu]sch$") and not find(stem, "[IiïOoö]esch$") and not find(stem, "[AaäEeëOoö]usch$") then
return gsub(stem, "sch$", "ssche")
else
return stem .. "e"
end
end
end
local function generate_plurals(p)
local generated = {}
generated["-s"] = p .. "s"
generated["-'s"] = p .. "'s"
local stem_FF = add_e(p, false, false)
local stem_TF = add_e(p, true, false)
local stem_FT = add_e(p, false, true)
generated["-es"] = stem_FF .. "s"
generated["-@es"] = stem_TF .. "s"
generated["-:es"] = stem_FT .. "s"
generated["-en"] = stem_FF .. "n"
generated["-@en"] = stem_TF .. "n"
generated["-:en"] = stem_FT .. "n"
generated["-eren"] = add_e(p .. (p:find("n$") and "d" or ""), false, false) .. "ren"
generated["-:eren"] = stem_FT .. "ren"
if p:find("f$") then
local stem = p:gsub("f$", "v")
stem_FF = add_e(stem, false, false)
stem_TF = add_e(stem, true, false)
stem_FT = add_e(stem, false, true)
generated["-ves"] = stem_FF .. "s"
generated["-@ves"] = stem_TF .. "s"
generated["-:ves"] = stem_FT .. "s"
generated["-ven"] = stem_FF .. "n"
generated["-@ven"] = stem_TF .. "n"
generated["-:ven"] = stem_FT .. "n"
generated["-veren"] = stem_FF .. "ren"
generated["-:veren"] = stem_FT .. "ren"
elseif p:find("s$") then
local stem = p:gsub("s$", "z")
stem_FF = add_e(stem, false, false)
stem_TF = add_e(stem, true, false)
stem_FT = add_e(stem, false, true)
generated["-zes"] = stem_FF .. "s"
generated["-@zes"] = stem_TF .. "s"
generated["-:zes"] = stem_FT .. "s"
generated["-zen"] = stem_FF .. "n"
generated["-@zen"] = stem_TF .. "n"
generated["-:zen"] = stem_FT .. "n"
generated["-zeren"] = stem_FF .. "ren"
generated["-:zeren"] = stem_FT .. "ren"
elseif p:find("heid$") then
generated["-heden"] = p:gsub("heid$", "heden")
end
return generated
end
-- Based on [https://www.dutchgrammar.com/en/?n=NounsAndArticles.23].
local function default_dim(lemma, final_multisyllable_stress, modifier_final_multisyllable_stress, first_only)
if first_only then
local first_word, rest = match(lemma, "^([^ ]+) (.*)$")
if first_word then
return default_dim(first_word, final_multisyllable_stress, modifier_final_multisyllable_stress) .. " " ..
rest
end
end
local first_word, rest = match(lemma, "^([^ ]+[eë]) (.*)$")
if first_word then
return remove_final_e(first_word, modifier_final_multisyllable_stress) .. " " .. default_dim(
rest, final_multisyllable_stress, modifier_final_multisyllable_stress)
end
for _, ending_repl in ipairs(irregular_diminutives) do
local ending, repl = unpack(ending_repl)
if find(lemma, ending .. "$") then
return sub(lemma, 1, -#ending - 1) .. repl
end
end
if ends_in_long_vowel(lemma) then
return lemma .. "tje"
end
if find(lemma, "[aouäöü]$") then
return sub(lemma, 1, -2) .. lengthen[sub(lemma, -1)] .. "tje"
end
if find(lemma, "i$") then
return lemma .. "etje"
end
if find(lemma, NV .. "y$") then
return lemma .. "'tje"
end
if find(lemma, "é$") then
return sub(lemma, 1, -2) .. "eetje"
end
if final_multisyllable_stress and find(lemma, "e$") then
lemma = remove_final_e(lemma, true)
end
if (find(lemma, V .. "$") or find(lemma, "[wy]$") or
find(lemma, "[rln]$") and ends_in_long_vowel(sub(lemma, 1, -2)) or find(lemma, "rn$")) then
return lemma .. "tje"
end
if find(lemma, V .. NV .. "*[eë][rln]$") or find(lemma, V .. NV .. "*[oö]r$") then
-- NOTE: we already handled LONGV .. [rln]$ above, so any occurrence of V .. (e[rln]|or)$ is not a long vowel
-- or diphthong.
return final_multisyllable_stress and lemma .. sub(lemma, -1) .. "etje" or lemma .. "tje"
end
if find(lemma, V .. "[rln]$") then
-- NOTE: we already handled LONGV .. [rln]$ above, so any occurrence of V .. [rln]$ is not a long vowel or
-- diphthong.
return lemma .. sub(lemma, -1) .. "etje"
end
if find(lemma, "m$") and ends_in_long_vowel(sub(lemma, 1, -2)) or find(lemma, "[lr]m$") then
return lemma .. "pje"
end
if find(lemma, V .. NV .. "*[eëuü]m$") then
-- NOTE: we already handled LONGV .. m$ above, so any occurrence of V .. [eu]m$ is not a long vowel or
-- diphthong.
return final_multisyllable_stress and lemma .. sub(lemma, -1) .. "etje" or lemma .. "pje"
end
if find(lemma, V .. "m$") then
-- NOTE: we already handled LONGV .. m$ above, so any occurrence of V .. m$ is not a long vowel or diphthong.
return lemma .. sub(lemma, -1) .. "etje"
end
if find(lemma, "ng$") and ends_in_long_vowel(sub(lemma, 1, -3)) then
-- NOTE: This may not exist.
return lemma .. "je"
end
if find(lemma, V .. NV .. "*[iï]ng$") then
-- NOTE: we already handled LONGV .. ng$ above, so any occurrence of V .. ing$ is not a long vowel or diphthong.
return final_multisyllable_stress and lemma .. "etje" or sub(lemma, 1, -2) .. "kje"
end
if find(lemma, V .. "ng$") then
-- NOTE: we already handled LONGV .. ng$ above, so any occurrence of V .. ng$ is not a long vowel or diphthong.
return lemma .. "etje"
end
return lemma .. "je"
end
local function generate_diminutive(p, dim)
if dim == "+" then
return default_dim(p)
elseif dim == "++" then
return default_dim(p, "final multisyllable stress")
elseif dim == "++/+" then
return default_dim(p, false, "modifier final multisyllable stress")
elseif dim == "++/++" then
return default_dim(p, "final multisyllable stress", "modifier final multisyllable stress")
elseif dim == "+first" then
return default_dim(p, false, false, "first only")
elseif dim == "++first" then
return default_dim(p, "final multisyllable stress", false, "first only")
elseif dim == "-" then
return {}
elseif dim and sub(dim, 1, 1) == "-" then
return p .. sub(dim, 2)
end
return {}
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {requerido=true},
["ayuda"] = {por_defecto=title},
["p"] = {lista=true},
["d"] = {lista=true},
["m"] = {lista=true},
["f"] = {lista=true},
["pnota"] = {lista=true},
["dnota"] = {lista=true},
["mnota"] = {lista=true},
["fnota"] = {lista=true},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local cat_pref = find(title, "%s") and "NL:Locuciones sustantivas" or "NL:Sustantivos"
local cats = {}
local p = args["ayuda"]
local modo = args[1]
local enc
if modo then
if find(modo, "inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif find(modo, "inc") then
enc = "incontable"
insert(cats, cat_pref.." incontables")
elseif find(modo, "sg") or modo == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif find(modo, "pl") or modo == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
end
local forms = {}
forms.p = parsear_arreglo(args[1])
local generar_plural = generate_plurals(p)
for i,pl in ipairs(forms.p) do
if pl ~= "-" then
forms.p[i] = generar_plural[pl] or pl
else
forms.p[i] = nil
end
end
forms.d = generate_diminutive(p, args[2])
forms.m = {}
forms.f = {}
local flex, i1 = sobreescribir_formas(forms, args)
if not flex.p[1] then
enc = "sin plural"
insert(cats, cat_pref.." solo en singular")
end
if not flex.d[1] then
enc = enc and enc..", sin diminutivo" or "sin diminutivo"
insert(cats, cat_pref.." sin diminutivo")
end
return renderizar_encabezado(
frame,
p,
enc,
args["n"],
{{"plural", flex["p"], args["pnota"]},
{"diminutivo", flex["d"], args["dnota"]},
{"masculino", flex["m"], args["mnota"]},
{"femenino", flex["f"], args["fnota"]}},
ns == 0 and cats or {}
)
end
local function make_inflected(base)
-- Adjectives ending in unstressed -en or -e get no extra -e.
if base:find("[^eio]en$") or base:find("[aeou]ien$") or base:find("[^eio]e$") then
return base
-- Adjectives ending in certain digraphs get a diaeresis
elseif base:find("[eio]e$") then
return base .. "ë"
else
return base .. "e"
end
end
local function make_comparative(base)
local inflected = make_inflected(base)
-- Adjectives ending in -r get an extra -d- in the comparative,
-- disregarding the inflected form
if base:find("r$") then
return base .. "der"
-- If the inflected form does not end in -e, add it
elseif not inflected:find("[eë]$") then
return inflected .. "er"
else
return inflected .. "r"
end
end
local function make_partitive(base)
-- Adjectives ending in a sibilant do not get an extra -s
if base:find("s$") or base:find("sch$") or base:find("x$") or base:find("sj$") or base:find("sh$") then
return base
-- Adjectives ending in a long vowel get an apostrophe before the -s
elseif base:find("[^aeiou][aiouy]$") then
return base .. "'s"
else
return base .. "s"
end
end
local function make_superlative(base)
local partitive = make_partitive(base)
-- Adjectives in -ide have a superlative -iedst
if base:find("[iï]de$") then
return base:gsub("([iï])de$", "%1ed") .. "st"
elseif partitive then
return partitive .. "t"
else
return base .. "st"
end
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {por_defecto=""},
["ayuda"] = {por_defecto=title},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["compnota"] = {lista = true},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["supnota"] = {lista = true},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local p = args["ayuda"]
local modo = args[1]
args["comp"][1] = args["comp"][1] or args[2]
args["sup"][1] = args["sup"][1] or args[3]
local cat_pref = find(title, "%s") and "NL:Locuciones adjetivas" or "NL:Adjetivos"
local cats = {}
local largo = find(modo, "l")
local pred = find(modo, "p")
local enc
local forms = {}
if find(modo, "i?nc") or modo == "-" or (args["comp"][1] == "no" and args["sup"][1] == "no") then
enc = "incomparable"
insert(cats, cat_pref.." incomparables")
return renderizar_encabezado(
frame,
p,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
if largo and pred then
enc = "largo, predicativo"
insert(cats, cat_pref.." largos")
insert(cats, cat_pref.." predicativos")
elseif largo then
enc = "largo"
insert(cats, cat_pref.." largos")
elseif pred then
enc = "predicativo"
insert(cats, cat_pref.." predicativos")
end
if largo or pred then
forms.comp = "meer "..p
forms.sup = "meest "..p
else
forms.comp = make_comparative(p)
forms.sup = {}
if p:find("[iï]de$") or p:find("[^eio]e$") or p:find("s[dkt]?$") or p:find("scht?$") or p:find("x$") then
insert(forms.sup, "meest "..p)
end
insert(forms.sup, make_superlative(p))
end
local flex, i1 = sobreescribir_formas(forms, args)
if i1 then
if not enc then
enc = f("#irregular#")
else
enc = enc..", "..f("#irregular#")
end
insert(cats, cat_pref.." irregulares")
end
return renderizar_encabezado(
frame,
p,
enc,
args["n"],
{{"comparativo", flex["comp"], args["compnota"]},
{"superlativo", flex["sup"], args["supnota"]}},
ns == 0 and cats or {}
)
end
local function make_long(form)
return (form:gsub("([^aeou])([aou])$", "%1%2%2"):gsub("([^aeiou])i$", "%1ie"))
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {}, -- pres
[2] = {}, -- pret
[3] = {}, -- part
[4] = {}, -- subjpres
[5] = {}, -- subjpret
[6] = {}, -- past_t, actualmente SIN USO
["ayuda"] = {por_defecto=title},
["n"] = {},
["nota"] = {alias_de = "n"},
["abrv"] = {tipo="bool"},
["abbr"] = {alias_de="abrv"},
["clase"] = {},
["dt"] = {},
["sep"] = {},
["pref"] = {},
["partpres"] = {lista = true},
["part"] = {lista = true},
["pres"] = {lista = true},
["pret"] = {lista = true},
["subjpres"] = {lista=true},
["subjpret"] = {lista=true},
["partpresnota"] = {lista = true},
["partnota"] = {lista = true},
["presnota"] = {lista = true},
["pretnota"] = {lista = true},
["subjpresnota"] = {lista=true},
["subjpretnota"] = {lista=true},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local cat_pref = find(title, "%s") and "NL:Locuciones verbales" or "NL:Verbos"
local cats = {}
local v = args["ayuda"]
local forms = {}
local pres = args[1]
local pres_e, pres_t, past, past_e, past_t, part
if args.clase then
assert(args[2], "especifique el pretérito para verbos fuertes")
assert(args[3], "especifique el participio para verbos fuertes")
end
if args.abrv then
pres_e = args[4] or pres.."'e"
pres_t = pres.."'t"
local dt = args["dt"] or (pres:find("[fpsxFPSX]$") and "t" or "d")
past = args[2] or pres .. "'" .. dt .. "e"
part = args[3] or args[2] or pres .. "'" .. dt -- PARCHE: el pretérito debe sobreescribir tb. al participio por defecto
else
pres_e = args[4] or pres.."e"
if find(pres, "t$") then
pres_t = make_long(pres)
else
pres_t = make_long(pres).."t"
end
local dt = args["dt"] or (pres_e:find("[cfhkpqstx]e$") and "t" or "d")
past = args[2] or pres:gsub("([^aeiou])i$", "%1ie") .. dt .. "e"
part = args[3] or args[2] or make_long(pres) .. (pres:find("[dt]$") and "" or dt) -- PARCHE: el pretérito debe sobreescribir tb. al participio por defecto
-- "zeggen" has an irregular past tense alongside the regular one
end
past_e = args[5] or (gsub(past, "e?$", "e", 1)) -- para que no inserte dos veces la e
past_t = args[6] or ((find(past, "[^eio]e$") or find(past, "[të]$")) and past or past.."t")
local irr
if args[2] then
past = "#"..past.."#"
past_e = "#"..past_e.."#"
past_t = "#"..past_t.."#"
part = "#"..part.."#"
irr = true
else
if args[3] then
part = "#"..part.."#"
irr = true
end
if args[5] then
past_e = "#"..past_e.."#"
irr = true
end
if args[6] then
past_t = "#"..past_t.."#"
irr = true
end
end
if args[4] then
pres_e = "#"..pres_e.."#"
irr = true
end
local sep1 = args.sep or ""
local sep2 = args.sep and " "..args.sep or ""
local pref = args.pref or ""
-- forms.inf = v
forms.partpres = sep1..pref..make_long(pres_e).."nd"
forms.part = sep1..(pref ~= "" and pref or "ge")..part
forms.pres = pref..pres..sep2
forms.pret = pref..past..sep2
forms.subjpres = pref..pres_e..sep2
forms.subjpret = pref..past_e..sep2
local flex, irr2 = sobreescribir_formas(forms, args)
local enc
if args.clase then
enc = f("fuerte, clase "..args.clase..", #irregular#")
insert(cats, cat_pref.." fuertes")
insert(cats, cat_pref.." fuertes clase "..args.clase)
insert(cats, cat_pref.." irregulares")
else
enc = "débil"
if irr or irr2 then
enc = enc..f(", #irregular#")
insert(cats, cat_pref.." débiles")
insert(cats, cat_pref.." irregulares")
else
insert(cats, cat_pref.." débiles")
insert(cats, cat_pref.." regulares")
end
end
return renderizar_encabezado(
frame,
v,
enc,
args["n"],
{{"pres.", flex.pres, args.presnota},
{"pret.", flex.pret, args.pretnota},
{"part.", flex.part, args.partnota},
{"part. pres.", flex.partpres, args.partpresnota},
{"subj. pres.", flex.subjpres, args.subjpresnota},
{"subj. pret.", flex.subjpret, args.subjpretnota}},
ns == 0 and cats or {}
)
end
return export
sb08x4mhhfrxoxyg7u8dt3mwjen34r1
Módulo:flex/nci
828
1060579
6118178
5935242
2026-06-16T02:18:36Z
TMCbot
164594
.
6118178
Scribunto
text/plain
-- FLEXIÓN DEL NAHUATL CLASICO
-- 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 sub = m_str.sub
local gsub = m_str.gsub
local gsubb = m_str.gsubb
local find = m_str.find
local m_flex = require("Módulo:flex")
local f = m_flex.f
local sobreescribir_formas = m_flex.sobreescribir_formas
local renderizar_encabezado = m_flex.renderizar_encabezado
local divsil = "%-"
local separador = "%s"..divsil
local SEPARADOR = "[" .. separador .. "]"
local ESPACIO = "%s"
local guion = "%-"
local LETRA = "[^"..separador.."]"
local function try(p, rx, pl, pl2)
local p2, sust = gsubb(p, rx, "~%0~")
if not sust then
return nil
end
if not pl then
return {s={p2}, p={}}
end
if not pl2 then
return {s={p2}, p={(gsub(p, rx, pl))}}
end
return {s={p2}, p={(gsub(p, rx, pl)), (gsub(p, rx, pl2))}}
end
local function flexionar_palabra(p)
local fl = try(p, "huitl$", "~htin~")
or try(p, "tli$", "~tin~")
or try(p, "li$", "~tin~")
or try(p, "in$", "~tin~")
or try(p, "tl$", "~meh~")
or try(p, ".$", "~%1meh~")
assert(fl, "No se pudo determinar la flexión de la palabra")
return fl
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif find(modo, "^ina") then
enc = "inanimado"
insert(cats, cat_pref.." inanimados")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
end
local flex_ = flexionar_palabra(title)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
flex.p = {}
elseif modo and sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
flex.p = {}
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.s[1]),
enc,
args["n"],
{{"plural", flex.p},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de = "p"},
["alt"] = {},
["s"] = {lista = true},
["p"] = {lista = true},
["plural"] = {alias_de = "p"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
args["cg"] = "sust"
return formatear_sust_adj(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "NCI:Locuciones sustantivas" or "NCI:Sustantivos")
end
return export
ftzlirvfln3g0v7jrj5dketf072988e
Módulo:flex/tlh
828
1061167
6118184
6077008
2026-06-16T02:18:49Z
TMCbot
164594
.
6118184
Scribunto
text/plain
-- FLEXIÓN DEL KLINGON
-- Autor: Tmagc
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local list_to_set = m_table.listToSet
local keys_to_list = m_table.keysToList
local insert_if_not = m_table.insertIfNot
local deep_copy = m_table.deepCopy
local contains = m_table.contains
local append = m_table.append
local merge = m_table.merge
local m_str = require("Módulo:string")
local u = m_str.char
local match = m_str.match
local sub = m_str.sub
local gsub = m_str.gsub
local gsubb = m_str.gsubb
local split = m_str.split
local gsplit = m_str.gsplit
local find = m_str.find
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local separar_palabras = m_flex.separar_palabras
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local desactivar_formas = m_flex.desactivar_formas
local agregar_enlaces = m_flex.agregar_enlaces
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local function flexionar_sust(p, tipo)
local r = p
if tipo:find("[dD][uU]'?") then
return {s={r}, p={r.."~Du'~"}}
elseif tipo:find("[pP][uU]'?") then
return {s={r}, p={r.."~pu'~"}}
end
return {s={r}, p={r.."~mey~"}}
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {por_defecto = ""},
[2] = {alias_de = "p"},
["alt"] = {},
["p"] = {lista = true},
["plural"] = {alias_de = "p"},
["n"] = {},
["nota"] = {alias_de = "n"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local modo = args[1]
local cats = {}
local cat_pref = "TLH:Sustantivos"
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif modo == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif modo == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
end
local flex_ = flexionar_sust(title, modo)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and modo == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
flex.p = {}
elseif modo and modo == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
flex.p = {}
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{{"plural", flex.p}},
ns == 0 and cats or {},
nil,
"." -- considero toda la cadena como toda una sola palabra, independientemente de los guiones o espacios que tenga
)
end
return export
pth7ue3usyanp5x8dl35iz6tufdrr5t
Módulo:flex/lfn
828
1061294
6118177
6117315
2026-06-16T02:18:34Z
TMCbot
164594
.
6118177
Scribunto
text/plain
-- Flexión para la LINGUA FRANCA NOVA
-- Autor: Tmagc
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local len = m_str.len
local sub = m_str.sub
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
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 guion = "%-"
local VOCAL = "["..vocal.."]"
local CONS = "["..cons.."]"
local ESPACIO = "["..espacios.."]"
local LETRA = "[^"..espacios.."]"
function export.flexionar_palabra(p, g)
local mf = g == "mf"
local r, v = match(p, "^(.*)("..VOCAL..")$")
if v then
return {s={r.."~"..v.."~"}, p={r.."~"..v.."s~"}}
end
r, v = match(p, "^(.*)("..CONS..")$")
if v then
return {s={r.."~"..v.."~"}, p={r.."~"..v.."es~"}}
end
error("No se pudo determinar la flexión de la palabra")
end
function export.flexion_sust_adj(palabras, g, copulativa)
local a, separador, b = match(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)
local flex2 = copulativa and export.flexionar_palabra(b, g) or {s={b}, p={}}
flex1.p = flex1.p[1] and flex1.p or flex1.s
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.p, flex.s) then
flex.p = {}
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto = match(palabras, "^("..guion.."?"..LETRA.."+)(.-)$")
local flex = export.flexionar_palabra(p, g)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
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, cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." irregulares")
elseif modo == "mf" then
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." regulares")
elseif find(title, LETRA..ESPACIO..LETRA) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.s[1]),
enc,
args["n"],
{{"plural", flex.p}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
["alt"] = {},
["s"] = {lista = true},
["p"] = {lista = true},
["plural"] = {alias_de = "p"},
["n"] = {},
["nota"] = {alias_de = "n"},
["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(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "LFN:Locuciones sustantivas" or "LFN:Sustantivos")
end
return export
iheb6fkpqpyumkqbcduj9few6kbvcjz
Módulo:flex/oc
828
1061596
6118180
6117316
2026-06-16T02:18:39Z
TMCbot
164594
.
6118180
Scribunto
text/plain
-- Flexión del occitano
-- Basado en la implementación de ca.wikt [[ca:Module:oc-lema]]
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local size = m_table.size
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local len = m_str.len
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local unaccented_vowel = "aeiouïüAEIOUÏÜ"
local accented_vowel = "àèéíòóúÀÈÉÍÒÓÚ"
local vowel = unaccented_vowel .. accented_vowel
local cons = "bcdfghjklmnpqrstvwxyzçBCDFGHJKLMNPQRSTVWXYZÇ·"
local V = "[" .. vowel .. "]"
local AV = "[" .. accented_vowel .. "]"
local NAV = "[^" .. accented_vowel .. "]"
local UAV = "[" .. unaccented_vowel .. "]"
local C = "[" .. cons .. "]"
-- local LETRA = "[" .. vowel .. cons .. "]"
local espacios = "%s"
local espacios_o_guiones = "%-‐%s"
local ESPACIO = "["..espacios.."]"
local ESPACIO_O_GUION = "["..espacios_o_guiones.."]"
local LETRA = "[^"..espacios.."]"
local quitar_tilde =
{
["á"] = "a",
["é"] = "e",
["í"] = "i",
["ó"] = "o",
["ú"] = "u",
["à"] = "a",
["è"] = "e",
["ì"] = "i",
["ò"] = "o",
["ù"] = "u",
["a"] = "a",
["e"] = "e",
["i"] = "i",
["o"] = "o",
["u"] = "u",
["Á"] = "A",
["É"] = "E",
["Í"] = "I",
["Ó"] = "O",
["Ú"] = "U",
["À"] = "A",
["È"] = "E",
["Ì"] = "I",
["Ò"] = "O",
["Ù"] = "U",
["A"] = "A",
["E"] = "E",
["I"] = "I",
["O"] = "O",
["U"] = "U",
}
local tildar = {
["a"] = "à",
["e"] = "è",
["i"] = "í",
["o"] = "ò",
["u"] = "ú",
["ï"] = "í",
["A"] = "À",
["E"] = "È",
["I"] = "Í",
["O"] = "Ò",
["U"] = "Ú",
["Ï"] = "Í",
}
local function es_locucion(tit, cop)
return find(tit, LETRA..ESPACIO_O_GUION..LETRA) or (cop ~= nil and find(tit, LETRA..ESPACIO_O_GUION..LETRA))
end
local function try(p, rx, repl)
local p2, sust = gsubb(p, rx, "~%0~")
if sust then
if not repl then
return {p2, nil}
end
local a = gsub(p, rx, repl)
return {p2, a}
end
return nil
end
-- Forma plural aranesa
local function forma_plural_ar(sing, pos, forzar_s)
local plural = try(sing, "ca$", "~ques~")
or try(sing, "ça$", "~ces~")
or try(sing, "ga$", "~gues~")
or try(sing, "gua$", "~gües~")
or try(sing, "ja$", "~ges~")
or try(sing, "a$", "~es~")
or try(sing, "([ao])ís$", "~%1ïsi~")
or try(sing, "([àèò])s$", function (a) return "~"..quitar_tilde[a].."ssi~" end)
or try(sing, "([éíóú])s$", function (a) return "~"..quitar_tilde[a].."si~" end)
if pos == "adj-m" then
plural = try(sing, "[^aàeèéiíoòóuú][^aàeèéiíoòóuú]e$", "~%0s~")
or try(sing, "e$", "~i~")
or try(sing, "i$", "~%0s~")
or try(sing, "([aàeéèiíoóòuú])th$", "~%1ri~")
or try(sing, "([aàeéèiíoóòuú])t$", "~%1di~")
if plural then
return plural
end
end
if pos == "nom-m" or pos == "adj-m" then
plural = try(sing, "s$", "~%0i~")
or try(sing, "tz$", "~%0i~")
or try(sing, "ish$", "~%0i~")
or try(sing, "s[^aàeèéiíoòóuú]$", "~%0i~")
else
plural = try(sing, "s$", "~%0es~")
or try(sing, "tz$", "~%0es~")
or try(sing, "ish$", "~%0es~")
or try(sing, "s[^aàeèéiíoòóuú]$", "~%0es~")
end
plural = try(sing, "ç$", "~ci~")
or try(sing, "c$", "~qui~")
or try(sing, "[^i]$", "~%0i~")
or try(sing, "[^s]$", "~%0s~")
if not plural then
error("no se pudo determinar la flexión de la palabra")
end
return plural
end
-- Forma plural general
local function forma_plural_general(sing, pos, forzar_s)
local plural = try(sing, "([ao])ís$", "~%1ïses~")
or try(sing, "([àèò])s$", function (a) return "~"..quitar_tilde[a].."sses~" end)
or try(sing, "([éíóú])s$", function (a) return "~"..quitar_tilde[a].."ses~" end)
or try(sing, "[aàeéèiíoóòuú][^aàeéèiíoóòuú]+[aeiou]s$", nil)
or try(sing, "ç$", "~ces~")
or try(sing, "sc$", "~sques~")
or try(sing, "[^aàeéèiíoóòuú]g$", "~%0s~")
or try(sing, "tz$", "~ses~")
or try(sing, "[sx]t$", "~%0es~")
or try(sing, "[cs]h$", "~%0es~")
or try(sing, "sp$", "~%0es~")
or try(sing, "[fgsxz]$", "~%0es~")
or try(sing, "[^s]$", "~%0s~")
if not plural then
error("no se pudo determinar la flexión de la palabra")
end
return plural
end
local function forma_plural(word, pos, forzar_s)
local flex1 = forma_plural_general(word, pos, forzar_s)
local flex2 = forma_plural_ar(word, pos, forzar_s)
local flex = {m={flex1[1]},p={flex1[2]},f={},fp={}}
if flex2[2] and flex1[2] and gsub1(flex1[2], "[~#]", "") ~= gsub1(flex2[2], "[~#]", "") then
insert(flex.p, flex2[2])
end
return flex
end
local function forma_femenina(masc)
local fem
if find(masc, "a$") then
fem = masc
elseif find(masc, "[aàeéèoóòuú]c$") then
fem = gsub(masc, "c$", "ga")
elseif find(masc, "e$") then
fem = gsub(masc, "ce$", "ça")
fem = gsub(fem, "ge$", "ja")
fem = gsub(fem, "güe$", "gua")
fem = gsub(fem, "e$", "a")
elseif find(masc, "[aàeéèiíoóòuú]g$") then
fem = gsub(masc, "g$", "ja")
elseif find(masc, "th$") then
fem = gsub(masc, "th$", "ra")
elseif find(masc, "i$") then
fem = gsub(masc, "a([^aeiou][^aeiou]?)i$", "à%1ia")
fem = gsub(fem, "i([^aeiou])i$", "í%1ia")
fem = gsub(fem, "i$", "ia")
elseif find(masc, "o$") then
fem = gsub(masc, "o$", "a")
elseif find(masc, "p$") then
fem = gsub(masc, "p$", "ba")
elseif find(masc, "[àéèíóòú]s$") then
fem = gsub(masc, "às$", "asa")
fem = gsub(fem, "és$", "esa")
fem = gsub(fem, "ès$", "essa")
fem = gsub(fem, "([ao])ís$", "%1ïsa")
fem = gsub(fem, "ís$", "isa")
fem = gsub(fem, "òs$", "ossa")
fem = gsub(fem, "ós$", "osa")
fem = gsub(fem, "ús$", "usa")
elseif find(masc, "[aàeéèiíoóòuú]t$") then
fem = gsub(masc, "t$", "da")
elseif find(masc, "u$") then
fem = gsub(masc, "([aeio])u$", "%1va")
fem = gsub(fem, "i(%l)u$", "í%1ua")
fem = gsub(fem, "u$", "ua")
else
fem = masc .. "a"
end
return fem
end
local function flexionar_palabra(p, modo, s)
local pos, g = match(modo, "^(.*)%-(.*)$")
if g ~= "mf" then
return forma_plural(p, pos.."-"..g, s)
end
local flex = forma_plural(p, pos.."-m", s)
local fem = forma_femenina(p)
local flex_f = forma_plural(fem, pos.."-f", s)
if not deepequals(flex, flex_f) then
flex.f = flex_f.m
flex.fp = flex_f.p
end
return flex
end
local function flexion_sust_adj(palabras, modo, forzar_s, copulativa)
local a, separador, b
if copulativa == true or copulativa == false then
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO_O_GUION..")("..LETRA.."+)$")
else
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
end
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, modo, forzar_s)
local flex2 = copulativa and flexionar_palabra(b, modo, forzar_s) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto
if copulativa == false then
p, resto = match(palabras, "^(%-?[^"..espacios_o_guiones.."]+)(.-)$")
else
p, resto = match(palabras, "^("..LETRA.."+)(.-)$")
end
local flex = flexionar_palabra(p, modo, forzar_s)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
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_ = flexion_sust_adj(title, args.es_adjetivo and "adj-mf" or "nom-"..modo, args["s"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariable"
insert(cats, cat_pref.." invariables")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariable en género"
insert(cats, cat_pref.." invariables en género")
--insert(cats, cat_pref.." regulares")
elseif es_locucion(title, args["cop"]) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["n"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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)
local valido = {
["m"] = true,
["f"] = true,
["mf"] = true,
["n"] = true,
["ng"] = true,
["inv"] = true,
["s"] = true,
["p"] = true,
["irreg"] = true
}
assert(valido[args[1]], "Especifique el género del sustantivo en el primer parámetro: m, f, mf, ng, inv, s, p, irreg")
return formatear_sust_adj(frame, title, ns, args, es_locucion(title, args["cop"]) and "OC:Locuciones sustantivas" or "OC:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["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"
args.es_adjetivo = true
return formatear_sust_adj(frame, title, ns, args, es_locucion(title, args["cop"]) and "OC:Locuciones adjetivas" or "OC:Adjetivos")
end
return export
m89w9ch9wvygqik9y2nzpn8rji2yyhv
Categoría:ES:Adjetivos invariables
14
1061855
6118159
5943679
2026-06-16T02:13:11Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:ES:Adjetivos invariantes]] a [[Categoría:ES:Adjetivos invariables]] sin dejar una redirección: obsoleta
5943679
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
wicca
0
1063949
6118116
6116464
2026-06-16T00:35:49Z
Tmagc
158167
6118116
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
==== {{sustantivo femenino|es}} ====
{{es.sust|s}}
;1 {{csem|religión}}: {{plm|religión}} [[neopagano|neopagana]] que se centra en la [[naturaleza]] y cuyos practicantes [[adorar|adoran]] a un [[dios]] con [[cuerno]]s y a una diosa de la [[Luna]], además de practicar [[ritual]]es que consideran relacionados con la [[brujería]].
==== Véase también ====
{{w}}
==== 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 />
bdyb9bx7t04qgumbe6eco9omy27r65g
obscurecimiento
0
1063990
6118126
6116614
2026-06-16T01:02:07Z
Tmagc
158167
6118126
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{año de documentación|1910}}.<ref>{{CNDHE}}</ref> {{etimología|regresiva|oscurecimiento}}.
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1: {{variante anticuada|oscurecimiento}}.<ref>{{DLE1925}}</ref>
==== Traducciones ====
{{trad-véase|1|oscurecimiento}}
== Referencias y notas ==
<references />
f32ojpyug797bnx33njajh5k5rvwp9j
Usuario discusión:Alex4660
3
1064180
6118139
6117390
2026-06-16T01:45:55Z
Tmagc
158167
/* Guilmai */ Respuesta
6118139
wikitext
text/x-wiki
<div style="padding:10px; font-size:101%; background:var(--background-color-success-subtle); color:var(--color-base); border: 1px dotted var(--border-color-notice);" >
Hola, Alex4660. 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"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio.
:<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 '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial 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. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}.
{|
| 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 '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(~~~~)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.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.<br />
Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div>
== [[Guilmai]] ==
:saludos cordiales , nose porque
: se ha bajado mi información no encuentro el motivo [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 02:49 6 jun 2026 (UTC)
::Es contenido generado con LLM, aparte de que no tiene fuentes. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:06 6 jun 2026 (UTC)
:::estimado las fuentes se citan acá mismo , conadi inscribio el apellido a merced , no es originario de la etnia mapuche , alrededor del año 2012 fue registrado en conadi, pero el apellido originalmente es incierto aunque en francia se tienen los primeros registros https://es.geneanet.org/apellidos/GUILMAI , hay funtes confiables , el publicar esta informacion perjudica a quienes les interese su etimología. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 04:11 6 jun 2026 (UTC)
::::Hola, @[[Usuario:Alex4660|Alex4660]]. No has rebatido la acusación de que el contenido ha sido generado artificialmente. Si se vuelve a repetir, serás expulsado del proyecto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 07:51 6 jun 2026 (UTC)
:::::el contenido fue redactado por mí a partir de la información que he recopilado. Utilicé herramientas de corrección ortográfica y redacción para mejorar el texto, pero la investigación y la selección de las fuentes son de mi autoría.
:::::Si existen problemas concretos de verificabilidad, formato o calidad de las referencias, agradecería que se me indicaran para corregirlos. Mi intención es aportar información verificable y adecuadamente referenciada sobre la etimología y los registros documentados del apellido, vuelvo a reiterar que no me parece adecuado mantener informacion que es incompleta solo trato de hacer lo que es correcto. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:08 6 jun 2026 (UTC)
::::::Hola, @[[Usuario:Alex4660|Alex4660]]. De acuerdo, gracias por aclarar lo de la IA. Con respecto a la etimología, no está permitido practicar la [[w:WP:IO#¿Qué es investigación original?|investigación original]]. Las fuentes que has encontrado podrían ser válidas para atestiguar la existencia del apellido <u>francés</u> Guilmai en <u>Francia</u>, pero necesitamos una fuente que hable explícitamente del apellido <u>español</u> Guilmai; parto del desconocimiento de si son el mismo o no, y la información que aportaste no es concluyente. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:46 6 jun 2026 (UTC)
:::::He actualizado la sección de etimología añadiendo una fuente documental directa (un registro de 1795 alojado en FamilySearch). Creo que este dato aporta mayor verificabilidad y neutralidad a la entrada. Un saludo. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:44 6 jun 2026 (UTC)
::::::Estaba redactando mi mensaje mientras tú escribías este. Como decía, lo único que demuestras es que existía un Guilmai en Francia, pero no que es el mismo Guilmai. La edición incluye además errores de formato. Voy a devolverla al estado anterior, y te animo a crear la sección francesa (debajo de la española), arriba tienes enlaces sobre cómo hacerlo. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:49 6 jun 2026 (UTC)
:::::::Entiendo perfectamente el punto sobre la investigación original y la síntesis de fuentes; tienes razón en que no puedo hacer una conexión directa. Recién estoy aprendiendo a usar las reglas internas de la web y la verdad es que me sorprende el nivel de detalle, rigor y rapidez de tu respuesta. Agradezco mucho que te tomaras el tiempo de orientarme. Siguiendo tu consejo, voy a crear la sección en francés para documentar los registros históricos de Europa de forma independiente. Me gustaría mucho seguir aprendiendo y colaborando en el proyecto en lo que se pueda. ¡Un saludo! [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 23:10 6 jun 2026 (UTC)
::::::::@[[Usuario:Alex4660|Alex4660]] Acabo de revertir tus contribuciones. Entré a la página y en ningún lugar figura lo que agregaste. El enlace solamente serviría para probar la última afirmación de que "se encuentra ampliamente documentado en registros parroquiales y vitales de Francia", obviamente que eso es irrelevante para este sitio. Por última vez te pido que dejes de inventar cosas que no aparecen en las referencias, si volvés a insistir pediré tu bloqueo. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:45 16 jun 2026 (UTC)
== Ediciones vandálicas ==
<templatestyles src="metaplantilla de avisos/styles.css" /><table style="{{#if:s|border:2px solid #{{#switch:advertencia|protección=bba|serio=b22222|borrar=b22222|borrado=b22222|rechazado=b22222|contenido=f28500|advertencia=f28500|estilo=f4c430|fusionar=9932cc|aviso=1e90ff|desarrollo=228b22|aceptado=228b22|#default=000000}};padding:0.5em; margin:0.5em auto;|}}" class="plainlinks ambox {{#switch:advertencia
| protección = ambox-protection
| serio = ambox-serious
| borrar = ambox-serious
| borrado = ambox-serious
| rechazado = ambox-serious
| contenido = ambox-content
| advertencia = ambox-content
| estilo = ambox-style
| fusionar = ambox-merge
| aviso = ambox-notice
| desarrollo = ambox-growth
| aceptado = ambox-growth
| #default = ambox-notice
}}">
<tr>
<td class="ambox-image">
{{#ifeq:{{{imagen}}}|ninguna
| <!-- no hay celda con imagen; celda vacía necesaria para que la celda de texto tenga anchura 100% -->
| <div style="width:52px;"> {{#switch:advertencia
| protección = [[Imagen:OOjs UI icon lock.svg|40px|class=skin-invert-image]]
| serio = [[Imagen:OOjs UI icon error-destructive.svg|40px]]
| borrar = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| borrado = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| rechazado = [[Imagen:OOjs UI icon close-ltr-darkred.svg|40px]]
| contenido = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| advertencia = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| estilo = [[Imagen:OOjs UI icon broom.svg|40px]]
| fusionar = [[Imagen:Merge-short arrows.svg]]
| aviso = [[Imagen:OOjs UI icon information-progressive.svg|40px]]
| desarrollo = [[Imagen:OOjs UI icon puzzle-ltr-green.svg|40px]]
| aceptado = [[Imagen:OOjs UI icon check-green.svg|40px]]
| vacío = [[Imagen:No image.svg]]
| #default = [[Archivo:OOjs UI icon information-progressive.svg|40px]]
}}</div>
}}</td>
<td class="ambox-text">Por favor, detente. Si continúas vandalizando páginas{{ #if: | como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td>
{{#if:|
<td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td>
}}
</tr>
</table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC)
8alscsh9nbzjdsbav05adpmiv3dxi45
6118189
6118139
2026-06-16T03:13:42Z
Alex4660
182950
/* Guilmai */ Respuesta
6118189
wikitext
text/x-wiki
<div style="padding:10px; font-size:101%; background:var(--background-color-success-subtle); color:var(--color-base); border: 1px dotted var(--border-color-notice);" >
Hola, Alex4660. 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"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio.
:<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 '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial 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. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}.
{|
| 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 '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(~~~~)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.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.<br />
Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div>
== [[Guilmai]] ==
:saludos cordiales , nose porque
: se ha bajado mi información no encuentro el motivo [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 02:49 6 jun 2026 (UTC)
::Es contenido generado con LLM, aparte de que no tiene fuentes. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:06 6 jun 2026 (UTC)
:::estimado las fuentes se citan acá mismo , conadi inscribio el apellido a merced , no es originario de la etnia mapuche , alrededor del año 2012 fue registrado en conadi, pero el apellido originalmente es incierto aunque en francia se tienen los primeros registros https://es.geneanet.org/apellidos/GUILMAI , hay funtes confiables , el publicar esta informacion perjudica a quienes les interese su etimología. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 04:11 6 jun 2026 (UTC)
::::Hola, @[[Usuario:Alex4660|Alex4660]]. No has rebatido la acusación de que el contenido ha sido generado artificialmente. Si se vuelve a repetir, serás expulsado del proyecto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 07:51 6 jun 2026 (UTC)
:::::el contenido fue redactado por mí a partir de la información que he recopilado. Utilicé herramientas de corrección ortográfica y redacción para mejorar el texto, pero la investigación y la selección de las fuentes son de mi autoría.
:::::Si existen problemas concretos de verificabilidad, formato o calidad de las referencias, agradecería que se me indicaran para corregirlos. Mi intención es aportar información verificable y adecuadamente referenciada sobre la etimología y los registros documentados del apellido, vuelvo a reiterar que no me parece adecuado mantener informacion que es incompleta solo trato de hacer lo que es correcto. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:08 6 jun 2026 (UTC)
::::::Hola, @[[Usuario:Alex4660|Alex4660]]. De acuerdo, gracias por aclarar lo de la IA. Con respecto a la etimología, no está permitido practicar la [[w:WP:IO#¿Qué es investigación original?|investigación original]]. Las fuentes que has encontrado podrían ser válidas para atestiguar la existencia del apellido <u>francés</u> Guilmai en <u>Francia</u>, pero necesitamos una fuente que hable explícitamente del apellido <u>español</u> Guilmai; parto del desconocimiento de si son el mismo o no, y la información que aportaste no es concluyente. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:46 6 jun 2026 (UTC)
:::::He actualizado la sección de etimología añadiendo una fuente documental directa (un registro de 1795 alojado en FamilySearch). Creo que este dato aporta mayor verificabilidad y neutralidad a la entrada. Un saludo. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:44 6 jun 2026 (UTC)
::::::Estaba redactando mi mensaje mientras tú escribías este. Como decía, lo único que demuestras es que existía un Guilmai en Francia, pero no que es el mismo Guilmai. La edición incluye además errores de formato. Voy a devolverla al estado anterior, y te animo a crear la sección francesa (debajo de la española), arriba tienes enlaces sobre cómo hacerlo. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:49 6 jun 2026 (UTC)
:::::::Entiendo perfectamente el punto sobre la investigación original y la síntesis de fuentes; tienes razón en que no puedo hacer una conexión directa. Recién estoy aprendiendo a usar las reglas internas de la web y la verdad es que me sorprende el nivel de detalle, rigor y rapidez de tu respuesta. Agradezco mucho que te tomaras el tiempo de orientarme. Siguiendo tu consejo, voy a crear la sección en francés para documentar los registros históricos de Europa de forma independiente. Me gustaría mucho seguir aprendiendo y colaborando en el proyecto en lo que se pueda. ¡Un saludo! [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 23:10 6 jun 2026 (UTC)
::::::::@[[Usuario:Alex4660|Alex4660]] Acabo de revertir tus contribuciones. Entré a la página y en ningún lugar figura lo que agregaste. El enlace solamente serviría para probar la última afirmación de que "se encuentra ampliamente documentado en registros parroquiales y vitales de Francia", obviamente que eso es irrelevante para este sitio. Por última vez te pido que dejes de inventar cosas que no aparecen en las referencias, si volvés a insistir pediré tu bloqueo. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:45 16 jun 2026 (UTC)
:::::::Hola Peter, siguiendo tu orientación creé la sección en francés de forma independiente, con un enlace directo al registro de FamilySearch de 1795 (Léon Guilmai y Françoise Vallée), sin modificar la sección española existente. La sección estuvo activa más de una semana sin problema.
:::::::Hace unas horas, el usuario Tmagc la revirtió indicando que el enlace «no muestra lo que se afirma». Creo que el problema puede ser que FamilySearch requiere una cuenta gratuita para acceder a los registros, lo que impediría verificarlo automáticamente(quizás el usuario Tmagc verifica con bot ). El contenido sí figura en la fuente una vez que se accede con sesión iniciada.
:::::::Te agradecería que pudieras revisar si la edición cumplía los requisitos del proyecto. Además, quisiera señalar que expresiones como «deja de inventar cosas» y la amenaza inmediata de solicitar un bloqueo, frente a una contribución realizada de buena fe y con fuentes, no me parecen un tono adecuado para resolver diferencias editoriales. Si corresponde, agradecería que eso también pudiera ser evaluado.
:::::::Saludos. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 03:13 16 jun 2026 (UTC)
== Ediciones vandálicas ==
<templatestyles src="metaplantilla de avisos/styles.css" /><table style="{{#if:s|border:2px solid #{{#switch:advertencia|protección=bba|serio=b22222|borrar=b22222|borrado=b22222|rechazado=b22222|contenido=f28500|advertencia=f28500|estilo=f4c430|fusionar=9932cc|aviso=1e90ff|desarrollo=228b22|aceptado=228b22|#default=000000}};padding:0.5em; margin:0.5em auto;|}}" class="plainlinks ambox {{#switch:advertencia
| protección = ambox-protection
| serio = ambox-serious
| borrar = ambox-serious
| borrado = ambox-serious
| rechazado = ambox-serious
| contenido = ambox-content
| advertencia = ambox-content
| estilo = ambox-style
| fusionar = ambox-merge
| aviso = ambox-notice
| desarrollo = ambox-growth
| aceptado = ambox-growth
| #default = ambox-notice
}}">
<tr>
<td class="ambox-image">
{{#ifeq:{{{imagen}}}|ninguna
| <!-- no hay celda con imagen; celda vacía necesaria para que la celda de texto tenga anchura 100% -->
| <div style="width:52px;"> {{#switch:advertencia
| protección = [[Imagen:OOjs UI icon lock.svg|40px|class=skin-invert-image]]
| serio = [[Imagen:OOjs UI icon error-destructive.svg|40px]]
| borrar = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| borrado = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| rechazado = [[Imagen:OOjs UI icon close-ltr-darkred.svg|40px]]
| contenido = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| advertencia = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| estilo = [[Imagen:OOjs UI icon broom.svg|40px]]
| fusionar = [[Imagen:Merge-short arrows.svg]]
| aviso = [[Imagen:OOjs UI icon information-progressive.svg|40px]]
| desarrollo = [[Imagen:OOjs UI icon puzzle-ltr-green.svg|40px]]
| aceptado = [[Imagen:OOjs UI icon check-green.svg|40px]]
| vacío = [[Imagen:No image.svg]]
| #default = [[Archivo:OOjs UI icon information-progressive.svg|40px]]
}}</div>
}}</td>
<td class="ambox-text">Por favor, detente. Si continúas vandalizando páginas{{ #if: | como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td>
{{#if:|
<td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td>
}}
</tr>
</table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC)
ajg9pzgzkw2yxczu2igojv325dcablf
6118190
6118189
2026-06-16T04:35:19Z
Tmagc
158167
/* Guilmai */ Respuesta
6118190
wikitext
text/x-wiki
<div style="padding:10px; font-size:101%; background:var(--background-color-success-subtle); color:var(--color-base); border: 1px dotted var(--border-color-notice);" >
Hola, Alex4660. 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"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio.
:<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 '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial 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. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}.
{|
| 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 '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(~~~~)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.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.<br />
Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div>
== [[Guilmai]] ==
:saludos cordiales , nose porque
: se ha bajado mi información no encuentro el motivo [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 02:49 6 jun 2026 (UTC)
::Es contenido generado con LLM, aparte de que no tiene fuentes. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:06 6 jun 2026 (UTC)
:::estimado las fuentes se citan acá mismo , conadi inscribio el apellido a merced , no es originario de la etnia mapuche , alrededor del año 2012 fue registrado en conadi, pero el apellido originalmente es incierto aunque en francia se tienen los primeros registros https://es.geneanet.org/apellidos/GUILMAI , hay funtes confiables , el publicar esta informacion perjudica a quienes les interese su etimología. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 04:11 6 jun 2026 (UTC)
::::Hola, @[[Usuario:Alex4660|Alex4660]]. No has rebatido la acusación de que el contenido ha sido generado artificialmente. Si se vuelve a repetir, serás expulsado del proyecto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 07:51 6 jun 2026 (UTC)
:::::el contenido fue redactado por mí a partir de la información que he recopilado. Utilicé herramientas de corrección ortográfica y redacción para mejorar el texto, pero la investigación y la selección de las fuentes son de mi autoría.
:::::Si existen problemas concretos de verificabilidad, formato o calidad de las referencias, agradecería que se me indicaran para corregirlos. Mi intención es aportar información verificable y adecuadamente referenciada sobre la etimología y los registros documentados del apellido, vuelvo a reiterar que no me parece adecuado mantener informacion que es incompleta solo trato de hacer lo que es correcto. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:08 6 jun 2026 (UTC)
::::::Hola, @[[Usuario:Alex4660|Alex4660]]. De acuerdo, gracias por aclarar lo de la IA. Con respecto a la etimología, no está permitido practicar la [[w:WP:IO#¿Qué es investigación original?|investigación original]]. Las fuentes que has encontrado podrían ser válidas para atestiguar la existencia del apellido <u>francés</u> Guilmai en <u>Francia</u>, pero necesitamos una fuente que hable explícitamente del apellido <u>español</u> Guilmai; parto del desconocimiento de si son el mismo o no, y la información que aportaste no es concluyente. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:46 6 jun 2026 (UTC)
:::::He actualizado la sección de etimología añadiendo una fuente documental directa (un registro de 1795 alojado en FamilySearch). Creo que este dato aporta mayor verificabilidad y neutralidad a la entrada. Un saludo. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:44 6 jun 2026 (UTC)
::::::Estaba redactando mi mensaje mientras tú escribías este. Como decía, lo único que demuestras es que existía un Guilmai en Francia, pero no que es el mismo Guilmai. La edición incluye además errores de formato. Voy a devolverla al estado anterior, y te animo a crear la sección francesa (debajo de la española), arriba tienes enlaces sobre cómo hacerlo. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:49 6 jun 2026 (UTC)
:::::::Entiendo perfectamente el punto sobre la investigación original y la síntesis de fuentes; tienes razón en que no puedo hacer una conexión directa. Recién estoy aprendiendo a usar las reglas internas de la web y la verdad es que me sorprende el nivel de detalle, rigor y rapidez de tu respuesta. Agradezco mucho que te tomaras el tiempo de orientarme. Siguiendo tu consejo, voy a crear la sección en francés para documentar los registros históricos de Europa de forma independiente. Me gustaría mucho seguir aprendiendo y colaborando en el proyecto en lo que se pueda. ¡Un saludo! [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 23:10 6 jun 2026 (UTC)
::::::::@[[Usuario:Alex4660|Alex4660]] Acabo de revertir tus contribuciones. Entré a la página y en ningún lugar figura lo que agregaste. El enlace solamente serviría para probar la última afirmación de que "se encuentra ampliamente documentado en registros parroquiales y vitales de Francia", obviamente que eso es irrelevante para este sitio. Por última vez te pido que dejes de inventar cosas que no aparecen en las referencias, si volvés a insistir pediré tu bloqueo. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:45 16 jun 2026 (UTC)
:::::::Hola Peter, siguiendo tu orientación creé la sección en francés de forma independiente, con un enlace directo al registro de FamilySearch de 1795 (Léon Guilmai y Françoise Vallée), sin modificar la sección española existente. La sección estuvo activa más de una semana sin problema.
:::::::Hace unas horas, el usuario Tmagc la revirtió indicando que el enlace «no muestra lo que se afirma». Creo que el problema puede ser que FamilySearch requiere una cuenta gratuita para acceder a los registros, lo que impediría verificarlo automáticamente(quizás el usuario Tmagc verifica con bot ). El contenido sí figura en la fuente una vez que se accede con sesión iniciada.
:::::::Te agradecería que pudieras revisar si la edición cumplía los requisitos del proyecto. Además, quisiera señalar que expresiones como «deja de inventar cosas» y la amenaza inmediata de solicitar un bloqueo, frente a una contribución realizada de buena fe y con fuentes, no me parecen un tono adecuado para resolver diferencias editoriales. Si corresponde, agradecería que eso también pudiera ser evaluado.
:::::::Saludos. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 03:13 16 jun 2026 (UTC)
::::::::No, cualquiera que entre a la página a revisar de dónde sacaste la información puede ver que en ningún lugar figura que ''Guilmai'' viene de ''Guillemet''. Eso te lo estás inventando porque en la columna de "Similar Records" aparece la partida de nacimiento de un tal ''Leon Guillemet'', pero de nuevo, eso es una asociación que hace la base de datos automáticamente por la coincidencia de a nivel de prefijo. Y una vez más, no estás respondiendo a lo que interesa: de dónde sacás que un apellido viene del otro? Puede haber una o cien partidas de nacimiento de uno o del otro, pero si en ningún lado aparece que están relacionados, de nada sirve esa fuente. No pierdo más mi tiempo con vos. Y un último consejo: cesá de inmediato con el uso de LLM y leé una por una las referencias que cites, que bastante tiempo tenemos que perder leyendo todas tus ocurrencias que escribís. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:35 16 jun 2026 (UTC)
== Ediciones vandálicas ==
<templatestyles src="metaplantilla de avisos/styles.css" /><table style="{{#if:s|border:2px solid #{{#switch:advertencia|protección=bba|serio=b22222|borrar=b22222|borrado=b22222|rechazado=b22222|contenido=f28500|advertencia=f28500|estilo=f4c430|fusionar=9932cc|aviso=1e90ff|desarrollo=228b22|aceptado=228b22|#default=000000}};padding:0.5em; margin:0.5em auto;|}}" class="plainlinks ambox {{#switch:advertencia
| protección = ambox-protection
| serio = ambox-serious
| borrar = ambox-serious
| borrado = ambox-serious
| rechazado = ambox-serious
| contenido = ambox-content
| advertencia = ambox-content
| estilo = ambox-style
| fusionar = ambox-merge
| aviso = ambox-notice
| desarrollo = ambox-growth
| aceptado = ambox-growth
| #default = ambox-notice
}}">
<tr>
<td class="ambox-image">
{{#ifeq:{{{imagen}}}|ninguna
| <!-- no hay celda con imagen; celda vacía necesaria para que la celda de texto tenga anchura 100% -->
| <div style="width:52px;"> {{#switch:advertencia
| protección = [[Imagen:OOjs UI icon lock.svg|40px|class=skin-invert-image]]
| serio = [[Imagen:OOjs UI icon error-destructive.svg|40px]]
| borrar = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| borrado = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| rechazado = [[Imagen:OOjs UI icon close-ltr-darkred.svg|40px]]
| contenido = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| advertencia = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| estilo = [[Imagen:OOjs UI icon broom.svg|40px]]
| fusionar = [[Imagen:Merge-short arrows.svg]]
| aviso = [[Imagen:OOjs UI icon information-progressive.svg|40px]]
| desarrollo = [[Imagen:OOjs UI icon puzzle-ltr-green.svg|40px]]
| aceptado = [[Imagen:OOjs UI icon check-green.svg|40px]]
| vacío = [[Imagen:No image.svg]]
| #default = [[Archivo:OOjs UI icon information-progressive.svg|40px]]
}}</div>
}}</td>
<td class="ambox-text">Por favor, detente. Si continúas vandalizando páginas{{ #if: | como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td>
{{#if:|
<td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td>
}}
</tr>
</table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC)
55mlxwxn5fgqnyiyvkgl81rhuj6i9wn
6118191
6118190
2026-06-16T04:39:07Z
Tmagc
158167
/* Guilmai */ Respuesta
6118191
wikitext
text/x-wiki
<div style="padding:10px; font-size:101%; background:var(--background-color-success-subtle); color:var(--color-base); border: 1px dotted var(--border-color-notice);" >
Hola, Alex4660. 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"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio.
:<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 '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial 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. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}.
{|
| 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 '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(~~~~)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.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.<br />
Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div>
== [[Guilmai]] ==
:saludos cordiales , nose porque
: se ha bajado mi información no encuentro el motivo [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 02:49 6 jun 2026 (UTC)
::Es contenido generado con LLM, aparte de que no tiene fuentes. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:06 6 jun 2026 (UTC)
:::estimado las fuentes se citan acá mismo , conadi inscribio el apellido a merced , no es originario de la etnia mapuche , alrededor del año 2012 fue registrado en conadi, pero el apellido originalmente es incierto aunque en francia se tienen los primeros registros https://es.geneanet.org/apellidos/GUILMAI , hay funtes confiables , el publicar esta informacion perjudica a quienes les interese su etimología. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 04:11 6 jun 2026 (UTC)
::::Hola, @[[Usuario:Alex4660|Alex4660]]. No has rebatido la acusación de que el contenido ha sido generado artificialmente. Si se vuelve a repetir, serás expulsado del proyecto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 07:51 6 jun 2026 (UTC)
:::::el contenido fue redactado por mí a partir de la información que he recopilado. Utilicé herramientas de corrección ortográfica y redacción para mejorar el texto, pero la investigación y la selección de las fuentes son de mi autoría.
:::::Si existen problemas concretos de verificabilidad, formato o calidad de las referencias, agradecería que se me indicaran para corregirlos. Mi intención es aportar información verificable y adecuadamente referenciada sobre la etimología y los registros documentados del apellido, vuelvo a reiterar que no me parece adecuado mantener informacion que es incompleta solo trato de hacer lo que es correcto. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:08 6 jun 2026 (UTC)
::::::Hola, @[[Usuario:Alex4660|Alex4660]]. De acuerdo, gracias por aclarar lo de la IA. Con respecto a la etimología, no está permitido practicar la [[w:WP:IO#¿Qué es investigación original?|investigación original]]. Las fuentes que has encontrado podrían ser válidas para atestiguar la existencia del apellido <u>francés</u> Guilmai en <u>Francia</u>, pero necesitamos una fuente que hable explícitamente del apellido <u>español</u> Guilmai; parto del desconocimiento de si son el mismo o no, y la información que aportaste no es concluyente. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:46 6 jun 2026 (UTC)
:::::He actualizado la sección de etimología añadiendo una fuente documental directa (un registro de 1795 alojado en FamilySearch). Creo que este dato aporta mayor verificabilidad y neutralidad a la entrada. Un saludo. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:44 6 jun 2026 (UTC)
::::::Estaba redactando mi mensaje mientras tú escribías este. Como decía, lo único que demuestras es que existía un Guilmai en Francia, pero no que es el mismo Guilmai. La edición incluye además errores de formato. Voy a devolverla al estado anterior, y te animo a crear la sección francesa (debajo de la española), arriba tienes enlaces sobre cómo hacerlo. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:49 6 jun 2026 (UTC)
:::::::Entiendo perfectamente el punto sobre la investigación original y la síntesis de fuentes; tienes razón en que no puedo hacer una conexión directa. Recién estoy aprendiendo a usar las reglas internas de la web y la verdad es que me sorprende el nivel de detalle, rigor y rapidez de tu respuesta. Agradezco mucho que te tomaras el tiempo de orientarme. Siguiendo tu consejo, voy a crear la sección en francés para documentar los registros históricos de Europa de forma independiente. Me gustaría mucho seguir aprendiendo y colaborando en el proyecto en lo que se pueda. ¡Un saludo! [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 23:10 6 jun 2026 (UTC)
::::::::@[[Usuario:Alex4660|Alex4660]] Acabo de revertir tus contribuciones. Entré a la página y en ningún lugar figura lo que agregaste. El enlace solamente serviría para probar la última afirmación de que "se encuentra ampliamente documentado en registros parroquiales y vitales de Francia", obviamente que eso es irrelevante para este sitio. Por última vez te pido que dejes de inventar cosas que no aparecen en las referencias, si volvés a insistir pediré tu bloqueo. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:45 16 jun 2026 (UTC)
:::::::Hola Peter, siguiendo tu orientación creé la sección en francés de forma independiente, con un enlace directo al registro de FamilySearch de 1795 (Léon Guilmai y Françoise Vallée), sin modificar la sección española existente. La sección estuvo activa más de una semana sin problema.
:::::::Hace unas horas, el usuario Tmagc la revirtió indicando que el enlace «no muestra lo que se afirma». Creo que el problema puede ser que FamilySearch requiere una cuenta gratuita para acceder a los registros, lo que impediría verificarlo automáticamente(quizás el usuario Tmagc verifica con bot ). El contenido sí figura en la fuente una vez que se accede con sesión iniciada.
:::::::Te agradecería que pudieras revisar si la edición cumplía los requisitos del proyecto. Además, quisiera señalar que expresiones como «deja de inventar cosas» y la amenaza inmediata de solicitar un bloqueo, frente a una contribución realizada de buena fe y con fuentes, no me parecen un tono adecuado para resolver diferencias editoriales. Si corresponde, agradecería que eso también pudiera ser evaluado.
:::::::Saludos. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 03:13 16 jun 2026 (UTC)
::::::::No, cualquiera que entre a la página a revisar de dónde sacaste la información puede ver que en ningún lugar figura que ''Guilmai'' viene de ''Guillemet''. Eso te lo estás inventando porque en la columna de "Similar Records" aparece la partida de nacimiento de un tal ''Leon Guillemet'', pero de nuevo, eso es una asociación que hace la base de datos automáticamente por la coincidencia de a nivel de prefijo. Y una vez más, no estás respondiendo a lo que interesa: de dónde sacás que un apellido viene del otro? Puede haber una o cien partidas de nacimiento de uno o del otro, pero si en ningún lado aparece que están relacionados, de nada sirve esa fuente. No pierdo más mi tiempo con vos. Y un último consejo: cesá de inmediato con el uso de LLM y leé una por una las referencias que cites, que bastante tiempo tenemos que perder leyendo todas tus ocurrencias que escribís. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:35 16 jun 2026 (UTC)
::::::::Si lo anterior es poco, [https://copyleaks.com/es/ai-detector péguese la respuesta del usuario aquí]. Ahora formalmente pediré tu bloqueo. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:39 16 jun 2026 (UTC)
== Ediciones vandálicas ==
<templatestyles src="metaplantilla de avisos/styles.css" /><table style="{{#if:s|border:2px solid #{{#switch:advertencia|protección=bba|serio=b22222|borrar=b22222|borrado=b22222|rechazado=b22222|contenido=f28500|advertencia=f28500|estilo=f4c430|fusionar=9932cc|aviso=1e90ff|desarrollo=228b22|aceptado=228b22|#default=000000}};padding:0.5em; margin:0.5em auto;|}}" class="plainlinks ambox {{#switch:advertencia
| protección = ambox-protection
| serio = ambox-serious
| borrar = ambox-serious
| borrado = ambox-serious
| rechazado = ambox-serious
| contenido = ambox-content
| advertencia = ambox-content
| estilo = ambox-style
| fusionar = ambox-merge
| aviso = ambox-notice
| desarrollo = ambox-growth
| aceptado = ambox-growth
| #default = ambox-notice
}}">
<tr>
<td class="ambox-image">
{{#ifeq:{{{imagen}}}|ninguna
| <!-- no hay celda con imagen; celda vacía necesaria para que la celda de texto tenga anchura 100% -->
| <div style="width:52px;"> {{#switch:advertencia
| protección = [[Imagen:OOjs UI icon lock.svg|40px|class=skin-invert-image]]
| serio = [[Imagen:OOjs UI icon error-destructive.svg|40px]]
| borrar = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| borrado = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| rechazado = [[Imagen:OOjs UI icon close-ltr-darkred.svg|40px]]
| contenido = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| advertencia = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| estilo = [[Imagen:OOjs UI icon broom.svg|40px]]
| fusionar = [[Imagen:Merge-short arrows.svg]]
| aviso = [[Imagen:OOjs UI icon information-progressive.svg|40px]]
| desarrollo = [[Imagen:OOjs UI icon puzzle-ltr-green.svg|40px]]
| aceptado = [[Imagen:OOjs UI icon check-green.svg|40px]]
| vacío = [[Imagen:No image.svg]]
| #default = [[Archivo:OOjs UI icon information-progressive.svg|40px]]
}}</div>
}}</td>
<td class="ambox-text">Por favor, detente. Si continúas vandalizando páginas{{ #if: | como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td>
{{#if:|
<td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td>
}}
</tr>
</table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC)
qigz89qs5lnrmmlahddgkrjhss2kma3
6118194
6118191
2026-06-16T09:24:00Z
Peter Bowman
34685
/* Guilmai */ Respuesta
6118194
wikitext
text/x-wiki
<div style="padding:10px; font-size:101%; background:var(--background-color-success-subtle); color:var(--color-base); border: 1px dotted var(--border-color-notice);" >
Hola, Alex4660. 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"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio.
:<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 '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial 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. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}.
{|
| 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 '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(~~~~)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.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.<br />
Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div>
== [[Guilmai]] ==
:saludos cordiales , nose porque
: se ha bajado mi información no encuentro el motivo [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 02:49 6 jun 2026 (UTC)
::Es contenido generado con LLM, aparte de que no tiene fuentes. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:06 6 jun 2026 (UTC)
:::estimado las fuentes se citan acá mismo , conadi inscribio el apellido a merced , no es originario de la etnia mapuche , alrededor del año 2012 fue registrado en conadi, pero el apellido originalmente es incierto aunque en francia se tienen los primeros registros https://es.geneanet.org/apellidos/GUILMAI , hay funtes confiables , el publicar esta informacion perjudica a quienes les interese su etimología. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 04:11 6 jun 2026 (UTC)
::::Hola, @[[Usuario:Alex4660|Alex4660]]. No has rebatido la acusación de que el contenido ha sido generado artificialmente. Si se vuelve a repetir, serás expulsado del proyecto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 07:51 6 jun 2026 (UTC)
:::::el contenido fue redactado por mí a partir de la información que he recopilado. Utilicé herramientas de corrección ortográfica y redacción para mejorar el texto, pero la investigación y la selección de las fuentes son de mi autoría.
:::::Si existen problemas concretos de verificabilidad, formato o calidad de las referencias, agradecería que se me indicaran para corregirlos. Mi intención es aportar información verificable y adecuadamente referenciada sobre la etimología y los registros documentados del apellido, vuelvo a reiterar que no me parece adecuado mantener informacion que es incompleta solo trato de hacer lo que es correcto. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:08 6 jun 2026 (UTC)
::::::Hola, @[[Usuario:Alex4660|Alex4660]]. De acuerdo, gracias por aclarar lo de la IA. Con respecto a la etimología, no está permitido practicar la [[w:WP:IO#¿Qué es investigación original?|investigación original]]. Las fuentes que has encontrado podrían ser válidas para atestiguar la existencia del apellido <u>francés</u> Guilmai en <u>Francia</u>, pero necesitamos una fuente que hable explícitamente del apellido <u>español</u> Guilmai; parto del desconocimiento de si son el mismo o no, y la información que aportaste no es concluyente. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:46 6 jun 2026 (UTC)
:::::He actualizado la sección de etimología añadiendo una fuente documental directa (un registro de 1795 alojado en FamilySearch). Creo que este dato aporta mayor verificabilidad y neutralidad a la entrada. Un saludo. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:44 6 jun 2026 (UTC)
::::::Estaba redactando mi mensaje mientras tú escribías este. Como decía, lo único que demuestras es que existía un Guilmai en Francia, pero no que es el mismo Guilmai. La edición incluye además errores de formato. Voy a devolverla al estado anterior, y te animo a crear la sección francesa (debajo de la española), arriba tienes enlaces sobre cómo hacerlo. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:49 6 jun 2026 (UTC)
:::::::Entiendo perfectamente el punto sobre la investigación original y la síntesis de fuentes; tienes razón en que no puedo hacer una conexión directa. Recién estoy aprendiendo a usar las reglas internas de la web y la verdad es que me sorprende el nivel de detalle, rigor y rapidez de tu respuesta. Agradezco mucho que te tomaras el tiempo de orientarme. Siguiendo tu consejo, voy a crear la sección en francés para documentar los registros históricos de Europa de forma independiente. Me gustaría mucho seguir aprendiendo y colaborando en el proyecto en lo que se pueda. ¡Un saludo! [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 23:10 6 jun 2026 (UTC)
::::::::@[[Usuario:Alex4660|Alex4660]] Acabo de revertir tus contribuciones. Entré a la página y en ningún lugar figura lo que agregaste. El enlace solamente serviría para probar la última afirmación de que "se encuentra ampliamente documentado en registros parroquiales y vitales de Francia", obviamente que eso es irrelevante para este sitio. Por última vez te pido que dejes de inventar cosas que no aparecen en las referencias, si volvés a insistir pediré tu bloqueo. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:45 16 jun 2026 (UTC)
:::::::Hola Peter, siguiendo tu orientación creé la sección en francés de forma independiente, con un enlace directo al registro de FamilySearch de 1795 (Léon Guilmai y Françoise Vallée), sin modificar la sección española existente. La sección estuvo activa más de una semana sin problema.
:::::::Hace unas horas, el usuario Tmagc la revirtió indicando que el enlace «no muestra lo que se afirma». Creo que el problema puede ser que FamilySearch requiere una cuenta gratuita para acceder a los registros, lo que impediría verificarlo automáticamente(quizás el usuario Tmagc verifica con bot ). El contenido sí figura en la fuente una vez que se accede con sesión iniciada.
:::::::Te agradecería que pudieras revisar si la edición cumplía los requisitos del proyecto. Además, quisiera señalar que expresiones como «deja de inventar cosas» y la amenaza inmediata de solicitar un bloqueo, frente a una contribución realizada de buena fe y con fuentes, no me parecen un tono adecuado para resolver diferencias editoriales. Si corresponde, agradecería que eso también pudiera ser evaluado.
:::::::Saludos. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 03:13 16 jun 2026 (UTC)
::::::::No, cualquiera que entre a la página a revisar de dónde sacaste la información puede ver que en ningún lugar figura que ''Guilmai'' viene de ''Guillemet''. Eso te lo estás inventando porque en la columna de "Similar Records" aparece la partida de nacimiento de un tal ''Leon Guillemet'', pero de nuevo, eso es una asociación que hace la base de datos automáticamente por la coincidencia de a nivel de prefijo. Y una vez más, no estás respondiendo a lo que interesa: de dónde sacás que un apellido viene del otro? Puede haber una o cien partidas de nacimiento de uno o del otro, pero si en ningún lado aparece que están relacionados, de nada sirve esa fuente. No pierdo más mi tiempo con vos. Y un último consejo: cesá de inmediato con el uso de LLM y leé una por una las referencias que cites, que bastante tiempo tenemos que perder leyendo todas tus ocurrencias que escribís. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:35 16 jun 2026 (UTC)
::::::::Si lo anterior es poco, [https://copyleaks.com/es/ai-detector péguese la respuesta del usuario aquí]. Ahora formalmente pediré tu bloqueo. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:39 16 jun 2026 (UTC)
::Hola, @[[Usuario:Alex4660|Alex4660]]. Al margen de la forma de comunicarse de Tmagc, que no es lo que se discute aquí, tus ediciones siguen incumpliendo los requisitos del proyecto al tratarse de investigación original; te informé sobre esto el 6 de junio, no es como para tomárselo a la ligera. En segundo (o primer) lugar, no invertimos nuestro tiempo aquí para hablar con una IA, y esto decididamente no es actuar de buena fé. Voy a bloquearte por unos días y pedirte que durante este tiempo revises las normas del proyecto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:24 16 jun 2026 (UTC)
== Ediciones vandálicas ==
<templatestyles src="metaplantilla de avisos/styles.css" /><table style="{{#if:s|border:2px solid #{{#switch:advertencia|protección=bba|serio=b22222|borrar=b22222|borrado=b22222|rechazado=b22222|contenido=f28500|advertencia=f28500|estilo=f4c430|fusionar=9932cc|aviso=1e90ff|desarrollo=228b22|aceptado=228b22|#default=000000}};padding:0.5em; margin:0.5em auto;|}}" class="plainlinks ambox {{#switch:advertencia
| protección = ambox-protection
| serio = ambox-serious
| borrar = ambox-serious
| borrado = ambox-serious
| rechazado = ambox-serious
| contenido = ambox-content
| advertencia = ambox-content
| estilo = ambox-style
| fusionar = ambox-merge
| aviso = ambox-notice
| desarrollo = ambox-growth
| aceptado = ambox-growth
| #default = ambox-notice
}}">
<tr>
<td class="ambox-image">
{{#ifeq:{{{imagen}}}|ninguna
| <!-- no hay celda con imagen; celda vacía necesaria para que la celda de texto tenga anchura 100% -->
| <div style="width:52px;"> {{#switch:advertencia
| protección = [[Imagen:OOjs UI icon lock.svg|40px|class=skin-invert-image]]
| serio = [[Imagen:OOjs UI icon error-destructive.svg|40px]]
| borrar = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| borrado = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| rechazado = [[Imagen:OOjs UI icon close-ltr-darkred.svg|40px]]
| contenido = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| advertencia = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| estilo = [[Imagen:OOjs UI icon broom.svg|40px]]
| fusionar = [[Imagen:Merge-short arrows.svg]]
| aviso = [[Imagen:OOjs UI icon information-progressive.svg|40px]]
| desarrollo = [[Imagen:OOjs UI icon puzzle-ltr-green.svg|40px]]
| aceptado = [[Imagen:OOjs UI icon check-green.svg|40px]]
| vacío = [[Imagen:No image.svg]]
| #default = [[Archivo:OOjs UI icon information-progressive.svg|40px]]
}}</div>
}}</td>
<td class="ambox-text">Por favor, detente. Si continúas vandalizando páginas{{ #if: | como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td>
{{#if:|
<td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td>
}}
</tr>
</table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC)
74xev7oiwfb58ms8son54rs1e8vwd15
solombra
0
1064289
6118061
2026-06-15T14:27:03Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|osp}} == {{pron-graf|leng=osp}} === Etimología === {{etimología|leng=osp|véase|sombra}}. Nota: la aparición de esta variante es posterior a [[sombra]]. ==== {{sustantivo femenino|osp}} ==== ;1: {{variante|leng=osp|sombra}}. == Referencias y notas == <references />»
6118061
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|osp}} ==
{{pron-graf|leng=osp}}
=== Etimología ===
{{etimología|leng=osp|véase|sombra}}. Nota: la aparición de esta variante es posterior a [[sombra]].
==== {{sustantivo femenino|osp}} ====
;1: {{variante|leng=osp|sombra}}.
== Referencias y notas ==
<references />
fbsua23kyfuyq13rpnwtikio0laxflb
garduña
0
1064290
6118065
2026-06-15T15:00:57Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|qsb-ibe}}. ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1: {{taxón|Martes foina}} Mamífero carnicero, de unos tres decímetros de largo, cabeza pequeña, orejas redondas, cuello largo, patas cortas, pelo castaño por el lomo, pardo en la cola y blanco en la gorja y pecho. Es nocturno y muy perjudicial, porque destruye las crías de muchos animales útiles. ;2: Multitud d…»
6118065
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|qsb-ibe}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{taxón|Martes foina}} Mamífero carnicero, de unos tres decímetros de largo, cabeza pequeña, orejas redondas, cuello largo, patas cortas, pelo castaño por el lomo, pardo en la cola y blanco en la gorja y pecho. Es nocturno y muy perjudicial, porque destruye las crías de muchos animales útiles.
;2: Multitud desordenada de personas.
{{sinónimo|fuina|rámila|rezmila}}
{{ámbito|El Salvador}}
;3: Juego infantil que consiste en lanzar cosas a la arrebatiña.
{{ámbito|El Salvador}}
==== Véase también ====
* [[garduño]]
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
pw0cly46qzymamydyni02xuznb3ov3o
6118066
6118065
2026-06-15T15:01:29Z
Tmagc
158167
6118066
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|qsb-ibe}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{taxón|Martes foina}} Mamífero carnicero, de unos tres decímetros de largo, cabeza pequeña, orejas redondas, cuello largo, patas cortas, pelo castaño por el lomo, pardo en la cola y blanco en la gorja y pecho. Es nocturno y muy perjudicial, porque destruye las crías de muchos animales útiles.
{{sinónimo|fuina|rámila|rezmila}}
;2: Multitud desordenada de personas.
{{ámbito|El Salvador}}
{{sinónimo|muchedumbre|gentío}}
;3: Juego infantil que consiste en lanzar cosas a la arrebatiña.
{{ámbito|El Salvador}}
==== Véase también ====
* [[garduño]]
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
ny9wwd5ay2rtxajw2178yrh1hxf4rx8
6118068
6118066
2026-06-15T15:02:47Z
Tmagc
158167
6118068
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|qsb-ibe}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{taxón|Martes foina}} Mamífero carnicero, de unos tres decímetros de largo, cabeza pequeña, orejas redondas, cuello largo, patas cortas, pelo castaño por el lomo, pardo en la cola y blanco en la gorja y pecho. Es nocturno y muy perjudicial, porque destruye las crías de muchos animales útiles.<ref>{{DLE1925}}</ref>
{{sinónimo|fuina|rámila|rezmila}}
;2: Multitud desordenada de personas.
{{ámbito|El Salvador}}
{{sinónimo|muchedumbre|gentío}}
;3: Juego infantil que consiste en lanzar cosas a la arrebatiña.
{{ámbito|El Salvador}}
==== Véase también ====
* [[garduño]]
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
kexcru24gec2lzu6346a25c5celpn9r
garduño
0
1064291
6118067
2026-06-15T15:02:21Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|masculino|garduña}}. ==== {{sustantivo masculino y femenino|es}} ==== {{es.sust|mf}} ;1: Ratero que hurta con maña y disimulo.<ref>{{DLE1925}}</ref> {{uso|coloquial}} {{wikisauro|ladrón}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references />»
6118067
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|masculino|garduña}}.
==== {{sustantivo masculino y femenino|es}} ====
{{es.sust|mf}}
;1: Ratero que hurta con maña y disimulo.<ref>{{DLE1925}}</ref>
{{uso|coloquial}}
{{wikisauro|ladrón}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
e03lyc6g38luohjptud4k41cp8d9nad
seleccionador
0
1064292
6118075
2026-06-15T18:06:24Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|seleccionar|dor}}. ==== {{adjetivo|es}} ==== {{es.adj}} ;1: {{adjetivo de sustantivo|seleccionar|selecciona}}. ==== {{sustantivo masculino y femenino|es}} ==== {{es.sust|mf}} ;2 {{csem|fútbol}}: {{plm|director técnico}}. {{uso|despectivo}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references />»
6118075
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|seleccionar|dor}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;1: {{adjetivo de sustantivo|seleccionar|selecciona}}.
==== {{sustantivo masculino y femenino|es}} ====
{{es.sust|mf}}
;2 {{csem|fútbol}}: {{plm|director técnico}}.
{{uso|despectivo}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
7dnozurw5uyvjz5el95ix0m6lfpy0cq
6118076
6118075
2026-06-15T18:07:29Z
Tmagc
158167
6118076
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|seleccionar|dor}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;1: {{adjetivo de sustantivo|seleccionar|selecciona}}.
==== {{sustantivo masculino y femenino|es}} ====
{{es.sust|mf}}
;2 {{csem|deportes|fútbol}}: {{plm|director técnico}}.
{{uso|despectivo}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
t0uj7ub9h5e51cvc7yqvrq3zmki2fdq
Categoría:YUA:Sustantivos regulares
14
1064293
6118078
2026-06-15T18:31:01Z
26agcp
138617
Página creada con «{{auto cat}}»
6118078
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
hvshi ninak a̱ya
0
1064294
6118080
2026-06-15T19:17:10Z
Starbits140
183106
Página creada con «== {{lengua|cho}} == === {{sustantivo|cho}} === ;1: {{plm|luna}}. == Referencias y notas == <references />»
6118080
wikitext
text/x-wiki
== {{lengua|cho}} ==
=== {{sustantivo|cho}} ===
;1: {{plm|luna}}.
== Referencias y notas ==
<references />
pz4zfdsn1ix6upa9rtlfrot7dg109nm
hvshi
0
1064295
6118081
2026-06-15T19:24:58Z
Starbits140
183106
Página creada con «== {{lengua|cho}} == === {{sustantivo|cho}} === ;1: {{plm|sol}}. == Referencias y notas == <references />»
6118081
wikitext
text/x-wiki
== {{lengua|cho}} ==
=== {{sustantivo|cho}} ===
;1: {{plm|sol}}.
== Referencias y notas ==
<references />
si5zxv36am85clj189rp4ccqyozz3o4
fichik
0
1064296
6118082
2026-06-15T19:28:16Z
Starbits140
183106
Página creada con «== {{lengua|cho}} == === {{sustantivo|cho}} === ;1: {{plm|estrella}}. ;2: {{plm|planeta}}. == Referencias y notas == <references />»
6118082
wikitext
text/x-wiki
== {{lengua|cho}} ==
=== {{sustantivo|cho}} ===
;1: {{plm|estrella}}.
;2: {{plm|planeta}}.
== Referencias y notas ==
<references />
pr7q0z9lmkn27txnbulu5oujdvmqjgq
chahta
0
1064297
6118083
2026-06-15T19:35:13Z
Starbits140
183106
Página creada con «== {{lengua|cho}} == === {{sustantivo|cho}} === ;1: Una persona de la etnia choctaw. ;2: El idioma tradicional de los choctaw. ==={{adjetivo|cho}}=== ;1: Originario, relativo a, o propio de los choctaw. == Referencias y notas == <references />»
6118083
wikitext
text/x-wiki
== {{lengua|cho}} ==
=== {{sustantivo|cho}} ===
;1: Una persona de la etnia choctaw.
;2: El idioma tradicional de los choctaw.
==={{adjetivo|cho}}===
;1: Originario, relativo a, o propio de los choctaw.
== Referencias y notas ==
<references />
rlmzhhlq38dy9emgjfmkrvzqin2g524
6118102
6118083
2026-06-15T23:13:49Z
Starbits140
183106
6118102
wikitext
text/x-wiki
== {{lengua|cho}} ==
=== {{sustantivo|cho}} ===
;1: {{plm|choctaw}}.
==={{adjetivo|cho}}===
;1: {{plm|choctaw}}.
== Referencias y notas ==
<references />
1pqiib2stfa5kkcktlbpjias0oi6d2w
de una buena vez
0
1064298
6118087
2026-06-15T20:52:36Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología}}. ==== {{locución adverbial|es}} ==== ;1: {{plm|finalmente}} (luego de una larga espera). Úsase más para insistir con imperativos. {{sinónimo|de una vez por todas}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references />»
6118087
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
==== {{locución adverbial|es}} ====
;1: {{plm|finalmente}} (luego de una larga espera). Úsase más para insistir con imperativos.
{{sinónimo|de una vez por todas}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
9uur7nhpgj2dydai8j6mz7wvd6sq5p7
de una vez por todas
0
1064299
6118088
2026-06-15T20:53:10Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología}}. ==== {{locución adverbial|es}} ==== ;1: {{plm|finalmente}} (luego de una larga espera). Úsase más para insistir con imperativos. {{sinónimo|de una buena vez}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references />»
6118088
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
==== {{locución adverbial|es}} ====
;1: {{plm|finalmente}} (luego de una larga espera). Úsase más para insistir con imperativos.
{{sinónimo|de una buena vez}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
hipup34segota2wfpm24eag1iiyqe1y
kʼaʼajal
0
1064300
6118091
2026-06-15T21:47:40Z
26agcp
138617
Página creada con «{{desambiguación|káajal}} == {{lengua|yua}} == {{pron-graf|leng=yua|g=k'a'ajal}} === Etimología === {{etimología|leng=yua}}. ==== {{verbo|yua|intransitivo}} ==== ;1: {{l|es|acordar|Acordársele}} (a alguien), ser {{l|es|recordar|recordado}}. {{uso|leng=yua|con objeto indirecto}} {{antónimo|leng=yua|tuʼubul}} ==== Conjugación ==== {{yua.v|i|nucleores=kʼajaʼan|imper2=no|imper5=no|nota=NOTA: ''kʼaʼajal'' se usa como voz pasiva, por lo que carece de imperat…»
6118091
wikitext
text/x-wiki
{{desambiguación|káajal}}
== {{lengua|yua}} ==
{{pron-graf|leng=yua|g=k'a'ajal}}
=== Etimología ===
{{etimología|leng=yua}}.
==== {{verbo|yua|intransitivo}} ====
;1: {{l|es|acordar|Acordársele}} (a alguien), ser {{l|es|recordar|recordado}}.
{{uso|leng=yua|con objeto indirecto}}
{{antónimo|leng=yua|tuʼubul}}
==== Conjugación ====
{{yua.v|i|nucleores=kʼajaʼan|imper2=no|imper5=no|nota=NOTA: ''kʼaʼajal'' se usa como voz pasiva, por lo que carece de imperativo.}}
==== Véase también ====
* {{l|yua|kʼaʼajes}} / {{l|yua|kʼaʼajs}}
* {{l|yua|kʼaʼajsaj}}
== Referencias y notas ==
<references />
ob6y8cl8wy0bbhrjfkq221lk9e1fklg
kʼaʼajs
0
1064301
6118093
2026-06-15T22:52:46Z
26agcp
138617
Página creada con «{{desambiguación|káajs}} == {{lengua|yua}} == {{pron-graf|leng=yua|g=k'a'ajs|v=kʼaʼajes}} === Etimología === {{etimología|leng=yua|sufijo|kʼaʼajal|alt=kʼaʼaj(al)|s}}. ==== {{verbo|yua|transitivo}} ==== ;1: {{plm|recordar}}. {{antónimo|leng=yua|tuʼubs}} ==== Conjugación ==== {{yua.v|t1}} ==== Véase también ==== * {{l|yua|kʼaʼajal}} * {{l|yua|kʼaʼajsaj}} == Referencias y notas == <references />»
6118093
wikitext
text/x-wiki
{{desambiguación|káajs}}
== {{lengua|yua}} ==
{{pron-graf|leng=yua|g=k'a'ajs|v=kʼaʼajes}}
=== Etimología ===
{{etimología|leng=yua|sufijo|kʼaʼajal|alt=kʼaʼaj(al)|s}}.
==== {{verbo|yua|transitivo}} ====
;1: {{plm|recordar}}.
{{antónimo|leng=yua|tuʼubs}}
==== Conjugación ====
{{yua.v|t1}}
==== Véase también ====
* {{l|yua|kʼaʼajal}}
* {{l|yua|kʼaʼajsaj}}
== Referencias y notas ==
<references />
gyvuomnahjl9940out1cbqhip9oczdt
kʼaʼajes
0
1064302
6118094
2026-06-15T22:55:17Z
26agcp
138617
Página creada con «== {{lengua|yua}} == {{pron-graf|leng=yua|g=k'a'ajes|v=kʼaʼajs}} === Etimología === {{etimología|leng=yua|sufijo|kʼaʼajal|alt=kʼaʼaj(al)|es}}. ==== {{verbo|yua|transitivo}} ==== ;1: {{plm|recordar}}. {{antónimo|leng=yua|tuʼubs}} ==== Conjugación ==== {{yua.v|t1}} ==== Véase también ==== * {{l|yua|kʼaʼajal}} * {{l|yua|kʼaʼajsaj}} == Referencias y notas == <references />»
6118094
wikitext
text/x-wiki
== {{lengua|yua}} ==
{{pron-graf|leng=yua|g=k'a'ajes|v=kʼaʼajs}}
=== Etimología ===
{{etimología|leng=yua|sufijo|kʼaʼajal|alt=kʼaʼaj(al)|es}}.
==== {{verbo|yua|transitivo}} ====
;1: {{plm|recordar}}.
{{antónimo|leng=yua|tuʼubs}}
==== Conjugación ====
{{yua.v|t1}}
==== Véase también ====
* {{l|yua|kʼaʼajal}}
* {{l|yua|kʼaʼajsaj}}
== Referencias y notas ==
<references />
bhm643rui4jvq9z03gsesr3soqbwucd
kʼaʼajsaj
0
1064303
6118096
2026-06-15T23:00:11Z
26agcp
138617
Página creada con «== {{lengua|yua}} == {{pron-graf|leng=yua|g=k'a'ajsaj}} === Etimología === {{etimología|leng=yua|sufijo|kʼaʼajs|glosa=recordar|aj}}. ==== {{sustantivo|yua}} ==== {{yua.sust}} ;1: {{plm|recuerdo}}. == Referencias y notas == <references />»
6118096
wikitext
text/x-wiki
== {{lengua|yua}} ==
{{pron-graf|leng=yua|g=k'a'ajsaj}}
=== Etimología ===
{{etimología|leng=yua|sufijo|kʼaʼajs|glosa=recordar|aj}}.
==== {{sustantivo|yua}} ====
{{yua.sust}}
;1: {{plm|recuerdo}}.
== Referencias y notas ==
<references />
jg024q2x8qyei3gd4oubk2l6jbqtuyy
choctaw
0
1064304
6118097
2026-06-15T23:02:09Z
Starbits140
183106
Página creada con «== {{lengua|es}} == === Etimología === {{etimología|leng=en|en|Choctaw}}, del choctaw {{l+|cho|chahta}}. ==={{sustantivo|es}}=== ;1: Un pueblo originario nativo del área del sureste de los {{plm|Estados Unidos de América}} donde hoy se ubican porciones de los estados de {{plm|Mississippi}} y {{plm|Alabama}}. ;2: Un miembro del pueblo originario choctaw. ;3: El idioma tradicional de los choctaw. ==={{adjetivo|cho}}=== ;1: Originario, relativo a, o propio de…»
6118097
wikitext
text/x-wiki
== {{lengua|es}} ==
=== Etimología ===
{{etimología|leng=en|en|Choctaw}}, del choctaw {{l+|cho|chahta}}.
==={{sustantivo|es}}===
;1: Un pueblo originario nativo del área del sureste de los {{plm|Estados Unidos de América}} donde hoy se ubican porciones de los estados de {{plm|Mississippi}} y {{plm|Alabama}}.
;2: Un miembro del pueblo originario choctaw.
;3: El idioma tradicional de los choctaw.
==={{adjetivo|cho}}===
;1: Originario, relativo a, o propio de los choctaw.
== Referencias y notas ==
<references />
juuf2qupwoyn4hsg9bamcchljiw2xg9
6118098
6118097
2026-06-15T23:05:55Z
Starbits140
183106
6118098
wikitext
text/x-wiki
== {{lengua|es}} ==
=== Etimología ===
{{etimología|leng=en|en|Choctaw}}, del choctaw {{l+|cho|chahta}}.
==={{sustantivo|es}}===
;1: Un pueblo originario nativo del área del sureste de los {{plm|Estados Unidos de América}} donde hoy se ubican porciones de los estados de {{plm|Mississippi}} y {{plm|Alabama}}.
;2: Un miembro del pueblo originario choctaw.
;3: El idioma tradicional de los choctaw.
==={{adjetivo|es}}===
;1: Originario, relativo a, o propio de los choctaw.
== {{lengua|en}} ==
==={{sustantivo|en}}===
;1: {{plm|choctaw}}.
==={{adjetivo|en}}===
;1: {{plm|choctaw}}.
== Referencias y notas ==
<references />
47ca7pf8ze2m3mrpjpniv58vajn5cir
6118099
6118098
2026-06-15T23:06:55Z
Starbits140
183106
6118099
wikitext
text/x-wiki
== {{lengua|es}} ==
=== Etimología ===
{{etimología|leng=en|en|Choctaw}}, del choctaw {{l+|cho|chahta}}.
==={{sustantivo|es}}===
;1: Un pueblo originario nativo del área del sureste de los {{plm|Estados Unidos de América}} donde hoy se ubican porciones de los estados de {{plm|Mississippi}} y {{plm|Alabama}}.
;2: Un miembro del pueblo originario choctaw.
;3: El idioma tradicional de los choctaw.
==={{adjetivo|es}}===
;1: Originario, relativo a, o propio de los choctaw.
== Referencias y notas ==
<references />
3roqolyawch1t6qs0w6bnkbic08p98p
6118101
6118099
2026-06-15T23:13:09Z
Starbits140
183106
6118101
wikitext
text/x-wiki
== {{lengua|es}} ==
=== Etimología ===
{{etimología|leng=en|en|Choctaw}}, del choctaw {{l+|cho|chahta}}.
==={{sustantivo|es}}===
;1: Un pueblo originario nativo del área del sureste de los {{plm|Estados Unidos de América}} donde hoy se ubican porciones de los estados de {{plm|Mississippi}} y {{plm|Alabama}}.
;2: Una persona de la etnia choctaw.
;3: El idioma tradicional de los choctaw.
==={{adjetivo|es}}===
;1: Originario, relativo a, o propio de los choctaw.
== Referencias y notas ==
<references />
ef9vbiktu4eknavmieulvqzc0d0pm34
Choctaw
0
1064305
6118100
2026-06-15T23:07:42Z
Starbits140
183106
Página creada con «== {{lengua|en}} == ==={{sustantivo|en}}=== ;1: {{plm|choctaw}}. ==={{adjetivo|en}}=== ;1: {{plm|choctaw}}.»
6118100
wikitext
text/x-wiki
== {{lengua|en}} ==
==={{sustantivo|en}}===
;1: {{plm|choctaw}}.
==={{adjetivo|en}}===
;1: {{plm|choctaw}}.
egw51innan7yly5e0ezuptagx7mu1pa
katos
0
1064306
6118103
2026-06-15T23:27:34Z
Starbits140
183106
Página creada con «== {{lengua|cho}} == === Etimología === {{etimología|leng=es|es|gatos}}. ==={{sustantivo|cho}}=== ;1: {{plm|gato}}.»
6118103
wikitext
text/x-wiki
== {{lengua|cho}} ==
=== Etimología ===
{{etimología|leng=es|es|gatos}}.
==={{sustantivo|cho}}===
;1: {{plm|gato}}.
3ou22ozk6rsppxx24zvynks24kwcarm
tardenoche
0
1064307
6118105
2026-06-15T23:35:30Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|compuesto|tarde|noche}}. ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1: Período del día comprendido entre el final de la tarde y el comienzo de la noche. ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references />»
6118105
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|compuesto|tarde|noche}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: Período del día comprendido entre el final de la tarde y el comienzo de la noche.
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
lsubihbvyfeq7yva0obxpk7qwxry6t3
Usuario:Starbits140
2
1064308
6118109
2026-06-15T23:58:35Z
Starbits140
183106
Página creada con «{{Babel|en|es-3|cho-2}}»
6118109
wikitext
text/x-wiki
{{Babel|en|es-3|cho-2}}
ms0jglbsnnvoajkhxamu0ae2f35h10i
gerir
0
1064309
6118123
2026-06-16T00:55:11Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|pt}} == {{pron-graf|leng=pt}} === Etimología === {{etimología|leng=pt|la|gerō|alt=gerere}}. ==== {{verbo transitivo|pt}} ==== ;1: {{plm|gestionar}}, [[administrar]], [[manejar]]. ==== Conjugación ==== {{pt.v}} == Referencias y notas == <references />»
6118123
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|pt}} ==
{{pron-graf|leng=pt}}
=== Etimología ===
{{etimología|leng=pt|la|gerō|alt=gerere}}.
==== {{verbo transitivo|pt}} ====
;1: {{plm|gestionar}}, [[administrar]], [[manejar]].
==== Conjugación ====
{{pt.v}}
== Referencias y notas ==
<references />
0aknn931bmrnj821us394ddflneuf7d
péetsʼkʼabt
0
1064310
6118133
2026-06-16T01:26:22Z
26agcp
138617
Página creada con «== {{lengua|yua}} == {{pron-graf|leng=yua|g=péets'k'abt}} === Etimología === {{etimología|leng=yua}}. ==== {{verbo|yua|transitivo}} ==== ;1: {{plm|oprimir}} con la mano, {{l|es|pulsar}}, {{l|es|tocar}}.<ref>{{DUMY|p=237|cita=péets'k'abt.ik}}</ref> {{ejemplo|Tin machaj le chan ba’alche’a, pachalak u yokol ti’ in chi’. Tin '''péets’k’abtaj''' yéetel muuk’, bey tin wojéeltaj juntúul k’uuruch [...]|trad=Capturé al bicho antes de que lograra su…»
6118133
wikitext
text/x-wiki
== {{lengua|yua}} ==
{{pron-graf|leng=yua|g=péets'k'abt}}
=== Etimología ===
{{etimología|leng=yua}}.
==== {{verbo|yua|transitivo}} ====
;1: {{plm|oprimir}} con la mano, {{l|es|pulsar}}, {{l|es|tocar}}.<ref>{{DUMY|p=237|cita=péets'k'abt.ik}}</ref>
{{ejemplo|Tin machaj le chan ba’alche’a, pachalak u yokol ti’ in chi’. Tin '''péets’k’abtaj''' yéetel muuk’, bey tin wojéeltaj juntúul k’uuruch [...]|trad=Capturé al bicho antes de que lograra su cometido. Lo '''oprimí''' con saña, supe que se trataba de una cucaracha [...]|c=libro|a=Luis Antonio Canché Briceño|t=K’i’ixib máako’ob / Los hombres espinados|edicion=1|editorial=Universidad de Guadalajara|f=2025|doi=10.32870/9786075816821|isbn=9786075816821|u=https://simehbucket.s3.amazonaws.com/miscfiles/los-hombres-espinados-acceso-abierto_yjqmgn0x.pdf|formato=pdf|p=115|tradc=libro|tradt=Ibidem|tradp=209}}
==== Conjugación ====
{{yua.v|t1}}
== Referencias y notas ==
<references />
rmssqb7sdm6igeo3vc0knvh1tuihgc7
péetsʼkʼabtik
0
1064311
6118134
2026-06-16T01:29:33Z
26agcp
138617
Página creada con «== {{lengua|yua}} == {{pron-graf|leng=yua|g=péets'k'abtik}} === Forma flexiva === ==== Forma verbal ==== ;1 : {{forma|leng=yua|tipo=verbo|péetsʼkʼabt|forma del incompletivo activo de}}. == Referencias y notas == <references />»
6118134
wikitext
text/x-wiki
== {{lengua|yua}} ==
{{pron-graf|leng=yua|g=péets'k'abtik}}
=== Forma flexiva ===
==== Forma verbal ====
;1 : {{forma|leng=yua|tipo=verbo|péetsʼkʼabt|forma del incompletivo activo de}}.
== Referencias y notas ==
<references />
ge5tw52ta0ombvm1qrc6dprmw46oxvm
folgar
0
1064312
6118144
2026-06-16T01:58:24Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|osp}} == {{pron-graf|leng=osp}} === Etimología === {{etimología|leng=osp|la-lat|follicare|alt=follicāre}}. ==== {{verbo intransitivo|osp}} ==== ;1: {{plm|holgar}}. ;2: {{plm|follar}}. == Referencias y notas == <references />»
6118144
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|osp}} ==
{{pron-graf|leng=osp}}
=== Etimología ===
{{etimología|leng=osp|la-lat|follicare|alt=follicāre}}.
==== {{verbo intransitivo|osp}} ====
;1: {{plm|holgar}}.
;2: {{plm|follar}}.
== Referencias y notas ==
<references />
ht8b3l696p05yvns4p75fnoaies7k0n
6118145
6118144
2026-06-16T01:58:40Z
Tmagc
158167
/* {{verbo intransitivo|osp}} */
6118145
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|osp}} ==
{{pron-graf|leng=osp}}
=== Etimología ===
{{etimología|leng=osp|la-lat|follicare|alt=follicāre}}.
==== {{verbo intransitivo|osp}} ====
;1: {{plm|holgar}}.
;2: {{plm|follar}}, [[coger]], [[garchar]].
== Referencias y notas ==
<references />
4e45yod1gwljrae4ys4jop94rmxlctl
se souvenir
0
1064313
6118147
2026-06-16T02:00:34Z
26agcp
138617
Página creada con «== {{lengua|fr}} == {{pron-graf|leng=fr|audio=LL-Q150 (fra)-GrandCelinien-se souvenir.wav|audio2=LL-Q150 (fra)-Jérémy-Günther-Heinz Jähnick-se souvenir.wav}} === Etimología === {{etimología|leng=fr}}. ==== {{verbo|fr|pronominal}} ==== ;1: {{plm|recordar}}, {{l|es|acordarse}}. ==== Conjugación ==== {{fr.v}} == Referencias y notas == <references />»
6118147
wikitext
text/x-wiki
== {{lengua|fr}} ==
{{pron-graf|leng=fr|audio=LL-Q150 (fra)-GrandCelinien-se souvenir.wav|audio2=LL-Q150 (fra)-Jérémy-Günther-Heinz Jähnick-se souvenir.wav}}
=== Etimología ===
{{etimología|leng=fr}}.
==== {{verbo|fr|pronominal}} ====
;1: {{plm|recordar}}, {{l|es|acordarse}}.
==== Conjugación ====
{{fr.v}}
== Referencias y notas ==
<references />
jne5awspvehdxcub9whmv7bcphuw5u0
Usuario discusión:Starbits140
3
1064314
6118193
2026-06-16T09:12:13Z
Peter Bowman
34685
colocando plantilla de bienvenida
6118193
wikitext
text/x-wiki
<div style="padding:10px; font-size:101%; background:var(--background-color-success-subtle); color:var(--color-base); border: 1px dotted var(--border-color-notice);" >
Hola, Starbits140. 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"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio.
:<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 '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial 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. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}.
{|
| 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 '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(~~~~)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.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.<br />
Saludos muy cordiales, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:12 16 jun 2026 (UTC).</div>
ospuiq6l2muo0antnq3l1qfubvhkqt7