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]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/21|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-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]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/22|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-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]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/23|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-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]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/24|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-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]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Colabore]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/25|traduzca]]&nbsp;• [[m:Tech|obtenga ayuda]]&nbsp;• [[m:Talk:Tech/News|denos su opinión]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].'' </div><section end="technews-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]]&nbsp;<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]]&nbsp;<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]]&nbsp;<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.."'''''&emsp;&emsp;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.."'''''&emsp;&emsp;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.."'''''&emsp;&emsp;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.."'''''&emsp;&emsp;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.."'''''&emsp;&emsp;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.."'''''&emsp;&emsp;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.."'''''&emsp;&emsp;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.."'''''&emsp;&emsp;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.."'''''&emsp;&emsp;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)..")'''&emsp;".." ("..(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.."'''''&emsp;&emsp;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.."'''''&emsp;&emsp;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.."'''''&emsp;&emsp;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.."'''''&emsp;&emsp;("..(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"].."'''''&emsp;&emsp;("..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"].."'''''&emsp;&emsp;("..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.."'''''&emsp;&emsp; ("..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"].."'''''&emsp;&emsp;("..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"].."'''''&emsp;&emsp;("..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.."'''''&emsp;&emsp; ("..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.."'''&emsp;&emsp;("..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>&#x25B6;</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>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. 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>(&#126;&#126;&#126;&#126;)</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: |&nbsp;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>&#x25B6;</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>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. 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>(&#126;&#126;&#126;&#126;)</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: |&nbsp;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>&#x25B6;</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>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. 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>(&#126;&#126;&#126;&#126;)</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: |&nbsp;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>&#x25B6;</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>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. 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>(&#126;&#126;&#126;&#126;)</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: |&nbsp;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>&#x25B6;</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>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. 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>(&#126;&#126;&#126;&#126;)</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: |&nbsp;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>&#x25B6;</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>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. 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>(&#126;&#126;&#126;&#126;)</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