Wikcionario
eswiktionary
https://es.wiktionary.org/wiki/Wikcionario:Portada
MediaWiki 1.46.0-wmf.24
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
6110111
6109953
2026-04-27T18:06:30Z
MediaWiki message delivery
53277
Sección nueva: /* Noticias técnicas: 2026-18 */
6110111
wikitext
text/x-wiki
<!-- Inicio Encabezado del café, aviso, información histórica y información de archivado -->
<div style="text-align: center;">
{{/Aviso}}
{{/Histórico}}
</div>
{{atajo|WN:C}}
[[Categoría:Café]]
<!-- Fin del Encabezado del café -->
<!-- Inicio configuración robot archivado; no tocar si no se sabe lo que se hace -->
{{Usuario:MABot/config
|archive = Wikcionario:Café/%(year)d %(month)02d
|algo = old(30d)
|counter = 1
|archiveheader = {{Archivo}}
}}
<h1>{{MONTHNAME|{{PREVIOUSMONTH}}}} de {{PREVIOUSMONTH.YEAR}}</h1>
<div class="mw-archivedtalk">
{{/{{PREVIOUSMONTH.YEAR}} {{PREVIOUSMONTH}}}}
</div>
<h1>Actual</h1>
== [[Wikcionario:Índice]] ==
Cuál será el futuro de estas páginas? Mi propuesta es la que ya dije antes, convertirlas en lemarios, migrar todos los idiomas a Apéndice:XX:Lemario y fusionar en el caso del español. Significa también que todos los aṕendices que tenemos ahora hay que prefijarlos con ES: ? En efecto. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 21:13 14 mar 2026 (UTC)
:Como no obtuve respuestas, @[[Usuario:Peter Bowman|Peter Bowman]] si hago este traslado deberíamos eliminar las páginas del índice? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 20:48 27 mar 2026 (UTC)
:Siendo honesto, creo que no debería existir un índice manual. Sería mucho mejor simplemente añadir un encabezado para filtrar por letra a "Categoría:Idioma"... Y sí, creo que los apéndices deberían tener separarse por idiomas así. Que exista "Categoría:Apéndices por idioma" en vez de "Categoría:Apéndices sobre otros idiomas".
:Al igual que los índices, los apéndices de Antropónimos tampoco deberían existir, "Categoría:xx:Antropónimos xxx" los cubre perfectamente. [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 22:35 27 mar 2026 (UTC)
:Nota: en ese sentido casi todos los apéndices pueden ser cubiertos por las entradas añadidas correctamente en el espacio principal más una categorización correcta. La pregunta es qué hacer mientras o hasta que se complete la migración de toda la información. Pero bueno, si un índice manual es innecesario, es razón suficiente para eliminarlo o convertirlo en lo que propuse. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:40 28 mar 2026 (UTC)
::@[[Usuario:Tmagc|Tmagc]]: entiendo que quieres renombrar todo lo de [[Especial:PáginasPorPrefijo/Wikcionario:Índice/]] para que empiece por Apéndice:XX:. Tampoco soy partidario de los índices manuales, pero tienen razón de ser si: 1. las entradas pertinentes aún no han sido creadas; 2. esos índices aportan algo más que una mera lista de palabras ([[Wikcionario:Índice/Por idioma/EU/A|aquí]] tenemos la traducción de cada término). Una vez hecho el traslado, ¿qué páginas querrías eliminar? [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:37 28 mar 2026 (UTC)
:::@[[Usuario:Peter Bowman|Peter Bowman]] Por eso dije que quería convertirlos en lemarios. Trasladarlos a Apéndice:XX:Lemario con un formato similar a [[Apéndice:Lemario]] y después borrar las redirecciones ya que no tiene sentido tener "índices". [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 14:25 28 mar 2026 (UTC)
::::Vale, y si automatizas la tarea, recuerda que puedes trasladar sin crear redirecciones. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 16:36 28 mar 2026 (UTC)
:::::@[[Usuario:Peter Bowman|Peter Bowman]] Pero un formato similar a [[Apéndice:Lemario]] requeriría separarlas por lotes de a 500, por lo que probablemente muchas tendrán que ser borradas (no puedo trasladar de nuevo si ya existe la página de destino). Otra es formatearlo como Apéndice:XX:Lemario/A, Apéndice:XX:Lemario/B, etc. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:45 28 mar 2026 (UTC)
::::::@[[Usuario:Tmagc|Tmagc]]: no me molestaría en cambiar el formato, simplemente renombraría p. ej. [[Wikcionario:Índice/Por idioma/EN/D]] a [[Apéndice:EN:Lemario/D]] y ya está. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 16:57 28 mar 2026 (UTC)
:::::::Por eso, pero en lugar de agruparlas de a 500 (como en [[Apéndice:ES:Lemario]]), simplemente las separo por la inicial, tal y como está ahora en el índice. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:59 28 mar 2026 (UTC)
:@[[Usuario:Peter Bowman|Peter Bowman]] Listo. Las páginas prefijadas con "Wikcionario:Índice" que quedan son redirecciones vacías o inservibles, podrías borrarlas? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:28 7 abr 2026 (UTC)
::@[[Usuario:Tmagc|Tmagc]]: hecho. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 10:03 7 abr 2026 (UTC)
:::@[[Usuario:Peter Bowman|Peter Bowman]] Las redirecciones como [[WN:Índice alfabético/QU/N|esta]] o [[Wikcionario:Índice_del_español_a|esta]] van a quedar? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 15:19 7 abr 2026 (UTC)
::::Ah, vale, seguí el enlace que había puesto más arriba y no vi esas, lo actualizo: [[Especial:PáginasPorPrefijo/Wikcionario:Índice]]. Las borraré en unas horas. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 15:33 7 abr 2026 (UTC)
:::::@[[Usuario:Tmagc|Tmagc]]: ahora ya sí. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 20:46 7 abr 2026 (UTC)
== Noticias técnicas: 2026-13 ==
<section begin="technews-2026-W13" /><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/13|Traducciones en varios idiomas]] están disponibles.
'''Lo más destacado de la semana'''
* Los usuarios de los sitios de Wikimedia ya pueden iniciar sesión sin contraseña utilizando llaves de acceso (''passkeys''). Este es un método seguro que admite el uso de huella digital, reconocimiento facial o código PIN. Con este cambio, todos los usuarios que opten por el inicio de sesión sin contraseña verán que es más fácil, rápido y seguro acceder a sus cuentas desde cualquier dispositivo. Actualmente, la nueva opción de inicio de sesión con llave de acceso aparece como una sugerencia de autorrelleno en el campo del nombre de usuario. Próximamente, estará disponible un [[phab:T417120|botón «Iniciar sesión con llave de acceso»]] adicional para los usuarios que ya hayan registrado una. Esta actualización mejorará la seguridad y la experiencia de usuario. La [[c:File:Passwordless_login_screencast.webm|grabación de pantalla]] muestra el proceso de inicio de sesión sin contraseña paso a paso.
* [[m:Special:MyLanguage/Tech/Server switch|Todas las wikis estarán en modo de solo lectura]] durante unos minutos el 25 de marzo de 2026 a las [https://zonestamp.toolforge.org/1774450800 15:00 UTC]. Esto se debe a las pruebas de cambio al centro de datos de respaldo, [[wikitech:Deployments/Yearly calendar|que se realizan dos veces al año]]. Durante este proceso, todo el tráfico de los sitios de Wikimedia se desvía de un centro de datos primario al de respaldo para probar la disponibilidad y prevenir interrupciones del servicio incluso en situaciones de emergencia.
'''Actualizaciones para editores'''
* Los usuarios de los sitios de Wikimedia ya pueden exportar sus notificaciones con más de 5 años de antigüedad mediante una [[toolforge:echo-chamber|nueva herramienta en Toolforge]]. Esto permite que dichos usuarios conserven sus notificaciones importantes y eviten perderlas, de acuerdo con el cambio planificado que eliminará las notificaciones que superen los 5 años de antigüedad, tal como se anunció previamente. [https://phabricator.wikimedia.org/T383948]
* Los editores de las Wikipedias en indonesio, tailandés, turco e inglés simple ya tienen acceso a Special:PersonalDashboard. Se trata de una [[mw:Special:MyLanguage/Moderator Tools/Dashboard|versión preliminar de una experiencia]] que introduce a los editores más nuevos en los flujos de trabajo de patrullaje, facilitándoles la transición desde la edición de contenidos hacia tareas de moderación más avanzadas en su proyecto. [https://phabricator.wikimedia.org/T402647]
* La página [[Special:Block]] tiene dos cambios menores en la interfaz. Los administradores ahora pueden seleccionar un bloqueo por tiempo indefinido mediante un selector dedicado en la sección de caducidad. Además, al elegir un bloqueo infinito, se muestra una lista de motivos comunes en el menú desplegable, la cual puede personalizarse en [[MediaWiki:Ipbreason-indef-dropdown]]. [https://phabricator.wikimedia.org/T401823]
* Los editores en entornos móviles de [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#Logged-out|varias wikis]] ahora verán una advertencia mejorada al realizar ediciones sin haber iniciado sesión, gracias a las actualizaciones recientes del equipo de Growth. Estos cambios, lanzados la semana pasada, forman parte de los esfuerzos y pruebas para mejorar [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|la experiencia de creación de cuentas en dispositivos móviles]] y fomentar la participación. [https://phabricator.wikimedia.org/T408484]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:36}} {{PLURAL:36|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 el error que impedía que los usuarios de la versión web móvil vieran la información del bloqueo cuando estaban afectados por múltiples bloqueos. Ahora pueden consultar todos los bloqueos que les afectan al visitar Wikipedia.
'''Actualizaciones para los colaboradores técnicos'''
* Las imágenes creadas con Toolforge recibirán pronto una versión actualizada de los ''buildpacks'', que incluirá soporte para nuevas versiones de lenguajes de programación, además de otras mejoras y correcciones en el código fuente original (''upstream''). Si utiliza el servicio de construcción de Toolforge (''Toolforge Build Service''), revise el reciente [https://lists.wikimedia.org/hyperkitty/list/cloud-announce@lists.wikimedia.org/thread/EMYTA32EV2V5SQ2JIEOD2CL66YFIZEKV/ correo en la lista cloud-announce] y actualice su configuración de construcción si es necesario para asegurar la compatibilidad de sus herramientas. [https://wikitech.wikimedia.org/w/index.php?title=Help:Toolforge/Building_container_images&oldid=2392097#Buildpack_environment_upgrade_process][https://phabricator.wikimedia.org/T380127]
* El [https://api.wikimedia.org/wiki/Main_Page Portal de documentación de la API] se cerrará en junio de 2026. Las llaves de API (''API keys'') creadas en dicho portal seguirán funcionando con normalidad. Los puntos de conexión (''endpoints'') de api.wikimedia.org se marcarán como obsoletos de forma progresiva a partir de julio de 2026. La documentación del portal de la API se trasladará a [[mw:Wikimedia APIs|mediawiki.org]]. Puede obtener más información sobre este cambio 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.46/wmf.21|MediaWiki]]
'''A fondo'''
* Los [[m:Special:MyLanguage/WMDE Technical Wishes|deseos técnicos de WMDE]] están considerando mejoras a [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names|la generación automática de nombres en las referencias del Editor Visual]]. Revisa las [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names#Proposed solutions|soluciones propuestas]] y participa en esta [[m:Talk:WMDE Technical Wishes/References/VisualEditor automatic reference names#Request for comment|solicitud de comentarios]].
''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2026/13|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].''
</div><section end="technews-2026-W13" />
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:51 23 mar 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=30268305 -->
== Noticias técnicas: 2026-14 ==
<section begin="technews-2026-W14"/><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/14|Traducciones en varios idiomas]] están disponibles.
'''Lo más destacado de la semana'''
* Una versión beta de [[abstract:|Abstract Wikipedia]], un nuevo proyecto de Wikimedia independiente del idioma, se lanzó la semana pasada. El proyecto permite que las comunidades creen artículos de Wikipedia en sus idiomas nativos con el fin de que puedan ser leídos por personas que hablan otras lenguas. La wiki funciona mediante instrucciones de Wikifunciones y se basa también en el contenido estructurado de Wikidata. [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-03-26|Más información]].
'''Actualizaciones para editores'''
* El equipo de Growth está realizando una prueba A/B para evaluar si un mensaje más claro y amigable fomenta la creación de cuentas en las wikis. Actualmente, cuando los usuarios de la versión móvil que no han iniciado sesión comienzan a editar, ven un mensaje de advertencia que puede resultar brusco y desalentador. Además, este mensaje presenta la edición con cuentas temporales como la opción predeterminada en lugar de incentivar la creación de una cuenta. La prueba se está llevando a cabo en diez Wikipedias, entre ellas las ediciones en árabe, francés, español y alemán. [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#2. Improve logged-out warning message (T415160)|Más información]].
* El equipo de Wikimedia Apps invita a dejar comentarios sobre [[mw:Special:MyLanguage/Wikimedia Apps/Team/Future of Editing on the Mobile Apps|cómo debería funcionar la edición en las aplicaciones móviles de Wikipedia]]. La discusión se centra en mejorar la forma en que los usuarios acceden a las herramientas de edición al pulsar «Editar». Esto forma parte de un esfuerzo mayor para convertir a los lectores interesados en editores, ofreciéndoles un camino más amigable para comenzar a contribuir.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:45}} {{PLURAL:45|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 problema que impedía la obtención de citas del archivo de prensa [https://www.newspapers.com Newspapers.com] debido a un bloqueo en las solicitudes de [[mw:Special:MyLanguage/Citoid|Citoid]]. [https://phabricator.wikimedia.org/T419903]
'''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.46/wmf.22|MediaWiki]]
''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2026/14|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].''
</div><section end="technews-2026-W14"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:25 30 mar 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=30329462 -->
== Request for bot flag ==
(Apologies for writing in English.)<br />
Hello, there are more than 68000 [[Special:LintErrors|lint errors]] on your wiki, many of which could be fixed by my bot, [[m:User:DelintBot|DelintBot]]; some of these errors have even made some entries partially unreadable in dark mode (you could see it if you tried to read the note under the conjugation tables in [[blejal]] and [[aberzhañ]], for example). The bot is currently flagged on a number of other wikis (Bengali Wiktionary, Wikidata, Croatian Wiktionary, and also Bengali Wikibooks under a [[wikibooks:bn:Special:Contributions/RedminBot|different username]]). Please let me know if you want me to make some test edits. [[Usuario:Redmin|Redmin]] ([[Usuario discusión:Redmin|discusión]]) 15:20 1 abr 2026 (UTC)
:Hello, @[[Usuario:Redmin|Redmin]], thank you for your offer. I believe you are referring to [[Special:LintErrors/night-mode-unaware-background-color]]. I have just fixed a couple of [[Special:LintTemplateErrors/night-mode-unaware-background-color|templates]] which should cover a significant number of occurrences. Let's evaluate the scale of this in a few days, after the next update. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 16:37 1 abr 2026 (UTC)
::Thank you, that sounds good to me. For future reference, there were 42024 according to the database replicas (so this count is not cached) as of the time of writing this (which I think is already a great improvement thanks to your changes). By the way, the bot also replaces obsolete HTML tags. :-) [[Usuario:Redmin|Redmin]] ([[Usuario discusión:Redmin|discusión]]) 16:51 1 abr 2026 (UTC)
::@[[Usuario:Peter Bowman|Peter Bowman]] Podrías encargarte de los otros tipos de errores? Intenté corregirlos pero no tengo permiso en las pags de Mediawiki. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:30 1 abr 2026 (UTC)
:::@[[Usuario:Tmagc|Tmagc]]: ¿te refieres a [[Especial:Errores de sintaxis/missing-end-tag]]? Ya los he corregido. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:56 1 abr 2026 (UTC)
::@[[Usuario:Peter Bowman|Peter Bowman]], there are now 4400+ lint errors for the "night-mode-unaware-background-color" category (down from the previous 42000+) and 31000+ errors across all non-hidden categories (down from the previous 68000+). Up to more than 8000 of these could potentially be fixed by DelintBot. What do you think? [[Usuario:Redmin|Redmin]] ([[Usuario discusión:Redmin|discusión]]) 08:32 9 abr 2026 (UTC)
:::Not sure if we still need assistance, it seems that @[[Usuario:Tmagc|Tmagc]] has taken care of most of the dark mode-related occurrences (@[[Usuario:Tmagc|Tmagc]]: ¿cómo lo ves, necesitas ayuda en esto?). @[[Usuario:Redmin|Redmin]]: how do you get those figures, and what kind of errors are now we talking about? In [[Special:LintErrors]] there are only 4000 results unrelated to dark mode issues. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 08:56 9 abr 2026 (UTC)
::::@[[Usuario:Peter Bowman|Peter Bowman]], I am running SQL queries against Wikimedia’s database replicas because that special page is cached and inaccurate. This query gets the number of dark mode-related errors: https://quarry.wmcloud.org/query/103938. This gets the maximum number of errors the bot could potentially be able to fix: https://quarry.wmcloud.org/query/104197. This gets the total number of (non-hidden) lint errors: https://quarry.wmcloud.org/query/104199 (including dark mode-related ones). [[Usuario:Redmin|Redmin]] ([[Usuario discusión:Redmin|discusión]]) 09:24 9 abr 2026 (UTC)
:::::@[[Usuario:Redmin|Redmin]] (@[[Usuario:Tmagc|Tmagc]], preguntabas por esto más abajo): according to [[quarry:query/104208]], over 22k lint errors belong to the [[mw:Extension:Linter/linter table#linter_cat|large-tables (Big Tables that are hard to view on mobile)]] category. It is still [[mw:Help:Lint errors/large-tables|"being developed, but currently it will trigger for any table with more than five columns"]]. Currently, there is not much we can do for those entries. @[[Usuario:Tmagc|Tmagc]] has agreed to keep fixing the remaining lint errors, therefore for now I'm more inclined to relay that work to existing local bots. We would revisit this matter again in the following days/weeks to decide on further action. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 14:32 9 abr 2026 (UTC)
::::::Sounds good. I hope you are able to get these errors fixed. :) [[Usuario:Redmin|Redmin]] ([[Usuario discusión:Redmin|discusión]]) 15:09 9 abr 2026 (UTC)
::::::Ah, gracias ahora entiendo a qué se refería. Claro, los 22k errores restantes son ese de "error" específico de las tablas grandes, ni siquiera sé si calificarlo como error. O sea, una tabla ocupa lo que tiene que ocupar, qué más pretenden que hagamos los desarrolladores de dicha extensión? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 15:46 9 abr 2026 (UTC)
::::@[[Usuario:Peter Bowman|Peter Bowman]] Por mí está bien, mi única duda es si puedo seguir corrigiendo páginas de discusión de usuario (no las PU propiamente dichas) con reemplazos simples y masivos. Por ejemplo, quitar el color de fondo en el cartel de bienvenida y mensajes sutogenerados por plantillas. Para los mensajes o firmas de usuario, por ahora no los tocaría porque volvemos al problema de cuál habría sido la intención original de dicho usuario, pero supongo que si he de tocarlos debería forzar un color en la letra para que desaparezca el "error", que tampoco veo que se consiga mucho ya que en la mayoría de los casos se ven bien. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 13:53 9 abr 2026 (UTC)
:::::@[[Usuario:Tmagc|Tmagc]]: cambiar por cambiar, no, solo si ayuda a resolver alguno de los problemas con la sintaxis. Las firmas de usuario suelen adolecer del uso de la etiqueta obsoleta &tt;font>; yo ahí francamente reemplazaría la firma personalizada por la que genera MediaWiki por defecto. Esto sería mejor anunciarlo en otro hilo y esperar un par de semanas para posibles objeciones. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 14:20 9 abr 2026 (UTC)
:::@[[Usuario:Redmin|Redmin]] How do you see 31000+ errors across all non-hidden categories? Does the [[Especial:Errores de sintaxis]] extension detect this somehow. How did you do? If this is a matter of cache, just wait a few days for it to refresh. If there ''is'' a problem with the categories, the fault is of [[Módulo:auto cat]], not of the pages itself. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 13:56 9 abr 2026 (UTC)
:::Nota adicional: qué quieren que haga con las etiquetas HTML obsoletas? A mí no me molestan pues hasta ahora solamente las vi fuera del espacio principal. Si quieren que las reemplace, digan cuáles son los equivalentes que se ayornan y puedo hacer los reemplazos con mi bot. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 13:58 9 abr 2026 (UTC)
::::@[[Usuario:Tmagc|Tmagc]]: las páginas como [[Especial:Errores de sintaxis/obsolete-tag]] tienen un enlace de ayuda en la esquina superior derecha. En este caso, lleva a [[mw:Help:Lint errors/obsolete-tag]], donde verás qué cambios es necesario hacer. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 14:17 9 abr 2026 (UTC)
:@[[Usuario:Redmin|Redmin]] one thing you could do is to replace {{ep|marcar sin referencias}} with {{ep|cita requerida}} (which require also a change in the format). The highlighting produce a linting error. I agree with project for removing/changing all the templates that use colors, they are very hard to mantain due to the night mode. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:28 1 abr 2026 (UTC)
::It seems like that has the potential to be a controversial change; I have added a color declaration to “marcar sin referencias” instead so it should no longer produce any lint error. [[Usuario:Redmin|Redmin]] ([[Usuario discusión:Redmin|discusión]]) 17:57 2 abr 2026 (UTC)
:@[[Usuario:Peter Bowman|Peter Bowman]] Qué podemos hacer para [[Módulo:flex]] y derivados? Estoy viendo que las nuevas plantillas de flexión arrojan este "error", supongo que al modificar el color de las celdas, pero no sabría como remediarlo. Quizá agregar alguna opción especial al especificar un color en las celdas podría ser? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:22 5 abr 2026 (UTC)
::@[[Usuario:Tmagc|Tmagc]]: es posible definir variables CSS que tomen valores distintos dependiendo de si esté activo el modo claro o el modo oscuro. Es decir, puedes hacer que una misma regla para el color de fondo o de fuente se vea distinto en función del modo. Esto está descrito en [[mw:Recommendations for night mode compatibility on Wikimedia wikis]], y tenemos un ejemplo de aplicación en [[wikt:pl:MediaWiki:Gadget-dark-styles.css]]. Estaría bien comprobar si <code>var()</code> funciona con TemplateStyles. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:51 5 abr 2026 (UTC)
== Action Required: Update templates/modules for electoral maps (Migrating from P1846 to P14226) ==
Hello everyone,
This is a notice regarding an ongoing data migration on Wikidata that may affect your election-related templates and Lua modules (such as <code>Module:Itemgroup/list</code>).
'''The Change:'''<br />
Currently, many templates pull electoral maps from Wikidata using the property [[:d:Property:P1846|P1846]], combined with the qualifier [[:d:Property:P180|P180]]: [[:d:Q19571328|Q19571328]].
We are migrating this data (across roughly 4,000 items) to a newly created, dedicated property: '''[[:d:Property:P14226|P14226]]'''.
'''What You Need To Do:'''<br />
To ensure your templates and infoboxes do not break or lose their maps, please update your local code to fetch data from [[:d:Property:P14226|P14226]] instead of the old [[:d:Property:P1846|P1846]] + [[:d:Property:P180|P180]] structure. A [[m:Wikidata/Property Migration: P1846 to P14226/List|list of pages]] was generated using Wikimedia Global Search.
'''Deadline:'''<br />
We are temporarily retaining the old data on [[:d:Property:P1846|P1846]] to allow for a smooth transition. However, to complete the data cleanup on Wikidata, the old [[:d:Property:P1846|P1846]] statements will be removed after '''May 1, 2026'''. Please update your modules and templates before this date to prevent any disruption to your wiki's election articles.
Let us know if you have any questions or need assistance with the query logic. Thank you for your help! [[User:ZI Jony|ZI Jony]] using [[Usuario:MediaWiki message delivery|MediaWiki message delivery]] ([[Usuario discusión:MediaWiki message delivery|discusión]]) 17:11 3 abr 2026 (UTC)
<!-- Mensaje enviado por Usuario:ZI Jony@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=29941252 -->
== Cambio en plantillas para creación de páginas ==
Está bien si camibiamos las plantillas de [[MediaWiki:Noexactmatch]] a "Sustantivo", "Adjetivo", "Verbo", "Adverbio", "Locución sustantiva", "Locución adjetiva", "Locución verbal", "Locución adverbial"? Las últimas tres que tenemos ahora parece que sobran. Aparte de esto, podemos quitar la sobreescritura a los colores de fondo para que se vea bien en modo oscuro y desaparezca el error de sintaxis? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:05 5 abr 2026 (UTC)
:@[[Usuario:Tmagc|Tmagc]]: en [[Especial:Diff/6076775]] he corregido los colores, puedes ver cómo he usado la función <code>var()</code>. Modificaré el formulario, pero necesito que antes crees las plantillas correspondientes para las locuciones (como {{ep|Plantilla Sustantivo}}). [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 20:05 5 abr 2026 (UTC)
::Por cierto, el mensaje correcto es [[MediaWiki:Searchmenu-new]], el otro creo que no tiene uso. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 20:09 5 abr 2026 (UTC)
::@[[Usuario:Peter Bowman|Peter Bowman]] Gracias. Ya creé {{ep|Plantilla Locución sustantiva}}, {{ep|Plantilla Locución adjetiva}}, {{ep|Plantilla Locución verbal}}, {{ep|Plantilla Locución adverbial}}. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 20:23 5 abr 2026 (UTC)
::Nota adicional: actualmente el título de "Otros idiomas", que no tiene enlace, aparece en negro. Debería aparecer en blanco en el modo oscuro. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 20:51 5 abr 2026 (UTC)
:::Gracias, lo he aplicado en [[Especial:Diff/6076815]]. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 22:23 5 abr 2026 (UTC)
::Nota adicional #2: tmb. [[MediaWiki:Newarticletext]] [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 20:53 5 abr 2026 (UTC)
:::Hecho en [[Especial:Diff/6076820]]. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 22:33 5 abr 2026 (UTC)
== Noticias técnicas: 2026-15 ==
<section begin="technews-2026-W15"/><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/15|Traducciones en varios idiomas]] están disponibles.
'''Actualizaciones para editores'''
* La [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|extensión CampaignEvents]] incluye ahora una nueva función para establecer objetivos grupales, lo que permite a los organizadores definir y realizar un seguimiento de metas en tiempo real, como el número de artículos creados o la cantidad de colaboradores participantes. Del mismo modo, los participantes pueden trabajar para alcanzar objetivos compartidos y ver su impacto colectivo a medida que se desarrolla el evento. Esta función ya está disponible en todas las wikis de Wikimedia. Más información en [[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Collaborative contributions#Goal setting|la documentación]].
* [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Elemento de la Lista de Deseos de la Comunidad]] La nueva función de [[mw:Special:MyLanguage/Help:Watchlist labels|etiquetas de la lista de seguimiento]] (anunciada en las [[m:Special:MyLanguage/Tech/News/2026/07|Noticias técnicas 2026-07]]) ya está disponible a través del Editor Visual, el editor de código fuente y la «estrella de seguimiento» (o el enlace de seguimiento, en las apariencias que no tienen icono de estrella). Anteriormente, solo era posible asignar etiquetas mediante [[Special:EditWatchlist|Special:EditWatchlist]]. En los tres lugares se ha añadido un nuevo campo a continuación del campo de caducidad.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:23}} {{PLURAL:23|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ó el problema en el que las páginas de discusión con Parsoid se volvían inutilizables después de secciones con encabezados vacíos. [https://phabricator.wikimedia.org/T419171]
'''Actualizaciones para los colaboradores técnicos'''
* La [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|función de subreferencia]], que permite a los editores añadir detalles a una referencia existente sin tener que duplicarla, se habilitará gradualmente en [[phab:T414094|más wikis]] a lo largo de este año. Se recomienda a las wikis que utilicen el accesorio [[mw:Special:MyLanguage/Reference Tooltips|Reference Tooltips]] que actualicen su versión (normalmente en [[m:MediaWiki:Gadget-ReferenceTooltips.js|MediaWiki:Gadget-ReferenceTooltips.js]], como se muestra [https://en.wikipedia.org/w/index.php?diff=1344408362 aquí]) para garantizar la compatibilidad. Otros accesorios relacionados con las referencias también podrían verse afectados. [https://phabricator.wikimedia.org/T416304]
* Todas las ediciones de Wikinoticias serán cerradas y puestas en modo solo lectura a partir del 4 de mayo de 2026. El contenido se mantendrá accesible, pero no se podrán añadir nuevas ediciones o artículos. El cierre fue aprobado por la Junta Directiva de la Fundación Wikimedia después de extensas discusiones. [[m:Wikimedia Foundation Board noticeboard#Board of Trustees Approves Closure of Wikinews|Lee más]].
* La [[:mw:Special:MyLanguage/API:Action API|Action API]] ha contado con diversos formatos para las respuestas de salida. Uno de ellos, <bdi lang="zxx" dir="ltr"><code><nowiki>format=php</nowiki></code></bdi>, se eliminará próximamente. Por favor, asegúrese de que sus scripts o bots utilicen el [[mw:Special:MyLanguage/API:Data formats#Output|formato JSON]]. Se espera que esta eliminación afecte a muy pocos scripts y bots. [https://phabricator.wikimedia.org/T118538]
* La página [[Special:NamespaceInfo|Special:NamespaceInfo]] ahora incluye los alias de los espacios de nombres. Por ejemplo "WP" para el espacio de nombre "Proyecto" ("Wikipedia") en la Wikipedia en alemán. [https://phabricator.wikimedia.org/T381455]
* [[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.46/wmf.23|MediaWiki]]
''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2026/15|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].''
</div><section end="technews-2026-W15"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:19 6 abr 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=30362761 -->
== Wikcionario:Frecuencias, Wikcionario:Frecuentes ==
Creo que estos casos caen bajo la misma consideración que [[Especial:PermaLink/6077394#Wikcionario:Índice]]. Traslado sin redirecciones a Apéndice:XX:Frecuentes/(resto), donde XX es el código de idioma. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:16 8 abr 2026 (UTC)
:Hecho. @[[Usuario:Peter Bowman|Peter Bowman]], quedaron cuatro redirecciones que comienzan con Wikcionario:Palabras más frecuentes.*, podrías eliminarlas por favor? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 02:33 16 abr 2026 (UTC)
::@[[Usuario:Tmagc|Tmagc]]: hecho. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 09:43 16 abr 2026 (UTC)
== Eliminación de firmas personalizadas de usuario (y otras modificaciones) ==
En vista de los 8k [[Especial:Errores de sintaxis|errores de sintaxis]] que quedan, y que últimamente se despertó cierto interés por parte de @[[Usuario:Redmin|Redmin]] en eliminarlos, y viendo que la mayoría de errores afectan a páginas de usuario y páginas de discusión (que incluye a los cafés), considerando además que los errores presentes son dos: [[Especial:Errores_de_sintaxis/obsolete-tag|obsolete-tag]] y [[Especial:Errores_de_sintaxis/night-mode-unaware-background-color|night-mode-unaware-background-color]]. La propuesta que surgió sería hacer las siguientes cosas sobre las 8k páginas que tengan cualquiera de estos dos errores, en el orden indicado (@[[Usuario:Peter Bowman|Peter Bowman]] corregime si dije algo mal):
# Para las firmas de usuario que acarreen cualquiera de los dos problemas, reemplazarlas por la firma que trae MediaWiki por defecto.
# Para mensajes automáticos o semiautomáticos que provoquen el error del color, como los generados por las [[:Categoría:Plantillas de notificaciones, intimaciones y denuncias]] o mensajes de distribución masiva, etc etc., eliminar los colores personalizados y dejar los que trae MW por defecto.
# Reemplazar las etiquetas obsoletas por sus [[mw:Help:Lint errors/obsolete-tag|versiones nuevas]].
# Los mensajes propiamente dichos, se discutirán caso por caso de ser necesario, o bien se dejan como están.
En las páginas y subpáginas de usuario (no las de discusión), solamente se hará 3. y no se tocará nada relacionado con los colores. En cuanto a lo de eliminarlos en las otras páginas, creo que lo apropiado es eliminar los colores de letra, si los hay, cada vez que se elimine el color de fondo porque si se fuerza un color oscuro se verá mal en el modo oscuro o también claro con claro causaría el mismo problema. No quisiera forzar el color de letra para subsanar el "error" automático generado porque es como esconder la mugre debajo de la alfombra: que una combinación de fondo + letra se vea bien en el modo claro, no significa que quedará estéticamente bien en el modo oscuro (ejemplo de lo que digo: miren cómo está ahora el [[Ayuda:Mapa de ayuda|Mapa de ayuda]] en el modo oscuro). En cambio, los colores que MW trae por defecto ya se ven bastante bien en ambos modos. Si veo alguna otra operación que sea fácil de realizar en masa la propondr por este mismo hilo. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:04 9 abr 2026 (UTC)
:(Apologies for the English comment.)
:Hello, I thought I would note that wikis which have developed policies about fixing lint errors tend to allow editing others’ user pages and comments to fix lint errors, encouraging them to try to preserve the appearance of those comments (see [[w:en:Wikipedia:Linter#How you can help|enwiki’s policy]] for example); this is part of the job I had in my mind for my bot that I proposed operating in the [[#Request for bot flag|discussion above]] (see [https://www.wikidata.org/w/index.php?title=Wikidata:Requests_for_deletions/Archive/2022/06/23&diff=prev&oldid=2478228416 this edit on Wikidata] for example). That would have allowed you to preserve the appearance of the signatures. [[Usuario:Redmin|Redmin]] ([[Usuario discusión:Redmin|discusión]]) 16:28 9 abr 2026 (UTC)
::@[[Usuario:Redmin|Redmin]] Según [[:w:en:Wikipedia:Village_pump_(proposals)/Archive_210#RfC:_applying_signature_validation_retroactively]], las firmas que no se ajusten a las políticas serán reemplazadas por la firma predeterminada de MW. Así que en.wiki parece estar más de mi lado. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:06 9 abr 2026 (UTC)
:::That RfC was about configuring MW to prevent adding new comments if the user adding them has an invalid signature (which would not make existing lint errors go away), not about fixing existing signatures. That being said, have I misunderstood the aim of this proposal? [[Usuario:Redmin|Redmin]] ([[Usuario discusión:Redmin|discusión]]) 17:41 9 abr 2026 (UTC)
::::@[[Usuario:Redmin|Redmin]] You understood everything correctly, I misread the thread. However, my point in this is that we can't just cheat the linter just to make all errors disappear, that is not how the things work. All of the affected users are no longer part of this project but if they were still alive and they were aware of the new "night mode", probably they would have wanted to define a two-color layout, one for each mode, not just to make the night style a "cheap copy" of the day style. That's why I think replacing with the default signature is the best option. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 13:14 10 abr 2026 (UTC)
:@[[Usuario:Peter Bowman|Peter Bowman]] 2x1: te parece que además cambiemos [[mw:Manual:$wgSignatureValidation|$wgSignatureValidation]] a 'disallow'? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 13:23 10 abr 2026 (UTC)
::@[[Usuario:Tmagc|Tmagc]]: me parece bien, y es algo que ya se ha hecho en enwiki ([[phab:T355462]]) y plwiki ([[phab:T364769]]). Sería necesario abrir una votación (hazlo en una sección nueva) y esperar un par de semanas. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 14:00 10 abr 2026 (UTC)
:A falta de más comentarios, procedo a realizar los cambios mencionados. Saludos. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 17:09 14 abr 2026 (UTC)
::Varios de los problemas vienen por el uso de <nowiki><code style:"background:yellow"></nowiki>. Reemplazo por <nowiki><code style:"background:yellow; color:black;"></nowiki> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 13:41 15 abr 2026 (UTC)
== 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)
== Géneros en francés y español ==
En francés las plantillas de inflexión para los adjetivos muestran "sin género" cuando deberían mostrar ambos. Sorprende que en español pase lo mismo, ya que es sabido que los adjetivos calificativos deben concordar en género y número con el sustantivo al que acompañan. Por ejemplo, en "el joven está feliz", "feliz" es masculino; en "la joven está feliz", "feliz" es femenino. ¡Saludos cordiales! [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 23:57 11 abr 2026 (UTC)
:@[[Usuario:Adelpine|Adelpine]] Aquí "sin género" debe leerse como "sin género definido", como lo muestra la categoría que se genera. La palabra no define ningún género, sino que depende de cómo se use en el discurso. No lo quise poner en el encabezado para que no quede tan largo. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 00:18 12 abr 2026 (UTC)
::@[[Usuario:Tmagc|Tmagc]] Busqué en Google "adjetivos sin género definido". Todos los resultados corresponden a Wikcionario o a copias del mismo. ¡Este concepto no se usa! Si no se desea colocar "masculino/femenino" podría colocarse "concordancia de género". Creo que lo primero es ideal pensando en los que comienzan a estudian español y francés como lengua extranjera, y lo segundo para los que ya entienden como funcionan los géneros en dichos idiomas. En ambos casos irían a la categoría "Adjetivos con concordancia de género (con el sustantivo)". [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 01:44 12 abr 2026 (UTC)
:::@[[Usuario:Adelpine|Adelpine]] Mmm tenemos ya todos los términos saturados. No podemos poner masculino/femenino porque ya tenemos "sustantivos masculinos y femeninos". "Concordancia" hay siempre, es una propiedad de todos los idiomas, no depende de la palabra en sí. No veo cuál es el problema de que ningún autor use el concepto. Si a nadie se le ocurrió pensar en ello antes no es culpa mía, en mi opinión refiere tal cual a lo que dice, es lo suficientemente sintético y no entraña ningún tipo de ambigüedad, frente a otras opciones más rebuscadas. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 02:25 12 abr 2026 (UTC)
::::Parece que esa anotación en [[feliz]] simplemente se refiere a que el sufijo resaltado ("-iz") no permite distinguir entre género masculino o femenino, al contrario que, por ejemplo, en [[alto]]. Propongo cambiar "(sin género)" a "(sin marca de género)". [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 08:49 12 abr 2026 (UTC)
:::::@[[Usuario:Peter Bowman|Peter Bowman]] Me gusta la denominación, sigue siendo lo suficientemente sintética. Deberíamos trasladar todas las categorías? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 15:10 12 abr 2026 (UTC)
:::::@[[Usuario:Peter Bowman|Peter Bowman]] Desafortunadamente, hay múltiples palabras que están en esta categoría y tienen marca de género como "aaronita". Creo que en lugar de una creación original deberíamos usar algo que ya existe. Por ejemplo, la RAE usa "adjetivo invariable en género". [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 16:03 12 abr 2026 (UTC)
::::::@[[Usuario:Adelpine|Adelpine]] Cuál es la marca de género que tiene [[aaronita]]? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:41 12 abr 2026 (UTC)
:::::::La letra "a" final que habitualmente indica femenino. [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 18:13 12 abr 2026 (UTC)
::::::::@[[Usuario:Adelpine|Adelpine]] En ese caso no hay ninguna marca de género. Lo mismo que en [[vietnamita]], aquí -ita no tiene valor de femenino ni lleva ninguna carga de género. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 18:43 12 abr 2026 (UTC)
:::::::::@[[Usuario:Tmagc|Tmagc]] Tomado de la RAE: "13.5d Desde el punto de vista flexivo, los adjetivos del español se dividen en tres grupos:
:::::::::A. Con flexión de género y número
:::::::::B. Con flexión de número, pero no de género
:::::::::C. Invariables en género y número
:::::::::Corresponden al grupo A un amplísimo número de adjetivos que dan lugar a paradigmas de cuatro formas, como en oso pardo /osa parda /osos pardos /osas pardas. Estos adjetivos se denominan tradicionalmente de dos terminaciones. La flexión de género de este paradigma aparece marcada en casi todos los casos por la desinencia -a: alta, guapa, cordobesa, española". [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 19:49 12 abr 2026 (UTC)
::::::::::@[[Usuario:Adelpine|Adelpine]] En ese caso -a es marca de género, pero que una palabra termine en -a no significa que lleve marca de género. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:50 12 abr 2026 (UTC)
:::::::::::Gracias a esta edición: https://es.wiktionary.org/w/index.php?title=eu&diff=6092819&oldid=6092818, que violó alguna misteriosa regla, se me ocurrió como zanjar esta cuestión. No se pueden crear nombres por lo siguiente: "Normas sobre la calidad
:::::::::::Adicionalmente, es necesario contemplar otras tres reglas básicas indispensables para garantizar la calidad de los contenidos:
:::::::::::Wikipedia no es una fuente primaria: la información nunca debe proceder en última instancia de los propios editores.
:::::::::::Verificabilidad: todos los artículos deben incluir referencias a las fuentes de las que proviene la información.
:::::::::::Las fuentes de las que proviene la información deben ser fuentes fiables.
:::::::::::En otras palabras, es necesario prestar especial atención al contenido que se añade, que debe haber sido publicado previamente por un autor de confianza y reflejar siempre en el propio artículo la fuente de la que se obtuvo la información." https://es.wikipedia.org/wiki/Wikipedia:Gu%C3%ADa_para_profesores/Normas_b%C3%A1sicas En consecuencia, se puede optar por alguno de los dos nombres ya nombrados que tienen referencias o buscar otros nombres que las tengan. [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 21:00 12 abr 2026 (UTC)
::::::::::::"Invariable" es algo común en el análisis de lenguas flexivas. Las terminaciones -ita, -ista, -ota y algunas otras son invariables en cuanto al género, es imposible ver esa a final como marca de femenino. Saludos. [[Usuario:Lin linao|Lin linao]] [[Usuario Discusión:Lin linao|¿dime?]] 02:12 13 abr 2026 (UTC)
:::::::::::::Estoy de acuerdo con @[[Usuario:Adelpine|Adelpine]], hay que apegarnos a la terminología que ya exista cuando sea posible, en este caso "invariable en género" es más común, directo y fácil de entender. Hace tiempo dejé un comentario similar en [[Categoría_discusión:Adjetivos_indeclinables|esta página de discusión]] (tal vez debí dejarlo aquí), con el objetivo de homomgeneizar los términos y usar los términos más correctos (p. ej. "adjetivos indeclinables" en lugar de "adjetivos invariantes"). [[Usuario:Raos10|Raos10]] ([[Usuario discusión:Raos10|discusión]]) 17:27 13 abr 2026 (UTC)
::::::::::::::Concuerdo con la propuesta de cambiarlo por "invariable en género". [[Usuario:26agcp|26agcp]] ([[Usuario discusión:26agcp|discusión]]) 04:56 23 abr 2026 (UTC)
== General Australian ==
Necesito que un bot realice la siguiente corrección: Existen 582 entradas de palabras inglesas que indican "General Australian" que deben decir solo "Australia". Este error se produjo porque se copiaron entradas de Wiktionary, las que muestran "General Australian" cuando deberían decir "Australia". Por ejemplo, "|3pron1=General Australian|3fono1=" debería ser reemplazado por "|3pron1=Australia|3fono1=". También, se deben cambiar las entradas si uno o ambos números están ausentes. Si la segunda entrada no es fono o fono1 sino fone o fone1, no debe ser reemplazada porque podría estar correcta. He revisado las primeras 20 palabras y la regla anterior funciona para todas ellas. [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 18:37 12 abr 2026 (UTC)
:@[[Usuario:Adelpine|Adelpine]] La primera parte la entendí, pero no entendí la segunda. "Si uno o ambos números están ausentes", cuáles números? Son los que acompañan al parámetro? Si es una omisión de <code>1</code>, mi bot lo agrega automáticamente. "Si la segunda entrada no es fono o fono1, sino fone o fone1", qué es la "segunda entrada"? Podrías poner un par de enlaces como ejemplos por favor, para que me conste aquello de lo que te estás refiriendo? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 02:45 16 abr 2026 (UTC)
::@[[Usuario:Tmagc|Tmagc]] Me refería a casos como "grass" "|4pron=General Australian, General New Zealand|4fone=ɡɹ̠äːs|4fone2=ɡɹ̠ɐːs". Asumí que si estaba la pronunciación fonética, podría estar bien. Sin embargo, revisé nuevamente y no encontré ningún caso en que así fuera. Por otra parte, en mis primeras ediciones, hacía copy/paste, pero cuando comprendí que "General Australian" estaba mal utilizado, comencé a mover las poquísimas correctas así "|3fone2=...|3fnota2=General Australian". En conclusión, si aparece "General Australian" en "pron" debe ser cambiada incluso si aparece después de "Received Pronunciation" o antes de "General New Zealand".
::Respecto a "General New Zealand", también está mal y debe ser cambiado a "Nueva Zelanda". Son solo 38 casos. [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 13:52 16 abr 2026 (UTC)
:::@[[Usuario:Adelpine|Adelpine]] Ah, ya veo. En varios casos la tercera fila está vacía por lo que habría que desplazar todos los parámetros un índice hacia atrás. Me encargaré. Pero una observación: en general usamos {{parámetro|pron}} para indicar el dialecto o región, mientras que {{parámetro|fnota}} es para aclarar la etimología o la categoría gramatical, en los (pocos) casos en donde una misma entrada tiene distintas pronunciaciones según a qué refiera. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 14:19 16 abr 2026 (UTC)
::::@[[Usuario:Tmagc|Tmagc]] ¿Por "la tercera fila está vacía" quieres decir que a veces "General Australian" aparece en el primer o segundo pron y el tercer pron no existe?
::::Respecto al uso de |fnota= fue la solución más conveniente que encontré. El problema con el inglés de Australia es que ellos usan un fonema, que coloqué en |fono=, y tres pronunciaciones fonéticas, que coloqué en |fone2,3,4=. El lugar más lógico para identificar los sociolectos era |fnota2,3,4=. Mi consejo, la misma solución que usen para hnota usenla para fnota. [[Usuario:Adelpine|Adelpine]] ([[Usuario discusión:Adelpine|discusión]]) 18:24 16 abr 2026 (UTC)
:::::@[[Usuario:Adelpine|Adelpine]] Nooo, me refiero a que General Australian aparece en el tercer pron y el segundo no existe. En cuanto a fnota, digo cómo pensé ese parámetro cuando lo agregué, porque estaba pensado para reemplazar a la inclusión de múltiples plantillas pron-graf cuando se invocaba varias veces en palabras cuya pronunciación cambia con la etimología. Pero no veo mal indicar los dialectos principles con pron y usar fnota para los subdialectos. Vos sos el que más usa la plantilla así que hacé lo que consideres más adecuado, pero sé consistente. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 20:29 16 abr 2026 (UTC)
::::::@[[Usuario:Adelpine|Adelpine]] Listo. Ya reemplacé todas las apariciones de "General Australian" por "Australia" y las de "General New Zealand" por "Nueva Zelanda". En cuanto al problema de los huecos, por lo que vi afectaba solamente a grass y a otra entrada más, pero el resto de las entradas no omitían índices. Así que fue más fácil de lo que creía. Saludos. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 13:55 17 abr 2026 (UTC)
== Noticias técnicas: 2026-16 ==
<section begin="technews-2026-W16" /><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/16|Traducciones en varios idiomas]] están disponibles.
'''Lo más destacado de la semana'''
* Se invita a los editores con experiencia a [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Main_Page probar] la función de [[mw:Special:MyLanguage/Article guidance|guía de artículos]], diseñada para ayudar a los usuarios novatos a crear artículos bien estructurados que cumplan con las políticas de Wikipedia. Las instrucciones para la prueba están [[mw:Special:MyLanguage/Article guidance/Test feature guide|disponibles]]. Además, tras revisar [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Category:Pages_using_article_guidance los esquemas], por favor deje sus comentarios en la [[mw:Talk:Article guidance|página de discusión del proyecto]]. En función de sus aportaciones, la función se perfeccionará y se trasladará a las Wikipedias piloto para su traducción y adaptación. Puede ver el [[c:File:Article Guidance workflow demo - April 2026.webm|video]] que explica esta funcionalidad.
'''Actualizaciones para editores'''
* En la mayoría de las wikis, todos los usuarios autoconfirmados ya pueden utilizar la página [[Special:ChangeContentModel|Special:ChangeContentModel]] para [[mw:Special:MyLanguage/Help:ChangeContentModel|crear páginas nuevas con modelos de contenido personalizados]] (como listas de mensajes masivos), lo que permite que dichas páginas sean más accesibles. Consulte [[Special:ListGroupRights|Special:ListGroupRights]] para comprobar el estado de este permiso en su wiki. [https://phabricator.wikimedia.org/T248294]
* El equipo de Growth ha lanzado un [[mw:Special:MyLanguage/Contributors/Account_Creation_Experiments|experimento de creación de cuentas]] para evaluar si añadir un botón de registro en el encabezado de la versión web móvil aumenta la creación de cuentas y anima a más usuarios móviles a contribuir en las wikis. El experimento está activo actualmente en las Wikipedias en hindi, indonesio, bengalí, tailandés y hebreo, y se dirige al 10% de los usuarios de la versión web móvil que no han iniciado sesión.
* [[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 solucionó un error en el Editor Visual que podía causar que la pantalla de carga se detuviera en dispositivos con Windows donde las animaciones estaban desactivadas. [https://phabricator.wikimedia.org/T382856]
'''Actualizaciones para los colaboradores técnicos'''
* A partir de esta semana, las personas que son {{int:group-abusefilter}}, quienes tengan la función beta [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]] activada, dispondrán de [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] en lugar de [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] como editor en el [[Special:AbuseFilter|Special:AbuseFilter]]. Esto forma parte de un esfuerzo integral para dotar de mayor consistencia a la experiencia de usuario en todos los editores. [https://phabricator.wikimedia.org/T399673][https://phabricator.wikimedia.org/T419332]
* Las herramientas y bots que acceden a la [[mw:Special:MyLanguage/Notifications/API|API de notificaciones]] (<bdi lang="zxx" dir="ltr"><code><nowiki>action=query&meta=notifications</nowiki></code></bdi>) necesitarán actualizar sus permisos de OAuth o BootPassword para que también incluyan el acceso a notificaciones privadas. [https://phabricator.wikimedia.org/T421991]
* Debido a una actualización de la biblioteca de software, es posible que las listas en las páginas de categorías se muestren desordenadas a partir del 20 de abril. Se ejecutará un script de migración para corregir este problema, el cual tardará entre unas horas y varios días en completarse, dependiendo del tamaño de la wiki (pudiendo demorar hasta una semana en la Wikipedia en inglés). [https://phabricator.wikimedia.org/T422544]
* [[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.46/wmf.24|MediaWiki]]
''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2026/16|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].''
</div><section end="technews-2026-W16" />
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:19 13 abr 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=30380527 -->
== trasladar los cómos al espacio de Ayuda ==
Está bien si traslado todas las páginas que comiencen con Wikcionario:Cómo, incluida [[Ayuda:CÓMOS]] al espacio de Ayuda? Y en caso de que así sea, debería dejar las redirecciones? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 20:20 17 abr 2026 (UTC)
:Parece que solo serían seis páginas: [[Especial:PáginasPorPrefijo/Wikcionario:Cómo]]. Yo diría que adelante, sin redirecciones. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 21:51 17 abr 2026 (UTC)
::Listo. Solo faltaría modificar [[Mediawiki:Recentchangestext]] y agregar el alias <code>A:</code> para <code>Ayuda:</code>, así cambiamos [[WN:COMO]] por [[A:COMO]]. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 15:49 18 abr 2026 (UTC)
:::Hecho, salvo lo del alias, que requeriría solicitar un cambio en la configuración de la wiki y no sé si merece la pena. [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 18:22 18 abr 2026 (UTC)
== Noticias técnicas: 2026-17 ==
<section begin="technews-2026-W17"/><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/17|Traducciones en varios idiomas]] están disponibles.
'''Lo más destacado de la semana'''
* Después de dos años de desarrollo, [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]], también conocido como [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror 6]], dejará de ser una función beta este martes 21 de abril. Esta herramienta ofrece mejoras en la legibilidad del código fuente y la wikisintaxis, reduce los errores de escritura y aporta otros [[mw:Special:MyLanguage/Help:Extension:CodeMirror|beneficios]] para todos los usuarios del resaltador de sintaxis estándar. Un gran agradecimiento al voluntario [https://phabricator.wikimedia.org/p/Bhsd/ Bhsd], quien desarrolló muchas de las nuevas funcionalidades, incluyendo el [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Code folding|plegado de código]], el [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Autocompletion|autocompletado]] y las [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Linting|comprobaciones]]. [https://phabricator.wikimedia.org/T259059]
* Se ha lanzado una actualización mayor de la aplicación de Wikipedia para iOS, la cual ha sido rediseñada para adaptarse a los últimos estilos visuales de Apple «Liquid Glass». [https://apps.apple.com/us/app/wikipedia/id324715238 Descarga la última versión] y revisa las novedades de esta actualización.
'''Actualizaciones para editores'''
* [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|Listas de lectura]] es una función que permite a los lectores guardar artículos para leerlos más tarde. Esta característica ya está disponible en las Wikipedias en árabe, francés, indonesio, vietnamita y chino, y se ha habilitado de forma predeterminada para todas las cuentas nuevas en todas las ediciones de Wikipedia.
* Un experimento que explora mejoras en las [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews|previsualizaciones en la web móvil]] se lanzará durante la semana del 20 de abril en las Wikipedias en árabe, inglés, francés, italiano, polaco y vietnamita. Las previsualizaciones son ventanas emergentes (''pop-ups'') que muestran una miniatura, un párrafo descriptivo y un enlace para abrir el artículo al pasar sobre un enlace azul, lo que permite mejorar la navegación y el descubrimiento de contenidos. Esta función ya está disponible en las versiones de escritorio y en las aplicaciones móviles. [[m:Special:MyLanguage/List of experiments in Product and Technology#Template|Más información sobre este y otros experimentos]].
* En varias wikis, los usuarios registrados que no han [[mw:Special:MyLanguage/Help:Email confirmation|confirmado sus direcciones de correo electrónico]] comenzarán a ver un aviso que los animará a confirmar su correo. Al tener el correo confirmado, es posible restablecer el acceso a la cuenta en caso de pérdida de credenciales. [[mw:Special:MyLanguage/Help:Email confirmation|Más información sobre este cambio]]. [https://phabricator.wikimedia.org/T421366]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Elemento recurrente]] Revisa las {{formatnum:15}} {{PLURAL:15|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 el editor de wikitexto de 2017 que afectaba a páginas muy extensas, provocando lentitud en la carga y la previsualización, desfase al desplazarse (''scrolling'') y fallos de rendimiento al seleccionar, cortar o pegar contenidos. [https://phabricator.wikimedia.org/T184857]
'''Actualizaciones para los colaboradores técnicos'''
* Como parte de la promoción de [[mw:Special:MyLanguage/Help:Extension:CodeMirror|CodeMirror]] desde una función nbeta, todos los usuarios comenzarán a usar [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] en lugar de [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] para el resaltado de sintaxis al editar códigos JavaScript, CSS, JSON, Vue o Lua. [https://phabricator.wikimedia.org/T419332]
* El servicio <code>mirrors.wikimedia.org</code> para los usuarios de Debian y Ubuntu será retirado y dejará de funcionar el 15 de mayo. Los recursos de este servicio se sustituirán por opciones nuevas y mejoradas. Es posible que algunos usuarios deban cambiar a un servidor diferente, proceso que no debería tomar más de un minuto. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/LJYRIS4WB66HIRCAO4GIDTXCMDVZRBMA/ Aquí puede encontrar más información]. [https://phabricator.wikimedia.org/T416707]
* Las tablas <bdi lang="zxx" dir="ltr"><code><nowiki>image</nowiki></code></bdi> y <bdi lang="zxx" dir="ltr"><code><nowiki>oldimage</nowiki></code></bdi> serán eliminadas en [[wikitech:Help:Wiki Replicas|wikireplicas]]. Si tu herramienta o consultas acceden a <bdi lang="zxx" dir="ltr"><code><nowiki>image</nowiki></code></bdi> o <bdi lang="zxx" dir="ltr"><code><nowiki>oldimage</nowiki></code></bdi> directamente, actualízalas para que utilicen las tablas <bdi lang="zxx" dir="ltr"><code><nowiki>file</nowiki></code></bdi> y <bdi lang="zxx" dir="ltr"><code><nowiki>filerevision</nowiki></code></bdi> antes del 28 de mayo. [https://phabricator.wikimedia.org/T28741]
* Continuando con la reciente implementación de los límites de acceso a la API para el tráfico no identificado, la Fundación Wikimedia seguirá trabajando para asegurar un [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|uso justo de la infraestructura]] mediante la aplicación de límites globales al tráfico de la API identificado a partir de la última semana de abril. Estos límites se han configurado intencionadamente con los valores más altos posibles para minimizar el impacto en la comunidad. Los bots que se ejecutan en Toolforge/WMCS o aquellos que cuentan con el permiso de bot en cualquier wiki no deberían verse afectados por el momento. No obstante, se recomienda a todos los desarrolladores seguir las mejores prácticas actualizadas. Para más información, consulte [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]] y las [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits/FAQ|Preguntas frecuentes]].
* La [[mw:Special:MyLanguage/Attribution API|Attribution API]] ya está disponible en fase [[mw:Special:MyLanguage/Wikimedia APIs/Stability policy|beta]]. Esta API obtiene información para acreditar los artículos y archivos multimedia de Wikimedia allá donde se utilicen. La documentación de referencia se puede consultar a través de la página especial de la zona de pruebas (''sandbox'') de la API REST, disponible en todas las wikis de Wikimedia (como la [https://en.wikipedia.org/w/index.php?api=attribution.v0-beta&title=Special%3ARestSandbox zona de pruebas REST de la Wikipedia en inglés]). Puede compartir sus comentarios en la [[mw:Talk:Attribution API|página de discusión del proyecto]].
* Esta semana no hay una nueva versión de MediaWiki.
''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2026/17|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].''
</div><section end="technews-2026-W17"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:00 20 abr 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=30432763 -->
== Nueva plantilla para taxones ==
Junto con @[[Usuario:Raos10|Raos10]] (lo menciono por si quiere acotar algo), estrenamos la nueva plantilla {{ep|taxón}} para agregar los taxones a principio de la definición. Viene en reemplazo de la vieja costumbre de agregarlos con el formato manual. Ahora no es necesario especificar nada en cuanto al formato, ni agregar paréntesis ni cursivas: solo se invoca antes de escribir la definición separando todos los nombres científicos que apliquen a la definición como si fueran parámetros diferentes y especificando su apariencia alternativa ({{parámetro|altN}}), igual que como funciona con {{ep|sinónimo}}. Pronto migraré las páginas que tienen nombres científicos sin esta nueva plantilla. Quedo atento a dudas, quejas, reclamos, observaciones o sugerencias. Saludos. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 23:04 20 abr 2026 (UTC)
== Request for comment (global AI policy) ==
<bdi lang="en" dir="ltr" class="mw-content-ltr">
Apologies for writing in English. {{int:Please-translate}}
A [[:m:Requests for comment/Artificial intelligence policy|request for comment]] is currently being held to decide on a global AI policy. {{int:Feedback-thanks-title}}
[[Usuario:MediaWiki message delivery|MediaWiki message delivery]] ([[Usuario discusión:MediaWiki message delivery|discusión]]) 00:58 26 abr 2026 (UTC)
</bdi>
<!-- Mensaje enviado por Usuario:Codename Noreste@metawiki mediante la lista en https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30424282 -->
== Noticias técnicas: 2026-18 ==
<section begin="technews-2026-W18"/><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/18|Traducciones en varios idiomas]] están disponibles.
'''Actualizaciones para editores'''
* Se ha implementado un cambio en la forma en que se autoconfirman las cuentas nuevas para mejorar la protección contra el vandalismo. Actualmente, los usuarios que poseen una cuenta desde hace unos días y realizan algunas ediciones pasan automáticamente al grupo [[{{int:grouppage-autoconfirmed/{{CONTENTLANGUAGE}}}}|{{int:group-autoconfirmed}}]]. Esta configuración suele ser aprovechada por vándalos que crean cuentas y solo empiezan a usarlas tras dejar pasar el tiempo requerido. Para mitigar esto, a partir de la próxima semana, la antigüedad de la cuenta para fines de autoconfirmación se contará desde el momento de la primera edición en lugar de la fecha de registro. El valor numérico de la antigüedad necesaria se mantendrá sin cambios. Esta modificación se aplicará únicamente en las wikis que ya requieren al menos una edición como parte de sus requisitos de autoconfirmación. [https://phabricator.wikimedia.org/T418484]
* Todos los usuarios de Wikipedia con cuentas nuevas, así como aquellos que tengan activada la opción «Habilitar automáticamente las nuevas funciones beta» en sus preferencias, tendrán acceso a la función beta [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|listas de lectura]] para guardar artículos y leerlos más tarde. Esto permite organizar los temas de interés en un solo lugar para un acceso más cómodo.
* [[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 en el que las imágenes de la caja de infobox tenían un relleno excesivo en Firefox. [https://phabricator.wikimedia.org/T423676]
'''Actualizaciones para los colaboradores técnicos'''
* Como recordatorio, esta semana comenzarán a aplicarse los límites globales de la API para el tráfico identificado. Esto ayudará a asegurar un [[mw:MediaWiki Product Insights/Responsible Reuse|uso justo de la infraestructura]]. Los bots que se ejecutan en Toolforge/WMCS o aquellos con permisos de bot en cualquier wiki no deberían verse afectados por ahora. Sin embargo, se recomienda a todos los desarrolladores que sigan las mejores prácticas actualizadas. Para más información, incluyendo los límites actuales, consulte [[mw:Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]] y las [[mw:Wikimedia APIs/Rate limits/FAQ|Preguntas frecuentes]].
* [[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.46/wmf.26|MediaWiki]]
''Las '''[[m:Special:MyLanguage/Tech/News|Noticias Técnicas]]''' son preparadas por [[m:Special:MyLanguage/Tech/News/Writers|los escritores de Noticias Técnicas]] y publicadas con un [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Colabore]] • [[m:Special:MyLanguage/Tech/News/2026/18|traduzca]] • [[m:Tech|obtenga ayuda]] • [[m:Talk:Tech/News|denos su opinión]] • [[m:Global message delivery/Targets/Tech ambassadors|suscríbase o cancele su suscripción]].''
</div><section end="technews-2026-W18"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:06 27 abr 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=30458046 -->
bwm8d6dws5ijx0tbascffr5ilvh8k0m
andar
0
1537
6110184
5907870
2026-04-28T00:51:26Z
Tmagc
158167
6110184
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|1audio1=LL-Q1321 (spa)-Rodrigo5260-andar.wav|1aunota1=Perú}}
=== Etimología ===
{{etimología|la-eme|andare|alt=andāre}}, y este de [[ambulo|ambulāre]] o bien de [[ambio|ambitāre]].
==== {{verbo intransitivo|es}} ====
[[Archivo:A poor pedestrian.jpg|thumb|Un hombre '''andando''' en una carretera de Marruecos (1).]]
;1: {{plm|ir}} de un lugar a otro dando [[paso]]s.<ref name="dle1925">{{DLE1925|80}}</ref>
{{uso|utcprnl}} [[andarse]].
{{ejemplo|«{{plm|lo}} [[saber|supe]] [[a]] [[tiempo]], '''''anduve''''' [[dieciséis]] [[legua]]s, [[y]] [[les]] [[dar|di]] [[uno|un]] [[albazo]] [[este|esta]] [[mañana]], [[por]] [[aquí]] [[cerca]]…; [[los]] [[matar|he matado]] [[a]] [[casi]] [[todo]]s, [[pero]] [[tener|tengo]] [[que]] [[colgar]] [[a]] [[los]] [[capitán|capitanes]] [[en]] [[este]] [[camino]] (…)».|a={{versalita|[[w:Ignacio Manuel Altamirano|Altamirano, Ignacio Manuel]]}}|t=El Zarco: episodio de la vida mexicana en 1861-63|f=1886|c=libro}}
{{sinónimo|ir|irse|dirigir|dirigirse|encaminarse}}.
;2: {{plm|ir}} de un lugar a otro [[algo]].<ref name="dle1925 />
{{uso|rara vez se emplea como pronominal}} [[andarse]].
{{sinónimo|moverse|desplazarse}}.
;3: {{plm|moverse}} un [[artefacto]] o [[máquina]] para ejecutar sus funciones.<ref name="dle1925 />
{{ejemplo|«[[echar|Echa]] [[a]] '''''andar''''' [[el]] [[coche]] [[ahora]]».|t=Ejemplo brindado por Wikcionario|c=página}}
;4: {{plm|estar}}{{subíndice|9}}.<ref name="dle1925 />
{{ejemplo|«([…] [[para]] [[quien]] [[tener|tiene]] [[poco|pocas]] [[cosa]]s [[importante]]s [[que]] [[hacer]] [[en]] [[este|esta]] [[vida]], [[como]] [[en]] [[el]] [[caso]] [[de]] [[Mari]] [[Carmen]] [[Bori]], [[invertir]][[las]] [[o]] [[hacer]][[las]] [[a]] [[destiempo]] [[poder|puede]] [[resultar]] [[fatal]]: [[no]] [[solo]] '''''anduvo''''' [[desorientado|desorientada]] [[y]] [[seriamente]] [[deprimido|deprimida]] [[durante]] [[uno|un]] [[año]], [[sino]] [[que]] [[hacer|hizo]] [[peligrar]] [[su]] [[matrimonio]])».|a={{versalita|Marsé, Juan}}|t=Últimas tardes con Teresa|f=1966|c=libro}}
{{sinónimo|hallarse|encontrarse|sentirse}}.
;5: {{plm|haber}}{{subíndice|3}}.<ref name="dle1925 />
{{sinónimo|estar|existir|hallarse}}.
;6: {{plm|entender}} [[o]] [[entenderse]] [[en]] [[algo]].<ref name="dle1925 />
{{ejemplo|«{{plm|a}} [[este]] [[hombre]] [[solo]] [[le]] [[gustar|gusta]] '''''andar''''' {{versalita|[[en]]}} [[pleito]]s».|t=Ejemplo brindado por Wikcionario|c=página}}
;7: {{plm|dicho}} del [[tiempo]]: {{plm|pasar}} o [[correr]].<ref name="dle1925 />
;8: Con las [[preposición|preposiciones]] ''con'' y ''sin'', y algunos nombres, [[tener]] o [[padecer]] lo que el nombre significa, o al contrario.<ref name="dle1925 />
{{ejemplo|→ «'''''Anda''''' {{versalita|[[con]]}} [[cuidado]]». <br>→ «'''''Anduvo''''' {{versalita|[[sin]]}} [[recelo]]».|t=Ejemplo brindado por Wikcionario|c=página}}
;9: Seguido de la [[preposición]] ''a'' y de nombres en plural, como ''[[cachete]]s'', ''cuchilladas'', ''tiros'', [[dar]][[los]], o [[reñir]] de este modo.<ref name="dle1925 />
;10: Seguido de la [[preposición]] ''en'', [[poner]] o [[meter]] las manos o los dedos en alguna cosa.<ref name="dle1925 />
{{uso|utcprnl}} [[andarse]].
{{ejemplo|«¿[[poder|Se puede]] [[saber]] [[por qué]] '''''andabas''''' {{versalita|[[en]]}} [[mi]] [[cajón]], [[hermana|hermanita]]?».|t=Ejemplo brindado por Wikcionario|c=página}}
{{sinónimo|hurgar|tocar}}.
;11: Seguido de un número que indique años, [[estar]] [[por]] [[cumplir]] estos.<ref name="dle1925 />
{{ejemplo|→ «¿¡{{plm|cómo}} [[que]] [[viejo|vieja]]!? {{plm|apenas}} '''''ando''''' {{versalita|[[en]]}} [[mis]] [[treinta]] [[como]] [[para]] [[que]] [[me]] [[venir|vengas]] [[a]] [[decir]] [[eso]]». <br>→ «{{plm|ya}} '''''ando''''' [[rondar|rondando]] [[los]] [[cincuenta]] [[año]]s».|t=Ejemplo brindado por Wikcionario|c=página}}
;12: Seguido de la [[preposición]] ''con'', [[manejar]]{{subíndice|1}}.<ref name="dle1925 />
{{ejemplo|«{{plm|oye}}. ¿{{plm|y}} [[tú]] [[por qué]] '''''andas''''' {{versalita|[[con]]}} [[aguja]]s? ¡[[traer|Trae]] [[acá]]! [[poder|Puede]] [[ser]] [[peligroso]]».|t=Ejemplo brindado por Wikcionario|c=página}}
;13: {{plm|ir}}{{subíndice|1}}.<ref name="dle1925 />
{{uso|coloquial}}.
{{ejemplo|«'''''Ándate''''' [[a]] [[la]] [[farmacia]] [[y]] [[comprar|cómprame]] [[uno|unas]] [[pastilla]]s».|t=Ejemplo brindado por Wikcionario|c=página}}
;14 {{csem|náutica}}: {{plm|arribar}}{{subíndice|7}}.<ref name="dle1925 />
;15: {{plm|recorrer}}.<ref name="dle1925 />
{{ejemplo|«{{plm|miércoles}} [[amainar|amainamos]] [[la]] [[noche]] [[desde]] [[pasado|pasadas]] [[cinco]] [[ampolleta]]s [[hasta]] [[el]] [[día]]: [[este]] [[mismo]] [[día]] '''''anduve''''' [[catorce]] [[legua]]s».|a={{versalita|Anónimo}}|t=Relacion del viaje que hizo Álvaro de Saavedra (…)|f=1529|c=libro|p=467}}
{{sinónimo|avanzar|caminar|marchar}}.
;16: Seguido de la preposición ''a'' y otro verbo, ocuparse en, ponerse a, ejecutar la acción de dicho verbo.<ref name="dle1925 />
;17: Con las preposiciones ''con'' y ''en'', [[usar]] o [[emplear]].<ref name="dle1925 />
;18: {{plm|marchar}}, funcionar.
{{ejemplo|Las cosas ''andan'' bien.}}
;19: Mantener una [[relación]] [[amorosa]] con pocas [[formalidad]]es o [[compromiso]]s.
{{ámbito|Chile}}.
{{uso|coloquial}}.
==== {{verbo auxiliar|es}} ====
;19: Con [[gerundio]]s (andar + gerundio), denota la acción que expresan estos.<ref name="dle1925 />
{{ejemplo|→ «¿{{plm|Matías}}? {{plm|pues}} [[no]] [[saber|sé]] [[qué]] '''''andará''''' {{versalita|[[hacer|haciendo]]}} [[ese]] [[muchacho]] [[con]] [[su]] [[vida]]».|t=Ejemplo brindado por Wikcionario|c=página}}
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;20: {{plm|andadura}}.<ref name="dle1925 />
{{ejemplo|«{{plm|su}} '''''andar''''' [[ser|es]] [[uno|un]] [[poco]] [[raro]]».|t=Ejemplo brindado por Wikcionario|c=página}}
{{sinónimo|andada|caminar}}.
;21: {{plm|suelo}}, [[pavimento]].<ref name="dle1925 />
{{uso|obsoleto}}.
==== Locuciones ====
* [[andar a tira vaca, tira buey]]
* [[andar con santos tapados]]
* [[andarse por las ramas]]
==== Refranes ====
* [[ande yo caliente y ríase la gente]]
* [[dime con quién andas y te diré quién eres]]
* [[dime con quién andas y si está buena me la mandas]]
* [[quien anda entre miel, algo se le pega]]
==== Conjugación ====
{{es.v}}
==== Traducciones ====
{{trad-arriba}}
{{t|de|a1=1|t1=gehen|t2=laufen}}
{{t|sai-all|a1=1|t1=huyllpanen}}
{{t|az|a1=1|t1=getmək|t2=yerimək}}
{{t|br|a1=1|t1=kerzhat|t2=kerzhet|t3=kerzhiñ|t4=kerzhout}}
{{t|sl|i1=s|t1=iti|t2=hoditi}}
{{t|fr|a1=1|t1=marcher|t2=aller à pied}}
{{t|gl|a1=1|t1=andar}}
{{t|en|a1=1|t1=walk|t2=go}}
{{t|it|a1=1|t1=camminare|t2=andare a piedi}}
{{t|arn|a1=1,3|a2=1|t1=miawün|t2=trekan}}
{{t|nl|a1=1|t1=gaan|t2=lopen|t3=te voet gaan}}
{{trad-abajo}}
== {{lengua|ast}} ==
{{pron-graf|leng=ast}}
=== Etimología ===
{{etimología|leng=ast}}.
==== {{verbo intransitivo|ast}} ====
;1: {{plm}}.
==== Conjugación ====
{{ast.v}}
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Etimología 1 ===
{{etimología|leng=gl}}.
==== {{verbo|gl}} ====
;1: {{plm|andar}}.
== Referencias y notas ==
<references />
l1l77xzzx585y1q3dvp0m3tk7oufkh5
6110189
6110184
2026-04-28T01:28:57Z
Tmagc
158167
6110189
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|1audio1=LL-Q1321 (spa)-Rodrigo5260-andar.wav|1aunota1=Perú}}
=== Etimología ===
{{etimología|la-eme|andare|alt=andāre}}, y este de [[ambulo|ambulāre]] o bien de [[ambio|*ambitāre]].
==== {{verbo intransitivo|es}} ====
[[Archivo:A poor pedestrian.jpg|thumb|Un hombre '''andando''' en una carretera de Marruecos (1).]]
;1: {{plm|ir}} de un lugar a otro dando [[paso]]s.<ref name="dle1925">{{DLE1925|80}}</ref>
{{uso|utcprnl}} [[andarse]].
{{ejemplo|«{{plm|lo}} [[saber|supe]] [[a]] [[tiempo]], '''''anduve''''' [[dieciséis]] [[legua]]s, [[y]] [[les]] [[dar|di]] [[uno|un]] [[albazo]] [[este|esta]] [[mañana]], [[por]] [[aquí]] [[cerca]]…; [[los]] [[matar|he matado]] [[a]] [[casi]] [[todo]]s, [[pero]] [[tener|tengo]] [[que]] [[colgar]] [[a]] [[los]] [[capitán|capitanes]] [[en]] [[este]] [[camino]] (…)».|a={{versalita|[[w:Ignacio Manuel Altamirano|Altamirano, Ignacio Manuel]]}}|t=El Zarco: episodio de la vida mexicana en 1861-63|f=1886|c=libro}}
{{sinónimo|ir|irse|dirigir|dirigirse|encaminarse}}.
;2: {{plm|ir}} de un lugar a otro [[algo]].<ref name="dle1925 />
{{uso|rara vez se emplea como pronominal}} [[andarse]].
{{sinónimo|moverse|desplazarse}}.
;3: {{plm|moverse}} un [[artefacto]] o [[máquina]] para ejecutar sus funciones.<ref name="dle1925 />
{{ejemplo|«[[echar|Echa]] [[a]] '''''andar''''' [[el]] [[coche]] [[ahora]]».|t=Ejemplo brindado por Wikcionario|c=página}}
;4: {{plm|estar}}{{subíndice|9}}.<ref name="dle1925 />
{{ejemplo|«([…] [[para]] [[quien]] [[tener|tiene]] [[poco|pocas]] [[cosa]]s [[importante]]s [[que]] [[hacer]] [[en]] [[este|esta]] [[vida]], [[como]] [[en]] [[el]] [[caso]] [[de]] [[Mari]] [[Carmen]] [[Bori]], [[invertir]][[las]] [[o]] [[hacer]][[las]] [[a]] [[destiempo]] [[poder|puede]] [[resultar]] [[fatal]]: [[no]] [[solo]] '''''anduvo''''' [[desorientado|desorientada]] [[y]] [[seriamente]] [[deprimido|deprimida]] [[durante]] [[uno|un]] [[año]], [[sino]] [[que]] [[hacer|hizo]] [[peligrar]] [[su]] [[matrimonio]])».|a={{versalita|Marsé, Juan}}|t=Últimas tardes con Teresa|f=1966|c=libro}}
{{sinónimo|hallarse|encontrarse|sentirse}}.
;5: {{plm|haber}}{{subíndice|3}}.<ref name="dle1925 />
{{sinónimo|estar|existir|hallarse}}.
;6: {{plm|entender}} [[o]] [[entenderse]] [[en]] [[algo]].<ref name="dle1925 />
{{ejemplo|«{{plm|a}} [[este]] [[hombre]] [[solo]] [[le]] [[gustar|gusta]] '''''andar''''' {{versalita|[[en]]}} [[pleito]]s».|t=Ejemplo brindado por Wikcionario|c=página}}
;7: {{plm|dicho}} del [[tiempo]]: {{plm|pasar}} o [[correr]].<ref name="dle1925 />
;8: Con las [[preposición|preposiciones]] ''con'' y ''sin'', y algunos nombres, [[tener]] o [[padecer]] lo que el nombre significa, o al contrario.<ref name="dle1925 />
{{ejemplo|→ «'''''Anda''''' {{versalita|[[con]]}} [[cuidado]]». <br>→ «'''''Anduvo''''' {{versalita|[[sin]]}} [[recelo]]».|t=Ejemplo brindado por Wikcionario|c=página}}
;9: Seguido de la [[preposición]] ''a'' y de nombres en plural, como ''[[cachete]]s'', ''cuchilladas'', ''tiros'', [[dar]][[los]], o [[reñir]] de este modo.<ref name="dle1925 />
;10: Seguido de la [[preposición]] ''en'', [[poner]] o [[meter]] las manos o los dedos en alguna cosa.<ref name="dle1925 />
{{uso|utcprnl}} [[andarse]].
{{ejemplo|«¿[[poder|Se puede]] [[saber]] [[por qué]] '''''andabas''''' {{versalita|[[en]]}} [[mi]] [[cajón]], [[hermana|hermanita]]?».|t=Ejemplo brindado por Wikcionario|c=página}}
{{sinónimo|hurgar|tocar}}.
;11: Seguido de un número que indique años, [[estar]] [[por]] [[cumplir]] estos.<ref name="dle1925 />
{{ejemplo|→ «¿¡{{plm|cómo}} [[que]] [[viejo|vieja]]!? {{plm|apenas}} '''''ando''''' {{versalita|[[en]]}} [[mis]] [[treinta]] [[como]] [[para]] [[que]] [[me]] [[venir|vengas]] [[a]] [[decir]] [[eso]]». <br>→ «{{plm|ya}} '''''ando''''' [[rondar|rondando]] [[los]] [[cincuenta]] [[año]]s».|t=Ejemplo brindado por Wikcionario|c=página}}
;12: Seguido de la [[preposición]] ''con'', [[manejar]]{{subíndice|1}}.<ref name="dle1925 />
{{ejemplo|«{{plm|oye}}. ¿{{plm|y}} [[tú]] [[por qué]] '''''andas''''' {{versalita|[[con]]}} [[aguja]]s? ¡[[traer|Trae]] [[acá]]! [[poder|Puede]] [[ser]] [[peligroso]]».|t=Ejemplo brindado por Wikcionario|c=página}}
;13: {{plm|ir}}{{subíndice|1}}.<ref name="dle1925 />
{{uso|coloquial}}.
{{ejemplo|«'''''Ándate''''' [[a]] [[la]] [[farmacia]] [[y]] [[comprar|cómprame]] [[uno|unas]] [[pastilla]]s».|t=Ejemplo brindado por Wikcionario|c=página}}
;14 {{csem|náutica}}: {{plm|arribar}}{{subíndice|7}}.<ref name="dle1925 />
;15: {{plm|recorrer}}.<ref name="dle1925 />
{{ejemplo|«{{plm|miércoles}} [[amainar|amainamos]] [[la]] [[noche]] [[desde]] [[pasado|pasadas]] [[cinco]] [[ampolleta]]s [[hasta]] [[el]] [[día]]: [[este]] [[mismo]] [[día]] '''''anduve''''' [[catorce]] [[legua]]s».|a={{versalita|Anónimo}}|t=Relacion del viaje que hizo Álvaro de Saavedra (…)|f=1529|c=libro|p=467}}
{{sinónimo|avanzar|caminar|marchar}}.
;16: Seguido de la preposición ''a'' y otro verbo, ocuparse en, ponerse a, ejecutar la acción de dicho verbo.<ref name="dle1925 />
;17: Con las preposiciones ''con'' y ''en'', [[usar]] o [[emplear]].<ref name="dle1925 />
;18: {{plm|marchar}}, funcionar.
{{ejemplo|Las cosas ''andan'' bien.}}
;19: Mantener una [[relación]] [[amorosa]] con pocas [[formalidad]]es o [[compromiso]]s.
{{ámbito|Chile}}.
{{uso|coloquial}}.
==== {{verbo auxiliar|es}} ====
;19: Con [[gerundio]]s (andar + gerundio), denota la acción que expresan estos.<ref name="dle1925 />
{{ejemplo|→ «¿{{plm|Matías}}? {{plm|pues}} [[no]] [[saber|sé]] [[qué]] '''''andará''''' {{versalita|[[hacer|haciendo]]}} [[ese]] [[muchacho]] [[con]] [[su]] [[vida]]».|t=Ejemplo brindado por Wikcionario|c=página}}
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;20: {{plm|andadura}}.<ref name="dle1925 />
{{ejemplo|«{{plm|su}} '''''andar''''' [[ser|es]] [[uno|un]] [[poco]] [[raro]]».|t=Ejemplo brindado por Wikcionario|c=página}}
{{sinónimo|andada|caminar}}.
;21: {{plm|suelo}}, [[pavimento]].<ref name="dle1925 />
{{uso|obsoleto}}.
==== Locuciones ====
* [[andar a tira vaca, tira buey]]
* [[andar con santos tapados]]
* [[andarse por las ramas]]
==== Refranes ====
* [[ande yo caliente y ríase la gente]]
* [[dime con quién andas y te diré quién eres]]
* [[dime con quién andas y si está buena me la mandas]]
* [[quien anda entre miel, algo se le pega]]
==== Conjugación ====
{{es.v}}
==== Traducciones ====
{{trad-arriba}}
{{t|de|a1=1|t1=gehen|t2=laufen}}
{{t|sai-all|a1=1|t1=huyllpanen}}
{{t|az|a1=1|t1=getmək|t2=yerimək}}
{{t|br|a1=1|t1=kerzhat|t2=kerzhet|t3=kerzhiñ|t4=kerzhout}}
{{t|sl|i1=s|t1=iti|t2=hoditi}}
{{t|fr|a1=1|t1=marcher|t2=aller à pied}}
{{t|gl|a1=1|t1=andar}}
{{t|en|a1=1|t1=walk|t2=go}}
{{t|it|a1=1|t1=camminare|t2=andare a piedi}}
{{t|arn|a1=1,3|a2=1|t1=miawün|t2=trekan}}
{{t|nl|a1=1|t1=gaan|t2=lopen|t3=te voet gaan}}
{{trad-abajo}}
== {{lengua|ast}} ==
{{pron-graf|leng=ast}}
=== Etimología ===
{{etimología|leng=ast}}.
==== {{verbo intransitivo|ast}} ====
;1: {{plm}}.
==== Conjugación ====
{{ast.v}}
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Etimología 1 ===
{{etimología|leng=gl}}.
==== {{verbo|gl}} ====
;1: {{plm|andar}}.
== Referencias y notas ==
<references />
s499mnuaw4z8exnwhgbhmf48jh51j5g
arañar
0
2583
6110180
5935381
2026-04-27T23:45:01Z
Tmagc
158167
6110180
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v=aruñar|audio=LL-Q1321 (spa)-Rodelar-arañar.wav}}
=== Etimología ===
{{etimología|incierta}}. La explicación clásica se encuentra en el Diccionario de Autoridades, según la cual vendría de [[arar]] y de [[uña]]: [[aruñar]]. Sin embargo, la aparición de la variante con -u- aparece escrita casi un siglo después. Corominas la deriva de [[roña]], quien alega la posibilidad de un origen metonímico basado en la picazón.<ref>{{DCECH}}</ref> Otras teorías la derivan del francés antiguo [[hergner]] (dejó el moderno [[hargneux]]), y este del fráncico [[*harmēn]]. La vinculación con [[araña]] se ve muy forzada e improbable, mientras que el gallego [[rañar]] es una aféresis de este mismo vocablo.
=== {{verbo transitivo|es}} ===
;1: {{plm|raspar}}, [[rasgar]] o [[cortar]] utilizando las [[uña]]s.
;2: Hacer [[raya]]s superficiales en cosas lisas como la pared, el vidrio, el metal, etc.<ref name="drae1925" />
;3: Recoger con mucho [[afán]], de varias partes y en pequeñas porciones, lo necesario para algún fin.<ref name="drae1925">{{DLE1925}}</ref>
{{uso|coloquial}}
=== Conjugación ===
{{es.v}}
=== Información adicional ===
{{cognados|arranhar|arrañar}}
=== Traducciones ===
{{trad-arriba}}
<!-- formato: {{t+|idioma|<acepción#>|palabra|género}} p. ej. {{t+|fr|1|chose|f}} -->
{{trad-abajo}}
== Referencias y notas ==
<references />
njc717juooltd2yte3v5tgxmhrygsoi
6110181
6110180
2026-04-27T23:47:04Z
Tmagc
158167
/* Etimología */
6110181
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v=aruñar|audio=LL-Q1321 (spa)-Rodelar-arañar.wav}}
=== Etimología ===
{{año de documentación|1513}}. {{etimología|incierta}}. La explicación clásica se encuentra en el Diccionario de Autoridades, según la cual vendría de [[arar]] y de [[uña]]: [[aruñar]]. Sin embargo, la variante con -u- aparece escrita casi un siglo después. Corominas la deriva de [[roña]], quien alega la posibilidad de un origen metonímico basado en la picazón.<ref>{{DCECH}}</ref> Otras teorías la derivan del francés antiguo [[hergner]] (dejó el moderno [[hargneux]]), y este del fráncico [[*harmēn]]. La vinculación con [[araña]] se ve muy forzada e improbable, mientras que el gallego [[rañar]] es una aféresis de este mismo vocablo.
=== {{verbo transitivo|es}} ===
;1: {{plm|raspar}}, [[rasgar]] o [[cortar]] utilizando las [[uña]]s.
;2: Hacer [[raya]]s superficiales en cosas lisas como la pared, el vidrio, el metal, etc.<ref name="drae1925" />
;3: Recoger con mucho [[afán]], de varias partes y en pequeñas porciones, lo necesario para algún fin.<ref name="drae1925">{{DLE1925}}</ref>
{{uso|coloquial}}
=== Conjugación ===
{{es.v}}
=== Información adicional ===
{{cognados|arranhar|arrañar}}
=== Traducciones ===
{{trad-arriba}}
<!-- formato: {{t+|idioma|<acepción#>|palabra|género}} p. ej. {{t+|fr|1|chose|f}} -->
{{trad-abajo}}
== Referencias y notas ==
<references />
kmzw946src2uaqlzcrlfnhaf3p1brxs
perro
0
3878
6110191
6099514
2026-04-28T02:25:25Z
Adryx9999
176354
6110191
wikitext
text/x-wiki
{{desambiguación|pero|Pero|péro|peró|Peró|però|Perõ}}
== {{lengua|es}} ==
{{swadesh|es}}
{{pron-graf|1audio1=LL-Q1321 (spa)-Rodelar-perro.wav}}
=== Etimología 1 ===
{{año de documentación|1141}}.<ref>{{CNDHE}}</ref> {{etimología|incierta}}. Coromines<ref>{{referencia|p=453|f=2008|c=libro|a=Coromines, Joan|t=Breve diccionario etimológico de la lengua castellana|l=Madrid|editorial=Gredos}}</ref> sugiere un origen expresivo en la interjección usada para llamar al animal, u onomatopéyica de su gruñido. Compárese con el gallego {{l+|gl|apurrar}}. Viejas teorías que lo relacionaban con el latín {{l+|la|petra}} o, como en la entrada del Diccionario de Autoridades de 1737, con el griego antiguo {{l+|grc|πῦρ}} (''pỹr''), carecen por entero de fundamento.
[[Archivo:GermanShep1 wb.jpg|thumb|[1]]]
[[Archivo:NCI Visuals Food Hot Dog.jpg|thumb|[2]]]
[[Archivo:Clothespin-2459e.jpg|thumb|[3]]]
[[Archivo:Booster_cables.jpg|thumb|right|[4]]]
==== {{sustantivo masculino y femenino|es}} ====
{{es.sust|mf}}
;1 {{csem|mamíferos|perros}}: (''[[species:Canis lupus familiaris|Canis lupus familiaris]]'') Variedad doméstica del [[lobo]] de muchas y diversas [[raza]]s, compañero del hombre desde tiempos prehistóricos.
{{sinónimos|chucho|can|tuso}}.
{{hipónimo|perra|cachorro|quiltro|chucho|dogo|mastín|moloso|alano|terrier|sabueso|cobrador|perdiguero|lebrel|galgo|basset|perro de pastor|perro de aguas|perro faldero|perro de presa|perro policial|perro de caza|perro guardián|perro de guerra|perro camillero|perro de trineo|perro paria|perro de muestra|perro de salvamento|perro de salvamento en el mar|perro de avalancha|perro trufero|perro lobo|perro de compañía|perro de criadero|perro de seguimiento}}.
{{hiperónimo|cánido}}.
{{relacionado|jauría|canino|rehala}}.
{{ejemplo|Un ''perro'' grande, de erizada pelambre, había atravesado la casa, a todo correr, llevándose un pernil de venado.|a=Alejo Carpentier|c=libro|f=1949|isbn=8432216534|p=40-41|t=El reino de este mundo}}
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;2: {{plm|sándwich}} de [[salchicha de Viena]] en un [[pan]] [[largo]] y [[delgado]], a la medida de ésta, aderezado con [[ketchup]], [[mayonesa]], [[mostaza]] u otras [[salsa]]s.
{{ámbito|Venezuela}}
{{uso|coloquial|por extensión}}
{{sinónimos|chévere}} (El Salvador, Guatemala), [[completo]] (Chile), [[frankfurt]] (España, Uruguay), ''[[hot dog]]'', [[pancho]] (Argentina, Paraguay, Uruguay), [[perrito caliente]], [[perro caliente]] (México, Perú, Venezuela), [[shuco]] (Guatemala).
;3: {{plm|pinza}} de diversos materiales que sirve para fijar la [[ropa]] que se [[colgar|cuelga]] en un [[tendedero]].
{{ámbito|Chile}}.
{{uso|coloquial}}.
{{sinónimos|broche}} (Argentina), [[gancho]], [[perro de ropa]], [[pinza de ropa]].
;4: Por analogía con un perro{{-sub|5}}, cada una de las pinzas que se [[conectar|conectan]] a los [[polo]]s de una [[batería]] para obtener [[electricidad]].
{{ámbito|Chile}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;5: {{plm|desdichado}}, [[indigno]], muy malo.
{{uso|coloquial}}
{{sinónimo|aciago|nefasto|nota=más formal}}
;6: {{plm|persona}} malvada o [[despreciable]].
{{uso|despectivo|utcs}}.
;7: Persona vaga y holgazana.
{{uso|despectivo|utcs}}.
{{sinónimos|flojo}}.
;8: {{plm|inhábil}}.
{{uso|despectivo|utcs}}
{{ámbito|Argentina}}
{{wikisauro|inhábil}}
==== Compuestos ====
* {{l|es|Despeñaperros}}
* {{l|es|lavaperros}}
==== Locuciones ====
{{trad-arriba|Locuciones con «perro»}}
* [[perro bravo]]: perro de carácter agresivo.
* [[perro caliente]] o [[perrito caliente]]: sándwich de salchicha de Viena
* [[perro camillero]]
* [[perro de aguas]]
* [[perro de avalancha]]
* [[perro de caza]]
* [[perro de guarda]]
* [[perro de guerra]]
* [[perro de lanas]]
* [[perro de las praderas]]
* [[perro del mal]]: Perro rabioso (México)
* [[perro de muestra]]
* [[perro de pastor]]
* [[perro de presa]]
* [[perro de raza]]: El que pertenece a una raza reconocida.
* [[perro de salvamento]]: Perro adiestrado para recuperar personas de derrumbes y desastres.
* [[perro de ropa]]
* [[perro de trineo]]
* [[perro faldero]] o [[perrito faldero]]
* [[perro gozque]]
* [[perro guardián]]
* [[perro mudo]]: Mapache.
* [[perro paria]]
* [[perro policía]]: El adiestrado para ayudar a la [[policía]] en sus tareas.
* [[perro policial]]
* [[perro salchicha]] [[Dachshund]]
* [[perro salvaje]]
* [[perro trufero]]
* [[perro viejo]]
* [[a cara de perro]]
* [[a otro perro con ese hueso]]: expresión de rechazo.
* [[atar los perros con longanizas]]
* [[comer a cara de perro]]: comer con fruición y sin compartir (Bolivia)
* [[como el perro de las dos tortas]]
* [[costar más el collar que el perro]]: intentar resolver un problema de una manera que provoca más daño que beneficio
* [[de perros]]: muy desagradable
* [[echar los perros]]: amenazar o regañar a alguien; galantear (Argentina, México)
* [[estar como los perros en misa]]: estar fuera de lugar (España)
* [[estar meado de perro]]
* [[hacer perro muerto]]: irse sin pagar (Chile, Perú)
* [[llevarse como el perro y el gato]]
* [[morir como un perro]]
* [[ser el mismo perro con diferente collar]]:
* [[ser carne de perro]]: ser durable o resistente (Chile)
* [[sin padre ni madre, ni perro que le ladre]]
* [[solo como el perro]]
* [[tener más hambre que el perro de un ciego]]
* [[tiempo de perros]]
* [[tratar como perro]]
{{trad-abajo}}
{{trad-arriba|Refranes con «perro»}}
* [[a perro flaco todo son pulgas]]
* [[a quien Dios quiere bien, la perra le pare lechones]]
* [[al perro nadar y a la mujer bailar, el diablo se lo debió enseñar]]
* [[amigos verdaderos, un palo y un perro]]
* [[aunque mi suegro sea bueno, no quiero perro con cencerro]]
* [[como el perro de Olías]]
* [[como los perros de Zorita]]
* [[como perro por Carnestolendas]]
* [[con dinero baila el perro]]
* [[echa fuera el perro, que corta mi yerno]]
* [[el perro del hortelano: no come ni deja comer]]
* [[el perro ladra donde come]]
* [[El perro, mi amigo. Mi mujer, mi enemigo. El hijo, mi señor]]
* [[en cojera de perro y lágrimas de mujer, no hay que creer]]
* [[gatos y mujeres, en la casa; hombres y perros, en la plaza]]
* [[hidalgo que tiene un galgo, ya tiene algo]]
* {{l|es|ir a casa sin perro, es notable yerro}}
* {{l|es|la necesidad tiene cara de perro}}
* {{l|es|mientras más conozco a la gente, más quiero a mi perro}}
* [[no fíes en perro que cojea, ni en amor de gallega]]
* [[no te fíes de mujer que no hable, ni de perro que no ladre]]
* [[nunca más perro al molino]]
* [[perro que ladra, no muerde]]
* [[perro que mucho ladra, bien guarda]]
* [[perros y ríos, no son temibles los que hacen ruido]]
* {{l|es|por un perro que maté, mataperros me llamaron}}
* [[¿Quieres que te siga el can? Dale pan]]
* [[ser más raro que un perro verde]]
{{trad-abajo}}
==== Información adicional ====
{{derivad|aperrar|aperrear|emperrarse|perrada|perraje|perrear|perrera|perrería|perrero|perruno}}.
==== Véase también ====
{{Commons|Category:Dog}}
{{Wikipedia}}
{{Wikiquote}}
* [[perra]]
* [[lobo]]
* [[dingo]]
* [[cinofilatelia]]
* [[cinofilia]]
* [[gozque]]
* [[canil]]
* [[can Cerbero]]
==== Traducciones ====
{{trad-arriba}}
{{t|af|a1=1|t1=hond}}
{{t|agu|a1=1|t1=tx’i’}}
{{t|ain|a1=1|a2=1|a3=1|nota1=reep|nota2=seta|nota3=shita|t1=レエㇷ゚|t2=セタ|t3=シタ}}
{{t|ay|a1=1|t1=anu}}
{{t|ain|a1=1|t1=シタ}}
{{t|sh|a1=1|g1=f|t1=pas cuko kučka пас|tl1=pas}}
{{t|sq|a1=1|g1=m|t1=qen}}
{{t|de|a1=1|g1=m|t1=Hund}}
{{t|sai-all|a1=1|t1=guaza}}
{{t|hsb|a1=1|a2=2|t1=pos|t2=psyk}}
{{t|am|a1=1|a2=1|t1=ውሻ|t2=ከልብ|tl1=wəša|tl2=kälb}}
{{t|ar|a1=1|t1=كلب|tl1=kalb}}
{{t|an|a1=1|a2=1|t1=can|t2=cocho}}
{{t|hy|a1=1|t1=շուն}}
{{t|ast|a1=1|a2=1|t1=perru|t2=can}}
{{t|az|a1=1|t1=it}}
{{t|nds-de|a1=1|t1=hond}}
{{t|dsb|a1=1|t1=pjas}}
{{t|bm|a1=1|t1=wùlù}}
{{t|be|a1=1|t1=сабака}}
{{t|ml|a1=1|t1=നായ|tl1=nāya}}
{{t|my|a1=1|t1=ခွေး}}
{{t|br|a1=1|g1=m|g3=f|n2=p|t1=ki|t2=chas|t3=kiez}}
{{t|bg|t1=куче}}
{{t|bg|t1=пес}}
{{t|pcc|a1=1|t1=mal}}
{{t|cak|a1=1|t1=tzʼiʼ}}
{{t|yue|a1=1|t1=狗}}
{{t|cbs|a1=1|t1=kaman}}
{{t|ca|a1=1|g2=m|t1=gos|t2=ca}}
{{t|chr|a1=1|a2=1|t1=ꭹꮯ|t2=ꭹꮅ}}
{{t|cs|a1=1|g1=m|t1=pes}}
{{t|cap|a1=1|t1=paku}}
{{t|ko|a1=1|t1=개|tl1=gae}}
{{t|kw|a1=1|t1=ki}}
{{t|cr|a1=1|t1=ᐊᑎᒻ}}
{{t|da|a1=1|g1=m|t1=hund}}
{{t|sco|a1=1|t1=cu}}
{{t|sk|a1=1|g1=m|g2=f|t1=pes|t2=suka}}
{{t|sl|a1=1|g1=m|g2=f|t1=pes|t2=psica}}
{{t|eo|a1=1|t1=hundo}}
{{t|et|a1=1|t1=koer}}
{{t|eu|a1=1|t1=txakur|t2=etxe-txakur}}
{{t|fo|a1=1|t1=hundur}}
{{t|fi|a1=1|t1=koira}}
{{t|fr|a1=1|g1=m|t1=chien}}
{{t|fy|a1=1|t1=hûn}}
{{t|fur|a1=1|t1=cjan}}
{{t|gd|a1=1|a2=1|t1=cù|t2=madadh}}
{{t|cy|g1=m|t1=ci}}
{{t|gl|a1=1|t1=can}}
{{t|ka|a1=1|t1=ძაღლი}}
{{t|got|a1=1|g1=m|t1=𐌷𐌿𐌽𐌳𐍃|tl1=hunds}}
{{t|grc|a1=1|g1=m|t1=κύων|tl1=cyōn}}
{{t|el|a1=1|g1=m|t1=σκύλος|tl1=skilos}}
{{t|gn|a1=1|t1=jagua}}
{{t|haw|a1=1|t1=ʻilio}}
{{t|he|a1=1|g1=m|t1=כלב|tl1=kelev}}
{{t|hi|a1=1|t1=कुत्ता|tl1=kutta}}
{{t|hus|a1=1|t1=pikʼoʼ}}
{{t|hu|a1=1|t1=kutya}}
{{t|io|a1=1|t1=hundo}}
{{t|ig|t1=nkita}}
{{t|id|a1=1|t1=anjing}}
{{t|inz|a1=1|t1=huču}}
{{t|en|a1=1|a2=6|t1=dog|t2=aligator clip}}
{{t|ia|a1=1|t1=can}}
{{t|iu|a1=1|t1=qimmiq}}
{{t|ga|a1=1|g1=m|t1=madra|t2=gadhar|t3=cú}}
{{t|is|a1=1|t1=hundur}}
{{t|zza|a1=1|t1=kutık}}
{{t|it|a1=1|g1=m|t1=cane}}
{{t|zza|a1=1|t1=kutık}}
{{t|ja|a1=1|t1=犬}}
{{t|jv|a1=1|t1=asu}}
{{t|lad|a1=1|t1=pero}}
{{t|alc|a1=1|a2=1|t1=kiúrro|t2=sálxi}}
{{t|kic|a1=1|t1=anemwa}}
{{t|kuz|a1=1|t1=lockma}}
{{t|lld|a1=1|t1=cian}}
{{t|lkt|a1=1|t1=šúŋka}}
{{t|la|a1=1|g1=m|t1=canis}}
{{t|lv|a1=1|t1=suns}}
{{t|lij|a1=1|t1=can}}
{{t|lt|a1=1|g1=m|g2=m|t1=šuo|t2=šuva}}
{{t|jbo|a1=1|t1=gerku}}
{{t|lb|a1=1|g1=m|t1=Hond}}
{{t|mk|a1=1|t1=пес|tl1=pes}}
{{t|mt|a1=1|a2=1|t1=dib|t2=kelb}}
{{t|ml|a1=1|t1=നായ|tl1=nāya}}
{{t|cmn|a1=1|a2=1|t1=犬|t2=狗|tl1=quǎn|tl2=gǒu}}
{{t|ms|a1=1|t1=anjing}}
{{t|mnc|a1=1|t1=indahūn}}
{{t|gv|a1=1|a2=1|t1=coo|t2=moddey}}
{{t|mi|a1=1|t1=kurī}}
{{t|arn|a1=1|t1=trewa}}
{{t|mat|a1=1|t1=sini}}
{{t|yua|t1=peekʼ}}
{{t|maz|t1=dyoʼo}}
{{t|nan|a1=1|t1=káu}}
{{t|mit|a1=1|t1=tsi'ína}}
{{t|mn|a1=1|t1=нохой|tl1=nokhoi}}
{{t|nhn|a1=1|t1=izcuintli chichi}}
{{t|nci|a1=1|t1=itzcuintli chichi}}
{{t|azd|a1=1|t1=chichi}}
{{t|ngu|a1=1|t1=chichi}}
{{t|nch|a1=1|t1=chichi}}
{{t|nhw|a1=1|t1=chichi}}
{{t|nhe|a1=1|t1=chichi}}
{{t|azn|a1=1|t1=pelo}}
{{t|nlv|a1=1|t1=chichi}}
{{t|nhv|a1=1|t1=itskuintli}}
{{t|nv|a1=1|t1=łééchąąʼí}}
{{t|nl|a1=1|g1=m|t1=hond}}
{{t|nrm|a1=1|t1=tchian}}
{{t|nn|a1=1|t1=hund}}
{{t|nb|a1=1|t1=hund}}
{{t|oc|a1=1|t1=ca|t2=gos|t3=can}}
{{t|ote|a1=1|t1=tsat’yo}}
{{t|fa|a1=1|t1=سگ|tl1=sæg}}
{{t|pl|a1=1|g1=m|t1=pies}}
{{t|pt|a1=1|a2=1|a3=2|g1=m|g2=m|t1=cão|t2=cachorro|t3=perro}}
{{t|ine-pro|a1=1|t1=*ḱu̯ṓ}}
{{t|pue|a1=1|t1=dāshü}}
{{t|quz|a1=1|t1=allqu}}
{{t|qwh|a1=1|t1=allqu}}
{{t|quc|a1=1|t1=tzʼiʼ}}
{{t|rap|a1=1|t1=paihenga}}
{{t|rm|a1=1|t1=chaun}}
{{t|rom|a1=1|g1=m|g2=f|t1=zhukel|t2=zhukli}}
{{t|rw|a1=1|t1=imbwa}}
{{t|ro|a1=1|t1=câine}}
{{t|ru|a1=1|g1=f|g2=m|t1=собака|t2=пёс|tl1=sobaka|tl2=pòs}}
{{t|se|a1=1|t1=beana}}
{{t|sc|a1=1|t1=cani|t2=cane|t3=perru|t4=catteddu}}
{{t|sh|a1=1|t1=pas}}
{{t|scn|a1=1|t1=cani|t10=airatu|t11=mirindoni|t12=muturru|t2=cane|t3=perru|t4=catteddu|t5=calleddu|t6=calledda|t7=tetè|t8=ghjàcaru|t9=bubù}}
{{t|sv|a1=1|t1=hund}}
{{t|ty|a1=1|t1=ʻuri}}
{{t|th|a1=1|t1=สนข}}
{{t|ta|a1=1|t1=நய}}
{{t|bo|a1=1|t1=ཁྱི|tl1=khyi}}
{{t|ti|a1=1|t1=ከልቢ|tl1=kälbi}}
{{t|tpi|a1=1|t1=dok}}
{{t|tzh|a1=1|t1=ts'i'}}
{{t|tzo|a1=1|t1=ts'i'}}
{{t|tpn|a1=1|t1=îagûara}}
{{t|tr|a1=1|t1=köpek}}
{{t|uk|a1=1|t1=собака|t2=пес|tl1=sobaka|tl2=pes}}
{{t|ug|a1=1|t1=ئىت}}
{{t|vi|a1=1|t1=chó}}
{{t|yag|a1=1|a2=1|t1=jašala|t2=jašæla}}
{{t|yi|a1=1|t1=הונט|tl1=hoont}}
{{t|yo|a1=1|t1=ajá}}
{{t|zza|a1=1|t1=kutık}}
{{t|zad|a1=1|t1=bikwʼ}}
{{t|zat|a1=1|t1=bekoʼ}}
{{t|zai|a1=1|t1=biʼcuʼ}}
{{trad-abajo}}
== Referencias y notas ==
<references />
d5qa7wev2sk67akc0mxqhf9c18jnn1u
6110192
6110191
2026-04-28T02:27:33Z
Adryx9999
176354
6110192
wikitext
text/x-wiki
{{desambiguación|pero|Pero|péro|peró|Peró|però|Perõ}}
== {{lengua|es}} ==
{{swadesh|es}}
{{pron-graf|1audio1=LL-Q1321 (spa)-Rodelar-perro.wav}}
=== Etimología 1 ===
{{año de documentación|1141}}.<ref>{{CNDHE}}</ref> {{etimología|incierta}}. Coromines<ref>{{referencia|p=453|f=2008|c=libro|a=Coromines, Joan|t=Breve diccionario etimológico de la lengua castellana|l=Madrid|editorial=Gredos}}</ref> sugiere un origen expresivo en la interjección usada para llamar al animal, u onomatopéyica de su gruñido. Viejas teorías que lo relacionaban con el latín {{l+|la|petra}} o, como en la entrada del Diccionario de Autoridades de 1737, con el griego antiguo {{l+|grc|πῦρ}} (''pỹr''), carecen por entero de fundamento.
[[Archivo:GermanShep1 wb.jpg|thumb|[1]]]
[[Archivo:NCI Visuals Food Hot Dog.jpg|thumb|[2]]]
[[Archivo:Clothespin-2459e.jpg|thumb|[3]]]
[[Archivo:Booster_cables.jpg|thumb|right|[4]]]
==== {{sustantivo masculino y femenino|es}} ====
{{es.sust|mf}}
;1 {{csem|mamíferos|perros}}: (''[[species:Canis lupus familiaris|Canis lupus familiaris]]'') Variedad doméstica del [[lobo]] de muchas y diversas [[raza]]s, compañero del hombre desde tiempos prehistóricos.
{{sinónimos|chucho|can|tuso}}.
{{hipónimo|perra|cachorro|quiltro|chucho|dogo|mastín|moloso|alano|terrier|sabueso|cobrador|perdiguero|lebrel|galgo|basset|perro de pastor|perro de aguas|perro faldero|perro de presa|perro policial|perro de caza|perro guardián|perro de guerra|perro camillero|perro de trineo|perro paria|perro de muestra|perro de salvamento|perro de salvamento en el mar|perro de avalancha|perro trufero|perro lobo|perro de compañía|perro de criadero|perro de seguimiento}}.
{{hiperónimo|cánido}}.
{{relacionado|jauría|canino|rehala}}.
{{ejemplo|Un ''perro'' grande, de erizada pelambre, había atravesado la casa, a todo correr, llevándose un pernil de venado.|a=Alejo Carpentier|c=libro|f=1949|isbn=8432216534|p=40-41|t=El reino de este mundo}}
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;2: {{plm|sándwich}} de [[salchicha de Viena]] en un [[pan]] [[largo]] y [[delgado]], a la medida de ésta, aderezado con [[ketchup]], [[mayonesa]], [[mostaza]] u otras [[salsa]]s.
{{ámbito|Venezuela}}
{{uso|coloquial|por extensión}}
{{sinónimos|chévere}} (El Salvador, Guatemala), [[completo]] (Chile), [[frankfurt]] (España, Uruguay), ''[[hot dog]]'', [[pancho]] (Argentina, Paraguay, Uruguay), [[perrito caliente]], [[perro caliente]] (México, Perú, Venezuela), [[shuco]] (Guatemala).
;3: {{plm|pinza}} de diversos materiales que sirve para fijar la [[ropa]] que se [[colgar|cuelga]] en un [[tendedero]].
{{ámbito|Chile}}.
{{uso|coloquial}}.
{{sinónimos|broche}} (Argentina), [[gancho]], [[perro de ropa]], [[pinza de ropa]].
;4: Por analogía con un perro{{-sub|5}}, cada una de las pinzas que se [[conectar|conectan]] a los [[polo]]s de una [[batería]] para obtener [[electricidad]].
{{ámbito|Chile}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;5: {{plm|desdichado}}, [[indigno]], muy malo.
{{uso|coloquial}}
{{sinónimo|aciago|nefasto|nota=más formal}}
;6: {{plm|persona}} malvada o [[despreciable]].
{{uso|despectivo|utcs}}.
;7: Persona vaga y holgazana.
{{uso|despectivo|utcs}}.
{{sinónimos|flojo}}.
;8: {{plm|inhábil}}.
{{uso|despectivo|utcs}}
{{ámbito|Argentina}}
{{wikisauro|inhábil}}
==== Compuestos ====
* {{l|es|Despeñaperros}}
* {{l|es|lavaperros}}
==== Locuciones ====
{{trad-arriba|Locuciones con «perro»}}
* [[perro bravo]]: perro de carácter agresivo.
* [[perro caliente]] o [[perrito caliente]]: sándwich de salchicha de Viena
* [[perro camillero]]
* [[perro de aguas]]
* [[perro de avalancha]]
* [[perro de caza]]
* [[perro de guarda]]
* [[perro de guerra]]
* [[perro de lanas]]
* [[perro de las praderas]]
* [[perro del mal]]: Perro rabioso (México)
* [[perro de muestra]]
* [[perro de pastor]]
* [[perro de presa]]
* [[perro de raza]]: El que pertenece a una raza reconocida.
* [[perro de salvamento]]: Perro adiestrado para recuperar personas de derrumbes y desastres.
* [[perro de ropa]]
* [[perro de trineo]]
* [[perro faldero]] o [[perrito faldero]]
* [[perro gozque]]
* [[perro guardián]]
* [[perro mudo]]: Mapache.
* [[perro paria]]
* [[perro policía]]: El adiestrado para ayudar a la [[policía]] en sus tareas.
* [[perro policial]]
* [[perro salchicha]] [[Dachshund]]
* [[perro salvaje]]
* [[perro trufero]]
* [[perro viejo]]
* [[a cara de perro]]
* [[a otro perro con ese hueso]]: expresión de rechazo.
* [[atar los perros con longanizas]]
* [[comer a cara de perro]]: comer con fruición y sin compartir (Bolivia)
* [[como el perro de las dos tortas]]
* [[costar más el collar que el perro]]: intentar resolver un problema de una manera que provoca más daño que beneficio
* [[de perros]]: muy desagradable
* [[echar los perros]]: amenazar o regañar a alguien; galantear (Argentina, México)
* [[estar como los perros en misa]]: estar fuera de lugar (España)
* [[estar meado de perro]]
* [[hacer perro muerto]]: irse sin pagar (Chile, Perú)
* [[llevarse como el perro y el gato]]
* [[morir como un perro]]
* [[ser el mismo perro con diferente collar]]:
* [[ser carne de perro]]: ser durable o resistente (Chile)
* [[sin padre ni madre, ni perro que le ladre]]
* [[solo como el perro]]
* [[tener más hambre que el perro de un ciego]]
* [[tiempo de perros]]
* [[tratar como perro]]
{{trad-abajo}}
{{trad-arriba|Refranes con «perro»}}
* [[a perro flaco todo son pulgas]]
* [[a quien Dios quiere bien, la perra le pare lechones]]
* [[al perro nadar y a la mujer bailar, el diablo se lo debió enseñar]]
* [[amigos verdaderos, un palo y un perro]]
* [[aunque mi suegro sea bueno, no quiero perro con cencerro]]
* [[como el perro de Olías]]
* [[como los perros de Zorita]]
* [[como perro por Carnestolendas]]
* [[con dinero baila el perro]]
* [[echa fuera el perro, que corta mi yerno]]
* [[el perro del hortelano: no come ni deja comer]]
* [[el perro ladra donde come]]
* [[El perro, mi amigo. Mi mujer, mi enemigo. El hijo, mi señor]]
* [[en cojera de perro y lágrimas de mujer, no hay que creer]]
* [[gatos y mujeres, en la casa; hombres y perros, en la plaza]]
* [[hidalgo que tiene un galgo, ya tiene algo]]
* {{l|es|ir a casa sin perro, es notable yerro}}
* {{l|es|la necesidad tiene cara de perro}}
* {{l|es|mientras más conozco a la gente, más quiero a mi perro}}
* [[no fíes en perro que cojea, ni en amor de gallega]]
* [[no te fíes de mujer que no hable, ni de perro que no ladre]]
* [[nunca más perro al molino]]
* [[perro que ladra, no muerde]]
* [[perro que mucho ladra, bien guarda]]
* [[perros y ríos, no son temibles los que hacen ruido]]
* {{l|es|por un perro que maté, mataperros me llamaron}}
* [[¿Quieres que te siga el can? Dale pan]]
* [[ser más raro que un perro verde]]
{{trad-abajo}}
==== Información adicional ====
{{derivad|aperrar|aperrear|emperrarse|perrada|perraje|perrear|perrera|perrería|perrero|perruno}}.
==== Véase también ====
{{Commons|Category:Dog}}
{{Wikipedia}}
{{Wikiquote}}
* [[perra]]
* [[lobo]]
* [[dingo]]
* [[cinofilatelia]]
* [[cinofilia]]
* [[gozque]]
* [[canil]]
* [[can Cerbero]]
==== Traducciones ====
{{trad-arriba}}
{{t|af|a1=1|t1=hond}}
{{t|agu|a1=1|t1=tx’i’}}
{{t|ain|a1=1|a2=1|a3=1|nota1=reep|nota2=seta|nota3=shita|t1=レエㇷ゚|t2=セタ|t3=シタ}}
{{t|ay|a1=1|t1=anu}}
{{t|ain|a1=1|t1=シタ}}
{{t|sh|a1=1|g1=f|t1=pas cuko kučka пас|tl1=pas}}
{{t|sq|a1=1|g1=m|t1=qen}}
{{t|de|a1=1|g1=m|t1=Hund}}
{{t|sai-all|a1=1|t1=guaza}}
{{t|hsb|a1=1|a2=2|t1=pos|t2=psyk}}
{{t|am|a1=1|a2=1|t1=ውሻ|t2=ከልብ|tl1=wəša|tl2=kälb}}
{{t|ar|a1=1|t1=كلب|tl1=kalb}}
{{t|an|a1=1|a2=1|t1=can|t2=cocho}}
{{t|hy|a1=1|t1=շուն}}
{{t|ast|a1=1|a2=1|t1=perru|t2=can}}
{{t|az|a1=1|t1=it}}
{{t|nds-de|a1=1|t1=hond}}
{{t|dsb|a1=1|t1=pjas}}
{{t|bm|a1=1|t1=wùlù}}
{{t|be|a1=1|t1=сабака}}
{{t|ml|a1=1|t1=നായ|tl1=nāya}}
{{t|my|a1=1|t1=ခွေး}}
{{t|br|a1=1|g1=m|g3=f|n2=p|t1=ki|t2=chas|t3=kiez}}
{{t|bg|t1=куче}}
{{t|bg|t1=пес}}
{{t|pcc|a1=1|t1=mal}}
{{t|cak|a1=1|t1=tzʼiʼ}}
{{t|yue|a1=1|t1=狗}}
{{t|cbs|a1=1|t1=kaman}}
{{t|ca|a1=1|g2=m|t1=gos|t2=ca}}
{{t|chr|a1=1|a2=1|t1=ꭹꮯ|t2=ꭹꮅ}}
{{t|cs|a1=1|g1=m|t1=pes}}
{{t|cap|a1=1|t1=paku}}
{{t|ko|a1=1|t1=개|tl1=gae}}
{{t|kw|a1=1|t1=ki}}
{{t|cr|a1=1|t1=ᐊᑎᒻ}}
{{t|da|a1=1|g1=m|t1=hund}}
{{t|sco|a1=1|t1=cu}}
{{t|sk|a1=1|g1=m|g2=f|t1=pes|t2=suka}}
{{t|sl|a1=1|g1=m|g2=f|t1=pes|t2=psica}}
{{t|eo|a1=1|t1=hundo}}
{{t|et|a1=1|t1=koer}}
{{t|eu|a1=1|t1=txakur|t2=etxe-txakur}}
{{t|fo|a1=1|t1=hundur}}
{{t|fi|a1=1|t1=koira}}
{{t|fr|a1=1|g1=m|t1=chien}}
{{t|fy|a1=1|t1=hûn}}
{{t|fur|a1=1|t1=cjan}}
{{t|gd|a1=1|a2=1|t1=cù|t2=madadh}}
{{t|cy|g1=m|t1=ci}}
{{t|gl|a1=1|t1=can}}
{{t|ka|a1=1|t1=ძაღლი}}
{{t|got|a1=1|g1=m|t1=𐌷𐌿𐌽𐌳𐍃|tl1=hunds}}
{{t|grc|a1=1|g1=m|t1=κύων|tl1=cyōn}}
{{t|el|a1=1|g1=m|t1=σκύλος|tl1=skilos}}
{{t|gn|a1=1|t1=jagua}}
{{t|haw|a1=1|t1=ʻilio}}
{{t|he|a1=1|g1=m|t1=כלב|tl1=kelev}}
{{t|hi|a1=1|t1=कुत्ता|tl1=kutta}}
{{t|hus|a1=1|t1=pikʼoʼ}}
{{t|hu|a1=1|t1=kutya}}
{{t|io|a1=1|t1=hundo}}
{{t|ig|t1=nkita}}
{{t|id|a1=1|t1=anjing}}
{{t|inz|a1=1|t1=huču}}
{{t|en|a1=1|a2=6|t1=dog|t2=aligator clip}}
{{t|ia|a1=1|t1=can}}
{{t|iu|a1=1|t1=qimmiq}}
{{t|ga|a1=1|g1=m|t1=madra|t2=gadhar|t3=cú}}
{{t|is|a1=1|t1=hundur}}
{{t|zza|a1=1|t1=kutık}}
{{t|it|a1=1|g1=m|t1=cane}}
{{t|zza|a1=1|t1=kutık}}
{{t|ja|a1=1|t1=犬}}
{{t|jv|a1=1|t1=asu}}
{{t|lad|a1=1|t1=pero}}
{{t|alc|a1=1|a2=1|t1=kiúrro|t2=sálxi}}
{{t|kic|a1=1|t1=anemwa}}
{{t|kuz|a1=1|t1=lockma}}
{{t|lld|a1=1|t1=cian}}
{{t|lkt|a1=1|t1=šúŋka}}
{{t|la|a1=1|g1=m|t1=canis}}
{{t|lv|a1=1|t1=suns}}
{{t|lij|a1=1|t1=can}}
{{t|lt|a1=1|g1=m|g2=m|t1=šuo|t2=šuva}}
{{t|jbo|a1=1|t1=gerku}}
{{t|lb|a1=1|g1=m|t1=Hond}}
{{t|mk|a1=1|t1=пес|tl1=pes}}
{{t|mt|a1=1|a2=1|t1=dib|t2=kelb}}
{{t|ml|a1=1|t1=നായ|tl1=nāya}}
{{t|cmn|a1=1|a2=1|t1=犬|t2=狗|tl1=quǎn|tl2=gǒu}}
{{t|ms|a1=1|t1=anjing}}
{{t|mnc|a1=1|t1=indahūn}}
{{t|gv|a1=1|a2=1|t1=coo|t2=moddey}}
{{t|mi|a1=1|t1=kurī}}
{{t|arn|a1=1|t1=trewa}}
{{t|mat|a1=1|t1=sini}}
{{t|yua|t1=peekʼ}}
{{t|maz|t1=dyoʼo}}
{{t|nan|a1=1|t1=káu}}
{{t|mit|a1=1|t1=tsi'ína}}
{{t|mn|a1=1|t1=нохой|tl1=nokhoi}}
{{t|nhn|a1=1|t1=izcuintli chichi}}
{{t|nci|a1=1|t1=itzcuintli chichi}}
{{t|azd|a1=1|t1=chichi}}
{{t|ngu|a1=1|t1=chichi}}
{{t|nch|a1=1|t1=chichi}}
{{t|nhw|a1=1|t1=chichi}}
{{t|nhe|a1=1|t1=chichi}}
{{t|azn|a1=1|t1=pelo}}
{{t|nlv|a1=1|t1=chichi}}
{{t|nhv|a1=1|t1=itskuintli}}
{{t|nv|a1=1|t1=łééchąąʼí}}
{{t|nl|a1=1|g1=m|t1=hond}}
{{t|nrm|a1=1|t1=tchian}}
{{t|nn|a1=1|t1=hund}}
{{t|nb|a1=1|t1=hund}}
{{t|oc|a1=1|t1=ca|t2=gos|t3=can}}
{{t|ote|a1=1|t1=tsat’yo}}
{{t|fa|a1=1|t1=سگ|tl1=sæg}}
{{t|pl|a1=1|g1=m|t1=pies}}
{{t|pt|a1=1|a2=1|a3=2|g1=m|g2=m|t1=cão|t2=cachorro|t3=perro}}
{{t|ine-pro|a1=1|t1=*ḱu̯ṓ}}
{{t|pue|a1=1|t1=dāshü}}
{{t|quz|a1=1|t1=allqu}}
{{t|qwh|a1=1|t1=allqu}}
{{t|quc|a1=1|t1=tzʼiʼ}}
{{t|rap|a1=1|t1=paihenga}}
{{t|rm|a1=1|t1=chaun}}
{{t|rom|a1=1|g1=m|g2=f|t1=zhukel|t2=zhukli}}
{{t|rw|a1=1|t1=imbwa}}
{{t|ro|a1=1|t1=câine}}
{{t|ru|a1=1|g1=f|g2=m|t1=собака|t2=пёс|tl1=sobaka|tl2=pòs}}
{{t|se|a1=1|t1=beana}}
{{t|sc|a1=1|t1=cani|t2=cane|t3=perru|t4=catteddu}}
{{t|sh|a1=1|t1=pas}}
{{t|scn|a1=1|t1=cani|t10=airatu|t11=mirindoni|t12=muturru|t2=cane|t3=perru|t4=catteddu|t5=calleddu|t6=calledda|t7=tetè|t8=ghjàcaru|t9=bubù}}
{{t|sv|a1=1|t1=hund}}
{{t|ty|a1=1|t1=ʻuri}}
{{t|th|a1=1|t1=สนข}}
{{t|ta|a1=1|t1=நய}}
{{t|bo|a1=1|t1=ཁྱི|tl1=khyi}}
{{t|ti|a1=1|t1=ከልቢ|tl1=kälbi}}
{{t|tpi|a1=1|t1=dok}}
{{t|tzh|a1=1|t1=ts'i'}}
{{t|tzo|a1=1|t1=ts'i'}}
{{t|tpn|a1=1|t1=îagûara}}
{{t|tr|a1=1|t1=köpek}}
{{t|uk|a1=1|t1=собака|t2=пес|tl1=sobaka|tl2=pes}}
{{t|ug|a1=1|t1=ئىت}}
{{t|vi|a1=1|t1=chó}}
{{t|yag|a1=1|a2=1|t1=jašala|t2=jašæla}}
{{t|yi|a1=1|t1=הונט|tl1=hoont}}
{{t|yo|a1=1|t1=ajá}}
{{t|zza|a1=1|t1=kutık}}
{{t|zad|a1=1|t1=bikwʼ}}
{{t|zat|a1=1|t1=bekoʼ}}
{{t|zai|a1=1|t1=biʼcuʼ}}
{{trad-abajo}}
== Referencias y notas ==
<references />
94munsnaankrvo60jtu32pt8ppj98we
6110193
6110192
2026-04-28T02:44:43Z
Tmagc
158167
Revertidos los cambios de [[Special:Contributions/Adryx9999|Adryx9999]] ([[User talk:Adryx9999|disc.]]) a la última edición de [[User:TMCbot|TMCbot]]
5925263
wikitext
text/x-wiki
{{desambiguación|pero|Pero|péro|peró|Peró|però|Perõ}}
== {{lengua|es}} ==
{{swadesh|es}}
{{pron-graf|1audio1=LL-Q1321 (spa)-Rodelar-perro.wav}}
=== Etimología 1 ===
{{año de documentación|1141}}.<ref>{{CNDHE}}</ref> {{etimología|incierta}}. La completa carencia de cognados en otras lenguas, así como su tardía aparición hacia mediados del siglo XII, hacen improbable un étimo prerromano; Joan Corominas apunta como más plausible un origen expresivo en la interjección usada para llamar al animal, u onomatopéyica de su gruñido. Viejas teorías que lo relacionaban con el latín {{l+|la|petra}} o, como en la entrada del Diccionario de Autoridades de 1737, con el griego antiguo {{l+|grc|πῦρ}} (''pỹr''), carecen por entero de fundamento. Más verosímil es la teoría de que la palabra es de origen gitano, como la palabra inglesa ''pal'' que significa ''amigo''. La primera aparición de la palabra escrita no es anterior a la primera migración de los gitanos a España.{{cita requerida}}
[[Archivo:GermanShep1 wb.jpg|thumb|[1]]]
[[Archivo:NCI Visuals Food Hot Dog.jpg|thumb|[2]]]
[[Archivo:Clothespin-2459e.jpg|thumb|[3]]]
[[Archivo:Booster_cables.jpg|thumb|right|[4]]]
==== {{sustantivo masculino y femenino|es}} ====
{{es.sust|mf}}
;1 {{csem|mamíferos|perros}}: (''[[species:Canis lupus familiaris|Canis lupus familiaris]]'') Variedad doméstica del [[lobo]] de muchas y diversas [[raza]]s, compañero del hombre desde tiempos prehistóricos.
{{sinónimos|chucho|can|tuso}}.
{{hipónimo|perra|cachorro|quiltro|chucho|dogo|mastín|moloso|alano|terrier|sabueso|cobrador|perdiguero|lebrel|galgo|basset|perro de pastor|perro de aguas|perro faldero|perro de presa|perro policial|perro de caza|perro guardián|perro de guerra|perro camillero|perro de trineo|perro paria|perro de muestra|perro de salvamento|perro de salvamento en el mar|perro de avalancha|perro trufero|perro lobo|perro de compañía|perro de criadero|perro de seguimiento}}.
{{hiperónimo|cánido}}.
{{relacionado|jauría|canino|rehala}}.
{{ejemplo|Un ''perro'' grande, de erizada pelambre, había atravesado la casa, a todo correr, llevándose un pernil de venado.|a=Alejo Carpentier|c=libro|f=1949|isbn=8432216534|p=40-41|t=El reino de este mundo}}
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;2: {{plm|sándwich}} de [[salchicha de Viena]] en un [[pan]] [[largo]] y [[delgado]], a la medida de ésta, aderezado con [[ketchup]], [[mayonesa]], [[mostaza]] u otras [[salsa]]s.
{{ámbito|Venezuela}}
{{uso|coloquial|por extensión}}
{{sinónimos|chévere}} (El Salvador, Guatemala), [[completo]] (Chile), [[frankfurt]] (España, Uruguay), ''[[hot dog]]'', [[pancho]] (Argentina, Paraguay, Uruguay), [[perrito caliente]], [[perro caliente]] (México, Perú, Venezuela), [[shuco]] (Guatemala).
;3: {{plm|pinza}} de diversos materiales que sirve para fijar la [[ropa]] que se [[colgar|cuelga]] en un [[tendedero]].
{{ámbito|Chile}}.
{{uso|coloquial}}.
{{sinónimos|broche}} (Argentina), [[gancho]], [[perro de ropa]], [[pinza de ropa]].
;4: Por analogía con un perro{{-sub|5}}, cada una de las pinzas que se [[conectar|conectan]] a los [[polo]]s de una [[batería]] para obtener [[electricidad]].
{{ámbito|Chile}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;5: {{plm|desdichado}}, [[indigno]], muy malo.
{{uso|coloquial}}
{{sinónimo|aciago|nefasto|nota=más formal}}
;6: {{plm|persona}} malvada o [[despreciable]].
{{uso|despectivo|utcs}}.
;7: Persona vaga y holgazana.
{{uso|despectivo|utcs}}.
{{sinónimos|flojo}}.
;8: {{plm|inhábil}}.
{{uso|despectivo|utcs}}
{{ámbito|Argentina}}
{{wikisauro|inhábil}}
==== Compuestos ====
* {{l|es|Despeñaperros}}
* {{l|es|lavaperros}}
==== Locuciones ====
{{trad-arriba|Locuciones con «perro»}}
* [[perro bravo]]: perro de carácter agresivo.
* [[perro caliente]] o [[perrito caliente]]: sándwich de salchicha de Viena
* [[perro camillero]]
* [[perro de aguas]]
* [[perro de avalancha]]
* [[perro de caza]]
* [[perro de guarda]]
* [[perro de guerra]]
* [[perro de lanas]]
* [[perro de las praderas]]
* [[perro del mal]]: Perro rabioso (México)
* [[perro de muestra]]
* [[perro de pastor]]
* [[perro de presa]]
* [[perro de raza]]: El que pertenece a una raza reconocida.
* [[perro de salvamento]]: Perro adiestrado para recuperar personas de derrumbes y desastres.
* [[perro de ropa]]
* [[perro de trineo]]
* [[perro faldero]] o [[perrito faldero]]
* [[perro gozque]]
* [[perro guardián]]
* [[perro mudo]]: Mapache.
* [[perro paria]]
* [[perro policía]]: El adiestrado para ayudar a la [[policía]] en sus tareas.
* [[perro policial]]
* [[perro salchicha]] [[Dachshund]]
* [[perro salvaje]]
* [[perro trufero]]
* [[perro viejo]]
* [[a cara de perro]]
* [[a otro perro con ese hueso]]: expresión de rechazo.
* [[atar los perros con longanizas]]
* [[comer a cara de perro]]: comer con fruición y sin compartir (Bolivia)
* [[como el perro de las dos tortas]]
* [[costar más el collar que el perro]]: intentar resolver un problema de una manera que provoca más daño que beneficio
* [[de perros]]: muy desagradable
* [[echar los perros]]: amenazar o regañar a alguien; galantear (Argentina, México)
* [[estar como los perros en misa]]: estar fuera de lugar (España)
* [[estar meado de perro]]
* [[hacer perro muerto]]: irse sin pagar (Chile, Perú)
* [[llevarse como el perro y el gato]]
* [[morir como un perro]]
* [[ser el mismo perro con diferente collar]]:
* [[ser carne de perro]]: ser durable o resistente (Chile)
* [[sin padre ni madre, ni perro que le ladre]]
* [[solo como el perro]]
* [[tener más hambre que el perro de un ciego]]
* [[tiempo de perros]]
* [[tratar como perro]]
{{trad-abajo}}
{{trad-arriba|Refranes con «perro»}}
* [[a perro flaco todo son pulgas]]
* [[a quien Dios quiere bien, la perra le pare lechones]]
* [[al perro nadar y a la mujer bailar, el diablo se lo debió enseñar]]
* [[amigos verdaderos, un palo y un perro]]
* [[aunque mi suegro sea bueno, no quiero perro con cencerro]]
* [[como el perro de Olías]]
* [[como los perros de Zorita]]
* [[como perro por Carnestolendas]]
* [[con dinero baila el perro]]
* [[echa fuera el perro, que corta mi yerno]]
* [[el perro del hortelano: no come ni deja comer]]
* [[el perro ladra donde come]]
* [[El perro, mi amigo. Mi mujer, mi enemigo. El hijo, mi señor]]
* [[en cojera de perro y lágrimas de mujer, no hay que creer]]
* [[gatos y mujeres, en la casa; hombres y perros, en la plaza]]
* [[hidalgo que tiene un galgo, ya tiene algo]]
* {{l|es|ir a casa sin perro, es notable yerro}}
* {{l|es|la necesidad tiene cara de perro}}
* {{l|es|mientras más conozco a la gente, más quiero a mi perro}}
* [[no fíes en perro que cojea, ni en amor de gallega]]
* [[no te fíes de mujer que no hable, ni de perro que no ladre]]
* [[nunca más perro al molino]]
* [[perro que ladra, no muerde]]
* [[perro que mucho ladra, bien guarda]]
* [[perros y ríos, no son temibles los que hacen ruido]]
* {{l|es|por un perro que maté, mataperros me llamaron}}
* [[¿Quieres que te siga el can? Dale pan]]
* [[ser más raro que un perro verde]]
{{trad-abajo}}
==== Información adicional ====
{{derivad|aperrar|aperrear|emperrarse|perrada|perraje|perrear|perrera|perrería|perrero|perruno}}.
==== Véase también ====
{{Commons|Category:Dog}}
{{Wikipedia}}
{{Wikiquote}}
* [[perra]]
* [[lobo]]
* [[dingo]]
* [[cinofilatelia]]
* [[cinofilia]]
* [[gozque]]
* [[canil]]
* [[can Cerbero]]
==== Traducciones ====
{{trad-arriba}}
{{t|af|a1=1|t1=hond}}
{{t|agu|a1=1|t1=tx’i’}}
{{t|ain|a1=1|a2=1|a3=1|nota1=reep|nota2=seta|nota3=shita|t1=レエㇷ゚|t2=セタ|t3=シタ}}
{{t|ay|a1=1|t1=anu}}
{{t|ain|a1=1|t1=シタ}}
{{t|sh|a1=1|g1=f|t1=pas cuko kučka пас|tl1=pas}}
{{t|sq|a1=1|g1=m|t1=qen}}
{{t|de|a1=1|g1=m|t1=Hund}}
{{t|sai-all|a1=1|t1=guaza}}
{{t|hsb|a1=1|a2=2|t1=pos|t2=psyk}}
{{t|am|a1=1|a2=1|t1=ውሻ|t2=ከልብ|tl1=wəša|tl2=kälb}}
{{t|ar|a1=1|t1=كلب|tl1=kalb}}
{{t|an|a1=1|a2=1|t1=can|t2=cocho}}
{{t|hy|a1=1|t1=շուն}}
{{t|ast|a1=1|a2=1|t1=perru|t2=can}}
{{t|az|a1=1|t1=it}}
{{t|nds-de|a1=1|t1=hond}}
{{t|dsb|a1=1|t1=pjas}}
{{t|bm|a1=1|t1=wùlù}}
{{t|be|a1=1|t1=сабака}}
{{t|ml|a1=1|t1=നായ|tl1=nāya}}
{{t|my|a1=1|t1=ခွေး}}
{{t|br|a1=1|g1=m|g3=f|n2=p|t1=ki|t2=chas|t3=kiez}}
{{t|bg|t1=куче}}
{{t|bg|t1=пес}}
{{t|pcc|a1=1|t1=mal}}
{{t|cak|a1=1|t1=tzʼiʼ}}
{{t|yue|a1=1|t1=狗}}
{{t|cbs|a1=1|t1=kaman}}
{{t|ca|a1=1|g2=m|t1=gos|t2=ca}}
{{t|chr|a1=1|a2=1|t1=ꭹꮯ|t2=ꭹꮅ}}
{{t|cs|a1=1|g1=m|t1=pes}}
{{t|cap|a1=1|t1=paku}}
{{t|ko|a1=1|t1=개|tl1=gae}}
{{t|kw|a1=1|t1=ki}}
{{t|cr|a1=1|t1=ᐊᑎᒻ}}
{{t|da|a1=1|g1=m|t1=hund}}
{{t|sco|a1=1|t1=cu}}
{{t|sk|a1=1|g1=m|g2=f|t1=pes|t2=suka}}
{{t|sl|a1=1|g1=m|g2=f|t1=pes|t2=psica}}
{{t|eo|a1=1|t1=hundo}}
{{t|et|a1=1|t1=koer}}
{{t|eu|a1=1|t1=txakur|t2=etxe-txakur}}
{{t|fo|a1=1|t1=hundur}}
{{t|fi|a1=1|t1=koira}}
{{t|fr|a1=1|g1=m|t1=chien}}
{{t|fy|a1=1|t1=hûn}}
{{t|fur|a1=1|t1=cjan}}
{{t|gd|a1=1|a2=1|t1=cù|t2=madadh}}
{{t|cy|g1=m|t1=ci}}
{{t|gl|a1=1|t1=can}}
{{t|ka|a1=1|t1=ძაღლი}}
{{t|got|a1=1|g1=m|t1=𐌷𐌿𐌽𐌳𐍃|tl1=hunds}}
{{t|grc|a1=1|g1=m|t1=κύων|tl1=cyōn}}
{{t|el|a1=1|g1=m|t1=σκύλος|tl1=skilos}}
{{t|gn|a1=1|t1=jagua}}
{{t|haw|a1=1|t1=ʻilio}}
{{t|he|a1=1|g1=m|t1=כלב|tl1=kelev}}
{{t|hi|a1=1|t1=कुत्ता|tl1=kutta}}
{{t|hus|a1=1|t1=pikʼoʼ}}
{{t|hu|a1=1|t1=kutya}}
{{t|io|a1=1|t1=hundo}}
{{t|ig|t1=nkita}}
{{t|id|a1=1|t1=anjing}}
{{t|inz|a1=1|t1=huču}}
{{t|en|a1=1|a2=6|t1=dog|t2=aligator clip}}
{{t|ia|a1=1|t1=can}}
{{t|iu|a1=1|t1=qimmiq}}
{{t|ga|a1=1|g1=m|t1=madra|t2=gadhar|t3=cú}}
{{t|is|a1=1|t1=hundur}}
{{t|zza|a1=1|t1=kutık}}
{{t|it|a1=1|g1=m|t1=cane}}
{{t|zza|a1=1|t1=kutık}}
{{t|ja|a1=1|t1=犬}}
{{t|jv|a1=1|t1=asu}}
{{t|lad|a1=1|t1=pero}}
{{t|alc|a1=1|a2=1|t1=kiúrro|t2=sálxi}}
{{t|kic|a1=1|t1=anemwa}}
{{t|kuz|a1=1|t1=lockma}}
{{t|lld|a1=1|t1=cian}}
{{t|lkt|a1=1|t1=šúŋka}}
{{t|la|a1=1|g1=m|t1=canis}}
{{t|lv|a1=1|t1=suns}}
{{t|lij|a1=1|t1=can}}
{{t|lt|a1=1|g1=m|g2=m|t1=šuo|t2=šuva}}
{{t|jbo|a1=1|t1=gerku}}
{{t|lb|a1=1|g1=m|t1=Hond}}
{{t|mk|a1=1|t1=пес|tl1=pes}}
{{t|mt|a1=1|a2=1|t1=dib|t2=kelb}}
{{t|ml|a1=1|t1=നായ|tl1=nāya}}
{{t|cmn|a1=1|a2=1|t1=犬|t2=狗|tl1=quǎn|tl2=gǒu}}
{{t|ms|a1=1|t1=anjing}}
{{t|mnc|a1=1|t1=indahūn}}
{{t|gv|a1=1|a2=1|t1=coo|t2=moddey}}
{{t|mi|a1=1|t1=kurī}}
{{t|arn|a1=1|t1=trewa}}
{{t|mat|a1=1|t1=sini}}
{{t|yua|t1=peekʼ}}
{{t|maz|t1=dyoʼo}}
{{t|nan|a1=1|t1=káu}}
{{t|mit|a1=1|t1=tsi'ína}}
{{t|mn|a1=1|t1=нохой|tl1=nokhoi}}
{{t|nhn|a1=1|t1=izcuintli chichi}}
{{t|nci|a1=1|t1=itzcuintli chichi}}
{{t|azd|a1=1|t1=chichi}}
{{t|ngu|a1=1|t1=chichi}}
{{t|nch|a1=1|t1=chichi}}
{{t|nhw|a1=1|t1=chichi}}
{{t|nhe|a1=1|t1=chichi}}
{{t|azn|a1=1|t1=pelo}}
{{t|nlv|a1=1|t1=chichi}}
{{t|nhv|a1=1|t1=itskuintli}}
{{t|nv|a1=1|t1=łééchąąʼí}}
{{t|nl|a1=1|g1=m|t1=hond}}
{{t|nrm|a1=1|t1=tchian}}
{{t|nn|a1=1|t1=hund}}
{{t|nb|a1=1|t1=hund}}
{{t|oc|a1=1|t1=ca|t2=gos|t3=can}}
{{t|ote|a1=1|t1=tsat’yo}}
{{t|fa|a1=1|t1=سگ|tl1=sæg}}
{{t|pl|a1=1|g1=m|t1=pies}}
{{t|pt|a1=1|a2=1|a3=2|g1=m|g2=m|t1=cão|t2=cachorro|t3=perro}}
{{t|ine-pro|a1=1|t1=*ḱu̯ṓ}}
{{t|pue|a1=1|t1=dāshü}}
{{t|quz|a1=1|t1=allqu}}
{{t|qwh|a1=1|t1=allqu}}
{{t|quc|a1=1|t1=tzʼiʼ}}
{{t|rap|a1=1|t1=paihenga}}
{{t|rm|a1=1|t1=chaun}}
{{t|rom|a1=1|g1=m|g2=f|t1=zhukel|t2=zhukli}}
{{t|rw|a1=1|t1=imbwa}}
{{t|ro|a1=1|t1=câine}}
{{t|ru|a1=1|g1=f|g2=m|t1=собака|t2=пёс|tl1=sobaka|tl2=pòs}}
{{t|se|a1=1|t1=beana}}
{{t|sc|a1=1|t1=cani|t2=cane|t3=perru|t4=catteddu}}
{{t|sh|a1=1|t1=pas}}
{{t|scn|a1=1|t1=cani|t10=airatu|t11=mirindoni|t12=muturru|t2=cane|t3=perru|t4=catteddu|t5=calleddu|t6=calledda|t7=tetè|t8=ghjàcaru|t9=bubù}}
{{t|sv|a1=1|t1=hund}}
{{t|ty|a1=1|t1=ʻuri}}
{{t|th|a1=1|t1=สนข}}
{{t|ta|a1=1|t1=நய}}
{{t|bo|a1=1|t1=ཁྱི|tl1=khyi}}
{{t|ti|a1=1|t1=ከልቢ|tl1=kälbi}}
{{t|tpi|a1=1|t1=dok}}
{{t|tzh|a1=1|t1=ts'i'}}
{{t|tzo|a1=1|t1=ts'i'}}
{{t|tpn|a1=1|t1=îagûara}}
{{t|tr|a1=1|t1=köpek}}
{{t|uk|a1=1|t1=собака|t2=пес|tl1=sobaka|tl2=pes}}
{{t|ug|a1=1|t1=ئىت}}
{{t|vi|a1=1|t1=chó}}
{{t|yag|a1=1|a2=1|t1=jašala|t2=jašæla}}
{{t|yi|a1=1|t1=הונט|tl1=hoont}}
{{t|yo|a1=1|t1=ajá}}
{{t|zza|a1=1|t1=kutık}}
{{t|zad|a1=1|t1=bikwʼ}}
{{t|zat|a1=1|t1=bekoʼ}}
{{t|zai|a1=1|t1=biʼcuʼ}}
{{trad-abajo}}
== Referencias y notas ==
<references />
cxikg6do14w7uan451bo7z672kzugbk
amargo
0
11193
6110114
5945723
2026-04-27T18:29:29Z
Raos10
93688
Acepción 6 sinónimo amarguillo
6110114
wikitext
text/x-wiki
{{desambiguación|amargó}}
== {{lengua|es}} ==
{{pron-graf|audio=LL-Q1321 (spa)-AdrianAbdulBaha-amargo.wav|aunota=Colombia}}
=== Etimología ===
{{año de documentación|1062}}.<ref>{{referencia|a=[[w:Joan Corominas|Joan Corominas]]|t=Breve diccionario etimológico de la lengua castellana|f=1973|editorial=Madrid: Gredos|c=libro}}</ref> {{etimología|la|amarus}}, y este del protoindoeuropeo {{l+|ine-pro|*h₂em-ro-}}, de la raíz {{l+|ine-pro|*h₂em-}}, "[[crudo]]"<ref>{{Mallory}}</ref>. Compárese el catalán {{l+|ca|amarg}}, el francés {{l+|fr|amer}}, el italiano {{l+|it|amaro}} o el rumano {{l+|ro|amaru}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;1: Que muestra uno de los [[sabor]]es [[elemental]]es, propio de los [[alcaloide]]s y en general [[desagradable]], producido por la [[proteína]] [[gustducina]].
;2: Figurativamente, que provoca [[desagrado]], [[tristeza]] o [[aflicción]].
;3: Dicho de una persona, que provoca una [[reacción]] tal en su [[trato]].
{{sinónimo|acre|agrio|mordaz}}
;4: Que manifiesta una reacción tal.
{{sinónimo|afligido|alicaído|triste}}
;5: Por extensión, que no tiene [[valor]] para [[enfrentar|enfrentarse]] a las [[dificultad|dificultades]] o para [[defender]] sus ideas.
{{ámbito|Argentina}}
{{uso|coloquial}}
{{sinónimo|pusilánime}}
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;6: {{plm|dulce}} seco compuesto con almendras amargas{{-sub|1}}.<ref name='dle1925'>{{DLE1925}}</ref>
{{sinónimo|amarguillo}}
;7: En especial, [[licor]] [[medicinal]] de sabor amargo{{-sub|1}}, a base de una [[decocción]] de [[hierba]]s maceradas.
{{sinónimo|bíter}}
;8: [[mate|Mate]] bebido sin otro sabor que el de la [[yerba mate]], de pronunciado sabor amargo{{-sub|1}}.
{{ámbito|Río de la Plata}}
{{sinónimo|cimarrón}}
==== Locuciones ====
{{trad-arriba|Locuciones con «amargo»}}
* [[amargo de Angostura]]
* [[amargo serrano]]
* [[almendra amarga]]
* [[almendro amargo]]
* [[caña amarga]]
* [[cedro amargo]]
* [[cohombrillo amargo]]
* [[escoba amarga]]
* [[escobilla amarga]]
* [[lechera amarga]]
* [[mate amargo]]
{{trad-abajo}}
==== Véase también ====
{{W}}
* [[amargado]]
* [[amargar]]
* [[amargura]]
==== Traducciones ====
{{trad-arriba}}
{{t|de|a1=1|t1=bitter}}
{{t|ast|a1=1|t1=amargu}}
{{t|bg|a1=1|t1=горчив}}
{{t|ca|a1=1|t1=amarg}}
{{t|da|a1=1|t1=bitter}}
{{t|sk|a1=1|t1=horký}}
{{t|fi|a1=1|t1=kitkerä}}
{{t|fi|a1=1|t1=karvas}}
{{t|fr|a1=1|t1=amer}}
{{t|gl|a1=1|t1=amargo}}
{{t|gn|a1=1|t1=ro}}
{{t|io|a1=1|t1=bitra}}
{{t|en|a1=1–4, 7|t1=bitter}}
{{t|it|a1=1|t1=amaro}}
{{t|la|a1=1|t1=amarus}}
{{t|nl|a1=1|t1=bitter}}
{{t|nb|a1=1|t1=bitter}}
{{t|oc|t1=amar}}
{{t|pap|a1=1|t1=marga}}
{{t|pl|a1=1|t1=gorzki}}
{{t|pt|a1=1|t1=amargo}}
{{t|ro|a1=1|t1=amar}}
{{t|ru|a1=1|t1=горький}}
{{t|scn|a1=1|t1=amaru}}
{{t|sc|a1=1|t1=ràntzigu}}
{{t|sv|a1=1|t1=bitter}}
{{trad-abajo}}
=== Forma flexiva ===
==== Forma verbal ====
;1: {{forma verbo|amargar|p=1s|t=presente|m=indicativo}}.
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Etimología ===
{{etimología|la|amarus|leng=gl}}, y este del protoindoeuropeo {{l+|ine-pro|*h₂em-ro-}}, de la raíz {{l+|ine-pro|*h₂em-}}, "[[crudo]]".
=== {{adjetivo|gl}} ===
{{gl.adj}}
;1: {{plm}}.
== {{lengua|pt}} ==
{{pron-graf|leng=pt}}
=== Etimología ===
{{etimología|la|amarus|leng=pt}}, y este del protoindoeuropeo {{l+|ine-pro|*h₂em-ro-}}, de la raíz {{l+|ine-pro|*h₂em-}}, "[[crudo]]".
=== {{adjetivo|pt}} ===
{{pt.adj}}
;1: {{plm}}.
== Referencias y notas ==
<references />
b6mn3hwogezsdcc7rwc1e3ocych4kw5
6110159
6110114
2026-04-27T22:05:59Z
Raos10
93688
variantes
6110159
wikitext
text/x-wiki
{{desambiguación|amargó}}
== {{lengua|es}} ==
{{pron-graf|audio=LL-Q1321 (spa)-AdrianAbdulBaha-amargo.wav|aunota=Colombia|v=amargoso|v2=amarroso|v3=agarroso}}
=== Etimología ===
{{año de documentación|1062}}.<ref>{{referencia|a=[[w:Joan Corominas|Joan Corominas]]|t=Breve diccionario etimológico de la lengua castellana|f=1973|editorial=Madrid: Gredos|c=libro}}</ref> {{etimología|la|amarus}}, y este del protoindoeuropeo {{l+|ine-pro|*h₂em-ro-}}, de la raíz {{l+|ine-pro|*h₂em-}}, "[[crudo]]"<ref>{{Mallory}}</ref>. Compárese el catalán {{l+|ca|amarg}}, el francés {{l+|fr|amer}}, el italiano {{l+|it|amaro}} o el rumano {{l+|ro|amaru}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;1: Que muestra uno de los [[sabor]]es [[elemental]]es, propio de los [[alcaloide]]s y en general [[desagradable]], producido por la [[proteína]] [[gustducina]].
;2: Figurativamente, que provoca [[desagrado]], [[tristeza]] o [[aflicción]].
;3: Dicho de una persona, que provoca una [[reacción]] tal en su [[trato]].
{{sinónimo|acre|agrio|mordaz}}
;4: Que manifiesta una reacción tal.
{{sinónimo|afligido|alicaído|triste}}
;5: Por extensión, que no tiene [[valor]] para [[enfrentar|enfrentarse]] a las [[dificultad|dificultades]] o para [[defender]] sus ideas.
{{ámbito|Argentina}}
{{uso|coloquial}}
{{sinónimo|pusilánime}}
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;6: {{plm|dulce}} seco compuesto con almendras amargas{{-sub|1}}.<ref name='dle1925'>{{DLE1925}}</ref>
{{sinónimo|amarguillo}}
;7: En especial, [[licor]] [[medicinal]] de sabor amargo{{-sub|1}}, a base de una [[decocción]] de [[hierba]]s maceradas.
{{sinónimo|bíter}}
;8: [[mate|Mate]] bebido sin otro sabor que el de la [[yerba mate]], de pronunciado sabor amargo{{-sub|1}}.
{{ámbito|Río de la Plata}}
{{sinónimo|cimarrón}}
==== Locuciones ====
{{trad-arriba|Locuciones con «amargo»}}
* [[amargo de Angostura]]
* [[amargo serrano]]
* [[almendra amarga]]
* [[almendro amargo]]
* [[caña amarga]]
* [[cedro amargo]]
* [[cohombrillo amargo]]
* [[escoba amarga]]
* [[escobilla amarga]]
* [[lechera amarga]]
* [[mate amargo]]
{{trad-abajo}}
==== Véase también ====
{{W}}
* [[amargado]]
* [[amargar]]
* [[amargura]]
==== Traducciones ====
{{trad-arriba}}
{{t|de|a1=1|t1=bitter}}
{{t|ast|a1=1|t1=amargu}}
{{t|bg|a1=1|t1=горчив}}
{{t|ca|a1=1|t1=amarg}}
{{t|da|a1=1|t1=bitter}}
{{t|sk|a1=1|t1=horký}}
{{t|fi|a1=1|t1=kitkerä}}
{{t|fi|a1=1|t1=karvas}}
{{t|fr|a1=1|t1=amer}}
{{t|gl|a1=1|t1=amargo}}
{{t|gn|a1=1|t1=ro}}
{{t|io|a1=1|t1=bitra}}
{{t|en|a1=1–4, 7|t1=bitter}}
{{t|it|a1=1|t1=amaro}}
{{t|la|a1=1|t1=amarus}}
{{t|nl|a1=1|t1=bitter}}
{{t|nb|a1=1|t1=bitter}}
{{t|oc|t1=amar}}
{{t|pap|a1=1|t1=marga}}
{{t|pl|a1=1|t1=gorzki}}
{{t|pt|a1=1|t1=amargo}}
{{t|ro|a1=1|t1=amar}}
{{t|ru|a1=1|t1=горький}}
{{t|scn|a1=1|t1=amaru}}
{{t|sc|a1=1|t1=ràntzigu}}
{{t|sv|a1=1|t1=bitter}}
{{trad-abajo}}
=== Forma flexiva ===
==== Forma verbal ====
;1: {{forma verbo|amargar|p=1s|t=presente|m=indicativo}}.
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Etimología ===
{{etimología|la|amarus|leng=gl}}, y este del protoindoeuropeo {{l+|ine-pro|*h₂em-ro-}}, de la raíz {{l+|ine-pro|*h₂em-}}, "[[crudo]]".
=== {{adjetivo|gl}} ===
{{gl.adj}}
;1: {{plm}}.
== {{lengua|pt}} ==
{{pron-graf|leng=pt}}
=== Etimología ===
{{etimología|la|amarus|leng=pt}}, y este del protoindoeuropeo {{l+|ine-pro|*h₂em-ro-}}, de la raíz {{l+|ine-pro|*h₂em-}}, "[[crudo]]".
=== {{adjetivo|pt}} ===
{{pt.adj}}
;1: {{plm}}.
== Referencias y notas ==
<references />
p4jhpg00b2knpmj2oo7k908qtit0m2h
gradilla
0
12323
6110126
6056002
2026-04-27T19:43:24Z
Tmagc
158167
6110126
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{etimología|diminutivo|grada}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: Material de [[laboratorio]] que se usa como [[soporte]] para los [[tubo de ensayo|tubos de ensayo]].
;2: {{plm|escalón}} de [[entrada]] a una [[casa]].
{{ámbito|Córdoba (España)}}
==== Véase también ====
{{wikipedia}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
tidmelruleq3dh2408ryvu0qf5uql5f
ambientar
0
17066
6110187
6089101
2026-04-28T01:07:55Z
Tmagc
158167
6110187
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|ayuda=am-bientar}}
=== Etimología ===
{{etimología|sufijo|ambiente|ar}}.
==== {{verbo transitivo|es}} ====
;1 {{csem|cine}}: Dotar de un ambiente adecuado a una escena.
{{sinónimo|situar|enmarcar|contextuar|ambitar}}
{{ejemplo|También en Ferrara, se le ha dado su nombre a la [[w:Biblioteca|Biblioteca]] municipal del Barco, y en [[w:Codigoro|Codigoro]] - en donde Bassani '''ambientó''' ''Airone'' - se encuentra la Biblioteca municipal ''Giorgio Bassani'' y la ''Fundación Giorgio Bassani''.|c=pagina|t=Giorgio Bassani|u=w:Giorgio_Bassani|editorial=Wikipedia}}
;2: Acondicionar el ambiente de un lugar.
{{ejemplo|Se '''ambientó''' la [[w:Calleja de las Flores|Calleja de las Flores]], se recuperaron y restauraron edificios como el Alcázar y sus jardines.|c=pagina|t=Antonio Cruz-Conde|u=w:Antonio_Cruz-Conde|editorial=Wikipedia}}
;3: {{plm|frecuentar}}, [[concurrir]].
{{ejemplo|El [[w:25 de julio|25 de julio]] de [[w:1897|1897]], London y su cuñado James Shepard zarparon para unirse al [[w:Klondike Gold Rush|Klondike Gold Rush]] donde '''ambientaría''' sus primeras historias importantes.|c=pagina|t=Jack London|u=w:Jack_London|editorial=Wikipedia}}
==== Conjugación ====
{{es.v}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
m4pz0c9jxr7686nci66ewjm7e7vtcp0
6110188
6110187
2026-04-28T01:08:26Z
Tmagc
158167
6110188
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|ayuda=am-bientar}}
=== Etimología ===
{{etimología|sufijo|ambiente|ar}}.
==== {{verbo transitivo|es}} ====
;1 {{csem|cine}}: Dotar de un ambiente adecuado a una escena.
{{sinónimo|situar|enmarcar|contextuar|ambitar}}
{{ejemplo|También en Ferrara, se le ha dado su nombre a la [[w:Biblioteca|Biblioteca]] municipal del Barco, y en [[w:Codigoro|Codigoro]] —en donde Bassani '''ambientó''' ''Airone''— se encuentra la Biblioteca municipal ''Giorgio Bassani'' y la ''Fundación Giorgio Bassani''.|c=pagina|t=Giorgio Bassani|u=w:Giorgio_Bassani|editorial=Wikipedia}}
;2: Acondicionar el ambiente de un lugar.
{{ejemplo|Se '''ambientó''' la [[w:Calleja de las Flores|Calleja de las Flores]], se recuperaron y restauraron edificios como el Alcázar y sus jardines.|c=pagina|t=Antonio Cruz-Conde|u=w:Antonio_Cruz-Conde|editorial=Wikipedia}}
;3: {{plm|frecuentar}}, [[concurrir]].
{{ejemplo|El [[w:25 de julio|25 de julio]] de [[w:1897|1897]], London y su cuñado James Shepard zarparon para unirse al [[w:Klondike Gold Rush|Klondike Gold Rush]] donde '''ambientaría''' sus primeras historias importantes.|c=pagina|t=Jack London|u=w:Jack_London|editorial=Wikipedia}}
==== Conjugación ====
{{es.v}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
bd1sdjfc4s2e6l2k4306owltja41ch8
Tokio
0
19286
6110080
6026775
2026-04-27T13:48:11Z
Swam pl
132928
/* Traducciones */ traducciones al inglés y polaco
6110080
wikitext
text/x-wiki
{{desambiguación|Tokío}}
== {{lengua|es}} ==
{{pron-graf|g1=Toquio|gnota1=poco usada|v1=Tokío|vnota1=obsoleta}}
=== Etimología ===
{{topónimo|capital1=ja|capital2=東京}}
=== {{sustantivo propio|es}} ===
;1 {{csem|ciudades}}: Ciudad capital de [[Japón]].
{{topónimo|gentilicio1=tokiota}}
=== Véase también ===
{{Wikipedia}}
=== Traducciones ===
{{trad-arriba}}
{{t|ast|t1=Toquio|t2=Tokiu}}
{{t|en|t1=Tokyo}}
{{t|pl|t1=Tokio}}
{{trad-abajo}}
== {{lengua|nch}} ==
{{pron-graf|leng=nch}}
=== Etimología ===
{{etimología|leng=nch}}.
=== {{sustantivo propio|nch}} ===
;1 {{csem|leng=nch|ciudades}}: {{plm}}.
== {{lengua|nhw}} ==
{{pron-graf|leng=nhw}}
=== Etimología ===
{{etimología|leng=nhw}}.
=== {{sustantivo propio|nhw}} ===
;1 {{csem|leng=nhw|ciudades}}: {{plm}}.
== {{lengua|ro}} ==
{{pron-graf|leng=ro}}
=== Etimología ===
{{etimología|leng=ro}}.
=== {{sustantivo propio|ro}} ===
;1 {{csem|leng=ro|ciudades}}: {{plm}}.
== Referencias y notas ==
<references />
i84wkr0m9woupqqfhvho4qgb91s617p
6110083
6110080
2026-04-27T14:46:49Z
TMCbot
164594
.
6110083
wikitext
text/x-wiki
{{desambiguación|Tokío}}
== {{lengua|es}} ==
{{pron-graf|g1=Toquio|gnota1=poco usada|v1=Tokío|vnota1=obsoleta}}
=== Etimología ===
{{etimología|ja|東京}}
=== {{sustantivo propio|es}} ===
;1 {{csem|ciudades}}: Ciudad capital de [[Japón]].
{{topónimo|gentilicio1=tokiota}}
=== Véase también ===
{{Wikipedia}}
=== Traducciones ===
{{trad-arriba}}
{{t|ast|t1=Toquio|t2=Tokiu}}
{{t|en|t1=Tokyo}}
{{t|pl|t1=Tokio}}
{{trad-abajo}}
== {{lengua|nch}} ==
{{pron-graf|leng=nch}}
=== Etimología ===
{{etimología|leng=nch}}.
=== {{sustantivo propio|nch}} ===
;1 {{csem|leng=nch|ciudades}}: {{plm}}.
== {{lengua|nhw}} ==
{{pron-graf|leng=nhw}}
=== Etimología ===
{{etimología|leng=nhw}}.
=== {{sustantivo propio|nhw}} ===
;1 {{csem|leng=nhw|ciudades}}: {{plm}}.
== {{lengua|ro}} ==
{{pron-graf|leng=ro}}
=== Etimología ===
{{etimología|leng=ro}}.
=== {{sustantivo propio|ro}} ===
;1 {{csem|leng=ro|ciudades}}: {{plm}}.
== Referencias y notas ==
<references />
0krurw1h6pspxnqxqkjgl5shhnp6dwg
cuello
0
23613
6110169
5915658
2026-04-27T22:57:47Z
Tmagc
158167
/* Traducciones */
6110169
wikitext
text/x-wiki
{{desambiguación|Cuello}}
== {{lengua|es}} ==
{{pron-graf|1audio=LL-Q1321 (spa)-Rodelar-cuello.wav}}
[[Archivo:Female neck.jpg|thumb|[1]]]
[[Archivo:Sir Christopher Hatton from NPG (2) cropped.jpg|thumb|[2] cuello y [[boina]]]]
=== Etimología ===
{{etimología|la|collum}}, y este del protoindoeuropeo ''[[*kwol-o-]]'', en última instancia de la raíz ''[[*kwel-]]'', "[[girar]]". Compárese ''[[ciclo]]''
=== {{sustantivo masculino|es}} ===
{{es.sust}}
;1 {{csem|anatomía}}: Parte más estrecha del cuerpo que une la [[cabeza]] con el [[tronco]] en la mayoría de los [[animal]]es [[vertebrado]]s.
{{sinónimo|cogote|nota1=Argentina, Chile|gollete|nota2=desusado|pescuezo|nota3=raramente del humano}}.
;2 {{csem|vestimenta}}: Parte de la [[ropa]] que cubre esta parte del cuerpo
{{sinónimo|collar|nota1=obsoleto}}.
;3: En especial, la tira rígida que rodea al cuello<sub>1</sub> en la [[vestimenta]] de los [[sacerdote]]s [[católico]]s
{{sinónimo|alzacuello}}.
;4: Parte superior [[angosto|angosta]] de una [[vasija]] u otro [[recipiente]]
{{sinónimo|gollete}}.
;5: Parte más [[estrecha]] y [[alargada]] de un objeto, especialmente si este es [[redondeado]]
;6 {{csem|anatomía}}: Zona donde se une el [[pie]] con la [[pierna]]
{{uso|obsoleto}}
{{sinónimo|tobillo}}.
;7 {{csem|botánica}}: {{plm|tallo}} que echan al [[brotar]] las [[cabeza]]s de las [[aliácea]]s.
=== Información adicional ===
{{derivad|alzacuello|alzacuellos|cuellicorto|cuellidegollado|cuellierguido|cuellilargo|cuellirrojo}}
=== Locuciones ===
{{trad-arriba|Locuciones con «cuello»}}
* [[cuello acanalado]], [[cuello alechugado|alechugado]] o [[cuello escarolado|escarolado]]
* [[cuello alto]], [[cuello cisne|cisne]] o [[cuello vuelto|vuelto]]: el que se dobla sobre sí mismo, cubriendo todo el cuello con dos capas de tela superpuestas
* [[cuello blando]]: el que va sin [[almidonar]]
* [[cuello de botella]]: zona estrecha de un sitio donde se suelen producir atascos
* [[cuello de foque]] o [[cuello duro|duro]]: el que va almidonado
* [[cuello de pajarita]]
* [[cuello del útero]] o [[cuello uterino|uterino]]: cerviz
* [[a voz en cuello]]: con gran volumen
* [[bofetada de cuello vuelto]]: gran bofetada
* [[con la soga al cuello]]: en grave peligro
* [[dar cuello]]: matar (México)
* [[de cuello azul]]: de clase obrera
* [[de cuello blanco]]: de clase profesional o alta
* [[escaparse por el cuello de la camisa|escaparse]] o [[salirse por el cuello de la camisa]]: estar muy flaco
* [[hablar para el cuello de la camisa]]: hablar en voz muy baja
* [[hasta el cuello]]: por completo
* [[levantar el cuello]]: superar una adversidad
* [[pararse el cuello]]: atribuirse crédito por algo que no debería
* [[saltar al cuello]]: agredir violentamente
* [[tener cogido por el cuello]]: tener bajo control
{{trad-abajo}}
=== Véase también ===
{{w}}
* [[cerviz]]
* [[cogote]]
* [[collar]]
* [[nuca]]
* [[pescuezo]]
* [[testuz]]
=== Traducciones ===
{{trad-arriba}}
{{t|arn|a1=1|t1=topeḻ}}
{{t|sq|a1=1|t1=qafë}}
{{t|de|a1=1|t1=Hals|g1=m|a2=2|t2=Kragen|g2=m|a3=3|t3=Kollar|g3=n}}
{{t|ast|a1=1|t1=pescuezu}}
{{t|az|a1=1|t1=boyun}}
{{t|br|a1=1|t1=goûg|t2=gouzoug|g2=m}}
{{t|bg|a1=1|t1=врат}}
{{t|cs|a1=1|t1=krk|g1=m}}
{{t|da|a1=1|t1=hals}}
{{t|eo|a1=1|t1=kolo}}
{{t|eu|a1=1|t1=lepo}}
{{t|fi|a1=1|t1=kaula}}
{{t|fr|a1=1|t1=cou}}
{{t|et|a1=2|t1=kael}}
{{t|el|a1=1|t1=λαιμός}}
{{t|gd|a1=1|t1=amhach}}
{{t|he|a1=1|t1=צואר|g1=m}}
{{t|en|a1=1|t1=neck}}
{{t|it|a1=1|t1=collo}}
{{t|la|a1=2|t1=collum}}
{{t|avk|a1=1|t1=berga}}
{{t|mg|a1=1|t1=vozona}}
{{t|nn|a1=1|t1=hals}}
{{t|nci|a1=1|t1=cuechtli}}
{{t|nl|a1=1|t1=nek}}
{{t|pl|a1=1|t1=szyja}}
{{t|pt|a1=1|t1=pescoço}}
{{t|ru|a1=1|t1=шея|g1=f|a2=2|t2=воротник|g2=m}}
{{t|sv|a1=1|t1=hals}}
{{t|tr|a1=1|t1=boğaz}}
{{t|yo|a1=1|t1=ọrùn}}
{{trad-abajo}}
== Referencias y notas ==
<references />
gx6h60y4fgf2ztwg4qk71vqwtxzbji9
malo
0
24713
6110108
6068045
2026-04-27T17:54:59Z
Tmagc
158167
/* Etimología 1 */
6110108
wikitext
text/x-wiki
{{desambiguación|Malo|málo|mało}}
== {{lengua|es}} ==
{{pron-graf|1audio1=LL-Q1321 (spa)-Rodelar-malo.wav|v=mal}}
{{ampliable}}
=== Etimología 1 ===
{{etimología|la|malus}}.
==== {{adjetivo|es}} ====
{{es.adj|sup=pésimo|sup2=malísimo|comp=peor}}
;1: Se dice de lo que no está bien hecho.
{{antónimo|bueno}}
{{hipónimo|deficiente}}
{{ejemplo|Ese fue un ''mal'' trabajo.}}
;2: Se dice de lo que tiene connotaciones desagradables y negativas.
{{antónimo|bueno}}.
{{ejemplo|He pasado una ''mala'' noche.}}
;3: Se dice de la persona con maldad.
{{uso|se usa también como sustantivo}}
{{sinónimo|bellaco|cruel|granuja|malvado|ruin|vil}}
{{antónimo|bueno}}
{{ejemplo|Quien mató a Bambi era muy ''malo''.}}
;4: Se dice de lo que no tiene gracia y no gusta.
{{sinónimo|desabrido|desagradable}}
{{antónimo|bueno}}
{{ejemplo|Una ''mala'' película.}}
;5: Se dice de lo que entraña un peligro.
{{sinónimo|peligroso|avieso|riesgoso}}.
{{ejemplo|Hoy las ''malas'' lecturas no pervierten a los jóvenes, ya que, afortunadamente, no leen.}}
;6: Que causa deterioro o daño.
{{sinónimo|nocivo|dañino|pernicioso}}
{{ejemplo|El cigarrillo es ''malo'' para la salud.}}
;7: Que no tiene mala conducta y comete travesuras.
{{sinónimo|travieso|desobediente}}.
{{ejemplo|Es un niño muy ''malo''.}}
;8: Deteriorado.
{{sinónimo|averiado}}.
{{ejemplo|El reloj está ''malo'', no da la hora.}}
;9: Con la salud alterada.
{{sinónimo|enfermo}}.
{{ejemplo|El paciente está ''malo''.}}
;10: Se dice de quien carece de habilidad o talento en una disciplina o arte.
{{antónimo|bueno}}
{{ejemplo|Yo pinto, pero soy un pintor muy ''malo''.}}
;11: Comida o bebida pasada o podrida.
{{ejemplo|El pescado se puso ''malo'' por dejarlo fuera de la nevera.}}
{{ámbito|Venezuela}}
{{sinónimo|descompuesto|manido|piche|nota3=Venezuela}}
;12: Errado, incorrecto.
{{ejemplo|Esa respuesta está ''mala''.}}
{{ámbito|Venezuela}}
;13: Contrario a la buena educación, la ética y los buenos principios.
{{antónimo|bueno}}
{{ejemplo|Eso de aparecerse en una fiesta sin que a uno lo inviten es ''malo''.}}
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;14: {{plm|entidad}} [[sobrenatural]] que, según algunas religiones, [[tentar|tienta]] a los [[humano]]s a cometer el [[mal]].
{{wikisauro|diablo}}
;15: Personaje que representa la maldad por antonomasia en el cine y la literatura.
{{ejemplo|Esto corre más lento que el caballo del ''malo''.}}
{{antónimo|bueno}}.
==== Locuciones ====
* [[a la mala]]:
;16: De forma traicionera, por la espalda.
;17: A la fuerza.
* [[colesterol malo]]: lipoproteínas de baja densidad que se acumulan en los vasos sanguíneos ocasionando arterioesclerosis y placas de ateroma y pueden conllevar el riesgo de sufrir infartos y ACV.
* [[de malas]]:
;18: Sin suerte.
;19: De mal humor.
{{ejemplo|Evita al jefe hoy, mira que anda ''de malas''.}}
* [[en las buenas y en las malas]]: en todo momento, pase lo que pase.
{{ejemplo|La amistad debe perdurar en las buenas y en ''las malas''.}}
* [[lo malo]]: Dificultad, inconveniente o defecto.
{{ejemplo|Tiene cáncer, ''lo malo'' es que no sabemos cómo decírselo.}}
* [[por las malas]]: coaccionado, a la fuerza, bajo amenaza
{{sinónimo|a juro|nota1=Venezuela}}.
==== Información adicional ====
* Cuando la forma masculina singular precede a un sustantivo, toma la forma apocopada ''mal''.
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{t|af|t1=kwaai|t2=sleg|t3=beroerd}}
{{t|ain|i1=s|t1=ウェン|t2=ウェㇴ|t3=ヱン|t4=ヱㇴ}}
{{t|sq|t1=keq}}
{{t|de|a1=3,13|a2=3|a3=1,2|t1=verdorben|t2=böse|t3=schlecht|t4=übel|t5=schlimm}}
{{t|sai-all|a1=2|t1=xenec}}
{{t|bg|t1=зъл|t2=лош}}
{{t|cs|t1=špatný}}
{{t|da|t1=dårlig|t2=ilde|t3=ond|t4=slet}}
{{t|eu|t1=gaizto|t2=txar}}
{{t|fr|t1=mauvais|t2=méchant|t3=mal}}
{{t|eo|t1=mava|t2=malbona}}
{{t|fo|t1=ringur}}
{{t|gd|t1=droch|t2=olc|t3=dona}}
{{t|el|t1=κακός|t2=άσχημος}}
{{t|hi|t1=ख़राब}}
{{t|hu|t1=rossz}}
{{t|hbo|g2=m|g4=f|t1=רָשָׁע|t2=רשע|t3=רָע|t4=רע}}
{{t|io|t1=mala}}
{{t|en|t1=bad|t2=nasty|t3=evil|t4=wrong}}
{{t|ang|t1=yfel}}
{{t|is|t1=illur|t2=slæmur|t3=vondur}}
{{t|it|t1=brutto|t2=cattivo|t3=male}}
{{t|ja|t1=悪い}}
{{t|clm|t1=sx̣áʔəs}}
{{t|kuz|t1=baltchar}}
{{t|la|t1=malus|t2=phaulius}}
{{t|ln|t1=-bé}}
{{t|arn|a1=2|t1=weda}}
{{t|yua|t1=kʼaas}}
{{t|nci|t1=ahmo cualli}}
{{t|nhw|t1=amo kuali}}
{{t|nb|t1=dårlig}}
{{t|nl|t1=slecht}}
{{t|pap|t1=malo|t2=malu}}
{{t|pl|t1=zły}}
{{t|pt|t1=mau|t2=ruim}}
{{t|ro|t1=rău}}
{{t|ru|t1=плохой}}
{{t|srn|t1=kway|t2=ogri}}
{{t|sv|t1=arg|t2=dålig|t3=ful|t4=illa|t5=ond|t6=slätt|t7=stygg}}
{{t|sw|t1=-baya}}
{{t|tl|t1=masamâ}}
{{t|tr|t1=fena|t2=kötü}}
{{t|zu|t1=-bi|t2=-bolile}}
{{trad-abajo}}
== {{lengua|bm}} ==
{{pron-graf|leng=bm}}
=== Etimología 1 ===
{{etimología|leng=bm}}.
==== {{sustantivo|bm}} ====
;1 {{csem|leng=bm|botánica|alimentos}}: {{plm|arroz}} (grano).
==== Véase también ====
{{w|idioma=bm}}
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Etimología 1 ===
{{etimología|leng=gl}}.
==== {{adjetivo|gl}} ====
;1: {{plm|malo}}.
== {{lengua|la}} ==
{{pron-graf|leng=la}}
=== Etimología 1 ===
{{etimología|leng=la|compuesto|magis|volo}}.
==== {{verbo transitivo|la}} ====
;1: {{plm|querer}} [[más]], [[preferir]].
==== {{verbo intransitivo|la}} ====
;2: {{plm|inclinar}}se por, [[estar]] a [[favor]].
==== Conjugación ====
{{la.v|irreg|mālō}}
== {{lengua|sh}} ==
{{pron-graf|leng=sh}}
=== Etimología 1 ===
{{etimología|leng=sh}}.
==== {{adverbio|sh}} ====
;1: {{plm|poco}}.
{{ámbito|leng=sh|croata}}
== Referencias y notas ==
<references />
nuy9l4jrwa6caafqoo61yijrjjyn4jf
mosquito
0
29077
6110203
6101220
2026-04-28T08:05:31Z
Limotecariu
6752
/* Traducciones */
6110203
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
[[Archivo:Aedes_aegypti_biting_human.jpg|thumb|right|''Aedes aegypti'' picando a un humano.]]
=== Etimología ===
{{etimología|sufijo|mosca|ito}}
=== {{sustantivo masculino|es}} ===
{{es.sust}}
;1 {{csem|insectos}}: Insecto [[díptero]] volador pequeño de la familia Culicidae, conocido por su picadura con la que extrae sangre, sin embargo solo la hembra pica a animales y al hombre. Los mosquitos trasmiten enfermedades como: la [[malaria]], la [[fiebre amarilla]] y el [[dengue]].<ref name=dle1925>{{DLE1925}}</ref>
{{sinónimo|zancudo|nota=América Latina, especialmente Venezuela}}
;2 {{csem|insectos}}: (''Drosophila'') Mosca muy pequeña de color marronáceo llamada también ''mosca del vinagre'' o ''mosca de la fruta'', que suele alimentarse de frutas muy maduras o substancias en fermentación ricas en fructosa. Es inofensiva.
{{ámbito|Venezuela}}
;3 {{csem|insectos}}: Cualquiera de los insectos dípteros parecidos al mosquito, que suelen vivir formando enjambres en lugares húmedos, como las charcas y las bodegas.<ref name=dle1925 />
;4: Larva de la langosta.<ref name=dle1925 />
;5: Hombre que acude frecuentemente a la taberna.<ref name=dle1925 />
{{uso|coloquial}}
;6 {{csem|vehículos}}: Tractor de ruedas grandes y cabina pequeña que se usa para remolcar jaulas o carretones.<ref>{{Damer}}</ref>
{{ámbito|Puerto Rico|Uruguay}}
{{sinónimo|mosco}}
=== Véase también ===
{{W}}
=== Traducciones ===
{{trad-arriba}}
{{t|de|t1=Mücke|g1=f|t2=Stechmücke|g2=f|t3=Moskito|g3=m}}
{{t|ast|a1=1|t1=mosquitu}}
{{t|bm|t1=soso}}
{{t|cak|t1=üs}}
{{t|ca|t1=mosquit|t2=cúlex}}
{{t|da|t1=myg}}
{{t|eo|t1=moskito|t2=kulo}}
{{t|eu|t1=eltxo|t2=ulitxa}}
{{t|fo|t1=mýggjabiti}}
{{t|fr|t1=moustique|g1=m}}
{{t|fy|t1=muskyt|t2=neef}}
{{t|gl|t1=mosquito|g1=m}}
{{t|ha|t1=sauro|g1=m}}
{{t|he|t1=יתוש}}
{{t|hu|t1=szúnyog}}
{{t|id|t1=nyamuk}}
{{t|en|t1=mosquito|t2=gnat}}
{{t|ang|t1=gnætt}}
{{t|is|t1=mý}}
{{t|it|t1=zanzara}}
{{t|ja|t1=蚊}} (ka)
{{t|ms|t1=nyamuk}}
{{t|zh|t1=蚊子}}
{{t|yua|t1=k’oxol|t2=us}}
{{t|nci|t1=moyotl}}
{{t|nl|t1=mug|t2=muskiet|t3=steekmug}}
{{t|nb|t1=mygg}}
{{t|oc|t1=moissau}}
{{t|xpo|t1=moyút}}
{{t|pt|t1=mosquito|t2=mosquito}}
{{t|frp|t1=mouissalino}}
{{t|ru|t1=комар}}
{{t|sv|t1=mygga}}
{{t|sw|t1=mbu}}
{{t|tl|t1=lamók}}
{{t|tr|t1=sivrisinek}}
{{trad-abajo}}
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Etimología ===
{{etimología|leng=gl}}.
=== {{sustantivo masculino|gl}} ===
{{gl.sust}}
;1: {{plm}}.
== {{lengua|pt}} ==
{{pron-graf|leng=pt}}
=== Etimología ===
{{etimología|leng=pt}}.
=== {{sustantivo|pt}} ===
;1: {{plm}}.
== Referencias y notas ==
<references />
bxvq5dzjxgp8mgssgwxf3iqjn81l4sz
Chicago
0
29842
6110082
5959924
2026-04-27T14:46:44Z
TMCbot
164594
.
6110082
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|fr|Chécagou}}, {{etim|mia|šikaakwa}}, {{etim|alg-pro|*šeka·kwa}}.
=== {{sustantivo propio|es}} ===
;1 {{csem|ciudades|p=los Estados Unidos}}: es una ciudad del Estado de Illinois [[Estados Unidos]]
=== Véase también ===
{{wikipedia}}
=== Traducciones ===
{{trad-arriba}}
<!-- formato: {{t+|idioma|<acepción#>|palabra|género}} p. ej. {{t+|fr|1|chose|f}} -->
{{trad-abajo}}
== {{lengua|en}} ==
{{pron-graf|leng=en}}
=== Etimología ===
{{etimología|leng=en}}.
=== {{sustantivo propio|en}} ===
;1 {{csem|ciudades|leng=en|p=los Estados Unidos}}: {{plm|Chicago}}.
{{topónimo|gentilicio1=Chicagoan}}
=== Véase también ===
{{Wikipedia|leng=en}}
== Referencias y notas ==
<references />
39t1k50xgmj2dnbm268fcnbcwa3cyjw
pescuezo
0
30006
6110170
5727520
2026-04-27T22:59:46Z
Tmagc
158167
6110170
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{etimología|osp|pescueço}}, {{etim|fone|*poscoço}}, y este {{etimología|prefijo|pos-|coço}}.
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1 {{csem|anatomía}}: {{plm|cuello}}, [[cogote]].
{{uso|coloquial}}
{{sinónimo|cogote|cuello}}
{{derivad|pescozón|pescuecera}}
{{ejemplo|Tengo un dolor en el pescuezo.}}
;2: {{plm|vanidad}}, [[soberbia]], [[altanería]].
{{uso|coloquial}}
==== Locuciones ====
* [[andar al pescuezo]]: tener mala relación con alguno
* [[retorcer el pescuezo]]: [[ahorcar]]
== Referencias y notas ==
<references />
jlzp5tpklbpwxo4dygibmcl2l6e3qcv
6110171
6110170
2026-04-27T23:07:19Z
Tmagc
158167
6110171
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{etimología|osp|pescueço}}, {{etim|fone|*poscoço}}, y este {{etim|prefijo|pos-|coço}}, hoy [[cuezo]].<ref>{{DCECH}}</ref>
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1 {{csem|anatomía}}: {{plm|cuello}}, [[cogote]].
{{uso|coloquial}}
{{sinónimo|cogote|cuello}}
{{derivad|pescozón|pescuecera}}
{{ejemplo|Tengo un dolor en el pescuezo.}}
;2: {{plm|vanidad}}, [[soberbia]], [[altanería]].
{{uso|coloquial}}
==== Locuciones ====
* [[andar al pescuezo]]: tener mala relación con alguno
* [[retorcer el pescuezo]]: [[ahorcar]]
== Referencias y notas ==
<references />
oajzdptcndxnma85qwlpxl84bde9w4p
andare
0
30387
6110190
5905954
2026-04-28T01:29:45Z
Tmagc
158167
/* Etimología 1 */
6110190
wikitext
text/x-wiki
{{desambiguación|andaré|anduviere}}
== {{lengua|es}} ==
{{pron-graf}}
=== Forma flexiva ===
==== Forma verbal ====
;1: {{forma verbo|andar|m=subjuntivo|p=yo|t=futuro}}.
{{uso|anticuado}}
;2: {{forma verbo|andar|m=subjuntivo|p=3s|t=futuro}}.
{{uso|anticuado}}
== {{lengua|it}} ==
{{pron-graf|leng=it|1audio1=It-andare.ogg}}
=== Etimología 1 ===
{{etimología|leng=it|la-eme|andare|alt=andāre}}, y este de [[ambulo|ambulāre]] o bien de [[ambio|*ambitāre]].
==== {{verbo intransitivo|it}} ====
;1: {{plm|andar}}.
==== Conjugación ====
{{it.v|e}}
== Referencias y notas ==
<references />
mvn0sonbtv7of4738jtvgdusrwjnk8r
producir
0
44082
6110137
5687581
2026-04-27T21:25:59Z
26agcp
138617
/* Español */Ordeno secciones
6110137
wikitext
text/x-wiki
{{definición}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{etimología|la|producere}}, y este formado con ''[[pro#Latín|pro]]'', "[[delante]]" y "''[[ducere#Latín|ducere]]''", "[[sacar]]".
==== {{verbo transitivo|es}} ====
;1: {{plm|originar}}, causar un efecto.
{{ejemplo|Algunos medicamentos producen somnolencia.}}
;2: {{plm|fabricar}} un objeto.
{{ejemplo|En esta empresa se producen zapatillas.}}
;3: {{plm|crear}} una obra intelectual.
{{ejemplo|Es un escritor muy prolífico; produce varias novelas cada año.}}
;4: Dar [[dinero]] para que pueda realizarse una obra de arte.
{{ejemplo|Está buscando a alguien que le produzca la película.}}
;5 {{csem|derecho}}: <ref name="drae">{{DRAE2001}}</ref>
;6 {{csem|economía}}: Emplear medios o recursos para obtener un resultado.<ref name="drae" />
{{uso|utci}}
{{sinónimo|trabajar}}
==== Relacionados ====
* [[acarrear]], [[beneficiar]], [[causar]], [[crear]], [[dar lugar a]], [[dejar]], [[fabricar]], [[inferir]], [[instigar]], [[maquinar]], [[ocasionar]], [[originar]], [[reportar]]
==== Conjugación ====
{{es.v}}
==== Información adicional ====
{{derivad|producente|contraproducente}}
==== Véase también ====
* [[producirse]]
==== Traducciones ====
{{trad-arriba}}
{{t|de|a1=2|t1=produzieren|a2=2|t2=herstellen}}
{{t|ext|t=prouzil}}
{{t|fr|a1=2|t1=produire}}
{{t|en|a1=2|t1=produce}}
{{t|ia|a1=2|t1=producer}}
{{t|it|a1=2|t1=produrre}}
{{t|nl|a1=2|t1=produceren|a2=2|t2=maken|i2=s|t3=aandoen|t4=aanmaken|t5=aanrichten|t6=afwerpen|t7=berokkenen|t8=bezorgen|t9=opbrengen|t10=opleveren|t11=stichten|t12=teweegbrengen|t13=veroorzaken|t14=voortbrengen}}
{{t|pl|a1=2|t1=wytwarzać|a2=2|t2=produkować}}
{{t|pt|t1=produzir|a1=2}}
{{t|ru|a1=2|t1=производить}}
{{t|sv|a1=2|t1=producera}}
{{trad-abajo}}
== Referencias y notas ==
<references />
fo8xph4pqn1gt1a2w8t2lhc7nnji7sb
pulgón
0
59724
6110204
6073865
2026-04-28T10:04:44Z
Limotecariu
6752
/* Traducciones */
6110204
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|texto-sufijo=sufijo augmentativo|pulga|ón}}
=== {{sustantivo masculino|es}} ===
{{es.sust}}
;1 {{csem|insectos}}: (familia Aphididae) Cualquiera de unas 5000 especies de insectos [[hemíptero]]s, de [[cuerpo]] [[piriforme]] de unos pocos milímetros de largo, largas patas, antenas articuladas de varios segmentos, y mandíbula modificada en [[estilete]], que emplean para [[alimentar]]se de [[savia]]. Son una de las principales [[plaga]]s de las plantas cultivadas en las regione templadas
{{sinónimo|áfido}}
;2 {{csem|zoología}}: Crustáceo pequeño que construye madrigueras en la arena. Vive a lo largo de las costas templadas occidentales de América, en playas arenosas expuestas a la resaca de la zona intermareal.
{{ámbito|Chile}}
{{sinónimo|muimuy|chiquiliqui|chiquilique|tiquiliche|chirino de mar|michugo|catapacita de mar|chanchito de mar|limañe|pulga de mar|reculambay}}
=== Véase también ===
{{W}}
* [[melado]]
=== Traducciones ===
{{trad-arriba}}
{{t|de|a1=1|t1=Blattlaus|g1=f}}
{{t|ast|a1=1|t1=pulgón|g1=m}}
{{t|ca|a1=1|t1=pugó|g1=m}}
{{t|eo|a1=1|t1=afido}}
{{t|fi|a1=1|t1=kirva}}
{{t|fr|a1=1|t1=puceron|g1=m}}
{{t|el|a1=1|t1=αφίδα}}
{{t|hu|a1=1|t1=levéltetű}}
{{t|io|a1=1|t1=afidio}}
{{t|en|a1=1|t1=aphid|t2=plant louse|t3=greenfly}}
{{t|it|a1=1|t1=afide|g1=m|t2=pidocchio delle piante|g2=m}}
{{t|ja|a1=1|t1=油虫|tl1=アブラムシ, aburamushi}}
{{t|nv|a1=1|t1=nahachagii biyázhí}}
{{t|nl|a1=1|t1=bladluis|g1=c}}
{{t|pl|a1=1|t1=mszyca|g1=f}}
{{t|pt|a1=1|t1=pulgão|g1=m}}
{{trad-abajo}}
== Referencias y notas ==
<references />
mfhibwqczivquovrpz7x2du2zo6doks
ensalmado
0
70914
6110127
5751392
2026-04-27T19:44:07Z
Tmagc
158167
6110127
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{etimología}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;1: Dicho de una persona, que está desustanciada o ausente.
{{ámbito|Córdoba (España)}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Forma flexiva ===
==== Forma verbal ====
;1: ''Participio de'' [[ensalmar]].
== Referencias y notas ==
<references />
lg9jvohy2ucn3uilud4v1lurjt8bkjw
diente de león
0
77234
6110088
6093067
2026-04-27T15:38:43Z
Raos10
93688
Etimología, imagen, taxón (plantilla), sinónimos
6110088
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|calco|la|dens leonis|alt=dēns leōnis}}.
[[File:Two_stages_in_the_life_cycle_of_a_dandelion_(Taraxacum_officinale)_–_flower_head_and_seed_head.jpg|thumb|[1]]]
==== {{locución sustantiva|es|masculino}} ====
{{es.sust|cop=n}}
;1: {{taxón|Taraxacum officinale}} [[planta|Planta]] [[herbáceo|herbácea]], de la familia de las [[asterácea]]s, de característica [[flor]] [[amarillo|amarilla]], que se transforma en una característica [[esfera]] [[blanquecino|blanquecina]] formada por los largos [[vilano]]s unidos a los [[fruto]]s para su [[dispersión]] por [[anemocoria]]
{{sinónimo|amargón|almirón|achicoria amarga|áster|chicoria|panadero|pasto de clavo}}
==== Véase también ====
{{W|leng=es}}
==== Traducciones ====
{{trad-arriba}}
{{t|de|a1=1|t1=Löwenzahn|a2=1|t2=ketteplöck}}
{{t|hsb|a1=1|t1=mlóč}}
{{t|az|t1=zəncirotu}}
{{t|br|a1=1|t1=c'hwervizonenn|g1=f}}
{{t|csb|a1=1|t1=mlécz}}
{{t|ca|a1=1|t1=dent de lleó}}
{{t|cs|a1=1|t1=pampeliška}}
{{t|ko|a1=1|t1=서양민들레}}
{{t|da|a1=1|t1=mælkebøtte}}
{{t|sco|a1=1|t1=dentylion}}
{{t|sk|a1=1|t1=púpava}}
{{t|sl|a1=1|t1=regrat}}
{{t|et|a1=1|t1=võilill}}
{{t|fi|a1=1|t1=voikukka}}
{{t|fr|a1=1|t1=pissenlit}}
{{t|gl|a1=1|t1=mexacán|t2=carrelo|t3=leitarega|t4=leitaruga|t5=leituga|t6=tarrelo}}
{{t|he|a1=1|t1=שינן רפואי}}
{{t|hu|a1=1|t1=gyermekláncfű}}
{{t|id|a1=1|t1=jombang}}
{{t|en|a1=1|t1=dandelion}}
{{t|is|a1=1|t1=túnfífill}}
{{t|it|a1=1|t1=dente di leone}}
{{t|ja|a1=1|t1=セイヨウタンポポ}}
{{t|lv|a1=1|t1=ārstniecības pienene}}
{{t|li|a1=1|t1=pisblóm}}
{{t|lt|a1=1|t1=kiaulpienė}}
{{t|lb|a1=1|t1=bettseechesch}}
{{t|zh|a1=1|t1=西洋蒲公英}}
{{t|nl|a1=1|t1=paardenbloem}}
{{t|nb|a1=1|g1=mf|t1=løvetann}}
{{t|nn|a1=1|t1=løvetann|g1=f}}
{{t|pl|a1=1|t1=mniszek}}
{{t|quz|a1=1|t1=saqasaqa}}
{{t|ro|a1=1|t1=păpădie}}
{{t|ru|a1=1|t1=одуванчик лекарственный}}
{{t|sgs|a1=1|t1=pėinė}}
{{t|tr|a1=1|t1=karahindiba}}
{{t|uk|a1=1|t1=кульбаба лікарська}}
{{t|wa|a1=1|t1=såvaedje cécoreye}}
{{t|vec|a1=1|t1=pisacan}}
{{t|sah|a1=1|t1=ньээм от}}
{{trad-abajo}}
== Referencias y notas ==
<references />
qb7f8h6eirgw2bg0tnzwp518f7vul7r
cuezo
0
102447
6110163
5737810
2026-04-27T22:26:40Z
Raos10
93688
Formato, sinónimo, uso, etimología incierta
6110163
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|incierta}}.<ref name='dle'>{{DLE}}</ref>
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1: Artesa de madera, en que amasan el yeso los albañiles.<ref name='dle1925'>{{DLE1925}}</ref>
{{sinónimo|amasadera}}
;2: {{plm|cesto}} semejante al [[cuévano]] pero algo más pequeño.<ref name='dle1925'/>
{{uso|anticuado}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
1xifd66sq7mq0v5us532twauwy4ubmz
6110164
6110163
2026-04-27T22:28:05Z
Raos10
93688
Adición de forma flexiva
6110164
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|incierta}}.<ref name='dle'>{{DLE}}</ref>
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1: Artesa de madera, en que amasan el yeso los albañiles.<ref name='dle1925'>{{DLE1925}}</ref>
{{sinónimo|amasadera}}
;2: {{plm|cesto}} semejante al [[cuévano]] pero algo más pequeño.<ref name='dle1925'/>
{{uso|anticuado}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Forma flexiva ===
==== Forma verbal ====
;1: {{forma verbo|cocer|p=1s|t=presente|m=indicativo}}.
== Referencias y notas ==
<references />
9sdzczr6s595pphezrv4hc5nrc688da
6110172
6110164
2026-04-27T23:11:34Z
Tmagc
158167
etimo
6110172
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|osp|coço}}, [[cueço]], probablemente {{etim|la-vul|*cauceus}}, {{etim|la-lat|caucus}}, {{etim|grc|καῦκος}}.
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1: Artesa de madera, en que amasan el yeso los albañiles.<ref name='dle1925'>{{DLE1925}}</ref>
{{sinónimo|amasadera}}
;2: {{plm|cesto}} semejante al [[cuévano]] pero algo más pequeño.<ref name='dle1925'/>
{{uso|anticuado}}
==== Información adicional ====
{{cognados|cossi|nota1=catalán|cueza|nota2=aragonés|còça|nota3=occitano}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Forma flexiva ===
==== Forma verbal ====
;1: {{forma verbo|cocer|p=1s|t=presente|m=indicativo}}.
== Referencias y notas ==
<references />
lsj3nlycchrru4ybqt37tt1e0pjvh2d
amarillez
0
125676
6110145
5711373
2026-04-27T21:49:10Z
Raos10
93688
variante, formato
6110145
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v=amarillor}}
=== Etimología ===
{{etimología|sufijo|amarillo|ez}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{sustantivo de adjetivo|amarillo}}
==== Traducciones ====
{{trad-arriba}}
{{t|ca|t1=grogor|g1=f}}
{{t|en|t1=yellowness}}
{{trad-abajo}}
== Referencias y notas ==
<references />
97ac22qx4vi2ok6sjvbizrzwawu1jwl
6110147
6110145
2026-04-27T21:50:27Z
Raos10
93688
variante
6110147
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v=amarillor|v=amarillura}}
=== Etimología ===
{{etimología|sufijo|amarillo|ez}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{sustantivo de adjetivo|amarillo}}
==== Traducciones ====
{{trad-arriba}}
{{t|ca|t1=grogor|g1=f}}
{{t|en|t1=yellowness}}
{{trad-abajo}}
== Referencias y notas ==
<references />
ib3um4gdl7ju3dykq3hc87nh50k8ujp
6110148
6110147
2026-04-27T21:50:36Z
Raos10
93688
6110148
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v=amarillor|v2=amarillura}}
=== Etimología ===
{{etimología|sufijo|amarillo|ez}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{sustantivo de adjetivo|amarillo}}
==== Traducciones ====
{{trad-arriba}}
{{t|ca|t1=grogor|g1=f}}
{{t|en|t1=yellowness}}
{{trad-abajo}}
== Referencias y notas ==
<references />
s420z6s5t26i1mehebr8g7ku9tqpire
amarillento
0
125687
6110143
5822742
2026-04-27T21:47:35Z
Raos10
93688
variante, formato
6110143
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v=amarilloso|v2=amarillejo}}
=== Etimología ===
{{etimología|sufijo|amarillo|ento}}
==== {{adjetivo|es}} ====
{{es.adj}}
;1 {{csem|colores}}: Se dice del [[color]] o de lo que tiene un color [[similar]] al [[amarillo]].
==== Traducciones ====
{{trad-arriba}}
{{t|fr|a1=1|t1=jaunâtre}}
{{t|el|a1=1|t1=κιτρινωπός}}
{{t|en|t1=yellowish}}
{{t|pl|a1=1|t1=żółtawy|a2=1|t2=pożółkły}}
{{t|ru|a1=1|t1=желтоватый}}
{{trad-abajo}}
== Referencias y notas ==
<references />
g0vjp9teqdwmc79eegcmonoqip1lped
peinilla
0
134755
6110124
5729758
2026-04-27T19:41:20Z
Tmagc
158167
6110124
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
[[Archivo:Comb.png|thumb|[1]]]
=== Etimología ===
{{etimología|sufijo|peine|illa}}
=== {{sustantivo femenino|es}} ===
{{es.sust}}
;1: {{plm|peine}} de bolsillo.
{{ámbito|Colombia|Ecuador|Panamá|Puerto Rico|Uruguay|Venezuela}}
;2: {{plm|peine}} corto con varias [[hilera]]s de [[púa]]s.
{{ámbito|Córdoba (España)|Jaén}}
{{sinónimo|lendrera}}
;3: {{plm|machete}} de poco tamaño.
{{ámbito|Colombia|Cuba|Ecuador|Venezuela}}
=== Véase también ===
{{w|peine}}
=== Traducciones ===
{{trad-arriba}}
<!--{{t+|de|}}-->
<!--{{t+|ar|}}-->
<!--{{t+|bg|}}-->
<!--{{t+|ca|}}-->
<!--{{t+|eo|}}-->
<!--{{t+|fr|}}-->
<!--{{t+|en|}}-->
<!--{{t+|it|}}-->
<!--{{t+|ja|}}-->
<!--{{t+|nl|}}-->
<!--{{t+|pl|}}-->
<!--{{t+|pt|}}-->
{{trad-abajo}}
== Referencias y notas ==
<references />
ac4g5ch7uwpmmkrexfe32z0bwa2jkq1
amargor
0
150965
6110151
6110023
2026-04-27T21:54:02Z
Raos10
93688
6110151
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v=amargura|v2=amargazón|v3=amaritud}}
=== Etimología ===
{{etimología|sufijo|amargo|or}}.
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1: {{plm|sabor}} o gusto [[amargo]].<ref name='dle1925'>{{DLE1925}}</ref>
{{relacionado|amargo|amargar|amargante|amargado}}
;2: {{plm|angustia}} o [[pena]].<ref name='dlc17'>{{DLC1817}}</ref>
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba|[1] amargo}}
{{trad-abajo}}
{{trad-arriba|[2] angustia}}
{{t|fr|t1=amertume}}
{{t|en|t1=bitterness}}
{{t|it|t1=amarezza|g1=f}}
{{t|oc|t1=amargor}}
{{t|pt|t1=amargura|g1=f}}
{{trad-abajo}}
== Referencias y notas ==
<references />
n3r210nhruwputuxut9le3nur3n7g2h
invernal
0
161279
6110079
6026752
2026-04-27T13:21:53Z
Tmagc
158167
6110079
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|p1=invernar|v=hibernal}}
=== Etimología ===
{{etimología|sufijo|invierno|al}}.
=== {{adjetivo|es}} ===
{{es.adj|ng}}
;1: {{adjetivo de sustantivo|[[invierno]]|al}}.
{{sinónimo|hiemal}}
=== {{sustantivo masculino|es}} ===
{{es.sust}}
;2: Lugar cubierto en los [[invernadero]]s destinado para descansar, proteger y alimentar al [[ganado]].
=== Traducciones ===
{{trad-arriba}}
{{t|de|t1=winterlich}}
{{t|fr|t1=hivernal|g1=m|t2=hivernale|g2=f|t3=hivernaux|n3=p}}
{{t|fr|t1=hibernal|g1=m|t2=hibernale|g2=f|t3=hibernaux|n3=p}}
{{t|en|t1=hibernal|t2=wintry|t3=wintery|t4=winterlike}}
{{trad-abajo}}
== Referencias y notas ==
<references />
h5v8li34iujw1gv4xcxh2xl4gf5p8l2
sufra
0
225829
6110128
5698435
2026-04-27T20:01:11Z
Tmagc
158167
6110128
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v2=zofra|v3=zofra|v1=azofra|vnota2=etim. 2|vnota3=etim. 2|vnota1=etim. 1 y 2}}
=== Etimología 1 ===
{{etimología|xaa|أسهر|desvelar}}, {{etim|ar|سهر|trasnochar}}.<ref>{{DLE}}</ref>
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{plm|prestación personal}}.
{{ámbito|Córdoba (España)|Palencia}}
{{sinónimo|prestación personal|azofra|adra|vereda}}
=== Etimología 2 ===
{{etimología|fr|surfaix}}.<ref>{{DLC1914}}</ref>
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: Correón que sostiene las varas, apoyado en el sillín de la caballería de tiro.
{{sinónimo|zafra|azofra|zofra|cejadero|zambarco|sajador|francalete}}
=== Forma flexiva ===
==== Forma verbal ====
;1: {{forma verbo|sufrir|1s|t=presente|m=subjuntivo}}.
;2: {{forma verbo|sufrir|3s|presente|subjuntivo}}.
;3: {{forma verbo|sufrir|p=usted|m=imperativo}}.
== Referencias y notas ==
<references />
84ikv5ah7p6i5j7sypl4cq6m51pn5sl
roña
0
399557
6110174
5855169
2026-04-27T23:27:44Z
Tmagc
158167
6110174
wikitext
text/x-wiki
{{desambiguación|oñá}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{año de documentación|1464}}. {{etimología|la-vul|*aerūgna}}, {{etim|la|aerūginem}}, acusativo de {{etim|la|aerugo|alt=aerūgo, -inis}}. Corominas propone una derivación {{etimología|la-vul|*rōnea}}, {{etim|la|aranea|araña}}, a partir de una resignificación metonímica, sin embargo es menos probable la mutación de la a en o.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1 {{csem|agricultura}}: Enfermedad de las plantas causada por un hongo.<ref name=dhle>{{DHLE}}</ref>
{{sinónimo|sarna}}
;2 {{csem|veterinaria|enfermedades}}: {{plm|sarna}} (enfermedad de la piel causada por un [[ácaro]]) del [[ganado]] de los animales con [[lana]].<ref name=dhle />
{{sinónimo|sarna}}
;3: {{plm|suciedad}} y [[porquería]] pegada fuertemente, que [[afear|afea]] el aspecto de algo.<ref name="drae1925">{{DLE1925}}</ref>
{{relacionado|mierda|nota=España|mugre|porquería}}.
;4: {{plm|orín}} de los metales.<ref name=dhle />
;5: Daño [[moral]] que se comunica o puede comunicarse de unos en otros.<ref name="drae1925" />
;6: {{plm|roñería}}, [[picardía]].<ref name="drae1925" />
{{uso|anticuado}}
;7: Persona mezquina.<ref name=dhle />
{{uso|coloquial|despectivo}}
;8: {{plm|farsa}}, [[treta]], [[maula]].<ref name="drae1925" />
;9: Corteza del pino.<ref name=dhle />
{{uso|rural}}
{{ámbito|España}}
;10: {{plm|pericarpio}}.<ref name=dhle />
{{ámbito|Cantabria}}
;11: {{plm|aspereza}}, [[rugosidad]].<ref name=dhle />
{{ámbito|Colombia}}
;12: Musgo de las cortezas de los árboles.<ref name=dhle />
{{ámbito|España}}
;13: Pimiento de [[redrojo]].<ref name=dhle />
{{ámbito|Murcia}}
;14 {{csem|juegos}}: {{plm|tiña}} (juego infantil).<ref name=dhle />
{{ámbito|México}}
;15: Simulación o actuación de una enfermedad con el fin de no trabajar.<ref name=dhle />
{{ámbito|Colombia}}
;16: Conjunto de monedas que el padrino de un bautizo les arroja a los muchachos a la rebatiña.<ref name=dhle />
{{ámbito|Andalucía}}
;17: {{plm|viruela}}.<ref name=dhle />
{{ámbito|Extremadura}}
;18: Pereza, lentitud o flojera para hacer cosas.<ref name=dhle />
{{ámbito|Venezuela}}
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Etimología 2 ===
{{etimología|acort|irroña}}, a su vez quizá de (idea) errónea.<ref name=dhle />
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{plm|tirria}}, [[ojeriza]].<ref name=dhle />
;2: {{plm|rencor}}.<ref name=dhle />
=== Forma flexiva ===
==== Forma verbal ====
;1: {{f.v|roñar|3s|presente|indicativo}}.
;2: {{f.v|roñar|2s|imperativo|afirmativo=s}}.
== Referencias y notas ==
<references />
18wcfi4ehk21qcvaequcm53jydrkdl7
6110175
6110174
2026-04-27T23:28:00Z
Tmagc
158167
6110175
wikitext
text/x-wiki
{{desambiguación|oñá}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{año de documentación|1464}}. {{etimología|la-vul|*aerūgna}}, {{etim|la|aerūginem}}, acusativo de {{etim|la|aerugo|alt=aerūgo, -inis}}. Corominas propone una derivación a partir {{etim|la-vul|*rōnea}}, {{etim|la|aranea|araña}}, a partir de una resignificación metonímica, sin embargo es menos probable la mutación de la a en o.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1 {{csem|agricultura}}: Enfermedad de las plantas causada por un hongo.<ref name=dhle>{{DHLE}}</ref>
{{sinónimo|sarna}}
;2 {{csem|veterinaria|enfermedades}}: {{plm|sarna}} (enfermedad de la piel causada por un [[ácaro]]) del [[ganado]] de los animales con [[lana]].<ref name=dhle />
{{sinónimo|sarna}}
;3: {{plm|suciedad}} y [[porquería]] pegada fuertemente, que [[afear|afea]] el aspecto de algo.<ref name="drae1925">{{DLE1925}}</ref>
{{relacionado|mierda|nota=España|mugre|porquería}}.
;4: {{plm|orín}} de los metales.<ref name=dhle />
;5: Daño [[moral]] que se comunica o puede comunicarse de unos en otros.<ref name="drae1925" />
;6: {{plm|roñería}}, [[picardía]].<ref name="drae1925" />
{{uso|anticuado}}
;7: Persona mezquina.<ref name=dhle />
{{uso|coloquial|despectivo}}
;8: {{plm|farsa}}, [[treta]], [[maula]].<ref name="drae1925" />
;9: Corteza del pino.<ref name=dhle />
{{uso|rural}}
{{ámbito|España}}
;10: {{plm|pericarpio}}.<ref name=dhle />
{{ámbito|Cantabria}}
;11: {{plm|aspereza}}, [[rugosidad]].<ref name=dhle />
{{ámbito|Colombia}}
;12: Musgo de las cortezas de los árboles.<ref name=dhle />
{{ámbito|España}}
;13: Pimiento de [[redrojo]].<ref name=dhle />
{{ámbito|Murcia}}
;14 {{csem|juegos}}: {{plm|tiña}} (juego infantil).<ref name=dhle />
{{ámbito|México}}
;15: Simulación o actuación de una enfermedad con el fin de no trabajar.<ref name=dhle />
{{ámbito|Colombia}}
;16: Conjunto de monedas que el padrino de un bautizo les arroja a los muchachos a la rebatiña.<ref name=dhle />
{{ámbito|Andalucía}}
;17: {{plm|viruela}}.<ref name=dhle />
{{ámbito|Extremadura}}
;18: Pereza, lentitud o flojera para hacer cosas.<ref name=dhle />
{{ámbito|Venezuela}}
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Etimología 2 ===
{{etimología|acort|irroña}}, a su vez quizá de (idea) errónea.<ref name=dhle />
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{plm|tirria}}, [[ojeriza]].<ref name=dhle />
;2: {{plm|rencor}}.<ref name=dhle />
=== Forma flexiva ===
==== Forma verbal ====
;1: {{f.v|roñar|3s|presente|indicativo}}.
;2: {{f.v|roñar|2s|imperativo|afirmativo=s}}.
== Referencias y notas ==
<references />
3l3deygf2laxe5puu6fv0hahzwrj19a
6110176
6110175
2026-04-27T23:28:32Z
Tmagc
158167
6110176
wikitext
text/x-wiki
{{desambiguación|oñá}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{año de documentación|1464}}. {{etimología|la-vul|*aerūgna}}, {{etim|la|aerūginem}}, acusativo de {{etim|la|aerugo|alt=aerūgo, -inis}}. Corominas propone una derivación a partir {{etim|la-vul|*rōnea}}, {{etim|la|aranea|araña}}, a partir de una resignificación metonímica; sin embargo es menos probable la mutación de la a hacia una o.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1 {{csem|agricultura}}: Enfermedad de las plantas causada por un hongo.<ref name=dhle>{{DHLE}}</ref>
{{sinónimo|sarna}}
;2 {{csem|veterinaria|enfermedades}}: {{plm|sarna}} (enfermedad de la piel causada por un [[ácaro]]) del [[ganado]] de los animales con [[lana]].<ref name=dhle />
{{sinónimo|sarna}}
;3: {{plm|suciedad}} y [[porquería]] pegada fuertemente, que [[afear|afea]] el aspecto de algo.<ref name="drae1925">{{DLE1925}}</ref>
{{relacionado|mierda|nota=España|mugre|porquería}}.
;4: {{plm|orín}} de los metales.<ref name=dhle />
;5: Daño [[moral]] que se comunica o puede comunicarse de unos en otros.<ref name="drae1925" />
;6: {{plm|roñería}}, [[picardía]].<ref name="drae1925" />
{{uso|anticuado}}
;7: Persona mezquina.<ref name=dhle />
{{uso|coloquial|despectivo}}
;8: {{plm|farsa}}, [[treta]], [[maula]].<ref name="drae1925" />
;9: Corteza del pino.<ref name=dhle />
{{uso|rural}}
{{ámbito|España}}
;10: {{plm|pericarpio}}.<ref name=dhle />
{{ámbito|Cantabria}}
;11: {{plm|aspereza}}, [[rugosidad]].<ref name=dhle />
{{ámbito|Colombia}}
;12: Musgo de las cortezas de los árboles.<ref name=dhle />
{{ámbito|España}}
;13: Pimiento de [[redrojo]].<ref name=dhle />
{{ámbito|Murcia}}
;14 {{csem|juegos}}: {{plm|tiña}} (juego infantil).<ref name=dhle />
{{ámbito|México}}
;15: Simulación o actuación de una enfermedad con el fin de no trabajar.<ref name=dhle />
{{ámbito|Colombia}}
;16: Conjunto de monedas que el padrino de un bautizo les arroja a los muchachos a la rebatiña.<ref name=dhle />
{{ámbito|Andalucía}}
;17: {{plm|viruela}}.<ref name=dhle />
{{ámbito|Extremadura}}
;18: Pereza, lentitud o flojera para hacer cosas.<ref name=dhle />
{{ámbito|Venezuela}}
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Etimología 2 ===
{{etimología|acort|irroña}}, a su vez quizá de (idea) errónea.<ref name=dhle />
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{plm|tirria}}, [[ojeriza]].<ref name=dhle />
;2: {{plm|rencor}}.<ref name=dhle />
=== Forma flexiva ===
==== Forma verbal ====
;1: {{f.v|roñar|3s|presente|indicativo}}.
;2: {{f.v|roñar|2s|imperativo|afirmativo=s}}.
== Referencias y notas ==
<references />
rvsg419qpdbi3w0yyoaoy28exs9w76y
6110177
6110176
2026-04-27T23:29:25Z
Tmagc
158167
/* Etimología 1 */
6110177
wikitext
text/x-wiki
{{desambiguación|oñá}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{año de documentación|1464}}. {{etimología|la-vul|*aerūgna}}, {{etim|la|aerugo|aerūginem}}, acusativo de {{etim|la|aerugo|alt=aerūgo, -inis}}. Corominas propone una derivación a partir {{etim|la-vul|*rōnea}}, {{etim|la|aranea|araña}}, a partir de una resignificación metonímica; sin embargo es menos probable la mutación de la a hacia una o.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1 {{csem|agricultura}}: Enfermedad de las plantas causada por un hongo.<ref name=dhle>{{DHLE}}</ref>
{{sinónimo|sarna}}
;2 {{csem|veterinaria|enfermedades}}: {{plm|sarna}} (enfermedad de la piel causada por un [[ácaro]]) del [[ganado]] de los animales con [[lana]].<ref name=dhle />
{{sinónimo|sarna}}
;3: {{plm|suciedad}} y [[porquería]] pegada fuertemente, que [[afear|afea]] el aspecto de algo.<ref name="drae1925">{{DLE1925}}</ref>
{{relacionado|mierda|nota=España|mugre|porquería}}.
;4: {{plm|orín}} de los metales.<ref name=dhle />
;5: Daño [[moral]] que se comunica o puede comunicarse de unos en otros.<ref name="drae1925" />
;6: {{plm|roñería}}, [[picardía]].<ref name="drae1925" />
{{uso|anticuado}}
;7: Persona mezquina.<ref name=dhle />
{{uso|coloquial|despectivo}}
;8: {{plm|farsa}}, [[treta]], [[maula]].<ref name="drae1925" />
;9: Corteza del pino.<ref name=dhle />
{{uso|rural}}
{{ámbito|España}}
;10: {{plm|pericarpio}}.<ref name=dhle />
{{ámbito|Cantabria}}
;11: {{plm|aspereza}}, [[rugosidad]].<ref name=dhle />
{{ámbito|Colombia}}
;12: Musgo de las cortezas de los árboles.<ref name=dhle />
{{ámbito|España}}
;13: Pimiento de [[redrojo]].<ref name=dhle />
{{ámbito|Murcia}}
;14 {{csem|juegos}}: {{plm|tiña}} (juego infantil).<ref name=dhle />
{{ámbito|México}}
;15: Simulación o actuación de una enfermedad con el fin de no trabajar.<ref name=dhle />
{{ámbito|Colombia}}
;16: Conjunto de monedas que el padrino de un bautizo les arroja a los muchachos a la rebatiña.<ref name=dhle />
{{ámbito|Andalucía}}
;17: {{plm|viruela}}.<ref name=dhle />
{{ámbito|Extremadura}}
;18: Pereza, lentitud o flojera para hacer cosas.<ref name=dhle />
{{ámbito|Venezuela}}
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Etimología 2 ===
{{etimología|acort|irroña}}, a su vez quizá de (idea) errónea.<ref name=dhle />
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{plm|tirria}}, [[ojeriza]].<ref name=dhle />
;2: {{plm|rencor}}.<ref name=dhle />
=== Forma flexiva ===
==== Forma verbal ====
;1: {{f.v|roñar|3s|presente|indicativo}}.
;2: {{f.v|roñar|2s|imperativo|afirmativo=s}}.
== Referencias y notas ==
<references />
i8wdu1f05gpwztunnf6xf52hk1waz69
6110178
6110177
2026-04-27T23:29:50Z
Tmagc
158167
/* Etimología 1 */
6110178
wikitext
text/x-wiki
{{desambiguación|oñá}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{año de documentación|1464}}. {{etimología|la-vul|*aerūgna}}, {{etim|la|aerugo|aerūginem}}, acusativo de {{l+|la|aerūgo}}. Corominas propone una derivación a partir {{etim|la-vul|*rōnea}}, {{etim|la|aranea|araña}}, a partir de una resignificación metonímica; sin embargo es menos probable la mutación de la a hacia una o.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1 {{csem|agricultura}}: Enfermedad de las plantas causada por un hongo.<ref name=dhle>{{DHLE}}</ref>
{{sinónimo|sarna}}
;2 {{csem|veterinaria|enfermedades}}: {{plm|sarna}} (enfermedad de la piel causada por un [[ácaro]]) del [[ganado]] de los animales con [[lana]].<ref name=dhle />
{{sinónimo|sarna}}
;3: {{plm|suciedad}} y [[porquería]] pegada fuertemente, que [[afear|afea]] el aspecto de algo.<ref name="drae1925">{{DLE1925}}</ref>
{{relacionado|mierda|nota=España|mugre|porquería}}.
;4: {{plm|orín}} de los metales.<ref name=dhle />
;5: Daño [[moral]] que se comunica o puede comunicarse de unos en otros.<ref name="drae1925" />
;6: {{plm|roñería}}, [[picardía]].<ref name="drae1925" />
{{uso|anticuado}}
;7: Persona mezquina.<ref name=dhle />
{{uso|coloquial|despectivo}}
;8: {{plm|farsa}}, [[treta]], [[maula]].<ref name="drae1925" />
;9: Corteza del pino.<ref name=dhle />
{{uso|rural}}
{{ámbito|España}}
;10: {{plm|pericarpio}}.<ref name=dhle />
{{ámbito|Cantabria}}
;11: {{plm|aspereza}}, [[rugosidad]].<ref name=dhle />
{{ámbito|Colombia}}
;12: Musgo de las cortezas de los árboles.<ref name=dhle />
{{ámbito|España}}
;13: Pimiento de [[redrojo]].<ref name=dhle />
{{ámbito|Murcia}}
;14 {{csem|juegos}}: {{plm|tiña}} (juego infantil).<ref name=dhle />
{{ámbito|México}}
;15: Simulación o actuación de una enfermedad con el fin de no trabajar.<ref name=dhle />
{{ámbito|Colombia}}
;16: Conjunto de monedas que el padrino de un bautizo les arroja a los muchachos a la rebatiña.<ref name=dhle />
{{ámbito|Andalucía}}
;17: {{plm|viruela}}.<ref name=dhle />
{{ámbito|Extremadura}}
;18: Pereza, lentitud o flojera para hacer cosas.<ref name=dhle />
{{ámbito|Venezuela}}
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Etimología 2 ===
{{etimología|acort|irroña}}, a su vez quizá de (idea) errónea.<ref name=dhle />
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{plm|tirria}}, [[ojeriza]].<ref name=dhle />
;2: {{plm|rencor}}.<ref name=dhle />
=== Forma flexiva ===
==== Forma verbal ====
;1: {{f.v|roñar|3s|presente|indicativo}}.
;2: {{f.v|roñar|2s|imperativo|afirmativo=s}}.
== Referencias y notas ==
<references />
ss752tempuxe2aya71ilpqeae7n75n0
6110179
6110178
2026-04-27T23:31:09Z
Tmagc
158167
/* Etimología 1 */
6110179
wikitext
text/x-wiki
{{desambiguación|oñá}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{año de documentación|1464}}. {{etimología|la-vul|*aerūgna}}, {{etim|la|aerugo|alt=aerūginem}}, acusativo de {{l+|la|aerūgo}}. Corominas propone una derivación a partir {{etim|la-vul|*rōnea}}, {{etim|la|aranea|araña}}, a partir de una resignificación metonímica; sin embargo es menos probable la mutación de la a hacia una o.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1 {{csem|agricultura}}: Enfermedad de las plantas causada por un hongo.<ref name=dhle>{{DHLE}}</ref>
{{sinónimo|sarna}}
;2 {{csem|veterinaria|enfermedades}}: {{plm|sarna}} (enfermedad de la piel causada por un [[ácaro]]) del [[ganado]] de los animales con [[lana]].<ref name=dhle />
{{sinónimo|sarna}}
;3: {{plm|suciedad}} y [[porquería]] pegada fuertemente, que [[afear|afea]] el aspecto de algo.<ref name="drae1925">{{DLE1925}}</ref>
{{relacionado|mierda|nota=España|mugre|porquería}}.
;4: {{plm|orín}} de los metales.<ref name=dhle />
;5: Daño [[moral]] que se comunica o puede comunicarse de unos en otros.<ref name="drae1925" />
;6: {{plm|roñería}}, [[picardía]].<ref name="drae1925" />
{{uso|anticuado}}
;7: Persona mezquina.<ref name=dhle />
{{uso|coloquial|despectivo}}
;8: {{plm|farsa}}, [[treta]], [[maula]].<ref name="drae1925" />
;9: Corteza del pino.<ref name=dhle />
{{uso|rural}}
{{ámbito|España}}
;10: {{plm|pericarpio}}.<ref name=dhle />
{{ámbito|Cantabria}}
;11: {{plm|aspereza}}, [[rugosidad]].<ref name=dhle />
{{ámbito|Colombia}}
;12: Musgo de las cortezas de los árboles.<ref name=dhle />
{{ámbito|España}}
;13: Pimiento de [[redrojo]].<ref name=dhle />
{{ámbito|Murcia}}
;14 {{csem|juegos}}: {{plm|tiña}} (juego infantil).<ref name=dhle />
{{ámbito|México}}
;15: Simulación o actuación de una enfermedad con el fin de no trabajar.<ref name=dhle />
{{ámbito|Colombia}}
;16: Conjunto de monedas que el padrino de un bautizo les arroja a los muchachos a la rebatiña.<ref name=dhle />
{{ámbito|Andalucía}}
;17: {{plm|viruela}}.<ref name=dhle />
{{ámbito|Extremadura}}
;18: Pereza, lentitud o flojera para hacer cosas.<ref name=dhle />
{{ámbito|Venezuela}}
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Etimología 2 ===
{{etimología|acort|irroña}}, a su vez quizá de (idea) errónea.<ref name=dhle />
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{plm|tirria}}, [[ojeriza]].<ref name=dhle />
;2: {{plm|rencor}}.<ref name=dhle />
=== Forma flexiva ===
==== Forma verbal ====
;1: {{f.v|roñar|3s|presente|indicativo}}.
;2: {{f.v|roñar|2s|imperativo|afirmativo=s}}.
== Referencias y notas ==
<references />
lf3vgkowj6laa8a84dlnjisg3209wo6
maak
0
499391
6110139
5302029
2026-04-27T21:35:04Z
26agcp
138617
/* Maya yucateco */
6110139
wikitext
text/x-wiki
{{desambiguación|máak}}
== {{lengua|yua}} ==
{{pron-graf|leng=yua}}
=== Etimología ===
{{etimología|leng=yua}}.
==== {{sustantivo|yua}} ====
{{yua.sust}}
;1: {{plm|tapa}}.
==== {{verbo|yua|intransitivo}} ====
;2 : {{plm|tapar}}.
==== Conjugación ====
{{yua.v|a}}
==== Véase también ====
* {{l|yua|mak}}
* {{l|yua|máakal}}
== Referencias y notas ==
<references />
g4ujekpx1e2cllo341n3ehm13uaz7e0
oleaje
0
862323
6110135
5959338
2026-04-27T21:21:40Z
~2026-25795-34
182206
/* Traducciones */
6110135
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
=== {{sustantivo masculino|es}} ===
{{es.sust}}
;1: {{plm|movimiento}} [[prolongado]] de las [[olas]] en el [[agua]].
=== Véase también ===
{{w}}
=== Traducciones ===
{{trad-arriba}}
{{t|ca|t1=onatge}}
{{t|fr|t1=houle}}
{{t|en|t1=surf|t2=swell}}
{{trad-abajo}}
== Referencias y notas ==
<references />
pjvbj20jhvq5ts5p0456sr5llrl1o8w
desbandarse
0
874556
6110129
5800603
2026-04-27T20:13:04Z
Tmagc
158167
6110129
wikitext
text/x-wiki
{{desambiguación}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|pronominal|desbandar}}.
=== {{verbo pronominal|es}} ===
;1 {{csem|milicia}}: {{plm|desertar}}, [[desmovilizarse]] o retirarse de la formación.<ref name="drae">{{DRAE2001}}</ref>
{{relacionado|dispersar|desmovilizar}}
;2: Apartarse de la compañía de otros.<ref name="drae" />
;3: {{plm|descomedirse}}, [[desmandarse]].<ref name="drae" />
{{ámbito|Argentina}}
{{uso|coloquial}}
=== Conjugación ===
{{es.v}}
=== Traducciones ===
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
qm3ya9e7x7r2zzx0qp1n6emn2hb7p7o
desmoronar
0
874896
6110202
5808361
2026-04-28T04:11:17Z
Tmagc
158167
6110202
wikitext
text/x-wiki
{{desambiguación}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|osp|desboronar}}, de [[borona]].
=== {{verbo transitivo|es}} ===
;1: Deshacer y arruinar poco a poco los edificios, y también las aglomeraciones de substancias de más o menos cohesión.<ref name="drae">{{DLE1925}}</ref>
{{uso|umcp}}
{{sinónimo|derribar|destruir|demoler}}
=== Conjugación ===
{{es.v}}
=== Véase también ===
* [[desmoronarse]]
=== Traducciones ===
{{trad-arriba}}
{{t|nl|i1=s|t1=doen instorten|t2=neerhalen}}
{{trad-abajo}}
== Referencias y notas ==
<references />
owox9cka40z34aa64wjb1hqdg1dyllz
licenciar
0
876428
6110131
5812695
2026-04-27T20:21:04Z
Tmagc
158167
6110131
wikitext
text/x-wiki
{{desambiguación}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|licencia|ar}}
=== {{verbo transitivo|es}} ===
;1: Dar (a un soldado) la licencia.<ref name="fbbva">{{FBBVA}}</ref>
;2: Dar (a un estudiante) su título o certificado de finalización de carrera.<ref name="fbbva" />
;3 {{csem|derecho}}: Otorgar la licencia que autorice el uso o la gestión de bienes o información protegidos.<ref name="fbbva" />
;4 {{csem|milicia}}: Librar (a un soldado) de su rol de combatiente.<ref name="fbbva" />
;5: Retirar a una persona definitivamente de una actividad por edad.<ref name="fbbva" />
;6: Dar permiso a alguien para que abandone su puesto de trabajo.<ref name="fbbva" />
{{uso|raro}}
;7 {{csem|derecho}}: {{plm|excarcelar}}.<ref name="fbbva" />
=== Conjugación ===
{{es.v|paradigma=anunciar}}
=== Véase también ===
* [[licenciarse]]
=== Traducciones ===
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
tixwdsaxyini1ohymx2dvo8mup55999
6110132
6110131
2026-04-27T20:21:54Z
Tmagc
158167
6110132
wikitext
text/x-wiki
{{desambiguación}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|licencia|ar}}
=== {{verbo transitivo|es}} ===
;1: Dar (a un soldado) la licencia.<ref name="fbbva">{{FBBVA}}</ref>
;2: Dar (a un estudiante) su título o certificado de finalización de carrera.<ref name="fbbva" />
;3 {{csem|derecho}}: Otorgar la licencia que autorice el uso o la gestión de bienes o información protegidos.<ref name="fbbva" />
;4 {{csem|milicia}}: Librar (a un soldado) de su rol de combatiente.<ref name="fbbva" />
{{sinónimo|desmovilizar}}
;5: Retirar a una persona definitivamente de una actividad por edad.<ref name="fbbva" />
;6: Dar permiso a alguien para que abandone su puesto de trabajo.<ref name="fbbva" />
{{uso|raro}}
;7 {{csem|derecho}}: {{plm|excarcelar}}.<ref name="fbbva" />
=== Conjugación ===
{{es.v|paradigma=anunciar}}
=== Véase también ===
* [[licenciarse]]
=== Traducciones ===
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
ldze701cx6c8oetnavnj5kw3snhe1vx
oxigenar
0
876713
6110090
5800010
2026-04-27T16:23:07Z
Tmagc
158167
6110090
wikitext
text/x-wiki
{{desambiguación}}
{{esbozo}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|oxígeno|ar}}
=== {{verbo transitivo|es}} ===
;1 {{csem|química}}: Dicho del [[oxígeno]]: combinarse con otros elementos para formar óxidos.<ref name="drae">{{DRAE2001}}</ref>
{{uso|utcp}}
;2: Introducir ideas frescas en un ámbito para revitalizarlo.<ref name="drae" />
{{ámbito|Argentina|Venezuela}}
{{ejemplo|Como un rayo, como una lluvia<br>Una luna<br>Oxigenarás mi vida hasta estallar<br>Es que siempre estarás<br>Siempre estarás en mí|c=canción|t=Las cosas tienen movimiento|a=Juan Carlos Baglietto|a2=Fito Páez|f=1985}}
=== Conjugación ===
{{es.v}}
=== Véase también ===
* [[oxigenarse]]
=== Traducciones ===
{{trad-arriba}}
<!--{{t+|de|?|}}-->
<!--{{t+|ar|?|}}-->
<!--{{t+|bg|?|}}-->
<!--{{t+|ca|?|}}-->
<!--{{t+|eo|?|}}-->
<!--{{t+|fr|?|}}-->
<!--{{t+|en|?|}}-->
<!--{{t+|it|?|}}-->
<!--{{t+|ja|?|}}-->
<!--{{t+|nl|?|}}-->
<!--{{t+|pl|?|}}-->
<!--{{t+|pt|?|}}-->
{{trad-abajo}}
== Referencias y notas ==
<references />
sjhlmm76ipcsrdi2ulyvdk7uqvow8xg
6110091
6110090
2026-04-27T16:23:24Z
Tmagc
158167
6110091
wikitext
text/x-wiki
{{desambiguación}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|oxígeno|ar}}
=== {{verbo transitivo|es}} ===
;1 {{csem|química}}: Dicho del [[oxígeno]]: combinarse con otros elementos para formar óxidos.<ref name="drae">{{DRAE2001}}</ref>
{{uso|utcp}}
;2: Introducir ideas frescas en un ámbito para revitalizarlo.<ref name="drae" />
{{ámbito|Argentina|Venezuela}}
{{ejemplo|Como un rayo, como una lluvia<br>Una luna<br>Oxigenarás mi vida hasta estallar<br>Es que siempre estarás<br>Siempre estarás en mí|c=canción|t=Las cosas tienen movimiento|a=Juan Carlos Baglietto|a2=Fito Páez|f=1985}}
=== Conjugación ===
{{es.v}}
=== Véase también ===
* [[oxigenarse]]
=== Traducciones ===
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
3kzrogp1wjphfma67n5syfs6opjcmh4
desmoronarse
0
877976
6110201
5809514
2026-04-28T04:09:28Z
Tmagc
158167
6110201
wikitext
text/x-wiki
{{desambiguación}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|pronominal|desmoronar}}.
=== {{verbo pronominal|es}} ===
;1: Venir (algo) a menos, irse destruyendo.<ref name="drae">{{DLE1925||desmoronar}}</ref>
{{sinónimo|derribarse|destruirse|arruinarse}}
=== Conjugación ===
{{es.v}}
=== Véase también ===
* [[desmoronar]]
=== Traducciones ===
{{trad-arriba}}
{{t|nl|i1=s|t1=afbrokkelen|t2=gruizelen|t3=ineenstorten|t4=neerzakken}}
{{trad-abajo}}
== Referencias y notas ==
<references />
18mijpahqusv677dou1k3tsaprl257z
fiarse
0
878993
6110077
6110072
2026-04-27T12:41:16Z
Tmagc
158167
Revertido el cambio de [[Special:Contributions/ArzhPleuzal|ArzhPleuzal]] ([[User talk:ArzhPleuzal|disc.]]) a la última edición de [[User:TMCbot|TMCbot]]
5797162
wikitext
text/x-wiki
{{desambiguación}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}
=== {{verbo pronominal|es}} ===
;1: {{plm|fiar}} (uso pronominal de ...)
=== Conjugación ===
{{es.v|paradigma=enviar}}
=== Traducciones ===
{{trad-arriba}}
{{t|nl|i1=s|t1=in vertrouwen mededelen}}
{{trad-abajo}}
== Referencias y notas ==
<references />
ptp9h21b0a3rzp6p91q83xmgoclt2qm
desmovilizar
0
879636
6110130
5806956
2026-04-27T20:14:16Z
Tmagc
158167
6110130
wikitext
text/x-wiki
{{desambiguación}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|prefijo|des|movilizar}}
=== {{verbo transitivo|es}} ===
;1 {{csem|milicia}}: {{plm|licenciar}} a las tropas movilizadas.<ref name="drae">{{DRAE2001}}</ref>
=== Conjugación ===
{{es.v}}
=== Traducciones ===
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
pq3waq6n57ub9o71st4mqdpby0pj1sl
mak
0
933101
6110141
5899647
2026-04-27T21:40:05Z
26agcp
138617
/* Conjugación */
6110141
wikitext
text/x-wiki
== {{lengua|yua}} ==
{{pron-graf|leng=yua}}
=== Etimología ===
{{etimología|leng=yua}}.
==== {{verbo|yua|transitivo}} ====
;1: {{plm|tapar}}.
{{sinónimos|leng=yua|bal|pix}}
;2: {{plm|cerrar}}.<ref>{{Yoshida 2009|p=49}}</ref>
==== Locuciones ====
* {{l|yua|mak a chiʼ}}
==== Conjugación ====
{{yua.v|t2}}
==== Véase también ====
* {{l|yua|maak}}
* {{l|yua|máakal}}
== {{lengua|pl}} ==
{{pron-graf|leng=pl}}
=== Etimología ===
{{etimología|leng=pl|sla-pro|*makъ}}, {{etim|leng=pl|ine-pro|*meh₂kos}}.
=== {{sustantivo masculino|pl}} ===
;1 {{csem|leng=pl|plantas|lengua=pl}}: {{plm|amapola}};
=== Información adicional ===
{{derivad|maczek}}
=== Véase también ===
{{w|leng=pl}}
=== Declinación ===
{{pl.sust|m-in|ma|k|u}}
== Referencias y notas ==
<references />
e8tmyrvxpja0qpifenmuf1uv2b5m5zq
infiernillo
0
1011701
6110101
6109988
2026-04-27T17:09:36Z
~2026-16686-32
181366
/* {{sustantivo masculino|es}} */ imagen
6110101
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf|v=infernillo}}
=== Etimología ===
{{etimología}}.
=== {{sustantivo masculino|es}} ===
{{es.sust}}
[[File:IWATANI PORTABLE GAS STOVE (2).jpg|thumb|[1]]]
;1: Aparato [[portátil]] para realizar [[cocción|cocciones]], comúnmente llevado a [[camping]].
{{ámbito|España}}
{{relacionado|anafe|anafre|hornillo|cocinilla|hornalla}}
=== Traducciones ===
{{trad-arriba}}
<!-- formato: {{t+|idioma|<acepción#>|palabra|género}} p. ej. {{t+|fr|1|chose|f}} -->
<!--{{t+|de|}}-->
<!--{{t+|ar|}}-->
<!--{{t+|bg|}}-->
<!--{{t+|ca|}}-->
<!--{{t+|eo|}}-->
<!--{{t+|fr|}}-->
<!--{{t+|en|}}-->
<!--{{t+|it|}}-->
<!--{{t+|ja|}}-->
<!--{{t+|nl|}}-->
<!--{{t+|pl|}}-->
<!--{{t+|pt|}}-->
{{trad-abajo}}
== Referencias y notas ==
<references />
1ydnbynnewg5z17d473r2rjtm4dh4lp
Módulo:generar-pron/es
828
1027433
6110196
6093533
2026-04-28T03:37:55Z
Tmagc
158167
6110196
Scribunto
text/plain
-- Transcripciones fonéticas en castellano
-- Autor: Tmagc
local export = {}
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 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 gsubrep = m_str.gsubrep
local split = m_str.split
local sub = m_str.sub
local encodehtml = m_str.encodehtml
local m_pron = require("Módulo:generar-pron")
local normalizar = m_pron.normalizar
local longitud_silabica = m_pron.longitud_silabica
local acentuacion = m_pron.acentuacion
local rima = m_pron.rima
local sombra = m_pron.sombra
local trazar = require("Módulo:traza")
local DOBLE_SEPARACION = "Cuando ciertos prefijos están presentes, la agrupación natural de sílabas (fonética) puede cambiar. Algunos ejemplos son: ''transatlántico'' (trans-at-lán-ti-co en lugar de tran-sa-tlán-ti-co), ''subrayar'' (sub-ra-yar en lugar de su-bra-yar), ''abrogar'' (ab-ro-gar en lugar de a-bro-gar). Para estos casos en el lenguaje escrito se recomienda dividir la palabra separando los prefijos que influyan en la silabación."
local HIATOS_Y_DIPTONGOS = "Para más información sobre las convenciones de hiatos y diptongos, véase [[Wikcionario:Referencia/ES/Pronunciación#Hiatos_y_diptongos|esta sección]]."
local NO_PS = "Las palabras que comienzan por ps-, pt-, pn-, gn- o mn- admiten dos grafías: con la primera consonante (''psicología'', ''gnoseología'') o sin ella (''sicología'', ''noseología''), con preferencia en la primera opción."
local FITOVARIANTES = "Casi todas los términos científicos con el sufijo -fito admiten dos variantes, una llana y la otra esdrújula. Excepciones se pueden encontrar por ejemplo en sínfito, que es un término que ya estaba asentado en griego y en latín y en donde sólo la forma esdrújula es válida. [https://www.rae.es/dpd/-fito Más información]"
local IACO = "Las palabras terminadas con el sufijo -iaco admiten dos variantes: una esdrújula con hiato (-íaco, 'i.a.ko) y otra llana con diptongo (-iaco, 'ia.ko). La primera es la preferida en América, mientras que la segunda es más usual en España."
local ORDINALES_COMPUESTOS = "De los ordinales compuestos, los correspondientes a la primera y a la segunda decena se pueden escribir en una o en dos palabras. Si es en una palabra, no puede llevar tilde y el primer compuesto se mantiene invariante (vigesimoprimero, vigesimoprimera, vigésimo primero, o vigésima primera, pero no *vigésimoprimero ni *vigesimaprimera ni *vigésimo primera). A partir de la tarcera decena, sí o sí deberán ser dos palabras. [https://https://www.rae.es/dpd/ordinales Más información]."
-- sin uso
-- local MAYUSCULA_TAXONES = "“Se escriben con mayúscula los nombres de los grupos taxonómicos zoológicos y botánicos superiores al género, cuando se usan en aposición: orden Roedores, familia Leguminosas; pero estos mismos términos se escriben con minúscula cuando se usan como adjetivos o como nombres comunes: El castor es un mamífero roedor; Hemos tenido una buena cosecha de leguminosas.” [https://www.rae.es/dpd/may%C3%BAsculas Más información]"
-- local PREFIJO_TRANS = "Generalmente, las palabras admiten combinarse con los prefijos trans- o tras-. Algunas excepciones a esto son: 1. Palabras en donde el significado del prefijo es “detrás”, en donde sólo suele admitirse -tras (trastienda) 2. Palabras en donde el segundo elemento empieza con s, en donde sólo suele admitirse -trans (transexual). [https://www.rae.es/dpd/tras- Más información]"
-- local MAYUSCULA_PUNTOS_CARDINALES = "Los puntos cardinales se escriben con minúscula. Sólo se escriben con mayúscula cuando forman parte de un nombre propio."
-- local MAYUSCULA_DISCIPLINAS = "En general, los nombres de las disciplinas van en minúscula (“La medicina ha experimentado grandes avances en los últimos años”). Se usa mayúscula en ciertos contextos académicos y en especial cuando están referidas a asignaturas particulares que ofrece una determinada institución (“El profesor de Cálculo Numérico es extraordinario”). [https://www.rae.es/dpd/may%C3%BAsculas Más información]"
--
--[=[
En total consideramos que (a grandes rasgos) hay 6 pron posibles:
1. seseante + yeísta (General)
2. seseante + lleísta (Litoral)
3. seseante + sheísta (CABA)
4. seseante + zheísta (Interior)
5. no seseante + yeísta (España)
6. no seseante + lleísta (España)
]=]
-- Lista completa de prefijos a analizar:
-- a-/an, ad, ana, cata, dia, dis, e, epi, es, peri, res, ab, al, ambi, apo, bati, cachi, circa, cis, citra, eu, exo, ob, pen, per, preter, yuxta, za-
-- uni, op, poli, centro, audio, para, infra, co, ultra, re, aero, deci, paleo, micro, xero, pro, atl, neo, hidro, auto, narco, ecto, di, meso, sobre, su, baro
-- bio, hispano, enea, tran, arqui, multi, foto, hepta, socio, vice, mini, maxi, cardio, afro, mal, im, supra, hemi, entre, magneto, italo, fito, nano, giga, acro
-- extra, mega, mili, geo, psico, anglo, super, archi, sota, omni, ante, tri, crio, retro, cuasi, cuarto, euro, intra, quimio, pre, meta, in, hexa, soto, requete, peta
-- inter, termo, cromo, medio, electro, anfi, aniso, hetero, crono, filo, pluri, homo, pseudo, circum, germano, tardo, centi, contra, agro, proto, de, iso
-- tetra, sin, megalo, turbo, hipo, equi, cito, etno, cuadri, hiper, eco, bi, franco, biem, video, mono, poli, anisó, radio, endo, guarda, recontra, circun, tera
-- arque, seudo, porta, deca, plus, penta, con, tecno, cuatri, ciber, macro, xeno, info, kilo, ciclo, porno, em, tele, social, hecto, anti, neuro, cun, moto, pos
-- alter, semi, bien, cir, andro, ex
-- La lista había sido tomada de "Automatic syllabification for Spanish using lemmatization and derivation to solve the prefix's prominence issue" (10.1016/j.eswa.2013.06.056)
local PREFIJOS_BT = {
"ab",
"sub",
"post",
--"ob" no aplica, no es más productivo
}
local PREFIJOS_AEO = {
"aero",
"auto",
"bio",
"co",
"contra",
"eco",
"electro",
"endo",
"exo",
"etno",
"filo",
"foto",
"hexa",
"hecto",
"hidro",
"hipo",
"homo",
"hetero",
"geo",
"iso",
"intra",
"kilo",
"macro",
"micro",
"neo",
"neuro",
"pre",
"pro",
"proto",
"pseudo",
"psico",
"re",
"retro",
"sobre",
"supra",
"tecno",
"xero",
}
local PREFIJOS_I = {
"ambi",
"archi",
"arqui",
"anti",
"bi",
"centi",
"cuadri",
"cuatri",
"deci",
"di",
"equi",
"hemi",
"maxi",
"mini",
"multi",
"omni",
"peri",
"pluri",
"poli",
"semi",
"tri",
}
local PREFIJOS_NS = {
"an",
"cis",
"des", -- pero no dis
"en",
"in",
"pan",
"tras",
"trans",
}
local PREFIJOS_R = {
"inter",
"hiper",
"super",
"alter",
"ciber"
}
--CONVENCION: mayúscula para patrones encerrados entre corchetes, minúscula para todo lo demás
local ag = u(0x0301) -- acute = ́
local gr = u(0x0300) -- grave = ̀
local circunflejo = u(0x0302) -- circumflex = ̂
local virgulilla = u(0x0303) -- tilde = ̃
local dieresis = u(0x0308) -- diaeresis = ̈
local TEMP_GU = u(0xFFFA)
local TEMP_QU = u(0xFFFB)
local ac_primario = u(0x02C8)
local ac_secundario = u(0x02CC)
local acentos_ipa = ac_primario..ac_secundario
local divsil = "-"
local sepsil = "%."..acentos_ipa.."%"..divsil
local separador = "%s"..sepsil
local ACENTOS_IPA = "[" .. acentos_ipa .. "]"
local SEPSIL = "[" .. sepsil .. "]"
local SEPARADOR = "[" .. separador .. "]"
local FIN_PALABRA = "%f[%s%z]"
local INICIO_PALABRA = "%f[^%s%z]"
local FIN_SILABA = "%f[%s%z"..separador.."]"
local INICIO_SILABA = "%f[^%s%z"..separador.."]"
-- NOTA: y considerada una vocal a efectos prácticos
local vocales_no_tildadas = "aeiouyüAEIOUYÜ"
local VOCAL_NO_TILDADA = "[" .. vocales_no_tildadas .. "]"
local vocales_tildadas = "áéíóúýàèìòùỳÁÉÍÓÚÝÀÈÌÒÙỲ"
local VOCAL_TILDADA = "[" .. vocales_tildadas .. "]"
local vocales = vocales_no_tildadas .. vocales_tildadas
local VOCAL = "[" .. vocales .. "]"
local CONS = "[^" .. vocales .. separador .. "]"
local CONS_SALVO_H = "[^" .. vocales .. separador .. "hH]"
local CONS_SALVO_R = "[^" .. vocales .. separador .. "rR]"
local LETRA = "[^" .. separador .. "]"
local LETRA_SALVO_N = "[^" .. separador .. "nN]"
local no_acentuado = list_to_set({
"el", "la", "los", "las", "un", -- artículos
"me", "te", "se", "lo", "le", "nos", "os", "les", -- pron. objeto
"mi", "mis", "tu", "tus", "su", "sus", -- posesivos
"que", "quien", "cuan", "cual", -- pron. relativos
"y", "e", "o", "u", "ni", -- conjunciones
"de", "del", "a", "al", -- preposiciones y articulos
"por", "en", "con", "sin", "tras", -- más preposiciones
"mas", --pero
"so", --de so pretexto
"si",
})
local tildar = {
["a"] = "á",
["e"] = "é",
["i"] = "í",
["o"] = "ó",
["u"] = "ú",
["y"] = "ý",
["A"] = "Á",
["E"] = "É",
["I"] = "Í",
["O"] = "Ó",
["U"] = "Ú",
["Y"] = "Ý"
}
local quitar_tilde = {
["á"] = "a",
["é"] = "e",
["í"] = "i",
["ó"] = "o",
["ú"] = "u",
["ý"] = "y",
["Á"] = "A",
["É"] = "E",
["Í"] = "I",
["Ó"] = "O",
["Ú"] = "U",
["Ý"] = "Y",
["À"] = "A",
["È"] = "E",
["Ì"] = "I",
["Ò"] = "O",
["Ù"] = "U",
["Ỳ"] = "Y"
}
local pron_abc = {{"a"},{"be","be larga"},{"ce"},{"de"},{"e"},{"efe"},{"ge"},{"hache"},{"i","i latina"},
{"jota"},{"ka"},{"ele"},{"eme"},{"ene"},{"o"},{"pe"},{"cu"},{"erre"},{"ese"},{"te"},{"u"},
{"ve","ve corta","uve"},{"doble ve","doble u","uve doble"},{"equis"},{"i","i griega","ye"},{"zeta"},{"eñe"}}
local function silabear(p)
-- chilotismos
p = gsubrep(p, "("..LETRA_SALVO_N..")([nN]?g̲[nN]?"..VOCAL..")", "%1"..divsil.."%2")
p = gsubrep(p, "("..LETRA_SALVO_N..")([nN]?G̲[nN]?"..VOCAL..")", "%1"..divsil.."%2")
p = gsubrep(p, "("..LETRA..")([ṯṮ][hH]?[rR]?"..VOCAL..")", "%1"..divsil.."%2")
-- separo grupos dobles y triples, salvo diptongos
-- Juntar consonantes fricativas y oclusivas con l y con r. A ecepción de dl.
p = gsubrep(p, "("..LETRA..")([pbfvkctgPBFVKCTG][hH]?[lrLR]"..VOCAL..")", "%1"..divsil.."%2")
p = gsubrep(p, "("..LETRA..")([d][hH]?[rR]"..VOCAL..")", "%1"..divsil.."%2")
-- swing, switch, etc.
p = gsubrep(p, "("..LETRA..")([sS][wW]"..VOCAL..")", "%1"..divsil.."%2")
-- separo desh (des-hielo, des-huesar, des-honra), y por si acaso tras (tras-humar), pos
p = gsub(p, "(d[ei]s)([hH]"..VOCAL..")", "%1"..divsil.."%2")
p = gsub(p, "(tran?s)([hH]"..VOCAL..")", "%1"..divsil.."%2")
p = gsub(p, "(post?)([hH]"..VOCAL..")", "%1"..divsil.."%2")
p = gsub(p, "(plus)([hH]"..VOCAL..")", "%1"..divsil.."%2")
-- Juntar ch, sh, zh, ph, th, dh, fh, kh or gh. NO Juntar bh (subhumano, subhúmedo)
p = gsubrep(p, "("..LETRA..")([cszptdfkgCSZPTDFKG][hH]"..VOCAL..")", "%1"..divsil.."%2")
-- Juntar las ll y rr
p = gsubrep(p, "("..LETRA..")([lL][lL]"..VOCAL..")", "%1"..divsil.."%2")
p = gsubrep(p, "("..LETRA..")([rR][rR]"..VOCAL..")", "%1"..divsil.."%2")
-- Juntar gue, gui, que, qui
p = gsubrep(p, "("..LETRA..")([gGqQ][uUüÜ][eEiIéÉíÍ])", "%1"..divsil.."%2")
-- Junto ck (no junto kc)
p = gsubrep(p, "("..LETRA..")([cC][kK]"..VOCAL..")", "%1"..divsil.."%2")
p = gsubrep(p, INICIO_PALABRA.."([cC])"..divsil.."([kK][lLrR])", "%1%2")
p = gsubrep(p, "([cC])"..divsil.."([kK][lLrR])", divsil.."%1%2") -- tackle
-- cc, como en [[occitano]], [[acceso]]
p = gsubrep(p, "("..LETRA.."[cC])([cC][eEiIéÉíÍ])", "%1"..divsil.."%2")
-- Junto consonantes dobles, salvo nn y bb, ej A-ddis Abeba pero sub-branquial, en-noblecer
p = gsubrep(p, "("..LETRA..")("..CONS..")%2("..VOCAL..")", function (x, c, v) return (c == "n" or c == "b") and x..c..divsil..c..v or x..divsil..c..c..v end)
-- juntar pt, ct, cn, ps, mn, gn, ft, pn, cz, dz, ds, tz, ts cuando están precedidos por otra consonante
p = gsub(p, "("..CONS..")([pPcCfF][tT]"..VOCAL..")", "%1"..divsil.."%2")
p = gsub(p, "("..CONS..")([cCmMgGpP][nN]"..VOCAL..")", "%1"..divsil.."%2")
p = gsub(p, "("..CONS..")([dDpPtT][sS]"..VOCAL..")", "%1"..divsil.."%2")
p = gsub(p, "("..CONS..")([cCdDtT][zZ]"..VOCAL..")", "%1"..divsil.."%2")
p = gsub(p, "("..CONS..")([mMnN]"..CONS..VOCAL..")", "%1"..divsil.."%2")
-- separo V-CV, VC-CV
-- empiezo con la y, puesto que fue definida como vocal pero no lo es en estos casos particulares
p = gsubrep(p, "(" .. VOCAL .. "y*)(y" .. VOCAL .. ")", "%1"..divsil.."%2")
p = gsubrep(p, "(" .. VOCAL .. CONS .. "+)(y" .. VOCAL .. ")", "%1"..divsil.."%2")
-- ahora con el resto de consonantes
p = gsubrep(p, "(" .. VOCAL .. ")(" .. CONS_SALVO_H .. VOCAL .. ")", "%1"..divsil.."%2")
p = gsubrep(p, "([aeoAEO])(" .. CONS .. VOCAL_TILDADA .. ")", "%1"..divsil.."%2")
p = gsubrep(p, "([iuIU])(" .. CONS .. "[íúÍÚ])", "%1"..divsil.."%2")
p = gsubrep(p, "(" .. VOCAL .. CONS .. "+)(" .. CONS .. VOCAL .. ")", "%1"..divsil.."%2")
p = gsub(p, "[gG][uU]([eEiIéÉíÍ])", TEMP_GU.."%1")
p = gsub(p, "[qQ][uU]([eEiIéÉíÍ])", TEMP_QU.."%1")
-- separo hiatos
p = gsubrep(p, "([aeoAEOáéóÁÉÓ])([hH]?[aeoAEOáéóÁÉÓ])", "%1"..divsil.."%2")
p = gsubrep(p, "([aeoAEO])([hH]?"..VOCAL_TILDADA..")", "%1"..divsil.."%2")
p = gsubrep(p, "([íúÍÚ])([hH]?"..VOCAL..")", "%1"..divsil.."%2")
p = gsubrep(p, "([iIíÍ])([hH]?[iIíÍ])", "%1"..divsil.."%2")
p = gsubrep(p, "([uUúÚ])([hH]?[uUúÚ])", "%1"..divsil.."%2")
-- separo diptongos o triptongos consecutivos (en los raros casos en donde haya)
p = gsubrep(p, "([iuIUíúÍÚ]?"..VOCAL.."[iuIUíúÍÚ]?)(h?[iuIUíúÍÚ]h?"..VOCAL..")", "%1"..divsil.."%2")
-- junto sílabas con consonantes solamente
p = gsubrep(p, INICIO_PALABRA.."("..CONS.."+)"..SEPSIL.."("..LETRA..")", "%1%2")
p = gsubrep(p, "("..LETRA..")"..SEPSIL.."("..CONS.."+)"..FIN_PALABRA, "%1%2")
p = gsub(p, TEMP_GU, "gu")
p = gsub(p, TEMP_QU, "qu")
return p
end
--Convierte los diacríticos a notación IPA
local function reemplazar_tildes(str)
local function agregar_acentuacion_tilde(silabas, secundario)
local sustituido = false
local sust = false
for j = 1, #silabas do
silabas[j], sust = gsubb(silabas[j], "^(.*)(" .. VOCAL_TILDADA .. ")(.*)$", function(pre, diacr, post) return (secundario and ac_secundario or ac_primario) .. pre .. quitar_tilde[diacr] .. post end)
sustituido = sustituido or sust
end
return sustituido
end
local function agregar_acentuacion_sin_tilde(silabas, secundario)
local L = #silabas
if L > 1 then
if find(silabas[L], "[^" .. vocales .. "ns]$")
or find(silabas[L], "[aeiou]y$") -- diptongo decreciente final (necesitamos este paso puesto que consideramos la y como vocal)
or find(silabas[L], CONS..CONS.."$") then -- las palabras que terminan en doble consonante son agudas a menos que lleven tilde https://www.rae.es/espanol-al-dia/por-que-biceps-se-escribe-con-tilde-si-es-una-palabra-llana-terminada-en-s
silabas[L] = (secundario and ac_secundario or ac_primario) .. silabas[L] --aguda
return true
elseif find(silabas[L], "[" .. vocales .. "ns]$") then
silabas[L - 1] = (secundario and ac_secundario or ac_primario) .. silabas[L - 1] --grave
return true
end
else --Si L==1, entonces el monosilabo será tónico si no está en la lista de monosílabos átonos
if not no_acentuado[silabas[1]] then
silabas[1] = (secundario and ac_secundario or ac_primario) .. silabas[1]
end
return true
end
return false
end
local palabras = split(str, "%s+")
for i = 1, #palabras do
local silabas = split(palabras[i], SEPSIL)
local L = #silabas
local p
if palabras[i] == "|" then -- es un delimitador de fragmento, lo ignoro
p = palabras[i]
elseif L >= 4 and silabas[L-1] == "men" and silabas[L] == "te" then
silabas[L-1] = nil
silabas[L] = nil
local sustituido = agregar_acentuacion_tilde(silabas, true)
if not sustituido then
sustituido = agregar_acentuacion_sin_tilde(silabas, true)
end
assert(sustituido)
p = concat(silabas, ".")..ac_primario.."men.te"
else
local sustituido = agregar_acentuacion_tilde(silabas)
if not sustituido then
sustituido = agregar_acentuacion_sin_tilde(silabas)
end
assert(sustituido)
p = concat(silabas, ".")
end
assert(p)
p = gsub(p, "%."..ac_primario, ac_primario)
p = gsub(p, "%."..ac_secundario, ac_secundario)
palabras[i] = p
end
return concat(palabras, " ")
end
local function obtener_segunda_silabacion(s1)
local s2, sust1, sust2, sust3
s2 = s1
s2 = gsub(s2, "[gG][uU]([eEiIéÉíÍ])", TEMP_GU.."%1")
s2 = gsub(s2, "[qQ][uU]([eEiIéÉíÍ])", TEMP_QU.."%1")
s2, sust1 = gsubb(s2, "("..ACENTOS_IPA..")("..CONS.."*[iu])(h?[aeo])", ".%2%1%3")
s2, sust2 = gsubb(s2, "("..ACENTOS_IPA..")("..CONS.."*[u])(h?[i])", ".%2%1%3")
s2, sust3 = gsubb(s2, "("..ACENTOS_IPA..")("..CONS.."*[i])(h?[u])", ".%2%1%3")
s2 = gsub(s2, INICIO_PALABRA.."%.", "")
s2 = gsub(s2, TEMP_GU, "gu")
s2 = gsub(s2, TEMP_QU, "qu")
if sust1 or sust2 or sust3 then
return s2
end
return nil
end
local function generar_fono(text)
-- chilotismos
local hay_chiloe_ng, hay_chiloe_thr
text, hay_chiloe_ng = gsubb(text, "n?g̲n?", "ŋ")
text, hay_chiloe_thr = gsubb(text, "ṯh?r?", "ʈ͡ʂ")
local hay_chilotismo = hay_chiloe_ng or hay_chiloe_thr
-- convierto extranjerismos
text = gsub(text, "tch", "ch")
text = gsub(text, "ti?[sc]k", "k͡ǀ")
text = gsub(text, "ll"..FIN_SILABA, "l") -- krill
text = gsub(text, INICIO_SILABA.."p([stn])", "%1") -- Saco la p inicial de psicología o pterodáctilo
text = gsub(text, INICIO_SILABA.."[cmg](n)", "%1") -- Saco la g inicial de gnoseología y la m de mnemónico
text = gsub(text, INICIO_SILABA.."[ctd]([sz])", "%1")
text = gsub(text, INICIO_SILABA.."[cf](t)", "%1")
text = gsub(text, INICIO_SILABA.."[mn]("..CONS_SALVO_H..")", "%1")
text = gsub(text, "ph", "f")
text = gsub(text, "kh", "j") -- será convertida en /x/
text = gsub(text, "ck", "k")
text = gsub(text, "tl"..FIN_SILABA, "t")
-- y con valor de vocal (y fuera de un diptongo)
text = gsub(text, "("..CONS..")y", "%1i") -- préstamos como [[slinky]]
text = gsub(text, INICIO_SILABA.."y("..SEPSIL.."?"..CONS..")", "i%1") -- [[Yrigoyen]], pero no puede ir [[Mayra]].
text = gsub(text, INICIO_PALABRA.."y"..FIN_PALABRA, "i") -- conjunción
-- resto de transformaciones
-- ch, sh, zh
text = gsub(text, "ch", "ʧ")
text = gsub(text, "sh", "ʃ")
text = gsub(text, "zh", "ʒ")
-- ll
text = gsub(text, "ll", "ʎ")
-- r, rr
text = gsubrep(text, "("..VOCAL..SEPSIL.."?)r("..SEPSIL.."?"..VOCAL..")", "%1ɾ%2") -- [[oro]]
text = gsub(text, "("..CONS_SALVO_R..")r", "%1ɾ") -- [[dragón]]
text = gsub(text, "r("..CONS_SALVO_R..")", "ɾ%1") -- [[lord]]
text = gsub(text, "r"..FIN_SILABA, "ɾ") -- [[amor]], [[arco]]
text = gsub(text, "rr", "r")
-- elimino consonantes dobles
text = gsub(text, "("..CONS..")%1", "%1")
-- x
text = gsub(text, INICIO_PALABRA.."("..ACENTOS_IPA.."?)x", "%1s")
text = gsub(text, "x("..SEPSIL..")("..VOCAL..")", "k%1s%2")
text = gsub(text, "("..SEPSIL..")x("..VOCAL..")", "k%1s%2")
text = gsub(text, "x", "ks")
-- c, g, q
text = gsub(text, "c([iey])", "θ%1")
text = gsub(text, "g([iey])", "x%1")
text = gsub(text, "gu([ie])", "g%1")
text = gsub(text, "gü", "gu")
text = gsub(text, "qu([ie])", "k%1")
text = gsub(text, "ü", "u") -- [[Düsseldorf]], [[hübnerita]], obsolete [[freqüentemente]], etc.
text = gsub(text, "[cq]", "k") -- [[quark]], [[Qatar]], [[burqa]], [[Iraq]], etc.
-- h (necesito procesarla recién acá para que detecte la secuencia gh-)
text = gsub(text, "h", "")
-- j, ñ, v, z
text = gsub(text, "[jñvz]", {["j"]="x", ["ñ"]="ɲ", ["v"]="b", ["z"]="θ"})
-- evita duplicaciones idénticas entre sílabas (s+s, θ+θ), pero conserva s+θ
text = gsub(text, "s("..SEPSIL.."s)", "%1")
text = gsub(text, "θ("..SEPSIL.."θ)", "%1")
-- diptongos
text = gsub(text, "i([aeou])", "j%1")
text = gsub(text, "u([aeio])", "w%1")
text = gsub(text, "([aeou])[iy]", "%1j")
text = gsub(text, "([aeo])u", "%1w")
-- y consonántica
text = gsub(text, "y", "ʝ")
-- n.b, n.p, n.m
text = gsub(text, "n("..SEPARADOR.."[bmp])", "m%1")
-- conversiones finales
local seseante, hay_seseo = gsubb(text, "θ", "s")
seseante = gsub(seseante, "s("..SEPSIL.."s)", "%1")
local yeista, hay_yeismo = gsubb(text, "ʎ", "ʝ")
local sheista, hay_sheismo = gsubb(text, "[ʎʝ]", "ʃ")
local zheista, hay_zheismo = gsubb(text, "[ʎʝ]", "ʒ")
local pron, fono = {}, {}
if hay_chilotismo then
pron[1] = {}
fono[1] = {}
pron[1][1], fono[1][1] = "Chiloé", gsub(seseante, "ʎ", "ʝ")
elseif hay_seseo then
if hay_yeismo then
for i=1,6 do
pron[i] = {}
fono[i] = {}
end
pron[1][1], fono[1][1] = "seseante, yeísta", gsub(seseante, "ʎ", "ʝ")
pron[2][1], fono[2][1] = "seseante, no yeísta", seseante
pron[3][1], fono[3][1] = "seseante, sheísta", gsub(seseante, "[ʎʝ]", "ʃ")
pron[4][1], fono[4][1] = "seseante, zheísta", gsub(seseante, "[ʎʝ]", "ʒ")
pron[5][1], fono[5][1] = "no seseante, yeísta", yeista
pron[6][1], fono[6][1] = "no seseante, no yeísta", text
elseif hay_sheismo then
for i=1,4 do
pron[i] = {}
fono[i] = {}
end
pron[1][1], fono[1][1] = "seseante, no sheísta", seseante
pron[2][1], fono[2][1] = "seseante, sheísta", gsub(seseante, "[ʎʝ]", "ʃ")
pron[3][1], fono[3][1] = "seseante, zheísta", gsub(seseante, "[ʎʝ]", "ʒ")
pron[4][1], fono[4][1] = "no seseante", text
else
for i=1,2 do
pron[i] = {}
fono[i] = {}
end
pron[1][1], fono[1][1] = "seseante", seseante
pron[2][1], fono[2][1] = "no seseante", text
end
else
if hay_yeismo then
for i=1,4 do
pron[i] = {}
fono[i] = {}
end
pron[1][1], fono[1][1] = "yeísta", yeista
pron[2][1], fono[2][1] = "no yeísta", text
pron[3][1], fono[3][1] = "sheísta", sheista
pron[4][1], fono[4][1] = "zheísta", zheista
elseif hay_sheismo then
for i=1,3 do
pron[i] = {}
fono[i] = {}
end
pron[1][1], fono[1][1] = "no sheísta", text
pron[2][1], fono[2][1] = "sheísta", sheista
pron[3][1], fono[3][1] = "zheísta", zheista
else
pron[1] = {}
fono[1] = {}
pron[1][1], fono[1][1] = "pronunciación", text
end
end
return pron, fono
end
local function normalizar_fono(fono)
fono = gsub(fono, "ʧ", "t͡ʃ")
return fono
end
local function generar_fone(fono)
fono = gsub(fono, "θ(" .. SEPARADOR .. "*[mnɲbdgʝʎwɾr])", "θ̬%1")
fono = gsub(fono, "(" .. VOCAL .. ")([jw]?[mnɲ])", "%1" .. virgulilla .. "%2") -- nasalización de vocales antes de n, m, ñ
-- aproximantes fricativos: salvo ante m,n,ng (tb l en d) y a comienzo de la oración
local stop_to_fricative = {["b"] = "β", ["d"] = "ð", ["g"] = "ɣ"}
local fricative_to_stop = {["β"] = "b", ["ð"] = "d", ["ɣ"] = "g"}
fono = gsub(fono, "([^mnɲ"..separador.."]"..SEPARADOR.."*)([bg])", function(a, b) return a..stop_to_fricative[b] end)
fono = gsub(fono, "([^lʎmnɲ"..separador.."]"..SEPARADOR.."*)([d])", function(a, b) return a..stop_to_fricative[b] end)
-- Convierto de nuevo las que queden a principio de fragmento
fono = gsub(fono, "^([βðɣ])", function(a) return fricative_to_stop[a] end)
fono = gsub(fono, "| ([βðɣ])", function(a) return "| "..fricative_to_stop[a] end)
fono = gsub(fono, "[td]", {["t"] = "t̪", ["d"] = "d̪"}) --dentalización
-- nasal assimilation before consonants
local labiodental, dentialveolar, dental, alveolopalatal, palatal, velar = "ɱ", "n̪", "n̟", "nʲ", "ɲ", "ŋ"
local nasal_assimilation = {
["f"] = labiodental,
["t"] = dentialveolar, ["d"] = dentialveolar,
["θ"] = dental,
["ʧ"] = alveolopalatal, ["ʃ"] = alveolopalatal, ["ʒ"] = alveolopalatal,
["ʝ"] = palatal, ["ʎ"] = palatal,
["k"] = velar, ["x"] = velar, ["g"] = velar,
}
fono = gsub(fono, "n(" .. SEPARADOR .. "*)(.)", function(stress, following) return (nasal_assimilation[following] or "n") .. stress .. following end)
-- fono = gsub(fono, "n(s?)"..FIN_SILABA, "ŋ%1") desactivado, supuestamente solo se da en ciertos dialectos de España y Centroamérica pero no es lo general
-- lateral assimilation before consonants
fono = gsub(fono, "l(" .. SEPARADOR .. "*)(.)",
function(stress, following)
local l = "l"
if following == "t" or following == "d" then -- dentialveolar
l = "l̪"
elseif following == "θ" then -- dental
l = "l̟"
elseif following == "ʧ" or following == "ʃ" then -- alveolopalatal
l = "lʲ"
end
return l .. stress .. following
end)
fono = gsub(fono, "ŋg", "ŋ")
-- w
fono = gsub(fono, "("..ACENTOS_IPA..")w", "%1(ɣ)w̝")
-- voiced fricatives are actually approximants
fono = gsub(fono, "([βðɣ])", "%1̞")
-- conversiones finales
fono = gsub(fono, "ʧ", "t͡ʃ")
fono = gsub(fono, "%.", "")
fono = encodehtml(fono)
return fono
end
-- Punto de entrada externo, recibe el título de página y los argumentos de plantilla
function export.procesar_pron_args(tit, args)
local vino_ayuda
if #args["ayuda"] < 1 then
args["ayuda"][1] = tit
else
vino_ayuda = true
end
for i = 1,9 do
args["fone"][i] = {}
args["fono"][i] = {}
args["pron"][i] = {}
end
args["rima"] = {}
args["tl"] = {}
args["d"] = {}
args["ls"] = {}
args["ac"] = {}
-- necesito hacer tablas aparte para eliminar duplicados
local rimas = {}
local ls = {}
local ss = {}
local ac = {}
if #tit == 1 then
if tit >= "a" and tit <= "z" then
args["ayuda"] = pron_abc[string.byte(tit) - 96]
args["tl"] = args["ayuda"]
elseif tit >= "A" and tit <= "Z" then
args["ayuda"] = pron_abc[string.byte(tit) - 64]
args["tl"] = args["ayuda"]
end
elseif tit == "ñ" or tit == "Ñ" then
args["ayuda"] = pron_abc[27]
args["tl"] = args["ayuda"]
end
local nota_hiato
local A = #args["ayuda"]
local j = 1 -- indice de la ayuda
local k = 1 -- cantidad de pronunciaciones insertadas (máximo 9)
while k <= 9 and j <= A do
local norm = normalizar(tit, args["ayuda"][j], true, true)
local s1 = silabear(norm)
local s1b = reemplazar_tildes(s1)
local pron, fono = generar_fono(s1b)
local s2b = obtener_segunda_silabacion(s1b)
if s2b then
local pron2, fono2 = generar_fono(s2b)
nota_hiato = true
for i,a in ipairs(fono) do
a[2] = fono2[i][1]
end
end
if not find(s1, "%s") then
local lsib = longitud_silabica(s1)
ls[lsib] = true
ac[acentuacion(s1b, lsib)] = true
if not vino_ayuda then
ss[s1] = true
else
ss[sombra(tit, s1, {})] = true
end
end
for _,f in ipairs(fono) do
rimas[rima(normalizar_fono(f[1]))] = true
end
for i,_ in ipairs(pron) do
args["pron"][k] = pron[i]
local fone = {}
for _,p in ipairs(fono[i]) do
insert(fone, generar_fone(p))
end
args["fone"][k] = fone
k = k + 1
if k > 9 then
break
end
end
if args["ayudanota"][j] then
args["fnota"][j] = {args["ayudanota"][j]}
end
j = j + 1
end
if not find(args["ayuda"][1], VOCAL) then
return
end
if #tit <= 1 then
return
end
args["d"] = keys_to_list(ss)
args["ls"] = keys_to_list(ls)
args["ac"] = keys_to_list(ac)
args["rima"] = keys_to_list(rimas)
if vino_ayuda then
return
end
-- prefijos
for _,pref in ipairs(PREFIJOS_BT) do
if args["dnota"][1] then
break
end
if find(tit, "^"..pref.."[lr]") then
trazar("es-prefijos")
end
end
for _,pref in ipairs(PREFIJOS_AEO) do
if args["dnota"][1] then
break
end
if find(tit, "^"..pref.."h?[iu]") then
trazar("es-prefijos")
end
end
for _,pref in ipairs(PREFIJOS_I) do
if args["dnota"][1] then
break
end
if find(tit, "^"..pref.."h?[aeouáéóú]") then
trazar("es-prefijos")
end
end
for _,pref in ipairs(PREFIJOS_NS) do
if args["dnota"][1] then
break
end
if find(tit, "^"..pref.."h?[aeiouáéíóú]") then
trazar("es-prefijos")
end
end
for _,pref in ipairs(PREFIJOS_R) do
if args["dnota"][1] then
break
end
if find(tit, "^"..pref.."h?[aeiouáéíóúr]") then -- en la r importa si hay otra r delante
trazar("es-prefijos")
end
end
-- hiatos
if nota_hiato and not args["dnota"][1] then
args["dnota"][1] = HIATOS_Y_DIPTONGOS
end
-- grafías
if find(args["ayuda"][1], "^p[stn]") or find(args["ayuda"][1], "^[mg]n") then
if #args["g"] == 0 then
local no_ps = args["ayuda"][1]:sub(2)
insert(args["g"], no_ps)
insert(args["gnota"], NO_PS)
end
elseif args["ayudaextra"][1] == "ocespacio" then
if not args["g"][1] then
if find(args["ayuda"][1], "^([%S]+[cs]im)[oa][%S]+$") then --decimoprimero, decimosegundo, etc. pero también decimaprimera (subestándar pero existe)
args["g"][1] = gsub(args["ayuda"][1], "^([%S]+[cs]im)[oa]([%S]+)([oa]s?)$", function(a, b, c) return gsub(a,"e([sc]im)","é%1")..c.." "..(b == "ctav" and "o"..b or b)..c end)
else
args["g"][1] = gsub(args["ayuda"][1], "^([%S]+[cs]im)[oa]s?%s+([%S]+)([oa]s?)$", function(a, b, c) return gsub(a, "[áéíóú]", quitar_tilde).."o"..b..c end)
end
args["gnota"][1] = ORDINALES_COMPUESTOS
end
elseif args["ayudaextra"][1] == "ocgénero" then
if not args["g"][1] then
args["g"][1] = gsub(args["ayuda"][1], "^(.-[eé][sc]im)([oa])(.-)$", function(a, b, c) return b == "o" and a.."a"..c or a.."o"..c end)
args["gnota"][1] = ORDINALES_COMPUESTOS
end
end
-- variantes
if args["d"][1] then
if find(args["d"][1], VOCAL_NO_TILDADA..SEPSIL.."fi"..SEPSIL.."to".."$") then
if not args["v"][1] then
args["v"][1] = gsub(args["ayuda"][1], "("..VOCAL_NO_TILDADA..")".."fito$", function(v) return tildar[v].."fito" end)
args["vnota"][1] = FITOVARIANTES
end
elseif find(args["d"][1], VOCAL_TILDADA..SEPSIL.."fi"..SEPSIL.."to".."$") then
if not args["v"][1] then
args["v"][1] = gsub(args["ayuda"][1], "("..VOCAL_TILDADA..")".."fito$", function(v) return quitar_tilde[v].."fito" end)
args["vnota"][1] = FITOVARIANTES
end
elseif find(args["d"][1], "[ií]"..SEPSIL.."?".."a"..SEPSIL.."co".."$") then
if not args["v"][1] then
args["v"][1] = gsub(args["ayuda"][1], "([ií]aco)$", function(v) return v == "iaco" and "íaco" or "iaco" end)
args["vnota"][1] = IACO
end
end
end
return
end
return export
4oyajsc1utllahsr3e8u0uotv548gff
amargoso
0
1028579
6110160
5927273
2026-04-27T22:12:10Z
Raos10
93688
transformado a variante, traducciones pasadas a amargo, formato, adición de: referencias, etimología
6110160
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v=amarroso|v2=agarroso}}
=== Etimología ===
{{etimología|sufijo|amargo|oso}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;1: {{variante|amargo}}, {{impropia|usada especialmente al hablar del sabor}}.<ref>{{DLC1884}}</ref><ref name='dle'>{{DLE}}</ref>
==== Locuciones ====
*[[escoba amargosa]]
==== Traducciones ====
{{trad-véase|1|amargo}}
== Referencias y notas ==
<references />
h82gm05nrkq3sugs2mfp891r325em5q
gradualismo
0
1029032
6110133
5748060
2026-04-27T21:06:34Z
Tmagc
158167
6110133
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|gradual|ismo}}.
=== {{sustantivo masculino|es}} ===
{{es.sust}}
;1 {{csem|biología}}: Doctrina que sostiene que la evolución es un proceso lento y paulatino sin mutaciones repentinas en la especie entre una generación y la otra.
;2 {{csem|política|economía}}: Doctrina que promueve cambios graduales por sobre las reformas abruptas.
{{antónimo|shock económico}}
=== Véase también ===
{{w}}
=== Traducciones ===
{{trad-arriba}}
<!-- formato: {{t+|idioma|<acepción#>|palabra|género}} p. ej. {{t+|fr|1|chose|f}} -->
{{trad-abajo}}
== Referencias y notas ==
<references />
bf8ymjvfwx63vdn59mb3j20ut3vaji8
Módulo:generar-pron/la
828
1031371
6110116
5924243
2026-04-27T18:37:42Z
Tmagc
158167
6110116
Scribunto
text/plain
-- PRONUNCIACIÓN DEL LATÍN
-- Reelaborado desde cero por Tmagc
local export = {}
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local keys_to_list = m_table.keysToList
local m_str = require("Módulo:string")
local u = m_str.char
local find = m_str.find
local sub = m_str.sub
local gsub = m_str.gsub
local gsubb = m_str.gsubb
local gmatch = m_str.gmatch
local gsubrep = m_str.gsubrep
local encodehtml = m_str.encodehtml
local m_str_avanzado = require("Módulo:string/avanzado")
local toNFD = m_str_avanzado.toNFD
local m_pron = require("Módulo:generar-pron")
local normalizar = m_pron.normalizar
local longitud_silabica = m_pron.longitud_silabica
local acentuacion = m_pron.acentuacion
local rima = m_pron.rima
local ac_primario = u(0x02C8)
local ac_secundario = u(0x02CC)
local acentos_ipa = ac_primario..ac_secundario
local divsil = "-"
local sepsil = "%."..acentos_ipa.."%"..divsil
local separador = "%s"..sepsil
local ACENTOS_IPA = "[" .. acentos_ipa .. "]"
local SEPSIL = "[" .. sepsil .. "]"
local SEPARADOR = "[" .. separador .. "]"
local FIN_PALABRA = "%f[%s%z]"
local INICIO_PALABRA = "%f[^%s%z]"
local FIN_SILABA = "%f[%s%z"..separador.."]"
local INICIO_SILABA = "%f[^%s%z"..separador.."]"
local macron = u(0x304) -- ̄
local breve = u(0x306) -- ̆
local dieresis = u(0x308) -- ̈
local NUC = "0"
local ATAQUE = "1"
local CODA = "2"
local fronteras = NUC..ATAQUE..CODA
local vocales = "aeiouyAEIOUYāēīōūȳĀĒĪŌŪȲáéíóúýàèìòùỳÁÉÍÓÚÝÀÈÌÒÙỲ"
local vocales_cortas = "aeiouyAEIOUYáéíóúýàèìòùỳÁÉÍÓÚÝÀÈÌÒÙỲäëïöüÿÄËÏÖÜŸ"
local vocales_tildadas = "áéíóúýàèìòùỳÁÉÍÓÚÝÀÈÌÒÙỲ"
local vocales_largas = "āēīōūȳĀĒĪŌŪȲ"
local vocales_con_dieresis = "äëïöüÿÄËÏÖÜŸ"
local VOCAL = "["..vocales.."]"
local VOCAL_CORTA = "["..vocales_cortas.."]"
local VOCAL_TILDADA = "["..vocales_tildadas.."]"
local VOCAL_LARGA = "["..vocales_largas.."]"
local VOCAL_CON_DIERESIS = "["..vocales_con_dieresis.."]"
local CONS = "[^"..vocales..separador..fronteras.."]"
local LETRA = "[^"..separador..fronteras.."]"
local quitar_tilde = {
["á"] = "a",
["é"] = "e",
["í"] = "i",
["ó"] = "o",
["ú"] = "u",
["ý"] = "y",
["Á"] = "A",
["É"] = "E",
["Í"] = "I",
["Ó"] = "O",
["Ú"] = "U",
["Ý"] = "Y",
["À"] = "A",
["È"] = "E",
["Ì"] = "I",
["Ò"] = "O",
["Ù"] = "U",
["Ỳ"] = "Y"
}
local dig_ipa = {["ae"] = "aɪ", ["au"] = "aw", ["ei"] = "ej", ["eu"] = "ew", ["oe"] = "oɪ", ["ou"] = "uː",
["ph"] = "pʰ", ["th"] = "tʰ", ["ch"] = "kʰ", ["rh"] = "rʰ",
["qw"] = "kʷ", ["gw"] = "ɡʷ", ["sw"] = "sʷ",}
local pron_abc = {"ā","bē","cē","dē","ē","ef","gē","hā","ī","kā","el","em","en","ō","pē","qū","er","es","tē","ū","ix","ī graeca","zēta"}
local cons_ending_prefixes = {
"a[bd]", "circum", "con", "dis", "ex", "inter", "in", "ob", "per",
"subter", "sub", "super", "tr[aā]ns"
}
local function silabear(s)
-- Some contracted ps end in apostrophes, which shouldn't be mistaken for stress placement.
s = gsub(s, "'", "")
local p = s
-- Separo los prefijos ab-, ad-, ob-, sub-, post- ante l y r
p = gsub(p, INICIO_PALABRA.."[Aa][bdBD]([lrLR])", NUC..CODA.."%1")
p = gsub(p, INICIO_PALABRA.."[oO][bB]([lrLR])", NUC..CODA.."%1")
p = gsub(p, INICIO_PALABRA.."[sS][uU][bB]([lrLR])", ATAQUE..NUC..CODA.."%1")
p = gsub(p, INICIO_PALABRA.."[pP][oO][sS][tT]([lrLR])", ATAQUE..NUC..CODA..CODA.."%1")
-- Separo prefijos que terminen en consonante con la i
for _, pref in ipairs(cons_ending_prefixes) do
p = gsub(p, INICIO_PALABRA.."(" .. pref .. ")i"..VOCAL, "%1"..ATAQUE..NUC)
end
-- sp-, st-, sl-, sm-, sn-
p = gsub(p, "s[lmnLMN]", function(x) return x:gsub(".", ATAQUE) end)
p = gsub(p, "s[cpt][lrLR]?", function(x) return x:gsub(".", ATAQUE) end)
-- Marco cons + h? + l/r? como ataque
p = gsub(p, "([bcdfgkptBCDFGKPT][hH]?[lrLR]?)("..VOCAL..")", function(x,y) return x:gsub(".",ATAQUE)..y end)
-- Marco cgkq + /w/ como ataque, tmb. S?? REVISAR
p = gsub(p, "[cgkqsCGKQS][uUvVwW]("..VOCAL..")", ATAQUE..ATAQUE.."%1")
-- Marco el resto de consonantes antes de vocal como ataque
p = gsub(p, CONS.."[hH]("..VOCAL..")", ATAQUE..ATAQUE.."%1")
p = gsub(p, CONS.."("..VOCAL..")", ATAQUE.."%1")
-- Marco V con valor de vocal cuando corresponda
p = gsubrep(p, "([bcdfgkptBCDFGKPT][hH]?[lrLR]?)[vV]("..CONS..")", function(x,y) return x:gsub(".",ATAQUE)..NUC..y end)
p = gsub(p, CONS.."[vV][iI]", ATAQUE..ATAQUE..NUC)
p = gsub(p, CONS.."[vV]", ATAQUE..NUC)
-- Marco I y U con valor de consonante cuando corresponda
p = gsubrep(p, "("..VOCAL..")[iIuU]("..VOCAL..")", "%1"..ATAQUE.."%2")
p = gsub(p, INICIO_PALABRA.."[iIuU]("..VOCAL..")", ATAQUE.."%1")
-- Marco todos los codas posibles
p = gsub(p, "("..VOCAL..")([lmnrLMNR][bcdfgkptBCDFGKPT][hH]?[sS]?)", function(x,y) return x..y:gsub(".",CODA) end)
p = gsub(p, "("..VOCAL..")([sS][kptKPT]?[hH]?[sS]?)", function(x,y) return x..y:gsub(".",CODA) end)
p = gsub(p, "("..VOCAL..")([klmnrpKLMNRP][sS]?)", function(x,y) return x..y:gsub(".",CODA) end)
p = gsub(p, "("..VOCAL..")([lL][mM]?)", function(x,y) return x..y:gsub(".",CODA) end)
p = gsub(p, "("..VOCAL..")([rR][lLmMnN]?)", function(x,y) return x..y:gsub(".",CODA) end)
-- Las s que queden van al ataque
p = gsub(p, "[sS]", ATAQUE)
-- Las consonantes que queden las pongo en el coda
p = gsub(p, CONS, CODA)
-- Hiatos explícitos
p = gsub(p, VOCAL..VOCAL_CON_DIERESIS, NUC..NUC)
-- Diptongos
p = gsub(p, "[ao]e", NUC..CODA)
p = gsub(p, "[ae]u", NUC..CODA)
p = gsub(p, "ei", NUC..CODA)
p = gsub(p, VOCAL, NUC)
local out = {}
local i = 1
local j = 1
local cprev = " "
for c in gmatch(p, ".") do
if (c == NUC or c == ATAQUE) and (cprev == CODA or cprev == NUC) then
out[i] = divsil
i = i + 1
end
out[i] = sub(s, j, j)
j = j + 1
i = i + 1
cprev = c
end
return concat(out)
end
local function acentuar(txt)
local palabras = {}
for p in gmatch(txt, "%S+") do
if p ~= "|" then
p = gsub(p, SEPSIL, ".")
local sust
p, sust = gsubb(p, INICIO_SILABA.."("..LETRA.."-)("..VOCAL_TILDADA..")", function (x,y)
return ac_primario..x..quitar_tilde[y]
end)
if not sust then
p, sust = gsubb(p, INICIO_SILABA..LETRA.."-"..VOCAL_LARGA..LETRA.."-"..SEPSIL..LETRA.."-"..FIN_PALABRA, ac_primario.."%0")
end
if not sust then
p, sust = gsubb(p, INICIO_SILABA..LETRA.."-"..SEPSIL..LETRA.."-"..SEPSIL..LETRA.."-"..FIN_PALABRA, ac_primario.."%0")
end
if not sust then
p = ac_primario..p
end
p = gsub(p, "%."..ac_primario, ac_primario)
insert(palabras, p)
end
end
return concat(palabras, " ")
end
local function generar_fono(p)
p = toNFD(p)
p = gsub(p, "["..dieresis..breve.."]", "")
-- v con valor de vocal
p = gsub(p, "[vw]"..FIN_SILABA, "u")
p = gsub(p, INICIO_SILABA.."v("..SEPSIL.."?"..CONS..")", "u%1")
p = gsub(p, "("..CONS..")v", "%1u")
-- quV, guV
p = gsub(p, "[ckq][wu](" .. VOCAL .. ")", "qw%1")
p = gsub(p, "gu("..VOCAL..")", "gw%1") -- nguV or initial guV
-- diptongos ascendentes
p = gsub(p, "i(" .. VOCAL .. ")", "j%1")
p = gsub(p, "u(" .. VOCAL .. ")", "w%1")
-- peius
p = gsub(p, "(" .. VOCAL .. ")("..SEPSIL.."j"..VOCAL..")", "%1j%2")
-- x
p = gsub(p, INICIO_PALABRA.."("..ACENTOS_IPA.."?)x", "%1s")
p = gsub(p, "x("..SEPSIL..")("..VOCAL..")", "k%1s%2")
p = gsub(p, "("..SEPSIL..")x("..VOCAL..")", "k%1s%2")
p = gsub(p, "x", "ks")
for x,y in pairs(dig_ipa) do
p = gsub(p, x, y)
end
p = gsub(p, macron, "ː")
-- Vowel length before nasal + fricative is allophonic
p = gsub(p, "([aeiouy])ː([mn]"..SEPSIL.."*[fs])", "%1%2")
p = gsub(p, "("..CONS..")h", "%1")
local cls = p
local ecl = p
cls = gsub(cls, "v", "w")
cls = gsub(cls, "[cq]", "k")
cls = gsub(cls, "[b]("..SEPSIL.."?[st])", "p%1") -- [[urbs]], [[obtingere]]
ecl = gsub(ecl, "[ao]ɪ", "e")
ecl = gsub(ecl, "g([ei])", "d͡ʒ%1")
ecl = gsub(ecl, "sc([ei])", "ʃ%1")
ecl = gsub(ecl, "s("..SEPSIL..")c([ei])", "ʃ%1ʃ%2")
ecl = gsub(ecl, "c([ei])", "t͡ʃ%1")
ecl = gsub(ecl, "[cq]", "k")
ecl = gsub(ecl, "ː", "")
ecl = gsub(ecl, "h", "")
ecl = gsub(ecl, "j("..SEPSIL.."j)", "%1")
ecl = gsub(ecl, "g("..SEPSIL..")d͡ʒ", "d%1d͡ʒ")
ecl = gsub(ecl, "("..VOCAL..")("..SEPSIL..")t(i"..VOCAL..")", "%1t%2t͡s%3")
ecl = gsub(ecl, "g("..SEPSIL..")n", "ɲ%1ɲ")
ecl = gsub(ecl, "ʰ", "")
ecl = gsub(ecl, "ʷ", "w")
return {{"clásico"}, {"eclesiástico"}}, {{encodehtml(cls)}, {encodehtml(ecl)}}
end
function export.procesar_pron_args(tit, args)
if #args["ayuda"] < 1 then
args["ayuda"][1] = tit
end
if #args["fone"][1] >= 1 or #args["fono"][1] >= 1 then
return
end
-- necesito hacer tablas aparte para eliminar duplicados
local rimas = {}
local ls = {}
local ss = {}
local ac = {}
if #tit == 1 then
if tit >= "a" and tit <= "z" then
args["ayuda"] = pron_abc[string.byte(tit) - 96]
args["tl"] = args["ayuda"]
elseif tit >= "A" and tit <= "Z" then
args["ayuda"] = pron_abc[string.byte(tit) - 64]
args["tl"] = args["ayuda"]
end
end
local A = #args["ayuda"]
local j = 1 -- indice de la ayuda
local k = 1 -- cantidad de pronunciaciones insertadas (máximo 9)
while k <= 9 and j <= A do
local norm = normalizar(tit, args["ayuda"][j], true, true)
local s1 = silabear(norm)
local s1b = acentuar(s1)
local pron, fono = generar_fono(s1b)
if not find(tit, "%s") then
ss[s1] = true
local lsib = longitud_silabica(s1)
ls[lsib] = true
ac[acentuacion(s1b, lsib)] = true
end
for i,_ in ipairs(pron) do
args["pron"][k] = pron[i]
args["fono"][k] = fono[i]
rimas[rima(fono[i][1])] = true
k = k + 1
if k > 9 then
break
end
end
if args["ayudanota"][j] then
args["fnota"][j] = {args["ayudanota"][j]}
end
j = j + 1
end
args["d"] = keys_to_list(ss)
args["ls"] = keys_to_list(ls)
args["ac"] = keys_to_list(ac)
args["rima"] = keys_to_list(rimas)
return args
end
return export
932hfq3lycf3pe0kbsv121wxvoyezi5
orín
0
1041077
6110173
5855171
2026-04-27T23:15:24Z
Tmagc
158167
6110173
wikitext
text/x-wiki
{{desambiguación|orin}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{etimología|la-vul|*aurīginis}}, {{etim|la|aerugo|alt=aerūginis}}.<ref>{{DCECH}}</ref>
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1: {{plm|óxido}} rojizo que se forma en la superficie del [[hierro]] por la acción del aire húmedo.<ref name="drae1925">{{DLE1925}}</ref>
{{ejemplo|Azules los comisarios<br>Los dientes de los moriscos<br>La aleta de las sirenas<br>Y el '''orín''' de San Francisco|c=canción|t=Azules|a=Juan Carlos Baglietto|f=2006}}
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Etimología 2 ===
{{etimología|masculino|orina|ín}}.
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1: {{variante rara|orina}}.<ref name="drae1925" />
{{uso|umep}}
{{wikisauro|orina}}
==== Traducciones ====
{{trad-véase|1|orina}}
== Referencias y notas ==
<references />
05b6lgly66w21me8g6uhnkdsh09r6kn
Usuario discusión:ArzhPleuzal
3
1042562
6110097
6106387
2026-04-27T16:42:30Z
Tmagc
158167
Sección nueva: /* Pruebas de edición */
6110097
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, ArzhPleuzal. Te damos la [[Wikcionario:Bienvenido, nuevo visitante|bienvenida a ''Wikcionario'']]. <small style="padding-left:150px">[[Wikcionario:Embajada|If you don't speak Spanish, please visit our Embassy]]</small>
Gracias por participar en el proyecto. Puedes encontrar algunas guías útiles aquí:
:<small>▶</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; si ya has editado en ''Wikipedia'', mira '''[[Wikcionario:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio.
:<small>▶</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''.
:<small>▶</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción;
:<small>▶</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles.
Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}.
{|
| Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(~~~~)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.png|right|Para firmar usa el botón indicado|link=]]
|}
Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable.<br />
Saludos muy cordiales, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 13:36 28 sep 2024 (UTC).</div>
== Pruebas de edición ==
<templatestyles src="metaplantilla de avisos/styles.css" /><table style="{{#if:s|border:2px solid #{{#switch:aviso|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:aviso
| 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:aviso
| 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">Hola, {{PAGENAME}}. Estamos encantados de que ''[[Wikcionario:Bienvenido, nuevo visitante|Wikcionario]]'' haya atraído tu atención, y de que te hayas interesado en aprender a editar en él. La prueba de edición que has hecho {{ #if: fiarse | en [[fiarse]] | }} funcionó; sin embargo, deberías tener en cuenta que el objetivo de este proyecto es desarrollar un diccionario fiable y completo que todos puedan consultar. Tu edición afectaba {{ #if: fiarse | al contenido | a una entrada }}, por lo que ha sido retirada. Si quieres aprender a editar, la [[Wikcionario:Zona de pruebas|zona de pruebas]] está a tu disposición. Estaríamos encantados de contar con tu colaboración constructiva en el proyecto; consulta el artículo sobre ''[[Wikcionario:Acerca de|Wikcionario]]'' y nuestra [[Ayuda:Cómo se edita una página|ayuda en línea]] para más información. Gracias.</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]]) 16:42 27 abr 2026 (UTC)
6kydtu06kxl0lfovz8z03i72twtp7n7
Módulo:generar-pron/ro
828
1042608
6110081
5893826
2026-04-27T13:52:04Z
Tmagc
158167
6110081
Scribunto
text/plain
-- RUMANO
-- Hecho por Tmagc, con algunos fragmentos de código extraídos 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 keys_to_list = m_table.keysToList
local m_str = require("Módulo:string")
local u = m_str.char
local sub = m_str.sub
local gsub = m_str.gsub
local gsubrep = m_str.gsubrep
local find = m_str.find
local encodehtml = m_str.encodehtml
local m_str_avanzado = require("Módulo:string/avanzado")
local toNFD = m_str_avanzado.toNFD
local m_pron = require("Módulo:generar-pron")
local normalizar = m_pron.normalizar
local longitud_silabica = m_pron.longitud_silabica
local acentuacion = m_pron.acentuacion
local rima = m_pron.rima
--CONVENCION: mayúscula para patrones encerrados entre corchetes, minúscula para todo lo demás
local ac_primario = u(0x02C8)
local ac_secundario = u(0x02CC)
local acentos_ipa = ac_primario..ac_secundario
local divsil = "-"
local sepsil = "%."..acentos_ipa..divsil
local separador = "%s"..sepsil
local ACENTOS_IPA = "[" .. acentos_ipa .. "]"
local SEPSIL = "[" .. sepsil .. "]"
local SEPARADOR = "[" .. separador .. "]"
local FIN_PALABRA = "%f[%s%z]"
local INICIO_PALABRA = "%f[^%s%z]"
local ag = u(0x0301) -- acute = ́
local gr = u(0x0300) -- grave = ̀
local circ = u(0x0302)
local breve = u(0x306)
local coma = u(0x326)
local TILDE = "[" .. ag .. gr .. "]"
local DIACR_NO_TILDE = "[" .. breve .. coma .. circ .. "]"
local vocales = "aăâeiîouyAĂÂEIÎOUYəɨ"
local consonantes = "bcdfghjklmnpqrsștțvwxzBCDFGHJKLMNPQRSȘTȚVWXZ"
local vocales_salvo_i = "aăâeîouyAĂÂEÎOUY"
local VOCAL = "["..vocales.."]"
local VOCAL_SALVO_I = "["..vocales_salvo_i.."]"
local CONS = "[^"..vocales..separador.."]"
local LETRA = "[^"..separador.."]"
local permitido = vocales..consonantes..ag..gr..separador.."·|%s" --asumo que limpié la puntuación
local function aislar_diacriticos(texto)
texto = toNFD(texto)
texto = gsubrep(texto, "("..TILDE..")("..DIACR_NO_TILDE..")", "%2%1")
texto = gsub(texto, "."..DIACR_NO_TILDE, {
["a" .. circ] = "â",
["A" .. circ] = "Â",
["i" .. circ] = "î",
["I" .. circ] = "Î",
["e" .. circ] = "î", -- forma vieja de escribir la i circ
["E" .. circ] = "Î", -- idem
["o" .. circ] = "î", -- idem
["O" .. circ] = "Î", -- idem
["u" .. circ] = "î", -- idem
["U" .. circ] = "Î", -- idem
["a" .. breve] = "ă",
["A" .. breve] = "Ă",
["e" .. breve] = "ă", -- versión antigua de la a con la breve
["E" .. breve] = "Ă", -- idem
["i" .. breve] = "i", -- variante antigua de la i, la reemplazo por una i común
["I" .. breve] = "I", -- idem
["u" .. breve] = "u", -- idem
["U" .. breve] = "U", -- idem
["s" .. coma] = "ș",
["S" .. coma] = "Ș",
["t" .. coma] = "ț",
["T" .. coma] = "Ț",
["d" .. coma] = "z",
["D" .. coma] = "Z",
["o" .. ag] = "oa", -- grafía vieja
["O" .. ag] = "OA"
})
return texto
end
local function silabear(p)
-- Juntar consonantes fricativas y oclusivas con l y con r. A ecepción de dl.
p = gsubrep(p, "("..LETRA..")([pbfvkctgPBFVKCTG][hH]?[lrLR]"..VOCAL..")", "%1"..divsil.."%2")
p = gsubrep(p, "("..LETRA..")([d][hH]?[rR]"..VOCAL..")", "%1"..divsil.."%2")
-- swing, switch, etc.
p = gsubrep(p, "("..LETRA..")([sS][wW]"..VOCAL..")", "%1"..divsil.."%2")
-- Juntar las ll y rr
p = gsubrep(p, "("..LETRA..")([lL][lL]"..VOCAL..")", "%1"..divsil.."%2")
p = gsubrep(p, "("..LETRA..")([rR][rR]"..VOCAL..")", "%1"..divsil.."%2")
-- Juntar ch y gh si predecen a una e o i
p = gsubrep(p, "("..LETRA..")([cCgG][hH][eEiI])", "%1"..divsil.."%2")
-- hiatos
p = gsub(p, "(" .. VOCAL .. ")(" .. TILDE .. ")(" .. VOCAL .. "+)", function(a,b,c) return a == c and a..b..c or a..b..divsil..c end)
p = gsub(p, "(" .. VOCAL_SALVO_I .. ")([iI]" .. VOCAL_SALVO_I .. "+)", "%1"..divsil.."%2")
p = gsub(p, "([aeoAEO])%1", "%1"..divsil.."%1")
p = gsub(p, "([aoAO])([eE])", "%1"..divsil.."%2")
-- resto de sílabas
p = gsubrep(p, "(" .. VOCAL .. TILDE .. "*" .. CONS .. "+)(" .. CONS .. VOCAL .. ")", "%1"..divsil.."%2")
p = gsubrep(p, "(" .. VOCAL .. TILDE .. "*" .. ")(" .. CONS .. VOCAL .. ")", "%1"..divsil.."%2")
-- lupi (unica sílaba cuando i final precedida de consonante)
p = gsub(p, divsil.."("..CONS.."+)i"..FIN_PALABRA, "%1i")
-- junto sílabas con consonantes solamente
p = gsubrep(p, INICIO_PALABRA.."("..CONS.."+)"..SEPSIL.."("..LETRA..")", "%1%2")
p = gsubrep(p, "("..LETRA..")"..SEPSIL.."("..CONS.."+)"..FIN_PALABRA, "%1%2")
return p
end
--Convierte los diacríticos a notación IPA
local function reemplazar_tildes(p)
p = " "..gsub(p, SEPSIL, ".").." "
p = gsub(p, "("..SEPARADOR..")("..LETRA.."-)"..TILDE, "%1"..ac_primario.."%2")
p = gsub(p, "%."..ac_primario, ac_primario)
return sub(p, 2, -2)
end
local mapeo_vocales = {
["a"]="a", ["e"]="e", ["i"]="i", ["o"]="o", ["u"]="u", ["ă"]="ə", ["â"]="ɨ", ["î"]="ɨ",
}
local mapeo_1 = {
["b"]="b", ["c"]="k", ["d"]="d",
["f"]="f", ["g"]="ɡ", ["h"]="h", ["j"]="ʒ",
["k"]="k", ["l"]="l", ["m"]="m", ["n"]="n",
["p"]="p", ["q"]="k", ["r"]="r", ["s"]="s", ["t"]="t",
["v"]="v", ["x"]="ks",
["ș"]="ʃ", ["ț"]="t͡s",
}
local mapeo_1b = {
["y"]="j",
["w"]="v"
}
local mapeo_2 = {
["ce"] = "t͡ʃe",
["ci"] = "t͡ʃi",
["che"] = "ke",
["chi"] = "ki",
["ge"] = "d͡ʒe",
["gi"] = "d͡ʒi",
["ghe"] = "ɡe",
["ghi"] = "ɡi",
}
local diptongos = {
["ai"] = "aj", ["au"] = "aw", ["ei"] = "ej",
["eu"] = "ew", ["ii"] = "ij",
["oi"] = "oj", ["ou"] = "ow", ["ui"] = "uj",
["uu"] = "uw", ["ăi"] = "əj", ["ău"] = "əw",
["âi"] = "ɨj", ["âu"] = "ɨw",
["ia"] = "ja", ["ie"] = "je", ["io"] = "jo",
["iu"] = "ju", ["ue"] = "we",
["ua"] = "wa", ["uă"] = "wə", ["uâ"] = "wɨ",
}
local triptongos = {
["eai"] = "eaj", ["eau"] = "eaw", ["eoa"] = "eoa",
["iai"] = "jaj", ["iau"] = "jaw", ["iei"] = "jej",
["eu"] = "jew", ["ioi"] = "joj", ["iou"] = "jow",
["oai"] = "oaj", ["uai"] = "waj", ["uau"] = "waw",
["uăi"] = "wəj", ["ioa"] = "joa"
}
local function generar_pron(texto)
for a,b in pairs(mapeo_2) do
texto = gsub(texto, a, b)
end
for a,b in pairs(mapeo_1) do
texto = gsub(texto, a, b)
end
for a,b in pairs(mapeo_1b) do
texto = gsub(texto, a, b)
end
for a,b in pairs(triptongos) do
texto = gsub(texto, a, b)
end
for a,b in pairs(diptongos) do
texto = gsub(texto, a, b)
end
for a,b in pairs(mapeo_vocales) do
texto = gsub(texto, a, b)
end
texto = gsub(texto, "("..SEPSIL..")ks", "k%1s")
-- restos de la x
texto = gsub(texto, "k("..SEPSIL..")ss", "k%1s")
texto = gsub(texto, INICIO_PALABRA.."ks", "s")
texto = gsub(texto, "("..SEPSIL..")ij", "%1ji")
texto = gsub(texto, "([bkdfɡhʒlmnprstvzʃw])[ij]"..FIN_PALABRA, "%1ʲ") -- [[lupi]]
local fono = texto
return {encodehtml(fono)}
end
function export.procesar_pron_args(tit, args)
local vino_ayuda = true
if not args["ayuda"][1] then
vino_ayuda = false
args["ayuda"][1] = tit
end
if #args["fone"][1] >= 1 or #args["fono"][1] >= 1 then
return
end
local rimas, ls, ac, ss = {}, {}, {}, {}
local A = #args["ayuda"]
local j = 1 -- indice de la ayuda
local k = 1 -- cantidad de pronunciaciones insertadas (máximo 9)
while k <= 9 and j <= A do
local norm = normalizar(tit, args["ayuda"][j], true, true)
norm = aislar_diacriticos(norm)
local s1 = silabear(norm)
local s1b = reemplazar_tildes(s1)
local fono = generar_pron(s1b)
args["fono"][k] = fono
if vino_ayuda and args["ayuda"][j] then
args["fgraf"][k] = {args["ayuda"][j]}
end
if not find(tit, "%s") then
ss[s1] = true
local lsib = longitud_silabica(s1)
ls[lsib] = true
if find(fono[1], ACENTOS_IPA) then
ac[acentuacion(fono[1], lsib)] = true
rimas[rima(fono[1])] = true
end
end
k = k + 1
j = j + 1
end
args["d"] = keys_to_list(ss)
args["ls"] = keys_to_list(ls)
args["ac"] = keys_to_list(ac)
args["rima"] = keys_to_list(rimas)
return
end
return export
os7gpyh31ae12evxly3cpr75u48h7rx
probation
0
1044161
6110085
5855537
2026-04-27T15:18:50Z
Tmagc
158167
6110085
wikitext
text/x-wiki
{{desambiguación|}}<!-- si hay términos que se diferencian de este solo en una tilde o diacrítico -->
== {{lengua|es}} ==
{{pron-graf|ayuda=probeishon}}
=== Etimología ===
{{etimología|en|probation}}.
==== {{sustantivo femenino|es}} ====
{{es.sust|s=s}}
;1 {{csem|derecho}}: {{plm|suspensión del juicio a prueba}}.
{{uso|coloquial}}
{{ámbito|Argentina}}
==== 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}}
== {{lengua|en}} ==
{{pron-graf|leng=en
|fono=ˌpɹoʊˈbeɪʃən|audio=LL-Q1860 (eng)-Vininn126-probation.wav|pron=Estados Unidos
|2fono=ˌpɹə(ʊ)ˈbeɪʃən|2audio=|2pron=Reino Unido
}}
=== Etimología ===
{{etimología|leng=en|enm|probacioun}}, y este {{etim|frm|leng=en|probation}} y este {{etim|fro|leng=en|probacion}} y este {{etim|la|leng=en|probatio}}.
==== {{sustantivo|en}} ====
{{en.sust|ci}}
;1: {{plm|período}} de prueba.
;2 {{csem|derecho|leng=en}}: {{plm|suspensión del juicio a prueba}}.
==== Véase también ====
{{w|leng=en}}
<!-- 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 />
e1e0t6ftq2tck5ueo26362r43l7wq0q
meter el pecho
0
1052012
6110125
5707907
2026-04-27T19:42:00Z
Tmagc
158167
6110125
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
==== {{locución verbal|es|transitiva}} ====
;1: {{plm|intimidar}}.<ref>{{referencia|c=pagina|t=Mini guía para entender el raro español de los argentinos desde la Puna hasta la Patagonia|sitio=Matador Network|u=https://matadornetwork.com/es/mini-guia-para-raro-espanol-de-argentinos-puna-hasta-patagonia/|a=Silvana Spinelli|f=2016-7-20}}</ref>
{{uso|coloquial}}
{{ámbito|Mendoza|Córdoba}}
==== Conjugación ====
{{es.v}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
obgm6x50zp480nya7r17kjdn7ji21i7
Módulo:flex/la
828
1059810
6110099
6076998
2026-04-27T16:51:33Z
Tmagc
158167
6110099
Scribunto
text/plain
-- FLEXIÓN DEL LATÍN
-- Adaptado desde en.wikt por 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_str_avanzado = require("Módulo:string/avanzado")
local toNFD = m_str_avanzado.toNFD
local toNFC = m_str_avanzado.toNFC
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_tabla = m_flex.renderizar_tabla
local renderizar_encabezado = m_flex.renderizar_encabezado
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 MACRON = u(0x304)
local BREVE = u(0x306)
local DIAER = u(0x308)
local DBREVE = u(0x361)
local ACCENT = "[" .. MACRON .. BREVE .. DIAER .. DBREVE .. "]"
local VOWEL = "[aæeioœuyAÆEIOŒUY]"
local cons_to_vowel = {
["j"] = "i", ["J"] = "I",
["v"] = "u", ["V"] = "U",
}
local function normalizar_enlace(x)
x = toNFD(x)
x = gsub(x, ACCENT, "")
return toNFC(x)
end
local function join(a, b)
a, b = toNFD(a), toNFD(b)
-- If the first part ends in "j" or "v", convert it to "i" or "u" unless
-- the second part begins with a vowel.
if not match(b, "^" .. VOWEL) then
a = gsub(a, "[jvJV]$", cons_to_vowel)
end
return toNFC(a..b)
end
local function add_form(decl, slot, stem, suf)
if type(slot) == "string" then
slot = {slot}
end
for _,slt in ipairs(slot) do
if type(decl[slt]) == "nil" or decl[slt] == "" then
decl[slt] = {}
elseif type(decl[slt]) == "string" then
decl[slt] = {decl[slt]}
end
insert_if_not(decl[slt], join(stem, suf))
end
end
local function remove_forms(decl, forms)
for form,_ in pairs(decl) do
for _,rx in ipairs(forms) do
if form:find(rx) then
forms[form] = {}
break
end
end
end
end
local function merge_forms(forms, forms2, keys)
keys = keys or forms2
for key,arr in pairs(keys) do
if not forms[key] then
forms[key] = {}
end
if type(forms2[key]) == "string" then
insert_if_not(forms[key], forms2[key])
elseif type(forms2[key]) == "table" then
for _,a in ipairs(forms2[key]) do
insert_if_not(forms[key], a)
end
end
end
end
local noun_decl = {}
noun_decl["0"] = function(data, args)
local forms = data.forms
local stem = args[1]
insert_if_not(data.title, "indeclinable")
insert_if_not(data.categories, "LA:Sustantivos indeclinables")
forms["nom_sg"] = stem
forms["gen_sg"] = stem
forms["dat_sg"] = stem
forms["acc_sg"] = stem
forms["abl_sg"] = stem
forms["voc_sg"] = stem
forms["nom_pl"] = stem
forms["gen_pl"] = stem
forms["dat_pl"] = stem
forms["acc_pl"] = stem
forms["abl_pl"] = stem
forms["voc_pl"] = stem
-- with locative
if data.loc then
forms["loc_sg"] = stem
forms["loc_pl"] = stem
end
end
local function alt_gen_pl_in_um(stem, forms, types, subtitles, i_stem)
if types.genplum then
add_form(forms, "gen_pl", stem, (i_stem and "i" or "") .. "um")
elseif types.not_genplum then
-- FIXME: not a contraction.
-- insert_if_not(subtitles, "uncontracted genitive plural")
end
end
noun_decl["1"] = function(data, args)
local forms, types, loc, subtitles = data.forms, data.types, data.loc, data.subtitles
local stem = args[1]
-- normal 1st
local nom_sg = "a"
local gen_loc_sg = "ae"
local dat_sg = "ae"
local acc_sg = "am"
local abl_sg = "ā"
local voc_sg = "a"
local nom_voc_pl = "ae"
local gen_pl = "ārum"
local dat_abl_loc_pl = "īs"
local acc_pl = "ās"
insert_if_not(data.title, "primera declinación")
insert_if_not(data.categories, "LA:Sustantivos de la primera declinación")
-- ām
if types.am then
nom_sg = "ām"
acc_sg = "ām"
abl_sg = {"ām", "ā"}
voc_sg = "ām"
-- all Greek
elseif types.Greek then
insert_if_not(data.title, "griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
--Greek Ma
if types.Ma then
nom_sg = "ās"
acc_sg = "ān"
voc_sg = "ā"
-- Greek Me
elseif types.Me then
nom_sg = "ēs"
acc_sg = "ēn"
abl_sg = "ē"
voc_sg = "ē"
-- Greek
else
nom_sg = "ē"
gen_loc_sg = "ēs"
acc_sg = "ēn"
abl_sg = "ē"
voc_sg = "ē"
end
end
-- ābus
if types.abus then
dat_abl_loc_pl = "ābus"
end
add_form(forms, "nom_sg", stem, nom_sg)
add_form(forms, "gen_sg", stem, gen_loc_sg)
add_form(forms, "dat_sg", stem, dat_sg)
add_form(forms, "acc_sg", stem, acc_sg)
add_form(forms, "abl_sg", stem, abl_sg)
add_form(forms, "voc_sg", stem, voc_sg)
add_form(forms, {"nom_pl", "voc_pl"}, stem, nom_voc_pl)
add_form(forms, "gen_pl", stem, gen_pl)
add_form(forms, {"dat_pl", "abl_pl"}, stem, dat_abl_loc_pl)
add_form(forms, "acc_pl", stem, acc_pl)
-- with locative
if loc then
add_form(forms, "loc_sg", stem, gen_loc_sg)
add_form(forms, "loc_pl", stem, dat_abl_loc_pl)
end
end
noun_decl["2"] = function(data, args)
local forms, types, subtitles, notes = data.forms, data.types, data.subtitles, data.notes
local stem1, stem2 = args[1], args[2]
insert_if_not(data.title, "segunda declinación")
insert_if_not(data.categories, "LA:Sustantivos de la segunda declinación")
-- normal 2nd
forms["nom_sg"] = stem1 .. "us"
forms["gen_sg"] = stem1 .. "ī"
forms["dat_sg"] = stem1 .. "ō"
forms["acc_sg"] = stem1 .. "um"
forms["abl_sg"] = stem1 .. "ō"
forms["voc_sg"] = stem1 .. "e"
forms["nom_pl"] = stem1 .. "ī"
forms["gen_pl"] = stem1 .. "ōrum"
forms["dat_pl"] = stem1 .. "īs"
forms["acc_pl"] = stem1 .. "ōs"
forms["abl_pl"] = stem1 .. "īs"
forms["voc_pl"] = stem1 .. "ī"
-- all neuter
if types.N then
forms["nom_sg"] = stem1 .. "um"
forms["voc_sg"] = stem1 .. "um"
forms["nom_pl"] = stem1 .. "a"
forms["acc_pl"] = stem1 .. "a"
forms["voc_pl"] = stem1 .. "a"
-- neuter ium
if types.ium then
forms["nom_sg"] = stem1 .. "ium"
forms["gen_sg"] = {stem1 .. "iī", stem1 .. "ī{†}"}
forms["dat_sg"] = stem1 .. "iō"
forms["acc_sg"] = stem1 .. "ium"
forms["abl_sg"] = stem1 .. "iō"
forms["voc_sg"] = stem1 .. "ium"
forms["nom_pl"] = stem1 .. "ia"
forms["gen_pl"] = stem1 .. "iōrum"
forms["dat_pl"] = stem1 .. "iīs"
forms["acc_pl"] = stem1 .. "ia"
forms["abl_pl"] = stem1 .. "iīs"
forms["voc_pl"] = stem1 .. "ia"
-- neuter us, plural a
elseif types.a then
forms["nom_sg"] = stem1 .. "us"
forms["acc_sg"] = stem1 .. "us"
forms["voc_sg"] = stem1 .. "us"
forms["nom_pl"] = stem1 .. "a"
forms["acc_pl"] = stem1 .. "a"
forms["voc_pl"] = stem1 .. "a"
-- -vom (aevom, etc.)
elseif types.vom then
forms["nom_sg"] = stem1 .. "om"
forms["acc_sg"] = stem1 .. "om"
forms["voc_sg"] = stem1 .. "om"
-- neuter Greek in -os (cētos)
elseif types.Greek and types.us then
insert_if_not(data.title, "griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = stem1 .. "os"
forms["acc_sg"] = stem1 .. "os"
forms["voc_sg"] = stem1 .. "os"
forms["nom_pl"] = stem1 .. "ē"
forms["gen_pl"] = stem1 .. "ōn"
forms["acc_pl"] = stem1 .. "ē"
forms["voc_pl"] = stem1 .. "ē"
-- neuter Greek
elseif types.Greek then
insert_if_not(data.title, "griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = stem1 .. "on"
forms["acc_sg"] = stem1 .. "on"
forms["voc_sg"] = stem1 .. "on"
-- neuter us
elseif types.us then
forms["nom_sg"] = stem1 .. "us"
forms["acc_sg"] = stem1 .. "us"
forms["voc_sg"] = stem1 .. "us"
forms["nom_pl"] = stem1 .. "ī"
forms["acc_pl"] = stem1 .. "ōs"
forms["voc_pl"] = stem1 .. "ī"
end
-- er
elseif types.er then
forms["nom_sg"] = stem1
forms["gen_sg"] = stem2 .. "ī"
forms["dat_sg"] = stem2 .. "ō"
forms["acc_sg"] = stem2 .. "um"
forms["abl_sg"] = stem2 .. "ō"
forms["voc_sg"] = stem1
forms["nom_pl"] = stem2 .. "ī"
forms["gen_pl"] = stem2 .. "ōrum"
forms["dat_pl"] = stem2 .. "īs"
forms["acc_pl"] = stem2 .. "ōs"
forms["abl_pl"] = stem2 .. "īs"
forms["voc_pl"] = stem2 .. "ī"
-- ius
elseif types.ius then
forms["nom_sg"] = stem1 .. "ius"
forms["gen_sg"] = {stem1 .. "iī", stem1 .. "ī{†}"}
forms["dat_sg"] = stem1 .. "iō"
forms["acc_sg"] = stem1 .. "ium"
forms["abl_sg"] = stem1 .. "iō"
if types.voci then
-- Only for proper names and fīlius, genius
forms["voc_sg"] = stem1 .. "ī"
else
forms["voc_sg"] = stem1 .. "ie"
end
forms["nom_pl"] = stem1 .. "iī"
forms["gen_pl"] = stem1 .. "iōrum"
forms["dat_pl"] = stem1 .. "iīs"
forms["acc_pl"] = stem1 .. "iōs"
forms["abl_pl"] = stem1 .. "iīs"
forms["voc_pl"] = stem1 .. "iī"
-- -vos (servos, etc.)
elseif types.vos then
forms["nom_sg"] = stem1 .. "os"
forms["acc_sg"] = stem1 .. "om"
-- Greek
elseif types.Greek then
insert_if_not(data.title, "griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = stem1 .. "os"
forms["acc_sg"] = stem1 .. "on"
if data.num == "pl" then
forms["nom_pl"] = stem1 .. "oe"
forms["voc_pl"] = stem1 .. "oe"
else
forms["nom_pl"] = {stem1 .. "ī", stem1 .. "oe"}
forms["voc_pl"] = {stem1 .. "ī", stem1 .. "oe"}
end
elseif types.not_Greek then
insert_if_not(data.title, "no griego")
end
-- with -um genitive plural
alt_gen_pl_in_um(stem2, forms, types, subtitles, types.ius or types.ium)
-- with locative
if data.loc then
if types.ius or types.ium then
forms["loc_sg"] = stem2 .. "iī"
forms["loc_pl"] = stem2 .. "iīs"
else
forms["loc_sg"] = stem2 .. "ī"
forms["loc_pl"] = stem2 .. "īs"
end
end
end
local acc_sg_i_stem_subtypes = {
acc_im = {
-- amussis, basis, buris, cucumis, gummis, mephitis, paraphrasis, poesis, ravis, sitis, tussis, (vis) [abl -ī];
-- cannabis, senapis, sinapis [abl -e, -ī]
acc_sg = {"im"},
title = {"accusative singular in ''-im''"},
},
acc_im_in = {
-- cities, rivers, gods, e.g. Bilbilis, Syrtis, Tiberis, Anubis, Osiris [abl -ī];
-- Baetis, Tigris [acc -e, -ī]
acc_sg = {"im", "in"},
title = {"accusative singular in ''-im'' or ''-in''"},
},
acc_im_in_em = {
-- e.g. tigris, river Līris
acc_sg = {"im", "in", "em"},
title = {"accusative singular in ''-im'', ''-in'' or ''-em''"},
},
acc_im_em = {
acc_sg = {"im", "em"},
title = {"accusative singular in ''-im'' or ''-em''"},
},
acc_im_occ_em = {
-- febris, pelvis, puppis, restis, securis, turris [abl -ī, -e]
acc_sg = {"im", "em"},
title = {"accusative singular in ''-im'' or occasionally ''-em''"},
},
acc_em_im = {
-- aqualis, clavis, lens, navis [abl -e, -ī];
-- cutis, restis [abl -e]
acc_sg = {"em", "im"},
title = {"accusative singular in ''-em'' or ''-im''"},
},
}
local abl_sg_i_stem_subtypes = {
abl_i = {
-- amussis, basis, buris, cucumis, gummis, mephitis, paraphrasis, poesis, ravis, sitis, tussis, (vis) [acc -im];
-- cities, rivers, gods, e.g. Bilbilis, Syrtis, Tiberis, Anubis, Osiris [acc -im or -in];
-- canalis "water pipe", months in -is or -er, nouns originally i-stem adjectives such as aedilis, affinis, bipennis, familiaris, sodalis, volucris, etc. [acc -em]
abl_sg = {"ī"},
title = {"ablative singular in ''-ī''"},
},
abl_i_e = {
-- febris, pelvis, puppis, restis, securis, turris [acc -im, -em]
abl_sg = {"ī", "e"},
title = {"ablative singular in ''-ī'' or ''-e''"},
},
abl_e_i = {
-- cannabis, senapis, sinapis [acc -im];
-- Baetis, Tigris [acc -im, -in];
-- aqualis, clavis, lens, navis [acc -em, -im];
-- finis, mugilis, occiput, pugil, rus, supellex, vectis [acc -em]
abl_sg = {"e", "ī"},
title = {"ablative singular in ''-e'' or ''-ī''"},
},
abl_e_occ_i = {
-- amnis, anguis, avis, civis, classis, fustis, ignis, imber, orbis, pars, postis, sors, unguis, vesper [acc -em]
abl_sg = {"e", "ī"},
title = {"ablative singular in ''-e'' or occasionally ''-ī''"},
},
}
local function extract_stem(form, ending)
local base = match(form, "^(.*)" .. ending .. "$")
if not base then
error("Form " .. form .. " should end in -" .. ending)
end
return base
end
local function count_vowels(stem)
return select(2, toNFD(stem):gsub("[aeiouyAEIOUY]", ""))
end
noun_decl["3"] = function(data, args)
local forms, types, subtitles, notes = data.forms, data.types, data.subtitles, data.notes
local stem1, stem2 = args[1], args[2]
-- local function non_i_stem_type()
-- return (count_vowels(stem1) > count_vowels(stem2) and "parisyllabic" or "imparisyllabic") .. " non-i-stem"
-- end
insert_if_not(data.title, "tercera declinación")
insert_if_not(data.categories, "LA:Sustantivos de la tercera declinación")
--normal 3rd
forms["nom_sg"] = stem1
forms["gen_sg"] = stem2 .. "is"
forms["dat_sg"] = stem2 .. "ī"
forms["acc_sg"] = stem2 .. "em"
forms["abl_sg"] = stem2 .. "e"
forms["voc_sg"] = stem1
forms["nom_pl"] = stem2 .. "ēs"
forms["gen_pl"] = stem2 .. "um"
forms["dat_pl"] = stem2 .. "ibus"
forms["acc_pl"] = stem2 .. "ēs"
forms["abl_pl"] = stem2 .. "ibus"
forms["voc_pl"] = stem2 .. "ēs"
local acc_sg_i_stem_subtype = false
local not_acc_sg_i_stem_subtype = false
for subtype, _ in pairs(types) do
if acc_sg_i_stem_subtypes[subtype] then
acc_sg_i_stem_subtype = true
break
end
end
for acc_sg_subtype, _ in pairs(acc_sg_i_stem_subtypes) do
if types["not_" .. acc_sg_subtype] then
not_acc_sg_i_stem_subtype = true
break
end
end
local abl_sg_i_stem_subtype = false
local not_abl_sg_i_stem_subtype = false
for subtype, _ in pairs(types) do
if abl_sg_i_stem_subtypes[subtype] then
abl_sg_i_stem_subtype = true
break
end
end
for abl_sg_subtype, _ in pairs(abl_sg_i_stem_subtypes) do
if types["not_" .. abl_sg_subtype] then
not_abl_sg_i_stem_subtype = true
break
end
end
-- all Greek
if types.Greek then
insert_if_not(data.title, "griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
-- Greek er
if types.er then
stem1 = extract_stem(stem1, "ēr")
forms["nom_sg"] = stem1 .. "ēr"
forms["gen_sg"] = stem1 .. "eris"
forms["dat_sg"] = stem1 .. "erī"
forms["acc_sg"] = {stem1 .. "era", stem1 .. "erem"}
forms["abl_sg"] = stem1 .. "ere"
forms["voc_sg"] = stem1 .. "ēr"
forms["nom_pl"] = stem1 .. "erēs"
forms["gen_pl"] = stem1 .. "erum"
forms["dat_pl"] = stem1 .. "eribus"
forms["acc_pl"] = stem1 .. "erēs"
forms["abl_pl"] = stem1 .. "eribus"
forms["voc_pl"] = stem1 .. "erēs"
-- Greek on
elseif types.on then
stem1 = extract_stem(stem1, "ōn")
forms["nom_sg"] = stem1 .. "ōn"
forms["gen_sg"] = {stem1 .. "ontis", stem1 .. "ontos"}
forms["dat_sg"] = stem1 .. "ontī"
forms["acc_sg"] = stem1 .. "onta"
forms["abl_sg"] = stem1 .. "onte"
forms["voc_sg"] = stem1 .. "ōn"
forms["nom_pl"] = stem1 .. "ontēs"
forms["gen_pl"] = {stem1 .. "ontum", stem1 .. "ontium"}
forms["dat_pl"] = stem1 .. "ontibus"
forms["acc_pl"] = {stem1 .. "ontēs", stem1 .. "ontās"}
forms["abl_pl"] = stem1 .. "ontibus"
forms["voc_pl"] = stem1 .. "ontēs"
-- Greek i-stem
elseif types.I then
forms["gen_sg"] = {stem2 .. "is", stem2 .. "eōs", stem2 .. "ios"}
forms["acc_sg"] = {stem2 .. "im", stem2 .. "in", stem2 .. "em{MED}"}
forms["abl_sg"] = {stem2 .. "ī", stem2 .. "e{MED}"}
forms["voc_sg"] = {stem2 .. "is", stem2 .. "i"}
forms["nom_pl"] = {stem2 .. "ēs", stem2 .. "eis"}
forms["gen_pl"] = {stem2 .. "ium", stem2 .. "eōn"}
forms["acc_pl"] = {stem2 .. "ēs", stem2 .. "eis"}
forms["voc_pl"] = {stem2 .. "ēs", stem2 .. "eis"}
if types.poetic_esi then
forms["dat_pl"] = {stem2 .. "ibus", stem2 .. "esi{L}"}
forms["abl_pl"] = {stem2 .. "ibus", stem2 .. "esi{L}"}
end
-- normal Greek
else
forms["gen_sg"] = stem2 .. "os"
if match(toNFD(stem2), "[yY]" .. ACCENT .. "*$") then
forms["acc_sg"] = stem2 .. "n"
else
forms["acc_sg"] = stem2 .. "a"
end
forms["nom_pl"] = stem2 .. "es"
forms["acc_pl"] = stem2 .. "as"
forms["voc_pl"] = stem2 .. "es"
if match(toNFD(stem1), "[iyIY]" .. ACCENT .. "*s$") then
-- Per Hiley, words in -is and -ys have a poetic vocative
-- without the -s, but otherwise the vocative is the same
-- as the nominative.
forms["voc_sg"] = {stem1, (stem1:gsub("s$", "")).."{L}"}
end
end
elseif types.not_Greek then
insert_if_not(data.title, "no griego")
end
-- polis
if types.polis then
stem1 = extract_stem(stem1, "polis")
insert_if_not(data.title, "parcialmente griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = stem1 .. "polis"
forms["gen_sg"] = stem1 .. "polis"
forms["dat_sg"] = stem1 .. "polī"
forms["acc_sg"] = {stem1 .. "polim", stem1 .. "polin"}
forms["abl_sg"] = stem1 .. "polī"
forms["voc_sg"] = {stem1 .. "polis", stem1 .. "polī"}
end
-- all neuter
if types.N then
forms["acc_sg"] = stem1
-- neuter I stem
if types.I then
-- pure variety
if types.pure then
forms["abl_sg"] = stem2 .. "ī"
forms["nom_pl"] = stem2 .. "ia"
forms["gen_pl"] = stem2 .. "ium"
forms["acc_pl"] = stem2 .. "ia"
forms["voc_pl"] = stem2 .. "ia"
-- non-pure variety (rare)
else
forms["nom_pl"] = stem2 .. "a"
forms["gen_pl"] = {stem2 .. "ium", stem2 .. "um"}
forms["acc_pl"] = stem2 .. "a"
forms["voc_pl"] = stem2 .. "a"
end
-- normal neuter
else
forms["nom_pl"] = stem2 .. "a"
forms["acc_pl"] = stem2 .. "a"
forms["voc_pl"] = stem2 .. "a"
end
-- I stem
elseif types.I or acc_sg_i_stem_subtype or abl_sg_i_stem_subtype then
forms["gen_pl"] = stem2 .. "ium"
-- Per Allen and Greenough, Hiley and others, the acc_pl in -īs
-- applied originally to all i-stem nouns, and was current as an
-- alternative form up through Caesar.
forms["acc_pl"] = {stem2 .. "ēs", stem2 .. "īs"}
-- pure variety
if types.pure then
forms["acc_sg"] = stem2 .. "im"
forms["abl_sg"] = stem2 .. "ī"
forms["nom_pl"] = stem2 .. "īs"
forms["acc_pl"] = stem2 .. "īs"
forms["voc_pl"] = stem2 .. "īs"
end
local num = data.num
for subtype, _ in pairs(types) do
local acc_sg_i_stem_props = acc_sg_i_stem_subtypes[subtype]
if acc_sg_i_stem_props then
forms["acc_sg"] = {}
for _, ending in ipairs(acc_sg_i_stem_props.acc_sg) do
insert_if_not(forms["acc_sg"], stem2 .. ending)
end
-- if num ~= "pl" then
-- for _, t in ipairs(acc_sg_i_stem_props.title) do
-- insert_if_not(subtitles, t)
-- end
-- end
break
end
end
-- FIXME: needs to be done for neuter nouns as well.
for subtype, _ in pairs(types) do
local abl_sg_i_stem_props = abl_sg_i_stem_subtypes[subtype]
if abl_sg_i_stem_props then
forms["abl_sg"] = {}
for _, ending in ipairs(abl_sg_i_stem_props.abl_sg) do
insert_if_not(forms["abl_sg"], stem2 .. ending)
end
-- if num ~= "pl" then
-- for _, t in ipairs(abl_sg_i_stem_props.title) do
-- insert_if_not(subtitles, t)
-- end
-- end
break
end
end
end
-- with locative
if data.loc then
-- As far as I can tell, in general both dative singular and
-- ablative singular could be used for the third-declension locative,
-- with different time periods preferring different forms.
-- http://dcc.dickinson.edu/grammar/latin/3rd-declension-locative-case
-- mentions rūrī along with either Carthāginī or Carthāgine.
-- Wikipedia in https://en.wikipedia.org/wiki/Locative_case#Latin
-- says this:
--
-- In archaic times, the locative singular of third declension nouns
-- was still interchangeable between ablative and dative forms, but in
-- the Augustan Period the use of the ablative form became fixed.
-- Therefore, both forms "rūrī" and "rūre" may be encountered.
--
-- Lewis and Short confirm this.
local loc_sg = forms["dat_sg"]
if type(loc_sg) == "table" then
loc_sg = deep_copy(loc_sg)
else
loc_sg = {loc_sg}
end
local abl_sg = forms["abl_sg"]
if type(abl_sg) == "table" then
for _, form in ipairs(abl_sg) do
insert_if_not(loc_sg, deep_copy(form))
end
else
insert_if_not(loc_sg, abl_sg)
end
forms["loc_sg"] = loc_sg
forms["loc_pl"] = deep_copy(forms["abl_pl"])
--The following is what we used to have, but I simply cannot believe it.
--if types.Greek and not types.s then
-- forms["loc_pl"] = stem2 .. "ēs"
--end
end
end
noun_decl["4"] = function(data, args)
local forms, types, subtitles, notes = data.forms, data.types, data.subtitles, data.notes
local stem = args[1]
insert_if_not(data.title, "cuarta declinación")
insert_if_not(data.categories, "LA:Sustantivos de la cuarta declinación")
-- normal 4th
forms["nom_sg"] = stem .. "us"
forms["gen_sg"] = stem .. "ūs"
forms["dat_sg"] = stem .. "uī"
forms["acc_sg"] = stem .. "um"
forms["abl_sg"] = stem .. "ū"
forms["voc_sg"] = stem .. "us"
forms["nom_pl"] = stem .. "ūs"
forms["gen_pl"] = stem .. "uum"
forms["dat_pl"] = stem .. "ibus"
forms["acc_pl"] = stem .. "ūs"
forms["abl_pl"] = stem .. "ibus"
forms["voc_pl"] = stem .. "ūs"
if types.echo then
for slot in pairs(forms) do
if slot ~= "gen_sg" then
forms[slot] = stem .. "ō"
end
end
add_form(forms, "acc_sg", stem, "ōn")
elseif types.Callisto then
for slot in pairs(forms) do
if slot ~= "gen_sg" then
forms[slot] = stem .. "ō"
end
end
end
-- neuter
if types.N then
forms["nom_sg"] = stem .. "ū̆{?}"
forms["gen_sg"] = {stem .. "ūs{C}", stem .. "ū{S}"}
forms["dat_sg"] = {stem .. "uī{C}", stem .. "ū{S}"}
forms["acc_sg"] = stem .. "ū̆{?}"
forms["voc_sg"] = stem .. "ū̆{?}"
forms["nom_pl"] = stem .. "ua"
forms["acc_pl"] = stem .. "ua"
forms["voc_pl"] = stem .. "ua"
end
-- ubus
if types.ubus then
forms["dat_pl"] = stem .. "ubus"
forms["abl_pl"] = stem .. "ubus"
end
-- with locative
if data.loc then
forms["loc_sg"] = forms["abl_sg"]
forms["loc_pl"] = forms["abl_pl"]
end
end
noun_decl["5"] = function(data, args)
local forms, types = data.forms, data.types
local stem = args[1]
insert_if_not(data.title, "quinta declinación")
insert_if_not(data.categories, "LA:Sustantivos de la quinta declinación")
-- ies
if types.i then
stem = stem .. "i"
end
forms["nom_sg"] = stem .. "ēs"
forms["gen_sg"] = stem .. "eī"
forms["dat_sg"] = stem .. "eī"
forms["acc_sg"] = stem .. "em"
forms["abl_sg"] = stem .. "ē"
forms["voc_sg"] = stem .. "ēs"
forms["nom_pl"] = stem .. "ēs"
forms["gen_pl"] = stem .. "ērum"
forms["dat_pl"] = stem .. "ēbus"
forms["acc_pl"] = stem .. "ēs"
forms["abl_pl"] = stem .. "ēbus"
forms["voc_pl"] = stem .. "ēs"
-- ies
if types.i then
forms["gen_sg"] = stem .. "ēī"
forms["dat_sg"] = stem .. "ēī"
end
--with locative
if data.loc then
forms["loc_sg"] = stem .. "ē"
forms["loc_pl"] = stem .. "ēbus"
end
end
noun_decl["sgpl"] = function(data, args)
local forms = data.forms
local stem1, stem2 = args[1], args[2]
insert_if_not(data.title, "indeclinable")
insert_if_not(data.categories, "LA:Sustantivos indeclinables")
forms["nom_sg"] = stem1
forms["gen_sg"] = stem1
forms["dat_sg"] = stem1
forms["acc_sg"] = stem1
forms["abl_sg"] = stem1
forms["voc_sg"] = stem1
forms["nom_pl"] = stem2
forms["gen_pl"] = stem2
forms["dat_pl"] = stem2
forms["acc_pl"] = stem2
forms["abl_pl"] = stem2
forms["voc_pl"] = stem2
-- with locative
if data.loc then
forms["loc_sg"] = stem1
forms["loc_pl"] = stem2
end
end
noun_decl["indecl"] = function(data, args)
local forms = data.forms
local stem = args[1]
insert_if_not(data.title, "indeclinable")
insert_if_not(data.categories, "LA:Sustantivos indeclinables")
forms["nom_sg"] = stem
forms["gen_sg"] = {}
forms["dat_sg"] = {}
forms["acc_sg"] = stem
forms["abl_sg"] = {}
forms["voc_sg"] = {}
forms["nom_pl"] = {}
forms["gen_pl"] = {}
forms["dat_pl"] = {}
forms["acc_pl"] = {}
forms["abl_pl"] = {}
forms["voc_pl"] = {}
-- with locative (for multiword terms)
if data.loc then
forms["loc_sg"] = {}
forms["loc_pl"] = {}
end
data.num = "sg"
end
noun_decl["irreg"] = function(data, args)
local forms, subtitles, notes = data.forms, data.subtitles, data.notes
local stem = args[1]
insert_if_not(data.title, "irregular")
insert_if_not(data.categories, "LA:Sustantivos irregulares")
forms["nom_sg"] = {}
forms["gen_sg"] = {}
forms["dat_sg"] = {}
forms["acc_sg"] = {}
forms["abl_sg"] = {}
forms["voc_sg"] = {}
forms["nom_pl"] = {}
forms["gen_pl"] = {}
forms["dat_pl"] = {}
forms["acc_pl"] = {}
forms["abl_pl"] = {}
forms["voc_pl"] = {}
if stem == "bōs" then
data.decl = "3"
local stem1, stem2 = "bōs", "bov"
noun_decl["3"](data, {stem1, stem2})
add_form(forms, "abl_sg", stem2, "īd{†}")
add_form(forms, "gen_pl", "bo", "um")
add_form(forms, "gen_pl", stem2, "erum")
add_form(forms, "dat_pl", "", "bōbus")
add_form(forms, "dat_pl", "", "būbus")
add_form(forms, "abl_pl", "", "bōbus")
add_form(forms, "abl_pl", "", "būbus")
elseif stem:match("^[dD]eus$") then
data.decl = "2"
local dD = stem:sub(1, 1)
forms["nom_sg"] = dD .. "eus"
forms["gen_sg"] = dD .. "eī"
forms["dat_sg"] = dD .. "eō"
forms["acc_sg"] = dD .. "eum"
forms["abl_sg"] = dD .. "eō"
forms["voc_sg"] = {dD .. "eus", dD .. "ee"}
if stem == "deus" then
forms["nom_pl"] = {"dī", "diī", "deī"}
forms["gen_pl"] = {"deōrum", "deum"}
forms["dat_pl"] = {"dīs", "diīs", "deīs"}
forms["acc_pl"] = "deōs"
forms["abl_pl"] = {"dīs", "diīs", "deīs"}
forms["voc_pl"] = {"dī", "diī", "deī"}
end
elseif stem == "domus" then
data.decl = "4,2"
insert_if_not(data.title, "cuarta/segunda declinación")
forms["nom_sg"] = "domus"
forms["gen_sg"] = {"domūs", "domī"}
forms["dat_sg"] = {"domuī", "domō", "domū"}
forms["acc_sg"] = "domum"
forms["abl_sg"] = {"domū", "domō"}
forms["voc_sg"] = "domus"
forms["loc_sg"] = "domī"
forms["nom_pl"] = "domūs"
forms["gen_pl"] = {"domuum", "domōrum"}
forms["dat_pl"] = "domibus"
forms["acc_pl"] = {"domūs", "domōs"}
forms["abl_pl"] = "domibus"
forms["voc_pl"] = "domūs"
forms["loc_pl"] = {}
data.loc = true
elseif match(stem, "^[IÏJ]ēs[uū]" .. BREVE .. "?s$") then
local ij = sub(stem, 1, 1)
local uu = match(stem, "[uū]" .. BREVE .. "?")
forms["nom_sg"] = stem
forms["gen_sg"] = ij .. "ēsū"
forms["dat_sg"] = ij .. "ēsū"
forms["acc_sg"] = ij .. "ēs" .. uu .. "m"
forms["abl_sg"] = ij .. "ēsū"
forms["voc_sg"] = ij .. "ēsū"
data.num = "sg"
elseif stem == "Mōsēs" or stem == "Moesēs" or match(stem, "^M[oō]" .. BREVE .. "?[īȳ]sēs$") then
local mos = sub(stem, 1, -3)
forms["nom_sg"] = stem
forms["gen_sg"] = {mos .. "ī", mos .. "ēī", mos .. "is", mos .. "ēn", mos .. "eōs"}
forms["dat_sg"] = mos .. "ī"
forms["acc_sg"] = {mos .. "ēn", mos .. "em"}
forms["abl_sg"] = {mos .. "e", mos .. "ēn", mos .. "ī"}
forms["voc_sg"] = {mos .. "ēs", mos .. "ē"}
data.num = "sg"
elseif stem:match("^[ij]ūgerum$") then
data.decl = "2,3"
local ij = stem:sub(1, 1)
insert_if_not(data.title, "segunda/tercera declinación híbrido")
forms["nom_sg"] = ij .. "ūgerum"
forms["gen_sg"] = ij .. "ūgerī"
forms["dat_sg"] = ij .. "ūgerō"
forms["acc_sg"] = ij .. "ūgerum"
forms["abl_sg"] = ij .. "ūgerō"
forms["voc_sg"] = ij .. "ūgerum"
forms["nom_pl"] = ij .. "ūgera"
forms["gen_pl"] = ij .. "ūgerum"
forms["dat_pl"] = ij .. "ūgeribus"
forms["acc_pl"] = ij .. "ūgera"
forms["abl_pl"] = {ij .. "ūgeribus", ij .. "ūgerīs{†}"}
forms["voc_pl"] = ij .. "ūgera"
elseif stem == "sūs" then
data.decl = "3"
forms["nom_sg"] = "sūs"
forms["gen_sg"] = "suis"
forms["dat_sg"] = "suī"
forms["acc_sg"] = "suem"
forms["abl_sg"] = "sue"
forms["voc_sg"] = "sūs"
forms["nom_pl"] = "suēs"
forms["gen_pl"] = "suum"
forms["dat_pl"] = {"suibus", "sūbus", "subus"}
forms["acc_pl"] = "suēs"
forms["abl_pl"] = {"suibus", "sūbus", "subus"}
forms["voc_pl"] = "suēs"
elseif stem == "ēthos" then
data.decl = "3"
insert_if_not(data.title, "tercera declinación, griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = "ēthos"
forms["gen_sg"] = "ētheos"
forms["acc_sg"] = "ēthos"
forms["voc_sg"] = "ēthos"
forms["nom_pl"] = {"ēthea", "ēthē"}
forms["dat_pl"] = {"ēthesi", "ēthesin"}
forms["acc_pl"] = {"ēthea", "ēthē"}
forms["abl_pl"] = {"ēthesi", "ēthesin"}
forms["voc_pl"] = {"ēthea", "ēthē"}
elseif stem == "Athōs" then
data.decl = "2"
insert_if_not(data.title, "segunda declinación, griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = "Athōs"
forms["gen_sg"] = "Athō"
forms["dat_sg"] = "Athō"
forms["acc_sg"] = {"Athō", "Athōn"}
forms["abl_sg"] = "Athō"
forms["voc_sg"] = "Athōs"
data.num = "sg"
elseif stem:match("^[uv]ēnum$") then
data.decl = "4,2"
local uv = stem:sub(1, 1)
insert_if_not(data.title, "cuarta/segunda declinación, defectivo")
forms["dat_sg"] = {uv .. "ēnuī", uv .. "ēnō"}
forms["acc_sg"] = uv .. "ēnum"
data.num = "sg"
elseif stem:match("^[uv]īs$") then
data.decl = "3"
local uv = stem:sub(1, 1)
insert_if_not(data.title, "defectivo")
forms["nom_sg"] = uv .. "īs"
forms["gen_sg"] = uv .. "īs"
forms["dat_sg"] = uv .. "ī"
forms["acc_sg"] = uv .. "im"
forms["abl_sg"] = uv .. "ī"
forms["voc_sg"] = uv .. "īs"
forms["nom_pl"] = uv .. "īrēs"
forms["gen_pl"] = uv .. "īrium"
forms["dat_pl"] = uv .. "īribus"
forms["acc_pl"] = {uv .. "īrēs", uv .. "īrīs"}
forms["abl_pl"] = uv .. "īribus"
forms["voc_pl"] = uv .. "īrēs"
else
error("Stem " .. stem .. " not recognized.")
end
end
local adj_decl = {}
adj_decl["0+"] = function(data, args)
local forms, categories = data.forms, data.categories
local stem = args[1]
insert_if_not(data.title, "indeclinable")
insert_if_not(categories, "LA:Adjetivos indeclinables")
forms["nom_sg_m"] = stem
forms["nom_pl_m"] = stem
forms["gen_sg_m"] = stem
forms["gen_pl_m"] = stem
forms["dat_sg_m"] = stem
forms["dat_pl_m"] = stem
forms["acc_sg_m"] = stem
forms["acc_pl_m"] = stem
forms["abl_sg_m"] = stem
forms["abl_pl_m"] = stem
forms["voc_sg_m"] = stem
forms["voc_pl_m"] = stem
forms["loc_sg_m"] = stem
forms["loc_pl_m"] = stem
end
adj_decl["1&2+"] = function(data, args)
local forms, types, pos, subtitles, categories = data.forms, data.types, data.pos, data.subtitles, data.categories
local stem = args[1]
insert_if_not(data.title, "primera y segunda declinación")
insert_if_not(categories, "LA:Adjetivos de la primera declinación")
insert_if_not(categories, "LA:Adjetivos de la segunda declinación")
local original
if types.er then
local final2 = stem:sub(-2)
if final2 == "er" then
-- insert_if_not(categories, "LA:Sustantivos de la primera declinación")
-- insert_if_not(categories, "LA:Sustantivos de la segunda declinación")
elseif final2 == "ur" then
-- insert_if_not(categories, "LA:Sustantivos de la primera declinación")
-- insert_if_not(categories, "LA:Sustantivos de la segunda declinación")
else
error("Unrecognized ''-r'' stem (doesn't end in ''-er'' or ''-ur''): " .. stem)
end
stem, original = args[2], stem
end
local us = "us"
local a_sf = "a"
local um = "um"
local ae_gsf = "ae"
local am = "am"
local a_macron = "ā"
local i_pl = stem .. "ī"
if types.greekA or types.greekE then
insert_if_not(data.title, "griego")
insert_if_not(categories, "LA:Sustantivos griegos")
if types.greekA then
us = "os"
um = "on"
am = "ān"
else
us = "os"
a_sf = "ē"
um = "on"
ae_gsf = "ēs"
am = "ēn"
a_macron = "ē"
end
i_pl = {i_pl, stem .. "oe"}
end
forms["nom_sg_m"] = original or (stem .. us)
forms["nom_sg_f"] = stem .. a_sf
forms["nom_sg_n"] = stem .. um
forms["nom_pl_m"] = i_pl
forms["nom_pl_f"] = stem .. "ae"
forms["nom_pl_n"] = stem .. "a"
forms["gen_sg_m"] = stem .. "ī"
forms["gen_sg_f"] = stem .. ae_gsf
forms["gen_sg_n"] = stem .. "ī"
forms["gen_pl_m"] = stem .. "ōrum"
forms["gen_pl_f"] = stem .. "ārum"
forms["gen_pl_n"] = stem .. "ōrum"
forms["dat_sg_m"] = stem .. "ō"
forms["dat_sg_f"] = stem .. "ae"
forms["dat_sg_n"] = stem .. "ō"
forms["dat_pl_m"] = stem .. "īs"
forms["dat_pl_f"] = stem .. "īs"
forms["dat_pl_n"] = stem .. "īs"
forms["acc_sg_m"] = stem .. um
forms["acc_sg_f"] = stem .. am
forms["acc_sg_n"] = stem .. um
forms["acc_pl_m"] = stem .. "ōs"
forms["acc_pl_f"] = stem .. "ās"
forms["acc_pl_n"] = stem .. "a"
forms["abl_sg_m"] = stem .. "ō"
forms["abl_sg_f"] = stem .. a_macron
forms["abl_sg_n"] = stem .. "ō"
forms["abl_pl_m"] = stem .. "īs"
forms["abl_pl_f"] = stem .. "īs"
forms["abl_pl_n"] = stem .. "īs"
forms["voc_sg_m"] = original or (stem .. "e")
forms["voc_sg_f"] = stem .. a_sf
forms["voc_sg_n"] = stem .. um
forms["voc_pl_m"] = i_pl
forms["voc_pl_f"] = stem .. "ae"
forms["voc_pl_n"] = stem .. "a"
if types.ius then
insert_if_not(data.title, "pronominal")
--insert_if_not(subtitles, "with genitive singular in ''-ī̆us'' and dative singular in ''-ī''")
forms["gen_sg_m"] = stem .. "ī̆us"
forms["gen_sg_f"] = stem .. "ī̆us"
forms["gen_sg_n"] = stem .. "ī̆us"
forms["dat_sg_m"] = stem .. "ī"
forms["dat_sg_f"] = stem .. "ī"
forms["dat_sg_n"] = stem .. "ī"
elseif types.not_ius then
insert_if_not(data.title, "no pronominal")
--insert_if_not(subtitles, "with normal genitive and dative singular")
end
if stem == "me" then
forms["voc_sg_m"] = "mī"
end
if types.ic then
--insert_if_not(subtitles, "with genitive singular ending in ''-ius'' and dative singular ending in ''-ic''")
local oc = "oc"
local oc_macron = "ōc"
if stem == "ill" then
oc = "uc"
oc_macron = "ūc"
end
forms["nom_sg_m"] = stem .. "ic"
forms["nom_sg_f"] = stem .. "aec"
forms["nom_sg_n"] = stem .. oc
forms["nom_pl_n"] = stem .. "aec"
forms["gen_sg_m"] = stem .. "uius"
forms["gen_sg_f"] = stem .. "uius"
forms["gen_sg_n"] = stem .. "uius"
forms["dat_sg_m"] = stem .. "uic"
forms["dat_sg_f"] = stem .. "uic"
forms["dat_sg_n"] = stem .. "uic"
forms["acc_sg_m"] = stem .. "unc"
forms["acc_sg_f"] = stem .. "anc"
forms["acc_sg_n"] = stem .. oc
forms["acc_pl_n"] = stem .. "aec"
forms["abl_sg_m"] = stem .. "ōc"
forms["abl_sg_f"] = stem .. "āc"
forms["abl_sg_n"] = stem .. oc_macron
forms["voc_sg_m"] = {}
forms["voc_sg_f"] = {}
forms["voc_sg_n"] = {}
forms["voc_pl_m"] = {}
forms["voc_pl_f"] = {}
forms["voc_pl_n"] = {}
end
if types.distr then
if stem:sub(-1) == "n" then
forms["gen_pl_m"] = {stem .. "um", stem .. "ōrum{R}"}
forms["gen_pl_f"] = {stem .. "um", stem .. "ārum{R}"}
forms["gen_pl_n"] = {stem .. "um", stem .. "ōrum{R}"}
else
error("Unrecognized distributive numeral stem (doesn't end in ''n''): " .. stem)
end
original = stem
stem = args[2]
end
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["gen_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
adj_decl["1-1+"] = function(data, args)
local forms, subtitles, categories = data.forms, data.subtitles, data.categories
local stem = args[1]
insert_if_not(data.title, "primera declinación")
insert_if_not(categories, "LA:Adjetivos de la primera declinación")
forms["nom_sg_m"] = stem .. "a"
forms["nom_pl_m"] = stem .. "ae"
forms["nom_pl_n"] = stem .. "a"
forms["gen_sg_m"] = stem .. "ae"
forms["gen_pl_m"] = stem .. "ārum"
forms["dat_sg_m"] = stem .. "ae"
forms["dat_pl_m"] = stem .. "īs"
forms["acc_sg_m"] = stem .. "am"
forms["acc_sg_n"] = stem .. "a"
forms["acc_pl_m"] = stem .. "ās"
forms["acc_pl_n"] = stem .. "a"
forms["abl_sg_m"] = stem .. "ā"
forms["abl_pl_m"] = stem .. "īs"
forms["voc_sg_m"] = stem .. "a"
forms["voc_pl_m"] = stem .. "ae"
forms["voc_pl_n"] = stem .. "a"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
end
adj_decl["2-2+"] = function(data, args)
local forms, types, pos, subtitles, categories = data.forms, data.types, data.pos, data.subtitles, data.categories
local stem = args[1]
insert_if_not(data.title, "segunda declinación")
insert_if_not(categories, "LA:Adjetivos de la segunda declinación")
local us = "us"
local um = "um"
local i_pl = stem .. "ī"
if types.greek then
insert_if_not(data.title, "griego")
insert_if_not(categories, "LA:Sustantivos griegos")
us = "os"
um = "on"
i_pl = {i_pl, stem .. "oe"}
end
forms["nom_sg_m"] = stem .. us
forms["nom_sg_n"] = stem .. um
forms["nom_pl_m"] = i_pl
forms["nom_pl_n"] = stem .. "a"
forms["gen_sg_m"] = stem .. "ī"
forms["gen_sg_n"] = stem .. "ī"
forms["gen_pl_m"] = stem .. "ōrum"
forms["gen_pl_n"] = stem .. "ōrum"
forms["dat_sg_m"] = stem .. "ō"
forms["dat_sg_n"] = stem .. "ō"
forms["dat_pl_m"] = stem .. "īs"
forms["dat_pl_n"] = stem .. "īs"
forms["acc_sg_m"] = stem .. um
forms["acc_sg_n"] = stem .. um
forms["acc_pl_m"] = stem .. "ōs"
forms["acc_pl_n"] = stem .. "a"
forms["abl_sg_m"] = stem .. "ō"
forms["abl_sg_n"] = stem .. "ō"
forms["abl_pl_m"] = stem .. "īs"
forms["abl_pl_n"] = stem .. "īs"
forms["voc_sg_m"] = stem .. "e"
forms["voc_sg_n"] = stem .. um
forms["voc_pl_m"] = i_pl
forms["voc_pl_n"] = stem .. "a"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
local function abl_i_e(...)
local function update_slot(forms, slot, f, do_copy)
if not forms[slot] then
return do_copy
elseif do_copy then
f = deep_copy(f)
end
forms[slot] = f
return true
end
function abl_i_e(stem, forms, types)
local f, do_copy
if types["abl_e_i"] then
f = {stem .. "e", stem .. "ī"}
elseif types["abl_i_e"] then
f = {stem .. "ī", stem .. "e"}
else
return
end
do_copy = update_slot(forms, "abl_sg_m", f, do_copy)
do_copy = update_slot(forms, "abl_sg_f", f, do_copy)
-- Neuter doesn't take -e with i-stems.
if not types.I then
update_slot(forms, "abl_sg_n", f, do_copy)
end
end
return abl_i_e(...)
end
adj_decl["3-1+"] = function(data, args)
local forms, types, pos, subtitles, notes, categories = data.forms, data.types, data.pos, data.subtitles, data.notes, data.categories
local stem1, stem2 = args[1], args[2]
-- local singpos = singularize(pos)
insert_if_not(data.title, "tercera declinación, dos terminaciones")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación con dos terminaciones")
forms["nom_sg_m"] = stem1
forms["nom_sg_n"] = stem1
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "ia"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "ium"
forms["gen_pl_n"] = stem2 .. "ium"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_n"] = stem1
forms["acc_pl_m"] = {stem2 .. "īs", stem2 .. "ēs"}
forms["acc_pl_n"] = stem2 .. "ia"
forms["abl_sg_m"] = stem2 .. "ī"
forms["abl_sg_n"] = stem2 .. "ī"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
abl_i_e(stem2, forms, types)
forms["voc_sg_m"] = stem1
forms["voc_sg_n"] = stem1
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "ia"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
if types.par then
forms["nom_pl_n"] = stem2 .. "a"
forms["gen_pl_m"] = stem2 .. "um"
forms["gen_pl_n"] = stem2 .. "um"
forms["abl_sg_m"] = stem2 .. "e"
forms["abl_sg_n"] = stem2 .. "e"
forms["loc_sg_m"] = {stem2 .. "ī", stem2 .. "e"} -- Really?
forms["loc_sg_n"] = {stem2 .. "ī", stem2 .. "e"} -- Why does this happen?
forms["acc_pl_n"] = stem2 .. "a"
forms["voc_pl_n"] = stem2 .. "a"
end
local es_base = stem1:match("^(.-)ēs$")
if es_base and es_base == stem2 then
if types.greek then
forms["nom_sg_n"] = {stem2 .. "ē̆s{?}"}
forms["acc_sg_n"] = {stem2 .. "ē̆s{?}"}
forms["voc_sg_m"] = {stem2 .. "ē̆s{?}"}
forms["voc_sg_n"] = {stem2 .. "ē̆s{?}"}
forms["nom_pl_n"] = {stem2 .. "a{?}", stem2 .. "ia{?}"}
forms["acc_pl_n"] = {stem2 .. "a{?}", stem2 .. "ia{?}"}
forms["voc_pl_n"] = {stem2 .. "a{?}", stem2 .. "ia{?}"}
forms["abl_sg_m"] = {stem2 .. "e{?}", stem2 .. "ī{?}"}
forms["abl_sg_n"] = {stem2 .. "e{?}", stem2 .. "ī{?}"}
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["gen_pl_m"] = {stem2 .. "um{?}", stem2 .. "ium{?}"}
forms["gen_pl_n"] = {stem2 .. "um{?}", stem2 .. "ium{?}"}
insert_if_not(data.title, "griego")
insert_if_not(categories, "LA:Adjetivos griegos")
elseif types.not_greek then
insert_if_not(data.title, "no griego")
end
end
end
adj_decl["3-def+"] = function(data, args)
local forms, types, pos, subtitles, notes, categories = data.forms, data.types, data.pos, data.subtitles, data.notes, data.categories
local stem1, stem2 = args[1], args[2]
-- local singpos = singularize(pos)
insert_if_not(data.title, "tercera declinación, defectivo")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación")
forms["nom_sg_m"] = stem1
forms["nom_sg_n"] = stem1
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "ia"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "ium"
forms["gen_pl_n"] = stem2 .. "ium"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_n"] = stem1
forms["acc_pl_m"] = stem2 .. "ēs"
forms["acc_pl_n"] = stem2 .. "ia"
forms["abl_sg_m"] = stem2 .. "ī"
forms["abl_sg_n"] = stem2 .. "ī"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
forms["voc_sg_m"] = stem1
forms["voc_sg_n"] = stem1
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "ia"
if types.tor then
insert_if_not(data.title, "tercera declinación, solo en masculino")
insert_if_not(categories, "LA:Adjetivos solo en masculino")
remove_forms(forms, {"_f$", "_n$"})
forms["nom_sg_m"] = stem1
forms["gen_sg_m"] = stem2 .. "is"
forms["dat_sg_m"] = stem2 .. "ī"
forms["acc_sg_m"] = stem2 .. "em"
forms["abl_sg_m"] = stem2 .. "e"
forms["voc_sg_m"] = stem1
forms["nom_pl_m"] = stem2 .. "ēs"
forms["gen_pl_m"] = stem2 .. "um"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["acc_pl_m"] = stem2 .. "ēs"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["voc_pl_m"] = stem2 .. "ēs"
end
if types.trix then
insert_if_not(data.title, "tercera declinación, solo en femenino o en neutro plural")
insert_if_not(categories, "LA:Adjetivos solo en femenino")
insert_if_not(categories, "LA:Adjetivos solo en neutro")
remove_forms(forms, {"_m$", "sg_n$"})
forms["nom_sg_f"] = stem1
forms["gen_sg_f"] = stem2 .. "is"
forms["dat_sg_f"] = stem2 .. "ī"
forms["acc_sg_f"] = stem2 .. "em"
forms["abl_sg_f"] = {stem2 .. "e", stem2 .. "ī"}
forms["voc_sg_f"] = stem1
forms["nom_pl_f"] = stem2 .. "ēs"
forms["gen_pl_f"] = stem2 .. "ium"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["acc_pl_f"] = stem2 .. "ēs"
forms["abl_pl_f"] = stem2 .. "ibus"
forms["voc_pl_f"] = stem2 .. "ēs"
end
if types.trixf then
insert_if_not(data.title, "tercera declinación, solo en femenino")
insert_if_not(categories, "LA:Adjetivos solo en femenino")
remove_forms(forms, {"_m$","_n$"})
forms["nom_sg_f"] = stem1
forms["gen_sg_f"] = stem2 .. "is"
forms["dat_sg_f"] = stem2 .. "ī"
forms["acc_sg_f"] = stem2 .. "em"
forms["abl_sg_f"] = {stem2 .. "e", stem2 .. "ī"}
forms["voc_sg_f"] = stem1
forms["nom_pl_f"] = stem2 .. "ēs"
forms["gen_pl_f"] = stem2 .. "ium"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["acc_pl_f"] = stem2 .. "ēs"
forms["abl_pl_f"] = stem2 .. "ibus"
forms["voc_pl_f"] = stem2 .. "ēs"
end
if types.idis then
insert_if_not(data.title, "tercera declinación, solo en femenino")
insert_if_not(categories, "LA:Adjetivos solo en femenino")
remove_forms(forms, {"_m$","_n$"})
forms["nom_sg_f"] = stem1
forms["gen_sg_f"] = {stem2 .. "is", stem2 .. "os"}
forms["dat_sg_f"] = stem2 .. "ī"
forms["acc_sg_f"] = {stem2 .. "em", stem2 .. "a"}
forms["abl_sg_f"] = stem2 .. "e"
forms["voc_sg_f"] = stem1
forms["nom_pl_f"] = {stem2 .. "ēs", stem2 .. "es"}
forms["gen_pl_f"] = stem2 .. "um"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["acc_pl_f"] = {stem2 .. "ēs", stem2 .. "as"}
forms["abl_pl_f"] = stem2 .. "ibus"
forms["voc_pl_f"] = {stem2 .. "ēs", stem2 .. "es"}
end
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["abl_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
adj_decl["3-C+"] = function(data, args)
local forms, types, pos, categories = data.forms, data.types, data.pos, data.categories
local stem1 = args[1]
local stem2 = stem1 .. "ōr"
insert_if_not(data.title, "tercera declinación, comparativo")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación")
insert_if_not(categories, "LA:Adjetivos comparativos")
forms["nom_sg_m"] = stem1 .. "or"
forms["nom_sg_n"] = stem1 .. "us"
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "a"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "um"
forms["gen_pl_n"] = stem2 .. "um"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_n"] = stem1 .. "us"
forms["acc_pl_m"] = {stem2 .. "ēs", stem2 .. "īs"}
forms["acc_pl_n"] = stem2 .. "a"
forms["abl_sg_m"] = stem2 .. "ī"
forms["abl_sg_n"] = stem2 .. "ī"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
abl_i_e(stem2, forms, types)
forms["voc_sg_m"] = stem1 .. "or"
forms["voc_sg_n"] = stem1 .. "us"
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "a"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
adj_decl["3-P+"] = function(data, args)
local forms, notes = data.forms, data.notes
local stem2 = args[2]
adj_decl["3-1+"](data, args)
insert_if_not(data.title, "tercera declinación, participio")
insert_if_not(data.categories, "LA:Adjetivos de la tercera declinación")
forms["abl_sg_m"] = {stem2 .. "e{PART}", stem2 .. "ī{ADJ}"}
forms["abl_sg_n"] = {stem2 .. "e{PART}", stem2 .. "ī{ADJ}"}
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["acc_pl_m"] = {stem2 .. "ēs", stem2 .. "īs"}
end
adj_decl["3-2+"] = function(data, args)
local forms, types, pos, categories = data.forms, data.types, data.pos, data.categories
local stem = args[1]
-- local singpos = singularize(pos)
insert_if_not(data.title, "tercera declinación, dos terminaciones")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación con dos terminaciones")
forms["nom_sg_m"] = stem .. "is"
forms["nom_sg_n"] = stem .. "e"
forms["nom_pl_m"] = stem .. "ēs"
forms["nom_pl_n"] = stem .. "ia"
forms["gen_sg_m"] = stem .. "is"
forms["gen_sg_n"] = stem .. "is"
forms["gen_pl_m"] = stem .. "ium"
forms["gen_pl_n"] = stem .. "ium"
forms["dat_sg_m"] = stem .. "ī"
forms["dat_sg_n"] = stem .. "ī"
forms["dat_pl_m"] = stem .. "ibus"
forms["dat_pl_n"] = stem .. "ibus"
forms["acc_sg_m"] = stem .. "em"
forms["acc_sg_n"] = stem .. "e"
forms["acc_pl_m"] = {stem .. "īs", stem .. "ēs"}
forms["acc_pl_n"] = stem .. "ia"
forms["abl_sg_m"] = stem .. "ī"
forms["abl_sg_n"] = stem .. "ī"
forms["abl_pl_m"] = stem .. "ibus"
forms["abl_pl_n"] = stem .. "ibus"
-- abl_i_e(stem, forms, types) -- enable once [[Module:la-nominal]] has ben updated
forms["voc_sg_m"] = stem .. "is"
forms["voc_sg_n"] = stem .. "e"
forms["voc_pl_m"] = stem .. "ēs"
forms["voc_pl_n"] = stem .. "ia"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
adj_decl["3-3+"] = function(data, args)
local forms, types, pos, categories = data.forms, data.types, data.pos, data.categories
local stem1, stem2 = args[1], args[2]
-- local singpos = singularize(pos)
insert_if_not(data.title, "tercera declinación")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación con tres terminaciones")
forms["nom_sg_m"] = stem1
forms["nom_sg_f"] = stem2 .. "is"
forms["nom_sg_n"] = stem2 .. "e"
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_f"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "ia"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_f"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "ium"
forms["gen_pl_f"] = stem2 .. "ium"
forms["gen_pl_n"] = stem2 .. "ium"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_f"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_f"] = stem2 .. "em"
forms["acc_sg_n"] = stem2 .. "e"
forms["acc_pl_m"] = {stem2 .. "īs", stem2 .. "ēs"}
forms["acc_pl_f"] = {stem2 .. "īs", stem2 .. "ēs"}
forms["acc_pl_n"] = stem2 .. "ia"
forms["abl_sg_m"] = stem2 .. "ī"
forms["abl_sg_f"] = stem2 .. "ī"
forms["abl_sg_n"] = stem2 .. "ī"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_f"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
-- abl_i_e(stem2, forms, types) -- enable once [[Module:la-nominal]] has ben updated
forms["voc_sg_m"] = stem1
forms["voc_sg_f"] = stem2 .. "is"
forms["voc_sg_n"] = stem2 .. "e"
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_f"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "ia"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["abl_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
adj_decl["indecl+"] = function(data, args)
local forms, subtitles, categories = data.forms, data.subtitles, data.categories
local stem = args[1]
insert_if_not(data.title, "indeclinable")
insert_if_not(categories, "LA:Adjetivos indeclinables")
forms["nom_sg_m"] = stem
forms["nom_pl_m"] = {}
forms["gen_sg_m"] = {}
forms["gen_pl_m"] = {}
forms["dat_sg_m"] = {}
forms["dat_pl_m"] = {}
forms["acc_sg_m"] = stem
forms["acc_pl_m"] = {}
forms["abl_sg_m"] = {}
forms["abl_pl_m"] = {}
forms["voc_sg_m"] = {}
forms["voc_pl_m"] = {}
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
end
adj_decl["irreg+"] = function(data,args)
local forms, types, pos, notes, categories = data.forms, data.types, data.pos, data.notes, data.categories
local arg1 = args[1]
insert_if_not(data.title, "irregular")
insert_if_not(categories, "LA:Adjetivos irregulares")
if arg1 == "duo" or arg1 == "ambō" then
local stem = sub(arg1, 1, -2)
-- data.title = stem == "amb" and "irregular adjective" or "numeral"
data.num = "pl"
local stem_with_o = stem .. (stem == "amb" and "ō" or "o")
forms["nom_pl_m"] = stem_with_o
forms["nom_pl_f"] = stem .. "ae"
forms["nom_pl_n"] = stem_with_o
forms["gen_pl_m"] = stem .. "ōrum"
forms["gen_pl_f"] = stem .. "ārum"
forms["gen_pl_n"] = stem .. "ōrum"
forms["dat_pl_m"] = stem .. "ōbus"
forms["dat_pl_f"] = stem .. "ābus"
forms["dat_pl_n"] = stem .. "ōbus"
forms["acc_pl_m"] = {stem .. "ōs", stem_with_o}
forms["acc_pl_f"] = stem .. "ās"
forms["acc_pl_n"] = stem_with_o
forms["abl_pl_m"] = stem .. "ōbus"
forms["abl_pl_f"] = stem .. "ābus"
forms["abl_pl_n"] = stem .. "ōbus"
forms["voc_pl_m"] = stem_with_o
forms["voc_pl_f"] = stem .. "ae"
forms["voc_pl_n"] = stem_with_o
if stem == "du" then
forms["gen_pl_m"] = {forms["gen_pl_m"], "duum", "duom{†}"}
forms["gen_pl_n"] = {forms["gen_pl_n"], "duum", "duom{†}"}
end
elseif arg1:sub(-6) == "mīlle" then
insert_if_not(data.title, "numeral semiindeclinable")
local stem = arg1:sub(1, -3)
forms["nom_sg_m"] = stem .. "le"
forms["nom_pl_m"] = {stem .. "ia", stem .. "lia"}
forms["gen_sg_m"] = stem .. "le"
forms["gen_pl_m"] = {stem .. "ium", stem .. "lium"}
forms["dat_sg_m"] = stem .. "le"
forms["dat_pl_m"] = {stem .. "ibus", stem .. "libus"}
forms["acc_sg_m"] = stem .. "le"
forms["acc_pl_m"] = {stem .. "ia", stem .. "lia"}
forms["abl_sg_m"] = stem .. "le"
forms["abl_pl_m"] = {stem .. "ibus", stem .. "libus"}
forms["voc_sg_m"] = stem .. "le"
forms["voc_pl_m"] = {stem .. "ia", stem .. "lia"}
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
elseif arg1 == "ille" or arg1 == "iste" or arg1 == "ipse" or arg1 == "olle" then
local stem = arg1:sub(1, -2)
types.ius = true
adj_decl["1&2+"](data, {stem})
insert_if_not(data.title, "demostrativo") -- .. " " .. singularize(data.pos)
forms["nom_sg_m"] = arg1
if arg1 == "ipse" then
add_form(forms, "nom_sg_n", stem, "ud{MED}")
add_form(forms, "acc_sg_n", stem, "ud{MED}")
else
forms["nom_sg_n"] = stem .. "ud"
forms["acc_sg_n"] = stem .. "ud"
end
forms["voc_sg_m"] = {}
forms["voc_sg_f"] = {}
forms["voc_sg_n"] = {}
forms["voc_pl_m"] = {}
forms["voc_pl_f"] = {}
forms["voc_pl_n"] = {}
elseif arg1 == "illic" or arg1 == "istic" or arg1 == "isthic" then
insert_if_not(data.title, "demostrativo") -- .. " " .. singularize(data.pos)
local stem = arg1:sub(1, -3)
forms["nom_sg_m"] = stem .. "ic"
forms["nom_sg_f"] = stem .. "aec"
forms["nom_sg_n"] = {stem .. "uc", stem .. "ucce", stem .. "oc"}
forms["gen_sg_m"] = stem .. "ī̆usce"
forms["gen_sg_f"] = stem .. "ī̆usce"
forms["gen_sg_n"] = stem .. "ī̆usce"
forms["dat_sg_m"] = stem .. "īc"
forms["dat_sg_f"] = stem .. "īc"
forms["dat_sg_n"] = stem .. "īc"
forms["acc_sg_m"] = stem .. "unc"
forms["acc_sg_f"] = stem .. "anc"
forms["acc_sg_n"] = {stem .. "uc", stem .. "ucce", stem .. "oc"}
forms["abl_sg_m"] = stem .. "ōc"
forms["abl_sg_f"] = stem .. "āc"
forms["abl_sg_n"] = stem .. "ōc"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["gen_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["nom_pl_m"] = stem .. "īsce"
forms["nom_pl_f"] = stem .. "aec"
forms["nom_pl_n"] = stem .. "aec"
forms["gen_pl_m"] = stem .. "ōrunc{?}"
forms["gen_pl_f"] = stem .. "ārunc{?}"
forms["gen_ok_n"] = stem .. "ōrunc{?}"
forms["dat_pl_m"] = stem .. "īsce"
forms["dat_pl_f"] = stem .. "īsce"
forms["dat_pl_n"] = stem .. "īsce"
forms["acc_pl_m"] = stem .. "ōsce"
forms["acc_pl_f"] = stem .. "āsce"
forms["acc_pl_n"] = stem .. "aec"
forms["abl_pl_m"] = stem .. "īsce"
forms["abl_pl_f"] = stem .. "īsce"
forms["abl_pl_n"] = stem .. "īsce"
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
elseif arg1 == "hice" then
insert_if_not(data.title, "demostrativo") -- .. " pronoun"
forms["nom_sg_m"] = "hice"
forms["nom_sg_f"] = "haece"
forms["nom_sg_n"] = "hoce"
forms["nom_pl_m"] = "hīce"
forms["nom_pl_f"] = "haece"
forms["nom_pl_n"] = "haece"
forms["gen_sg_m"] = "huiusce"
forms["gen_sg_f"] = "huiusce"
forms["gen_sg_n"] = "huiusce"
forms["gen_pl_m"] = {"hōrunce", "hōrumce"}
forms["gen_pl_f"] = {"hārunce", "hārumce"}
forms["gen_pl_n"] = {"hōrunce", "hōrumce"}
forms["dat_sg_m"] = "huīce"
forms["dat_sg_f"] = "huīce"
forms["dat_sg_n"] = "huīce"
forms["dat_pl_m"] = "hīsce"
forms["dat_pl_f"] = "hīsce"
forms["dat_pl_n"] = "hīsce"
forms["acc_sg_m"] = "hunce"
forms["acc_sg_f"] = "hance"
forms["acc_sg_n"] = "hoce"
forms["acc_pl_m"] = "hōsce"
forms["acc_pl_f"] = "hāsce"
forms["acc_pl_n"] = "haece"
forms["abl_sg_m"] = "hōce"
forms["abl_sg_f"] = "hāce"
forms["abl_sg_n"] = "hōce"
forms["abl_pl_m"] = "hīsce"
forms["abl_pl_f"] = "hīsce"
forms["abl_pl_n"] = "hīsce"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["gen_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
elseif arg1 == "plūs" then
insert_if_not(data.title, "comparativo")
insert_if_not(data.categories, "LA:Sustantivos de la tercera declinación")
insert_if_not(data.categories, "LA:Sustantivos de la tercera declinación con una terminación")
data.note = "Ninguna de las formas en singular se usaron en latín clásico"
forms["nom_sg_n"] = "plūs"
forms["nom_pl_m"] = "plūrēs"
forms["nom_pl_n"] = "plūra"
forms["gen_sg_m"] = "plūris"
forms["gen_sg_n"] = "plūris"
forms["gen_pl_m"] = "plūrium"
forms["gen_pl_n"] = "plūrium"
forms["dat_sg_m"] = "plūrī"
forms["dat_sg_n"] = "plūrī"
forms["dat_pl_m"] = "plūribus"
forms["dat_pl_n"] = "plūribus"
forms["acc_sg_m"] = "plūrem"
forms["acc_sg_f"] = "plūrem"
forms["acc_sg_n"] = "plūs"
forms["acc_pl_m"] = {"plūrēs", "plūrīs"}
forms["acc_pl_n"] = "plūra"
forms["abl_sg_m"] = {"plūrī", "plūre"}
forms["abl_sg_f"] = {"plūrī", "plūre"}
forms["abl_sg_n"] = {"plūrī", "plūre"}
forms["abl_pl_m"] = "plūribus"
forms["abl_pl_n"] = "plūribus"
forms["voc_sg_n"] = "plūs"
forms["voc_pl_m"] = "plūrēs"
forms["voc_pl_n"] = "plūra"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["abl_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
elseif match(arg1, "^egō̆?$") or arg1 == "nōs" then
insert_if_not(data.title, "pronombre nominativo")
forms["nom_sg_m"] = arg1
forms["nom_pl_m"] = "nōs"
forms["gen_sg_m"] = "meī"
forms["gen_pl_m"] = {"nostrī", "nostrum"}
forms["dat_sg_m"] = "mihī̆"
forms["dat_pl_m"] = "nōbīs"
forms["acc_sg_m"] = {"mē", "mēmē"}
forms["acc_pl_m"] = "nōs"
forms["abl_sg_m"] = {"mē", "mēmē"}
forms["abl_pl_m"] = "nōbīs"
forms["voc_sg_m"] = arg1
forms["voc_pl_m"] = "nōs"
elseif arg1 == "tū" or arg1 == "vōs" then
insert_if_not(data.title, "pronombre nominativo")
forms["nom_sg_m"] = arg1
forms["nom_pl_m"] = "vōs"
forms["gen_sg_m"] = "tuī"
forms["gen_pl_m"] = {"vestrī", "vestrum"}
forms["dat_sg_m"] = "tibī̆"
forms["dat_pl_m"] = "vōbīs"
forms["acc_sg_m"] = {"tē", "tētē"}
forms["acc_pl_m"] = "vōs"
forms["abl_sg_m"] = {"tē", "tētē"}
forms["abl_pl_m"] = "vōbīs"
forms["voc_sg_m"] = arg1
forms["voc_pl_m"] = "vōs"
elseif arg1 == "suī" then
insert_if_not(data.title, "pronombre reflexivo")
forms["nom_sg_m"] = {}
forms["nom_pl_m"] = {}
forms["gen_sg_m"] = arg1
forms["gen_pl_m"] = forms["gen_sg_m"]
forms["dat_sg_m"] = "sibī̆"
forms["dat_pl_m"] = forms["dat_sg_m"]
forms["acc_sg_m"] = {"sē", "sēsē"}
forms["acc_pl_m"] = {"sē", "sēsē"}
forms["abl_sg_m"] = {"sē", "sēsē"}
forms["abl_pl_m"] = {"sē", "sēsē"}
forms["voc_sg_m"] = {}
forms["voc_pl_m"] = {}
elseif arg1 == "is" or arg1 == "īdem" then
insert_if_not(data.title, "pronombre demostrativo")
forms["nom_sg_m"] = "is"
forms["nom_sg_f"] = "ea"
forms["nom_sg_n"] = "id"
forms["nom_pl_m"] = {"iī", "eī", "ī"}
forms["nom_pl_f"] = "eae"
forms["nom_pl_n"] = "ea"
forms["gen_sg_m"] = {"eius", "ejus"}
forms["gen_sg_f"] = {"eius", "ejus"}
forms["gen_sg_n"] = {"eius", "ejus"}
forms["gen_pl_m"] = {"eōrum", "eum"}
forms["gen_pl_f"] = "eārum"
forms["gen_pl_n"] = {"eōrum", "eum"}
forms["dat_sg_m"] = {"eī", "e͡i", "ēī"}
forms["dat_sg_f"] = {"eī", "e͡i", "ēī", "eae"}
forms["dat_sg_n"] = {"eī", "e͡i", "ēī"}
forms["dat_pl_m"] = {"iīs", "eīs", "īs"}
forms["dat_pl_f"] = {"iīs", "eīs", "īs", "eābus"}
forms["dat_pl_n"] = {"iīs", "eīs", "īs"}
forms["acc_sg_m"] = "eum"
forms["acc_sg_f"] = "eam"
forms["acc_sg_n"] = "id"
forms["acc_pl_m"] = "eōs"
forms["acc_pl_f"] = "eās"
forms["acc_pl_n"] = "ea"
forms["abl_sg_m"] = "eō"
forms["abl_sg_f"] = "eā"
forms["abl_sg_n"] = "eō"
forms["abl_pl_m"] = {"iīs", "eīs", "īs"}
forms["abl_pl_f"] = {"iīs", "eīs", "īs"}
forms["abl_pl_n"] = {"iīs", "eīs", "īs"}
if arg1 == "īdem" then
forms["nom_sg_m"] = "ī"
forms["nom_sg_n"] = "i"
forms["acc_sg_n"] = "i"
end
elseif arg1 == "quis" or arg1 == "quī" then
data.note = "La forma ''qua'' es preferida frente a ''quae'' cuando se usa como indefinido"
local id = "id"
if arg1 == "quī" then
insert_if_not(data.title, "determinante relativo/interrogativo")
id = "od"
forms["nom_sg_m"] = {"quī", "quis", "quei{†}"}
forms["nom_sg_f"] = {"quae", "qua"}
forms["acc_sg_f"] = "quam"
forms["abl_sg_m"] = "quō"
forms["abl_sg_f"] = "quā"
forms["abl_sg_n"] = "quō"
else
insert_if_not(data.title, "pronombre relativo/interrogativo")
forms["nom_sg_m"] = {"quis", "quī"}
forms["nom_sg_f"] = {"quae", "qua", "quis{†}"}
forms["acc_sg_f"] = {"quam", "quem{†}"}
forms["abl_sg_m"] = {"quō", "quī"}
forms["abl_sg_f"] = {"quā", "quī"}
forms["abl_sg_n"] = {"quō", "quī"}
end
forms["nom_sg_n"] = "qu"..id
forms["nom_pl_m"] = {"quī", "quei{†}"}
forms["nom_pl_f"] = "quae"
forms["nom_pl_n"] = {"quae", "qua"}
forms["gen_sg_m"] = {"cuius", "quoius{†}"}
forms["gen_sg_f"] = {"cuius", "quoius{†}"}
forms["gen_sg_n"] = {"cuius", "quoius{†}"}
forms["gen_pl_m"] = "quōrum"
forms["gen_pl_f"] = "quārum"
forms["gen_pl_n"] = "quōrum"
forms["dat_sg_m"] = {"cui", "quoi{†}", "quoiei{†}"}
forms["dat_sg_f"] = {"cui", "quoi{†}", "quoiei{†}"}
forms["dat_sg_n"] = {"cui", "quoi{†}", "quoiei{†}"}
forms["dat_pl_m"] = {"quibus", "quīs", "queis{†}"}
forms["dat_pl_f"] = {"quibus", "quīs", "queis{†}"}
forms["dat_pl_n"] = {"quibus", "quīs", "queis{†}"}
forms["acc_sg_m"] = "quem"
forms["acc_sg_n"] = "qu"..id
forms["acc_pl_m"] = "quōs"
forms["acc_pl_f"] = "quās"
forms["acc_pl_n"] = {"quae", "qua"}
forms["abl_pl_m"] = {"quibus", "quīs", "queis{†}"}
forms["abl_pl_f"] = {"quibus", "quīs", "queis{†}"}
forms["abl_pl_n"] = {"quibus", "quīs", "queis{†}"}
elseif arg1 == "aliquī" then
insert_if_not(data.title, "determinante indefinido")
forms["nom_sg_m"] = {"aliquī{DET/ADJ}", "aliquis{PRON/SUST}"}
forms["nom_sg_f"] = {"aliqua", "aliquae{R}"}
forms["nom_sg_n"] = "aliquod"
forms["nom_pl_m"] = "aliquī"
forms["nom_pl_f"] = "aliquae"
forms["nom_pl_n"] = "aliqua"
forms["gen_sg_m"] = {"alicuius", "aliquoius{†}"}
forms["gen_sg_f"] = {"alicuius", "aliquoius{†}"}
forms["gen_sg_n"] = {"alicuius", "aliquoius{†}"}
forms["gen_pl_m"] = "aliquōrum"
forms["gen_pl_f"] = "aliquārum"
forms["gen_pl_n"] = "aliquōrum"
forms["dat_sg_m"] = {"alicui", "aliquoi{†}"}
forms["dat_sg_f"] = {"alicui", "aliquoi{†}"}
forms["dat_sg_n"] = {"alicui", "aliquoi{†}"}
forms["dat_pl_m"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
forms["dat_pl_f"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
forms["dat_pl_n"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
forms["acc_sg_m"] = "aliquem"
forms["acc_sg_f"] = "aliquam"
forms["acc_sg_n"] = "aliquod"
forms["acc_pl_m"] = "aliquōs"
forms["acc_pl_f"] = "aliquās"
forms["acc_pl_n"] = "aliqua"
forms["abl_sg_m"] = "aliquō"
forms["abl_sg_f"] = "aliquā"
forms["abl_sg_n"] = "aliquō"
forms["abl_pl_m"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
forms["abl_pl_f"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
forms["abl_pl_n"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
elseif arg1 == "quisquam" then
insert_if_not(data.title, "determinante indefinido, concordancia en negativo")
data.note = "En latín clásico, era preferidas las formas de ''ūllus'' en lugar de las esta voz para el femenino y el neutro."
forms["nom_sg_m"] = "quisquam"
forms["nom_sg_f"] = {"quaequam", "quisquam{†}"}
forms["nom_sg_n"] = "quodquam"
forms["nom_pl_m"] = "quīquam"
forms["nom_pl_f"] = "quaequam"
forms["nom_pl_n"] = "quaequam"
forms["gen_sg_m"] = "cuiusquam"
forms["gen_sg_f"] = "cuiusquam"
forms["gen_sg_n"] = "cuiusquam"
forms["gen_pl_m"] = "quōrumquam"
forms["gen_pl_f"] = "quārumquam"
forms["gen_pl_n"] = "quōrumquam"
forms["dat_sg_m"] = "cuiquam"
forms["dat_sg_f"] = "cuiquam"
forms["dat_sg_n"] = "cuiquam"
forms["dat_pl_m"] = "quibusquam"
forms["dat_pl_f"] = "quibusquam"
forms["dat_pl_n"] = "quibusquam"
forms["acc_sg_m"] = "quemquam"
forms["acc_sg_f"] = {"quamquam", "quemquam{†}"}
forms["acc_sg_n"] = "quodquam"
forms["acc_pl_m"] = "quōsquam"
forms["acc_pl_f"] = "quāsquam"
forms["acc_pl_n"] = "quaequam"
forms["abl_sg_m"] = {"quōquam", "quīquam{†}"}
forms["abl_sg_f"] = "quāquam"
forms["abl_sg_n"] = "quōquam"
forms["abl_pl_m"] = "quibusquam"
forms["abl_pl_f"] = "quibusquam"
forms["abl_pl_n"] = "quibusquam"
forms["voc_sg_m"] = "quisquam"
forms["voc_sg_f"] = "quaequam"
forms["voc_sg_n"] = "quodquam"
forms["voc_pl_m"] = "quīquam"
forms["voc_pl_f"] = "quaequam"
forms["voc_pl_n"] = "quaequam"
elseif arg1 == "quisquis" then
insert_if_not(data.title, "pronombre relativo/interrogativo")
forms["nom_sg_m"] = "quisquis"
forms["nom_sg_f"] = "quisquis"
forms["nom_sg_n"] = {"quidquid", "quicquid"}
forms["nom_pl_m"] = "quīquī"
forms["nom_pl_f"] = "quaequae"
forms["nom_pl_n"] = "quaequae"
forms["gen_sg_m"] = "cuiuscuius"
forms["gen_sg_f"] = "cuiuscuius"
forms["gen_sg_n"] = "cuiuscuius"
forms["gen_pl_m"] = "quōrumquōrum"
forms["gen_pl_f"] = "quārumquārum"
forms["gen_pl_n"] = "quōrumquōrum"
forms["dat_sg_m"] = "cuicui"
forms["dat_sg_f"] = "cuicui"
forms["dat_sg_n"] = "cuicui"
forms["dat_pl_m"] = {"quibusquibus", "quīsquīs"}
forms["dat_pl_f"] = {"quibusquibus", "quīsquīs"}
forms["dat_pl_n"] = {"quibusquibus", "quīsquīs"}
forms["acc_sg_m"] = "quemquem"
forms["acc_sg_f"] = "quamquam"
forms["acc_sg_n"] = {"quidquid", "quicquid"}
forms["acc_pl_m"] = "quōsquōs"
forms["acc_pl_f"] = "quāsquās"
forms["acc_pl_n"] = "quaequae"
forms["abl_sg_m"] = "quōquō"
forms["abl_sg_f"] = "quāquā"
forms["abl_sg_n"] = "quōquō"
forms["abl_pl_m"] = {"quibusquibus", "quīsquīs"}
forms["abl_pl_f"] = {"quibusquibus", "quīsquīs"}
forms["abl_pl_n"] = {"quibusquibus", "quīsquīs"}
forms["voc_sg_m"] = "quisquis"
forms["voc_sg_f"] = "quisquis"
forms["voc_sg_n"] = {"quidquid", "quicquid"}
forms["voc_pl_m"] = "quīquī"
forms["voc_pl_f"] = "quaequae"
forms["voc_pl_n"] = "quaequae"
elseif arg1 == "ecquis" then
insert_if_not(data.title, "pronombre interrogativo")
forms["nom_sg_m"] = {"ecquis", "ecquī"}
forms["nom_sg_f"] = {"ecqua", "ecquae"}
forms["nom_sg_n"] = "ecquid"
forms["nom_pl_m"] = "ecquī"
forms["nom_pl_f"] = "ecquae"
forms["nom_pl_n"] = {"ecqua", "ecquae"}
forms["gen_sg_m"] = "eccuius"
forms["gen_sg_f"] = "eccuius"
forms["gen_sg_n"] = "eccuius"
forms["dat_sg_m"] = "eccui"
forms["dat_sg_f"] = "eccui"
forms["dat_sg_n"] = "eccui"
forms["acc_sg_m"] = "ecquem"
forms["acc_sg_f"] = "ecquam"
forms["acc_sg_n"] = "ecquod"
forms["acc_pl_m"] = "ecquōs"
forms["acc_pl_f"] = "ecquās"
forms["acc_pl_n"] = {"ecqua", "ecquae"}
forms["abl_sg_m"] = {"ecquō", "ecquī"}
forms["abl_sg_f"] = {"ecquā", "ecquī"}
forms["abl_sg_n"] = {"ecquō", "ecquī"}
elseif arg1 == "quīdam" then
insert_if_not(data.title, "pronombre indefinido")
forms["nom_sg_m"] = "quīdam"
forms["nom_sg_f"] = "quaedam"
forms["nom_sg_n"] = "quiddam"
forms["nom_pl_m"] = {"quīdam", "quēsdam{†}"}
forms["nom_pl_f"] = "quaedam"
forms["nom_pl_n"] = "quaedam"
forms["gen_sg_m"] = {"cuiusdam", "quoiusdam{†}"}
forms["gen_sg_f"] = {"cuiusdam", "quoiusdam{†}"}
forms["gen_sg_n"] = {"cuiusdam", "quoiusdam{†}"}
forms["gen_pl_m"] = {"quōrundam", "quōrumdam"}
forms["gen_pl_f"] = {"quārundam", "quārumdam"}
forms["gen_pl_n"] = {"quōrundam", "quōrumdam"}
forms["dat_sg_m"] = {"cuidam", "quoidam{†}"}
forms["dat_sg_f"] = {"cuidam", "quoidam{†}"}
forms["dat_sg_n"] = {"cuidam", "quoidam{†}"}
forms["dat_pl_m"] = {"quibusdam", "quīsdam{†}"}
forms["dat_pl_f"] = {"quibusdam", "quīsdam{†}"}
forms["dat_pl_n"] = {"quibusdam", "quīsdam{†}"}
forms["acc_sg_m"] = {"quendam", "quemdam"}
forms["acc_sg_f"] = {"quandam", "quamdam"}
forms["acc_sg_n"] = "quiddam"
forms["acc_pl_m"] = {"quōsdam", "quēsdam{†}"}
forms["acc_pl_f"] = "quāsdam"
forms["acc_pl_n"] = "quaedam"
forms["abl_sg_m"] = "quōdam"
forms["abl_sg_f"] = "quādam"
forms["abl_sg_n"] = "quōdam"
forms["abl_pl_m"] = {"quibusdam", "quīsdam{†}"}
forms["abl_pl_f"] = {"quibusdam", "quīsdam{†}"}
forms["abl_pl_n"] = {"quibusdam", "quīsdam{†}"}
elseif arg1 == "nēmō" then
insert_if_not(data.title, "Determinante y pronombre, concordancia en negativo")
forms["nom_sg_m"] = "nēmō"
forms["nom_sg_f"] = "nēmō"
forms["gen_sg_m"] = {"nūllī̆us", "nēminis{R}"}
forms["gen_sg_f"] = {"nūllī̆us", "nēminis{R}"}
forms["dat_sg_m"] = "nēminī"
forms["dat_sg_f"] = "nēminī"
forms["acc_sg_m"] = "nēminem"
forms["acc_sg_f"] = "nēminem"
forms["abl_sg_m"] = {"nūllō", "nēmine{R}"}
forms["abl_sg_f"] = {"nūllā", "nēmine{R}"}
else
error('adjective ' .. arg1 .. ' not recognized')
end
end
local function extract_base(lemma, ending)
if ending:find("(", nil, true) then
return match(lemma, ending)
end
return match(lemma, "^(.*)" .. ending .. "$")
end
local function get_noun_subtype_by_ending(lemma, stem2, decltype, specified_subtypes,
endings_and_subtypes)
for _, ending_and_subtypes in ipairs(endings_and_subtypes) do
local ending = ending_and_subtypes[1]
local subtypes = ending_and_subtypes[2]
local not_this_subtype = false
if (
specified_subtypes.pl and not contains(subtypes, "pl") or
contains(subtypes, "both") and not specified_subtypes.both
) then
-- We now require that plurale tantum terms specify a plural-form lemma.
-- The autodetected subtypes will include 'pl' for such lemmas; if not,
-- we fail this entry. Additionally, if the rule contains 'both', it
-- must be explicitly specified to match.
not_this_subtype = true
else
for _, subtype in ipairs(subtypes) do
-- A subtype is directly canceled by specifying -SUBTYPE.
-- In addition, M or F as a subtype is canceled by N, and
-- vice-versa, but M doesn't cancel F or vice-versa; instead,
-- we simply ignore the conflicting gender specification when
-- constructing the combination of specified and inferred subtypes.
-- The reason for this is that neuters have distinct declensions
-- from masculines and feminines, but masculines and feminines have
-- the same declension, and various nouns in Latin that are
-- normally masculine are exceptionally feminine and vice-versa
-- (nauta, agricola, fraxinus, malus "apple tree", manus, rēs,
-- etc.).
--
-- In addition, sg as a subtype is canceled by pl and vice-versa.
-- It's also possible to specify both, which will override sg but
-- not cancel it (in the sense that it won't prevent the relevant
-- rule from matching). For example, there's a rule specifying that
-- lemmas beginning with a capital letter and ending in -ius take
-- the ius.voci.sg subtypes. Specifying such a lemma with the
-- subtype both will result in the ius.voci.both subtypes, whereas
-- specifying such a lemma with the subtype pl will cause this rule
-- not to match, and it will fall through to a less specific rule
-- that returns just the ius subtype, which will be combined with
-- the explicitly specified pl subtype to produce ius.pl.
if specified_subtypes["-" .. subtype] or
subtype == "N" and (specified_subtypes.M or specified_subtypes.F) or
(subtype == "M" or subtype == "F") and specified_subtypes.N or
subtype == "sg" and specified_subtypes.pl or
subtype == "pl" and specified_subtypes.sg then
not_this_subtype = true
break
end
end
end
if not not_this_subtype then
if type(ending) == "table" then
local lemma_ending = ending[1]
local stem2_ending = ending[2]
local base = extract_base(lemma, lemma_ending)
if base and base .. stem2_ending == stem2 then
return base, stem2, subtypes
end
else
local base = extract_base(lemma, ending)
if base then
return base, stem2, subtypes
end
end
end
end
if decltype then
error("Unrecognized ending for declension-" .. decltype .. " noun: " .. lemma)
end
return lemma, stem2, keys_to_list(specified_subtypes)
end
local patterns = {
{"[mM]a", "%0t"},
{"e", ""},
{"([aoAO])([lr])", "%1" .. MACRON .. "%2"},
{"[eE]l", "%0l"},
{"([mM])en", "%1in"},
{"([tT]ūd)ō", "%1in"},
{"([gG])ō", "%1in"},
{"[ōŌ]", "%1n"},
{"er", "r"},
{"[ēi]s", ""},
{"([āēīōūȳĀĒĪŌŪȲ]n)s", function(v)
return (gsub(toNFD(v), MACRON, "") .. "t")
end},
{"([cC])eps", "%1ipit"},
{"([bp])s", "%1"},
{"us", "or"},
{"s", "t"},
{"ex", "ic"},
{"x", "c"},
}
local function make_stem2(stem)
local n
for _, pattern in ipairs(patterns) do
local key = pattern[1]
stem, n = gsub(stem, key .. "$", pattern[2])
if n > 0 then
-- debug_track("la-utilities/" .. key) REVISAR
return toNFC(stem)
end
end
-- debug_track("la-utilities") REVISAR
return stem
end
local function detect_noun_subtype(lemma, stem2, typ, subtypes)
local base, _
if typ == "1" then
return get_noun_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"ām", {"F", "am"}},
{"ās", {"M", "Greek", "Ma"}},
{"ēs", {"M", "Greek", "Me"}},
{"ē", {"F", "Greek"}},
{"ae", {"F", "pl"}},
{"a", {"F"}},
})
elseif typ == "2" then
local detected_subtypes
lemma, stem2, detected_subtypes = get_noun_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"^(.*r)$", {"M", "er"}},
{"^(.*v)os$", {"M", "vos"}},
{"^(.*v)om$", {"N", "vom"}},
-- If the lemma ends in -os and the user said N or -M, then the
-- following won't apply, and the second (neuter) -os will applly.
{"os", {"M", "Greek"}},
{"os", {"N", "Greek", "us"}},
{"on", {"N", "Greek"}},
-- -ius beginning with a capital letter is assumed a proper name,
-- and takes the voci subtype (vocative in -ī) along with the ius
-- subtype and sg-only. Other nouns in -ius just take the ius
-- subtype. Explicitly specify "sg" so that if .pl is given,
-- this rule won't apply.
{"^(%u.*)ius$", {"M", "ius", "voci", "sg"}},
{"ius", {"M", "ius"}},
{"ium", {"N", "ium"}},
-- If the lemma ends in -us and the user said N or -M, then the
-- following won't apply, and the second (neuter) -us will applly.
{"us", {"M"}},
{"us", {"N", "us"}},
{"um", {"N"}},
{"iī", {"M", "ius", "pl"}},
{"ia", {"N", "ium", "pl"}},
-- If the lemma ends in -ī and the user said N or -M, then the
-- following won't apply, and the second (neuter) -ī will applly.
{"ī", {"M", "pl"}},
{"ī", {"N", "us", "pl"}},
{"oe", {"M", "Greek", "pl"}},
{"a", {"N", "pl"}},
})
stem2 = stem2 or lemma
return lemma, stem2, detected_subtypes
elseif typ == "3" then
if subtypes.pl then
if subtypes.Greek then
base = lemma:match("^(.*)erēs$")
if base then
return base .. "ēr", base .. "er", {"er"}
end
base = lemma:match("^(.*)ontēs$")
if base then
return base .. "ōn", base .. "ont", {"on"}
end
base = lemma:match("^(.*)es$")
if base then
return base, stem2 or base, {}
end
error("Unrecognized ending for declension-3 plural Greek noun: " .. lemma)
end
base = lemma:match("^(.*)ia$")
if base then
return base, stem2 or base, {"N", "I", "pure"}
end
base = lemma:match("^(.*)a$")
if base then
return base, stem2 or base, {"N"}
end
base = lemma:match("^(.*)ēs$")
if base then
return base, stem2 or base, {}
end
error("Unrecognized ending for declension-3 plural noun: " .. lemma)
end
stem2 = stem2 or make_stem2(lemma)
local detected_subtypes
if subtypes.Greek then
base, _, detected_subtypes = get_noun_subtype_by_ending(lemma, stem2, nil, subtypes, {
{{"is", ""}, {"I"}},
{"ēr", {"er"}},
{"ōn", {"on"}},
})
if base then
return lemma, stem2, detected_subtypes
end
return lemma, stem2, {}
end
if not subtypes.N then
base, _, detected_subtypes = get_noun_subtype_by_ending(lemma, stem2, nil, subtypes, {
{{"^(%u.*pol)is$", ""}, {"F", "polis", "sg", "loc"}},
{{"tūdō", "tūdin"}, {"F"}},
{{"tās", "tāt"}, {"F"}},
{{"tūs", "tūt"}, {"F"}},
{{"tiō", "tiōn"}, {"F"}},
{{"siō", "siōn"}, {"F"}},
{{"xiō", "xiōn"}, {"F"}},
{{"gō", "gin"}, {"F"}},
{{"or", "ōr"}, {"M"}},
{{"tr[iī]x", "trīc"}, {"F"}},
{{"is", ""}, {"I"}},
{{"^(%l.*)ēs$", ""}, {"I"}},
})
if base then
return lemma, stem2, detected_subtypes
end
end
base, _, detected_subtypes = get_noun_subtype_by_ending(lemma, stem2, nil, subtypes, {
{{"us", "or"}, {"N"}},
{{"us", "er"}, {"N"}},
{{"ma", "mat"}, {"N"}},
{{"men", "min"}, {"N"}},
{{"^(%u.*)e$", ""}, {"N", "sg"}},
{{"e", ""}, {"N", "I", "pure"}},
{{"al", "āl"}, {"N", "I", "pure"}},
{{"ar", "ār"}, {"N", "I", "pure"}},
})
if base then
return lemma, stem2, detected_subtypes
end
return lemma, stem2, {}
elseif typ == "4" then
if subtypes.echo or subtypes.Callisto then
base = lemma:match("^(.*)ō$")
if not base then
error("Declension-4 noun of subtype .echo or .Callisto should end in -ō: " .. lemma)
end
if subtypes.Callisto then
return base, nil, {"F", "sg"}
else
return base, nil, {"F"}
end
end
return get_noun_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"us", {"M"}},
{"ū̆", {"N"}},
{"ūs", {"M", "pl"}},
{"ua", {"N", "pl"}},
})
elseif typ == "5" then
return get_noun_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"iēs", {"F", "i"}},
{"iēs", {"F", "i", "pl"}},
{"ēs", {"F"}},
{"ēs", {"F", "pl"}},
})
elseif typ == "sgpl" then
return lemma, stem2, {}
elseif typ == "irreg" and lemma == "domus" then
-- [[domus]] auto-sets data.loc = true, but we need to know this
-- before declining the noun so we can propagate it to other segments.
return lemma, nil, {"loc"}
elseif typ == "indecl" or typ == "irreg" and (
lemma == "Deus" or match(lemma, "^[IJ]ēs[uū]s$") or
lemma == "Athōs" or lemma == "vēnum"
) then
-- Indeclinable nouns, and certain irregular nouns, set data.num = "sg",
-- but we need to know this before declining the noun so we can
-- propagate it to other segments.
return get_noun_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"", {"both"}},
{"", {"sg"}},
{"", {"pl"}},
})
elseif typ == "indecl" or typ == "irreg" then
return lemma, nil, {}
else
return nil, nil, {}
end
end
-- Given ENDINGS_AND_SUBTYPES (a list of four-tuples of ENDING, RETTYPE,
-- SUBTYPES, PROCESS_RETVAL), check each ENDING in turn against LEMMA and
-- STEM2. If it matches, return a four-tuple BASE, STEM2, RETTYPE, NEW_SUBTYPES
-- where BASE is normally the remainder of LEMMA minus the ending, STEM2 is
-- as passed in, RETTYPE is as passed in, and NEW_SUBTYPES is the same as
-- SUBTYPES minus any subtypes beginning with a hyphen. If no endings match,
-- throw an error if DECLTYPPE is non-nil, mentioning the DECLTYPE
-- (user-specified declension); but if DECLTYPE is nil, just return the tuple
-- nil, nil, nil, nil.
--
-- In order for a given entry to match, ENDING must match and also the subtypes
-- in SUBTYPES (a list) must not be incompatible with the passed-in
-- user-specified subtypes SPECIFIED_SUBTYPES (a set, i.e. a table where the
-- keys are strings and the value is always true). "Incompatible" means that
-- a given SUBTYPE is specified in either one and -SUBTYPE in the other, or
-- that "pl" is found in SPECIFIED_SUBTYPES and not in SUBTYPES.
--
-- The ending spec in ENDINGS_AND_SUBTYPES is one of the following:
--
-- 1. A simple string, e.g. "tūdō", specifying an ending.
-- 2. A regex that should match the entire lemma (it should be anchored at
-- the beginning with ^ and at the end with $), and contains a single
-- capturing group to match the base.
-- 3. A pair {SIMPLE_STRING_OR_REGEX, STEM2_ENDING} where
-- SIMPLE_STRING_OR_REGEX is one of the previous two possibilities and
-- STEM2_ENDING is a string specifying the corresponding ending that must
-- be present in STEM2. If this form is used, the combination of
-- base + STEM2_ENDING must exactly match STEM2 in order for this entry
-- to be considered a match. An example is {"is", ""}, which will match
-- lemma == "follis", stem2 == "foll", but not lemma == "lapis",
-- stem2 == "lapid".
--
-- If PROCESS_STEM2 is given and the returned STEM2 would be nil, call
-- process_stem2(BASE) to get the STEM2 to return.
local function get_adj_type_and_subtype_by_ending(lemma, stem2, decltype,
specified_subtypes, endings_and_subtypes, process_stem2)
for _, ending_and_subtypes in ipairs(endings_and_subtypes) do
local ending = ending_and_subtypes[1]
local rettype = ending_and_subtypes[2]
local subtypes = ending_and_subtypes[3]
local process_retval = ending_and_subtypes[4]
local not_this_subtype = false
if (
specified_subtypes.pl and not contains(subtypes, "pl") or
contains(subtypes, "both") and not specified_subtypes.both
) then
-- We now require that plurale tantum terms specify a plural-form lemma.
-- The autodetected subtypes will include 'pl' for such lemmas; if not,
-- we fail this entry. Additionally, if the rule contains 'both', it
-- must be explicitly specified to match.
not_this_subtype = true
else
for _, subtype in ipairs(subtypes) do
-- A subtype is directly canceled by specifying -SUBTYPE.
if specified_subtypes["-" .. subtype] then
not_this_subtype = true
break
end
-- A subtype is canceled if the user specified SUBTYPE and
-- -SUBTYPE is given in the to-be-returned subtypes.
local must_not_be_present = subtype:match("^%-(.*)$")
if must_not_be_present and specified_subtypes[must_not_be_present] then
not_this_subtype = true
break
end
end
end
if not not_this_subtype then
local base
if type(ending) == "table" then
local lemma_ending = ending[1]
local stem2_ending = ending[2]
base = extract_base(lemma, lemma_ending)
if base and base .. stem2_ending ~= stem2 then
base = nil
end
else
base = extract_base(lemma, ending)
end
if base then
-- Remove subtypes of the form -SUBTYPE from the subtypes
-- to be returned.
local new_subtypes = {}
for _, subtype in ipairs(subtypes) do
if subtype:sub(1, 1) ~= "-" then
insert(new_subtypes, subtype)
end
end
if process_retval then
base, stem2 = process_retval(base, stem2)
end
if process_stem2 then
stem2 = stem2 or process_stem2(base)
end
return base, stem2, rettype, new_subtypes
end
end
end
if not decltype then
return lemma, stem2, nil, keys_to_list(specified_subtypes)
elseif decltype == "" then
error("Unrecognized ending for adjective: " .. lemma)
else
error("Unrecognized ending for declension-" .. decltype .. " adjective: " .. lemma)
end
end
-- Autodetect the type and subtype of an adjective given all the information
-- specified by the user: lemma, stem2, declension type and specified subtypes.
-- Four values are returned: the lemma base (i.e. the stem of the lemma, as
-- required by the declension functions), the value of stem2 to pass to the
-- declension function, the declension type and the autodetected subtypes.
-- Note that this will not detect a given subtype if -SUBTYPE is specified for
-- any subtype that would be returned, or if SUBTYPE is specified and -SUBTYPE
-- is among the subtypes that would be returned (such subtypes are filtered out
-- of the returned subtypes).
local function detect_adj_type_and_subtype(lemma, stem2, typ, subtypes)
local function base_as_stem2(base, stem2)
return base, base
end
local function constant_base(baseval)
return function(base, stem2)
return baseval, nil
end
end
local function decl12_stem2(base)
return base
end
local function decl3_stem2(base)
return make_stem2(base)
end
local decl12_entries = {
{"us", "1&2+", {}},
{"a", "1&2+", {}},
{"um", "1&2+", {}},
{"ī", "1&2+", {"pl"}},
{"ae", "1&2+", {"pl"}},
{"a", "1&2+", {"pl"}},
-- Nearly all -os adjectives are greekA
{"os", "1&2+", {"greekA", "-greekE"}},
{"os", "1&2+", {"greekE", "-greekA"}},
{"ē", "1&2+", {"greekE", "-greekA"}},
{"on", "1&2+", {"greekA", "-greekE"}},
{"on", "1&2+", {"greekE", "-greekA"}},
{"^(.*er)$", "1&2+", {"er"}},
{"^(.*ur)$", "1&2+", {"er"}},
{"^(h)ic$", "1&2+", {"ic"}},
}
local decl3_entries = {
{"^(.*er)$", "3-3+", {"I"}},
{"^(.*er)$", "3-3+", {}},
{"is", "3-2+", {"I"}},
{"is", "3-2+", {}},
{"e", "3-2+", {"I"}},
{"e", "3-2+", {}},
{"^(.*[ij])or$", "3-C+", {"abl_e_i", "-abl_i_e"}},
{"^(.*[ij])or$", "3-C+", {}},
{"^(min)or$", "3-C+", {"abl_e_i", "-abl_i_e"}},
{"^(min)or$", "3-C+", {}},
{"^(.*trīx)$", "3-def+", {"trix", "abl_i_e", "-abl_e_i"}},
{"^(.*trīx)$", "3-def+", {"trix"}},
{"^(.*tor)$", "3-def+", {"tor", "abl_i_e", "-abl_e_i"}},
{"^(.*tor)$", "3-def+", {"tor"}},
-- Detect -ēs as 3-1 without auto-inferring .pl if .pl
-- not specified. If we don't do this, the later entry for
-- -ēs will auto-infer .pl whenever -ēs is specified (which
-- won't work for adjectives like quadripēs, volucripēs).
-- Essentially, for declension-3 adjectives, we require that
-- .pl is given if the lemma is plural.
--
-- Most 3-1 adjectives are i-stem (e.g. audāx) so we require -I
-- to be given with non-i-stem adjectives. The first entry below
-- will apply when -I isn't given, the second when it is given.
{"^(.*ēs)$", "3-1+", {"I", "abl_i_e", "-abl_e_i"}},
{"^(.*ēs)$", "3-1+", {"I"}},
{"^(.*ēs)$", "3-1+", {"par", "abl_i_e", "-abl_e_i"}},
{"^(.*ēs)$", "3-1+", {"par"}},
{"^(.*[ij])ōrēs$", "3-C+", {"pl"}},
{"^(min)ōrēs$", "3-C+", {"pl"}},
-- If .pl with -ēs, we don't know if the adjective is 3-1, 3-2
-- or 3-3. Since 3-2 is probably the most common, we infer it
-- (as well as the fact that these adjectives *are* in a sense
-- 3-2 since they have a distinct neuter in -(i)a. Note that
-- we have two entries here; the first one will apply unless
-- -I is given, and will infer an i-stem adjective; the second
-- one will apply otherwise (and infer a non-i-stem 3-1 adjective).
{"ēs", "3-2+", {"pl", "I"}, base_as_stem2},
{"ēs", "3-1+", {"pl", "par"}, base_as_stem2},
-- Same for neuters.
{"ia", "3-2+", {"pl", "I"}, base_as_stem2},
{"a", "3-1+", {"pl", "par"}, base_as_stem2},
-- As above for -ēs but for miscellaneous singulars.
{"", "3-1+", {"I", "abl_i_e", "-abl_e_i"}},
{"", "3-1+", {"I"}},
{"", "3-1+", {"par", "abl_i_e", "-abl_e_i"}},
{"", "3-1+", {"par"}},
}
local function get_subtypes_and_endings(typ, f)
local subtypes_and_endings = {}
for _, v in ipairs(decl3_entries) do
if f(v) then
v = deep_copy(v)
v[2] = typ
insert(subtypes_and_endings, v)
end
end
return subtypes_and_endings
end
local function compare(spec)
return spec[2] == typ
end
if typ == "+" then
local base, new_stem2, rettype, new_subtypes = get_adj_type_and_subtype_by_ending(lemma, stem2, nil, subtypes, decl12_entries, decl12_stem2)
if rettype then
return base, new_stem2, rettype, new_subtypes
else
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, decl3_entries, decl3_stem2)
end
elseif typ == "3+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, decl3_entries, decl3_stem2)
elseif typ == "1&2+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, decl12_entries, decl12_stem2)
elseif typ == "1-1+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"a", typ, {}},
{"ae", typ, {"pl"}},
})
elseif typ == "2-2+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"us", typ, {}},
{"um", typ, {}},
{"ī", typ, {"pl"}},
{"a", typ, {"pl"}},
{"os", typ, {"greek"}},
{"on", typ, {"greek"}},
{"oe", typ, {"greek", "pl"}},
})
elseif typ == "3-1+" then
-- Use the specs from `decl3_entries`, but add the two i-stem 3-2+ specs when plural-only, as they're the same when 3-1+.
local subtypes_and_endings = get_subtypes_and_endings(typ, function(spec)
local spec1, spec2 = spec[1], spec[2]
return spec2 == typ or (spec2 == "3-2+" and spec1 == "ēs" or spec1 == "ia")
end)
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, subtypes_and_endings, decl3_stem2)
elseif typ == "3-def+" then
-- Like 3-1+ but defective in gender
local subtypes_and_endings = get_subtypes_and_endings(typ, compare)
insert(subtypes_and_endings, {"", typ, {"I"}})
insert(subtypes_and_endings, {"", typ, {"par"}})
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, subtypes_and_endings, decl3_stem2)
elseif typ == "3-2+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"is", typ, {}},
{"e", typ, {}},
-- Detect -ēs as 3-2 without auto-inferring .pl if .pl
-- not specified. If we don't do this, the later entry for
-- -ēs will auto-infer .pl whenever -ēs is specified (which
-- won't work for adjectives like isoscelēs). Essentially,
-- for declension-3 adjectives, we require that .pl is given
-- if the lemma is plural.
{"ēs", typ, {}},
{"ēs", typ, {"pl"}},
{"ia", typ, {"pl"}},
}, decl3_stem2)
elseif typ == "3-3+" or typ == "3-P+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"ēs", typ, {"pl"}, base_as_stem2},
{"ia", typ, {"pl"}, base_as_stem2},
{"", typ, {}},
}, decl3_stem2)
elseif typ == "3-C+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, get_subtypes_and_endings(typ, compare), decl3_stem2)
elseif typ == "irreg+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"^(duo)$", typ, {"pl"}},
{"^(ambō)$", typ, {"pl"}},
{"^(mīll?ia)$", typ, {"N", "pl"}, constant_base("mīlle")},
-- match ea
{"^(ea)$", typ, {}, constant_base("is")},
-- match id
{"^(id)$", typ, {}, constant_base("is")},
-- match plural eī, iī
{"^([ei]ī)$", typ, {"pl"}, constant_base("is")},
-- match plural ea, eae
{"^(eae?)$", typ, {"pl"}, constant_base("is")},
-- match eadem
{"^(eadem)$", typ, {}, constant_base("īdem")},
-- match īdem, idem
{"^([īi]dem)$", typ, {}, constant_base("īdem")},
-- match plural īdem
{"^(īdem)$", typ, {"pl"}},
-- match plural eadem, eaedem
{"^(eae?dem)$", typ, {"pl"}, constant_base("īdem")},
-- match illa, ipsa, ista; it doesn't matter if we overmatch because
-- we'll get an error as we use the stem itself in the returned base
{"^(i[lps][lst])a$", typ, {}, function(base, stem2) return base .. "e", nil end},
-- match illud, istud; as above, it doesn't matter if we overmatch
{"^(i[ls][lt])ud$", typ, {}, function(base, stem2) return base .. "e", nil end},
-- match ipsum
{"^(ipsum)$", typ, {}, constant_base("ipse")},
-- match plural illī, ipsī, istī; as above, it doesn't matter if we
-- overmatch
{"^(i[lps][lst])ī$", typ, {"pl"}, function(base, stem2) return base .. "e", nil end},
-- match plural illa, illae, ipsa, ipsae, ista, istae; as above, it
-- doesn't matter if we overmatch
{"^(i[lps][lst])ae?$", typ, {"pl"}, function(base, stem2) return base .. "e", nil end},
-- Detect quī as non-plural unless .pl specified.
{"^(quī)$", typ, {}},
-- Otherwise detect quī as plural.
{"^(quī)$", typ, {"pl"}},
-- Same for quae.
{"^(quae)$", typ, {}, constant_base("quī")},
{"^(quae)$", typ, {"pl"}, constant_base("quī")},
{"^(quid)$", typ, {}, constant_base("quis")},
{"^(quod)$", typ, {}, constant_base("quī")},
{"^(qui[cd]quid)$", typ, {}, constant_base("quisquis")},
{"^(quīquī)$", typ, {"pl"}, constant_base("quisquis")},
{"^(quaequae)$", typ, {"pl"}, constant_base("quisquis")},
-- match all remaining lemmas in lemma form
{"", typ, {}},
})
elseif typ == "indecl+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"", typ, {"both"}},
{"", typ, {"sg"}},
{"", typ, {"pl"}},
})
else -- 0+
return lemma, nil, typ, {}
end
end
local noun_lb = {
nom_sg = "sg.",
gen_sg = "sg.",
dat_sg = "sg.",
acc_sg = "sg.",
abl_sg = "sg.",
voc_sg = "sg.",
loc_sg = "sg.",
nom_pl = "pl.",
gen_pl = "pl.",
dat_pl = "pl.",
acc_pl = "pl.",
abl_pl = "pl.",
voc_pl = "pl.",
loc_pl = "pl."
}
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"] = {},
["num"] = {por_defecto = ""},
["núm"] = {alias_de = "num"},
["nota"] = {},
}
for form,_ in pairs(noun_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)
local tpalabras = {}
for _,p in ipairs(args) do
p = match(p, "^(.-);") or p
local a, b = match(p, "^(.-)%.(.*)$")
assert(b, "error en especificaciones de palabra")
local r1 = match(a, "^([^/]+)/")
if not r1 then
r1 = a
end
if r1 == "idem" or r1 == "īdem" then -- REVISAR: parche para idem que internamente lo declina como si fuera "i"
insert(tpalabras, "ī")
else
insert(tpalabras, r1)
end
end
local palabras, separadores = separar_palabras(title, concat(tpalabras, "-"))
local L = #palabras
local M = 1
local declinfo
local titles = {}
local cats = {}
local genero
local nosg, nopl = true, true
for _,arg in ipairs(args) do
local formas = {}
for subarg in gsplit(arg, ";") do
local types = {}
local a, b = match(subarg, "^(.-)%.(.*)$")
assert(b, "error en especificaciones de palabra")
local c, d = match(b, "^(.-)%.(.*)$")
if d then
for spec in gsplit(d, "%.") do
spec = gsub(spec, "(.)%-", "%1_")
types[spec] = true
end
end
c = c or b
local r = split(a, "/")
local r1, r2, detected_subtypes = detect_noun_subtype(r[1], r[2], c, types)
for _, subtype in ipairs(detected_subtypes) do
if types["-" .. subtype] then
-- if a "cancel subtype" spec is given, remove the cancel spec
-- and don't apply the subtype
types["-" .. subtype] = nil
elseif (subtype == "M" or subtype == "F" or subtype == "N") and
(types.M or types.F or types.N) then
-- if gender already specified, don't create conflicting gender spec
elseif (subtype == "sg" or subtype == "pl" or subtype == "both") and
(types.sg or types.pl or types.both) then
-- if number restriction already specified, don't create conflicting
-- number restriction spec
else
types[subtype] = true
end
end
if not genero then
if types.M then
genero = "m"
end
if types.N then
genero = "n"
end
if types.F then
genero = "f"
end
end
local es_adj
if not r1 and genero then
local typ
r1, r2, typ, detected_subtypes = detect_adj_type_and_subtype(r[1], r[2], c, types)
if r1 then
c = typ
es_adj = true
end
end
assert(r1, "forma no reconocida: "..r[1])
local cb = es_adj and adj_decl[c] or noun_decl[c]
assert(cb, "Especifique el tipo de sustantivo correcto en el primer parámetro")
local data = {forms={}, types=types, pos="", subtitles="", notes="", categories=cats, title=titles, loc=types.loc, num=args.num}
cb(data, {r1, r2})
if es_adj then
local forms_ = {}
for form,arr in pairs(data.forms) do
local f1, f2 = form:match("^(.*)(_"..genero..")$")
if f1 then
forms_[f1] = arr
end
end
data.forms = forms_
end
if not types.sg then
nopl = false
end
if not types.pl then
nosg = false
end
if types.sg then
for key,_ in pairs(data.forms) do
if key:find("_pl") then
data.forms[key] = {}
end
end
end
if types.pl then
for key,_ in pairs(data.forms) do
if key:find("_sg") then
data.forms[key] = {}
end
end
end
merge_forms(formas, data.forms, noun_lb)
end
if not declinfo then
declinfo = formas
else
declinfo = combinar_copulativa(declinfo, formas, separadores[M])
M = M + 1
end
end
if declinfo["loc_sg"] and #declinfo["loc_sg"] == 0 then
declinfo["loc_sg"] = nil
end
if declinfo["loc_pl"] and #declinfo["loc_pl"] == 0 then
declinfo["loc_pl"] = nil
end
if nosg == false then
nosg = find(args["num"], "p")
end
if nopl == false then
nopl = find(args["num"], "s")
end
local forms = sobreescribir_formas(declinfo, args, false, {})
comprobar_defectivo(forms, {})
forms = desactivar_formas(forms,
function (form)
return (form:find("pl$") and nopl) or (form:find("sg$") and nosg)
end
)
local raiz_nom = f(forms["nom_sg"][1] or forms["nom_pl"][1] or "?")
local raiz_gen = f(forms["gen_sg"][1] or forms["gen_pl"][1] or "?")
forms = agregar_enlaces(forms, title, normalizar_enlace)
forms = formatear_formas(forms, noun_lb)
local t = {}
insert(t, {{""}, {"Singular"}, {"Plural"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Nominativo", header=true, color=COLOR_H}, forms["nom_sg"], forms["nom_pl"]})
insert(t, {{"Genitivo", header=true, color=COLOR_H}, forms["gen_sg"], forms["gen_pl"]})
insert(t, {{"Dativo", header=true, color=COLOR_H}, forms["dat_sg"], forms["dat_pl"]})
insert(t, {{"Acusativo", header=true, color=COLOR_H}, forms["acc_sg"], forms["acc_pl"]})
insert(t, {{"Ablativo", header=true, color=COLOR_H}, forms["abl_sg"], forms["abl_pl"]})
insert(t, {{"Vocativo", header=true, color=COLOR_H}, forms["voc_sg"], forms["voc_pl"]})
if (forms["loc_sg"] and forms["loc_sg"][1]) or (forms["loc_pl"] and forms["loc_pl"][1]) then
insert(t, {{"Locativo", header=true, color=COLOR_H}, forms["loc_sg"], forms["loc_pl"]})
end
insert(t, {{args["nota"] or "", colspan=3}})
return renderizar_tabla(
frame,
"'''Declinación de ''"..raiz_nom..", "..raiz_gen.."'''''  tipo: "..concat(titles, ", "),
t,
ns == 0 and cats or {}
)
end
local adj_lb = {
nom_sg_m = "m.",
nom_sg_n = "n.",
nom_sg_f = "f.",
nom_pl_m = "m.",
nom_pl_n = "n.",
nom_pl_f = "f.",
gen_sg_m = "m.",
gen_sg_n = "n.",
gen_sg_f = "f.",
gen_pl_m = "m.",
gen_pl_n = "n.",
gen_pl_f = "f.",
dat_sg_m = "m.",
dat_sg_n = "n.",
dat_sg_f = "f.",
dat_pl_m = "m.",
dat_pl_n = "n.",
dat_pl_f = "f.",
acc_sg_m = "m.",
acc_sg_n = "n.",
acc_sg_f = "f.",
acc_pl_m = "m.",
acc_pl_n = "n.",
acc_pl_f = "f.",
abl_sg_m = "m.",
abl_sg_n = "n.",
abl_sg_f = "f.",
abl_pl_m = "m.",
abl_pl_n = "n.",
abl_pl_f = "f.",
voc_sg_m = "m.",
voc_sg_n = "n.",
voc_sg_f = "f.",
voc_pl_m = "m.",
voc_pl_n = "n.",
voc_pl_f = "f.",
}
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] = {requerido=true},
["alt"] = {},
["num"] = {por_defecto = ""},
["núm"] = {alias_de="num"},
["gen"] = {por_defecto="mfn"},
["nota"] = {},
}
for form,_ in pairs(adj_lb) do
params[form] = {lista=true}
end
params["dat_pl"] = {lista=true}
params["abl_pl"] = {lista=true}
params["loc_pl"] = {lista=true}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
if args["dat_pl"][1] then
args["dat_pl_m"] = deep_copy(args["dat_pl"])
args["dat_pl_n"] = deep_copy(args["dat_pl"])
args["dat_pl_f"] = deep_copy(args["dat_pl"])
end
if args["abl_pl"][1] then
args["abl_pl_m"] = deep_copy(args["abl_pl"])
args["abl_pl_n"] = deep_copy(args["abl_pl"])
args["abl_pl_f"] = deep_copy(args["abl_pl"])
end
if args["loc_pl"][1] then
args["loc_pl_m"] = deep_copy(args["loc_pl"])
args["loc_pl_n"] = deep_copy(args["loc_pl"])
args["loc_pl_f"] = deep_copy(args["loc_pl"])
end
args["dat_pl"] = nil
args["abl_pl"] = nil
args["loc_pl"] = nil
assert(not find(title, " "), "locuciones no soportadas aún") -- REVISAR
local tpalabras = {}
for _,p in ipairs(args) do
p = match(p, "^(.-);") or p
local a, b = match(p, "^(.-)%.(.*)$")
assert(b, "error en especificaciones de palabra")
local r1 = match(a, "^([^/]+)/")
if not r1 then
r1 = a
end
if r1 == "idem" or r1 == "īdem" then -- REVISAR: parche para idem que internamente lo declina como si fuera "i"
insert(tpalabras, "ī")
else
insert(tpalabras, r1)
end
end
local palabras, separadores = separar_palabras(title, concat(tpalabras, "-"))
local L = #palabras
local M = 1
local declinfo
local titles = {}
local cats = {}
local nosg, nopl = true, true
for _,arg in ipairs(args) do
local formas = {}
for subarg in gsplit(arg, ";") do
local types = {}
local a, b = match(subarg, "^(.-)%.(.*)$")
a = a or subarg
b = b or "+"
local c, d = match(b, "^(.-)%.(.*)$")
if d then
for spec in gsplit(d, "%.") do
spec = gsub(spec, "(.)%-", "%1_")
types[spec] = true
end
end
c = c or b
local r = split(a, "/")
local r1, r2, typ, detected_subtypes = detect_adj_type_and_subtype(r[1], r[2], c, types)
for _, subtype in ipairs(detected_subtypes) do
if types["-" .. subtype] then
-- if a "cancel subtype" spec is given, remove the cancel spec
-- and don't apply the subtype
types["-" .. subtype] = nil
elseif (subtype == "M" or subtype == "F" or subtype == "N") and
(types.M or types.F or types.N) then
-- if gender already specified, don't create conflicting gender spec
elseif (subtype == "sg" or subtype == "pl" or subtype == "both") and
(types.sg or types.pl or types.both) then
-- if number restriction already specified, don't create conflicting
-- number restriction spec
else
types[subtype] = true
end
end
local cb = adj_decl[typ]
assert(cb, "Especifique el tipo de sustantivo correcto en el primer parámetro")
local data = {forms={}, types=types, pos="", subtitles="", notes="", categories=cats, title=titles, loc=types.loc, num=args.num}
cb(data, {r1, r2})
local formas_ = {} -- necesario crear otro arreglo para no modificar las claves durante la iteración
for form,arr in pairs(data.forms) do
local pref = match(form, "^(.*)_m$")
if pref and not data.forms[pref.."_f"] then
formas_[pref.."_f"] = deep_copy(arr)
end
if pref and not data.forms[pref.."_n"] then
formas_[pref.."_n"] = deep_copy(arr)
end
formas_[form] = arr
end
data.forms = formas_
if not types.sg then
nopl = false
end
if not types.pl then
nosg = false
end
if types.sg then
for key,_ in pairs(data.forms) do
if key:find("_pl") then
data.forms[key] = {}
end
end
end
if types.pl then
for key,_ in pairs(data.forms) do
if key:find("_sg") then
data.forms[key] = {}
end
end
end
merge_forms(formas, data.forms, adj_lb)
end
if not declinfo then
declinfo = formas
else
declinfo = combinar_copulativa(declinfo, formas, separadores[M])
M = M + 1
end
end
if nosg == false then
nosg = find(args["num"], "p")
end
if nopl == false then
nopl = find(args["num"], "s")
end
local m = find(args["gen"], "m")
local fem = find(args["gen"], "f")
local n = find(args["gen"], "n")
local forms = sobreescribir_formas(declinfo, args, false, {}, adj_lb)
comprobar_defectivo(forms)
forms = desactivar_formas(forms,
function (form)
return (form:find("pl") and nopl) or (form:find("sg") and nosg) or (form:find("m$") and not m) or (form:find("f$") and not fem) or (form:find("n$") and not n)
end
)
local raiz_m = f(forms["nom_sg_m"][1] or forms["nom_pl_m"][1] or "?")
local raiz_f = f(forms["nom_sg_f"][1] or forms["nom_pl_f"][1] or "?")
local raiz_n = f(forms["nom_sg_n"][1] or forms["nom_pl_n"][1] or "?")
forms = agregar_enlaces(forms, title, normalizar_enlace)
forms = formatear_formas(forms, adj_lb)
local t = {}
insert(t, {{"Singular", colspan=4}, header=true, color=COLOR_H})
insert(t, {{""}, {"Masculino"}, {"Femenino"}, {"Neutro"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Nominativo", header=true, color=COLOR_H}, forms["nom_sg_m"], forms["nom_sg_f"], forms["nom_sg_n"]})
insert(t, {{"Genitivo", header=true, color=COLOR_H}, forms["gen_sg_m"], forms["gen_sg_f"], forms["gen_sg_n"]})
insert(t, {{"Dativo", header=true, color=COLOR_H}, forms["dat_sg_m"], forms["dat_sg_f"], forms["dat_sg_n"]})
insert(t, {{"Acusativo", header=true, color=COLOR_H}, forms["acc_sg_m"], forms["acc_sg_f"], forms["acc_sg_n"]})
insert(t, {{"Ablativo", header=true, color=COLOR_H}, forms["abl_sg_m"], forms["abl_sg_f"], forms["abl_sg_n"]})
insert(t, {{"Vocativo", header=true, color=COLOR_H}, forms["voc_sg_m"], forms["voc_sg_f"], forms["voc_sg_n"]})
insert(t, {{"Plural", colspan=4, header=true, color=COLOR_H}})
insert(t, {{""}, {"Masculino"}, {"Femenino"}, {"Neutro"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Nominativo", header=true, color=COLOR_H}, forms["nom_pl_m"], forms["nom_pl_f"], forms["nom_pl_n"]})
insert(t, {{"Genitivo", header=true, color=COLOR_H}, forms["gen_pl_m"], forms["gen_pl_f"], forms["gen_pl_n"]})
insert(t, {{"Dativo", header=true, color=COLOR_H}, forms["dat_pl_m"], forms["dat_pl_f"], forms["dat_pl_n"]})
insert(t, {{"Acusativo", header=true, color=COLOR_H}, forms["acc_pl_m"], forms["acc_pl_f"], forms["acc_pl_n"]})
insert(t, {{"Ablativo", header=true, color=COLOR_H}, forms["abl_pl_m"], forms["abl_pl_f"], forms["abl_pl_n"]})
insert(t, {{"Vocativo", header=true, color=COLOR_H}, forms["voc_pl_m"], forms["voc_pl_f"], forms["voc_pl_n"]})
insert(t, {{args["nota"] or "", colspan=4}})
return renderizar_tabla(
frame,
"'''Declinación de ''"..raiz_m..", "..raiz_f..", "..raiz_n.."'''''  tipo: "..concat(titles, ", "),
t,
ns == 0 and cats or {}
)
end
local EGO, TU, IS, NOS, VOS, EI = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"ego", "tū", "is, ea, id", "nōs", "vōs", "eī, eae, ea"}
local PRONOMBRES_SUBJ = {"ut ego", "ut tū", "ut is, ut ea, ut id", "ut nōs", "ut vōs", "ut eī, ut eae, ut ea"}
local PRONOMBRES_IMP = {"―", "(tū)", "(is, ea, id)", "―", "(vōs)", "(eī, eae, ea)"}
local IMPERSONALES = {"", "", "(id)", "", "", ""}
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 IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
end
if find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local sufijos = {
["1"] = {
inf_act = {"āre","isse"},
inf_pas = {"ārī"},
part_act = {"āns","ūrus"},
part_pas = {"andus","us"},
ger = {"andī","andō","andum"},
sup = {"um","ū"},
ind_pres = {"ō","ās","at","āmus","ātis","ant"},
ind_imp = {"ābam","ābās","ābat","ābāmus","ābātis","ābant"},
ind_perf = {"ī","istī","it","imus","istis","ērunt",
nil,nil,nil,nil,nil,"ēre"},
ind_pluperf = {"eram","erās","erat","erāmus","erātis","erant"},
ind_fut = {"ābō","ābis","ābit","ābimus","ābitis","ābunt"},
ind_fut_perf = {"erō","eris","erit","erimus","eritis","erint"},
ind_fut_sig = {"ō","is","it","imus","itis","int"},
ind_pres_pas = {"or","āris","ātur","āmur","āminī","antur",
nil,"āre"},
ind_imp_pas = {"ābar","ābāris","ābātur","ābāmur","ābāminī","ābantur",
nil,"ābāre"},
ind_fut_pas = {"ābor","āberis","ābitur","ābimur","ābiminī","ābuntur",
nil,"ābere"},
subj_pres = {"em","ēs","et","ēmus","ētis","ent"},
subj_imp = {"ārem","ārēs","āret","ārēmus","ārētis","ārent"},
subj_perf = {"erim","erīs","erit","erīmus","erītis","erint"},
subj_pluperf = {"issem","issēs","isset","issēmus","issētis","issent"},
subj_aor_sig = {"im","īs","īt","īmus","ītis","int"},
subj_pres_pas = {"er","ēris","ētur","ēmur","ēminī","entur",
nil,"ēre"},
subj_imp_pas = {"ārer","ārēris","ārētur","ārēmur","ārēminī","ārentur",
nil,"ārēre"},
imper_pres = {nil,"ā",nil,nil,"āte",nil},
imper_fut = {nil,"ātō","ātō",nil,"ātōte","antō"},
imper_pres_pas = {nil,"āre",nil,nil,"āminī",nil},
imper_fut_pas = {nil,"ātor","ātor",nil,nil,"antor"},
},
["2"] = {
inf_act = {"ēre","isse"},
inf_pas = {"ērī"},
part_act = {"ēns","ūrus"},
part_pas = {"endus","us"},
ger = {"endī","endō","endum"},
sup = {"um","ū"},
ind_pres = {"eō","ēs","et","ēmus","ētis","ent"},
ind_imp = {"ēbam","ēbās","ēbat","ēbāmus","ēbātis","ēbant"},
ind_perf = {"ī","istī","it","imus","istis","ērunt",
nil,nil,nil,nil,nil,"ēre"},
ind_pluperf = {"eram","erās","erat","erāmus","erātis","erant"},
ind_fut = {"ēbō","ēbis","ēbit","ēbimus","ēbitis","ēbunt"},
ind_fut_perf = {"erō","eris","erit","erimus","eritis","erint"},
ind_fut_sig = {"ō","is","it","imus","itis","int"},
ind_pres_pas = {"eor","ēris","ētur","ēmur","ēminī","entur",
nil,"ēre"},
ind_imp_pas = {"ēbar","ēbāris","ēbātur","ēbāmur","ēbāminī","ēbantur",
nil,"ēbāre"},
ind_fut_pas = {"ēbor","ēberis","ēbitur","ēbimur","ēbiminī","ēbuntur",
nil,"ēbere"},
subj_pres = {"eam","eās","eat","eāmus","eātis","eant"},
subj_imp = {"ērem","ērēs","ēret","ērēmus","ērētis","ērent"},
subj_perf = {"erim","erīs","erit","erīmus","erītis","erint"},
subj_pluperf = {"issem","issēs","isset","issēmus","issētis","issent"},
subj_aor_sig = {"im","īs","īt","īmus","ītis","int"},
subj_pres_pas = {"ear","eāris","eātur","eāmur","eāminī","eantur",
nil,"eāre"},
subj_imp_pas = {"ērer","ērēris","ērētur","ērēmur","ērēminī","ērentur",
nil,"ērēre"},
imper_pres = {nil,"ē",nil,nil,"ēte",nil},
imper_fut = {nil,"ētō","ētō",nil,"ētōte","entō"},
imper_pres_pas = {nil,"ēre",nil,nil,"ēminī",nil},
imper_fut_pas = {nil,"ētor","ētor",nil,nil,"entor"},
},
["3"] = { -- 3 (comparar [[capio]] con [[lego]], las raíces con capi- y leg- pero hay que eliminar la doble ii)
inf_act = {"ere","isse"},
inf_pas = {"ī"},
part_act = {"ēns","ūrus"},
part_pas = {"endus","us"},
ger = {"endī","endō","endum"},
sup = {"um","ū"},
ind_pres = {"ō","is","it","imus","itis","unt"},
ind_imp = {"ēbam","ēbās","ēbat","ēbāmus","ēbātis","ēbant"},
ind_perf = {"ī","istī","it","imus","istis","ērunt",
nil,nil,nil,nil,nil,"ēre"},
ind_pluperf = {"eram","erās","erat","erāmus","erātis","erant"},
ind_fut = {"am","ēs","ēt","ēmus","ētis","ent"},
ind_fut_perf = {"erō","eris","erit","erimus","eritis","erint"},
ind_fut_sig = {"ō","is","it","imus","itis","int"},
ind_pres_pas = {"or","eris","itur","imur","iminī","untur",
nil,"ere"},
ind_imp_pas = {"ēbar","ēbāris","ēbātur","ēbāmur","ēbāminī","ēbantur",
nil,"ēbāre"},
ind_fut_pas = {"ar","ēris","ētur","ēmur","ēminī","entur",
nil,"ēre"},
subj_pres = {"am","ās","at","āmus","ātis","ant"},
subj_imp = {"erem","erēs","eret","erēmus","erētis","erent"},
subj_perf = {"erim","erīs","erit","erīmus","erītis","erint"},
subj_pluperf = {"issem","issēs","isset","issēmus","issētis","issent"},
subj_aor_sig = {"im","īs","īt","īmus","ītis","int"},
subj_pres_pas = {"ar","āris","ātur","āmur","āminī","antur",
nil,"āre"},
subj_imp_pas = {"erer","erēris","erētur","erēmur","erēminī","erentur",
nil,"erēre"},
imper_pres = {nil,"e",nil,nil,"ite",nil},
imper_fut = {nil,"itō","itō",nil,"itōte","untō"},
imper_pres_pas = {nil,"ere",nil,nil,"iminī",nil},
imper_fut_pas = {nil,"itor","itor",nil,nil,"untor"},
},
["3/4"] = {
inf_act = {"ere","isse","īre","isse"},
inf_pas = {"ī","īrī"},
part_act = {"ēns","iēns","ūrus"},
part_pas = {"endus","iendus","us"},
ger = {"endī","endō","endum","iendī","iendō","iendum"},
sup = {"um","ū"},
ind_pres = {"ō","is","it","imus","itis","unt",
"iō","īs",nil,"īmus","ītis","iunt"
},
ind_imp = {"ēbam","ēbās","ēbat","ēbāmus","ēbātis","ēbant",
"iēbam","iēbās","iēbat","iēbāmus","iēbātis","iēbant"
},
ind_perf = {"ī","istī","it","imus","istis","ērunt",
nil,nil,nil,nil,nil,"ēre"},
ind_pluperf = {"eram","erās","erat","erāmus","erātis","erant"},
ind_fut = {"am","ēs","ēt","ēmus","ētis","ent",
"iam","iēs","iet","iēmus","iētis","ient"
},
ind_fut_perf = {"erō","eris","erit","erimus","eritis","erint"},
ind_fut_sig = {"ō","is","it","imus","itis","int"},
ind_pres_pas = {"or","eris","itur","imur","iminī","untur",
"ior","ere","ītur","īmur","īminī","iuntur",
nil,"īris",nil,nil,nil,nil,
nil,"īre"
},
ind_imp_pas = {"ēbar","ēbāris","ēbātur","ēbāmur","ēbāminī","ēbantur",
"iēbar","ēbāre","iēbātur","iēbāmur","iēbāminī","iēbantur",
nil,"iēbāris",nil,nil,nil,nil,
nil,"iēbāre"
},
ind_fut_pas = {"ar","ēris","ētur","ēmur","ēminī","entur",
"iar","ēre","iētur","iēmur","iēminī","ientur",
nil,"iēris",nil,nil,nil,nil,
nil,"iēre"
},
subj_pres = {"am","ās","at","āmus","ātis","ant",
"iam","iās","iat","iāmus","iātis","iant",
},
subj_imp = {"erem","erēs","eret","erēmus","erētis","erent",
"īrem","īrēs","īret","īrēmus","īrētis","īrent"
},
subj_perf = {"erim","erīs","erit","erīmus","erītis","erint"},
subj_pluperf = {"issem","issēs","isset","issēmus","issētis","issent"},
subj_aor_sig = {"im","īs","īt","īmus","ītis","int"},
subj_pres_pas = {"ar","āris","ātur","āmur","āminī","antur",
"iar","āre","iātur","iāmur","iāminī","iantur",
nil,"iāris",nil,nil,nil,nil,
nil,"iāre"
},
subj_imp_pas = {"erer","erēris","erētur","erēmur","erēminī","erentur",
"īrer","erēre","īrētur","īrēmur","īrēminī","īrentur",
nil,"īrēris",nil,nil,nil,nil,
nil,"īrēre"
},
imper_pres = {nil,"e",nil,nil,"ite",nil,
nil,"ī",nil,nil,"īte",nil
},
imper_fut = {nil,"itō","itō",nil,"itōte","untō",
nil,"ītō","ītō",nil,"ītōte","iuntō"
},
imper_pres_pas = {nil,"ere",nil,nil,"iminī",nil,
nil,"īre",nil,nil,"īminī",nil
},
imper_fut_pas = {nil,"itor","itor",nil,nil,"untor",
nil,"ītor","ītor",nil,nil,"iuntor"
},
},
["4"] = {
inf_act = {"īre","isse"},
inf_pas = {"īrī"},
part_act = {"iēns","ūrus"},
part_pas = {"iendus","us"},
ger = {"iendī","iendō","iendum"},
sup = {"um","ū"},
ind_pres = {"iō","īs","it","īmus","ītis","iunt"},
ind_imp = {"iēbam","iēbās","iēbat","iēbāmus","iēbātis","iēbant"},
ind_perf = {"ī","istī","it","imus","istis","ērunt",
nil,nil,nil,nil,nil,"ēre"},
ind_pluperf = {"eram","erās","erat","erāmus","erātis","erant"},
ind_fut = {"iam","iēs","iet","iēmus","iētis","ient"},
ind_fut_perf = {"erō","eris","erit","erimus","eritis","erint"},
ind_fut_sig = {"ō","is","it","imus","itis","int"},
ind_pres_pas = {"ior","īris","ītur","īmur","īminī","iuntur",
nil,"īre"},
ind_imp_pas = {"iēbar","iēbāris","iēbātur","iēbāmur","iēbāminī","iēbantur",
nil,"iēbāre"},
ind_fut_pas = {"iar","iēris","iētur","iēmur","iēminī","ientur",
nil,"iēre"},
subj_pres = {"iam","iās","iat","iāmus","iātis","iant"},
subj_imp = {"īrem","īrēs","īret","īrēmus","īrētis","īrent"},
subj_perf = {"erim","erīs","erit","erīmus","erītis","erint"},
subj_pluperf = {"issem","issēs","isset","issēmus","issētis","issent"},
subj_aor_sig = {"im","īs","īt","īmus","ītis","int"},
subj_pres_pas = {"iar","iāris","iātur","iāmur","iāminī","iantur",
nil,"iāre"},
subj_imp_pas = {"īrer","īrēris","īrētur","īrēmur","īrēminī","īrentur",
nil,"īrēre"},
imper_pres = {nil,"ī",nil,nil,"īte",nil},
imper_fut = {nil,"ītō","ītō",nil,"ītōte","iuntō"},
imper_pres_pas = {nil,"īre",nil,nil,"īminī",nil},
imper_fut_pas = {nil,"ītor","ītor",nil,nil,"iuntor"},
}
}
local formas_no_personales = {
inf_act = true,
inf_pas = true,
part_act = true,
part_pas = true,
ger = true,
sup = true,
}
local formas_personales = {
ind_pres = true,
ind_imp = true,
ind_perf = true,
ind_pluperf = true,
ind_fut = true,
ind_fut_perf = true,
ind_fut_sig = true,
ind_pres_pas = true,
ind_imp_pas = true,
ind_fut_pas = true,
subj_pres = true,
subj_imp = true,
subj_perf = true,
subj_pluperf = true,
subj_aor_sig = true,
subj_pres_pas = true,
subj_imp_pas = true,
imper_pres = true,
imper_fut = true,
imper_pres_pas = true,
imper_fut_pas = true,
}
local formas = merge(formas_no_personales, formas_personales)
local verbos_irregulares = {
{"aiō", {"aiō", "aiiō", "aijō", "ajō"}, {
desactivar = {"inf_pas","part_pas","ger","sup","ind_pluperf","ind_fut","ind_fut_perf",
"ind_pres_pas","ind_imp_pas","ind_fut_pas","subj_perf","subj_pluperf","subj_pres_pas",
"subj_imp_pas","imper_fut","imper_pres_pas","imper_fut_pas"
},
conj = "3",
nucleopres = {"ai"},
nucleoperf = {"a"},
nucleosup = {},
nucleosigm = {},
inf_act = {"aiere"},
ind_pres = {nil,nil,nil,{}},
ind_perf = {{},nil,nil,{},{}},
subj_pres = {nil,nil,nil,{},{}},
subj_imp = {{},{},nil,{},{},{}},
imper_pres = {{},{"ai"},{},{},{},{}},
}},
{"cedo", {"cedo"}, {
desactivar = {"inf_act","inf_pas","part_act","part_pas","ger","sup","ind_pluperf","ind_pres","ind_imp","ind_perf",
"ind_fut","ind_fut_perf","ind_pres_pas","ind_imp_pas","ind_fut_pas","subj_pres","subj_imp","subj_perf",
"subj_pluperf","subj_pres_pas","subj_imp_pas","imper_fut","imper_pres_pas","imper_fut_pas"
},
conj = "3",
nucleopres = {},
nucleoperf = {},
nucleosup = {},
nucleosigm = {},
imper_pres = {nil,{"cedo"},nil,nil,{"cette","cedile"},nil},
}},
{"dīcō", {"dīcō"}, {
conj = "3",
nucleopres = {"dīc"},
nucleoperf = {"dīx"},
nucleosup = {"dict"},
nucleosigm = {"dīx"},
desactivar = {},
imper_pres = {nil, {"dīc", "dīce"}},
inf_pas = {"dīcī", "dīcier{L}"},
}},
{"dō", {"dō"}, {
conj = "1",
nucleopres = {"d"},
nucleoperf = {"ded"},
nucleosup = {"dat"},
nucleosigm = {},
desactivar = {},
inf_act = {"dare","dedisse"},
inf_pas = {"darī"},
ind_pres = {nil,nil,nil,{"damus"},{"datis"},nil},
ind_imp = {{"dabam"},{"dabās"},{"dabat"},{"dabāmus"},{"dabātis"},{"dabant"}},
ind_fut = {{"dabō"},{"dabis"},{"dabit"},{"dabimus"},{"dabitis"},{"dabunt"}},
ind_imp_pas = {{"dabar"},{"dabāris","dabāre"},{"dabātur"},{"dabāmur"},{"dabāminī"},{"dabantur"}},
ind_fut_pas = {{"dabor"},{"daberis","dabere"},{"dabitur"},{"dabimur"},{"dabiminī"},{"dabuntur"}},
subj_imp = {{"darem"},{"darēs"},{"daret"},{"darēmus"},{"darētis"},{"darent"}},
subj_imp_pas = {{"darer"},{"darēris","darēre"},{"darētur"},{"darēmur"},{"darēminī"},{"darentur"}},
imper_pres = {nil,nil,nil,nil,{"date"},nil},
imper_fut = {nil,{"datō"},{"datō"},nil,{"datōte"},{"dantō"}},
imper_pres_pas = {nil,{"dare"},nil,nil,{"daminī"},nil},
imper_fut_pas = {nil,{"dator"},{"dator"},nil,nil,{"dator"}},
}},
{"dūcō", {"dūcō"}, {
conj = "3",
nucleopres = {"dūc"},
nucleoperf = {"dūx"},
nucleosup = {"duct"},
nucleosigm = {},
desactivar = {},
imper_pres = {nil, {"dūc", "dūce"}},
}},
{"edō", {"edō", "ëdō"}, {
conj = "3",
nucleopres = {"ed"},
nucleoperf = {"ed"},
nucleosup = {""},
nucleosigm = {},
desactivar = {},
inf_act = {"edere","ēsse"},
part_act = {"edēns","ēsūrus","ēssūrus","ēstūrus"},
part_pas = {"edendus","edundus","ēsus","ēssus","ēstus"},
sup = {"ēsum","ēssum","ēstum","ēsū","ēssū","ēstū"},
ind_pres = {nil,{"edis","ēs"},{"edit","ēst"},nil,{"editis","ēstis"},nil},
ind_pres_pas = {nil,{"ederis","edere","ēssis","ēsse"},{"editur","ēstur"}},
subj_pres = {{"edam","edim"},{"edās","edīs"},{"edat","edit","ēst"},{"edāmus","edīmus"},{"edātis","edītis"},{"edant","edint"}},
subj_imp = {{"ederem","ēssem"},{"ederēs","ēssēs"},{"ederet","ēsset"},{"ederēmus","ēssēmus"},{"ederētis","ēssētis"},{"ederent","ēssent"}},
subj_imp_pas = {{"ederer","ēsser"},{"ederēris","ederēre","ēssēris","ēssēre"},{"ederetur","ēssetur"},{"ederēmur","ēssēmur"},{"ederēminī","ēssēminī"},{"ederentur","ēssentur"}},
imper_pres = {nil,{"ede","ēs"},nil,nil,{"edite","ēste"},nil},
imper_fut = {nil,{"editō","ēstō"},{"editō","ēstō"},nil,{"editōte","ēstōte"},{"eduntō"}},
imper_pres_pas = {nil,{"edere","ēsse"},nil,nil,{"ediminī"},nil},
imper_fut_pas = {nil,{"editor","ēstor"},{"editor","ēstor"},nil,nil,{"eduntor"}},
}},
{"eō", {"eō", "ëō"}, {
conj = "4",
nucleopres = {""},
nucleoperf = {""},
nucleosup = {""},
nucleosigm = {},
desactivar = {"imper_pres_pas"},
inf_act = {"īre","īsse","iisse","īvisse"},
inf_pas = {"īrī","īrier"},
part_act = {"iēns","itūrus"},
part_pas = {"eundum","itum"},
ger = {"eundī","eundō","eundum"},
sup = {"itum","itū"},
ind_pres = {{"eō"},{"īs"},{"it"},{"īmus"},{"ītis"},{"eunt"}},
ind_imp = {{"ībam"},{"ībās"},{"ībat"},{"ībāmus"},{"ībātis"},{"ībant"}},
ind_perf = {{"iī","īvī"},{"īstī","iistī","īvistī"},{"iit","īvit"},{"iimus","īvimus"},{"īstis","iistis","īvistis"},{"iērunt","iēre","īvērunt","īvēre"}},
ind_pluperf = {{"ieram","īveram"},{"ierās","īverās"},{"ierat","īverat"},{"ierāmus","īverāmus"},{"ierātis","īverātis"},{"ierant","īverant"}},
ind_fut = {{"ībō"},{"ībis"},{"ībit"},{"ībimus"},{"ībitis"},{"ībunt"}},
ind_fut_perf = {{"ierō","īverō"},{"ieris","īveris"},{"ierit","īverit"},{"ierimus","īverimus"},{"ieritis","īveritis"},{"ierint","īverint"}},
ind_fut_sig = {nil,nil,nil,nil,nil,nil},
ind_pres_pas = {{},{},{"ītur"},{},{},{}},
ind_imp_pas = {{},{},{"ībātur"},{},{},{}},
ind_fut_pas = {{},{},{"ībitur"},{},{},{}},
subj_pres = {{"eam"},{"eās"},{"eat"},{"eāmus"},{"eātis"},{"eant"}},
subj_imp = {{"īrem"},{"īrēs"},{"īret"},{"īrēmus"},{"īrētis"},{"īrent"}},
subj_perf = {{"ierim","īverim"},{"ierīs","īverīs"},{"ierit","īverit"},{"ierīmus","īverīmus"},{"ierītis","īverītis"},{"ierint","īverint"}},
subj_pluperf = {{"īssem","iissem","īvissem"},{"īssēs","iissēs","īvissēs"},{"īsset","iisset","īvisset"},{"īssēmus","iissēmus","īvissēmus"},{"īssētis","iissētis","īvissētis"},{"īssent","iissent","īvissent"}},
subj_aor_sig = {nil,nil,nil,nil,nil,nil},
subj_pres_pas = {{},{},{"eātur"},{},{},{}},
subj_imp_pas = {{},{},{"īrētur"},{},{},{}},
imper_pres = {nil,nil,nil,nil,nil,nil},
imper_fut = {nil,nil,nil,nil,nil,{"euntō"}},
imper_fut_pas = {nil,{},nil,nil,nil,{}},
}},
{"faciō", {"faciō"}, {
conj = "3",
nucleopres = {"faci"},
nucleoperf = {"fax"},
nucleosup = {"fact"},
nucleosigm = {"fax","faxs","facs"},
desactivar = {},
ind_pres_pas = {{"fīō"},{"fīs"},{"fit"},{"fīmus"},{"fītis"},{"fīunt"}},
ind_imp_pas = {{"fīēbam"},{"fīēbās"},{"fīēbat"},{"fīēbāmus"},{"fīēbātis"},{"fīēbant"}},
ind_fut_pas = {{"fīam"},{"fīēs"},{"fīet"},{"fīēmus"},{"fīētis"},{"fīent"}},
subj_pres_pas = {{"fīam"},{"fīās"},{"fīat"},{"fīāmus"},{"fīātis"},{"fīant"}},
subj_imp_pas = {{"fierem"},{"fierēs"},{"fieret"},{"fierēmus"},{"fierētis"},{"fierent"}},
imper_pres = {nil,{"fac","face"},nil,nil,nil,nil},
imper_pres_pas = {nil,{"fī"},nil,nil,{"fīte"},nil},
imper_fut_pas = {nil,{"fītō"},{"fītō"},nil,{"fītōte"},{"fīuntō"}},
}},
{"ferō", {"ferō"}, {
conj = "3",
nucleopres = {"fer"},
nucleoperf = {"tul"},
nucleosup = {"lāt"},
nucleosigm = {},
desactivar = {},
inf_pas = {"ferrī"},
ind_pres = {nil,{"fers"},{"fert"},nil,{"fertis"}},
ind_pres_pas = {nil,{"ferris","ferre"}},
subj_imp = {{"ferrem"},{"ferrēs"},{"ferret"},{"ferrēmus"},{"ferrētis"},{"ferrent"}},
subj_imp_pas = {{"ferrer"},{"ferrēris","ferrēre"},{"ferrētur"},{"ferrēmur"},{"ferrēminī"},{"ferrentur"}},
imper_pres = {nil,{"fer"},nil,nil,{"ferte"},nil},
imper_pres_pas = {nil,{"ferre"},nil,nil,nil,nil},
imper_fut = {nil,{"fertō"},{"fertō"},nil,{"fertōte"},{"feruntō"}},
imper_fut_pas = {nil,{"fertor"},{"fertor"},nil,nil,nil},
}},
{"fīō", {"fīō"}, {
conj = "3",
nucleopres = {"fī"},
nucleoperf = {},
nucleosup = {"fact"},
nucleosigm = {},
semidep = true,
desactivar = {},
ind_pres = {{"fīō"},{"fīs"},{"fit"},{"fīmus"},{"fītis"},{"fīunt"}},
imper_pres = {nil,{"fī"},nil,nil,{"fīte"},nil},
imper_fut = {nil,{"fītō"},{"fītō"},nil,{"fītōte"},{"feruntō"}},
}},
{"possum", {"possum"}, {
conj = "3",
nucleopres = {"pot"},
nucleoperf = {"pot"},
nucleosup = {},
nucleosigm = {},
pres = "possō",
desactivar = {"inf_pas","part_pas","ger","sup","ind_pres_pas","ind_imp_pas","ind_fut_pas",
"subj_pres_pas","subj_imp_pas","imper_pres","imper_fut","imper_pres_pas","imper_fut_pas"},
inf_act = {"posse","potesse{†}"},
part_act = {"potēns"},
ind_pres = {{"possum"},{"potes"},{"potest"},{"possumus"},{"potestis"},{"possunt"}},
ind_imp = {{"poteram"},{"poterās"},{"poterat"},{"poterāmus"},{"poterātis"},{"poterant"}},
ind_fut = {{"poterō"},{"poteris","potere"},{"poterit"},{"poterimus"},{"poteritis"},{"poterunt"}},
ind_perf = {{"potuī"},{"potuistī"},{"potuit"},{"potuimus"},{"potuistis"},{"potuērunt","potuēre"}},
ind_pluperf = {{"potueram"},{"potuerās"},{"potuerat"},{"potuerāmus"},{"potuerātis"},{"potuerant"}},
ind_fut_perf = {{"potuerō"},{"potueris"},{"potuerit"},{"potuerimus"},{"potueritis"},{"potuerunt"}},
subj_pres = {{"possem"},{"possēs"},{"possēt"},{"possēmus"},{"possētis"},{"possent"}},
subj_imp = {{"possim"},{"possīs"},{"possit"},{"possīmus"},{"possītis"},{"possint"}},
subj_perf = {{"potuerim"},{"potuerīs"},{"potuerit"},{"potuerīmus"},{"potuerītis"},{"potuerint"}},
subj_pluperf = {{"potuissem"},{"potuissēs"},{"potuisset"},{"potuissēmus"},{"potuissētis"},{"potuissent"}},
}},
{"sum", {"sum"}, {
conj = "3",
nucleopres = {"s"},
nucleoperf = {"fu"},
nucleosup = {},
nucleosigm = {},
pres = "sō",
desactivar = {"inf_pas","part_pas","ger","sup","ind_pres_pas","ind_imp_pas","ind_fut_pas",
"subj_pres_pas","subj_imp_pas","imper_pres_pas","imper_fut_pas"},
inf_act = {"esse"},
part_act = {"futūrus"},
ind_pres = {{"sum"},{"es"},{"est"},{"sumus"},{"estis"},{"sunt"}},
ind_imp = {{"eram"},{"erās"},{"erat"},{"erāmus"},{"erātis"},{"erant"}},
ind_fut = {{"erō"},{"eris","ere"},{"erit"},{"erimus"},{"eritis"},{"erunt"}},
subj_pres = {{"sim","siem","fuam{†}"},{"sīs","siēs","fuās{†}"},{"sit","siet","fuat{†}"},{"sīmus","siēmus","fuāmus{†}"},{"sītis","siētis","fuātis{†}"},{"sint","sient","fuant{†}"}},
subj_imp = {{"essem","forem"},{"essēs","forēs"},{"esset","foret"},{"essēmus","forēmus"},{"essētis","forētis"},{"essent","forent"}},
imper_pres = {nil,{"es"},nil,nil,{"este"},nil},
imper_fut = {nil,{"estō"},{"estō"},nil,{"estōte"},nil},
}},
{"mālō", {"mālō"}, {
conj = "3",
nucleopres = {"māl"},
nucleoperf = {"mālu"},
nucleosup = {},
nucleosigm = {},
desactivar = {"sup","ger","inf_pas","part_pas","ind_pres_pas","ind_imp_pas","ind_fut_pas","subj_pres_pas","subj_imp_pas",
"imper_pres","imper_fut","imper_pres_pas","imper_fut_pas"},
inf_act = {"mālle","māluisse"},
ind_pres = {{"mālō"},{"māvīs"},{"māvult"},{"mālumus"},{"māvultis"},{"mālunt"}},
subj_pres = {{"mālim"},{"mālīs"},{"mālit"},{"mālīmus"},{"mālītis"},{"mālint"}},
subj_imp = {{"māllem"},{"māllēs"},{"māllet"},{"māllēmus"},{"māllētis"},{"māllent"}},
}},
{"nōlō", {"nōlō"}, {
conj = "3",
nucleopres = {"nōl"},
nucleoperf = {"nōlu"},
nucleosup = {},
nucleosigm = {},
desactivar = {"sup","ger","inf_pas","part_pas","ind_pres_pas","ind_imp_pas","ind_fut_pas","subj_pres_pas","subj_imp_pas",
"imper_pres","imper_fut","imper_pres_pas","imper_fut_pas"},
inf_act = {"nōlle","nōluisse"},
ind_pres = {{"nōlō"},{"nōn vīs","nevīs{†}"},{"nōn vult","nōn volt","nevolt{†}"},{"nōlumus"},{"nōn vultis","nōn voltis","nōltis{†}"},{"nōlunt"}},
subj_pres = {{"nōlim"},{"nōlīs"},{"nōlit"},{"nōlīmus"},{"nōlītis"},{"nōlint"}},
subj_imp = {{"nōllem"},{"nōllēs"},{"nōllet"},{"nōllēmus"},{"nōllētis"},{"nōllent"}},
}},
{"volō", {"volō"}, {
conj = "3",
nucleopres = {"vol"},
nucleoperf = {"volu"},
nucleosup = {"volit"},
nucleosigm = {},
desactivar = {"sup","ger","inf_pas","part_pas","ind_pres_pas","ind_imp_pas","ind_fut_pas","subj_pres_pas","subj_imp_pas",
"imper_pres","imper_fut","imper_pres_pas","imper_fut_pas"},
inf_act = {"velle","voluisse"},
ind_pres = {{"volō"},{"vīs"},{"vult","volt{†}"},{"volumus"},{"vultis","voltis{†}"},{"volunt"}},
subj_pres = {{"velim","volim{†}"},{"velīs","volīs{†}"},{"velit","volit{†}"},{"velīmus","volīmus{†}"},{"velītis","volītis{†}"},{"velint","volint{†}"}},
subj_imp = {{"vellem"},{"vellēs"},{"vellet"},{"vellēmus"},{"vellētis"},{"vellent"}},
}},
}
local function combinar_prefijo_nucleosufijo(prefijo, nucleosufijo)
return prefijo..nucleosufijo
end
local function combinar_nucleo_sufijo(nucleo, sufijo, agregar_i)
if agregar_i and (not find(sufijo, "^[iī]")) and (sufijo ~= "e") and (not find(sufijo, "^er")) then
return nucleo.."~i~"..sufijo
end
return nucleo..sufijo
end
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijos_ = sufijos[conjinfo.conj][forma]
local nucleos
local prefijo
if forma == "sup" then
nucleos = conjinfo.nucleosup
prefijo = conjinfo.prefijosup or conjinfo.prefijo
elseif find(forma, "sig") then
nucleos = conjinfo.nucleosigm
prefijo = conjinfo.prefijosigm or conjinfo.prefijo
elseif find(forma, "perf") then
nucleos = conjinfo.nucleoperf
prefijo = conjinfo.prefijoperf or conjinfo.prefijo
else
nucleos = conjinfo.nucleopres
prefijo = conjinfo.prefijo
end
if formas_no_personales[forma] then
if conjinfo[forma][1] then
if nucleos and #nucleos > 0 then
for _, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleosufijo(prefijo, fm).."#")
end
end
else
for _, sufijo in ipairs(sufijos_) do
local nucleos_ = nucleos
if forma == "inf_act" and sufijo == "isse" then
nucleos_ = conjinfo.nucleoperf
elseif forma == "part_act" and sufijo == "ūrus" then
nucleos_ = conjinfo.nucleosup
elseif forma == "part_pas" and sufijo == "us" then
nucleos_ = conjinfo.nucleosup
end
local agregar_i = conjinfo.I and nucleos_ == conjinfo.nucleopres
for _,nucleo in ipairs(nucleos_) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleosufijo(prefijo, combinar_nucleo_sufijo(nucleo, sufijo, agregar_i)))
end
end
end
return
end
for i = EGO, EI do
local p = tostr[i]
if conjinfo[forma][i] then
if nucleos and #nucleos > 0 then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleosufijo(prefijo, fm).."#")
end
end
else
local k = i
while sufijos_[k] do
local agregar_i = conjinfo.I and nucleos == conjinfo.nucleopres
for j, n in ipairs(nucleos) do
local x = combinar_prefijo_nucleosufijo(prefijo, combinar_nucleo_sufijo(n, sufijos_[k], agregar_i))
if conjinfo.always_sync_perf and (forma == "ind_perf" or forma == "ind_pluperf" or forma == "ind_fut_perf" or forma == "subj_perf" or forma == "subj_pluperf") then
x = x:gsub("īvī", "iī")
x = x:gsub("īvi", "ī")
x = x:gsub("īve", "ī")
x = x:gsub("īvē", "ē")
end
insert_if_not(conjugado[forma..p], x)
end
k = k + 6
end
end
end
end
local function get_subtype_by_ending(pres, conjinfo, specs)
for _, spec in ipairs(specs) do
local base = extract_base(pres, spec[1])
if base then
for _,s in ipairs(spec[2]) do
if conjinfo[s] == nil then
conjinfo[s] = true
end
end
return base
end
end
error("Unrecognized ending for conjugation " .. conjinfo["conj"])
end
local function detect_v_type_and_subtypes(conjinfo)
local pres = conjinfo["v"]
local conj_arg = conjinfo["conj"]
pres = toNFC(pres)
local base_conj_arg, auto_perf_supine = conj_arg:match("^([124]/?4?)(%+%+?)$")
if base_conj_arg then
if auto_perf_supine == "++" and base_conj_arg ~= "4" then
error("Conjugation types 1++ and 2++ not allowed")
end
conj_arg = base_conj_arg
end
conjinfo.conj = conj_arg
if conj_arg == "1" then
local base = get_subtype_by_ending(pres, conjinfo, {
{"ō", {}},
{"or", {"dep"}},
{"at", {"impers"}},
{"ātur", {"dep", "impers"}},
{"ī", {"nopres"}},
{"it", {"nopres", "impers"}},
})
if not conjinfo["nucleopres"][1] then
conjinfo["nucleopres"][1] = base
end
if auto_perf_supine then
if not conjinfo["nucleoperf"][1] then
conjinfo["nucleoperf"][1] = base .. "āv"
end
if not conjinfo["nucleosup"][1] then
conjinfo["nucleosup"][1] = base .. "āt"
end
end
if conjinfo.sigm then
if not conjinfo["nucleosigm"][1] then
conjinfo["nucleosigm"][1] = base .. "āss"
end
end
elseif conj_arg == "2" then
local base = get_subtype_by_ending(pres, conjinfo, {
{"eō", {}},
{"eor", {"dep"}},
{"et", {"impers"}},
{"ētur", {"dep", "impers"}},
{"ī", {"nopres"}},
{"it", {"nopres", "impers"}},
})
if not conjinfo["nucleopres"][1] then
conjinfo["nucleopres"][1] = base
end
if auto_perf_supine then
if not conjinfo["nucleoperf"][1] then
conjinfo["nucleoperf"][1] = base .. "u"
end
if not conjinfo["nucleosup"][1] then
conjinfo["nucleosup"][1] = base .. "it"
end
end
if conjinfo.sigm then
if not conjinfo["nucleosigm"][1] then
conjinfo["nucleosigm"][1] = base .. "ēss"
end
end
elseif conj_arg == "3" then
local base
if conjinfo.I == false then -- si explícitamente se indicó que no es del tipo -io, hay que excluir sufijos
base = get_subtype_by_ending(pres, conjinfo, {
{"ō", {}},
{"or", {"dep"}},
{"it", {"impers"}},
{"itur", {"dep", "impers"}},
{"ī", {"nopres"}},
})
else
base = get_subtype_by_ending(pres, conjinfo, {
{"iō", {"I"}},
{"ior", {"dep", "I"}},
{"ō", {}},
{"or", {"dep"}},
{"it", {"impers"}},
{"itur", {"dep", "impers"}},
{"ī", {"nopres"}},
})
end
if not conjinfo["nucleopres"][1] then
conjinfo["nucleopres"][1] = base
end
if not conjinfo["nucleoperf"][1] and conjinfo["nopres"] then
conjinfo["nucleoperf"][1] = base
end
assert(conjinfo["nucleoperf"][1], "especifique todos los núcleos para verbos de la tercera conjugación")
assert(conjinfo["nucleosup"][1], "especifique todos los núcleos para verbos de la tercera conjugación")
if conjinfo.sigm then
if not conjinfo["nucleosigm"][1] then
conjinfo["nucleosigm"][1] = base .. "ēss"
end
end
elseif conj_arg == "3/4" then
local base
base = get_subtype_by_ending(pres, conjinfo, {
{"iō", {"I"}},
{"ior", {"dep", "I"}},
})
if not conjinfo["nucleopres"][1] then
conjinfo["nucleopres"][1] = base
end
if not conjinfo["nucleoperf"][1] and conjinfo["nopres"] then
conjinfo["nucleoperf"][1] = base
end
if not conjinfo["nucleoperf"][1] and auto_perf_supine == "++" then
conjinfo["nucleoperf"][1] = base .. "īv"
conjinfo["nucleoperf"][2] = base .. "i"
end
if not conjinfo["nucleoperf"][1] and auto_perf_supine == "+" then
conjinfo["nucleoperf"][1] = base .. "īv"
end
if not conjinfo["nucleosup"][1] and auto_perf_supine then
conjinfo["nucleosup"][1] = base .. "īt"
end
if conjinfo.sigm then
if not conjinfo["nucleosigm"][1] then
conjinfo["nucleosigm"][1] = base .. "īss"
end
end
elseif conj_arg == "4" then
local base = get_subtype_by_ending(pres, conjinfo, {
{"iō", {}},
{"ior", {"dep"}},
{"it", {"impers"}},
{"ītur", {"dep", "impers"}},
{"ī", {"nopres"}},
})
if not conjinfo["nucleopres"][1] then
conjinfo["nucleopres"][1] = base
end
if not conjinfo["nucleoperf"][1] and conjinfo["nopres"] then
conjinfo["nucleoperf"][1] = base
end
if not conjinfo["nucleoperf"][1] and auto_perf_supine == "++" then
conjinfo["nucleoperf"][1] = base .. "īv"
conjinfo["nucleoperf"][2] = base .. "i"
end
if not conjinfo["nucleoperf"][1] and auto_perf_supine == "+" then
conjinfo["nucleoperf"][1] = base .. "īv"
end
if not conjinfo["nucleosup"][1] and auto_perf_supine then
conjinfo["nucleosup"][1] = base .. "īt"
end
if conjinfo.sigm then
if not conjinfo["nucleosigm"][1] then
conjinfo["nucleosigm"][1] = base .. "īss"
end
end
elseif conj_arg == "irreg" then
for _,p in ipairs(verbos_irregulares) do
for _,rx in ipairs(p[2]) do
local pref, verb = match(conjinfo.v, "^(.*)("..rx..")$")
if verb then
conjinfo.v = verb
conjinfo.prefijo = pref
if conjinfo.nucleoperf[1] and conjinfo.nucleoperf[1] ~= "-" then -- [[ecfero]]
conjinfo.prefijoperf = conjinfo.nucleoperf[1]
conjinfo.nucleoperf = {}
end
if conjinfo.nucleosup[1] and conjinfo.nucleosup[1] ~= "-" then
conjinfo.prefijosup = conjinfo.nucleosup[1]
conjinfo.nucleosup = {}
end
if conjinfo.nucleosigm[1] and conjinfo.nucleosigm[1] ~= "-" then
conjinfo.prefijosigm = conjinfo.nucleosigm[1]
conjinfo.nucleosigm = {}
end
conjinfo.irreg = true
conjinfo.conj = p[3].conj
for k,val in pairs(p[3]) do
if not conjinfo[k] or (type(conjinfo[k]) == "table" and not conjinfo[k][1]) then
conjinfo[k] = deep_copy(val)
end
end
return conjinfo
end
end
end
error("Unrecognized conjugation '" .. conj_arg .. "'")
else
error("Unrecognized conjugation '" .. conj_arg .. "'")
end
return conjinfo
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 = "conj"},
[2] = {alias_de = "pres"},
[3] = {alias_de = "nucleoperf"},
[4] = {alias_de = "nucleosup"},
[5] = {alias_de = "nucleosigm"},
["impers"] = {}, -- pas para formas pasivas solamente
["impersonal"] = {alias_de = "impers"},
["dep"] = {tipo="bool"},
["depon"] = {alias_de="dep"},
["deponente"] = {alias_de="dep"},
["semidep"] = {tipo="bool"},
["semidepon"] = {alias_de="semidep"},
["semideponente"] = {alias_de="semidep"},
["sigm"] = {tipo="bool"},
["nopasivo"] = {tipo="bool"},
["soloperf"] = {tipo="bool"},
["I"] = {tipo="bool"},
["p3inf"] = {tipo="bool"}, -- sin uso
["poet_sync_perf"] = {tipo="bool"}, -- sin uso
["always_sync_perf"] = {tipo="bool"}, -- solo en [[saevio]]
["conj"] = {requerido=true},
["pres"] = {requerido=true},
["nucleopres"] = {lista = true},
["nucleoperf"] = {lista = true},
["nucleosup"] = {lista = true},
["nucleosigm"] = {lista = true},
["núcleopres"] = {alias_de="nucleopres"},
["núcleoperf"] = {alias_de="nucleoperf"},
["núcleosup"] = {alias_de="nucleosup"},
["paradigma"] = {lista = true},
["desactivarnucleos"] = {tipo="bool", por_defecto=true}, -- para [[-o]]
["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")
assert(not (args["dep"] and args["semidep"]), "un verbo no puede ser deponente y semideponente a la vez")
local conjinfo = {
conj = args.conj,
prefijo="",
v=args.pres,
desactivar = {},
dep=args.dep,
semidep=args.semidep,
sigm=args.sigm,
impers=args.impers,
nopasivo=args.nopasivo,
soloperf=args.soloperf,
I=args.I,
p3inf=args.p3inf,
poet_sync_perf=args.poet_sync_perf, -- sin uso
always_sync_perf=args.always_sync_perf,
nucleopres = deep_copy(args.nucleopres),
nucleoperf = deep_copy(args.nucleoperf),
nucleosup = deep_copy(args.nucleosup),
nucleosigm = deep_copy(args.nucleosigm)
}
conjinfo = detect_v_type_and_subtypes(conjinfo)
conjinfo.conj = conjinfo.conj
if conjinfo.impers == true then
conjinfo.impers = "3"
end
-- no puede ir conjinfo acá abajo porque si es un sufijo va a quedar "-" en la raíz, lo que anularía todas las formas conjugadas, tiene que venir directo de args
if args.desactivarnucleos then
if args.nucleopres[1] == "-" then
conjinfo.nucleopres = {}
end
if args.nucleoperf[1] == "-" then
conjinfo.nucleoperf = {}
end
if args.nucleosup[1] == "-" then
conjinfo.nucleosup = {}
end
if args.nucleosigm[1] == "-" then
conjinfo.nucleosigm = {}
end
end
local es_irregular = conjinfo.irreg
for _,d in ipairs(conjinfo.desactivar) do
if formas_no_personales[d] then
args[d] = {"no"}
else
args[d.."2"] = {"no"}
end
end
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
local resultante = sobreescribir_formas(conjugado, args)
local mostrar_fut_sig = #resultante["ind_fut_sig1"] > 0
local mostrar_aor_sig = #resultante["subj_aor_sig1"] > 0
local defectivo = comprobar_defectivo(resultante, {"^imper", "_sig"}, tostr)
local defect2
resultante, defect2 = desactivar_formas(resultante,
function (form)
return (conjinfo.nopasivo and form:find("_pas")) or (conjinfo.soloperf and not form:find("perf")) or (conjinfo.impers == "pas" and form:find("_pas[^3]")) or (conjinfo.impers == "pas3" and form:find("_pas[^3]")) or (conjinfo.impers == "pas36" and form:find("_pas[^36]"))
end
)
if defect2 then
defectivo = true
end
-- por ahora innecesario
-- 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 tit_pres = f(resultante["ind_pres1"][1] or "―")
local tit_inf = f(resultante["inf_act"][1] or "―")
local tit_perf = f(resultante["ind_perf1"][1] or "―")
local tit_sup = f(resultante["sup"][1] or "―")
resultante = agregar_enlaces(resultante, tit, normalizar_enlace)
local es_impersonal = conjinfo.impers
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, es_impersonal)
end)
local impers = conjinfo.impers
local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_imper, mostrar_imper
if impers == "3" then
fila_pronombres_ind = {"", "(id)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_subj = {"", "(quod id)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(id)", color=COLOR_IMPER, header=true, class="pc"}
cs = 2
elseif impers == "36" then
error("no soportado actualmente")
cs = 3
else
fila_pronombres_ind = {"", PRONOMBRES[1], PRONOMBRES[2], PRONOMBRES[3], PRONOMBRES[4], PRONOMBRES[5], PRONOMBRES[6], color=COLOR_IND, header=true, class="pc"}
fila_pronombres_subj = {"", PRONOMBRES_SUBJ[1], PRONOMBRES_SUBJ[2], PRONOMBRES_SUBJ[3], PRONOMBRES_SUBJ[4], PRONOMBRES_SUBJ[5], PRONOMBRES_SUBJ[6], color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", PRONOMBRES_IMP[1], PRONOMBRES_IMP[2], PRONOMBRES_IMP[3], PRONOMBRES_IMP[4], PRONOMBRES_IMP[5], PRONOMBRES_IMP[6], color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = cs -- 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
insert(t, {{"Infinitivo activo", header=true, color=COLOR_NP}, resultante.inf_act})
insert(t, {{"Infinitivo pasivo", header=true, color=COLOR_NP}, resultante.inf_pas})
insert(t, {{"Participio activo", header=true, color=COLOR_NP}, resultante.part_act})
insert(t, {{"Participio pasivo", header=true, color=COLOR_NP}, resultante.part_pas})
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger})
insert(t, {{"Supino", header=true, color=COLOR_NP}, resultante.sup})
else
resultante.inf_act.colspan = cs1-1
resultante.inf_pas.colspan = cs1-1
resultante.part_act.colspan = cs1-1
resultante.part_pas.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.sup.colspan = cs1-1
if not conjinfo.dep then
insert(t, {{"Infinitivo activo", header=true, color=COLOR_NP}, resultante.inf_act})
end
if not conjinfo.semidep then
insert(t, {{"Infinitivo pasivo", header=true, color=COLOR_NP}, resultante.inf_pas})
end
if not conjinfo.dep then
insert(t, {{"Participio activo", header=true, color=COLOR_NP}, resultante.part_act})
end
if not conjinfo.semidep then
insert(t, {{"Participio pasivo", header=true, color=COLOR_NP}, resultante.part_pas})
end
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger})
insert(t, {{"Supino", header=true, color=COLOR_NP}, resultante.sup})
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)
if not conjinfo.dep then
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, {{"Futuro", color=COLOR_IND, header=true}, ic("ind_fut")})
end
if not conjinfo.dep and not conjinfo.semidep then
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, {{"Futuro perfecto", color=COLOR_IND, header=true}, ic("ind_fut_perf")})
end
if mostrar_fut_sig then
insert(t, {{f("Futuro sigmático{†}"), color=COLOR_IND, header=true}, ic("ind_fut_sig")})
end
if not conjinfo.semidep then
insert(t, {{"Presente pasivo", color=COLOR_IND, header=true}, ic("ind_pres_pas")})
insert(t, {{"Pretérito imperfecto pasivo", color=COLOR_IND, header=true}, ic("ind_imp_pas")})
insert(t, {{"Futuro pasivo", color=COLOR_IND, header=true}, ic("ind_fut_pas")})
end
insert(t, {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true})
insert(t, fila_pronombres_subj)
if not conjinfo.dep then
insert(t, {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")})
insert(t, {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")})
end
if not conjinfo.dep and not conjinfo.semidep then
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")})
end
if mostrar_aor_sig then
insert(t, {{f("Aorista sigmático{†}"), color=COLOR_SUBJ, header=true}, ic("subj_aor_sig")})
end
if not conjinfo.semidep then
insert(t, {{"Presente pasivo", color=COLOR_SUBJ, header=true}, ic("subj_pres_pas")})
insert(t, {{"Pretérito imperfecto pasivo", color=COLOR_SUBJ, header=true}, ic("subj_imp_pas")})
end
insert(t, {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true})
insert(t, fila_pronombres_imper)
if mostrar_imper then
if not conjinfo.dep then
insert(t, {{"Presente", color=COLOR_IMPER, header=true}, ic("imper_pres")})
insert(t, {{"Futuro", color=COLOR_IMPER, header=true}, ic("imper_fut")})
end
if not conjinfo.semidep then
insert(t, {{"Presente pasivo", color=COLOR_IMPER, header=true}, ic("imper_pres_pas")})
insert(t, {{"Futuro pasivo", color=COLOR_IMPER, header=true}, ic("imper_fut_pas")})
end
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, ~■~ cambio ortográfico, #■# irregularidad"), 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
if conjinfo.impers == "pas" or conjinfo.imeprs == "pas3" then
args["nota"] = args["nota"].." NOTA: impersonal para las formas pasivas"
end
if conjinfo.impers == "pas36" then
args["nota"] = args["nota"].." NOTA: formas pasivas terciopersonales (solamente tercera persona singular y plural)"
end
if conjinfo.soloperf then
args["nota"] = args["nota"].. " NOTA: solo se emplean las formas del perfecto y pluscuamperfecto con valor de presente, imperfecto o futuro"
end
if conjinfo.nopasivo then
args["nota"] = args["nota"].. " NOTA: solo se emplean las formas activas"
end
insert(t, {{args["nota"] and args["nota"] or "", colspan=cs}})
local cats = {}
local subtits = {}
local conj_str
if conjinfo.conj == "1" then
conj_str = "primera conjugación"
elseif conjinfo.conj == "2" then
conj_str = "segunda conjugación"
elseif conjinfo.conj == "3" then
conj_str = "tercera conjugación"
elseif conjinfo.conj == "3/4" then
conj_str = "tercera/cuarta conjugación"
else
conj_str = "cuarta conjugación"
end
insert(cats, "LA:Verbos de la "..conj_str)
insert(subtits, conj_str)
impers = impers or ""
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(subtits, "impersonal")
insert(cats, "LA:Verbos impersonales")
end
if defectivo then
insert(subtits, "defectivo")
insert(cats, "LA:Verbos defectivos")
end
if conjinfo.dep then
insert(subtits, "deponente")
insert(cats, "LA:Verbos deponentes")
end
if conjinfo.semidep then
insert(subtits, "semideponente")
insert(cats, "LA:Verbos semideponentes")
end
if es_irregular then
insert(subtits, "irregular")
insert(cats, "LA:Verbos irregulares")
else
insert(subtits, "regular")
insert(cats, "LA:Verbos regulares")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit_pres..", "..tit_inf..", "..tit_perf..", "..tit_sup.."'''''  ("..concat(subtits, ", ")..")",
t,
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 = {
["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 head = args[1]
local modo = args[2]
local enc
local cats = {}
local cat_pref = "LA:Adverbios"
if modo == "-" then
enc = "sin comparativo ni superlativo"
insert(cats, cat_pref.." incomparables")
return renderizar_encabezado(
frame,
head,
enc,
args["n"],
{},
ns == 0 and cats or {},
normalizar_enlace
)
end
local flex = {comp={},sup={}}
local stem
for _, suff in ipairs{"iter", "nter", "ter", "er", "iē", "ē", "rā", "im", "ō"} do
stem = match(head, "^(.*)" .. suff .. "$")
if stem ~= nil then
local comp_suff, sup_suff = "ius", "issimē"
if suff == "nter" then
stem = stem .. "nt"
end
if suff == "rā" then
comp_suff = "er" .. comp_suff
sup_suff = "imē"
end
insert(flex.comp, stem .. comp_suff)
insert(flex.sup, stem .. sup_suff)
break
end
end
if not stem and not args.comp[1] and not args.sup[1] then
error("Unrecognized adverb type, recognized types are “-ē”, “-er”, “-ter”, “-iter”, “-im”, or “-ō”, “-ra” or specify irregular forms or “-” if incomparable.")
end
local formas, irr = sobreescribir_formas(flex, args)
if args["comp"][1] == "no" then
enc = "sin comparativo"
insert(cats, cat_pref.." sin comparativo")
return renderizar_encabezado(
frame,
head,
enc,
args["n"],
{{"superlativo", formas.sup, args["supnota"]}},
ns == 0 and cats or {},
normalizar_enlace
)
elseif args["sup"][1] == "no" then
enc = "sin superlativo"
insert(cats, cat_pref.." sin superlativo")
return renderizar_encabezado(
frame,
head,
enc,
args["n"],
{{"comparativo", formas.comp, args["compnota"]}},
ns == 0 and cats or {},
normalizar_enlace
)
end
if irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
end
return renderizar_encabezado(
frame,
head,
enc,
args["n"],
{{"comparativo", formas.comp, args["compnota"]},
{"superlativo", formas.sup, args["supnota"]}},
ns == 0 and cats or {},
normalizar_enlace
)
end
return export
74pt1lutrb3x7vl6ctsaec9thi5mglp
6110110
6110099
2026-04-27T18:03:42Z
Tmagc
158167
6110110
Scribunto
text/plain
-- FLEXIÓN DEL LATÍN
-- Adaptado desde en.wikt por 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_str_avanzado = require("Módulo:string/avanzado")
local toNFD = m_str_avanzado.toNFD
local toNFC = m_str_avanzado.toNFC
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_tabla = m_flex.renderizar_tabla
local renderizar_encabezado = m_flex.renderizar_encabezado
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 MACRON = u(0x304)
local BREVE = u(0x306)
local DIAER = u(0x308)
local DBREVE = u(0x361)
local ACCENT = "[" .. MACRON .. BREVE .. DIAER .. DBREVE .. "]"
local VOWEL = "[aæeioœuyAÆEIOŒUY]"
local cons_to_vowel = {
["j"] = "i", ["J"] = "I",
["v"] = "u", ["V"] = "U",
}
local function normalizar_enlace(x)
x = toNFD(x)
x = gsub(x, ACCENT, "")
return toNFC(x)
end
local function join(a, b)
a, b = toNFD(a), toNFD(b)
-- If the first part ends in "j" or "v", convert it to "i" or "u" unless
-- the second part begins with a vowel.
if not match(b, "^" .. VOWEL) then
a = gsub(a, "[jvJV]$", cons_to_vowel)
end
return toNFC(a..b)
end
local function add_form(decl, slot, stem, suf)
if type(slot) == "string" then
slot = {slot}
end
for _,slt in ipairs(slot) do
if type(decl[slt]) == "nil" or decl[slt] == "" then
decl[slt] = {}
elseif type(decl[slt]) == "string" then
decl[slt] = {decl[slt]}
end
insert_if_not(decl[slt], join(stem, suf))
end
end
local function remove_forms(decl, forms)
for form,_ in pairs(decl) do
for _,rx in ipairs(forms) do
if form:find(rx) then
forms[form] = {}
break
end
end
end
end
local function merge_forms(forms, forms2, keys)
keys = keys or forms2
for key,arr in pairs(keys) do
if not forms[key] then
forms[key] = {}
end
if type(forms2[key]) == "string" then
insert_if_not(forms[key], forms2[key])
elseif type(forms2[key]) == "table" then
for _,a in ipairs(forms2[key]) do
insert_if_not(forms[key], a)
end
end
end
end
local noun_decl = {}
noun_decl["0"] = function(data, args)
local forms = data.forms
local stem = args[1]
insert_if_not(data.title, "indeclinable")
insert_if_not(data.categories, "LA:Sustantivos indeclinables")
forms["nom_sg"] = stem
forms["gen_sg"] = stem
forms["dat_sg"] = stem
forms["acc_sg"] = stem
forms["abl_sg"] = stem
forms["voc_sg"] = stem
forms["nom_pl"] = stem
forms["gen_pl"] = stem
forms["dat_pl"] = stem
forms["acc_pl"] = stem
forms["abl_pl"] = stem
forms["voc_pl"] = stem
-- with locative
if data.loc then
forms["loc_sg"] = stem
forms["loc_pl"] = stem
end
end
local function alt_gen_pl_in_um(stem, forms, types, subtitles, i_stem)
if types.genplum then
add_form(forms, "gen_pl", stem, (i_stem and "i" or "") .. "um")
elseif types.not_genplum then
-- FIXME: not a contraction.
-- insert_if_not(subtitles, "uncontracted genitive plural")
end
end
noun_decl["1"] = function(data, args)
local forms, types, loc, subtitles = data.forms, data.types, data.loc, data.subtitles
local stem = args[1]
-- normal 1st
local nom_sg = "a"
local gen_loc_sg = "ae"
local dat_sg = "ae"
local acc_sg = "am"
local abl_sg = "ā"
local voc_sg = "a"
local nom_voc_pl = "ae"
local gen_pl = "ārum"
local dat_abl_loc_pl = "īs"
local acc_pl = "ās"
insert_if_not(data.title, "primera declinación")
insert_if_not(data.categories, "LA:Sustantivos de la primera declinación")
-- ām
if types.am then
nom_sg = "ām"
acc_sg = "ām"
abl_sg = {"ām", "ā"}
voc_sg = "ām"
-- all Greek
elseif types.Greek then
insert_if_not(data.title, "griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
--Greek Ma
if types.Ma then
nom_sg = "ās"
acc_sg = "ān"
voc_sg = "ā"
-- Greek Me
elseif types.Me then
nom_sg = "ēs"
acc_sg = "ēn"
abl_sg = "ē"
voc_sg = "ē"
-- Greek
else
nom_sg = "ē"
gen_loc_sg = "ēs"
acc_sg = "ēn"
abl_sg = "ē"
voc_sg = "ē"
end
end
-- ābus
if types.abus then
dat_abl_loc_pl = "ābus"
end
add_form(forms, "nom_sg", stem, nom_sg)
add_form(forms, "gen_sg", stem, gen_loc_sg)
add_form(forms, "dat_sg", stem, dat_sg)
add_form(forms, "acc_sg", stem, acc_sg)
add_form(forms, "abl_sg", stem, abl_sg)
add_form(forms, "voc_sg", stem, voc_sg)
add_form(forms, {"nom_pl", "voc_pl"}, stem, nom_voc_pl)
add_form(forms, "gen_pl", stem, gen_pl)
add_form(forms, {"dat_pl", "abl_pl"}, stem, dat_abl_loc_pl)
add_form(forms, "acc_pl", stem, acc_pl)
-- with locative
if loc then
add_form(forms, "loc_sg", stem, gen_loc_sg)
add_form(forms, "loc_pl", stem, dat_abl_loc_pl)
end
end
noun_decl["2"] = function(data, args)
local forms, types, subtitles, notes = data.forms, data.types, data.subtitles, data.notes
local stem1, stem2 = args[1], args[2]
insert_if_not(data.title, "segunda declinación")
insert_if_not(data.categories, "LA:Sustantivos de la segunda declinación")
-- normal 2nd
forms["nom_sg"] = stem1 .. "us"
forms["gen_sg"] = stem1 .. "ī"
forms["dat_sg"] = stem1 .. "ō"
forms["acc_sg"] = stem1 .. "um"
forms["abl_sg"] = stem1 .. "ō"
forms["voc_sg"] = stem1 .. "e"
forms["nom_pl"] = stem1 .. "ī"
forms["gen_pl"] = stem1 .. "ōrum"
forms["dat_pl"] = stem1 .. "īs"
forms["acc_pl"] = stem1 .. "ōs"
forms["abl_pl"] = stem1 .. "īs"
forms["voc_pl"] = stem1 .. "ī"
-- all neuter
if types.N then
forms["nom_sg"] = stem1 .. "um"
forms["voc_sg"] = stem1 .. "um"
forms["nom_pl"] = stem1 .. "a"
forms["acc_pl"] = stem1 .. "a"
forms["voc_pl"] = stem1 .. "a"
-- neuter ium
if types.ium then
forms["nom_sg"] = stem1 .. "ium"
forms["gen_sg"] = {stem1 .. "iī", stem1 .. "ī{†}"}
forms["dat_sg"] = stem1 .. "iō"
forms["acc_sg"] = stem1 .. "ium"
forms["abl_sg"] = stem1 .. "iō"
forms["voc_sg"] = stem1 .. "ium"
forms["nom_pl"] = stem1 .. "ia"
forms["gen_pl"] = stem1 .. "iōrum"
forms["dat_pl"] = stem1 .. "iīs"
forms["acc_pl"] = stem1 .. "ia"
forms["abl_pl"] = stem1 .. "iīs"
forms["voc_pl"] = stem1 .. "ia"
-- neuter us, plural a
elseif types.a then
forms["nom_sg"] = stem1 .. "us"
forms["acc_sg"] = stem1 .. "us"
forms["voc_sg"] = stem1 .. "us"
forms["nom_pl"] = stem1 .. "a"
forms["acc_pl"] = stem1 .. "a"
forms["voc_pl"] = stem1 .. "a"
-- -vom (aevom, etc.)
elseif types.vom then
forms["nom_sg"] = stem1 .. "om"
forms["acc_sg"] = stem1 .. "om"
forms["voc_sg"] = stem1 .. "om"
-- neuter Greek in -os (cētos)
elseif types.Greek and types.us then
insert_if_not(data.title, "griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = stem1 .. "os"
forms["acc_sg"] = stem1 .. "os"
forms["voc_sg"] = stem1 .. "os"
forms["nom_pl"] = stem1 .. "ē"
forms["gen_pl"] = stem1 .. "ōn"
forms["acc_pl"] = stem1 .. "ē"
forms["voc_pl"] = stem1 .. "ē"
-- neuter Greek
elseif types.Greek then
insert_if_not(data.title, "griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = stem1 .. "on"
forms["acc_sg"] = stem1 .. "on"
forms["voc_sg"] = stem1 .. "on"
-- neuter us
elseif types.us then
forms["nom_sg"] = stem1 .. "us"
forms["acc_sg"] = stem1 .. "us"
forms["voc_sg"] = stem1 .. "us"
forms["nom_pl"] = stem1 .. "ī"
forms["acc_pl"] = stem1 .. "ōs"
forms["voc_pl"] = stem1 .. "ī"
end
-- er
elseif types.er then
forms["nom_sg"] = stem1
forms["gen_sg"] = stem2 .. "ī"
forms["dat_sg"] = stem2 .. "ō"
forms["acc_sg"] = stem2 .. "um"
forms["abl_sg"] = stem2 .. "ō"
forms["voc_sg"] = stem1
forms["nom_pl"] = stem2 .. "ī"
forms["gen_pl"] = stem2 .. "ōrum"
forms["dat_pl"] = stem2 .. "īs"
forms["acc_pl"] = stem2 .. "ōs"
forms["abl_pl"] = stem2 .. "īs"
forms["voc_pl"] = stem2 .. "ī"
-- ius
elseif types.ius then
forms["nom_sg"] = stem1 .. "ius"
forms["gen_sg"] = {stem1 .. "iī", stem1 .. "ī{†}"}
forms["dat_sg"] = stem1 .. "iō"
forms["acc_sg"] = stem1 .. "ium"
forms["abl_sg"] = stem1 .. "iō"
if types.voci then
-- Only for proper names and fīlius, genius
forms["voc_sg"] = stem1 .. "ī"
else
forms["voc_sg"] = stem1 .. "ie"
end
forms["nom_pl"] = stem1 .. "iī"
forms["gen_pl"] = stem1 .. "iōrum"
forms["dat_pl"] = stem1 .. "iīs"
forms["acc_pl"] = stem1 .. "iōs"
forms["abl_pl"] = stem1 .. "iīs"
forms["voc_pl"] = stem1 .. "iī"
-- -vos (servos, etc.)
elseif types.vos then
forms["nom_sg"] = stem1 .. "os"
forms["acc_sg"] = stem1 .. "om"
-- Greek
elseif types.Greek then
insert_if_not(data.title, "griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = stem1 .. "os"
forms["acc_sg"] = stem1 .. "on"
if data.num == "pl" then
forms["nom_pl"] = stem1 .. "oe"
forms["voc_pl"] = stem1 .. "oe"
else
forms["nom_pl"] = {stem1 .. "ī", stem1 .. "oe"}
forms["voc_pl"] = {stem1 .. "ī", stem1 .. "oe"}
end
elseif types.not_Greek then
insert_if_not(data.title, "no griego")
end
-- with -um genitive plural
alt_gen_pl_in_um(stem2, forms, types, subtitles, types.ius or types.ium)
-- with locative
if data.loc then
if types.ius or types.ium then
forms["loc_sg"] = stem2 .. "iī"
forms["loc_pl"] = stem2 .. "iīs"
else
forms["loc_sg"] = stem2 .. "ī"
forms["loc_pl"] = stem2 .. "īs"
end
end
end
local acc_sg_i_stem_subtypes = {
acc_im = {
-- amussis, basis, buris, cucumis, gummis, mephitis, paraphrasis, poesis, ravis, sitis, tussis, (vis) [abl -ī];
-- cannabis, senapis, sinapis [abl -e, -ī]
acc_sg = {"im"},
title = {"accusative singular in ''-im''"},
},
acc_im_in = {
-- cities, rivers, gods, e.g. Bilbilis, Syrtis, Tiberis, Anubis, Osiris [abl -ī];
-- Baetis, Tigris [acc -e, -ī]
acc_sg = {"im", "in"},
title = {"accusative singular in ''-im'' or ''-in''"},
},
acc_im_in_em = {
-- e.g. tigris, river Līris
acc_sg = {"im", "in", "em"},
title = {"accusative singular in ''-im'', ''-in'' or ''-em''"},
},
acc_im_em = {
acc_sg = {"im", "em"},
title = {"accusative singular in ''-im'' or ''-em''"},
},
acc_im_occ_em = {
-- febris, pelvis, puppis, restis, securis, turris [abl -ī, -e]
acc_sg = {"im", "em"},
title = {"accusative singular in ''-im'' or occasionally ''-em''"},
},
acc_em_im = {
-- aqualis, clavis, lens, navis [abl -e, -ī];
-- cutis, restis [abl -e]
acc_sg = {"em", "im"},
title = {"accusative singular in ''-em'' or ''-im''"},
},
}
local abl_sg_i_stem_subtypes = {
abl_i = {
-- amussis, basis, buris, cucumis, gummis, mephitis, paraphrasis, poesis, ravis, sitis, tussis, (vis) [acc -im];
-- cities, rivers, gods, e.g. Bilbilis, Syrtis, Tiberis, Anubis, Osiris [acc -im or -in];
-- canalis "water pipe", months in -is or -er, nouns originally i-stem adjectives such as aedilis, affinis, bipennis, familiaris, sodalis, volucris, etc. [acc -em]
abl_sg = {"ī"},
title = {"ablative singular in ''-ī''"},
},
abl_i_e = {
-- febris, pelvis, puppis, restis, securis, turris [acc -im, -em]
abl_sg = {"ī", "e"},
title = {"ablative singular in ''-ī'' or ''-e''"},
},
abl_e_i = {
-- cannabis, senapis, sinapis [acc -im];
-- Baetis, Tigris [acc -im, -in];
-- aqualis, clavis, lens, navis [acc -em, -im];
-- finis, mugilis, occiput, pugil, rus, supellex, vectis [acc -em]
abl_sg = {"e", "ī"},
title = {"ablative singular in ''-e'' or ''-ī''"},
},
abl_e_occ_i = {
-- amnis, anguis, avis, civis, classis, fustis, ignis, imber, orbis, pars, postis, sors, unguis, vesper [acc -em]
abl_sg = {"e", "ī"},
title = {"ablative singular in ''-e'' or occasionally ''-ī''"},
},
}
local function extract_stem(form, ending)
local base = match(form, "^(.*)" .. ending .. "$")
if not base then
error("Form " .. form .. " should end in -" .. ending)
end
return base
end
local function count_vowels(stem)
return select(2, toNFD(stem):gsub("[aeiouyAEIOUY]", ""))
end
noun_decl["3"] = function(data, args)
local forms, types, subtitles, notes = data.forms, data.types, data.subtitles, data.notes
local stem1, stem2 = args[1], args[2]
-- local function non_i_stem_type()
-- return (count_vowels(stem1) > count_vowels(stem2) and "parisyllabic" or "imparisyllabic") .. " non-i-stem"
-- end
insert_if_not(data.title, "tercera declinación")
insert_if_not(data.categories, "LA:Sustantivos de la tercera declinación")
--normal 3rd
forms["nom_sg"] = stem1
forms["gen_sg"] = stem2 .. "is"
forms["dat_sg"] = stem2 .. "ī"
forms["acc_sg"] = stem2 .. "em"
forms["abl_sg"] = stem2 .. "e"
forms["voc_sg"] = stem1
forms["nom_pl"] = stem2 .. "ēs"
forms["gen_pl"] = stem2 .. "um"
forms["dat_pl"] = stem2 .. "ibus"
forms["acc_pl"] = stem2 .. "ēs"
forms["abl_pl"] = stem2 .. "ibus"
forms["voc_pl"] = stem2 .. "ēs"
local acc_sg_i_stem_subtype = false
local not_acc_sg_i_stem_subtype = false
for subtype, _ in pairs(types) do
if acc_sg_i_stem_subtypes[subtype] then
acc_sg_i_stem_subtype = true
break
end
end
for acc_sg_subtype, _ in pairs(acc_sg_i_stem_subtypes) do
if types["not_" .. acc_sg_subtype] then
not_acc_sg_i_stem_subtype = true
break
end
end
local abl_sg_i_stem_subtype = false
local not_abl_sg_i_stem_subtype = false
for subtype, _ in pairs(types) do
if abl_sg_i_stem_subtypes[subtype] then
abl_sg_i_stem_subtype = true
break
end
end
for abl_sg_subtype, _ in pairs(abl_sg_i_stem_subtypes) do
if types["not_" .. abl_sg_subtype] then
not_abl_sg_i_stem_subtype = true
break
end
end
-- all Greek
if types.Greek then
insert_if_not(data.title, "griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
-- Greek er
if types.er then
stem1 = extract_stem(stem1, "ēr")
forms["nom_sg"] = stem1 .. "ēr"
forms["gen_sg"] = stem1 .. "eris"
forms["dat_sg"] = stem1 .. "erī"
forms["acc_sg"] = {stem1 .. "era", stem1 .. "erem"}
forms["abl_sg"] = stem1 .. "ere"
forms["voc_sg"] = stem1 .. "ēr"
forms["nom_pl"] = stem1 .. "erēs"
forms["gen_pl"] = stem1 .. "erum"
forms["dat_pl"] = stem1 .. "eribus"
forms["acc_pl"] = stem1 .. "erēs"
forms["abl_pl"] = stem1 .. "eribus"
forms["voc_pl"] = stem1 .. "erēs"
-- Greek on
elseif types.on then
stem1 = extract_stem(stem1, "ōn")
forms["nom_sg"] = stem1 .. "ōn"
forms["gen_sg"] = {stem1 .. "ontis", stem1 .. "ontos"}
forms["dat_sg"] = stem1 .. "ontī"
forms["acc_sg"] = stem1 .. "onta"
forms["abl_sg"] = stem1 .. "onte"
forms["voc_sg"] = stem1 .. "ōn"
forms["nom_pl"] = stem1 .. "ontēs"
forms["gen_pl"] = {stem1 .. "ontum", stem1 .. "ontium"}
forms["dat_pl"] = stem1 .. "ontibus"
forms["acc_pl"] = {stem1 .. "ontēs", stem1 .. "ontās"}
forms["abl_pl"] = stem1 .. "ontibus"
forms["voc_pl"] = stem1 .. "ontēs"
-- Greek i-stem
elseif types.I then
forms["gen_sg"] = {stem2 .. "is", stem2 .. "eōs", stem2 .. "ios"}
forms["acc_sg"] = {stem2 .. "im", stem2 .. "in", stem2 .. "em{MED}"}
forms["abl_sg"] = {stem2 .. "ī", stem2 .. "e{MED}"}
forms["voc_sg"] = {stem2 .. "is", stem2 .. "i"}
forms["nom_pl"] = {stem2 .. "ēs", stem2 .. "eis"}
forms["gen_pl"] = {stem2 .. "ium", stem2 .. "eōn"}
forms["acc_pl"] = {stem2 .. "ēs", stem2 .. "eis"}
forms["voc_pl"] = {stem2 .. "ēs", stem2 .. "eis"}
if types.poetic_esi then
forms["dat_pl"] = {stem2 .. "ibus", stem2 .. "esi{L}"}
forms["abl_pl"] = {stem2 .. "ibus", stem2 .. "esi{L}"}
end
-- normal Greek
else
forms["gen_sg"] = stem2 .. "os"
if match(toNFD(stem2), "[yY]" .. ACCENT .. "*$") then
forms["acc_sg"] = stem2 .. "n"
else
forms["acc_sg"] = stem2 .. "a"
end
forms["nom_pl"] = stem2 .. "es"
forms["acc_pl"] = stem2 .. "as"
forms["voc_pl"] = stem2 .. "es"
if match(toNFD(stem1), "[iyIY]" .. ACCENT .. "*s$") then
-- Per Hiley, words in -is and -ys have a poetic vocative
-- without the -s, but otherwise the vocative is the same
-- as the nominative.
forms["voc_sg"] = {stem1, (stem1:gsub("s$", "")).."{L}"}
end
end
elseif types.not_Greek then
insert_if_not(data.title, "no griego")
end
-- polis
if types.polis then
stem1 = extract_stem(stem1, "polis")
insert_if_not(data.title, "parcialmente griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = stem1 .. "polis"
forms["gen_sg"] = stem1 .. "polis"
forms["dat_sg"] = stem1 .. "polī"
forms["acc_sg"] = {stem1 .. "polim", stem1 .. "polin"}
forms["abl_sg"] = stem1 .. "polī"
forms["voc_sg"] = {stem1 .. "polis", stem1 .. "polī"}
end
-- all neuter
if types.N then
forms["acc_sg"] = stem1
-- neuter I stem
if types.I then
-- pure variety
if types.pure then
forms["abl_sg"] = stem2 .. "ī"
forms["nom_pl"] = stem2 .. "ia"
forms["gen_pl"] = stem2 .. "ium"
forms["acc_pl"] = stem2 .. "ia"
forms["voc_pl"] = stem2 .. "ia"
-- non-pure variety (rare)
else
forms["nom_pl"] = stem2 .. "a"
forms["gen_pl"] = {stem2 .. "ium", stem2 .. "um"}
forms["acc_pl"] = stem2 .. "a"
forms["voc_pl"] = stem2 .. "a"
end
-- normal neuter
else
forms["nom_pl"] = stem2 .. "a"
forms["acc_pl"] = stem2 .. "a"
forms["voc_pl"] = stem2 .. "a"
end
-- I stem
elseif types.I or acc_sg_i_stem_subtype or abl_sg_i_stem_subtype then
forms["gen_pl"] = stem2 .. "ium"
-- Per Allen and Greenough, Hiley and others, the acc_pl in -īs
-- applied originally to all i-stem nouns, and was current as an
-- alternative form up through Caesar.
forms["acc_pl"] = {stem2 .. "ēs", stem2 .. "īs"}
-- pure variety
if types.pure then
forms["acc_sg"] = stem2 .. "im"
forms["abl_sg"] = stem2 .. "ī"
forms["nom_pl"] = stem2 .. "īs"
forms["acc_pl"] = stem2 .. "īs"
forms["voc_pl"] = stem2 .. "īs"
end
local num = data.num
for subtype, _ in pairs(types) do
local acc_sg_i_stem_props = acc_sg_i_stem_subtypes[subtype]
if acc_sg_i_stem_props then
forms["acc_sg"] = {}
for _, ending in ipairs(acc_sg_i_stem_props.acc_sg) do
insert_if_not(forms["acc_sg"], stem2 .. ending)
end
-- if num ~= "pl" then
-- for _, t in ipairs(acc_sg_i_stem_props.title) do
-- insert_if_not(subtitles, t)
-- end
-- end
break
end
end
-- FIXME: needs to be done for neuter nouns as well.
for subtype, _ in pairs(types) do
local abl_sg_i_stem_props = abl_sg_i_stem_subtypes[subtype]
if abl_sg_i_stem_props then
forms["abl_sg"] = {}
for _, ending in ipairs(abl_sg_i_stem_props.abl_sg) do
insert_if_not(forms["abl_sg"], stem2 .. ending)
end
-- if num ~= "pl" then
-- for _, t in ipairs(abl_sg_i_stem_props.title) do
-- insert_if_not(subtitles, t)
-- end
-- end
break
end
end
end
-- with locative
if data.loc then
-- As far as I can tell, in general both dative singular and
-- ablative singular could be used for the third-declension locative,
-- with different time periods preferring different forms.
-- http://dcc.dickinson.edu/grammar/latin/3rd-declension-locative-case
-- mentions rūrī along with either Carthāginī or Carthāgine.
-- Wikipedia in https://en.wikipedia.org/wiki/Locative_case#Latin
-- says this:
--
-- In archaic times, the locative singular of third declension nouns
-- was still interchangeable between ablative and dative forms, but in
-- the Augustan Period the use of the ablative form became fixed.
-- Therefore, both forms "rūrī" and "rūre" may be encountered.
--
-- Lewis and Short confirm this.
local loc_sg = forms["dat_sg"]
if type(loc_sg) == "table" then
loc_sg = deep_copy(loc_sg)
else
loc_sg = {loc_sg}
end
local abl_sg = forms["abl_sg"]
if type(abl_sg) == "table" then
for _, form in ipairs(abl_sg) do
insert_if_not(loc_sg, deep_copy(form))
end
else
insert_if_not(loc_sg, abl_sg)
end
forms["loc_sg"] = loc_sg
forms["loc_pl"] = deep_copy(forms["abl_pl"])
--The following is what we used to have, but I simply cannot believe it.
--if types.Greek and not types.s then
-- forms["loc_pl"] = stem2 .. "ēs"
--end
end
end
noun_decl["4"] = function(data, args)
local forms, types, subtitles, notes = data.forms, data.types, data.subtitles, data.notes
local stem = args[1]
insert_if_not(data.title, "cuarta declinación")
insert_if_not(data.categories, "LA:Sustantivos de la cuarta declinación")
-- normal 4th
forms["nom_sg"] = stem .. "us"
forms["gen_sg"] = stem .. "ūs"
forms["dat_sg"] = stem .. "uī"
forms["acc_sg"] = stem .. "um"
forms["abl_sg"] = stem .. "ū"
forms["voc_sg"] = stem .. "us"
forms["nom_pl"] = stem .. "ūs"
forms["gen_pl"] = stem .. "uum"
forms["dat_pl"] = stem .. "ibus"
forms["acc_pl"] = stem .. "ūs"
forms["abl_pl"] = stem .. "ibus"
forms["voc_pl"] = stem .. "ūs"
if types.echo then
for slot in pairs(forms) do
if slot ~= "gen_sg" then
forms[slot] = stem .. "ō"
end
end
add_form(forms, "acc_sg", stem, "ōn")
elseif types.Callisto then
for slot in pairs(forms) do
if slot ~= "gen_sg" then
forms[slot] = stem .. "ō"
end
end
end
-- neuter
if types.N then
forms["nom_sg"] = stem .. "ū̆{?}"
forms["gen_sg"] = {stem .. "ūs{C}", stem .. "ū{S}"}
forms["dat_sg"] = {stem .. "uī{C}", stem .. "ū{S}"}
forms["acc_sg"] = stem .. "ū̆{?}"
forms["voc_sg"] = stem .. "ū̆{?}"
forms["nom_pl"] = stem .. "ua"
forms["acc_pl"] = stem .. "ua"
forms["voc_pl"] = stem .. "ua"
end
-- ubus
if types.ubus then
forms["dat_pl"] = stem .. "ubus"
forms["abl_pl"] = stem .. "ubus"
end
-- with locative
if data.loc then
forms["loc_sg"] = forms["abl_sg"]
forms["loc_pl"] = forms["abl_pl"]
end
end
noun_decl["5"] = function(data, args)
local forms, types = data.forms, data.types
local stem = args[1]
insert_if_not(data.title, "quinta declinación")
insert_if_not(data.categories, "LA:Sustantivos de la quinta declinación")
-- ies
if types.i then
stem = stem .. "i"
end
forms["nom_sg"] = stem .. "ēs"
forms["gen_sg"] = stem .. "eī"
forms["dat_sg"] = stem .. "eī"
forms["acc_sg"] = stem .. "em"
forms["abl_sg"] = stem .. "ē"
forms["voc_sg"] = stem .. "ēs"
forms["nom_pl"] = stem .. "ēs"
forms["gen_pl"] = stem .. "ērum"
forms["dat_pl"] = stem .. "ēbus"
forms["acc_pl"] = stem .. "ēs"
forms["abl_pl"] = stem .. "ēbus"
forms["voc_pl"] = stem .. "ēs"
-- ies
if types.i then
forms["gen_sg"] = stem .. "ēī"
forms["dat_sg"] = stem .. "ēī"
end
--with locative
if data.loc then
forms["loc_sg"] = stem .. "ē"
forms["loc_pl"] = stem .. "ēbus"
end
end
noun_decl["sgpl"] = function(data, args)
local forms = data.forms
local stem1, stem2 = args[1], args[2]
insert_if_not(data.title, "indeclinable")
insert_if_not(data.categories, "LA:Sustantivos indeclinables")
forms["nom_sg"] = stem1
forms["gen_sg"] = stem1
forms["dat_sg"] = stem1
forms["acc_sg"] = stem1
forms["abl_sg"] = stem1
forms["voc_sg"] = stem1
forms["nom_pl"] = stem2
forms["gen_pl"] = stem2
forms["dat_pl"] = stem2
forms["acc_pl"] = stem2
forms["abl_pl"] = stem2
forms["voc_pl"] = stem2
-- with locative
if data.loc then
forms["loc_sg"] = stem1
forms["loc_pl"] = stem2
end
end
noun_decl["indecl"] = function(data, args)
local forms = data.forms
local stem = args[1]
insert_if_not(data.title, "indeclinable")
insert_if_not(data.categories, "LA:Sustantivos indeclinables")
forms["nom_sg"] = stem
forms["gen_sg"] = {}
forms["dat_sg"] = {}
forms["acc_sg"] = stem
forms["abl_sg"] = {}
forms["voc_sg"] = {}
forms["nom_pl"] = {}
forms["gen_pl"] = {}
forms["dat_pl"] = {}
forms["acc_pl"] = {}
forms["abl_pl"] = {}
forms["voc_pl"] = {}
-- with locative (for multiword terms)
if data.loc then
forms["loc_sg"] = {}
forms["loc_pl"] = {}
end
data.num = "sg"
end
noun_decl["irreg"] = function(data, args)
local forms, subtitles, notes = data.forms, data.subtitles, data.notes
local stem = args[1]
insert_if_not(data.title, "irregular")
insert_if_not(data.categories, "LA:Sustantivos irregulares")
forms["nom_sg"] = {}
forms["gen_sg"] = {}
forms["dat_sg"] = {}
forms["acc_sg"] = {}
forms["abl_sg"] = {}
forms["voc_sg"] = {}
forms["nom_pl"] = {}
forms["gen_pl"] = {}
forms["dat_pl"] = {}
forms["acc_pl"] = {}
forms["abl_pl"] = {}
forms["voc_pl"] = {}
if stem == "bōs" then
data.decl = "3"
local stem1, stem2 = "bōs", "bov"
noun_decl["3"](data, {stem1, stem2})
add_form(forms, "abl_sg", stem2, "īd{†}")
add_form(forms, "gen_pl", "bo", "um")
add_form(forms, "gen_pl", stem2, "erum")
add_form(forms, "dat_pl", "", "bōbus")
add_form(forms, "dat_pl", "", "būbus")
add_form(forms, "abl_pl", "", "bōbus")
add_form(forms, "abl_pl", "", "būbus")
elseif stem:match("^[dD]eus$") then
data.decl = "2"
local dD = stem:sub(1, 1)
forms["nom_sg"] = dD .. "eus"
forms["gen_sg"] = dD .. "eī"
forms["dat_sg"] = dD .. "eō"
forms["acc_sg"] = dD .. "eum"
forms["abl_sg"] = dD .. "eō"
forms["voc_sg"] = {dD .. "eus", dD .. "ee"}
if stem == "deus" then
forms["nom_pl"] = {"dī", "diī", "deī"}
forms["gen_pl"] = {"deōrum", "deum"}
forms["dat_pl"] = {"dīs", "diīs", "deīs"}
forms["acc_pl"] = "deōs"
forms["abl_pl"] = {"dīs", "diīs", "deīs"}
forms["voc_pl"] = {"dī", "diī", "deī"}
end
elseif stem == "domus" then
data.decl = "4,2"
insert_if_not(data.title, "cuarta/segunda declinación")
forms["nom_sg"] = "domus"
forms["gen_sg"] = {"domūs", "domī"}
forms["dat_sg"] = {"domuī", "domō", "domū"}
forms["acc_sg"] = "domum"
forms["abl_sg"] = {"domū", "domō"}
forms["voc_sg"] = "domus"
forms["loc_sg"] = "domī"
forms["nom_pl"] = "domūs"
forms["gen_pl"] = {"domuum", "domōrum"}
forms["dat_pl"] = "domibus"
forms["acc_pl"] = {"domūs", "domōs"}
forms["abl_pl"] = "domibus"
forms["voc_pl"] = "domūs"
forms["loc_pl"] = {}
data.loc = true
elseif match(stem, "^[IÏJ]ēs[uū]" .. BREVE .. "?s$") then
local ij = sub(stem, 1, 1)
local uu = match(stem, "[uū]" .. BREVE .. "?")
forms["nom_sg"] = stem
forms["gen_sg"] = ij .. "ēsū"
forms["dat_sg"] = ij .. "ēsū"
forms["acc_sg"] = ij .. "ēs" .. uu .. "m"
forms["abl_sg"] = ij .. "ēsū"
forms["voc_sg"] = ij .. "ēsū"
data.num = "sg"
elseif stem == "Mōsēs" or stem == "Moesēs" or match(stem, "^M[oō]" .. BREVE .. "?[īȳ]sēs$") then
local mos = sub(stem, 1, -3)
forms["nom_sg"] = stem
forms["gen_sg"] = {mos .. "ī", mos .. "ēī", mos .. "is", mos .. "ēn", mos .. "eōs"}
forms["dat_sg"] = mos .. "ī"
forms["acc_sg"] = {mos .. "ēn", mos .. "em"}
forms["abl_sg"] = {mos .. "e", mos .. "ēn", mos .. "ī"}
forms["voc_sg"] = {mos .. "ēs", mos .. "ē"}
data.num = "sg"
elseif stem:match("^[ij]ūgerum$") then
data.decl = "2,3"
local ij = stem:sub(1, 1)
insert_if_not(data.title, "segunda/tercera declinación híbrido")
forms["nom_sg"] = ij .. "ūgerum"
forms["gen_sg"] = ij .. "ūgerī"
forms["dat_sg"] = ij .. "ūgerō"
forms["acc_sg"] = ij .. "ūgerum"
forms["abl_sg"] = ij .. "ūgerō"
forms["voc_sg"] = ij .. "ūgerum"
forms["nom_pl"] = ij .. "ūgera"
forms["gen_pl"] = ij .. "ūgerum"
forms["dat_pl"] = ij .. "ūgeribus"
forms["acc_pl"] = ij .. "ūgera"
forms["abl_pl"] = {ij .. "ūgeribus", ij .. "ūgerīs{†}"}
forms["voc_pl"] = ij .. "ūgera"
elseif stem == "sūs" then
data.decl = "3"
forms["nom_sg"] = "sūs"
forms["gen_sg"] = "suis"
forms["dat_sg"] = "suī"
forms["acc_sg"] = "suem"
forms["abl_sg"] = "sue"
forms["voc_sg"] = "sūs"
forms["nom_pl"] = "suēs"
forms["gen_pl"] = "suum"
forms["dat_pl"] = {"suibus", "sūbus", "subus"}
forms["acc_pl"] = "suēs"
forms["abl_pl"] = {"suibus", "sūbus", "subus"}
forms["voc_pl"] = "suēs"
elseif stem == "ēthos" then
data.decl = "3"
insert_if_not(data.title, "tercera declinación, griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = "ēthos"
forms["gen_sg"] = "ētheos"
forms["acc_sg"] = "ēthos"
forms["voc_sg"] = "ēthos"
forms["nom_pl"] = {"ēthea", "ēthē"}
forms["dat_pl"] = {"ēthesi", "ēthesin"}
forms["acc_pl"] = {"ēthea", "ēthē"}
forms["abl_pl"] = {"ēthesi", "ēthesin"}
forms["voc_pl"] = {"ēthea", "ēthē"}
elseif stem == "Athōs" then
data.decl = "2"
insert_if_not(data.title, "segunda declinación, griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = "Athōs"
forms["gen_sg"] = "Athō"
forms["dat_sg"] = "Athō"
forms["acc_sg"] = {"Athō", "Athōn"}
forms["abl_sg"] = "Athō"
forms["voc_sg"] = "Athōs"
data.num = "sg"
elseif stem:match("^[uv]ēnum$") then
data.decl = "4,2"
local uv = stem:sub(1, 1)
insert_if_not(data.title, "cuarta/segunda declinación, defectivo")
forms["dat_sg"] = {uv .. "ēnuī", uv .. "ēnō"}
forms["acc_sg"] = uv .. "ēnum"
data.num = "sg"
elseif stem:match("^[uv]īs$") then
data.decl = "3"
local uv = stem:sub(1, 1)
insert_if_not(data.title, "defectivo")
forms["nom_sg"] = uv .. "īs"
forms["gen_sg"] = uv .. "īs"
forms["dat_sg"] = uv .. "ī"
forms["acc_sg"] = uv .. "im"
forms["abl_sg"] = uv .. "ī"
forms["voc_sg"] = uv .. "īs"
forms["nom_pl"] = uv .. "īrēs"
forms["gen_pl"] = uv .. "īrium"
forms["dat_pl"] = uv .. "īribus"
forms["acc_pl"] = {uv .. "īrēs", uv .. "īrīs"}
forms["abl_pl"] = uv .. "īribus"
forms["voc_pl"] = uv .. "īrēs"
else
error("Stem " .. stem .. " not recognized.")
end
end
local adj_decl = {}
adj_decl["0+"] = function(data, args)
local forms, categories = data.forms, data.categories
local stem = args[1]
insert_if_not(data.title, "indeclinable")
insert_if_not(categories, "LA:Adjetivos indeclinables")
forms["nom_sg_m"] = stem
forms["nom_pl_m"] = stem
forms["gen_sg_m"] = stem
forms["gen_pl_m"] = stem
forms["dat_sg_m"] = stem
forms["dat_pl_m"] = stem
forms["acc_sg_m"] = stem
forms["acc_pl_m"] = stem
forms["abl_sg_m"] = stem
forms["abl_pl_m"] = stem
forms["voc_sg_m"] = stem
forms["voc_pl_m"] = stem
forms["loc_sg_m"] = stem
forms["loc_pl_m"] = stem
end
adj_decl["1&2+"] = function(data, args)
local forms, types, pos, subtitles, categories = data.forms, data.types, data.pos, data.subtitles, data.categories
local stem = args[1]
insert_if_not(data.title, "primera y segunda declinación")
insert_if_not(categories, "LA:Adjetivos de la primera declinación")
insert_if_not(categories, "LA:Adjetivos de la segunda declinación")
local original
if types.er then
local final2 = stem:sub(-2)
if final2 == "er" then
-- insert_if_not(categories, "LA:Sustantivos de la primera declinación")
-- insert_if_not(categories, "LA:Sustantivos de la segunda declinación")
elseif final2 == "ur" then
-- insert_if_not(categories, "LA:Sustantivos de la primera declinación")
-- insert_if_not(categories, "LA:Sustantivos de la segunda declinación")
else
error("Unrecognized ''-r'' stem (doesn't end in ''-er'' or ''-ur''): " .. stem)
end
stem, original = args[2], stem
end
local us = "us"
local a_sf = "a"
local um = "um"
local ae_gsf = "ae"
local am = "am"
local a_macron = "ā"
local i_pl = stem .. "ī"
if types.greekA or types.greekE then
insert_if_not(data.title, "griego")
insert_if_not(categories, "LA:Sustantivos griegos")
if types.greekA then
us = "os"
um = "on"
am = "ān"
else
us = "os"
a_sf = "ē"
um = "on"
ae_gsf = "ēs"
am = "ēn"
a_macron = "ē"
end
i_pl = {i_pl, stem .. "oe"}
end
forms["nom_sg_m"] = original or (stem .. us)
forms["nom_sg_f"] = stem .. a_sf
forms["nom_sg_n"] = stem .. um
forms["nom_pl_m"] = i_pl
forms["nom_pl_f"] = stem .. "ae"
forms["nom_pl_n"] = stem .. "a"
forms["gen_sg_m"] = stem .. "ī"
forms["gen_sg_f"] = stem .. ae_gsf
forms["gen_sg_n"] = stem .. "ī"
forms["gen_pl_m"] = stem .. "ōrum"
forms["gen_pl_f"] = stem .. "ārum"
forms["gen_pl_n"] = stem .. "ōrum"
forms["dat_sg_m"] = stem .. "ō"
forms["dat_sg_f"] = stem .. "ae"
forms["dat_sg_n"] = stem .. "ō"
forms["dat_pl_m"] = stem .. "īs"
forms["dat_pl_f"] = stem .. "īs"
forms["dat_pl_n"] = stem .. "īs"
forms["acc_sg_m"] = stem .. um
forms["acc_sg_f"] = stem .. am
forms["acc_sg_n"] = stem .. um
forms["acc_pl_m"] = stem .. "ōs"
forms["acc_pl_f"] = stem .. "ās"
forms["acc_pl_n"] = stem .. "a"
forms["abl_sg_m"] = stem .. "ō"
forms["abl_sg_f"] = stem .. a_macron
forms["abl_sg_n"] = stem .. "ō"
forms["abl_pl_m"] = stem .. "īs"
forms["abl_pl_f"] = stem .. "īs"
forms["abl_pl_n"] = stem .. "īs"
forms["voc_sg_m"] = original or (stem .. "e")
forms["voc_sg_f"] = stem .. a_sf
forms["voc_sg_n"] = stem .. um
forms["voc_pl_m"] = i_pl
forms["voc_pl_f"] = stem .. "ae"
forms["voc_pl_n"] = stem .. "a"
if types.ius then
insert_if_not(data.title, "pronominal")
--insert_if_not(subtitles, "with genitive singular in ''-ī̆us'' and dative singular in ''-ī''")
forms["gen_sg_m"] = stem .. "ī̆us"
forms["gen_sg_f"] = stem .. "ī̆us"
forms["gen_sg_n"] = stem .. "ī̆us"
forms["dat_sg_m"] = stem .. "ī"
forms["dat_sg_f"] = stem .. "ī"
forms["dat_sg_n"] = stem .. "ī"
elseif types.not_ius then
insert_if_not(data.title, "no pronominal")
--insert_if_not(subtitles, "with normal genitive and dative singular")
end
if stem == "me" then
forms["voc_sg_m"] = "mī"
end
if types.ic then
--insert_if_not(subtitles, "with genitive singular ending in ''-ius'' and dative singular ending in ''-ic''")
local oc = "oc"
local oc_macron = "ōc"
if stem == "ill" then
oc = "uc"
oc_macron = "ūc"
end
forms["nom_sg_m"] = stem .. "ic"
forms["nom_sg_f"] = stem .. "aec"
forms["nom_sg_n"] = stem .. oc
forms["nom_pl_n"] = stem .. "aec"
forms["gen_sg_m"] = stem .. "uius"
forms["gen_sg_f"] = stem .. "uius"
forms["gen_sg_n"] = stem .. "uius"
forms["dat_sg_m"] = stem .. "uic"
forms["dat_sg_f"] = stem .. "uic"
forms["dat_sg_n"] = stem .. "uic"
forms["acc_sg_m"] = stem .. "unc"
forms["acc_sg_f"] = stem .. "anc"
forms["acc_sg_n"] = stem .. oc
forms["acc_pl_n"] = stem .. "aec"
forms["abl_sg_m"] = stem .. "ōc"
forms["abl_sg_f"] = stem .. "āc"
forms["abl_sg_n"] = stem .. oc_macron
forms["voc_sg_m"] = {}
forms["voc_sg_f"] = {}
forms["voc_sg_n"] = {}
forms["voc_pl_m"] = {}
forms["voc_pl_f"] = {}
forms["voc_pl_n"] = {}
end
if types.distr then
if stem:sub(-1) == "n" then
forms["gen_pl_m"] = {stem .. "um", stem .. "ōrum{R}"}
forms["gen_pl_f"] = {stem .. "um", stem .. "ārum{R}"}
forms["gen_pl_n"] = {stem .. "um", stem .. "ōrum{R}"}
else
error("Unrecognized distributive numeral stem (doesn't end in ''n''): " .. stem)
end
original = stem
stem = args[2]
end
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["gen_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
adj_decl["1-1+"] = function(data, args)
local forms, subtitles, categories = data.forms, data.subtitles, data.categories
local stem = args[1]
insert_if_not(data.title, "primera declinación")
insert_if_not(categories, "LA:Adjetivos de la primera declinación")
forms["nom_sg_m"] = stem .. "a"
forms["nom_pl_m"] = stem .. "ae"
forms["nom_pl_n"] = stem .. "a"
forms["gen_sg_m"] = stem .. "ae"
forms["gen_pl_m"] = stem .. "ārum"
forms["dat_sg_m"] = stem .. "ae"
forms["dat_pl_m"] = stem .. "īs"
forms["acc_sg_m"] = stem .. "am"
forms["acc_sg_n"] = stem .. "a"
forms["acc_pl_m"] = stem .. "ās"
forms["acc_pl_n"] = stem .. "a"
forms["abl_sg_m"] = stem .. "ā"
forms["abl_pl_m"] = stem .. "īs"
forms["voc_sg_m"] = stem .. "a"
forms["voc_pl_m"] = stem .. "ae"
forms["voc_pl_n"] = stem .. "a"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
end
adj_decl["2-2+"] = function(data, args)
local forms, types, pos, subtitles, categories = data.forms, data.types, data.pos, data.subtitles, data.categories
local stem = args[1]
insert_if_not(data.title, "segunda declinación")
insert_if_not(categories, "LA:Adjetivos de la segunda declinación")
local us = "us"
local um = "um"
local i_pl = stem .. "ī"
if types.greek then
insert_if_not(data.title, "griego")
insert_if_not(categories, "LA:Sustantivos griegos")
us = "os"
um = "on"
i_pl = {i_pl, stem .. "oe"}
end
forms["nom_sg_m"] = stem .. us
forms["nom_sg_n"] = stem .. um
forms["nom_pl_m"] = i_pl
forms["nom_pl_n"] = stem .. "a"
forms["gen_sg_m"] = stem .. "ī"
forms["gen_sg_n"] = stem .. "ī"
forms["gen_pl_m"] = stem .. "ōrum"
forms["gen_pl_n"] = stem .. "ōrum"
forms["dat_sg_m"] = stem .. "ō"
forms["dat_sg_n"] = stem .. "ō"
forms["dat_pl_m"] = stem .. "īs"
forms["dat_pl_n"] = stem .. "īs"
forms["acc_sg_m"] = stem .. um
forms["acc_sg_n"] = stem .. um
forms["acc_pl_m"] = stem .. "ōs"
forms["acc_pl_n"] = stem .. "a"
forms["abl_sg_m"] = stem .. "ō"
forms["abl_sg_n"] = stem .. "ō"
forms["abl_pl_m"] = stem .. "īs"
forms["abl_pl_n"] = stem .. "īs"
forms["voc_sg_m"] = stem .. "e"
forms["voc_sg_n"] = stem .. um
forms["voc_pl_m"] = i_pl
forms["voc_pl_n"] = stem .. "a"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
local function abl_i_e(...)
local function update_slot(forms, slot, f, do_copy)
if not forms[slot] then
return do_copy
elseif do_copy then
f = deep_copy(f)
end
forms[slot] = f
return true
end
function abl_i_e(stem, forms, types)
local f, do_copy
if types["abl_e_i"] then
f = {stem .. "e", stem .. "ī"}
elseif types["abl_i_e"] then
f = {stem .. "ī", stem .. "e"}
else
return
end
do_copy = update_slot(forms, "abl_sg_m", f, do_copy)
do_copy = update_slot(forms, "abl_sg_f", f, do_copy)
-- Neuter doesn't take -e with i-stems.
if not types.I then
update_slot(forms, "abl_sg_n", f, do_copy)
end
end
return abl_i_e(...)
end
adj_decl["3-1+"] = function(data, args)
local forms, types, pos, subtitles, notes, categories = data.forms, data.types, data.pos, data.subtitles, data.notes, data.categories
local stem1, stem2 = args[1], args[2]
-- local singpos = singularize(pos)
insert_if_not(data.title, "tercera declinación, dos terminaciones")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación con dos terminaciones")
forms["nom_sg_m"] = stem1
forms["nom_sg_n"] = stem1
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "ia"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "ium"
forms["gen_pl_n"] = stem2 .. "ium"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_n"] = stem1
forms["acc_pl_m"] = {stem2 .. "īs", stem2 .. "ēs"}
forms["acc_pl_n"] = stem2 .. "ia"
forms["abl_sg_m"] = stem2 .. "ī"
forms["abl_sg_n"] = stem2 .. "ī"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
abl_i_e(stem2, forms, types)
forms["voc_sg_m"] = stem1
forms["voc_sg_n"] = stem1
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "ia"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
if types.par then
forms["nom_pl_n"] = stem2 .. "a"
forms["gen_pl_m"] = stem2 .. "um"
forms["gen_pl_n"] = stem2 .. "um"
forms["abl_sg_m"] = stem2 .. "e"
forms["abl_sg_n"] = stem2 .. "e"
forms["loc_sg_m"] = {stem2 .. "ī", stem2 .. "e"} -- Really?
forms["loc_sg_n"] = {stem2 .. "ī", stem2 .. "e"} -- Why does this happen?
forms["acc_pl_n"] = stem2 .. "a"
forms["voc_pl_n"] = stem2 .. "a"
end
local es_base = stem1:match("^(.-)ēs$")
if es_base and es_base == stem2 then
if types.greek then
forms["nom_sg_n"] = {stem2 .. "ē̆s{?}"}
forms["acc_sg_n"] = {stem2 .. "ē̆s{?}"}
forms["voc_sg_m"] = {stem2 .. "ē̆s{?}"}
forms["voc_sg_n"] = {stem2 .. "ē̆s{?}"}
forms["nom_pl_n"] = {stem2 .. "a{?}", stem2 .. "ia{?}"}
forms["acc_pl_n"] = {stem2 .. "a{?}", stem2 .. "ia{?}"}
forms["voc_pl_n"] = {stem2 .. "a{?}", stem2 .. "ia{?}"}
forms["abl_sg_m"] = {stem2 .. "e{?}", stem2 .. "ī{?}"}
forms["abl_sg_n"] = {stem2 .. "e{?}", stem2 .. "ī{?}"}
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["gen_pl_m"] = {stem2 .. "um{?}", stem2 .. "ium{?}"}
forms["gen_pl_n"] = {stem2 .. "um{?}", stem2 .. "ium{?}"}
insert_if_not(data.title, "griego")
insert_if_not(categories, "LA:Adjetivos griegos")
elseif types.not_greek then
insert_if_not(data.title, "no griego")
end
end
end
adj_decl["3-def+"] = function(data, args)
local forms, types, pos, subtitles, notes, categories = data.forms, data.types, data.pos, data.subtitles, data.notes, data.categories
local stem1, stem2 = args[1], args[2]
-- local singpos = singularize(pos)
insert_if_not(data.title, "tercera declinación, defectivo")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación")
forms["nom_sg_m"] = stem1
forms["nom_sg_n"] = stem1
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "ia"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "ium"
forms["gen_pl_n"] = stem2 .. "ium"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_n"] = stem1
forms["acc_pl_m"] = stem2 .. "ēs"
forms["acc_pl_n"] = stem2 .. "ia"
forms["abl_sg_m"] = stem2 .. "ī"
forms["abl_sg_n"] = stem2 .. "ī"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
forms["voc_sg_m"] = stem1
forms["voc_sg_n"] = stem1
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "ia"
if types.tor then
insert_if_not(data.title, "tercera declinación, solo en masculino")
insert_if_not(categories, "LA:Adjetivos solo en masculino")
remove_forms(forms, {"_f$", "_n$"})
forms["nom_sg_m"] = stem1
forms["gen_sg_m"] = stem2 .. "is"
forms["dat_sg_m"] = stem2 .. "ī"
forms["acc_sg_m"] = stem2 .. "em"
forms["abl_sg_m"] = stem2 .. "e"
forms["voc_sg_m"] = stem1
forms["nom_pl_m"] = stem2 .. "ēs"
forms["gen_pl_m"] = stem2 .. "um"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["acc_pl_m"] = stem2 .. "ēs"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["voc_pl_m"] = stem2 .. "ēs"
end
if types.trix then
insert_if_not(data.title, "tercera declinación, solo en femenino o en neutro plural")
insert_if_not(categories, "LA:Adjetivos solo en femenino")
insert_if_not(categories, "LA:Adjetivos solo en neutro")
remove_forms(forms, {"_m$", "sg_n$"})
forms["nom_sg_f"] = stem1
forms["gen_sg_f"] = stem2 .. "is"
forms["dat_sg_f"] = stem2 .. "ī"
forms["acc_sg_f"] = stem2 .. "em"
forms["abl_sg_f"] = {stem2 .. "e", stem2 .. "ī"}
forms["voc_sg_f"] = stem1
forms["nom_pl_f"] = stem2 .. "ēs"
forms["gen_pl_f"] = stem2 .. "ium"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["acc_pl_f"] = stem2 .. "ēs"
forms["abl_pl_f"] = stem2 .. "ibus"
forms["voc_pl_f"] = stem2 .. "ēs"
end
if types.trixf then
insert_if_not(data.title, "tercera declinación, solo en femenino")
insert_if_not(categories, "LA:Adjetivos solo en femenino")
remove_forms(forms, {"_m$","_n$"})
forms["nom_sg_f"] = stem1
forms["gen_sg_f"] = stem2 .. "is"
forms["dat_sg_f"] = stem2 .. "ī"
forms["acc_sg_f"] = stem2 .. "em"
forms["abl_sg_f"] = {stem2 .. "e", stem2 .. "ī"}
forms["voc_sg_f"] = stem1
forms["nom_pl_f"] = stem2 .. "ēs"
forms["gen_pl_f"] = stem2 .. "ium"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["acc_pl_f"] = stem2 .. "ēs"
forms["abl_pl_f"] = stem2 .. "ibus"
forms["voc_pl_f"] = stem2 .. "ēs"
end
if types.idis then
insert_if_not(data.title, "tercera declinación, solo en femenino")
insert_if_not(categories, "LA:Adjetivos solo en femenino")
remove_forms(forms, {"_m$","_n$"})
forms["nom_sg_f"] = stem1
forms["gen_sg_f"] = {stem2 .. "is", stem2 .. "os"}
forms["dat_sg_f"] = stem2 .. "ī"
forms["acc_sg_f"] = {stem2 .. "em", stem2 .. "a"}
forms["abl_sg_f"] = stem2 .. "e"
forms["voc_sg_f"] = stem1
forms["nom_pl_f"] = {stem2 .. "ēs", stem2 .. "es"}
forms["gen_pl_f"] = stem2 .. "um"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["acc_pl_f"] = {stem2 .. "ēs", stem2 .. "as"}
forms["abl_pl_f"] = stem2 .. "ibus"
forms["voc_pl_f"] = {stem2 .. "ēs", stem2 .. "es"}
end
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["abl_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
adj_decl["3-C+"] = function(data, args)
local forms, types, pos, categories = data.forms, data.types, data.pos, data.categories
local stem1 = args[1]
local stem2 = stem1 .. "ōr"
insert_if_not(data.title, "tercera declinación, comparativo")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación")
insert_if_not(categories, "LA:Adjetivos comparativos")
forms["nom_sg_m"] = stem1 .. "or"
forms["nom_sg_n"] = stem1 .. "us"
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "a"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "um"
forms["gen_pl_n"] = stem2 .. "um"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_n"] = stem1 .. "us"
forms["acc_pl_m"] = {stem2 .. "ēs", stem2 .. "īs"}
forms["acc_pl_n"] = stem2 .. "a"
forms["abl_sg_m"] = stem2 .. "ī"
forms["abl_sg_n"] = stem2 .. "ī"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
abl_i_e(stem2, forms, types)
forms["voc_sg_m"] = stem1 .. "or"
forms["voc_sg_n"] = stem1 .. "us"
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "a"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
adj_decl["3-P+"] = function(data, args)
local forms, notes = data.forms, data.notes
local stem2 = args[2]
adj_decl["3-1+"](data, args)
insert_if_not(data.title, "tercera declinación, participio")
insert_if_not(data.categories, "LA:Adjetivos de la tercera declinación")
forms["abl_sg_m"] = {stem2 .. "e{PART}", stem2 .. "ī{ADJ}"}
forms["abl_sg_n"] = {stem2 .. "e{PART}", stem2 .. "ī{ADJ}"}
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["acc_pl_m"] = {stem2 .. "ēs", stem2 .. "īs"}
end
adj_decl["3-2+"] = function(data, args)
local forms, types, pos, categories = data.forms, data.types, data.pos, data.categories
local stem = args[1]
-- local singpos = singularize(pos)
insert_if_not(data.title, "tercera declinación, dos terminaciones")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación con dos terminaciones")
forms["nom_sg_m"] = stem .. "is"
forms["nom_sg_n"] = stem .. "e"
forms["nom_pl_m"] = stem .. "ēs"
forms["nom_pl_n"] = stem .. "ia"
forms["gen_sg_m"] = stem .. "is"
forms["gen_sg_n"] = stem .. "is"
forms["gen_pl_m"] = stem .. "ium"
forms["gen_pl_n"] = stem .. "ium"
forms["dat_sg_m"] = stem .. "ī"
forms["dat_sg_n"] = stem .. "ī"
forms["dat_pl_m"] = stem .. "ibus"
forms["dat_pl_n"] = stem .. "ibus"
forms["acc_sg_m"] = stem .. "em"
forms["acc_sg_n"] = stem .. "e"
forms["acc_pl_m"] = {stem .. "īs", stem .. "ēs"}
forms["acc_pl_n"] = stem .. "ia"
forms["abl_sg_m"] = stem .. "ī"
forms["abl_sg_n"] = stem .. "ī"
forms["abl_pl_m"] = stem .. "ibus"
forms["abl_pl_n"] = stem .. "ibus"
-- abl_i_e(stem, forms, types) -- enable once [[Module:la-nominal]] has ben updated
forms["voc_sg_m"] = stem .. "is"
forms["voc_sg_n"] = stem .. "e"
forms["voc_pl_m"] = stem .. "ēs"
forms["voc_pl_n"] = stem .. "ia"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
adj_decl["3-3+"] = function(data, args)
local forms, types, pos, categories = data.forms, data.types, data.pos, data.categories
local stem1, stem2 = args[1], args[2]
-- local singpos = singularize(pos)
insert_if_not(data.title, "tercera declinación")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación con tres terminaciones")
forms["nom_sg_m"] = stem1
forms["nom_sg_f"] = stem2 .. "is"
forms["nom_sg_n"] = stem2 .. "e"
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_f"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "ia"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_f"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "ium"
forms["gen_pl_f"] = stem2 .. "ium"
forms["gen_pl_n"] = stem2 .. "ium"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_f"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_f"] = stem2 .. "em"
forms["acc_sg_n"] = stem2 .. "e"
forms["acc_pl_m"] = {stem2 .. "īs", stem2 .. "ēs"}
forms["acc_pl_f"] = {stem2 .. "īs", stem2 .. "ēs"}
forms["acc_pl_n"] = stem2 .. "ia"
forms["abl_sg_m"] = stem2 .. "ī"
forms["abl_sg_f"] = stem2 .. "ī"
forms["abl_sg_n"] = stem2 .. "ī"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_f"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
-- abl_i_e(stem2, forms, types) -- enable once [[Module:la-nominal]] has ben updated
forms["voc_sg_m"] = stem1
forms["voc_sg_f"] = stem2 .. "is"
forms["voc_sg_n"] = stem2 .. "e"
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_f"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "ia"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["abl_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
adj_decl["indecl+"] = function(data, args)
local forms, subtitles, categories = data.forms, data.subtitles, data.categories
local stem = args[1]
insert_if_not(data.title, "indeclinable")
insert_if_not(categories, "LA:Adjetivos indeclinables")
forms["nom_sg_m"] = stem
forms["nom_pl_m"] = {}
forms["gen_sg_m"] = {}
forms["gen_pl_m"] = {}
forms["dat_sg_m"] = {}
forms["dat_pl_m"] = {}
forms["acc_sg_m"] = stem
forms["acc_pl_m"] = {}
forms["abl_sg_m"] = {}
forms["abl_pl_m"] = {}
forms["voc_sg_m"] = {}
forms["voc_pl_m"] = {}
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
end
adj_decl["irreg+"] = function(data,args)
local forms, types, pos, notes, categories = data.forms, data.types, data.pos, data.notes, data.categories
local arg1 = args[1]
insert_if_not(data.title, "irregular")
insert_if_not(categories, "LA:Adjetivos irregulares")
if arg1 == "duo" or arg1 == "ambō" then
local stem = sub(arg1, 1, -2)
-- data.title = stem == "amb" and "irregular adjective" or "numeral"
data.num = "pl"
local stem_with_o = stem .. (stem == "amb" and "ō" or "o")
forms["nom_pl_m"] = stem_with_o
forms["nom_pl_f"] = stem .. "ae"
forms["nom_pl_n"] = stem_with_o
forms["gen_pl_m"] = stem .. "ōrum"
forms["gen_pl_f"] = stem .. "ārum"
forms["gen_pl_n"] = stem .. "ōrum"
forms["dat_pl_m"] = stem .. "ōbus"
forms["dat_pl_f"] = stem .. "ābus"
forms["dat_pl_n"] = stem .. "ōbus"
forms["acc_pl_m"] = {stem .. "ōs", stem_with_o}
forms["acc_pl_f"] = stem .. "ās"
forms["acc_pl_n"] = stem_with_o
forms["abl_pl_m"] = stem .. "ōbus"
forms["abl_pl_f"] = stem .. "ābus"
forms["abl_pl_n"] = stem .. "ōbus"
forms["voc_pl_m"] = stem_with_o
forms["voc_pl_f"] = stem .. "ae"
forms["voc_pl_n"] = stem_with_o
if stem == "du" then
forms["gen_pl_m"] = {forms["gen_pl_m"], "duum", "duom{†}"}
forms["gen_pl_n"] = {forms["gen_pl_n"], "duum", "duom{†}"}
end
elseif arg1:sub(-6) == "mīlle" then
insert_if_not(data.title, "numeral semiindeclinable")
local stem = arg1:sub(1, -3)
forms["nom_sg_m"] = stem .. "le"
forms["nom_pl_m"] = {stem .. "ia", stem .. "lia"}
forms["gen_sg_m"] = stem .. "le"
forms["gen_pl_m"] = {stem .. "ium", stem .. "lium"}
forms["dat_sg_m"] = stem .. "le"
forms["dat_pl_m"] = {stem .. "ibus", stem .. "libus"}
forms["acc_sg_m"] = stem .. "le"
forms["acc_pl_m"] = {stem .. "ia", stem .. "lia"}
forms["abl_sg_m"] = stem .. "le"
forms["abl_pl_m"] = {stem .. "ibus", stem .. "libus"}
forms["voc_sg_m"] = stem .. "le"
forms["voc_pl_m"] = {stem .. "ia", stem .. "lia"}
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
elseif arg1 == "ille" or arg1 == "iste" or arg1 == "ipse" or arg1 == "olle" then
local stem = arg1:sub(1, -2)
types.ius = true
adj_decl["1&2+"](data, {stem})
insert_if_not(data.title, "demostrativo") -- .. " " .. singularize(data.pos)
forms["nom_sg_m"] = arg1
if arg1 == "ipse" then
add_form(forms, "nom_sg_n", stem, "ud{MED}")
add_form(forms, "acc_sg_n", stem, "ud{MED}")
else
forms["nom_sg_n"] = stem .. "ud"
forms["acc_sg_n"] = stem .. "ud"
end
forms["voc_sg_m"] = {}
forms["voc_sg_f"] = {}
forms["voc_sg_n"] = {}
forms["voc_pl_m"] = {}
forms["voc_pl_f"] = {}
forms["voc_pl_n"] = {}
elseif arg1 == "illic" or arg1 == "istic" or arg1 == "isthic" then
insert_if_not(data.title, "demostrativo") -- .. " " .. singularize(data.pos)
local stem = arg1:sub(1, -3)
forms["nom_sg_m"] = stem .. "ic"
forms["nom_sg_f"] = stem .. "aec"
forms["nom_sg_n"] = {stem .. "uc", stem .. "ucce", stem .. "oc"}
forms["gen_sg_m"] = stem .. "ī̆usce"
forms["gen_sg_f"] = stem .. "ī̆usce"
forms["gen_sg_n"] = stem .. "ī̆usce"
forms["dat_sg_m"] = stem .. "īc"
forms["dat_sg_f"] = stem .. "īc"
forms["dat_sg_n"] = stem .. "īc"
forms["acc_sg_m"] = stem .. "unc"
forms["acc_sg_f"] = stem .. "anc"
forms["acc_sg_n"] = {stem .. "uc", stem .. "ucce", stem .. "oc"}
forms["abl_sg_m"] = stem .. "ōc"
forms["abl_sg_f"] = stem .. "āc"
forms["abl_sg_n"] = stem .. "ōc"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["gen_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["nom_pl_m"] = stem .. "īsce"
forms["nom_pl_f"] = stem .. "aec"
forms["nom_pl_n"] = stem .. "aec"
forms["gen_pl_m"] = stem .. "ōrunc{?}"
forms["gen_pl_f"] = stem .. "ārunc{?}"
forms["gen_ok_n"] = stem .. "ōrunc{?}"
forms["dat_pl_m"] = stem .. "īsce"
forms["dat_pl_f"] = stem .. "īsce"
forms["dat_pl_n"] = stem .. "īsce"
forms["acc_pl_m"] = stem .. "ōsce"
forms["acc_pl_f"] = stem .. "āsce"
forms["acc_pl_n"] = stem .. "aec"
forms["abl_pl_m"] = stem .. "īsce"
forms["abl_pl_f"] = stem .. "īsce"
forms["abl_pl_n"] = stem .. "īsce"
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
elseif arg1 == "hice" then
insert_if_not(data.title, "demostrativo") -- .. " pronoun"
forms["nom_sg_m"] = "hice"
forms["nom_sg_f"] = "haece"
forms["nom_sg_n"] = "hoce"
forms["nom_pl_m"] = "hīce"
forms["nom_pl_f"] = "haece"
forms["nom_pl_n"] = "haece"
forms["gen_sg_m"] = "huiusce"
forms["gen_sg_f"] = "huiusce"
forms["gen_sg_n"] = "huiusce"
forms["gen_pl_m"] = {"hōrunce", "hōrumce"}
forms["gen_pl_f"] = {"hārunce", "hārumce"}
forms["gen_pl_n"] = {"hōrunce", "hōrumce"}
forms["dat_sg_m"] = "huīce"
forms["dat_sg_f"] = "huīce"
forms["dat_sg_n"] = "huīce"
forms["dat_pl_m"] = "hīsce"
forms["dat_pl_f"] = "hīsce"
forms["dat_pl_n"] = "hīsce"
forms["acc_sg_m"] = "hunce"
forms["acc_sg_f"] = "hance"
forms["acc_sg_n"] = "hoce"
forms["acc_pl_m"] = "hōsce"
forms["acc_pl_f"] = "hāsce"
forms["acc_pl_n"] = "haece"
forms["abl_sg_m"] = "hōce"
forms["abl_sg_f"] = "hāce"
forms["abl_sg_n"] = "hōce"
forms["abl_pl_m"] = "hīsce"
forms["abl_pl_f"] = "hīsce"
forms["abl_pl_n"] = "hīsce"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["gen_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
elseif arg1 == "plūs" then
insert_if_not(data.title, "comparativo")
insert_if_not(data.categories, "LA:Sustantivos de la tercera declinación")
insert_if_not(data.categories, "LA:Sustantivos de la tercera declinación con una terminación")
data.note = "Ninguna de las formas en singular se usaron en latín clásico"
forms["nom_sg_n"] = "plūs"
forms["nom_pl_m"] = "plūrēs"
forms["nom_pl_n"] = "plūra"
forms["gen_sg_m"] = "plūris"
forms["gen_sg_n"] = "plūris"
forms["gen_pl_m"] = "plūrium"
forms["gen_pl_n"] = "plūrium"
forms["dat_sg_m"] = "plūrī"
forms["dat_sg_n"] = "plūrī"
forms["dat_pl_m"] = "plūribus"
forms["dat_pl_n"] = "plūribus"
forms["acc_sg_m"] = "plūrem"
forms["acc_sg_f"] = "plūrem"
forms["acc_sg_n"] = "plūs"
forms["acc_pl_m"] = {"plūrēs", "plūrīs"}
forms["acc_pl_n"] = "plūra"
forms["abl_sg_m"] = {"plūrī", "plūre"}
forms["abl_sg_f"] = {"plūrī", "plūre"}
forms["abl_sg_n"] = {"plūrī", "plūre"}
forms["abl_pl_m"] = "plūribus"
forms["abl_pl_n"] = "plūribus"
forms["voc_sg_n"] = "plūs"
forms["voc_pl_m"] = "plūrēs"
forms["voc_pl_n"] = "plūra"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["abl_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
elseif match(arg1, "^egō̆?$") or arg1 == "nōs" then
insert_if_not(data.title, "pronombre nominativo")
forms["nom_sg_m"] = arg1
forms["nom_pl_m"] = "nōs"
forms["gen_sg_m"] = "meī"
forms["gen_pl_m"] = {"nostrī", "nostrum"}
forms["dat_sg_m"] = "mihī̆"
forms["dat_pl_m"] = "nōbīs"
forms["acc_sg_m"] = {"mē", "mēmē"}
forms["acc_pl_m"] = "nōs"
forms["abl_sg_m"] = {"mē", "mēmē"}
forms["abl_pl_m"] = "nōbīs"
forms["voc_sg_m"] = arg1
forms["voc_pl_m"] = "nōs"
elseif arg1 == "tū" or arg1 == "vōs" then
insert_if_not(data.title, "pronombre nominativo")
forms["nom_sg_m"] = arg1
forms["nom_pl_m"] = "vōs"
forms["gen_sg_m"] = "tuī"
forms["gen_pl_m"] = {"vestrī", "vestrum"}
forms["dat_sg_m"] = "tibī̆"
forms["dat_pl_m"] = "vōbīs"
forms["acc_sg_m"] = {"tē", "tētē"}
forms["acc_pl_m"] = "vōs"
forms["abl_sg_m"] = {"tē", "tētē"}
forms["abl_pl_m"] = "vōbīs"
forms["voc_sg_m"] = arg1
forms["voc_pl_m"] = "vōs"
elseif arg1 == "suī" then
insert_if_not(data.title, "pronombre reflexivo")
forms["nom_sg_m"] = {}
forms["nom_pl_m"] = {}
forms["gen_sg_m"] = arg1
forms["gen_pl_m"] = forms["gen_sg_m"]
forms["dat_sg_m"] = "sibī̆"
forms["dat_pl_m"] = forms["dat_sg_m"]
forms["acc_sg_m"] = {"sē", "sēsē"}
forms["acc_pl_m"] = {"sē", "sēsē"}
forms["abl_sg_m"] = {"sē", "sēsē"}
forms["abl_pl_m"] = {"sē", "sēsē"}
forms["voc_sg_m"] = {}
forms["voc_pl_m"] = {}
elseif arg1 == "is" or arg1 == "īdem" then
insert_if_not(data.title, "pronombre demostrativo")
forms["nom_sg_m"] = "is"
forms["nom_sg_f"] = "ea"
forms["nom_sg_n"] = "id"
forms["nom_pl_m"] = {"iī", "eī", "ī"}
forms["nom_pl_f"] = "eae"
forms["nom_pl_n"] = "ea"
forms["gen_sg_m"] = {"eius", "ejus"}
forms["gen_sg_f"] = {"eius", "ejus"}
forms["gen_sg_n"] = {"eius", "ejus"}
forms["gen_pl_m"] = {"eōrum", "eum"}
forms["gen_pl_f"] = "eārum"
forms["gen_pl_n"] = {"eōrum", "eum"}
forms["dat_sg_m"] = {"eī", "e͡i", "ēī"}
forms["dat_sg_f"] = {"eī", "e͡i", "ēī", "eae"}
forms["dat_sg_n"] = {"eī", "e͡i", "ēī"}
forms["dat_pl_m"] = {"iīs", "eīs", "īs"}
forms["dat_pl_f"] = {"iīs", "eīs", "īs", "eābus"}
forms["dat_pl_n"] = {"iīs", "eīs", "īs"}
forms["acc_sg_m"] = "eum"
forms["acc_sg_f"] = "eam"
forms["acc_sg_n"] = "id"
forms["acc_pl_m"] = "eōs"
forms["acc_pl_f"] = "eās"
forms["acc_pl_n"] = "ea"
forms["abl_sg_m"] = "eō"
forms["abl_sg_f"] = "eā"
forms["abl_sg_n"] = "eō"
forms["abl_pl_m"] = {"iīs", "eīs", "īs"}
forms["abl_pl_f"] = {"iīs", "eīs", "īs"}
forms["abl_pl_n"] = {"iīs", "eīs", "īs"}
if arg1 == "īdem" then
forms["nom_sg_m"] = "ī"
forms["nom_sg_n"] = "i"
forms["acc_sg_n"] = "i"
end
elseif arg1 == "quis" or arg1 == "quī" then
data.note = "La forma ''qua'' es preferida frente a ''quae'' cuando se usa como indefinido"
local id = "id"
if arg1 == "quī" then
insert_if_not(data.title, "determinante relativo/interrogativo")
id = "od"
forms["nom_sg_m"] = {"quī", "quis", "quei{†}"}
forms["nom_sg_f"] = {"quae", "qua"}
forms["acc_sg_f"] = "quam"
forms["abl_sg_m"] = "quō"
forms["abl_sg_f"] = "quā"
forms["abl_sg_n"] = "quō"
else
insert_if_not(data.title, "pronombre relativo/interrogativo")
forms["nom_sg_m"] = {"quis", "quī"}
forms["nom_sg_f"] = {"quae", "qua", "quis{†}"}
forms["acc_sg_f"] = {"quam", "quem{†}"}
forms["abl_sg_m"] = {"quō", "quī"}
forms["abl_sg_f"] = {"quā", "quī"}
forms["abl_sg_n"] = {"quō", "quī"}
end
forms["nom_sg_n"] = "qu"..id
forms["nom_pl_m"] = {"quī", "quei{†}"}
forms["nom_pl_f"] = "quae"
forms["nom_pl_n"] = {"quae", "qua"}
forms["gen_sg_m"] = {"cuius", "quoius{†}"}
forms["gen_sg_f"] = {"cuius", "quoius{†}"}
forms["gen_sg_n"] = {"cuius", "quoius{†}"}
forms["gen_pl_m"] = "quōrum"
forms["gen_pl_f"] = "quārum"
forms["gen_pl_n"] = "quōrum"
forms["dat_sg_m"] = {"cui", "quoi{†}", "quoiei{†}"}
forms["dat_sg_f"] = {"cui", "quoi{†}", "quoiei{†}"}
forms["dat_sg_n"] = {"cui", "quoi{†}", "quoiei{†}"}
forms["dat_pl_m"] = {"quibus", "quīs", "queis{†}"}
forms["dat_pl_f"] = {"quibus", "quīs", "queis{†}"}
forms["dat_pl_n"] = {"quibus", "quīs", "queis{†}"}
forms["acc_sg_m"] = "quem"
forms["acc_sg_n"] = "qu"..id
forms["acc_pl_m"] = "quōs"
forms["acc_pl_f"] = "quās"
forms["acc_pl_n"] = {"quae", "qua"}
forms["abl_pl_m"] = {"quibus", "quīs", "queis{†}"}
forms["abl_pl_f"] = {"quibus", "quīs", "queis{†}"}
forms["abl_pl_n"] = {"quibus", "quīs", "queis{†}"}
elseif arg1 == "aliquī" then
insert_if_not(data.title, "determinante indefinido")
forms["nom_sg_m"] = {"aliquī{DET/ADJ}", "aliquis{PRON/SUST}"}
forms["nom_sg_f"] = {"aliqua", "aliquae{R}"}
forms["nom_sg_n"] = "aliquod"
forms["nom_pl_m"] = "aliquī"
forms["nom_pl_f"] = "aliquae"
forms["nom_pl_n"] = "aliqua"
forms["gen_sg_m"] = {"alicuius", "aliquoius{†}"}
forms["gen_sg_f"] = {"alicuius", "aliquoius{†}"}
forms["gen_sg_n"] = {"alicuius", "aliquoius{†}"}
forms["gen_pl_m"] = "aliquōrum"
forms["gen_pl_f"] = "aliquārum"
forms["gen_pl_n"] = "aliquōrum"
forms["dat_sg_m"] = {"alicui", "aliquoi{†}"}
forms["dat_sg_f"] = {"alicui", "aliquoi{†}"}
forms["dat_sg_n"] = {"alicui", "aliquoi{†}"}
forms["dat_pl_m"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
forms["dat_pl_f"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
forms["dat_pl_n"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
forms["acc_sg_m"] = "aliquem"
forms["acc_sg_f"] = "aliquam"
forms["acc_sg_n"] = "aliquod"
forms["acc_pl_m"] = "aliquōs"
forms["acc_pl_f"] = "aliquās"
forms["acc_pl_n"] = "aliqua"
forms["abl_sg_m"] = "aliquō"
forms["abl_sg_f"] = "aliquā"
forms["abl_sg_n"] = "aliquō"
forms["abl_pl_m"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
forms["abl_pl_f"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
forms["abl_pl_n"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
elseif arg1 == "quisquam" then
insert_if_not(data.title, "determinante indefinido, concordancia en negativo")
data.note = "En latín clásico, era preferidas las formas de ''ūllus'' en lugar de las esta voz para el femenino y el neutro."
forms["nom_sg_m"] = "quisquam"
forms["nom_sg_f"] = {"quaequam", "quisquam{†}"}
forms["nom_sg_n"] = "quodquam"
forms["nom_pl_m"] = "quīquam"
forms["nom_pl_f"] = "quaequam"
forms["nom_pl_n"] = "quaequam"
forms["gen_sg_m"] = "cuiusquam"
forms["gen_sg_f"] = "cuiusquam"
forms["gen_sg_n"] = "cuiusquam"
forms["gen_pl_m"] = "quōrumquam"
forms["gen_pl_f"] = "quārumquam"
forms["gen_pl_n"] = "quōrumquam"
forms["dat_sg_m"] = "cuiquam"
forms["dat_sg_f"] = "cuiquam"
forms["dat_sg_n"] = "cuiquam"
forms["dat_pl_m"] = "quibusquam"
forms["dat_pl_f"] = "quibusquam"
forms["dat_pl_n"] = "quibusquam"
forms["acc_sg_m"] = "quemquam"
forms["acc_sg_f"] = {"quamquam", "quemquam{†}"}
forms["acc_sg_n"] = "quodquam"
forms["acc_pl_m"] = "quōsquam"
forms["acc_pl_f"] = "quāsquam"
forms["acc_pl_n"] = "quaequam"
forms["abl_sg_m"] = {"quōquam", "quīquam{†}"}
forms["abl_sg_f"] = "quāquam"
forms["abl_sg_n"] = "quōquam"
forms["abl_pl_m"] = "quibusquam"
forms["abl_pl_f"] = "quibusquam"
forms["abl_pl_n"] = "quibusquam"
forms["voc_sg_m"] = "quisquam"
forms["voc_sg_f"] = "quaequam"
forms["voc_sg_n"] = "quodquam"
forms["voc_pl_m"] = "quīquam"
forms["voc_pl_f"] = "quaequam"
forms["voc_pl_n"] = "quaequam"
elseif arg1 == "quisquis" then
insert_if_not(data.title, "pronombre relativo/interrogativo")
forms["nom_sg_m"] = "quisquis"
forms["nom_sg_f"] = "quisquis"
forms["nom_sg_n"] = {"quidquid", "quicquid"}
forms["nom_pl_m"] = "quīquī"
forms["nom_pl_f"] = "quaequae"
forms["nom_pl_n"] = "quaequae"
forms["gen_sg_m"] = "cuiuscuius"
forms["gen_sg_f"] = "cuiuscuius"
forms["gen_sg_n"] = "cuiuscuius"
forms["gen_pl_m"] = "quōrumquōrum"
forms["gen_pl_f"] = "quārumquārum"
forms["gen_pl_n"] = "quōrumquōrum"
forms["dat_sg_m"] = "cuicui"
forms["dat_sg_f"] = "cuicui"
forms["dat_sg_n"] = "cuicui"
forms["dat_pl_m"] = {"quibusquibus", "quīsquīs"}
forms["dat_pl_f"] = {"quibusquibus", "quīsquīs"}
forms["dat_pl_n"] = {"quibusquibus", "quīsquīs"}
forms["acc_sg_m"] = "quemquem"
forms["acc_sg_f"] = "quamquam"
forms["acc_sg_n"] = {"quidquid", "quicquid"}
forms["acc_pl_m"] = "quōsquōs"
forms["acc_pl_f"] = "quāsquās"
forms["acc_pl_n"] = "quaequae"
forms["abl_sg_m"] = "quōquō"
forms["abl_sg_f"] = "quāquā"
forms["abl_sg_n"] = "quōquō"
forms["abl_pl_m"] = {"quibusquibus", "quīsquīs"}
forms["abl_pl_f"] = {"quibusquibus", "quīsquīs"}
forms["abl_pl_n"] = {"quibusquibus", "quīsquīs"}
forms["voc_sg_m"] = "quisquis"
forms["voc_sg_f"] = "quisquis"
forms["voc_sg_n"] = {"quidquid", "quicquid"}
forms["voc_pl_m"] = "quīquī"
forms["voc_pl_f"] = "quaequae"
forms["voc_pl_n"] = "quaequae"
elseif arg1 == "ecquis" then
insert_if_not(data.title, "pronombre interrogativo")
forms["nom_sg_m"] = {"ecquis", "ecquī"}
forms["nom_sg_f"] = {"ecqua", "ecquae"}
forms["nom_sg_n"] = "ecquid"
forms["nom_pl_m"] = "ecquī"
forms["nom_pl_f"] = "ecquae"
forms["nom_pl_n"] = {"ecqua", "ecquae"}
forms["gen_sg_m"] = "eccuius"
forms["gen_sg_f"] = "eccuius"
forms["gen_sg_n"] = "eccuius"
forms["dat_sg_m"] = "eccui"
forms["dat_sg_f"] = "eccui"
forms["dat_sg_n"] = "eccui"
forms["acc_sg_m"] = "ecquem"
forms["acc_sg_f"] = "ecquam"
forms["acc_sg_n"] = "ecquod"
forms["acc_pl_m"] = "ecquōs"
forms["acc_pl_f"] = "ecquās"
forms["acc_pl_n"] = {"ecqua", "ecquae"}
forms["abl_sg_m"] = {"ecquō", "ecquī"}
forms["abl_sg_f"] = {"ecquā", "ecquī"}
forms["abl_sg_n"] = {"ecquō", "ecquī"}
elseif arg1 == "quīdam" then
insert_if_not(data.title, "pronombre indefinido")
forms["nom_sg_m"] = "quīdam"
forms["nom_sg_f"] = "quaedam"
forms["nom_sg_n"] = "quiddam"
forms["nom_pl_m"] = {"quīdam", "quēsdam{†}"}
forms["nom_pl_f"] = "quaedam"
forms["nom_pl_n"] = "quaedam"
forms["gen_sg_m"] = {"cuiusdam", "quoiusdam{†}"}
forms["gen_sg_f"] = {"cuiusdam", "quoiusdam{†}"}
forms["gen_sg_n"] = {"cuiusdam", "quoiusdam{†}"}
forms["gen_pl_m"] = {"quōrundam", "quōrumdam"}
forms["gen_pl_f"] = {"quārundam", "quārumdam"}
forms["gen_pl_n"] = {"quōrundam", "quōrumdam"}
forms["dat_sg_m"] = {"cuidam", "quoidam{†}"}
forms["dat_sg_f"] = {"cuidam", "quoidam{†}"}
forms["dat_sg_n"] = {"cuidam", "quoidam{†}"}
forms["dat_pl_m"] = {"quibusdam", "quīsdam{†}"}
forms["dat_pl_f"] = {"quibusdam", "quīsdam{†}"}
forms["dat_pl_n"] = {"quibusdam", "quīsdam{†}"}
forms["acc_sg_m"] = {"quendam", "quemdam"}
forms["acc_sg_f"] = {"quandam", "quamdam"}
forms["acc_sg_n"] = "quiddam"
forms["acc_pl_m"] = {"quōsdam", "quēsdam{†}"}
forms["acc_pl_f"] = "quāsdam"
forms["acc_pl_n"] = "quaedam"
forms["abl_sg_m"] = "quōdam"
forms["abl_sg_f"] = "quādam"
forms["abl_sg_n"] = "quōdam"
forms["abl_pl_m"] = {"quibusdam", "quīsdam{†}"}
forms["abl_pl_f"] = {"quibusdam", "quīsdam{†}"}
forms["abl_pl_n"] = {"quibusdam", "quīsdam{†}"}
elseif arg1 == "nēmō" then
insert_if_not(data.title, "Determinante y pronombre, concordancia en negativo")
forms["nom_sg_m"] = "nēmō"
forms["nom_sg_f"] = "nēmō"
forms["gen_sg_m"] = {"nūllī̆us", "nēminis{R}"}
forms["gen_sg_f"] = {"nūllī̆us", "nēminis{R}"}
forms["dat_sg_m"] = "nēminī"
forms["dat_sg_f"] = "nēminī"
forms["acc_sg_m"] = "nēminem"
forms["acc_sg_f"] = "nēminem"
forms["abl_sg_m"] = {"nūllō", "nēmine{R}"}
forms["abl_sg_f"] = {"nūllā", "nēmine{R}"}
else
error('adjective ' .. arg1 .. ' not recognized')
end
end
local function extract_base(lemma, ending)
if ending:find("(", nil, true) then
return match(lemma, ending)
end
return match(lemma, "^(.*)" .. ending .. "$")
end
local function get_noun_subtype_by_ending(lemma, stem2, decltype, specified_subtypes,
endings_and_subtypes)
for _, ending_and_subtypes in ipairs(endings_and_subtypes) do
local ending = ending_and_subtypes[1]
local subtypes = ending_and_subtypes[2]
local not_this_subtype = false
if (
specified_subtypes.pl and not contains(subtypes, "pl") or
contains(subtypes, "both") and not specified_subtypes.both
) then
-- We now require that plurale tantum terms specify a plural-form lemma.
-- The autodetected subtypes will include 'pl' for such lemmas; if not,
-- we fail this entry. Additionally, if the rule contains 'both', it
-- must be explicitly specified to match.
not_this_subtype = true
else
for _, subtype in ipairs(subtypes) do
-- A subtype is directly canceled by specifying -SUBTYPE.
-- In addition, M or F as a subtype is canceled by N, and
-- vice-versa, but M doesn't cancel F or vice-versa; instead,
-- we simply ignore the conflicting gender specification when
-- constructing the combination of specified and inferred subtypes.
-- The reason for this is that neuters have distinct declensions
-- from masculines and feminines, but masculines and feminines have
-- the same declension, and various nouns in Latin that are
-- normally masculine are exceptionally feminine and vice-versa
-- (nauta, agricola, fraxinus, malus "apple tree", manus, rēs,
-- etc.).
--
-- In addition, sg as a subtype is canceled by pl and vice-versa.
-- It's also possible to specify both, which will override sg but
-- not cancel it (in the sense that it won't prevent the relevant
-- rule from matching). For example, there's a rule specifying that
-- lemmas beginning with a capital letter and ending in -ius take
-- the ius.voci.sg subtypes. Specifying such a lemma with the
-- subtype both will result in the ius.voci.both subtypes, whereas
-- specifying such a lemma with the subtype pl will cause this rule
-- not to match, and it will fall through to a less specific rule
-- that returns just the ius subtype, which will be combined with
-- the explicitly specified pl subtype to produce ius.pl.
if specified_subtypes["-" .. subtype] or
subtype == "N" and (specified_subtypes.M or specified_subtypes.F) or
(subtype == "M" or subtype == "F") and specified_subtypes.N or
subtype == "sg" and specified_subtypes.pl or
subtype == "pl" and specified_subtypes.sg then
not_this_subtype = true
break
end
end
end
if not not_this_subtype then
if type(ending) == "table" then
local lemma_ending = ending[1]
local stem2_ending = ending[2]
local base = extract_base(lemma, lemma_ending)
if base and base .. stem2_ending == stem2 then
return base, stem2, subtypes
end
else
local base = extract_base(lemma, ending)
if base then
return base, stem2, subtypes
end
end
end
end
if decltype then
error("Unrecognized ending for declension-" .. decltype .. " noun: " .. lemma)
end
return lemma, stem2, keys_to_list(specified_subtypes)
end
local patterns = {
{"[mM]a", "%0t"},
{"e", ""},
{"([aoAO])([lr])", "%1" .. MACRON .. "%2"},
{"[eE]l", "%0l"},
{"([mM])en", "%1in"},
{"([tT]ūd)ō", "%1in"},
{"([gG])ō", "%1in"},
{"[ōŌ]", "%1n"},
{"er", "r"},
{"[ēi]s", ""},
{"([āēīōūȳĀĒĪŌŪȲ]n)s", function(v)
return (gsub(toNFD(v), MACRON, "") .. "t")
end},
{"([cC])eps", "%1ipit"},
{"([bp])s", "%1"},
{"us", "or"},
{"s", "t"},
{"ex", "ic"},
{"x", "c"},
}
local function make_stem2(stem)
local n
for _, pattern in ipairs(patterns) do
local key = pattern[1]
stem, n = gsub(stem, key .. "$", pattern[2])
if n > 0 then
-- debug_track("la-utilities/" .. key) REVISAR
return toNFC(stem)
end
end
-- debug_track("la-utilities") REVISAR
return stem
end
local function detect_noun_subtype(lemma, stem2, typ, subtypes)
local base, _
if typ == "1" then
return get_noun_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"ām", {"F", "am"}},
{"ās", {"M", "Greek", "Ma"}},
{"ēs", {"M", "Greek", "Me"}},
{"ē", {"F", "Greek"}},
{"ae", {"F", "pl"}},
{"a", {"F"}},
})
elseif typ == "2" then
local detected_subtypes
lemma, stem2, detected_subtypes = get_noun_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"^(.*r)$", {"M", "er"}},
{"^(.*v)os$", {"M", "vos"}},
{"^(.*v)om$", {"N", "vom"}},
-- If the lemma ends in -os and the user said N or -M, then the
-- following won't apply, and the second (neuter) -os will applly.
{"os", {"M", "Greek"}},
{"os", {"N", "Greek", "us"}},
{"on", {"N", "Greek"}},
-- -ius beginning with a capital letter is assumed a proper name,
-- and takes the voci subtype (vocative in -ī) along with the ius
-- subtype and sg-only. Other nouns in -ius just take the ius
-- subtype. Explicitly specify "sg" so that if .pl is given,
-- this rule won't apply.
{"^(%u.*)ius$", {"M", "ius", "voci", "sg"}},
{"ius", {"M", "ius"}},
{"ium", {"N", "ium"}},
-- If the lemma ends in -us and the user said N or -M, then the
-- following won't apply, and the second (neuter) -us will applly.
{"us", {"M"}},
{"us", {"N", "us"}},
{"um", {"N"}},
{"iī", {"M", "ius", "pl"}},
{"ia", {"N", "ium", "pl"}},
-- If the lemma ends in -ī and the user said N or -M, then the
-- following won't apply, and the second (neuter) -ī will applly.
{"ī", {"M", "pl"}},
{"ī", {"N", "us", "pl"}},
{"oe", {"M", "Greek", "pl"}},
{"a", {"N", "pl"}},
})
stem2 = stem2 or lemma
return lemma, stem2, detected_subtypes
elseif typ == "3" then
if subtypes.pl then
if subtypes.Greek then
base = lemma:match("^(.*)erēs$")
if base then
return base .. "ēr", base .. "er", {"er"}
end
base = lemma:match("^(.*)ontēs$")
if base then
return base .. "ōn", base .. "ont", {"on"}
end
base = lemma:match("^(.*)es$")
if base then
return base, stem2 or base, {}
end
error("Unrecognized ending for declension-3 plural Greek noun: " .. lemma)
end
base = lemma:match("^(.*)ia$")
if base then
return base, stem2 or base, {"N", "I", "pure"}
end
base = lemma:match("^(.*)a$")
if base then
return base, stem2 or base, {"N"}
end
base = lemma:match("^(.*)ēs$")
if base then
return base, stem2 or base, {}
end
error("Unrecognized ending for declension-3 plural noun: " .. lemma)
end
stem2 = stem2 or make_stem2(lemma)
local detected_subtypes
if subtypes.Greek then
base, _, detected_subtypes = get_noun_subtype_by_ending(lemma, stem2, nil, subtypes, {
{{"is", ""}, {"I"}},
{"ēr", {"er"}},
{"ōn", {"on"}},
})
if base then
return lemma, stem2, detected_subtypes
end
return lemma, stem2, {}
end
if not subtypes.N then
base, _, detected_subtypes = get_noun_subtype_by_ending(lemma, stem2, nil, subtypes, {
{{"^(%u.*pol)is$", ""}, {"F", "polis", "sg", "loc"}},
{{"tūdō", "tūdin"}, {"F"}},
{{"tās", "tāt"}, {"F"}},
{{"tūs", "tūt"}, {"F"}},
{{"tiō", "tiōn"}, {"F"}},
{{"siō", "siōn"}, {"F"}},
{{"xiō", "xiōn"}, {"F"}},
{{"gō", "gin"}, {"F"}},
{{"or", "ōr"}, {"M"}},
{{"tr[iī]x", "trīc"}, {"F"}},
{{"is", ""}, {"I"}},
{{"^(%l.*)ēs$", ""}, {"I"}},
})
if base then
return lemma, stem2, detected_subtypes
end
end
base, _, detected_subtypes = get_noun_subtype_by_ending(lemma, stem2, nil, subtypes, {
{{"us", "or"}, {"N"}},
{{"us", "er"}, {"N"}},
{{"ma", "mat"}, {"N"}},
{{"men", "min"}, {"N"}},
{{"^(%u.*)e$", ""}, {"N", "sg"}},
{{"e", ""}, {"N", "I", "pure"}},
{{"al", "āl"}, {"N", "I", "pure"}},
{{"ar", "ār"}, {"N", "I", "pure"}},
})
if base then
return lemma, stem2, detected_subtypes
end
return lemma, stem2, {}
elseif typ == "4" then
if subtypes.echo or subtypes.Callisto then
base = lemma:match("^(.*)ō$")
if not base then
error("Declension-4 noun of subtype .echo or .Callisto should end in -ō: " .. lemma)
end
if subtypes.Callisto then
return base, nil, {"F", "sg"}
else
return base, nil, {"F"}
end
end
return get_noun_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"us", {"M"}},
{"ū̆", {"N"}},
{"ūs", {"M", "pl"}},
{"ua", {"N", "pl"}},
})
elseif typ == "5" then
return get_noun_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"iēs", {"F", "i"}},
{"iēs", {"F", "i", "pl"}},
{"ēs", {"F"}},
{"ēs", {"F", "pl"}},
})
elseif typ == "sgpl" then
return lemma, stem2, {}
elseif typ == "irreg" and lemma == "domus" then
-- [[domus]] auto-sets data.loc = true, but we need to know this
-- before declining the noun so we can propagate it to other segments.
return lemma, nil, {"loc"}
elseif typ == "indecl" or typ == "irreg" and (
lemma == "Deus" or match(lemma, "^[IJ]ēs[uū]s$") or
lemma == "Athōs" or lemma == "vēnum"
) then
-- Indeclinable nouns, and certain irregular nouns, set data.num = "sg",
-- but we need to know this before declining the noun so we can
-- propagate it to other segments.
return get_noun_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"", {"both"}},
{"", {"sg"}},
{"", {"pl"}},
})
elseif typ == "indecl" or typ == "irreg" then
return lemma, nil, {}
else
return nil, nil, {}
end
end
-- Given ENDINGS_AND_SUBTYPES (a list of four-tuples of ENDING, RETTYPE,
-- SUBTYPES, PROCESS_RETVAL), check each ENDING in turn against LEMMA and
-- STEM2. If it matches, return a four-tuple BASE, STEM2, RETTYPE, NEW_SUBTYPES
-- where BASE is normally the remainder of LEMMA minus the ending, STEM2 is
-- as passed in, RETTYPE is as passed in, and NEW_SUBTYPES is the same as
-- SUBTYPES minus any subtypes beginning with a hyphen. If no endings match,
-- throw an error if DECLTYPPE is non-nil, mentioning the DECLTYPE
-- (user-specified declension); but if DECLTYPE is nil, just return the tuple
-- nil, nil, nil, nil.
--
-- In order for a given entry to match, ENDING must match and also the subtypes
-- in SUBTYPES (a list) must not be incompatible with the passed-in
-- user-specified subtypes SPECIFIED_SUBTYPES (a set, i.e. a table where the
-- keys are strings and the value is always true). "Incompatible" means that
-- a given SUBTYPE is specified in either one and -SUBTYPE in the other, or
-- that "pl" is found in SPECIFIED_SUBTYPES and not in SUBTYPES.
--
-- The ending spec in ENDINGS_AND_SUBTYPES is one of the following:
--
-- 1. A simple string, e.g. "tūdō", specifying an ending.
-- 2. A regex that should match the entire lemma (it should be anchored at
-- the beginning with ^ and at the end with $), and contains a single
-- capturing group to match the base.
-- 3. A pair {SIMPLE_STRING_OR_REGEX, STEM2_ENDING} where
-- SIMPLE_STRING_OR_REGEX is one of the previous two possibilities and
-- STEM2_ENDING is a string specifying the corresponding ending that must
-- be present in STEM2. If this form is used, the combination of
-- base + STEM2_ENDING must exactly match STEM2 in order for this entry
-- to be considered a match. An example is {"is", ""}, which will match
-- lemma == "follis", stem2 == "foll", but not lemma == "lapis",
-- stem2 == "lapid".
--
-- If PROCESS_STEM2 is given and the returned STEM2 would be nil, call
-- process_stem2(BASE) to get the STEM2 to return.
local function get_adj_type_and_subtype_by_ending(lemma, stem2, decltype,
specified_subtypes, endings_and_subtypes, process_stem2)
for _, ending_and_subtypes in ipairs(endings_and_subtypes) do
local ending = ending_and_subtypes[1]
local rettype = ending_and_subtypes[2]
local subtypes = ending_and_subtypes[3]
local process_retval = ending_and_subtypes[4]
local not_this_subtype = false
if (
specified_subtypes.pl and not contains(subtypes, "pl") or
contains(subtypes, "both") and not specified_subtypes.both
) then
-- We now require that plurale tantum terms specify a plural-form lemma.
-- The autodetected subtypes will include 'pl' for such lemmas; if not,
-- we fail this entry. Additionally, if the rule contains 'both', it
-- must be explicitly specified to match.
not_this_subtype = true
else
for _, subtype in ipairs(subtypes) do
-- A subtype is directly canceled by specifying -SUBTYPE.
if specified_subtypes["-" .. subtype] then
not_this_subtype = true
break
end
-- A subtype is canceled if the user specified SUBTYPE and
-- -SUBTYPE is given in the to-be-returned subtypes.
local must_not_be_present = subtype:match("^%-(.*)$")
if must_not_be_present and specified_subtypes[must_not_be_present] then
not_this_subtype = true
break
end
end
end
if not not_this_subtype then
local base
if type(ending) == "table" then
local lemma_ending = ending[1]
local stem2_ending = ending[2]
base = extract_base(lemma, lemma_ending)
if base and base .. stem2_ending ~= stem2 then
base = nil
end
else
base = extract_base(lemma, ending)
end
if base then
-- Remove subtypes of the form -SUBTYPE from the subtypes
-- to be returned.
local new_subtypes = {}
for _, subtype in ipairs(subtypes) do
if subtype:sub(1, 1) ~= "-" then
insert(new_subtypes, subtype)
end
end
if process_retval then
base, stem2 = process_retval(base, stem2)
end
if process_stem2 then
stem2 = stem2 or process_stem2(base)
end
return base, stem2, rettype, new_subtypes
end
end
end
if not decltype then
return lemma, stem2, nil, keys_to_list(specified_subtypes)
elseif decltype == "" then
error("Unrecognized ending for adjective: " .. lemma)
else
error("Unrecognized ending for declension-" .. decltype .. " adjective: " .. lemma)
end
end
-- Autodetect the type and subtype of an adjective given all the information
-- specified by the user: lemma, stem2, declension type and specified subtypes.
-- Four values are returned: the lemma base (i.e. the stem of the lemma, as
-- required by the declension functions), the value of stem2 to pass to the
-- declension function, the declension type and the autodetected subtypes.
-- Note that this will not detect a given subtype if -SUBTYPE is specified for
-- any subtype that would be returned, or if SUBTYPE is specified and -SUBTYPE
-- is among the subtypes that would be returned (such subtypes are filtered out
-- of the returned subtypes).
local function detect_adj_type_and_subtype(lemma, stem2, typ, subtypes)
local function base_as_stem2(base, stem2)
return base, base
end
local function constant_base(baseval)
return function(base, stem2)
return baseval, nil
end
end
local function decl12_stem2(base)
return base
end
local function decl3_stem2(base)
return make_stem2(base)
end
local decl12_entries = {
{"us", "1&2+", {}},
{"a", "1&2+", {}},
{"um", "1&2+", {}},
{"ī", "1&2+", {"pl"}},
{"ae", "1&2+", {"pl"}},
{"a", "1&2+", {"pl"}},
-- Nearly all -os adjectives are greekA
{"os", "1&2+", {"greekA", "-greekE"}},
{"os", "1&2+", {"greekE", "-greekA"}},
{"ē", "1&2+", {"greekE", "-greekA"}},
{"on", "1&2+", {"greekA", "-greekE"}},
{"on", "1&2+", {"greekE", "-greekA"}},
{"^(.*er)$", "1&2+", {"er"}},
{"^(.*ur)$", "1&2+", {"er"}},
{"^(h)ic$", "1&2+", {"ic"}},
}
local decl3_entries = {
{"^(.*er)$", "3-3+", {"I"}},
{"^(.*er)$", "3-3+", {}},
{"is", "3-2+", {"I"}},
{"is", "3-2+", {}},
{"e", "3-2+", {"I"}},
{"e", "3-2+", {}},
{"^(.*[ij])or$", "3-C+", {"abl_e_i", "-abl_i_e"}},
{"^(.*[ij])or$", "3-C+", {}},
{"^(min)or$", "3-C+", {"abl_e_i", "-abl_i_e"}},
{"^(min)or$", "3-C+", {}},
{"^(.*trīx)$", "3-def+", {"trix", "abl_i_e", "-abl_e_i"}},
{"^(.*trīx)$", "3-def+", {"trix"}},
{"^(.*tor)$", "3-def+", {"tor", "abl_i_e", "-abl_e_i"}},
{"^(.*tor)$", "3-def+", {"tor"}},
-- Detect -ēs as 3-1 without auto-inferring .pl if .pl
-- not specified. If we don't do this, the later entry for
-- -ēs will auto-infer .pl whenever -ēs is specified (which
-- won't work for adjectives like quadripēs, volucripēs).
-- Essentially, for declension-3 adjectives, we require that
-- .pl is given if the lemma is plural.
--
-- Most 3-1 adjectives are i-stem (e.g. audāx) so we require -I
-- to be given with non-i-stem adjectives. The first entry below
-- will apply when -I isn't given, the second when it is given.
{"^(.*ēs)$", "3-1+", {"I", "abl_i_e", "-abl_e_i"}},
{"^(.*ēs)$", "3-1+", {"I"}},
{"^(.*ēs)$", "3-1+", {"par", "abl_i_e", "-abl_e_i"}},
{"^(.*ēs)$", "3-1+", {"par"}},
{"^(.*[ij])ōrēs$", "3-C+", {"pl"}},
{"^(min)ōrēs$", "3-C+", {"pl"}},
-- If .pl with -ēs, we don't know if the adjective is 3-1, 3-2
-- or 3-3. Since 3-2 is probably the most common, we infer it
-- (as well as the fact that these adjectives *are* in a sense
-- 3-2 since they have a distinct neuter in -(i)a. Note that
-- we have two entries here; the first one will apply unless
-- -I is given, and will infer an i-stem adjective; the second
-- one will apply otherwise (and infer a non-i-stem 3-1 adjective).
{"ēs", "3-2+", {"pl", "I"}, base_as_stem2},
{"ēs", "3-1+", {"pl", "par"}, base_as_stem2},
-- Same for neuters.
{"ia", "3-2+", {"pl", "I"}, base_as_stem2},
{"a", "3-1+", {"pl", "par"}, base_as_stem2},
-- As above for -ēs but for miscellaneous singulars.
{"", "3-1+", {"I", "abl_i_e", "-abl_e_i"}},
{"", "3-1+", {"I"}},
{"", "3-1+", {"par", "abl_i_e", "-abl_e_i"}},
{"", "3-1+", {"par"}},
}
local function get_subtypes_and_endings(typ, f)
local subtypes_and_endings = {}
for _, v in ipairs(decl3_entries) do
if f(v) then
v = deep_copy(v)
v[2] = typ
insert(subtypes_and_endings, v)
end
end
return subtypes_and_endings
end
local function compare(spec)
return spec[2] == typ
end
if typ == "+" then
local base, new_stem2, rettype, new_subtypes = get_adj_type_and_subtype_by_ending(lemma, stem2, nil, subtypes, decl12_entries, decl12_stem2)
if rettype then
return base, new_stem2, rettype, new_subtypes
else
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, decl3_entries, decl3_stem2)
end
elseif typ == "3+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, decl3_entries, decl3_stem2)
elseif typ == "1&2+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, decl12_entries, decl12_stem2)
elseif typ == "1-1+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"a", typ, {}},
{"ae", typ, {"pl"}},
})
elseif typ == "2-2+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"us", typ, {}},
{"um", typ, {}},
{"ī", typ, {"pl"}},
{"a", typ, {"pl"}},
{"os", typ, {"greek"}},
{"on", typ, {"greek"}},
{"oe", typ, {"greek", "pl"}},
})
elseif typ == "3-1+" then
-- Use the specs from `decl3_entries`, but add the two i-stem 3-2+ specs when plural-only, as they're the same when 3-1+.
local subtypes_and_endings = get_subtypes_and_endings(typ, function(spec)
local spec1, spec2 = spec[1], spec[2]
return spec2 == typ or (spec2 == "3-2+" and spec1 == "ēs" or spec1 == "ia")
end)
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, subtypes_and_endings, decl3_stem2)
elseif typ == "3-def+" then
-- Like 3-1+ but defective in gender
local subtypes_and_endings = get_subtypes_and_endings(typ, compare)
insert(subtypes_and_endings, {"", typ, {"I"}})
insert(subtypes_and_endings, {"", typ, {"par"}})
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, subtypes_and_endings, decl3_stem2)
elseif typ == "3-2+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"is", typ, {}},
{"e", typ, {}},
-- Detect -ēs as 3-2 without auto-inferring .pl if .pl
-- not specified. If we don't do this, the later entry for
-- -ēs will auto-infer .pl whenever -ēs is specified (which
-- won't work for adjectives like isoscelēs). Essentially,
-- for declension-3 adjectives, we require that .pl is given
-- if the lemma is plural.
{"ēs", typ, {}},
{"ēs", typ, {"pl"}},
{"ia", typ, {"pl"}},
}, decl3_stem2)
elseif typ == "3-3+" or typ == "3-P+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"ēs", typ, {"pl"}, base_as_stem2},
{"ia", typ, {"pl"}, base_as_stem2},
{"", typ, {}},
}, decl3_stem2)
elseif typ == "3-C+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, get_subtypes_and_endings(typ, compare), decl3_stem2)
elseif typ == "irreg+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"^(duo)$", typ, {"pl"}},
{"^(ambō)$", typ, {"pl"}},
{"^(mīll?ia)$", typ, {"N", "pl"}, constant_base("mīlle")},
-- match ea
{"^(ea)$", typ, {}, constant_base("is")},
-- match id
{"^(id)$", typ, {}, constant_base("is")},
-- match plural eī, iī
{"^([ei]ī)$", typ, {"pl"}, constant_base("is")},
-- match plural ea, eae
{"^(eae?)$", typ, {"pl"}, constant_base("is")},
-- match eadem
{"^(eadem)$", typ, {}, constant_base("īdem")},
-- match īdem, idem
{"^([īi]dem)$", typ, {}, constant_base("īdem")},
-- match plural īdem
{"^(īdem)$", typ, {"pl"}},
-- match plural eadem, eaedem
{"^(eae?dem)$", typ, {"pl"}, constant_base("īdem")},
-- match illa, ipsa, ista; it doesn't matter if we overmatch because
-- we'll get an error as we use the stem itself in the returned base
{"^(i[lps][lst])a$", typ, {}, function(base, stem2) return base .. "e", nil end},
-- match illud, istud; as above, it doesn't matter if we overmatch
{"^(i[ls][lt])ud$", typ, {}, function(base, stem2) return base .. "e", nil end},
-- match ipsum
{"^(ipsum)$", typ, {}, constant_base("ipse")},
-- match plural illī, ipsī, istī; as above, it doesn't matter if we
-- overmatch
{"^(i[lps][lst])ī$", typ, {"pl"}, function(base, stem2) return base .. "e", nil end},
-- match plural illa, illae, ipsa, ipsae, ista, istae; as above, it
-- doesn't matter if we overmatch
{"^(i[lps][lst])ae?$", typ, {"pl"}, function(base, stem2) return base .. "e", nil end},
-- Detect quī as non-plural unless .pl specified.
{"^(quī)$", typ, {}},
-- Otherwise detect quī as plural.
{"^(quī)$", typ, {"pl"}},
-- Same for quae.
{"^(quae)$", typ, {}, constant_base("quī")},
{"^(quae)$", typ, {"pl"}, constant_base("quī")},
{"^(quid)$", typ, {}, constant_base("quis")},
{"^(quod)$", typ, {}, constant_base("quī")},
{"^(qui[cd]quid)$", typ, {}, constant_base("quisquis")},
{"^(quīquī)$", typ, {"pl"}, constant_base("quisquis")},
{"^(quaequae)$", typ, {"pl"}, constant_base("quisquis")},
-- match all remaining lemmas in lemma form
{"", typ, {}},
})
elseif typ == "indecl+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"", typ, {"both"}},
{"", typ, {"sg"}},
{"", typ, {"pl"}},
})
else -- 0+
return lemma, nil, typ, {}
end
end
local noun_lb = {
nom_sg = "sg.",
gen_sg = "sg.",
dat_sg = "sg.",
acc_sg = "sg.",
abl_sg = "sg.",
voc_sg = "sg.",
loc_sg = "sg.",
nom_pl = "pl.",
gen_pl = "pl.",
dat_pl = "pl.",
acc_pl = "pl.",
abl_pl = "pl.",
voc_pl = "pl.",
loc_pl = "pl."
}
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"] = {},
["num"] = {por_defecto = ""},
["núm"] = {alias_de = "num"},
["nota"] = {},
}
for form,_ in pairs(noun_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)
local tpalabras = {}
for _,p in ipairs(args) do
p = match(p, "^(.-);") or p
local a, b = match(p, "^(.-)%.(.*)$")
assert(b, "error en especificaciones de palabra")
local r1 = match(a, "^([^/]+)/")
if not r1 then
r1 = a
end
if r1 == "idem" or r1 == "īdem" then -- REVISAR: parche para idem que internamente lo declina como si fuera "i"
insert(tpalabras, "ī")
else
insert(tpalabras, r1)
end
end
local palabras, separadores = separar_palabras(title, concat(tpalabras, "-"))
local L = #palabras
local M = 1
local declinfo
local titles = {}
local cats = {}
local genero
local nosg, nopl = true, true
for _,arg in ipairs(args) do
local formas = {}
for subarg in gsplit(arg, ";") do
local types = {}
local a, b = match(subarg, "^(.-)%.(.*)$")
assert(b, "error en especificaciones de palabra")
local c, d = match(b, "^(.-)%.(.*)$")
if d then
for spec in gsplit(d, "%.") do
spec = gsub(spec, "(.)%-", "%1_")
types[spec] = true
end
end
c = c or b
local r = split(a, "/")
local r1, r2, detected_subtypes = detect_noun_subtype(r[1], r[2], c, types)
for _, subtype in ipairs(detected_subtypes) do
if types["-" .. subtype] then
-- if a "cancel subtype" spec is given, remove the cancel spec
-- and don't apply the subtype
types["-" .. subtype] = nil
elseif (subtype == "M" or subtype == "F" or subtype == "N") and
(types.M or types.F or types.N) then
-- if gender already specified, don't create conflicting gender spec
elseif (subtype == "sg" or subtype == "pl" or subtype == "both") and
(types.sg or types.pl or types.both) then
-- if number restriction already specified, don't create conflicting
-- number restriction spec
else
types[subtype] = true
end
end
if not genero then
if types.M then
genero = "m"
end
if types.N then
genero = "n"
end
if types.F then
genero = "f"
end
end
local es_adj
if not r1 and genero then
local typ
r1, r2, typ, detected_subtypes = detect_adj_type_and_subtype(r[1], r[2], c, types)
if r1 then
c = typ
es_adj = true
end
end
assert(r1, "forma no reconocida: "..r[1])
local cb = es_adj and adj_decl[c] or noun_decl[c]
assert(cb, "Especifique el tipo de sustantivo correcto en el primer parámetro")
local data = {forms={}, types=types, pos="", subtitles="", notes="", categories=cats, title=titles, loc=types.loc, num=args.num}
cb(data, {r1, r2})
if es_adj then
local forms_ = {}
for form,arr in pairs(data.forms) do
local f1, f2 = form:match("^(.*)(_"..genero..")$")
if f1 then
forms_[f1] = arr
end
end
data.forms = forms_
end
if not types.sg then
nopl = false
end
if not types.pl then
nosg = false
end
if types.sg then
for key,_ in pairs(data.forms) do
if key:find("_pl") then
data.forms[key] = {}
end
end
end
if types.pl then
for key,_ in pairs(data.forms) do
if key:find("_sg") then
data.forms[key] = {}
end
end
end
merge_forms(formas, data.forms, noun_lb)
end
if not declinfo then
declinfo = formas
else
declinfo = combinar_copulativa(declinfo, formas, separadores[M])
M = M + 1
end
end
if declinfo["loc_sg"] and #declinfo["loc_sg"] == 0 then
declinfo["loc_sg"] = nil
end
if declinfo["loc_pl"] and #declinfo["loc_pl"] == 0 then
declinfo["loc_pl"] = nil
end
if nosg == false then
nosg = find(args["num"], "p")
end
if nopl == false then
nopl = find(args["num"], "s")
end
local forms = sobreescribir_formas(declinfo, args, false, {})
comprobar_defectivo(forms, {})
forms = desactivar_formas(forms,
function (form)
return (form:find("pl$") and nopl) or (form:find("sg$") and nosg)
end
)
local raiz_nom = f(forms["nom_sg"][1] or forms["nom_pl"][1] or "?")
local raiz_gen = f(forms["gen_sg"][1] or forms["gen_pl"][1] or "?")
forms = agregar_enlaces(forms, title, normalizar_enlace)
forms = formatear_formas(forms, noun_lb)
local t = {}
insert(t, {{""}, {"Singular"}, {"Plural"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Nominativo", header=true, color=COLOR_H}, forms["nom_sg"], forms["nom_pl"]})
insert(t, {{"Genitivo", header=true, color=COLOR_H}, forms["gen_sg"], forms["gen_pl"]})
insert(t, {{"Dativo", header=true, color=COLOR_H}, forms["dat_sg"], forms["dat_pl"]})
insert(t, {{"Acusativo", header=true, color=COLOR_H}, forms["acc_sg"], forms["acc_pl"]})
insert(t, {{"Ablativo", header=true, color=COLOR_H}, forms["abl_sg"], forms["abl_pl"]})
insert(t, {{"Vocativo", header=true, color=COLOR_H}, forms["voc_sg"], forms["voc_pl"]})
if (forms["loc_sg"] and forms["loc_sg"][1]) or (forms["loc_pl"] and forms["loc_pl"][1]) then
insert(t, {{"Locativo", header=true, color=COLOR_H}, forms["loc_sg"], forms["loc_pl"]})
end
insert(t, {{args["nota"] or "", colspan=3}})
return renderizar_tabla(
frame,
"'''Declinación de ''"..raiz_nom..", "..raiz_gen.."'''''  tipo: "..concat(titles, ", "),
t,
ns == 0 and cats or {}
)
end
local adj_lb = {
nom_sg_m = "m.",
nom_sg_n = "n.",
nom_sg_f = "f.",
nom_pl_m = "m.",
nom_pl_n = "n.",
nom_pl_f = "f.",
gen_sg_m = "m.",
gen_sg_n = "n.",
gen_sg_f = "f.",
gen_pl_m = "m.",
gen_pl_n = "n.",
gen_pl_f = "f.",
dat_sg_m = "m.",
dat_sg_n = "n.",
dat_sg_f = "f.",
dat_pl_m = "m.",
dat_pl_n = "n.",
dat_pl_f = "f.",
acc_sg_m = "m.",
acc_sg_n = "n.",
acc_sg_f = "f.",
acc_pl_m = "m.",
acc_pl_n = "n.",
acc_pl_f = "f.",
abl_sg_m = "m.",
abl_sg_n = "n.",
abl_sg_f = "f.",
abl_pl_m = "m.",
abl_pl_n = "n.",
abl_pl_f = "f.",
voc_sg_m = "m.",
voc_sg_n = "n.",
voc_sg_f = "f.",
voc_pl_m = "m.",
voc_pl_n = "n.",
voc_pl_f = "f.",
}
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] = {requerido=true},
["alt"] = {},
["num"] = {por_defecto = ""},
["núm"] = {alias_de="num"},
["gen"] = {por_defecto="mfn"},
["nota"] = {},
}
for form,_ in pairs(adj_lb) do
params[form] = {lista=true}
end
params["dat_pl"] = {lista=true}
params["abl_pl"] = {lista=true}
params["loc_pl"] = {lista=true}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
if args["dat_pl"][1] then
args["dat_pl_m"] = deep_copy(args["dat_pl"])
args["dat_pl_n"] = deep_copy(args["dat_pl"])
args["dat_pl_f"] = deep_copy(args["dat_pl"])
end
if args["abl_pl"][1] then
args["abl_pl_m"] = deep_copy(args["abl_pl"])
args["abl_pl_n"] = deep_copy(args["abl_pl"])
args["abl_pl_f"] = deep_copy(args["abl_pl"])
end
if args["loc_pl"][1] then
args["loc_pl_m"] = deep_copy(args["loc_pl"])
args["loc_pl_n"] = deep_copy(args["loc_pl"])
args["loc_pl_f"] = deep_copy(args["loc_pl"])
end
args["dat_pl"] = nil
args["abl_pl"] = nil
args["loc_pl"] = nil
assert(not find(title, " "), "locuciones no soportadas aún") -- REVISAR
local tpalabras = {}
for _,p in ipairs(args) do
p = match(p, "^(.-);") or p
local a, b = match(p, "^(.-)%.(.*)$")
assert(b, "error en especificaciones de palabra")
local r1 = match(a, "^([^/]+)/")
if not r1 then
r1 = a
end
if r1 == "idem" or r1 == "īdem" then -- REVISAR: parche para idem que internamente lo declina como si fuera "i"
insert(tpalabras, "ī")
else
insert(tpalabras, r1)
end
end
local palabras, separadores = separar_palabras(title, concat(tpalabras, "-"))
local L = #palabras
local M = 1
local declinfo
local titles = {}
local cats = {}
local nosg, nopl = true, true
for _,arg in ipairs(args) do
local formas = {}
for subarg in gsplit(arg, ";") do
local types = {}
local a, b = match(subarg, "^(.-)%.(.*)$")
a = a or subarg
b = b or "+"
local c, d = match(b, "^(.-)%.(.*)$")
if d then
for spec in gsplit(d, "%.") do
spec = gsub(spec, "(.)%-", "%1_")
types[spec] = true
end
end
c = c or b
local r = split(a, "/")
local r1, r2, typ, detected_subtypes = detect_adj_type_and_subtype(r[1], r[2], c, types)
for _, subtype in ipairs(detected_subtypes) do
if types["-" .. subtype] then
-- if a "cancel subtype" spec is given, remove the cancel spec
-- and don't apply the subtype
types["-" .. subtype] = nil
elseif (subtype == "M" or subtype == "F" or subtype == "N") and
(types.M or types.F or types.N) then
-- if gender already specified, don't create conflicting gender spec
elseif (subtype == "sg" or subtype == "pl" or subtype == "both") and
(types.sg or types.pl or types.both) then
-- if number restriction already specified, don't create conflicting
-- number restriction spec
else
types[subtype] = true
end
end
local cb = adj_decl[typ]
assert(cb, "Especifique el tipo de sustantivo correcto en el primer parámetro")
local data = {forms={}, types=types, pos="", subtitles="", notes="", categories=cats, title=titles, loc=types.loc, num=args.num}
cb(data, {r1, r2})
local formas_ = {} -- necesario crear otro arreglo para no modificar las claves durante la iteración
for form,arr in pairs(data.forms) do
local pref = match(form, "^(.*)_m$")
if pref and not data.forms[pref.."_f"] then
formas_[pref.."_f"] = deep_copy(arr)
end
if pref and not data.forms[pref.."_n"] then
formas_[pref.."_n"] = deep_copy(arr)
end
formas_[form] = arr
end
data.forms = formas_
if not types.sg then
nopl = false
end
if not types.pl then
nosg = false
end
if types.sg then
for key,_ in pairs(data.forms) do
if key:find("_pl") then
data.forms[key] = {}
end
end
end
if types.pl then
for key,_ in pairs(data.forms) do
if key:find("_sg") then
data.forms[key] = {}
end
end
end
merge_forms(formas, data.forms, adj_lb)
end
if not declinfo then
declinfo = formas
else
declinfo = combinar_copulativa(declinfo, formas, separadores[M])
M = M + 1
end
end
if nosg == false then
nosg = find(args["num"], "p")
end
if nopl == false then
nopl = find(args["num"], "s")
end
local m = find(args["gen"], "m")
local fem = find(args["gen"], "f")
local n = find(args["gen"], "n")
local forms = sobreescribir_formas(declinfo, args, false, {}, adj_lb)
comprobar_defectivo(forms)
forms = desactivar_formas(forms,
function (form)
return (form:find("pl") and nopl) or (form:find("sg") and nosg) or (form:find("m$") and not m) or (form:find("f$") and not fem) or (form:find("n$") and not n)
end
)
local raiz_m = f(forms["nom_sg_m"][1] or forms["nom_pl_m"][1] or "?")
local raiz_f = f(forms["nom_sg_f"][1] or forms["nom_pl_f"][1] or "?")
local raiz_n = f(forms["nom_sg_n"][1] or forms["nom_pl_n"][1] or "?")
forms = agregar_enlaces(forms, title, normalizar_enlace)
forms = formatear_formas(forms, adj_lb)
local t = {}
insert(t, {{"Singular", colspan=4}, header=true, color=COLOR_H})
insert(t, {{""}, {"Masculino"}, {"Femenino"}, {"Neutro"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Nominativo", header=true, color=COLOR_H}, forms["nom_sg_m"], forms["nom_sg_f"], forms["nom_sg_n"]})
insert(t, {{"Genitivo", header=true, color=COLOR_H}, forms["gen_sg_m"], forms["gen_sg_f"], forms["gen_sg_n"]})
insert(t, {{"Dativo", header=true, color=COLOR_H}, forms["dat_sg_m"], forms["dat_sg_f"], forms["dat_sg_n"]})
insert(t, {{"Acusativo", header=true, color=COLOR_H}, forms["acc_sg_m"], forms["acc_sg_f"], forms["acc_sg_n"]})
insert(t, {{"Ablativo", header=true, color=COLOR_H}, forms["abl_sg_m"], forms["abl_sg_f"], forms["abl_sg_n"]})
insert(t, {{"Vocativo", header=true, color=COLOR_H}, forms["voc_sg_m"], forms["voc_sg_f"], forms["voc_sg_n"]})
insert(t, {{"Plural", colspan=4, header=true, color=COLOR_H}})
insert(t, {{""}, {"Masculino"}, {"Femenino"}, {"Neutro"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Nominativo", header=true, color=COLOR_H}, forms["nom_pl_m"], forms["nom_pl_f"], forms["nom_pl_n"]})
insert(t, {{"Genitivo", header=true, color=COLOR_H}, forms["gen_pl_m"], forms["gen_pl_f"], forms["gen_pl_n"]})
insert(t, {{"Dativo", header=true, color=COLOR_H}, forms["dat_pl_m"], forms["dat_pl_f"], forms["dat_pl_n"]})
insert(t, {{"Acusativo", header=true, color=COLOR_H}, forms["acc_pl_m"], forms["acc_pl_f"], forms["acc_pl_n"]})
insert(t, {{"Ablativo", header=true, color=COLOR_H}, forms["abl_pl_m"], forms["abl_pl_f"], forms["abl_pl_n"]})
insert(t, {{"Vocativo", header=true, color=COLOR_H}, forms["voc_pl_m"], forms["voc_pl_f"], forms["voc_pl_n"]})
insert(t, {{args["nota"] or "", colspan=4}})
return renderizar_tabla(
frame,
"'''Declinación de ''"..raiz_m..", "..raiz_f..", "..raiz_n.."'''''  tipo: "..concat(titles, ", "),
t,
ns == 0 and cats or {}
)
end
local EGO, TU, IS, NOS, VOS, EI = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"ego", "tū", "is, ea, id", "nōs", "vōs", "eī, eae, ea"}
local PRONOMBRES_SUBJ = {"ut ego", "ut tū", "ut is, ut ea, ut id", "ut nōs", "ut vōs", "ut eī, ut eae, ut ea"}
local PRONOMBRES_IMP = {"―", "(tū)", "(is, ea, id)", "―", "(vōs)", "(eī, eae, ea)"}
local IMPERSONALES = {"", "", "(id)", "", "", ""}
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 IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
end
if find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local sufijos = {
["1"] = {
inf_act = {"āre","isse"},
inf_pas = {"ārī"},
part_act = {"āns","ūrus"},
part_pas = {"andus","us"},
ger = {"andī","andō","andum"},
sup = {"um","ū"},
ind_pres = {"ō","ās","at","āmus","ātis","ant"},
ind_imp = {"ābam","ābās","ābat","ābāmus","ābātis","ābant"},
ind_perf = {"ī","istī","it","imus","istis","ērunt",
nil,nil,nil,nil,nil,"ēre"},
ind_pluperf = {"eram","erās","erat","erāmus","erātis","erant"},
ind_fut = {"ābō","ābis","ābit","ābimus","ābitis","ābunt"},
ind_fut_perf = {"erō","eris","erit","erimus","eritis","erint"},
ind_fut_sig = {"ō","is","it","imus","itis","int"},
ind_pres_pas = {"or","āris","ātur","āmur","āminī","antur",
nil,"āre"},
ind_imp_pas = {"ābar","ābāris","ābātur","ābāmur","ābāminī","ābantur",
nil,"ābāre"},
ind_fut_pas = {"ābor","āberis","ābitur","ābimur","ābiminī","ābuntur",
nil,"ābere"},
subj_pres = {"em","ēs","et","ēmus","ētis","ent"},
subj_imp = {"ārem","ārēs","āret","ārēmus","ārētis","ārent"},
subj_perf = {"erim","erīs","erit","erīmus","erītis","erint"},
subj_pluperf = {"issem","issēs","isset","issēmus","issētis","issent"},
subj_aor_sig = {"im","īs","īt","īmus","ītis","int"},
subj_pres_pas = {"er","ēris","ētur","ēmur","ēminī","entur",
nil,"ēre"},
subj_imp_pas = {"ārer","ārēris","ārētur","ārēmur","ārēminī","ārentur",
nil,"ārēre"},
imper_pres = {nil,"ā",nil,nil,"āte",nil},
imper_fut = {nil,"ātō","ātō",nil,"ātōte","antō"},
imper_pres_pas = {nil,"āre",nil,nil,"āminī",nil},
imper_fut_pas = {nil,"ātor","ātor",nil,nil,"antor"},
},
["2"] = {
inf_act = {"ēre","isse"},
inf_pas = {"ērī"},
part_act = {"ēns","ūrus"},
part_pas = {"endus","us"},
ger = {"endī","endō","endum"},
sup = {"um","ū"},
ind_pres = {"eō","ēs","et","ēmus","ētis","ent"},
ind_imp = {"ēbam","ēbās","ēbat","ēbāmus","ēbātis","ēbant"},
ind_perf = {"ī","istī","it","imus","istis","ērunt",
nil,nil,nil,nil,nil,"ēre"},
ind_pluperf = {"eram","erās","erat","erāmus","erātis","erant"},
ind_fut = {"ēbō","ēbis","ēbit","ēbimus","ēbitis","ēbunt"},
ind_fut_perf = {"erō","eris","erit","erimus","eritis","erint"},
ind_fut_sig = {"ō","is","it","imus","itis","int"},
ind_pres_pas = {"eor","ēris","ētur","ēmur","ēminī","entur",
nil,"ēre"},
ind_imp_pas = {"ēbar","ēbāris","ēbātur","ēbāmur","ēbāminī","ēbantur",
nil,"ēbāre"},
ind_fut_pas = {"ēbor","ēberis","ēbitur","ēbimur","ēbiminī","ēbuntur",
nil,"ēbere"},
subj_pres = {"eam","eās","eat","eāmus","eātis","eant"},
subj_imp = {"ērem","ērēs","ēret","ērēmus","ērētis","ērent"},
subj_perf = {"erim","erīs","erit","erīmus","erītis","erint"},
subj_pluperf = {"issem","issēs","isset","issēmus","issētis","issent"},
subj_aor_sig = {"im","īs","īt","īmus","ītis","int"},
subj_pres_pas = {"ear","eāris","eātur","eāmur","eāminī","eantur",
nil,"eāre"},
subj_imp_pas = {"ērer","ērēris","ērētur","ērēmur","ērēminī","ērentur",
nil,"ērēre"},
imper_pres = {nil,"ē",nil,nil,"ēte",nil},
imper_fut = {nil,"ētō","ētō",nil,"ētōte","entō"},
imper_pres_pas = {nil,"ēre",nil,nil,"ēminī",nil},
imper_fut_pas = {nil,"ētor","ētor",nil,nil,"entor"},
},
["3"] = { -- 3 (comparar [[capio]] con [[lego]], las raíces con capi- y leg- pero hay que eliminar la doble ii)
inf_act = {"ere","isse"},
inf_pas = {"ī"},
part_act = {"ēns","ūrus"},
part_pas = {"endus","us"},
ger = {"endī","endō","endum"},
sup = {"um","ū"},
ind_pres = {"ō","is","it","imus","itis","unt"},
ind_imp = {"ēbam","ēbās","ēbat","ēbāmus","ēbātis","ēbant"},
ind_perf = {"ī","istī","it","imus","istis","ērunt",
nil,nil,nil,nil,nil,"ēre"},
ind_pluperf = {"eram","erās","erat","erāmus","erātis","erant"},
ind_fut = {"am","ēs","ēt","ēmus","ētis","ent"},
ind_fut_perf = {"erō","eris","erit","erimus","eritis","erint"},
ind_fut_sig = {"ō","is","it","imus","itis","int"},
ind_pres_pas = {"or","eris","itur","imur","iminī","untur",
nil,"ere"},
ind_imp_pas = {"ēbar","ēbāris","ēbātur","ēbāmur","ēbāminī","ēbantur",
nil,"ēbāre"},
ind_fut_pas = {"ar","ēris","ētur","ēmur","ēminī","entur",
nil,"ēre"},
subj_pres = {"am","ās","at","āmus","ātis","ant"},
subj_imp = {"erem","erēs","eret","erēmus","erētis","erent"},
subj_perf = {"erim","erīs","erit","erīmus","erītis","erint"},
subj_pluperf = {"issem","issēs","isset","issēmus","issētis","issent"},
subj_aor_sig = {"im","īs","īt","īmus","ītis","int"},
subj_pres_pas = {"ar","āris","ātur","āmur","āminī","antur",
nil,"āre"},
subj_imp_pas = {"erer","erēris","erētur","erēmur","erēminī","erentur",
nil,"erēre"},
imper_pres = {nil,"e",nil,nil,"ite",nil},
imper_fut = {nil,"itō","itō",nil,"itōte","untō"},
imper_pres_pas = {nil,"ere",nil,nil,"iminī",nil},
imper_fut_pas = {nil,"itor","itor",nil,nil,"untor"},
},
["3/4"] = {
inf_act = {"ere","isse","īre","isse"},
inf_pas = {"ī","īrī"},
part_act = {"ēns","iēns","ūrus"},
part_pas = {"endus","iendus","us"},
ger = {"endī","endō","endum","iendī","iendō","iendum"},
sup = {"um","ū"},
ind_pres = {"ō","is","it","imus","itis","unt",
"iō","īs",nil,"īmus","ītis","iunt"
},
ind_imp = {"ēbam","ēbās","ēbat","ēbāmus","ēbātis","ēbant",
"iēbam","iēbās","iēbat","iēbāmus","iēbātis","iēbant"
},
ind_perf = {"ī","istī","it","imus","istis","ērunt",
nil,nil,nil,nil,nil,"ēre"},
ind_pluperf = {"eram","erās","erat","erāmus","erātis","erant"},
ind_fut = {"am","ēs","ēt","ēmus","ētis","ent",
"iam","iēs","iet","iēmus","iētis","ient"
},
ind_fut_perf = {"erō","eris","erit","erimus","eritis","erint"},
ind_fut_sig = {"ō","is","it","imus","itis","int"},
ind_pres_pas = {"or","eris","itur","imur","iminī","untur",
"ior","ere","ītur","īmur","īminī","iuntur",
nil,"īris",nil,nil,nil,nil,
nil,"īre"
},
ind_imp_pas = {"ēbar","ēbāris","ēbātur","ēbāmur","ēbāminī","ēbantur",
"iēbar","ēbāre","iēbātur","iēbāmur","iēbāminī","iēbantur",
nil,"iēbāris",nil,nil,nil,nil,
nil,"iēbāre"
},
ind_fut_pas = {"ar","ēris","ētur","ēmur","ēminī","entur",
"iar","ēre","iētur","iēmur","iēminī","ientur",
nil,"iēris",nil,nil,nil,nil,
nil,"iēre"
},
subj_pres = {"am","ās","at","āmus","ātis","ant",
"iam","iās","iat","iāmus","iātis","iant",
},
subj_imp = {"erem","erēs","eret","erēmus","erētis","erent",
"īrem","īrēs","īret","īrēmus","īrētis","īrent"
},
subj_perf = {"erim","erīs","erit","erīmus","erītis","erint"},
subj_pluperf = {"issem","issēs","isset","issēmus","issētis","issent"},
subj_aor_sig = {"im","īs","īt","īmus","ītis","int"},
subj_pres_pas = {"ar","āris","ātur","āmur","āminī","antur",
"iar","āre","iātur","iāmur","iāminī","iantur",
nil,"iāris",nil,nil,nil,nil,
nil,"iāre"
},
subj_imp_pas = {"erer","erēris","erētur","erēmur","erēminī","erentur",
"īrer","erēre","īrētur","īrēmur","īrēminī","īrentur",
nil,"īrēris",nil,nil,nil,nil,
nil,"īrēre"
},
imper_pres = {nil,"e",nil,nil,"ite",nil,
nil,"ī",nil,nil,"īte",nil
},
imper_fut = {nil,"itō","itō",nil,"itōte","untō",
nil,"ītō","ītō",nil,"ītōte","iuntō"
},
imper_pres_pas = {nil,"ere",nil,nil,"iminī",nil,
nil,"īre",nil,nil,"īminī",nil
},
imper_fut_pas = {nil,"itor","itor",nil,nil,"untor",
nil,"ītor","ītor",nil,nil,"iuntor"
},
},
["4"] = {
inf_act = {"īre","isse"},
inf_pas = {"īrī"},
part_act = {"iēns","ūrus"},
part_pas = {"iendus","us"},
ger = {"iendī","iendō","iendum"},
sup = {"um","ū"},
ind_pres = {"iō","īs","it","īmus","ītis","iunt"},
ind_imp = {"iēbam","iēbās","iēbat","iēbāmus","iēbātis","iēbant"},
ind_perf = {"ī","istī","it","imus","istis","ērunt",
nil,nil,nil,nil,nil,"ēre"},
ind_pluperf = {"eram","erās","erat","erāmus","erātis","erant"},
ind_fut = {"iam","iēs","iet","iēmus","iētis","ient"},
ind_fut_perf = {"erō","eris","erit","erimus","eritis","erint"},
ind_fut_sig = {"ō","is","it","imus","itis","int"},
ind_pres_pas = {"ior","īris","ītur","īmur","īminī","iuntur",
nil,"īre"},
ind_imp_pas = {"iēbar","iēbāris","iēbātur","iēbāmur","iēbāminī","iēbantur",
nil,"iēbāre"},
ind_fut_pas = {"iar","iēris","iētur","iēmur","iēminī","ientur",
nil,"iēre"},
subj_pres = {"iam","iās","iat","iāmus","iātis","iant"},
subj_imp = {"īrem","īrēs","īret","īrēmus","īrētis","īrent"},
subj_perf = {"erim","erīs","erit","erīmus","erītis","erint"},
subj_pluperf = {"issem","issēs","isset","issēmus","issētis","issent"},
subj_aor_sig = {"im","īs","īt","īmus","ītis","int"},
subj_pres_pas = {"iar","iāris","iātur","iāmur","iāminī","iantur",
nil,"iāre"},
subj_imp_pas = {"īrer","īrēris","īrētur","īrēmur","īrēminī","īrentur",
nil,"īrēre"},
imper_pres = {nil,"ī",nil,nil,"īte",nil},
imper_fut = {nil,"ītō","ītō",nil,"ītōte","iuntō"},
imper_pres_pas = {nil,"īre",nil,nil,"īminī",nil},
imper_fut_pas = {nil,"ītor","ītor",nil,nil,"iuntor"},
}
}
local formas_no_personales = {
inf_act = true,
inf_pas = true,
part_act = true,
part_pas = true,
ger = true,
sup = true,
}
local formas_personales = {
ind_pres = true,
ind_imp = true,
ind_perf = true,
ind_pluperf = true,
ind_fut = true,
ind_fut_perf = true,
ind_fut_sig = true,
ind_pres_pas = true,
ind_imp_pas = true,
ind_fut_pas = true,
subj_pres = true,
subj_imp = true,
subj_perf = true,
subj_pluperf = true,
subj_aor_sig = true,
subj_pres_pas = true,
subj_imp_pas = true,
imper_pres = true,
imper_fut = true,
imper_pres_pas = true,
imper_fut_pas = true,
}
local formas = merge(formas_no_personales, formas_personales)
local verbos_irregulares = {
{"aiō", {"aiō", "aiiō", "aijō", "ajō"}, {
desactivar = {"inf_pas","part_pas","ger","sup","ind_pluperf","ind_fut","ind_fut_perf",
"ind_pres_pas","ind_imp_pas","ind_fut_pas","subj_perf","subj_pluperf","subj_pres_pas",
"subj_imp_pas","imper_fut","imper_pres_pas","imper_fut_pas"
},
conj = "3",
nucleopres = {"ai"},
nucleoperf = {"a"},
nucleosup = {},
nucleosigm = {},
inf_act = {"aiere"},
ind_pres = {nil,nil,nil,{}},
ind_perf = {{},nil,nil,{},{}},
subj_pres = {nil,nil,nil,{},{}},
subj_imp = {{},{},nil,{},{},{}},
imper_pres = {{},{"ai"},{},{},{},{}},
}},
{"cedo", {"cedo"}, {
desactivar = {"inf_act","inf_pas","part_act","part_pas","ger","sup","ind_pluperf","ind_pres","ind_imp","ind_perf",
"ind_fut","ind_fut_perf","ind_pres_pas","ind_imp_pas","ind_fut_pas","subj_pres","subj_imp","subj_perf",
"subj_pluperf","subj_pres_pas","subj_imp_pas","imper_fut","imper_pres_pas","imper_fut_pas"
},
conj = "3",
nucleopres = {},
nucleoperf = {},
nucleosup = {},
nucleosigm = {},
imper_pres = {nil,{"cedo"},nil,nil,{"cette","cedile"},nil},
}},
{"dīcō", {"dīcō"}, {
conj = "3",
nucleopres = {"dīc"},
nucleoperf = {"dīx"},
nucleosup = {"dict"},
nucleosigm = {"dīx"},
desactivar = {},
imper_pres = {nil, {"dīc", "dīce"}},
inf_pas = {"dīcī", "dīcier{L}"},
}},
{"dō", {"dō"}, {
conj = "1",
nucleopres = {"d"},
nucleoperf = {"ded"},
nucleosup = {"dat"},
nucleosigm = {},
desactivar = {},
inf_act = {"dare","dedisse"},
inf_pas = {"darī"},
ind_pres = {nil,nil,nil,{"damus"},{"datis"},nil},
ind_imp = {{"dabam"},{"dabās"},{"dabat"},{"dabāmus"},{"dabātis"},{"dabant"}},
ind_fut = {{"dabō"},{"dabis"},{"dabit"},{"dabimus"},{"dabitis"},{"dabunt"}},
ind_imp_pas = {{"dabar"},{"dabāris","dabāre"},{"dabātur"},{"dabāmur"},{"dabāminī"},{"dabantur"}},
ind_fut_pas = {{"dabor"},{"daberis","dabere"},{"dabitur"},{"dabimur"},{"dabiminī"},{"dabuntur"}},
subj_imp = {{"darem"},{"darēs"},{"daret"},{"darēmus"},{"darētis"},{"darent"}},
subj_imp_pas = {{"darer"},{"darēris","darēre"},{"darētur"},{"darēmur"},{"darēminī"},{"darentur"}},
imper_pres = {nil,nil,nil,nil,{"date"},nil},
imper_fut = {nil,{"datō"},{"datō"},nil,{"datōte"},{"dantō"}},
imper_pres_pas = {nil,{"dare"},nil,nil,{"daminī"},nil},
imper_fut_pas = {nil,{"dator"},{"dator"},nil,nil,{"dator"}},
}},
{"dūcō", {"dūcō"}, {
conj = "3",
nucleopres = {"dūc"},
nucleoperf = {"dūx"},
nucleosup = {"duct"},
nucleosigm = {},
desactivar = {},
imper_pres = {nil, {"dūc", "dūce"}},
}},
{"edō", {"edō", "ëdō"}, {
conj = "3",
nucleopres = {"ed"},
nucleoperf = {"ed"},
nucleosup = {""},
nucleosigm = {},
desactivar = {},
inf_act = {"edere","ēsse"},
part_act = {"edēns","ēsūrus","ēssūrus","ēstūrus"},
part_pas = {"edendus","edundus","ēsus","ēssus","ēstus"},
sup = {"ēsum","ēssum","ēstum","ēsū","ēssū","ēstū"},
ind_pres = {nil,{"edis","ēs"},{"edit","ēst"},nil,{"editis","ēstis"},nil},
ind_pres_pas = {nil,{"ederis","edere","ēssis","ēsse"},{"editur","ēstur"}},
subj_pres = {{"edam","edim"},{"edās","edīs"},{"edat","edit","ēst"},{"edāmus","edīmus"},{"edātis","edītis"},{"edant","edint"}},
subj_imp = {{"ederem","ēssem"},{"ederēs","ēssēs"},{"ederet","ēsset"},{"ederēmus","ēssēmus"},{"ederētis","ēssētis"},{"ederent","ēssent"}},
subj_imp_pas = {{"ederer","ēsser"},{"ederēris","ederēre","ēssēris","ēssēre"},{"ederetur","ēssetur"},{"ederēmur","ēssēmur"},{"ederēminī","ēssēminī"},{"ederentur","ēssentur"}},
imper_pres = {nil,{"ede","ēs"},nil,nil,{"edite","ēste"},nil},
imper_fut = {nil,{"editō","ēstō"},{"editō","ēstō"},nil,{"editōte","ēstōte"},{"eduntō"}},
imper_pres_pas = {nil,{"edere","ēsse"},nil,nil,{"ediminī"},nil},
imper_fut_pas = {nil,{"editor","ēstor"},{"editor","ēstor"},nil,nil,{"eduntor"}},
}},
{"eō", {"eō", "ëō"}, {
conj = "4",
nucleopres = {""},
nucleoperf = {""},
nucleosup = {""},
nucleosigm = {},
desactivar = {"imper_pres_pas"},
inf_act = {"īre","īsse","iisse","īvisse"},
inf_pas = {"īrī","īrier"},
part_act = {"iēns","itūrus"},
part_pas = {"eundum","itum"},
ger = {"eundī","eundō","eundum"},
sup = {"itum","itū"},
ind_pres = {{"eō"},{"īs"},{"it"},{"īmus"},{"ītis"},{"eunt"}},
ind_imp = {{"ībam"},{"ībās"},{"ībat"},{"ībāmus"},{"ībātis"},{"ībant"}},
ind_perf = {{"iī","īvī"},{"īstī","iistī","īvistī"},{"iit","īvit"},{"iimus","īvimus"},{"īstis","iistis","īvistis"},{"iērunt","iēre","īvērunt","īvēre"}},
ind_pluperf = {{"ieram","īveram"},{"ierās","īverās"},{"ierat","īverat"},{"ierāmus","īverāmus"},{"ierātis","īverātis"},{"ierant","īverant"}},
ind_fut = {{"ībō"},{"ībis"},{"ībit"},{"ībimus"},{"ībitis"},{"ībunt"}},
ind_fut_perf = {{"ierō","īverō"},{"ieris","īveris"},{"ierit","īverit"},{"ierimus","īverimus"},{"ieritis","īveritis"},{"ierint","īverint"}},
ind_fut_sig = {nil,nil,nil,nil,nil,nil},
ind_pres_pas = {{},{},{"ītur"},{},{},{}},
ind_imp_pas = {{},{},{"ībātur"},{},{},{}},
ind_fut_pas = {{},{},{"ībitur"},{},{},{}},
subj_pres = {{"eam"},{"eās"},{"eat"},{"eāmus"},{"eātis"},{"eant"}},
subj_imp = {{"īrem"},{"īrēs"},{"īret"},{"īrēmus"},{"īrētis"},{"īrent"}},
subj_perf = {{"ierim","īverim"},{"ierīs","īverīs"},{"ierit","īverit"},{"ierīmus","īverīmus"},{"ierītis","īverītis"},{"ierint","īverint"}},
subj_pluperf = {{"īssem","iissem","īvissem"},{"īssēs","iissēs","īvissēs"},{"īsset","iisset","īvisset"},{"īssēmus","iissēmus","īvissēmus"},{"īssētis","iissētis","īvissētis"},{"īssent","iissent","īvissent"}},
subj_aor_sig = {nil,nil,nil,nil,nil,nil},
subj_pres_pas = {{},{},{"eātur"},{},{},{}},
subj_imp_pas = {{},{},{"īrētur"},{},{},{}},
imper_pres = {nil,nil,nil,nil,nil,nil},
imper_fut = {nil,nil,nil,nil,nil,{"euntō"}},
imper_fut_pas = {nil,{},nil,nil,nil,{}},
}},
{"faciō", {"faciō"}, {
conj = "3",
nucleopres = {"faci"},
nucleoperf = {"fax"},
nucleosup = {"fact"},
nucleosigm = {"fax","faxs","facs"},
desactivar = {},
ind_pres_pas = {{"fīō"},{"fīs"},{"fit"},{"fīmus"},{"fītis"},{"fīunt"}},
ind_imp_pas = {{"fīēbam"},{"fīēbās"},{"fīēbat"},{"fīēbāmus"},{"fīēbātis"},{"fīēbant"}},
ind_fut_pas = {{"fīam"},{"fīēs"},{"fīet"},{"fīēmus"},{"fīētis"},{"fīent"}},
subj_pres_pas = {{"fīam"},{"fīās"},{"fīat"},{"fīāmus"},{"fīātis"},{"fīant"}},
subj_imp_pas = {{"fierem"},{"fierēs"},{"fieret"},{"fierēmus"},{"fierētis"},{"fierent"}},
imper_pres = {nil,{"fac","face"},nil,nil,nil,nil},
imper_pres_pas = {nil,{"fī"},nil,nil,{"fīte"},nil},
imper_fut_pas = {nil,{"fītō"},{"fītō"},nil,{"fītōte"},{"fīuntō"}},
}},
{"ferō", {"ferō"}, {
conj = "3",
nucleopres = {"fer"},
nucleoperf = {"tul"},
nucleosup = {"lāt"},
nucleosigm = {},
desactivar = {},
inf_pas = {"ferrī"},
ind_pres = {nil,{"fers"},{"fert"},nil,{"fertis"}},
ind_pres_pas = {nil,{"ferris","ferre"}},
subj_imp = {{"ferrem"},{"ferrēs"},{"ferret"},{"ferrēmus"},{"ferrētis"},{"ferrent"}},
subj_imp_pas = {{"ferrer"},{"ferrēris","ferrēre"},{"ferrētur"},{"ferrēmur"},{"ferrēminī"},{"ferrentur"}},
imper_pres = {nil,{"fer"},nil,nil,{"ferte"},nil},
imper_pres_pas = {nil,{"ferre"},nil,nil,nil,nil},
imper_fut = {nil,{"fertō"},{"fertō"},nil,{"fertōte"},{"feruntō"}},
imper_fut_pas = {nil,{"fertor"},{"fertor"},nil,nil,nil},
}},
{"fīō", {"fīō"}, {
conj = "3",
nucleopres = {"fī"},
nucleoperf = {},
nucleosup = {"fact"},
nucleosigm = {},
semidep = true,
desactivar = {},
ind_pres = {{"fīō"},{"fīs"},{"fit"},{"fīmus"},{"fītis"},{"fīunt"}},
imper_pres = {nil,{"fī"},nil,nil,{"fīte"},nil},
imper_fut = {nil,{"fītō"},{"fītō"},nil,{"fītōte"},{"feruntō"}},
}},
{"inquam", {"inquam"}, {
conj = "3",
nucleopres = {"inqui"},
nucleoperf = {},
nucleosup = {},
nucleosigm = {},
nopasivo = true,
desactivar = {"inf_act","inf_pas","part_pas","ger"},
}},
{"possum", {"possum"}, {
conj = "3",
nucleopres = {"pot"},
nucleoperf = {"pot"},
nucleosup = {},
nucleosigm = {},
pres = "possō",
desactivar = {"inf_pas","part_pas","ger","sup","ind_pres_pas","ind_imp_pas","ind_fut_pas",
"subj_pres_pas","subj_imp_pas","imper_pres","imper_fut","imper_pres_pas","imper_fut_pas"},
inf_act = {"posse","potesse{†}"},
part_act = {"potēns"},
ind_pres = {{"possum"},{"potes"},{"potest"},{"possumus"},{"potestis"},{"possunt"}},
ind_imp = {{"poteram"},{"poterās"},{"poterat"},{"poterāmus"},{"poterātis"},{"poterant"}},
ind_fut = {{"poterō"},{"poteris","potere"},{"poterit"},{"poterimus"},{"poteritis"},{"poterunt"}},
ind_perf = {{"potuī"},{"potuistī"},{"potuit"},{"potuimus"},{"potuistis"},{"potuērunt","potuēre"}},
ind_pluperf = {{"potueram"},{"potuerās"},{"potuerat"},{"potuerāmus"},{"potuerātis"},{"potuerant"}},
ind_fut_perf = {{"potuerō"},{"potueris"},{"potuerit"},{"potuerimus"},{"potueritis"},{"potuerunt"}},
subj_pres = {{"possem"},{"possēs"},{"possēt"},{"possēmus"},{"possētis"},{"possent"}},
subj_imp = {{"possim"},{"possīs"},{"possit"},{"possīmus"},{"possītis"},{"possint"}},
subj_perf = {{"potuerim"},{"potuerīs"},{"potuerit"},{"potuerīmus"},{"potuerītis"},{"potuerint"}},
subj_pluperf = {{"potuissem"},{"potuissēs"},{"potuisset"},{"potuissēmus"},{"potuissētis"},{"potuissent"}},
}},
{"sum", {"sum"}, {
conj = "3",
nucleopres = {"s"},
nucleoperf = {"fu"},
nucleosup = {},
nucleosigm = {},
pres = "sō",
desactivar = {"inf_pas","part_pas","ger","sup","ind_pres_pas","ind_imp_pas","ind_fut_pas",
"subj_pres_pas","subj_imp_pas","imper_pres_pas","imper_fut_pas"},
inf_act = {"esse"},
part_act = {"futūrus"},
ind_pres = {{"sum"},{"es"},{"est"},{"sumus"},{"estis"},{"sunt"}},
ind_imp = {{"eram"},{"erās"},{"erat"},{"erāmus"},{"erātis"},{"erant"}},
ind_fut = {{"erō"},{"eris","ere"},{"erit"},{"erimus"},{"eritis"},{"erunt"}},
subj_pres = {{"sim","siem","fuam{†}"},{"sīs","siēs","fuās{†}"},{"sit","siet","fuat{†}"},{"sīmus","siēmus","fuāmus{†}"},{"sītis","siētis","fuātis{†}"},{"sint","sient","fuant{†}"}},
subj_imp = {{"essem","forem"},{"essēs","forēs"},{"esset","foret"},{"essēmus","forēmus"},{"essētis","forētis"},{"essent","forent"}},
imper_pres = {nil,{"es"},nil,nil,{"este"},nil},
imper_fut = {nil,{"estō"},{"estō"},nil,{"estōte"},nil},
}},
{"mālō", {"mālō"}, {
conj = "3",
nucleopres = {"māl"},
nucleoperf = {"mālu"},
nucleosup = {},
nucleosigm = {},
desactivar = {"sup","ger","inf_pas","part_pas","ind_pres_pas","ind_imp_pas","ind_fut_pas","subj_pres_pas","subj_imp_pas",
"imper_pres","imper_fut","imper_pres_pas","imper_fut_pas"},
inf_act = {"mālle","māluisse"},
ind_pres = {{"mālō"},{"māvīs"},{"māvult"},{"mālumus"},{"māvultis"},{"mālunt"}},
subj_pres = {{"mālim"},{"mālīs"},{"mālit"},{"mālīmus"},{"mālītis"},{"mālint"}},
subj_imp = {{"māllem"},{"māllēs"},{"māllet"},{"māllēmus"},{"māllētis"},{"māllent"}},
}},
{"nōlō", {"nōlō"}, {
conj = "3",
nucleopres = {"nōl"},
nucleoperf = {"nōlu"},
nucleosup = {},
nucleosigm = {},
desactivar = {"sup","ger","inf_pas","part_pas","ind_pres_pas","ind_imp_pas","ind_fut_pas","subj_pres_pas","subj_imp_pas",
"imper_pres","imper_fut","imper_pres_pas","imper_fut_pas"},
inf_act = {"nōlle","nōluisse"},
ind_pres = {{"nōlō"},{"nōn vīs","nevīs{†}"},{"nōn vult","nōn volt","nevolt{†}"},{"nōlumus"},{"nōn vultis","nōn voltis","nōltis{†}"},{"nōlunt"}},
subj_pres = {{"nōlim"},{"nōlīs"},{"nōlit"},{"nōlīmus"},{"nōlītis"},{"nōlint"}},
subj_imp = {{"nōllem"},{"nōllēs"},{"nōllet"},{"nōllēmus"},{"nōllētis"},{"nōllent"}},
}},
{"volō", {"volō"}, {
conj = "3",
nucleopres = {"vol"},
nucleoperf = {"volu"},
nucleosup = {"volit"},
nucleosigm = {},
desactivar = {"sup","ger","inf_pas","part_pas","ind_pres_pas","ind_imp_pas","ind_fut_pas","subj_pres_pas","subj_imp_pas",
"imper_pres","imper_fut","imper_pres_pas","imper_fut_pas"},
inf_act = {"velle","voluisse"},
ind_pres = {{"volō"},{"vīs"},{"vult","volt{†}"},{"volumus"},{"vultis","voltis{†}"},{"volunt"}},
subj_pres = {{"velim","volim{†}"},{"velīs","volīs{†}"},{"velit","volit{†}"},{"velīmus","volīmus{†}"},{"velītis","volītis{†}"},{"velint","volint{†}"}},
subj_imp = {{"vellem"},{"vellēs"},{"vellet"},{"vellēmus"},{"vellētis"},{"vellent"}},
}},
}
local function combinar_prefijo_nucleosufijo(prefijo, nucleosufijo)
return prefijo..nucleosufijo
end
local function combinar_nucleo_sufijo(nucleo, sufijo, agregar_i)
if agregar_i and (not find(sufijo, "^[iī]")) and (sufijo ~= "e") and (not find(sufijo, "^er")) then
return nucleo.."~i~"..sufijo
end
return nucleo..sufijo
end
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijos_ = sufijos[conjinfo.conj][forma]
local nucleos
local prefijo
if forma == "sup" then
nucleos = conjinfo.nucleosup
prefijo = conjinfo.prefijosup or conjinfo.prefijo
elseif find(forma, "sig") then
nucleos = conjinfo.nucleosigm
prefijo = conjinfo.prefijosigm or conjinfo.prefijo
elseif find(forma, "perf") then
nucleos = conjinfo.nucleoperf
prefijo = conjinfo.prefijoperf or conjinfo.prefijo
else
nucleos = conjinfo.nucleopres
prefijo = conjinfo.prefijo
end
if formas_no_personales[forma] then
if conjinfo[forma][1] then
if nucleos and #nucleos > 0 then
for _, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleosufijo(prefijo, fm).."#")
end
end
else
for _, sufijo in ipairs(sufijos_) do
local nucleos_ = nucleos
if forma == "inf_act" and sufijo == "isse" then
nucleos_ = conjinfo.nucleoperf
elseif forma == "part_act" and sufijo == "ūrus" then
nucleos_ = conjinfo.nucleosup
elseif forma == "part_pas" and sufijo == "us" then
nucleos_ = conjinfo.nucleosup
end
local agregar_i = conjinfo.I and nucleos_ == conjinfo.nucleopres
for _,nucleo in ipairs(nucleos_) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleosufijo(prefijo, combinar_nucleo_sufijo(nucleo, sufijo, agregar_i)))
end
end
end
return
end
for i = EGO, EI do
local p = tostr[i]
if conjinfo[forma][i] then
if nucleos and #nucleos > 0 then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleosufijo(prefijo, fm).."#")
end
end
else
local k = i
while sufijos_[k] do
local agregar_i = conjinfo.I and nucleos == conjinfo.nucleopres
for j, n in ipairs(nucleos) do
local x = combinar_prefijo_nucleosufijo(prefijo, combinar_nucleo_sufijo(n, sufijos_[k], agregar_i))
if conjinfo.always_sync_perf and (forma == "ind_perf" or forma == "ind_pluperf" or forma == "ind_fut_perf" or forma == "subj_perf" or forma == "subj_pluperf") then
x = x:gsub("īvī", "iī")
x = x:gsub("īvi", "ī")
x = x:gsub("īve", "ī")
x = x:gsub("īvē", "ē")
end
insert_if_not(conjugado[forma..p], x)
end
k = k + 6
end
end
end
end
local function get_subtype_by_ending(pres, conjinfo, specs)
for _, spec in ipairs(specs) do
local base = extract_base(pres, spec[1])
if base then
for _,s in ipairs(spec[2]) do
if conjinfo[s] == nil then
conjinfo[s] = true
end
end
return base
end
end
error("Unrecognized ending for conjugation " .. conjinfo["conj"])
end
local function detect_v_type_and_subtypes(conjinfo)
local pres = conjinfo["v"]
local conj_arg = conjinfo["conj"]
pres = toNFC(pres)
local base_conj_arg, auto_perf_supine = conj_arg:match("^([124]/?4?)(%+%+?)$")
if base_conj_arg then
if auto_perf_supine == "++" and base_conj_arg ~= "4" then
error("Conjugation types 1++ and 2++ not allowed")
end
conj_arg = base_conj_arg
end
conjinfo.conj = conj_arg
if conj_arg == "1" then
local base = get_subtype_by_ending(pres, conjinfo, {
{"ō", {}},
{"or", {"dep"}},
{"at", {"impers"}},
{"ātur", {"dep", "impers"}},
{"ī", {"nopres"}},
{"it", {"nopres", "impers"}},
})
if not conjinfo["nucleopres"][1] then
conjinfo["nucleopres"][1] = base
end
if auto_perf_supine then
if not conjinfo["nucleoperf"][1] then
conjinfo["nucleoperf"][1] = base .. "āv"
end
if not conjinfo["nucleosup"][1] then
conjinfo["nucleosup"][1] = base .. "āt"
end
end
if conjinfo.sigm then
if not conjinfo["nucleosigm"][1] then
conjinfo["nucleosigm"][1] = base .. "āss"
end
end
elseif conj_arg == "2" then
local base = get_subtype_by_ending(pres, conjinfo, {
{"eō", {}},
{"eor", {"dep"}},
{"et", {"impers"}},
{"ētur", {"dep", "impers"}},
{"ī", {"nopres"}},
{"it", {"nopres", "impers"}},
})
if not conjinfo["nucleopres"][1] then
conjinfo["nucleopres"][1] = base
end
if auto_perf_supine then
if not conjinfo["nucleoperf"][1] then
conjinfo["nucleoperf"][1] = base .. "u"
end
if not conjinfo["nucleosup"][1] then
conjinfo["nucleosup"][1] = base .. "it"
end
end
if conjinfo.sigm then
if not conjinfo["nucleosigm"][1] then
conjinfo["nucleosigm"][1] = base .. "ēss"
end
end
elseif conj_arg == "3" then
local base
if conjinfo.I == false then -- si explícitamente se indicó que no es del tipo -io, hay que excluir sufijos
base = get_subtype_by_ending(pres, conjinfo, {
{"ō", {}},
{"or", {"dep"}},
{"it", {"impers"}},
{"itur", {"dep", "impers"}},
{"ī", {"nopres"}},
})
else
base = get_subtype_by_ending(pres, conjinfo, {
{"iō", {"I"}},
{"ior", {"dep", "I"}},
{"ō", {}},
{"or", {"dep"}},
{"it", {"impers"}},
{"itur", {"dep", "impers"}},
{"ī", {"nopres"}},
})
end
if not conjinfo["nucleopres"][1] then
conjinfo["nucleopres"][1] = base
end
if not conjinfo["nucleoperf"][1] and conjinfo["nopres"] then
conjinfo["nucleoperf"][1] = base
end
assert(conjinfo["nucleoperf"][1], "especifique todos los núcleos para verbos de la tercera conjugación")
assert(conjinfo["nucleosup"][1], "especifique todos los núcleos para verbos de la tercera conjugación")
if conjinfo.sigm then
if not conjinfo["nucleosigm"][1] then
conjinfo["nucleosigm"][1] = base .. "ēss"
end
end
elseif conj_arg == "3/4" then
local base
base = get_subtype_by_ending(pres, conjinfo, {
{"iō", {"I"}},
{"ior", {"dep", "I"}},
})
if not conjinfo["nucleopres"][1] then
conjinfo["nucleopres"][1] = base
end
if not conjinfo["nucleoperf"][1] and conjinfo["nopres"] then
conjinfo["nucleoperf"][1] = base
end
if not conjinfo["nucleoperf"][1] and auto_perf_supine == "++" then
conjinfo["nucleoperf"][1] = base .. "īv"
conjinfo["nucleoperf"][2] = base .. "i"
end
if not conjinfo["nucleoperf"][1] and auto_perf_supine == "+" then
conjinfo["nucleoperf"][1] = base .. "īv"
end
if not conjinfo["nucleosup"][1] and auto_perf_supine then
conjinfo["nucleosup"][1] = base .. "īt"
end
if conjinfo.sigm then
if not conjinfo["nucleosigm"][1] then
conjinfo["nucleosigm"][1] = base .. "īss"
end
end
elseif conj_arg == "4" then
local base = get_subtype_by_ending(pres, conjinfo, {
{"iō", {}},
{"ior", {"dep"}},
{"it", {"impers"}},
{"ītur", {"dep", "impers"}},
{"ī", {"nopres"}},
})
if not conjinfo["nucleopres"][1] then
conjinfo["nucleopres"][1] = base
end
if not conjinfo["nucleoperf"][1] and conjinfo["nopres"] then
conjinfo["nucleoperf"][1] = base
end
if not conjinfo["nucleoperf"][1] and auto_perf_supine == "++" then
conjinfo["nucleoperf"][1] = base .. "īv"
conjinfo["nucleoperf"][2] = base .. "i"
end
if not conjinfo["nucleoperf"][1] and auto_perf_supine == "+" then
conjinfo["nucleoperf"][1] = base .. "īv"
end
if not conjinfo["nucleosup"][1] and auto_perf_supine then
conjinfo["nucleosup"][1] = base .. "īt"
end
if conjinfo.sigm then
if not conjinfo["nucleosigm"][1] then
conjinfo["nucleosigm"][1] = base .. "īss"
end
end
elseif conj_arg == "irreg" then
for _,p in ipairs(verbos_irregulares) do
for _,rx in ipairs(p[2]) do
local pref, verb = match(conjinfo.v, "^(.*)("..rx..")$")
if verb then
conjinfo.v = verb
conjinfo.prefijo = pref
if conjinfo.nucleoperf[1] and conjinfo.nucleoperf[1] ~= "-" then -- [[ecfero]]
conjinfo.prefijoperf = conjinfo.nucleoperf[1]
conjinfo.nucleoperf = {}
end
if conjinfo.nucleosup[1] and conjinfo.nucleosup[1] ~= "-" then
conjinfo.prefijosup = conjinfo.nucleosup[1]
conjinfo.nucleosup = {}
end
if conjinfo.nucleosigm[1] and conjinfo.nucleosigm[1] ~= "-" then
conjinfo.prefijosigm = conjinfo.nucleosigm[1]
conjinfo.nucleosigm = {}
end
conjinfo.irreg = true
conjinfo.conj = p[3].conj
for k,val in pairs(p[3]) do
if not conjinfo[k] or (type(conjinfo[k]) == "table" and not conjinfo[k][1]) then
conjinfo[k] = deep_copy(val)
end
end
return conjinfo
end
end
end
error("Unrecognized conjugation '" .. conj_arg .. "'")
else
error("Unrecognized conjugation '" .. conj_arg .. "'")
end
return conjinfo
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 = "conj"},
[2] = {alias_de = "pres"},
[3] = {alias_de = "nucleoperf"},
[4] = {alias_de = "nucleosup"},
[5] = {alias_de = "nucleosigm"},
["impers"] = {}, -- pas para formas pasivas solamente
["impersonal"] = {alias_de = "impers"},
["dep"] = {tipo="bool"},
["depon"] = {alias_de="dep"},
["deponente"] = {alias_de="dep"},
["semidep"] = {tipo="bool"},
["semidepon"] = {alias_de="semidep"},
["semideponente"] = {alias_de="semidep"},
["sigm"] = {tipo="bool"},
["nopasivo"] = {tipo="bool"},
["soloperf"] = {tipo="bool"},
["I"] = {tipo="bool"},
["p3inf"] = {tipo="bool"}, -- sin uso
["poet_sync_perf"] = {tipo="bool"}, -- sin uso
["always_sync_perf"] = {tipo="bool"}, -- solo en [[saevio]]
["conj"] = {requerido=true},
["pres"] = {requerido=true},
["nucleopres"] = {lista = true},
["nucleoperf"] = {lista = true},
["nucleosup"] = {lista = true},
["nucleosigm"] = {lista = true},
["núcleopres"] = {alias_de="nucleopres"},
["núcleoperf"] = {alias_de="nucleoperf"},
["núcleosup"] = {alias_de="nucleosup"},
["paradigma"] = {lista = true},
["desactivarnucleos"] = {tipo="bool", por_defecto=true}, -- para [[-o]]
["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")
assert(not (args["dep"] and args["semidep"]), "un verbo no puede ser deponente y semideponente a la vez")
local conjinfo = {
conj = args.conj,
prefijo="",
v=args.pres,
desactivar = {},
dep=args.dep,
semidep=args.semidep,
sigm=args.sigm,
impers=args.impers,
nopasivo=args.nopasivo,
soloperf=args.soloperf,
I=args.I,
p3inf=args.p3inf,
poet_sync_perf=args.poet_sync_perf, -- sin uso
always_sync_perf=args.always_sync_perf,
nucleopres = deep_copy(args.nucleopres),
nucleoperf = deep_copy(args.nucleoperf),
nucleosup = deep_copy(args.nucleosup),
nucleosigm = deep_copy(args.nucleosigm)
}
conjinfo = detect_v_type_and_subtypes(conjinfo)
conjinfo.conj = conjinfo.conj
if conjinfo.impers == true then
conjinfo.impers = "3"
end
-- no puede ir conjinfo acá abajo porque si es un sufijo va a quedar "-" en la raíz, lo que anularía todas las formas conjugadas, tiene que venir directo de args
if args.desactivarnucleos then
if args.nucleopres[1] == "-" then
conjinfo.nucleopres = {}
end
if args.nucleoperf[1] == "-" then
conjinfo.nucleoperf = {}
end
if args.nucleosup[1] == "-" then
conjinfo.nucleosup = {}
end
if args.nucleosigm[1] == "-" then
conjinfo.nucleosigm = {}
end
end
local es_irregular = conjinfo.irreg
for _,d in ipairs(conjinfo.desactivar) do
if formas_no_personales[d] then
args[d] = {"no"}
else
args[d.."2"] = {"no"}
end
end
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
local resultante = sobreescribir_formas(conjugado, args)
local mostrar_fut_sig = #resultante["ind_fut_sig1"] > 0
local mostrar_aor_sig = #resultante["subj_aor_sig1"] > 0
local defectivo = comprobar_defectivo(resultante, {"^imper", "_sig"}, tostr)
local defect2
resultante, defect2 = desactivar_formas(resultante,
function (form)
return (conjinfo.nopasivo and form:find("_pas")) or (conjinfo.soloperf and not form:find("perf")) or (conjinfo.impers == "pas" and form:find("_pas[^3]")) or (conjinfo.impers == "pas3" and form:find("_pas[^3]")) or (conjinfo.impers == "pas36" and form:find("_pas[^36]"))
end
)
if defect2 then
defectivo = true
end
-- por ahora innecesario
-- 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 tit_pres = f(resultante["ind_pres1"][1] or "―")
local tit_inf = f(resultante["inf_act"][1] or "―")
local tit_perf = f(resultante["ind_perf1"][1] or "―")
local tit_sup = f(resultante["sup"][1] or "―")
resultante = agregar_enlaces(resultante, tit, normalizar_enlace)
local es_impersonal = conjinfo.impers
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, es_impersonal)
end)
local impers = conjinfo.impers
local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_imper, mostrar_imper
if impers == "3" then
fila_pronombres_ind = {"", "(id)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_subj = {"", "(quod id)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(id)", color=COLOR_IMPER, header=true, class="pc"}
cs = 2
elseif impers == "36" then
error("no soportado actualmente")
cs = 3
else
fila_pronombres_ind = {"", PRONOMBRES[1], PRONOMBRES[2], PRONOMBRES[3], PRONOMBRES[4], PRONOMBRES[5], PRONOMBRES[6], color=COLOR_IND, header=true, class="pc"}
fila_pronombres_subj = {"", PRONOMBRES_SUBJ[1], PRONOMBRES_SUBJ[2], PRONOMBRES_SUBJ[3], PRONOMBRES_SUBJ[4], PRONOMBRES_SUBJ[5], PRONOMBRES_SUBJ[6], color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", PRONOMBRES_IMP[1], PRONOMBRES_IMP[2], PRONOMBRES_IMP[3], PRONOMBRES_IMP[4], PRONOMBRES_IMP[5], PRONOMBRES_IMP[6], color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = cs -- 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
insert(t, {{"Infinitivo activo", header=true, color=COLOR_NP}, resultante.inf_act})
insert(t, {{"Infinitivo pasivo", header=true, color=COLOR_NP}, resultante.inf_pas})
insert(t, {{"Participio activo", header=true, color=COLOR_NP}, resultante.part_act})
insert(t, {{"Participio pasivo", header=true, color=COLOR_NP}, resultante.part_pas})
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger})
insert(t, {{"Supino", header=true, color=COLOR_NP}, resultante.sup})
else
resultante.inf_act.colspan = cs1-1
resultante.inf_pas.colspan = cs1-1
resultante.part_act.colspan = cs1-1
resultante.part_pas.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.sup.colspan = cs1-1
if not conjinfo.dep then
insert(t, {{"Infinitivo activo", header=true, color=COLOR_NP}, resultante.inf_act})
end
if not conjinfo.semidep then
insert(t, {{"Infinitivo pasivo", header=true, color=COLOR_NP}, resultante.inf_pas})
end
if not conjinfo.dep then
insert(t, {{"Participio activo", header=true, color=COLOR_NP}, resultante.part_act})
end
if not conjinfo.semidep then
insert(t, {{"Participio pasivo", header=true, color=COLOR_NP}, resultante.part_pas})
end
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger})
insert(t, {{"Supino", header=true, color=COLOR_NP}, resultante.sup})
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)
if not conjinfo.dep then
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, {{"Futuro", color=COLOR_IND, header=true}, ic("ind_fut")})
end
if not conjinfo.dep and not conjinfo.semidep then
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, {{"Futuro perfecto", color=COLOR_IND, header=true}, ic("ind_fut_perf")})
end
if mostrar_fut_sig then
insert(t, {{f("Futuro sigmático{†}"), color=COLOR_IND, header=true}, ic("ind_fut_sig")})
end
if not conjinfo.semidep then
insert(t, {{"Presente pasivo", color=COLOR_IND, header=true}, ic("ind_pres_pas")})
insert(t, {{"Pretérito imperfecto pasivo", color=COLOR_IND, header=true}, ic("ind_imp_pas")})
insert(t, {{"Futuro pasivo", color=COLOR_IND, header=true}, ic("ind_fut_pas")})
end
insert(t, {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true})
insert(t, fila_pronombres_subj)
if not conjinfo.dep then
insert(t, {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")})
insert(t, {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")})
end
if not conjinfo.dep and not conjinfo.semidep then
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")})
end
if mostrar_aor_sig then
insert(t, {{f("Aorista sigmático{†}"), color=COLOR_SUBJ, header=true}, ic("subj_aor_sig")})
end
if not conjinfo.semidep then
insert(t, {{"Presente pasivo", color=COLOR_SUBJ, header=true}, ic("subj_pres_pas")})
insert(t, {{"Pretérito imperfecto pasivo", color=COLOR_SUBJ, header=true}, ic("subj_imp_pas")})
end
insert(t, {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true})
insert(t, fila_pronombres_imper)
if mostrar_imper then
if not conjinfo.dep then
insert(t, {{"Presente", color=COLOR_IMPER, header=true}, ic("imper_pres")})
insert(t, {{"Futuro", color=COLOR_IMPER, header=true}, ic("imper_fut")})
end
if not conjinfo.semidep then
insert(t, {{"Presente pasivo", color=COLOR_IMPER, header=true}, ic("imper_pres_pas")})
insert(t, {{"Futuro pasivo", color=COLOR_IMPER, header=true}, ic("imper_fut_pas")})
end
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, ~■~ cambio ortográfico, #■# irregularidad"), 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
if conjinfo.impers == "pas" or conjinfo.imeprs == "pas3" then
args["nota"] = args["nota"].." NOTA: impersonal para las formas pasivas"
end
if conjinfo.impers == "pas36" then
args["nota"] = args["nota"].." NOTA: formas pasivas terciopersonales (solamente tercera persona singular y plural)"
end
if conjinfo.soloperf then
args["nota"] = args["nota"].. " NOTA: solo se emplean las formas del perfecto y pluscuamperfecto con valor de presente, imperfecto o futuro"
end
if conjinfo.nopasivo then
args["nota"] = args["nota"].. " NOTA: solo se emplean las formas activas"
end
insert(t, {{args["nota"] and args["nota"] or "", colspan=cs}})
local cats = {}
local subtits = {}
local conj_str
if conjinfo.conj == "1" then
conj_str = "primera conjugación"
elseif conjinfo.conj == "2" then
conj_str = "segunda conjugación"
elseif conjinfo.conj == "3" then
conj_str = "tercera conjugación"
elseif conjinfo.conj == "3/4" then
conj_str = "tercera/cuarta conjugación"
else
conj_str = "cuarta conjugación"
end
insert(cats, "LA:Verbos de la "..conj_str)
insert(subtits, conj_str)
impers = impers or ""
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(subtits, "impersonal")
insert(cats, "LA:Verbos impersonales")
end
if defectivo then
insert(subtits, "defectivo")
insert(cats, "LA:Verbos defectivos")
end
if conjinfo.dep then
insert(subtits, "deponente")
insert(cats, "LA:Verbos deponentes")
end
if conjinfo.semidep then
insert(subtits, "semideponente")
insert(cats, "LA:Verbos semideponentes")
end
if es_irregular then
insert(subtits, "irregular")
insert(cats, "LA:Verbos irregulares")
else
insert(subtits, "regular")
insert(cats, "LA:Verbos regulares")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit_pres..", "..tit_inf..", "..tit_perf..", "..tit_sup.."'''''  ("..concat(subtits, ", ")..")",
t,
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 = {
["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 head = args[1]
local modo = args[2]
local enc
local cats = {}
local cat_pref = "LA:Adverbios"
if modo == "-" then
enc = "sin comparativo ni superlativo"
insert(cats, cat_pref.." incomparables")
return renderizar_encabezado(
frame,
head,
enc,
args["n"],
{},
ns == 0 and cats or {},
normalizar_enlace
)
end
local flex = {comp={},sup={}}
local stem
for _, suff in ipairs{"iter", "nter", "ter", "er", "iē", "ē", "rā", "im", "ō"} do
stem = match(head, "^(.*)" .. suff .. "$")
if stem ~= nil then
local comp_suff, sup_suff = "ius", "issimē"
if suff == "nter" then
stem = stem .. "nt"
end
if suff == "rā" then
comp_suff = "er" .. comp_suff
sup_suff = "imē"
end
insert(flex.comp, stem .. comp_suff)
insert(flex.sup, stem .. sup_suff)
break
end
end
if not stem and not args.comp[1] and not args.sup[1] then
error("Unrecognized adverb type, recognized types are “-ē”, “-er”, “-ter”, “-iter”, “-im”, or “-ō”, “-ra” or specify irregular forms or “-” if incomparable.")
end
local formas, irr = sobreescribir_formas(flex, args)
if args["comp"][1] == "no" then
enc = "sin comparativo"
insert(cats, cat_pref.." sin comparativo")
return renderizar_encabezado(
frame,
head,
enc,
args["n"],
{{"superlativo", formas.sup, args["supnota"]}},
ns == 0 and cats or {},
normalizar_enlace
)
elseif args["sup"][1] == "no" then
enc = "sin superlativo"
insert(cats, cat_pref.." sin superlativo")
return renderizar_encabezado(
frame,
head,
enc,
args["n"],
{{"comparativo", formas.comp, args["compnota"]}},
ns == 0 and cats or {},
normalizar_enlace
)
end
if irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
end
return renderizar_encabezado(
frame,
head,
enc,
args["n"],
{{"comparativo", formas.comp, args["compnota"]},
{"superlativo", formas.sup, args["supnota"]}},
ns == 0 and cats or {},
normalizar_enlace
)
end
return export
hioxv6g9i4lr3j8beclvqrxm4i83i85
6110113
6110110
2026-04-27T18:14:38Z
Tmagc
158167
6110113
Scribunto
text/plain
-- FLEXIÓN DEL LATÍN
-- Adaptado desde en.wikt por 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_str_avanzado = require("Módulo:string/avanzado")
local toNFD = m_str_avanzado.toNFD
local toNFC = m_str_avanzado.toNFC
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_tabla = m_flex.renderizar_tabla
local renderizar_encabezado = m_flex.renderizar_encabezado
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 MACRON = u(0x304)
local BREVE = u(0x306)
local DIAER = u(0x308)
local DBREVE = u(0x361)
local ACCENT = "[" .. MACRON .. BREVE .. DIAER .. DBREVE .. "]"
local VOWEL = "[aæeioœuyAÆEIOŒUY]"
local cons_to_vowel = {
["j"] = "i", ["J"] = "I",
["v"] = "u", ["V"] = "U",
}
local function normalizar_enlace(x)
x = toNFD(x)
x = gsub(x, ACCENT, "")
return toNFC(x)
end
local function join(a, b)
a, b = toNFD(a), toNFD(b)
-- If the first part ends in "j" or "v", convert it to "i" or "u" unless
-- the second part begins with a vowel.
if not match(b, "^" .. VOWEL) then
a = gsub(a, "[jvJV]$", cons_to_vowel)
end
return toNFC(a..b)
end
local function add_form(decl, slot, stem, suf)
if type(slot) == "string" then
slot = {slot}
end
for _,slt in ipairs(slot) do
if type(decl[slt]) == "nil" or decl[slt] == "" then
decl[slt] = {}
elseif type(decl[slt]) == "string" then
decl[slt] = {decl[slt]}
end
insert_if_not(decl[slt], join(stem, suf))
end
end
local function remove_forms(decl, forms)
for form,_ in pairs(decl) do
for _,rx in ipairs(forms) do
if form:find(rx) then
forms[form] = {}
break
end
end
end
end
local function merge_forms(forms, forms2, keys)
keys = keys or forms2
for key,arr in pairs(keys) do
if not forms[key] then
forms[key] = {}
end
if type(forms2[key]) == "string" then
insert_if_not(forms[key], forms2[key])
elseif type(forms2[key]) == "table" then
for _,a in ipairs(forms2[key]) do
insert_if_not(forms[key], a)
end
end
end
end
local noun_decl = {}
noun_decl["0"] = function(data, args)
local forms = data.forms
local stem = args[1]
insert_if_not(data.title, "indeclinable")
insert_if_not(data.categories, "LA:Sustantivos indeclinables")
forms["nom_sg"] = stem
forms["gen_sg"] = stem
forms["dat_sg"] = stem
forms["acc_sg"] = stem
forms["abl_sg"] = stem
forms["voc_sg"] = stem
forms["nom_pl"] = stem
forms["gen_pl"] = stem
forms["dat_pl"] = stem
forms["acc_pl"] = stem
forms["abl_pl"] = stem
forms["voc_pl"] = stem
-- with locative
if data.loc then
forms["loc_sg"] = stem
forms["loc_pl"] = stem
end
end
local function alt_gen_pl_in_um(stem, forms, types, subtitles, i_stem)
if types.genplum then
add_form(forms, "gen_pl", stem, (i_stem and "i" or "") .. "um")
elseif types.not_genplum then
-- FIXME: not a contraction.
-- insert_if_not(subtitles, "uncontracted genitive plural")
end
end
noun_decl["1"] = function(data, args)
local forms, types, loc, subtitles = data.forms, data.types, data.loc, data.subtitles
local stem = args[1]
-- normal 1st
local nom_sg = "a"
local gen_loc_sg = "ae"
local dat_sg = "ae"
local acc_sg = "am"
local abl_sg = "ā"
local voc_sg = "a"
local nom_voc_pl = "ae"
local gen_pl = "ārum"
local dat_abl_loc_pl = "īs"
local acc_pl = "ās"
insert_if_not(data.title, "primera declinación")
insert_if_not(data.categories, "LA:Sustantivos de la primera declinación")
-- ām
if types.am then
nom_sg = "ām"
acc_sg = "ām"
abl_sg = {"ām", "ā"}
voc_sg = "ām"
-- all Greek
elseif types.Greek then
insert_if_not(data.title, "griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
--Greek Ma
if types.Ma then
nom_sg = "ās"
acc_sg = "ān"
voc_sg = "ā"
-- Greek Me
elseif types.Me then
nom_sg = "ēs"
acc_sg = "ēn"
abl_sg = "ē"
voc_sg = "ē"
-- Greek
else
nom_sg = "ē"
gen_loc_sg = "ēs"
acc_sg = "ēn"
abl_sg = "ē"
voc_sg = "ē"
end
end
-- ābus
if types.abus then
dat_abl_loc_pl = "ābus"
end
add_form(forms, "nom_sg", stem, nom_sg)
add_form(forms, "gen_sg", stem, gen_loc_sg)
add_form(forms, "dat_sg", stem, dat_sg)
add_form(forms, "acc_sg", stem, acc_sg)
add_form(forms, "abl_sg", stem, abl_sg)
add_form(forms, "voc_sg", stem, voc_sg)
add_form(forms, {"nom_pl", "voc_pl"}, stem, nom_voc_pl)
add_form(forms, "gen_pl", stem, gen_pl)
add_form(forms, {"dat_pl", "abl_pl"}, stem, dat_abl_loc_pl)
add_form(forms, "acc_pl", stem, acc_pl)
-- with locative
if loc then
add_form(forms, "loc_sg", stem, gen_loc_sg)
add_form(forms, "loc_pl", stem, dat_abl_loc_pl)
end
end
noun_decl["2"] = function(data, args)
local forms, types, subtitles, notes = data.forms, data.types, data.subtitles, data.notes
local stem1, stem2 = args[1], args[2]
insert_if_not(data.title, "segunda declinación")
insert_if_not(data.categories, "LA:Sustantivos de la segunda declinación")
-- normal 2nd
forms["nom_sg"] = stem1 .. "us"
forms["gen_sg"] = stem1 .. "ī"
forms["dat_sg"] = stem1 .. "ō"
forms["acc_sg"] = stem1 .. "um"
forms["abl_sg"] = stem1 .. "ō"
forms["voc_sg"] = stem1 .. "e"
forms["nom_pl"] = stem1 .. "ī"
forms["gen_pl"] = stem1 .. "ōrum"
forms["dat_pl"] = stem1 .. "īs"
forms["acc_pl"] = stem1 .. "ōs"
forms["abl_pl"] = stem1 .. "īs"
forms["voc_pl"] = stem1 .. "ī"
-- all neuter
if types.N then
forms["nom_sg"] = stem1 .. "um"
forms["voc_sg"] = stem1 .. "um"
forms["nom_pl"] = stem1 .. "a"
forms["acc_pl"] = stem1 .. "a"
forms["voc_pl"] = stem1 .. "a"
-- neuter ium
if types.ium then
forms["nom_sg"] = stem1 .. "ium"
forms["gen_sg"] = {stem1 .. "iī", stem1 .. "ī{†}"}
forms["dat_sg"] = stem1 .. "iō"
forms["acc_sg"] = stem1 .. "ium"
forms["abl_sg"] = stem1 .. "iō"
forms["voc_sg"] = stem1 .. "ium"
forms["nom_pl"] = stem1 .. "ia"
forms["gen_pl"] = stem1 .. "iōrum"
forms["dat_pl"] = stem1 .. "iīs"
forms["acc_pl"] = stem1 .. "ia"
forms["abl_pl"] = stem1 .. "iīs"
forms["voc_pl"] = stem1 .. "ia"
-- neuter us, plural a
elseif types.a then
forms["nom_sg"] = stem1 .. "us"
forms["acc_sg"] = stem1 .. "us"
forms["voc_sg"] = stem1 .. "us"
forms["nom_pl"] = stem1 .. "a"
forms["acc_pl"] = stem1 .. "a"
forms["voc_pl"] = stem1 .. "a"
-- -vom (aevom, etc.)
elseif types.vom then
forms["nom_sg"] = stem1 .. "om"
forms["acc_sg"] = stem1 .. "om"
forms["voc_sg"] = stem1 .. "om"
-- neuter Greek in -os (cētos)
elseif types.Greek and types.us then
insert_if_not(data.title, "griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = stem1 .. "os"
forms["acc_sg"] = stem1 .. "os"
forms["voc_sg"] = stem1 .. "os"
forms["nom_pl"] = stem1 .. "ē"
forms["gen_pl"] = stem1 .. "ōn"
forms["acc_pl"] = stem1 .. "ē"
forms["voc_pl"] = stem1 .. "ē"
-- neuter Greek
elseif types.Greek then
insert_if_not(data.title, "griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = stem1 .. "on"
forms["acc_sg"] = stem1 .. "on"
forms["voc_sg"] = stem1 .. "on"
-- neuter us
elseif types.us then
forms["nom_sg"] = stem1 .. "us"
forms["acc_sg"] = stem1 .. "us"
forms["voc_sg"] = stem1 .. "us"
forms["nom_pl"] = stem1 .. "ī"
forms["acc_pl"] = stem1 .. "ōs"
forms["voc_pl"] = stem1 .. "ī"
end
-- er
elseif types.er then
forms["nom_sg"] = stem1
forms["gen_sg"] = stem2 .. "ī"
forms["dat_sg"] = stem2 .. "ō"
forms["acc_sg"] = stem2 .. "um"
forms["abl_sg"] = stem2 .. "ō"
forms["voc_sg"] = stem1
forms["nom_pl"] = stem2 .. "ī"
forms["gen_pl"] = stem2 .. "ōrum"
forms["dat_pl"] = stem2 .. "īs"
forms["acc_pl"] = stem2 .. "ōs"
forms["abl_pl"] = stem2 .. "īs"
forms["voc_pl"] = stem2 .. "ī"
-- ius
elseif types.ius then
forms["nom_sg"] = stem1 .. "ius"
forms["gen_sg"] = {stem1 .. "iī", stem1 .. "ī{†}"}
forms["dat_sg"] = stem1 .. "iō"
forms["acc_sg"] = stem1 .. "ium"
forms["abl_sg"] = stem1 .. "iō"
if types.voci then
-- Only for proper names and fīlius, genius
forms["voc_sg"] = stem1 .. "ī"
else
forms["voc_sg"] = stem1 .. "ie"
end
forms["nom_pl"] = stem1 .. "iī"
forms["gen_pl"] = stem1 .. "iōrum"
forms["dat_pl"] = stem1 .. "iīs"
forms["acc_pl"] = stem1 .. "iōs"
forms["abl_pl"] = stem1 .. "iīs"
forms["voc_pl"] = stem1 .. "iī"
-- -vos (servos, etc.)
elseif types.vos then
forms["nom_sg"] = stem1 .. "os"
forms["acc_sg"] = stem1 .. "om"
-- Greek
elseif types.Greek then
insert_if_not(data.title, "griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = stem1 .. "os"
forms["acc_sg"] = stem1 .. "on"
if data.num == "pl" then
forms["nom_pl"] = stem1 .. "oe"
forms["voc_pl"] = stem1 .. "oe"
else
forms["nom_pl"] = {stem1 .. "ī", stem1 .. "oe"}
forms["voc_pl"] = {stem1 .. "ī", stem1 .. "oe"}
end
elseif types.not_Greek then
insert_if_not(data.title, "no griego")
end
-- with -um genitive plural
alt_gen_pl_in_um(stem2, forms, types, subtitles, types.ius or types.ium)
-- with locative
if data.loc then
if types.ius or types.ium then
forms["loc_sg"] = stem2 .. "iī"
forms["loc_pl"] = stem2 .. "iīs"
else
forms["loc_sg"] = stem2 .. "ī"
forms["loc_pl"] = stem2 .. "īs"
end
end
end
local acc_sg_i_stem_subtypes = {
acc_im = {
-- amussis, basis, buris, cucumis, gummis, mephitis, paraphrasis, poesis, ravis, sitis, tussis, (vis) [abl -ī];
-- cannabis, senapis, sinapis [abl -e, -ī]
acc_sg = {"im"},
title = {"accusative singular in ''-im''"},
},
acc_im_in = {
-- cities, rivers, gods, e.g. Bilbilis, Syrtis, Tiberis, Anubis, Osiris [abl -ī];
-- Baetis, Tigris [acc -e, -ī]
acc_sg = {"im", "in"},
title = {"accusative singular in ''-im'' or ''-in''"},
},
acc_im_in_em = {
-- e.g. tigris, river Līris
acc_sg = {"im", "in", "em"},
title = {"accusative singular in ''-im'', ''-in'' or ''-em''"},
},
acc_im_em = {
acc_sg = {"im", "em"},
title = {"accusative singular in ''-im'' or ''-em''"},
},
acc_im_occ_em = {
-- febris, pelvis, puppis, restis, securis, turris [abl -ī, -e]
acc_sg = {"im", "em"},
title = {"accusative singular in ''-im'' or occasionally ''-em''"},
},
acc_em_im = {
-- aqualis, clavis, lens, navis [abl -e, -ī];
-- cutis, restis [abl -e]
acc_sg = {"em", "im"},
title = {"accusative singular in ''-em'' or ''-im''"},
},
}
local abl_sg_i_stem_subtypes = {
abl_i = {
-- amussis, basis, buris, cucumis, gummis, mephitis, paraphrasis, poesis, ravis, sitis, tussis, (vis) [acc -im];
-- cities, rivers, gods, e.g. Bilbilis, Syrtis, Tiberis, Anubis, Osiris [acc -im or -in];
-- canalis "water pipe", months in -is or -er, nouns originally i-stem adjectives such as aedilis, affinis, bipennis, familiaris, sodalis, volucris, etc. [acc -em]
abl_sg = {"ī"},
title = {"ablative singular in ''-ī''"},
},
abl_i_e = {
-- febris, pelvis, puppis, restis, securis, turris [acc -im, -em]
abl_sg = {"ī", "e"},
title = {"ablative singular in ''-ī'' or ''-e''"},
},
abl_e_i = {
-- cannabis, senapis, sinapis [acc -im];
-- Baetis, Tigris [acc -im, -in];
-- aqualis, clavis, lens, navis [acc -em, -im];
-- finis, mugilis, occiput, pugil, rus, supellex, vectis [acc -em]
abl_sg = {"e", "ī"},
title = {"ablative singular in ''-e'' or ''-ī''"},
},
abl_e_occ_i = {
-- amnis, anguis, avis, civis, classis, fustis, ignis, imber, orbis, pars, postis, sors, unguis, vesper [acc -em]
abl_sg = {"e", "ī"},
title = {"ablative singular in ''-e'' or occasionally ''-ī''"},
},
}
local function extract_stem(form, ending)
local base = match(form, "^(.*)" .. ending .. "$")
if not base then
error("Form " .. form .. " should end in -" .. ending)
end
return base
end
local function count_vowels(stem)
return select(2, toNFD(stem):gsub("[aeiouyAEIOUY]", ""))
end
noun_decl["3"] = function(data, args)
local forms, types, subtitles, notes = data.forms, data.types, data.subtitles, data.notes
local stem1, stem2 = args[1], args[2]
-- local function non_i_stem_type()
-- return (count_vowels(stem1) > count_vowels(stem2) and "parisyllabic" or "imparisyllabic") .. " non-i-stem"
-- end
insert_if_not(data.title, "tercera declinación")
insert_if_not(data.categories, "LA:Sustantivos de la tercera declinación")
--normal 3rd
forms["nom_sg"] = stem1
forms["gen_sg"] = stem2 .. "is"
forms["dat_sg"] = stem2 .. "ī"
forms["acc_sg"] = stem2 .. "em"
forms["abl_sg"] = stem2 .. "e"
forms["voc_sg"] = stem1
forms["nom_pl"] = stem2 .. "ēs"
forms["gen_pl"] = stem2 .. "um"
forms["dat_pl"] = stem2 .. "ibus"
forms["acc_pl"] = stem2 .. "ēs"
forms["abl_pl"] = stem2 .. "ibus"
forms["voc_pl"] = stem2 .. "ēs"
local acc_sg_i_stem_subtype = false
local not_acc_sg_i_stem_subtype = false
for subtype, _ in pairs(types) do
if acc_sg_i_stem_subtypes[subtype] then
acc_sg_i_stem_subtype = true
break
end
end
for acc_sg_subtype, _ in pairs(acc_sg_i_stem_subtypes) do
if types["not_" .. acc_sg_subtype] then
not_acc_sg_i_stem_subtype = true
break
end
end
local abl_sg_i_stem_subtype = false
local not_abl_sg_i_stem_subtype = false
for subtype, _ in pairs(types) do
if abl_sg_i_stem_subtypes[subtype] then
abl_sg_i_stem_subtype = true
break
end
end
for abl_sg_subtype, _ in pairs(abl_sg_i_stem_subtypes) do
if types["not_" .. abl_sg_subtype] then
not_abl_sg_i_stem_subtype = true
break
end
end
-- all Greek
if types.Greek then
insert_if_not(data.title, "griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
-- Greek er
if types.er then
stem1 = extract_stem(stem1, "ēr")
forms["nom_sg"] = stem1 .. "ēr"
forms["gen_sg"] = stem1 .. "eris"
forms["dat_sg"] = stem1 .. "erī"
forms["acc_sg"] = {stem1 .. "era", stem1 .. "erem"}
forms["abl_sg"] = stem1 .. "ere"
forms["voc_sg"] = stem1 .. "ēr"
forms["nom_pl"] = stem1 .. "erēs"
forms["gen_pl"] = stem1 .. "erum"
forms["dat_pl"] = stem1 .. "eribus"
forms["acc_pl"] = stem1 .. "erēs"
forms["abl_pl"] = stem1 .. "eribus"
forms["voc_pl"] = stem1 .. "erēs"
-- Greek on
elseif types.on then
stem1 = extract_stem(stem1, "ōn")
forms["nom_sg"] = stem1 .. "ōn"
forms["gen_sg"] = {stem1 .. "ontis", stem1 .. "ontos"}
forms["dat_sg"] = stem1 .. "ontī"
forms["acc_sg"] = stem1 .. "onta"
forms["abl_sg"] = stem1 .. "onte"
forms["voc_sg"] = stem1 .. "ōn"
forms["nom_pl"] = stem1 .. "ontēs"
forms["gen_pl"] = {stem1 .. "ontum", stem1 .. "ontium"}
forms["dat_pl"] = stem1 .. "ontibus"
forms["acc_pl"] = {stem1 .. "ontēs", stem1 .. "ontās"}
forms["abl_pl"] = stem1 .. "ontibus"
forms["voc_pl"] = stem1 .. "ontēs"
-- Greek i-stem
elseif types.I then
forms["gen_sg"] = {stem2 .. "is", stem2 .. "eōs", stem2 .. "ios"}
forms["acc_sg"] = {stem2 .. "im", stem2 .. "in", stem2 .. "em{MED}"}
forms["abl_sg"] = {stem2 .. "ī", stem2 .. "e{MED}"}
forms["voc_sg"] = {stem2 .. "is", stem2 .. "i"}
forms["nom_pl"] = {stem2 .. "ēs", stem2 .. "eis"}
forms["gen_pl"] = {stem2 .. "ium", stem2 .. "eōn"}
forms["acc_pl"] = {stem2 .. "ēs", stem2 .. "eis"}
forms["voc_pl"] = {stem2 .. "ēs", stem2 .. "eis"}
if types.poetic_esi then
forms["dat_pl"] = {stem2 .. "ibus", stem2 .. "esi{L}"}
forms["abl_pl"] = {stem2 .. "ibus", stem2 .. "esi{L}"}
end
-- normal Greek
else
forms["gen_sg"] = stem2 .. "os"
if match(toNFD(stem2), "[yY]" .. ACCENT .. "*$") then
forms["acc_sg"] = stem2 .. "n"
else
forms["acc_sg"] = stem2 .. "a"
end
forms["nom_pl"] = stem2 .. "es"
forms["acc_pl"] = stem2 .. "as"
forms["voc_pl"] = stem2 .. "es"
if match(toNFD(stem1), "[iyIY]" .. ACCENT .. "*s$") then
-- Per Hiley, words in -is and -ys have a poetic vocative
-- without the -s, but otherwise the vocative is the same
-- as the nominative.
forms["voc_sg"] = {stem1, (stem1:gsub("s$", "")).."{L}"}
end
end
elseif types.not_Greek then
insert_if_not(data.title, "no griego")
end
-- polis
if types.polis then
stem1 = extract_stem(stem1, "polis")
insert_if_not(data.title, "parcialmente griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = stem1 .. "polis"
forms["gen_sg"] = stem1 .. "polis"
forms["dat_sg"] = stem1 .. "polī"
forms["acc_sg"] = {stem1 .. "polim", stem1 .. "polin"}
forms["abl_sg"] = stem1 .. "polī"
forms["voc_sg"] = {stem1 .. "polis", stem1 .. "polī"}
end
-- all neuter
if types.N then
forms["acc_sg"] = stem1
-- neuter I stem
if types.I then
-- pure variety
if types.pure then
forms["abl_sg"] = stem2 .. "ī"
forms["nom_pl"] = stem2 .. "ia"
forms["gen_pl"] = stem2 .. "ium"
forms["acc_pl"] = stem2 .. "ia"
forms["voc_pl"] = stem2 .. "ia"
-- non-pure variety (rare)
else
forms["nom_pl"] = stem2 .. "a"
forms["gen_pl"] = {stem2 .. "ium", stem2 .. "um"}
forms["acc_pl"] = stem2 .. "a"
forms["voc_pl"] = stem2 .. "a"
end
-- normal neuter
else
forms["nom_pl"] = stem2 .. "a"
forms["acc_pl"] = stem2 .. "a"
forms["voc_pl"] = stem2 .. "a"
end
-- I stem
elseif types.I or acc_sg_i_stem_subtype or abl_sg_i_stem_subtype then
forms["gen_pl"] = stem2 .. "ium"
-- Per Allen and Greenough, Hiley and others, the acc_pl in -īs
-- applied originally to all i-stem nouns, and was current as an
-- alternative form up through Caesar.
forms["acc_pl"] = {stem2 .. "ēs", stem2 .. "īs"}
-- pure variety
if types.pure then
forms["acc_sg"] = stem2 .. "im"
forms["abl_sg"] = stem2 .. "ī"
forms["nom_pl"] = stem2 .. "īs"
forms["acc_pl"] = stem2 .. "īs"
forms["voc_pl"] = stem2 .. "īs"
end
local num = data.num
for subtype, _ in pairs(types) do
local acc_sg_i_stem_props = acc_sg_i_stem_subtypes[subtype]
if acc_sg_i_stem_props then
forms["acc_sg"] = {}
for _, ending in ipairs(acc_sg_i_stem_props.acc_sg) do
insert_if_not(forms["acc_sg"], stem2 .. ending)
end
-- if num ~= "pl" then
-- for _, t in ipairs(acc_sg_i_stem_props.title) do
-- insert_if_not(subtitles, t)
-- end
-- end
break
end
end
-- FIXME: needs to be done for neuter nouns as well.
for subtype, _ in pairs(types) do
local abl_sg_i_stem_props = abl_sg_i_stem_subtypes[subtype]
if abl_sg_i_stem_props then
forms["abl_sg"] = {}
for _, ending in ipairs(abl_sg_i_stem_props.abl_sg) do
insert_if_not(forms["abl_sg"], stem2 .. ending)
end
-- if num ~= "pl" then
-- for _, t in ipairs(abl_sg_i_stem_props.title) do
-- insert_if_not(subtitles, t)
-- end
-- end
break
end
end
end
-- with locative
if data.loc then
-- As far as I can tell, in general both dative singular and
-- ablative singular could be used for the third-declension locative,
-- with different time periods preferring different forms.
-- http://dcc.dickinson.edu/grammar/latin/3rd-declension-locative-case
-- mentions rūrī along with either Carthāginī or Carthāgine.
-- Wikipedia in https://en.wikipedia.org/wiki/Locative_case#Latin
-- says this:
--
-- In archaic times, the locative singular of third declension nouns
-- was still interchangeable between ablative and dative forms, but in
-- the Augustan Period the use of the ablative form became fixed.
-- Therefore, both forms "rūrī" and "rūre" may be encountered.
--
-- Lewis and Short confirm this.
local loc_sg = forms["dat_sg"]
if type(loc_sg) == "table" then
loc_sg = deep_copy(loc_sg)
else
loc_sg = {loc_sg}
end
local abl_sg = forms["abl_sg"]
if type(abl_sg) == "table" then
for _, form in ipairs(abl_sg) do
insert_if_not(loc_sg, deep_copy(form))
end
else
insert_if_not(loc_sg, abl_sg)
end
forms["loc_sg"] = loc_sg
forms["loc_pl"] = deep_copy(forms["abl_pl"])
--The following is what we used to have, but I simply cannot believe it.
--if types.Greek and not types.s then
-- forms["loc_pl"] = stem2 .. "ēs"
--end
end
end
noun_decl["4"] = function(data, args)
local forms, types, subtitles, notes = data.forms, data.types, data.subtitles, data.notes
local stem = args[1]
insert_if_not(data.title, "cuarta declinación")
insert_if_not(data.categories, "LA:Sustantivos de la cuarta declinación")
-- normal 4th
forms["nom_sg"] = stem .. "us"
forms["gen_sg"] = stem .. "ūs"
forms["dat_sg"] = stem .. "uī"
forms["acc_sg"] = stem .. "um"
forms["abl_sg"] = stem .. "ū"
forms["voc_sg"] = stem .. "us"
forms["nom_pl"] = stem .. "ūs"
forms["gen_pl"] = stem .. "uum"
forms["dat_pl"] = stem .. "ibus"
forms["acc_pl"] = stem .. "ūs"
forms["abl_pl"] = stem .. "ibus"
forms["voc_pl"] = stem .. "ūs"
if types.echo then
for slot in pairs(forms) do
if slot ~= "gen_sg" then
forms[slot] = stem .. "ō"
end
end
add_form(forms, "acc_sg", stem, "ōn")
elseif types.Callisto then
for slot in pairs(forms) do
if slot ~= "gen_sg" then
forms[slot] = stem .. "ō"
end
end
end
-- neuter
if types.N then
forms["nom_sg"] = stem .. "ū̆{?}"
forms["gen_sg"] = {stem .. "ūs{C}", stem .. "ū{S}"}
forms["dat_sg"] = {stem .. "uī{C}", stem .. "ū{S}"}
forms["acc_sg"] = stem .. "ū̆{?}"
forms["voc_sg"] = stem .. "ū̆{?}"
forms["nom_pl"] = stem .. "ua"
forms["acc_pl"] = stem .. "ua"
forms["voc_pl"] = stem .. "ua"
end
-- ubus
if types.ubus then
forms["dat_pl"] = stem .. "ubus"
forms["abl_pl"] = stem .. "ubus"
end
-- with locative
if data.loc then
forms["loc_sg"] = forms["abl_sg"]
forms["loc_pl"] = forms["abl_pl"]
end
end
noun_decl["5"] = function(data, args)
local forms, types = data.forms, data.types
local stem = args[1]
insert_if_not(data.title, "quinta declinación")
insert_if_not(data.categories, "LA:Sustantivos de la quinta declinación")
-- ies
if types.i then
stem = stem .. "i"
end
forms["nom_sg"] = stem .. "ēs"
forms["gen_sg"] = stem .. "eī"
forms["dat_sg"] = stem .. "eī"
forms["acc_sg"] = stem .. "em"
forms["abl_sg"] = stem .. "ē"
forms["voc_sg"] = stem .. "ēs"
forms["nom_pl"] = stem .. "ēs"
forms["gen_pl"] = stem .. "ērum"
forms["dat_pl"] = stem .. "ēbus"
forms["acc_pl"] = stem .. "ēs"
forms["abl_pl"] = stem .. "ēbus"
forms["voc_pl"] = stem .. "ēs"
-- ies
if types.i then
forms["gen_sg"] = stem .. "ēī"
forms["dat_sg"] = stem .. "ēī"
end
--with locative
if data.loc then
forms["loc_sg"] = stem .. "ē"
forms["loc_pl"] = stem .. "ēbus"
end
end
noun_decl["sgpl"] = function(data, args)
local forms = data.forms
local stem1, stem2 = args[1], args[2]
insert_if_not(data.title, "indeclinable")
insert_if_not(data.categories, "LA:Sustantivos indeclinables")
forms["nom_sg"] = stem1
forms["gen_sg"] = stem1
forms["dat_sg"] = stem1
forms["acc_sg"] = stem1
forms["abl_sg"] = stem1
forms["voc_sg"] = stem1
forms["nom_pl"] = stem2
forms["gen_pl"] = stem2
forms["dat_pl"] = stem2
forms["acc_pl"] = stem2
forms["abl_pl"] = stem2
forms["voc_pl"] = stem2
-- with locative
if data.loc then
forms["loc_sg"] = stem1
forms["loc_pl"] = stem2
end
end
noun_decl["indecl"] = function(data, args)
local forms = data.forms
local stem = args[1]
insert_if_not(data.title, "indeclinable")
insert_if_not(data.categories, "LA:Sustantivos indeclinables")
forms["nom_sg"] = stem
forms["gen_sg"] = {}
forms["dat_sg"] = {}
forms["acc_sg"] = stem
forms["abl_sg"] = {}
forms["voc_sg"] = {}
forms["nom_pl"] = {}
forms["gen_pl"] = {}
forms["dat_pl"] = {}
forms["acc_pl"] = {}
forms["abl_pl"] = {}
forms["voc_pl"] = {}
-- with locative (for multiword terms)
if data.loc then
forms["loc_sg"] = {}
forms["loc_pl"] = {}
end
data.num = "sg"
end
noun_decl["irreg"] = function(data, args)
local forms, subtitles, notes = data.forms, data.subtitles, data.notes
local stem = args[1]
insert_if_not(data.title, "irregular")
insert_if_not(data.categories, "LA:Sustantivos irregulares")
forms["nom_sg"] = {}
forms["gen_sg"] = {}
forms["dat_sg"] = {}
forms["acc_sg"] = {}
forms["abl_sg"] = {}
forms["voc_sg"] = {}
forms["nom_pl"] = {}
forms["gen_pl"] = {}
forms["dat_pl"] = {}
forms["acc_pl"] = {}
forms["abl_pl"] = {}
forms["voc_pl"] = {}
if stem == "bōs" then
data.decl = "3"
local stem1, stem2 = "bōs", "bov"
noun_decl["3"](data, {stem1, stem2})
add_form(forms, "abl_sg", stem2, "īd{†}")
add_form(forms, "gen_pl", "bo", "um")
add_form(forms, "gen_pl", stem2, "erum")
add_form(forms, "dat_pl", "", "bōbus")
add_form(forms, "dat_pl", "", "būbus")
add_form(forms, "abl_pl", "", "bōbus")
add_form(forms, "abl_pl", "", "būbus")
elseif stem:match("^[dD]eus$") then
data.decl = "2"
local dD = stem:sub(1, 1)
forms["nom_sg"] = dD .. "eus"
forms["gen_sg"] = dD .. "eī"
forms["dat_sg"] = dD .. "eō"
forms["acc_sg"] = dD .. "eum"
forms["abl_sg"] = dD .. "eō"
forms["voc_sg"] = {dD .. "eus", dD .. "ee"}
if stem == "deus" then
forms["nom_pl"] = {"dī", "diī", "deī"}
forms["gen_pl"] = {"deōrum", "deum"}
forms["dat_pl"] = {"dīs", "diīs", "deīs"}
forms["acc_pl"] = "deōs"
forms["abl_pl"] = {"dīs", "diīs", "deīs"}
forms["voc_pl"] = {"dī", "diī", "deī"}
end
elseif stem == "domus" then
data.decl = "4,2"
insert_if_not(data.title, "cuarta/segunda declinación")
forms["nom_sg"] = "domus"
forms["gen_sg"] = {"domūs", "domī"}
forms["dat_sg"] = {"domuī", "domō", "domū"}
forms["acc_sg"] = "domum"
forms["abl_sg"] = {"domū", "domō"}
forms["voc_sg"] = "domus"
forms["loc_sg"] = "domī"
forms["nom_pl"] = "domūs"
forms["gen_pl"] = {"domuum", "domōrum"}
forms["dat_pl"] = "domibus"
forms["acc_pl"] = {"domūs", "domōs"}
forms["abl_pl"] = "domibus"
forms["voc_pl"] = "domūs"
forms["loc_pl"] = {}
data.loc = true
elseif match(stem, "^[IÏJ]ēs[uū]" .. BREVE .. "?s$") then
local ij = sub(stem, 1, 1)
local uu = match(stem, "[uū]" .. BREVE .. "?")
forms["nom_sg"] = stem
forms["gen_sg"] = ij .. "ēsū"
forms["dat_sg"] = ij .. "ēsū"
forms["acc_sg"] = ij .. "ēs" .. uu .. "m"
forms["abl_sg"] = ij .. "ēsū"
forms["voc_sg"] = ij .. "ēsū"
data.num = "sg"
elseif stem == "Mōsēs" or stem == "Moesēs" or match(stem, "^M[oō]" .. BREVE .. "?[īȳ]sēs$") then
local mos = sub(stem, 1, -3)
forms["nom_sg"] = stem
forms["gen_sg"] = {mos .. "ī", mos .. "ēī", mos .. "is", mos .. "ēn", mos .. "eōs"}
forms["dat_sg"] = mos .. "ī"
forms["acc_sg"] = {mos .. "ēn", mos .. "em"}
forms["abl_sg"] = {mos .. "e", mos .. "ēn", mos .. "ī"}
forms["voc_sg"] = {mos .. "ēs", mos .. "ē"}
data.num = "sg"
elseif stem:match("^[ij]ūgerum$") then
data.decl = "2,3"
local ij = stem:sub(1, 1)
insert_if_not(data.title, "segunda/tercera declinación híbrido")
forms["nom_sg"] = ij .. "ūgerum"
forms["gen_sg"] = ij .. "ūgerī"
forms["dat_sg"] = ij .. "ūgerō"
forms["acc_sg"] = ij .. "ūgerum"
forms["abl_sg"] = ij .. "ūgerō"
forms["voc_sg"] = ij .. "ūgerum"
forms["nom_pl"] = ij .. "ūgera"
forms["gen_pl"] = ij .. "ūgerum"
forms["dat_pl"] = ij .. "ūgeribus"
forms["acc_pl"] = ij .. "ūgera"
forms["abl_pl"] = {ij .. "ūgeribus", ij .. "ūgerīs{†}"}
forms["voc_pl"] = ij .. "ūgera"
elseif stem == "sūs" then
data.decl = "3"
forms["nom_sg"] = "sūs"
forms["gen_sg"] = "suis"
forms["dat_sg"] = "suī"
forms["acc_sg"] = "suem"
forms["abl_sg"] = "sue"
forms["voc_sg"] = "sūs"
forms["nom_pl"] = "suēs"
forms["gen_pl"] = "suum"
forms["dat_pl"] = {"suibus", "sūbus", "subus"}
forms["acc_pl"] = "suēs"
forms["abl_pl"] = {"suibus", "sūbus", "subus"}
forms["voc_pl"] = "suēs"
elseif stem == "ēthos" then
data.decl = "3"
insert_if_not(data.title, "tercera declinación, griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = "ēthos"
forms["gen_sg"] = "ētheos"
forms["acc_sg"] = "ēthos"
forms["voc_sg"] = "ēthos"
forms["nom_pl"] = {"ēthea", "ēthē"}
forms["dat_pl"] = {"ēthesi", "ēthesin"}
forms["acc_pl"] = {"ēthea", "ēthē"}
forms["abl_pl"] = {"ēthesi", "ēthesin"}
forms["voc_pl"] = {"ēthea", "ēthē"}
elseif stem == "Athōs" then
data.decl = "2"
insert_if_not(data.title, "segunda declinación, griego")
insert_if_not(data.categories, "LA:Sustantivos griegos")
forms["nom_sg"] = "Athōs"
forms["gen_sg"] = "Athō"
forms["dat_sg"] = "Athō"
forms["acc_sg"] = {"Athō", "Athōn"}
forms["abl_sg"] = "Athō"
forms["voc_sg"] = "Athōs"
data.num = "sg"
elseif stem:match("^[uv]ēnum$") then
data.decl = "4,2"
local uv = stem:sub(1, 1)
insert_if_not(data.title, "cuarta/segunda declinación, defectivo")
forms["dat_sg"] = {uv .. "ēnuī", uv .. "ēnō"}
forms["acc_sg"] = uv .. "ēnum"
data.num = "sg"
elseif stem:match("^[uv]īs$") then
data.decl = "3"
local uv = stem:sub(1, 1)
insert_if_not(data.title, "defectivo")
forms["nom_sg"] = uv .. "īs"
forms["gen_sg"] = uv .. "īs"
forms["dat_sg"] = uv .. "ī"
forms["acc_sg"] = uv .. "im"
forms["abl_sg"] = uv .. "ī"
forms["voc_sg"] = uv .. "īs"
forms["nom_pl"] = uv .. "īrēs"
forms["gen_pl"] = uv .. "īrium"
forms["dat_pl"] = uv .. "īribus"
forms["acc_pl"] = {uv .. "īrēs", uv .. "īrīs"}
forms["abl_pl"] = uv .. "īribus"
forms["voc_pl"] = uv .. "īrēs"
else
error("Stem " .. stem .. " not recognized.")
end
end
local adj_decl = {}
adj_decl["0+"] = function(data, args)
local forms, categories = data.forms, data.categories
local stem = args[1]
insert_if_not(data.title, "indeclinable")
insert_if_not(categories, "LA:Adjetivos indeclinables")
forms["nom_sg_m"] = stem
forms["nom_pl_m"] = stem
forms["gen_sg_m"] = stem
forms["gen_pl_m"] = stem
forms["dat_sg_m"] = stem
forms["dat_pl_m"] = stem
forms["acc_sg_m"] = stem
forms["acc_pl_m"] = stem
forms["abl_sg_m"] = stem
forms["abl_pl_m"] = stem
forms["voc_sg_m"] = stem
forms["voc_pl_m"] = stem
forms["loc_sg_m"] = stem
forms["loc_pl_m"] = stem
end
adj_decl["1&2+"] = function(data, args)
local forms, types, pos, subtitles, categories = data.forms, data.types, data.pos, data.subtitles, data.categories
local stem = args[1]
insert_if_not(data.title, "primera y segunda declinación")
insert_if_not(categories, "LA:Adjetivos de la primera declinación")
insert_if_not(categories, "LA:Adjetivos de la segunda declinación")
local original
if types.er then
local final2 = stem:sub(-2)
if final2 == "er" then
-- insert_if_not(categories, "LA:Sustantivos de la primera declinación")
-- insert_if_not(categories, "LA:Sustantivos de la segunda declinación")
elseif final2 == "ur" then
-- insert_if_not(categories, "LA:Sustantivos de la primera declinación")
-- insert_if_not(categories, "LA:Sustantivos de la segunda declinación")
else
error("Unrecognized ''-r'' stem (doesn't end in ''-er'' or ''-ur''): " .. stem)
end
stem, original = args[2], stem
end
local us = "us"
local a_sf = "a"
local um = "um"
local ae_gsf = "ae"
local am = "am"
local a_macron = "ā"
local i_pl = stem .. "ī"
if types.greekA or types.greekE then
insert_if_not(data.title, "griego")
insert_if_not(categories, "LA:Sustantivos griegos")
if types.greekA then
us = "os"
um = "on"
am = "ān"
else
us = "os"
a_sf = "ē"
um = "on"
ae_gsf = "ēs"
am = "ēn"
a_macron = "ē"
end
i_pl = {i_pl, stem .. "oe"}
end
forms["nom_sg_m"] = original or (stem .. us)
forms["nom_sg_f"] = stem .. a_sf
forms["nom_sg_n"] = stem .. um
forms["nom_pl_m"] = i_pl
forms["nom_pl_f"] = stem .. "ae"
forms["nom_pl_n"] = stem .. "a"
forms["gen_sg_m"] = stem .. "ī"
forms["gen_sg_f"] = stem .. ae_gsf
forms["gen_sg_n"] = stem .. "ī"
forms["gen_pl_m"] = stem .. "ōrum"
forms["gen_pl_f"] = stem .. "ārum"
forms["gen_pl_n"] = stem .. "ōrum"
forms["dat_sg_m"] = stem .. "ō"
forms["dat_sg_f"] = stem .. "ae"
forms["dat_sg_n"] = stem .. "ō"
forms["dat_pl_m"] = stem .. "īs"
forms["dat_pl_f"] = stem .. "īs"
forms["dat_pl_n"] = stem .. "īs"
forms["acc_sg_m"] = stem .. um
forms["acc_sg_f"] = stem .. am
forms["acc_sg_n"] = stem .. um
forms["acc_pl_m"] = stem .. "ōs"
forms["acc_pl_f"] = stem .. "ās"
forms["acc_pl_n"] = stem .. "a"
forms["abl_sg_m"] = stem .. "ō"
forms["abl_sg_f"] = stem .. a_macron
forms["abl_sg_n"] = stem .. "ō"
forms["abl_pl_m"] = stem .. "īs"
forms["abl_pl_f"] = stem .. "īs"
forms["abl_pl_n"] = stem .. "īs"
forms["voc_sg_m"] = original or (stem .. "e")
forms["voc_sg_f"] = stem .. a_sf
forms["voc_sg_n"] = stem .. um
forms["voc_pl_m"] = i_pl
forms["voc_pl_f"] = stem .. "ae"
forms["voc_pl_n"] = stem .. "a"
if types.ius then
insert_if_not(data.title, "pronominal")
--insert_if_not(subtitles, "with genitive singular in ''-ī̆us'' and dative singular in ''-ī''")
forms["gen_sg_m"] = stem .. "ī̆us"
forms["gen_sg_f"] = stem .. "ī̆us"
forms["gen_sg_n"] = stem .. "ī̆us"
forms["dat_sg_m"] = stem .. "ī"
forms["dat_sg_f"] = stem .. "ī"
forms["dat_sg_n"] = stem .. "ī"
elseif types.not_ius then
insert_if_not(data.title, "no pronominal")
--insert_if_not(subtitles, "with normal genitive and dative singular")
end
if stem == "me" then
forms["voc_sg_m"] = "mī"
end
if types.ic then
--insert_if_not(subtitles, "with genitive singular ending in ''-ius'' and dative singular ending in ''-ic''")
local oc = "oc"
local oc_macron = "ōc"
if stem == "ill" then
oc = "uc"
oc_macron = "ūc"
end
forms["nom_sg_m"] = stem .. "ic"
forms["nom_sg_f"] = stem .. "aec"
forms["nom_sg_n"] = stem .. oc
forms["nom_pl_n"] = stem .. "aec"
forms["gen_sg_m"] = stem .. "uius"
forms["gen_sg_f"] = stem .. "uius"
forms["gen_sg_n"] = stem .. "uius"
forms["dat_sg_m"] = stem .. "uic"
forms["dat_sg_f"] = stem .. "uic"
forms["dat_sg_n"] = stem .. "uic"
forms["acc_sg_m"] = stem .. "unc"
forms["acc_sg_f"] = stem .. "anc"
forms["acc_sg_n"] = stem .. oc
forms["acc_pl_n"] = stem .. "aec"
forms["abl_sg_m"] = stem .. "ōc"
forms["abl_sg_f"] = stem .. "āc"
forms["abl_sg_n"] = stem .. oc_macron
forms["voc_sg_m"] = {}
forms["voc_sg_f"] = {}
forms["voc_sg_n"] = {}
forms["voc_pl_m"] = {}
forms["voc_pl_f"] = {}
forms["voc_pl_n"] = {}
end
if types.distr then
if stem:sub(-1) == "n" then
forms["gen_pl_m"] = {stem .. "um", stem .. "ōrum{R}"}
forms["gen_pl_f"] = {stem .. "um", stem .. "ārum{R}"}
forms["gen_pl_n"] = {stem .. "um", stem .. "ōrum{R}"}
else
error("Unrecognized distributive numeral stem (doesn't end in ''n''): " .. stem)
end
original = stem
stem = args[2]
end
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["gen_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
adj_decl["1-1+"] = function(data, args)
local forms, subtitles, categories = data.forms, data.subtitles, data.categories
local stem = args[1]
insert_if_not(data.title, "primera declinación")
insert_if_not(categories, "LA:Adjetivos de la primera declinación")
forms["nom_sg_m"] = stem .. "a"
forms["nom_pl_m"] = stem .. "ae"
forms["nom_pl_n"] = stem .. "a"
forms["gen_sg_m"] = stem .. "ae"
forms["gen_pl_m"] = stem .. "ārum"
forms["dat_sg_m"] = stem .. "ae"
forms["dat_pl_m"] = stem .. "īs"
forms["acc_sg_m"] = stem .. "am"
forms["acc_sg_n"] = stem .. "a"
forms["acc_pl_m"] = stem .. "ās"
forms["acc_pl_n"] = stem .. "a"
forms["abl_sg_m"] = stem .. "ā"
forms["abl_pl_m"] = stem .. "īs"
forms["voc_sg_m"] = stem .. "a"
forms["voc_pl_m"] = stem .. "ae"
forms["voc_pl_n"] = stem .. "a"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
end
adj_decl["2-2+"] = function(data, args)
local forms, types, pos, subtitles, categories = data.forms, data.types, data.pos, data.subtitles, data.categories
local stem = args[1]
insert_if_not(data.title, "segunda declinación")
insert_if_not(categories, "LA:Adjetivos de la segunda declinación")
local us = "us"
local um = "um"
local i_pl = stem .. "ī"
if types.greek then
insert_if_not(data.title, "griego")
insert_if_not(categories, "LA:Sustantivos griegos")
us = "os"
um = "on"
i_pl = {i_pl, stem .. "oe"}
end
forms["nom_sg_m"] = stem .. us
forms["nom_sg_n"] = stem .. um
forms["nom_pl_m"] = i_pl
forms["nom_pl_n"] = stem .. "a"
forms["gen_sg_m"] = stem .. "ī"
forms["gen_sg_n"] = stem .. "ī"
forms["gen_pl_m"] = stem .. "ōrum"
forms["gen_pl_n"] = stem .. "ōrum"
forms["dat_sg_m"] = stem .. "ō"
forms["dat_sg_n"] = stem .. "ō"
forms["dat_pl_m"] = stem .. "īs"
forms["dat_pl_n"] = stem .. "īs"
forms["acc_sg_m"] = stem .. um
forms["acc_sg_n"] = stem .. um
forms["acc_pl_m"] = stem .. "ōs"
forms["acc_pl_n"] = stem .. "a"
forms["abl_sg_m"] = stem .. "ō"
forms["abl_sg_n"] = stem .. "ō"
forms["abl_pl_m"] = stem .. "īs"
forms["abl_pl_n"] = stem .. "īs"
forms["voc_sg_m"] = stem .. "e"
forms["voc_sg_n"] = stem .. um
forms["voc_pl_m"] = i_pl
forms["voc_pl_n"] = stem .. "a"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
local function abl_i_e(...)
local function update_slot(forms, slot, f, do_copy)
if not forms[slot] then
return do_copy
elseif do_copy then
f = deep_copy(f)
end
forms[slot] = f
return true
end
function abl_i_e(stem, forms, types)
local f, do_copy
if types["abl_e_i"] then
f = {stem .. "e", stem .. "ī"}
elseif types["abl_i_e"] then
f = {stem .. "ī", stem .. "e"}
else
return
end
do_copy = update_slot(forms, "abl_sg_m", f, do_copy)
do_copy = update_slot(forms, "abl_sg_f", f, do_copy)
-- Neuter doesn't take -e with i-stems.
if not types.I then
update_slot(forms, "abl_sg_n", f, do_copy)
end
end
return abl_i_e(...)
end
adj_decl["3-1+"] = function(data, args)
local forms, types, pos, subtitles, notes, categories = data.forms, data.types, data.pos, data.subtitles, data.notes, data.categories
local stem1, stem2 = args[1], args[2]
-- local singpos = singularize(pos)
insert_if_not(data.title, "tercera declinación, dos terminaciones")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación con dos terminaciones")
forms["nom_sg_m"] = stem1
forms["nom_sg_n"] = stem1
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "ia"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "ium"
forms["gen_pl_n"] = stem2 .. "ium"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_n"] = stem1
forms["acc_pl_m"] = {stem2 .. "īs", stem2 .. "ēs"}
forms["acc_pl_n"] = stem2 .. "ia"
forms["abl_sg_m"] = stem2 .. "ī"
forms["abl_sg_n"] = stem2 .. "ī"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
abl_i_e(stem2, forms, types)
forms["voc_sg_m"] = stem1
forms["voc_sg_n"] = stem1
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "ia"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
if types.par then
forms["nom_pl_n"] = stem2 .. "a"
forms["gen_pl_m"] = stem2 .. "um"
forms["gen_pl_n"] = stem2 .. "um"
forms["abl_sg_m"] = stem2 .. "e"
forms["abl_sg_n"] = stem2 .. "e"
forms["loc_sg_m"] = {stem2 .. "ī", stem2 .. "e"} -- Really?
forms["loc_sg_n"] = {stem2 .. "ī", stem2 .. "e"} -- Why does this happen?
forms["acc_pl_n"] = stem2 .. "a"
forms["voc_pl_n"] = stem2 .. "a"
end
local es_base = stem1:match("^(.-)ēs$")
if es_base and es_base == stem2 then
if types.greek then
forms["nom_sg_n"] = {stem2 .. "ē̆s{?}"}
forms["acc_sg_n"] = {stem2 .. "ē̆s{?}"}
forms["voc_sg_m"] = {stem2 .. "ē̆s{?}"}
forms["voc_sg_n"] = {stem2 .. "ē̆s{?}"}
forms["nom_pl_n"] = {stem2 .. "a{?}", stem2 .. "ia{?}"}
forms["acc_pl_n"] = {stem2 .. "a{?}", stem2 .. "ia{?}"}
forms["voc_pl_n"] = {stem2 .. "a{?}", stem2 .. "ia{?}"}
forms["abl_sg_m"] = {stem2 .. "e{?}", stem2 .. "ī{?}"}
forms["abl_sg_n"] = {stem2 .. "e{?}", stem2 .. "ī{?}"}
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["gen_pl_m"] = {stem2 .. "um{?}", stem2 .. "ium{?}"}
forms["gen_pl_n"] = {stem2 .. "um{?}", stem2 .. "ium{?}"}
insert_if_not(data.title, "griego")
insert_if_not(categories, "LA:Adjetivos griegos")
elseif types.not_greek then
insert_if_not(data.title, "no griego")
end
end
end
adj_decl["3-def+"] = function(data, args)
local forms, types, pos, subtitles, notes, categories = data.forms, data.types, data.pos, data.subtitles, data.notes, data.categories
local stem1, stem2 = args[1], args[2]
-- local singpos = singularize(pos)
insert_if_not(data.title, "tercera declinación, defectivo")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación")
forms["nom_sg_m"] = stem1
forms["nom_sg_n"] = stem1
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "ia"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "ium"
forms["gen_pl_n"] = stem2 .. "ium"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_n"] = stem1
forms["acc_pl_m"] = stem2 .. "ēs"
forms["acc_pl_n"] = stem2 .. "ia"
forms["abl_sg_m"] = stem2 .. "ī"
forms["abl_sg_n"] = stem2 .. "ī"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
forms["voc_sg_m"] = stem1
forms["voc_sg_n"] = stem1
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "ia"
if types.tor then
insert_if_not(data.title, "tercera declinación, solo en masculino")
insert_if_not(categories, "LA:Adjetivos solo en masculino")
remove_forms(forms, {"_f$", "_n$"})
forms["nom_sg_m"] = stem1
forms["gen_sg_m"] = stem2 .. "is"
forms["dat_sg_m"] = stem2 .. "ī"
forms["acc_sg_m"] = stem2 .. "em"
forms["abl_sg_m"] = stem2 .. "e"
forms["voc_sg_m"] = stem1
forms["nom_pl_m"] = stem2 .. "ēs"
forms["gen_pl_m"] = stem2 .. "um"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["acc_pl_m"] = stem2 .. "ēs"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["voc_pl_m"] = stem2 .. "ēs"
end
if types.trix then
insert_if_not(data.title, "tercera declinación, solo en femenino o en neutro plural")
insert_if_not(categories, "LA:Adjetivos solo en femenino")
insert_if_not(categories, "LA:Adjetivos solo en neutro")
remove_forms(forms, {"_m$", "sg_n$"})
forms["nom_sg_f"] = stem1
forms["gen_sg_f"] = stem2 .. "is"
forms["dat_sg_f"] = stem2 .. "ī"
forms["acc_sg_f"] = stem2 .. "em"
forms["abl_sg_f"] = {stem2 .. "e", stem2 .. "ī"}
forms["voc_sg_f"] = stem1
forms["nom_pl_f"] = stem2 .. "ēs"
forms["gen_pl_f"] = stem2 .. "ium"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["acc_pl_f"] = stem2 .. "ēs"
forms["abl_pl_f"] = stem2 .. "ibus"
forms["voc_pl_f"] = stem2 .. "ēs"
end
if types.trixf then
insert_if_not(data.title, "tercera declinación, solo en femenino")
insert_if_not(categories, "LA:Adjetivos solo en femenino")
remove_forms(forms, {"_m$","_n$"})
forms["nom_sg_f"] = stem1
forms["gen_sg_f"] = stem2 .. "is"
forms["dat_sg_f"] = stem2 .. "ī"
forms["acc_sg_f"] = stem2 .. "em"
forms["abl_sg_f"] = {stem2 .. "e", stem2 .. "ī"}
forms["voc_sg_f"] = stem1
forms["nom_pl_f"] = stem2 .. "ēs"
forms["gen_pl_f"] = stem2 .. "ium"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["acc_pl_f"] = stem2 .. "ēs"
forms["abl_pl_f"] = stem2 .. "ibus"
forms["voc_pl_f"] = stem2 .. "ēs"
end
if types.idis then
insert_if_not(data.title, "tercera declinación, solo en femenino")
insert_if_not(categories, "LA:Adjetivos solo en femenino")
remove_forms(forms, {"_m$","_n$"})
forms["nom_sg_f"] = stem1
forms["gen_sg_f"] = {stem2 .. "is", stem2 .. "os"}
forms["dat_sg_f"] = stem2 .. "ī"
forms["acc_sg_f"] = {stem2 .. "em", stem2 .. "a"}
forms["abl_sg_f"] = stem2 .. "e"
forms["voc_sg_f"] = stem1
forms["nom_pl_f"] = {stem2 .. "ēs", stem2 .. "es"}
forms["gen_pl_f"] = stem2 .. "um"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["acc_pl_f"] = {stem2 .. "ēs", stem2 .. "as"}
forms["abl_pl_f"] = stem2 .. "ibus"
forms["voc_pl_f"] = {stem2 .. "ēs", stem2 .. "es"}
end
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["abl_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
adj_decl["3-C+"] = function(data, args)
local forms, types, pos, categories = data.forms, data.types, data.pos, data.categories
local stem1 = args[1]
local stem2 = stem1 .. "ōr"
insert_if_not(data.title, "tercera declinación, comparativo")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación")
insert_if_not(categories, "LA:Adjetivos comparativos")
forms["nom_sg_m"] = stem1 .. "or"
forms["nom_sg_n"] = stem1 .. "us"
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "a"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "um"
forms["gen_pl_n"] = stem2 .. "um"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_n"] = stem1 .. "us"
forms["acc_pl_m"] = {stem2 .. "ēs", stem2 .. "īs"}
forms["acc_pl_n"] = stem2 .. "a"
forms["abl_sg_m"] = stem2 .. "ī"
forms["abl_sg_n"] = stem2 .. "ī"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
abl_i_e(stem2, forms, types)
forms["voc_sg_m"] = stem1 .. "or"
forms["voc_sg_n"] = stem1 .. "us"
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "a"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
adj_decl["3-P+"] = function(data, args)
local forms, notes = data.forms, data.notes
local stem2 = args[2]
adj_decl["3-1+"](data, args)
insert_if_not(data.title, "tercera declinación, participio")
insert_if_not(data.categories, "LA:Adjetivos de la tercera declinación")
forms["abl_sg_m"] = {stem2 .. "e{PART}", stem2 .. "ī{ADJ}"}
forms["abl_sg_n"] = {stem2 .. "e{PART}", stem2 .. "ī{ADJ}"}
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["acc_pl_m"] = {stem2 .. "ēs", stem2 .. "īs"}
end
adj_decl["3-2+"] = function(data, args)
local forms, types, pos, categories = data.forms, data.types, data.pos, data.categories
local stem = args[1]
-- local singpos = singularize(pos)
insert_if_not(data.title, "tercera declinación, dos terminaciones")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación con dos terminaciones")
forms["nom_sg_m"] = stem .. "is"
forms["nom_sg_n"] = stem .. "e"
forms["nom_pl_m"] = stem .. "ēs"
forms["nom_pl_n"] = stem .. "ia"
forms["gen_sg_m"] = stem .. "is"
forms["gen_sg_n"] = stem .. "is"
forms["gen_pl_m"] = stem .. "ium"
forms["gen_pl_n"] = stem .. "ium"
forms["dat_sg_m"] = stem .. "ī"
forms["dat_sg_n"] = stem .. "ī"
forms["dat_pl_m"] = stem .. "ibus"
forms["dat_pl_n"] = stem .. "ibus"
forms["acc_sg_m"] = stem .. "em"
forms["acc_sg_n"] = stem .. "e"
forms["acc_pl_m"] = {stem .. "īs", stem .. "ēs"}
forms["acc_pl_n"] = stem .. "ia"
forms["abl_sg_m"] = stem .. "ī"
forms["abl_sg_n"] = stem .. "ī"
forms["abl_pl_m"] = stem .. "ibus"
forms["abl_pl_n"] = stem .. "ibus"
-- abl_i_e(stem, forms, types) -- enable once [[Module:la-nominal]] has ben updated
forms["voc_sg_m"] = stem .. "is"
forms["voc_sg_n"] = stem .. "e"
forms["voc_pl_m"] = stem .. "ēs"
forms["voc_pl_n"] = stem .. "ia"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
adj_decl["3-3+"] = function(data, args)
local forms, types, pos, categories = data.forms, data.types, data.pos, data.categories
local stem1, stem2 = args[1], args[2]
-- local singpos = singularize(pos)
insert_if_not(data.title, "tercera declinación")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación")
insert_if_not(categories, "LA:Adjetivos de la tercera declinación con tres terminaciones")
forms["nom_sg_m"] = stem1
forms["nom_sg_f"] = stem2 .. "is"
forms["nom_sg_n"] = stem2 .. "e"
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_f"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "ia"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_f"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "ium"
forms["gen_pl_f"] = stem2 .. "ium"
forms["gen_pl_n"] = stem2 .. "ium"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_f"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_f"] = stem2 .. "em"
forms["acc_sg_n"] = stem2 .. "e"
forms["acc_pl_m"] = {stem2 .. "īs", stem2 .. "ēs"}
forms["acc_pl_f"] = {stem2 .. "īs", stem2 .. "ēs"}
forms["acc_pl_n"] = stem2 .. "ia"
forms["abl_sg_m"] = stem2 .. "ī"
forms["abl_sg_f"] = stem2 .. "ī"
forms["abl_sg_n"] = stem2 .. "ī"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_f"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
-- abl_i_e(stem2, forms, types) -- enable once [[Module:la-nominal]] has ben updated
forms["voc_sg_m"] = stem1
forms["voc_sg_f"] = stem2 .. "is"
forms["voc_sg_n"] = stem2 .. "e"
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_f"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "ia"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["abl_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
end
adj_decl["indecl+"] = function(data, args)
local forms, subtitles, categories = data.forms, data.subtitles, data.categories
local stem = args[1]
insert_if_not(data.title, "indeclinable")
insert_if_not(categories, "LA:Adjetivos indeclinables")
forms["nom_sg_m"] = stem
forms["nom_pl_m"] = {}
forms["gen_sg_m"] = {}
forms["gen_pl_m"] = {}
forms["dat_sg_m"] = {}
forms["dat_pl_m"] = {}
forms["acc_sg_m"] = stem
forms["acc_pl_m"] = {}
forms["abl_sg_m"] = {}
forms["abl_pl_m"] = {}
forms["voc_sg_m"] = {}
forms["voc_pl_m"] = {}
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
end
adj_decl["irreg+"] = function(data,args)
local forms, types, pos, notes, categories = data.forms, data.types, data.pos, data.notes, data.categories
local arg1 = args[1]
insert_if_not(data.title, "irregular")
insert_if_not(categories, "LA:Adjetivos irregulares")
if arg1 == "duo" or arg1 == "ambō" then
local stem = sub(arg1, 1, -2)
-- data.title = stem == "amb" and "irregular adjective" or "numeral"
data.num = "pl"
local stem_with_o = stem .. (stem == "amb" and "ō" or "o")
forms["nom_pl_m"] = stem_with_o
forms["nom_pl_f"] = stem .. "ae"
forms["nom_pl_n"] = stem_with_o
forms["gen_pl_m"] = stem .. "ōrum"
forms["gen_pl_f"] = stem .. "ārum"
forms["gen_pl_n"] = stem .. "ōrum"
forms["dat_pl_m"] = stem .. "ōbus"
forms["dat_pl_f"] = stem .. "ābus"
forms["dat_pl_n"] = stem .. "ōbus"
forms["acc_pl_m"] = {stem .. "ōs", stem_with_o}
forms["acc_pl_f"] = stem .. "ās"
forms["acc_pl_n"] = stem_with_o
forms["abl_pl_m"] = stem .. "ōbus"
forms["abl_pl_f"] = stem .. "ābus"
forms["abl_pl_n"] = stem .. "ōbus"
forms["voc_pl_m"] = stem_with_o
forms["voc_pl_f"] = stem .. "ae"
forms["voc_pl_n"] = stem_with_o
if stem == "du" then
forms["gen_pl_m"] = {forms["gen_pl_m"], "duum", "duom{†}"}
forms["gen_pl_n"] = {forms["gen_pl_n"], "duum", "duom{†}"}
end
elseif arg1:sub(-6) == "mīlle" then
insert_if_not(data.title, "numeral semiindeclinable")
local stem = arg1:sub(1, -3)
forms["nom_sg_m"] = stem .. "le"
forms["nom_pl_m"] = {stem .. "ia", stem .. "lia"}
forms["gen_sg_m"] = stem .. "le"
forms["gen_pl_m"] = {stem .. "ium", stem .. "lium"}
forms["dat_sg_m"] = stem .. "le"
forms["dat_pl_m"] = {stem .. "ibus", stem .. "libus"}
forms["acc_sg_m"] = stem .. "le"
forms["acc_pl_m"] = {stem .. "ia", stem .. "lia"}
forms["abl_sg_m"] = stem .. "le"
forms["abl_pl_m"] = {stem .. "ibus", stem .. "libus"}
forms["voc_sg_m"] = stem .. "le"
forms["voc_pl_m"] = {stem .. "ia", stem .. "lia"}
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
elseif arg1 == "ille" or arg1 == "iste" or arg1 == "ipse" or arg1 == "olle" then
local stem = arg1:sub(1, -2)
types.ius = true
adj_decl["1&2+"](data, {stem})
insert_if_not(data.title, "demostrativo") -- .. " " .. singularize(data.pos)
forms["nom_sg_m"] = arg1
if arg1 == "ipse" then
add_form(forms, "nom_sg_n", stem, "ud{MED}")
add_form(forms, "acc_sg_n", stem, "ud{MED}")
else
forms["nom_sg_n"] = stem .. "ud"
forms["acc_sg_n"] = stem .. "ud"
end
forms["voc_sg_m"] = {}
forms["voc_sg_f"] = {}
forms["voc_sg_n"] = {}
forms["voc_pl_m"] = {}
forms["voc_pl_f"] = {}
forms["voc_pl_n"] = {}
elseif arg1 == "illic" or arg1 == "istic" or arg1 == "isthic" then
insert_if_not(data.title, "demostrativo") -- .. " " .. singularize(data.pos)
local stem = arg1:sub(1, -3)
forms["nom_sg_m"] = stem .. "ic"
forms["nom_sg_f"] = stem .. "aec"
forms["nom_sg_n"] = {stem .. "uc", stem .. "ucce", stem .. "oc"}
forms["gen_sg_m"] = stem .. "ī̆usce"
forms["gen_sg_f"] = stem .. "ī̆usce"
forms["gen_sg_n"] = stem .. "ī̆usce"
forms["dat_sg_m"] = stem .. "īc"
forms["dat_sg_f"] = stem .. "īc"
forms["dat_sg_n"] = stem .. "īc"
forms["acc_sg_m"] = stem .. "unc"
forms["acc_sg_f"] = stem .. "anc"
forms["acc_sg_n"] = {stem .. "uc", stem .. "ucce", stem .. "oc"}
forms["abl_sg_m"] = stem .. "ōc"
forms["abl_sg_f"] = stem .. "āc"
forms["abl_sg_n"] = stem .. "ōc"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["gen_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["nom_pl_m"] = stem .. "īsce"
forms["nom_pl_f"] = stem .. "aec"
forms["nom_pl_n"] = stem .. "aec"
forms["gen_pl_m"] = stem .. "ōrunc{?}"
forms["gen_pl_f"] = stem .. "ārunc{?}"
forms["gen_ok_n"] = stem .. "ōrunc{?}"
forms["dat_pl_m"] = stem .. "īsce"
forms["dat_pl_f"] = stem .. "īsce"
forms["dat_pl_n"] = stem .. "īsce"
forms["acc_pl_m"] = stem .. "ōsce"
forms["acc_pl_f"] = stem .. "āsce"
forms["acc_pl_n"] = stem .. "aec"
forms["abl_pl_m"] = stem .. "īsce"
forms["abl_pl_f"] = stem .. "īsce"
forms["abl_pl_n"] = stem .. "īsce"
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
elseif arg1 == "hice" then
insert_if_not(data.title, "demostrativo") -- .. " pronoun"
forms["nom_sg_m"] = "hice"
forms["nom_sg_f"] = "haece"
forms["nom_sg_n"] = "hoce"
forms["nom_pl_m"] = "hīce"
forms["nom_pl_f"] = "haece"
forms["nom_pl_n"] = "haece"
forms["gen_sg_m"] = "huiusce"
forms["gen_sg_f"] = "huiusce"
forms["gen_sg_n"] = "huiusce"
forms["gen_pl_m"] = {"hōrunce", "hōrumce"}
forms["gen_pl_f"] = {"hārunce", "hārumce"}
forms["gen_pl_n"] = {"hōrunce", "hōrumce"}
forms["dat_sg_m"] = "huīce"
forms["dat_sg_f"] = "huīce"
forms["dat_sg_n"] = "huīce"
forms["dat_pl_m"] = "hīsce"
forms["dat_pl_f"] = "hīsce"
forms["dat_pl_n"] = "hīsce"
forms["acc_sg_m"] = "hunce"
forms["acc_sg_f"] = "hance"
forms["acc_sg_n"] = "hoce"
forms["acc_pl_m"] = "hōsce"
forms["acc_pl_f"] = "hāsce"
forms["acc_pl_n"] = "haece"
forms["abl_sg_m"] = "hōce"
forms["abl_sg_f"] = "hāce"
forms["abl_sg_n"] = "hōce"
forms["abl_pl_m"] = "hīsce"
forms["abl_pl_f"] = "hīsce"
forms["abl_pl_n"] = "hīsce"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["gen_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
elseif arg1 == "plūs" then
insert_if_not(data.title, "comparativo")
insert_if_not(data.categories, "LA:Sustantivos de la tercera declinación")
insert_if_not(data.categories, "LA:Sustantivos de la tercera declinación con una terminación")
data.note = "Ninguna de las formas en singular se usaron en latín clásico"
forms["nom_sg_n"] = "plūs"
forms["nom_pl_m"] = "plūrēs"
forms["nom_pl_n"] = "plūra"
forms["gen_sg_m"] = "plūris"
forms["gen_sg_n"] = "plūris"
forms["gen_pl_m"] = "plūrium"
forms["gen_pl_n"] = "plūrium"
forms["dat_sg_m"] = "plūrī"
forms["dat_sg_n"] = "plūrī"
forms["dat_pl_m"] = "plūribus"
forms["dat_pl_n"] = "plūribus"
forms["acc_sg_m"] = "plūrem"
forms["acc_sg_f"] = "plūrem"
forms["acc_sg_n"] = "plūs"
forms["acc_pl_m"] = {"plūrēs", "plūrīs"}
forms["acc_pl_n"] = "plūra"
forms["abl_sg_m"] = {"plūrī", "plūre"}
forms["abl_sg_f"] = {"plūrī", "plūre"}
forms["abl_sg_n"] = {"plūrī", "plūre"}
forms["abl_pl_m"] = "plūribus"
forms["abl_pl_n"] = "plūribus"
forms["voc_sg_n"] = "plūs"
forms["voc_pl_m"] = "plūrēs"
forms["voc_pl_n"] = "plūra"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["abl_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
elseif match(arg1, "^egō̆?$") or arg1 == "nōs" then
insert_if_not(data.title, "pronombre nominativo")
forms["nom_sg_m"] = arg1
forms["nom_pl_m"] = "nōs"
forms["gen_sg_m"] = "meī"
forms["gen_pl_m"] = {"nostrī", "nostrum"}
forms["dat_sg_m"] = "mihī̆"
forms["dat_pl_m"] = "nōbīs"
forms["acc_sg_m"] = {"mē", "mēmē"}
forms["acc_pl_m"] = "nōs"
forms["abl_sg_m"] = {"mē", "mēmē"}
forms["abl_pl_m"] = "nōbīs"
forms["voc_sg_m"] = arg1
forms["voc_pl_m"] = "nōs"
elseif arg1 == "tū" or arg1 == "vōs" then
insert_if_not(data.title, "pronombre nominativo")
forms["nom_sg_m"] = arg1
forms["nom_pl_m"] = "vōs"
forms["gen_sg_m"] = "tuī"
forms["gen_pl_m"] = {"vestrī", "vestrum"}
forms["dat_sg_m"] = "tibī̆"
forms["dat_pl_m"] = "vōbīs"
forms["acc_sg_m"] = {"tē", "tētē"}
forms["acc_pl_m"] = "vōs"
forms["abl_sg_m"] = {"tē", "tētē"}
forms["abl_pl_m"] = "vōbīs"
forms["voc_sg_m"] = arg1
forms["voc_pl_m"] = "vōs"
elseif arg1 == "suī" then
insert_if_not(data.title, "pronombre reflexivo")
forms["nom_sg_m"] = {}
forms["nom_pl_m"] = {}
forms["gen_sg_m"] = arg1
forms["gen_pl_m"] = forms["gen_sg_m"]
forms["dat_sg_m"] = "sibī̆"
forms["dat_pl_m"] = forms["dat_sg_m"]
forms["acc_sg_m"] = {"sē", "sēsē"}
forms["acc_pl_m"] = {"sē", "sēsē"}
forms["abl_sg_m"] = {"sē", "sēsē"}
forms["abl_pl_m"] = {"sē", "sēsē"}
forms["voc_sg_m"] = {}
forms["voc_pl_m"] = {}
elseif arg1 == "is" or arg1 == "īdem" then
insert_if_not(data.title, "pronombre demostrativo")
forms["nom_sg_m"] = "is"
forms["nom_sg_f"] = "ea"
forms["nom_sg_n"] = "id"
forms["nom_pl_m"] = {"iī", "eī", "ī"}
forms["nom_pl_f"] = "eae"
forms["nom_pl_n"] = "ea"
forms["gen_sg_m"] = {"eius", "ejus"}
forms["gen_sg_f"] = {"eius", "ejus"}
forms["gen_sg_n"] = {"eius", "ejus"}
forms["gen_pl_m"] = {"eōrum", "eum"}
forms["gen_pl_f"] = "eārum"
forms["gen_pl_n"] = {"eōrum", "eum"}
forms["dat_sg_m"] = {"eī", "e͡i", "ēī"}
forms["dat_sg_f"] = {"eī", "e͡i", "ēī", "eae"}
forms["dat_sg_n"] = {"eī", "e͡i", "ēī"}
forms["dat_pl_m"] = {"iīs", "eīs", "īs"}
forms["dat_pl_f"] = {"iīs", "eīs", "īs", "eābus"}
forms["dat_pl_n"] = {"iīs", "eīs", "īs"}
forms["acc_sg_m"] = "eum"
forms["acc_sg_f"] = "eam"
forms["acc_sg_n"] = "id"
forms["acc_pl_m"] = "eōs"
forms["acc_pl_f"] = "eās"
forms["acc_pl_n"] = "ea"
forms["abl_sg_m"] = "eō"
forms["abl_sg_f"] = "eā"
forms["abl_sg_n"] = "eō"
forms["abl_pl_m"] = {"iīs", "eīs", "īs"}
forms["abl_pl_f"] = {"iīs", "eīs", "īs"}
forms["abl_pl_n"] = {"iīs", "eīs", "īs"}
if arg1 == "īdem" then
forms["nom_sg_m"] = "ī"
forms["nom_sg_n"] = "i"
forms["acc_sg_n"] = "i"
end
elseif arg1 == "quis" or arg1 == "quī" then
data.note = "La forma ''qua'' es preferida frente a ''quae'' cuando se usa como indefinido"
local id = "id"
if arg1 == "quī" then
insert_if_not(data.title, "determinante relativo/interrogativo")
id = "od"
forms["nom_sg_m"] = {"quī", "quis", "quei{†}"}
forms["nom_sg_f"] = {"quae", "qua"}
forms["acc_sg_f"] = "quam"
forms["abl_sg_m"] = "quō"
forms["abl_sg_f"] = "quā"
forms["abl_sg_n"] = "quō"
else
insert_if_not(data.title, "pronombre relativo/interrogativo")
forms["nom_sg_m"] = {"quis", "quī"}
forms["nom_sg_f"] = {"quae", "qua", "quis{†}"}
forms["acc_sg_f"] = {"quam", "quem{†}"}
forms["abl_sg_m"] = {"quō", "quī"}
forms["abl_sg_f"] = {"quā", "quī"}
forms["abl_sg_n"] = {"quō", "quī"}
end
forms["nom_sg_n"] = "qu"..id
forms["nom_pl_m"] = {"quī", "quei{†}"}
forms["nom_pl_f"] = "quae"
forms["nom_pl_n"] = {"quae", "qua"}
forms["gen_sg_m"] = {"cuius", "quoius{†}"}
forms["gen_sg_f"] = {"cuius", "quoius{†}"}
forms["gen_sg_n"] = {"cuius", "quoius{†}"}
forms["gen_pl_m"] = "quōrum"
forms["gen_pl_f"] = "quārum"
forms["gen_pl_n"] = "quōrum"
forms["dat_sg_m"] = {"cui", "quoi{†}", "quoiei{†}"}
forms["dat_sg_f"] = {"cui", "quoi{†}", "quoiei{†}"}
forms["dat_sg_n"] = {"cui", "quoi{†}", "quoiei{†}"}
forms["dat_pl_m"] = {"quibus", "quīs", "queis{†}"}
forms["dat_pl_f"] = {"quibus", "quīs", "queis{†}"}
forms["dat_pl_n"] = {"quibus", "quīs", "queis{†}"}
forms["acc_sg_m"] = "quem"
forms["acc_sg_n"] = "qu"..id
forms["acc_pl_m"] = "quōs"
forms["acc_pl_f"] = "quās"
forms["acc_pl_n"] = {"quae", "qua"}
forms["abl_pl_m"] = {"quibus", "quīs", "queis{†}"}
forms["abl_pl_f"] = {"quibus", "quīs", "queis{†}"}
forms["abl_pl_n"] = {"quibus", "quīs", "queis{†}"}
elseif arg1 == "aliquī" then
insert_if_not(data.title, "determinante indefinido")
forms["nom_sg_m"] = {"aliquī{DET/ADJ}", "aliquis{PRON/SUST}"}
forms["nom_sg_f"] = {"aliqua", "aliquae{R}"}
forms["nom_sg_n"] = "aliquod"
forms["nom_pl_m"] = "aliquī"
forms["nom_pl_f"] = "aliquae"
forms["nom_pl_n"] = "aliqua"
forms["gen_sg_m"] = {"alicuius", "aliquoius{†}"}
forms["gen_sg_f"] = {"alicuius", "aliquoius{†}"}
forms["gen_sg_n"] = {"alicuius", "aliquoius{†}"}
forms["gen_pl_m"] = "aliquōrum"
forms["gen_pl_f"] = "aliquārum"
forms["gen_pl_n"] = "aliquōrum"
forms["dat_sg_m"] = {"alicui", "aliquoi{†}"}
forms["dat_sg_f"] = {"alicui", "aliquoi{†}"}
forms["dat_sg_n"] = {"alicui", "aliquoi{†}"}
forms["dat_pl_m"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
forms["dat_pl_f"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
forms["dat_pl_n"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
forms["acc_sg_m"] = "aliquem"
forms["acc_sg_f"] = "aliquam"
forms["acc_sg_n"] = "aliquod"
forms["acc_pl_m"] = "aliquōs"
forms["acc_pl_f"] = "aliquās"
forms["acc_pl_n"] = "aliqua"
forms["abl_sg_m"] = "aliquō"
forms["abl_sg_f"] = "aliquā"
forms["abl_sg_n"] = "aliquō"
forms["abl_pl_m"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
forms["abl_pl_f"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
forms["abl_pl_n"] = {"aliquīs", "aliquibus", "aliqueis{†}"}
elseif arg1 == "quisquam" then
insert_if_not(data.title, "determinante indefinido, concordancia en negativo")
data.note = "En latín clásico, era preferidas las formas de ''ūllus'' en lugar de las esta voz para el femenino y el neutro."
forms["nom_sg_m"] = "quisquam"
forms["nom_sg_f"] = {"quaequam", "quisquam{†}"}
forms["nom_sg_n"] = "quodquam"
forms["nom_pl_m"] = "quīquam"
forms["nom_pl_f"] = "quaequam"
forms["nom_pl_n"] = "quaequam"
forms["gen_sg_m"] = "cuiusquam"
forms["gen_sg_f"] = "cuiusquam"
forms["gen_sg_n"] = "cuiusquam"
forms["gen_pl_m"] = "quōrumquam"
forms["gen_pl_f"] = "quārumquam"
forms["gen_pl_n"] = "quōrumquam"
forms["dat_sg_m"] = "cuiquam"
forms["dat_sg_f"] = "cuiquam"
forms["dat_sg_n"] = "cuiquam"
forms["dat_pl_m"] = "quibusquam"
forms["dat_pl_f"] = "quibusquam"
forms["dat_pl_n"] = "quibusquam"
forms["acc_sg_m"] = "quemquam"
forms["acc_sg_f"] = {"quamquam", "quemquam{†}"}
forms["acc_sg_n"] = "quodquam"
forms["acc_pl_m"] = "quōsquam"
forms["acc_pl_f"] = "quāsquam"
forms["acc_pl_n"] = "quaequam"
forms["abl_sg_m"] = {"quōquam", "quīquam{†}"}
forms["abl_sg_f"] = "quāquam"
forms["abl_sg_n"] = "quōquam"
forms["abl_pl_m"] = "quibusquam"
forms["abl_pl_f"] = "quibusquam"
forms["abl_pl_n"] = "quibusquam"
forms["voc_sg_m"] = "quisquam"
forms["voc_sg_f"] = "quaequam"
forms["voc_sg_n"] = "quodquam"
forms["voc_pl_m"] = "quīquam"
forms["voc_pl_f"] = "quaequam"
forms["voc_pl_n"] = "quaequam"
elseif arg1 == "quisquis" then
insert_if_not(data.title, "pronombre relativo/interrogativo")
forms["nom_sg_m"] = "quisquis"
forms["nom_sg_f"] = "quisquis"
forms["nom_sg_n"] = {"quidquid", "quicquid"}
forms["nom_pl_m"] = "quīquī"
forms["nom_pl_f"] = "quaequae"
forms["nom_pl_n"] = "quaequae"
forms["gen_sg_m"] = "cuiuscuius"
forms["gen_sg_f"] = "cuiuscuius"
forms["gen_sg_n"] = "cuiuscuius"
forms["gen_pl_m"] = "quōrumquōrum"
forms["gen_pl_f"] = "quārumquārum"
forms["gen_pl_n"] = "quōrumquōrum"
forms["dat_sg_m"] = "cuicui"
forms["dat_sg_f"] = "cuicui"
forms["dat_sg_n"] = "cuicui"
forms["dat_pl_m"] = {"quibusquibus", "quīsquīs"}
forms["dat_pl_f"] = {"quibusquibus", "quīsquīs"}
forms["dat_pl_n"] = {"quibusquibus", "quīsquīs"}
forms["acc_sg_m"] = "quemquem"
forms["acc_sg_f"] = "quamquam"
forms["acc_sg_n"] = {"quidquid", "quicquid"}
forms["acc_pl_m"] = "quōsquōs"
forms["acc_pl_f"] = "quāsquās"
forms["acc_pl_n"] = "quaequae"
forms["abl_sg_m"] = "quōquō"
forms["abl_sg_f"] = "quāquā"
forms["abl_sg_n"] = "quōquō"
forms["abl_pl_m"] = {"quibusquibus", "quīsquīs"}
forms["abl_pl_f"] = {"quibusquibus", "quīsquīs"}
forms["abl_pl_n"] = {"quibusquibus", "quīsquīs"}
forms["voc_sg_m"] = "quisquis"
forms["voc_sg_f"] = "quisquis"
forms["voc_sg_n"] = {"quidquid", "quicquid"}
forms["voc_pl_m"] = "quīquī"
forms["voc_pl_f"] = "quaequae"
forms["voc_pl_n"] = "quaequae"
elseif arg1 == "ecquis" then
insert_if_not(data.title, "pronombre interrogativo")
forms["nom_sg_m"] = {"ecquis", "ecquī"}
forms["nom_sg_f"] = {"ecqua", "ecquae"}
forms["nom_sg_n"] = "ecquid"
forms["nom_pl_m"] = "ecquī"
forms["nom_pl_f"] = "ecquae"
forms["nom_pl_n"] = {"ecqua", "ecquae"}
forms["gen_sg_m"] = "eccuius"
forms["gen_sg_f"] = "eccuius"
forms["gen_sg_n"] = "eccuius"
forms["dat_sg_m"] = "eccui"
forms["dat_sg_f"] = "eccui"
forms["dat_sg_n"] = "eccui"
forms["acc_sg_m"] = "ecquem"
forms["acc_sg_f"] = "ecquam"
forms["acc_sg_n"] = "ecquod"
forms["acc_pl_m"] = "ecquōs"
forms["acc_pl_f"] = "ecquās"
forms["acc_pl_n"] = {"ecqua", "ecquae"}
forms["abl_sg_m"] = {"ecquō", "ecquī"}
forms["abl_sg_f"] = {"ecquā", "ecquī"}
forms["abl_sg_n"] = {"ecquō", "ecquī"}
elseif arg1 == "quīdam" then
insert_if_not(data.title, "pronombre indefinido")
forms["nom_sg_m"] = "quīdam"
forms["nom_sg_f"] = "quaedam"
forms["nom_sg_n"] = "quiddam"
forms["nom_pl_m"] = {"quīdam", "quēsdam{†}"}
forms["nom_pl_f"] = "quaedam"
forms["nom_pl_n"] = "quaedam"
forms["gen_sg_m"] = {"cuiusdam", "quoiusdam{†}"}
forms["gen_sg_f"] = {"cuiusdam", "quoiusdam{†}"}
forms["gen_sg_n"] = {"cuiusdam", "quoiusdam{†}"}
forms["gen_pl_m"] = {"quōrundam", "quōrumdam"}
forms["gen_pl_f"] = {"quārundam", "quārumdam"}
forms["gen_pl_n"] = {"quōrundam", "quōrumdam"}
forms["dat_sg_m"] = {"cuidam", "quoidam{†}"}
forms["dat_sg_f"] = {"cuidam", "quoidam{†}"}
forms["dat_sg_n"] = {"cuidam", "quoidam{†}"}
forms["dat_pl_m"] = {"quibusdam", "quīsdam{†}"}
forms["dat_pl_f"] = {"quibusdam", "quīsdam{†}"}
forms["dat_pl_n"] = {"quibusdam", "quīsdam{†}"}
forms["acc_sg_m"] = {"quendam", "quemdam"}
forms["acc_sg_f"] = {"quandam", "quamdam"}
forms["acc_sg_n"] = "quiddam"
forms["acc_pl_m"] = {"quōsdam", "quēsdam{†}"}
forms["acc_pl_f"] = "quāsdam"
forms["acc_pl_n"] = "quaedam"
forms["abl_sg_m"] = "quōdam"
forms["abl_sg_f"] = "quādam"
forms["abl_sg_n"] = "quōdam"
forms["abl_pl_m"] = {"quibusdam", "quīsdam{†}"}
forms["abl_pl_f"] = {"quibusdam", "quīsdam{†}"}
forms["abl_pl_n"] = {"quibusdam", "quīsdam{†}"}
elseif arg1 == "nēmō" then
insert_if_not(data.title, "Determinante y pronombre, concordancia en negativo")
forms["nom_sg_m"] = "nēmō"
forms["nom_sg_f"] = "nēmō"
forms["gen_sg_m"] = {"nūllī̆us", "nēminis{R}"}
forms["gen_sg_f"] = {"nūllī̆us", "nēminis{R}"}
forms["dat_sg_m"] = "nēminī"
forms["dat_sg_f"] = "nēminī"
forms["acc_sg_m"] = "nēminem"
forms["acc_sg_f"] = "nēminem"
forms["abl_sg_m"] = {"nūllō", "nēmine{R}"}
forms["abl_sg_f"] = {"nūllā", "nēmine{R}"}
else
error('adjective ' .. arg1 .. ' not recognized')
end
end
local function extract_base(lemma, ending)
if ending:find("(", nil, true) then
return match(lemma, ending)
end
return match(lemma, "^(.*)" .. ending .. "$")
end
local function get_noun_subtype_by_ending(lemma, stem2, decltype, specified_subtypes,
endings_and_subtypes)
for _, ending_and_subtypes in ipairs(endings_and_subtypes) do
local ending = ending_and_subtypes[1]
local subtypes = ending_and_subtypes[2]
local not_this_subtype = false
if (
specified_subtypes.pl and not contains(subtypes, "pl") or
contains(subtypes, "both") and not specified_subtypes.both
) then
-- We now require that plurale tantum terms specify a plural-form lemma.
-- The autodetected subtypes will include 'pl' for such lemmas; if not,
-- we fail this entry. Additionally, if the rule contains 'both', it
-- must be explicitly specified to match.
not_this_subtype = true
else
for _, subtype in ipairs(subtypes) do
-- A subtype is directly canceled by specifying -SUBTYPE.
-- In addition, M or F as a subtype is canceled by N, and
-- vice-versa, but M doesn't cancel F or vice-versa; instead,
-- we simply ignore the conflicting gender specification when
-- constructing the combination of specified and inferred subtypes.
-- The reason for this is that neuters have distinct declensions
-- from masculines and feminines, but masculines and feminines have
-- the same declension, and various nouns in Latin that are
-- normally masculine are exceptionally feminine and vice-versa
-- (nauta, agricola, fraxinus, malus "apple tree", manus, rēs,
-- etc.).
--
-- In addition, sg as a subtype is canceled by pl and vice-versa.
-- It's also possible to specify both, which will override sg but
-- not cancel it (in the sense that it won't prevent the relevant
-- rule from matching). For example, there's a rule specifying that
-- lemmas beginning with a capital letter and ending in -ius take
-- the ius.voci.sg subtypes. Specifying such a lemma with the
-- subtype both will result in the ius.voci.both subtypes, whereas
-- specifying such a lemma with the subtype pl will cause this rule
-- not to match, and it will fall through to a less specific rule
-- that returns just the ius subtype, which will be combined with
-- the explicitly specified pl subtype to produce ius.pl.
if specified_subtypes["-" .. subtype] or
subtype == "N" and (specified_subtypes.M or specified_subtypes.F) or
(subtype == "M" or subtype == "F") and specified_subtypes.N or
subtype == "sg" and specified_subtypes.pl or
subtype == "pl" and specified_subtypes.sg then
not_this_subtype = true
break
end
end
end
if not not_this_subtype then
if type(ending) == "table" then
local lemma_ending = ending[1]
local stem2_ending = ending[2]
local base = extract_base(lemma, lemma_ending)
if base and base .. stem2_ending == stem2 then
return base, stem2, subtypes
end
else
local base = extract_base(lemma, ending)
if base then
return base, stem2, subtypes
end
end
end
end
if decltype then
error("Unrecognized ending for declension-" .. decltype .. " noun: " .. lemma)
end
return lemma, stem2, keys_to_list(specified_subtypes)
end
local patterns = {
{"[mM]a", "%0t"},
{"e", ""},
{"([aoAO])([lr])", "%1" .. MACRON .. "%2"},
{"[eE]l", "%0l"},
{"([mM])en", "%1in"},
{"([tT]ūd)ō", "%1in"},
{"([gG])ō", "%1in"},
{"[ōŌ]", "%1n"},
{"er", "r"},
{"[ēi]s", ""},
{"([āēīōūȳĀĒĪŌŪȲ]n)s", function(v)
return (gsub(toNFD(v), MACRON, "") .. "t")
end},
{"([cC])eps", "%1ipit"},
{"([bp])s", "%1"},
{"us", "or"},
{"s", "t"},
{"ex", "ic"},
{"x", "c"},
}
local function make_stem2(stem)
local n
for _, pattern in ipairs(patterns) do
local key = pattern[1]
stem, n = gsub(stem, key .. "$", pattern[2])
if n > 0 then
-- debug_track("la-utilities/" .. key) REVISAR
return toNFC(stem)
end
end
-- debug_track("la-utilities") REVISAR
return stem
end
local function detect_noun_subtype(lemma, stem2, typ, subtypes)
local base, _
if typ == "1" then
return get_noun_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"ām", {"F", "am"}},
{"ās", {"M", "Greek", "Ma"}},
{"ēs", {"M", "Greek", "Me"}},
{"ē", {"F", "Greek"}},
{"ae", {"F", "pl"}},
{"a", {"F"}},
})
elseif typ == "2" then
local detected_subtypes
lemma, stem2, detected_subtypes = get_noun_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"^(.*r)$", {"M", "er"}},
{"^(.*v)os$", {"M", "vos"}},
{"^(.*v)om$", {"N", "vom"}},
-- If the lemma ends in -os and the user said N or -M, then the
-- following won't apply, and the second (neuter) -os will applly.
{"os", {"M", "Greek"}},
{"os", {"N", "Greek", "us"}},
{"on", {"N", "Greek"}},
-- -ius beginning with a capital letter is assumed a proper name,
-- and takes the voci subtype (vocative in -ī) along with the ius
-- subtype and sg-only. Other nouns in -ius just take the ius
-- subtype. Explicitly specify "sg" so that if .pl is given,
-- this rule won't apply.
{"^(%u.*)ius$", {"M", "ius", "voci", "sg"}},
{"ius", {"M", "ius"}},
{"ium", {"N", "ium"}},
-- If the lemma ends in -us and the user said N or -M, then the
-- following won't apply, and the second (neuter) -us will applly.
{"us", {"M"}},
{"us", {"N", "us"}},
{"um", {"N"}},
{"iī", {"M", "ius", "pl"}},
{"ia", {"N", "ium", "pl"}},
-- If the lemma ends in -ī and the user said N or -M, then the
-- following won't apply, and the second (neuter) -ī will applly.
{"ī", {"M", "pl"}},
{"ī", {"N", "us", "pl"}},
{"oe", {"M", "Greek", "pl"}},
{"a", {"N", "pl"}},
})
stem2 = stem2 or lemma
return lemma, stem2, detected_subtypes
elseif typ == "3" then
if subtypes.pl then
if subtypes.Greek then
base = lemma:match("^(.*)erēs$")
if base then
return base .. "ēr", base .. "er", {"er"}
end
base = lemma:match("^(.*)ontēs$")
if base then
return base .. "ōn", base .. "ont", {"on"}
end
base = lemma:match("^(.*)es$")
if base then
return base, stem2 or base, {}
end
error("Unrecognized ending for declension-3 plural Greek noun: " .. lemma)
end
base = lemma:match("^(.*)ia$")
if base then
return base, stem2 or base, {"N", "I", "pure"}
end
base = lemma:match("^(.*)a$")
if base then
return base, stem2 or base, {"N"}
end
base = lemma:match("^(.*)ēs$")
if base then
return base, stem2 or base, {}
end
error("Unrecognized ending for declension-3 plural noun: " .. lemma)
end
stem2 = stem2 or make_stem2(lemma)
local detected_subtypes
if subtypes.Greek then
base, _, detected_subtypes = get_noun_subtype_by_ending(lemma, stem2, nil, subtypes, {
{{"is", ""}, {"I"}},
{"ēr", {"er"}},
{"ōn", {"on"}},
})
if base then
return lemma, stem2, detected_subtypes
end
return lemma, stem2, {}
end
if not subtypes.N then
base, _, detected_subtypes = get_noun_subtype_by_ending(lemma, stem2, nil, subtypes, {
{{"^(%u.*pol)is$", ""}, {"F", "polis", "sg", "loc"}},
{{"tūdō", "tūdin"}, {"F"}},
{{"tās", "tāt"}, {"F"}},
{{"tūs", "tūt"}, {"F"}},
{{"tiō", "tiōn"}, {"F"}},
{{"siō", "siōn"}, {"F"}},
{{"xiō", "xiōn"}, {"F"}},
{{"gō", "gin"}, {"F"}},
{{"or", "ōr"}, {"M"}},
{{"tr[iī]x", "trīc"}, {"F"}},
{{"is", ""}, {"I"}},
{{"^(%l.*)ēs$", ""}, {"I"}},
})
if base then
return lemma, stem2, detected_subtypes
end
end
base, _, detected_subtypes = get_noun_subtype_by_ending(lemma, stem2, nil, subtypes, {
{{"us", "or"}, {"N"}},
{{"us", "er"}, {"N"}},
{{"ma", "mat"}, {"N"}},
{{"men", "min"}, {"N"}},
{{"^(%u.*)e$", ""}, {"N", "sg"}},
{{"e", ""}, {"N", "I", "pure"}},
{{"al", "āl"}, {"N", "I", "pure"}},
{{"ar", "ār"}, {"N", "I", "pure"}},
})
if base then
return lemma, stem2, detected_subtypes
end
return lemma, stem2, {}
elseif typ == "4" then
if subtypes.echo or subtypes.Callisto then
base = lemma:match("^(.*)ō$")
if not base then
error("Declension-4 noun of subtype .echo or .Callisto should end in -ō: " .. lemma)
end
if subtypes.Callisto then
return base, nil, {"F", "sg"}
else
return base, nil, {"F"}
end
end
return get_noun_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"us", {"M"}},
{"ū̆", {"N"}},
{"ūs", {"M", "pl"}},
{"ua", {"N", "pl"}},
})
elseif typ == "5" then
return get_noun_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"iēs", {"F", "i"}},
{"iēs", {"F", "i", "pl"}},
{"ēs", {"F"}},
{"ēs", {"F", "pl"}},
})
elseif typ == "sgpl" then
return lemma, stem2, {}
elseif typ == "irreg" and lemma == "domus" then
-- [[domus]] auto-sets data.loc = true, but we need to know this
-- before declining the noun so we can propagate it to other segments.
return lemma, nil, {"loc"}
elseif typ == "indecl" or typ == "irreg" and (
lemma == "Deus" or match(lemma, "^[IJ]ēs[uū]s$") or
lemma == "Athōs" or lemma == "vēnum"
) then
-- Indeclinable nouns, and certain irregular nouns, set data.num = "sg",
-- but we need to know this before declining the noun so we can
-- propagate it to other segments.
return get_noun_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"", {"both"}},
{"", {"sg"}},
{"", {"pl"}},
})
elseif typ == "indecl" or typ == "irreg" then
return lemma, nil, {}
else
return nil, nil, {}
end
end
-- Given ENDINGS_AND_SUBTYPES (a list of four-tuples of ENDING, RETTYPE,
-- SUBTYPES, PROCESS_RETVAL), check each ENDING in turn against LEMMA and
-- STEM2. If it matches, return a four-tuple BASE, STEM2, RETTYPE, NEW_SUBTYPES
-- where BASE is normally the remainder of LEMMA minus the ending, STEM2 is
-- as passed in, RETTYPE is as passed in, and NEW_SUBTYPES is the same as
-- SUBTYPES minus any subtypes beginning with a hyphen. If no endings match,
-- throw an error if DECLTYPPE is non-nil, mentioning the DECLTYPE
-- (user-specified declension); but if DECLTYPE is nil, just return the tuple
-- nil, nil, nil, nil.
--
-- In order for a given entry to match, ENDING must match and also the subtypes
-- in SUBTYPES (a list) must not be incompatible with the passed-in
-- user-specified subtypes SPECIFIED_SUBTYPES (a set, i.e. a table where the
-- keys are strings and the value is always true). "Incompatible" means that
-- a given SUBTYPE is specified in either one and -SUBTYPE in the other, or
-- that "pl" is found in SPECIFIED_SUBTYPES and not in SUBTYPES.
--
-- The ending spec in ENDINGS_AND_SUBTYPES is one of the following:
--
-- 1. A simple string, e.g. "tūdō", specifying an ending.
-- 2. A regex that should match the entire lemma (it should be anchored at
-- the beginning with ^ and at the end with $), and contains a single
-- capturing group to match the base.
-- 3. A pair {SIMPLE_STRING_OR_REGEX, STEM2_ENDING} where
-- SIMPLE_STRING_OR_REGEX is one of the previous two possibilities and
-- STEM2_ENDING is a string specifying the corresponding ending that must
-- be present in STEM2. If this form is used, the combination of
-- base + STEM2_ENDING must exactly match STEM2 in order for this entry
-- to be considered a match. An example is {"is", ""}, which will match
-- lemma == "follis", stem2 == "foll", but not lemma == "lapis",
-- stem2 == "lapid".
--
-- If PROCESS_STEM2 is given and the returned STEM2 would be nil, call
-- process_stem2(BASE) to get the STEM2 to return.
local function get_adj_type_and_subtype_by_ending(lemma, stem2, decltype,
specified_subtypes, endings_and_subtypes, process_stem2)
for _, ending_and_subtypes in ipairs(endings_and_subtypes) do
local ending = ending_and_subtypes[1]
local rettype = ending_and_subtypes[2]
local subtypes = ending_and_subtypes[3]
local process_retval = ending_and_subtypes[4]
local not_this_subtype = false
if (
specified_subtypes.pl and not contains(subtypes, "pl") or
contains(subtypes, "both") and not specified_subtypes.both
) then
-- We now require that plurale tantum terms specify a plural-form lemma.
-- The autodetected subtypes will include 'pl' for such lemmas; if not,
-- we fail this entry. Additionally, if the rule contains 'both', it
-- must be explicitly specified to match.
not_this_subtype = true
else
for _, subtype in ipairs(subtypes) do
-- A subtype is directly canceled by specifying -SUBTYPE.
if specified_subtypes["-" .. subtype] then
not_this_subtype = true
break
end
-- A subtype is canceled if the user specified SUBTYPE and
-- -SUBTYPE is given in the to-be-returned subtypes.
local must_not_be_present = subtype:match("^%-(.*)$")
if must_not_be_present and specified_subtypes[must_not_be_present] then
not_this_subtype = true
break
end
end
end
if not not_this_subtype then
local base
if type(ending) == "table" then
local lemma_ending = ending[1]
local stem2_ending = ending[2]
base = extract_base(lemma, lemma_ending)
if base and base .. stem2_ending ~= stem2 then
base = nil
end
else
base = extract_base(lemma, ending)
end
if base then
-- Remove subtypes of the form -SUBTYPE from the subtypes
-- to be returned.
local new_subtypes = {}
for _, subtype in ipairs(subtypes) do
if subtype:sub(1, 1) ~= "-" then
insert(new_subtypes, subtype)
end
end
if process_retval then
base, stem2 = process_retval(base, stem2)
end
if process_stem2 then
stem2 = stem2 or process_stem2(base)
end
return base, stem2, rettype, new_subtypes
end
end
end
if not decltype then
return lemma, stem2, nil, keys_to_list(specified_subtypes)
elseif decltype == "" then
error("Unrecognized ending for adjective: " .. lemma)
else
error("Unrecognized ending for declension-" .. decltype .. " adjective: " .. lemma)
end
end
-- Autodetect the type and subtype of an adjective given all the information
-- specified by the user: lemma, stem2, declension type and specified subtypes.
-- Four values are returned: the lemma base (i.e. the stem of the lemma, as
-- required by the declension functions), the value of stem2 to pass to the
-- declension function, the declension type and the autodetected subtypes.
-- Note that this will not detect a given subtype if -SUBTYPE is specified for
-- any subtype that would be returned, or if SUBTYPE is specified and -SUBTYPE
-- is among the subtypes that would be returned (such subtypes are filtered out
-- of the returned subtypes).
local function detect_adj_type_and_subtype(lemma, stem2, typ, subtypes)
local function base_as_stem2(base, stem2)
return base, base
end
local function constant_base(baseval)
return function(base, stem2)
return baseval, nil
end
end
local function decl12_stem2(base)
return base
end
local function decl3_stem2(base)
return make_stem2(base)
end
local decl12_entries = {
{"us", "1&2+", {}},
{"a", "1&2+", {}},
{"um", "1&2+", {}},
{"ī", "1&2+", {"pl"}},
{"ae", "1&2+", {"pl"}},
{"a", "1&2+", {"pl"}},
-- Nearly all -os adjectives are greekA
{"os", "1&2+", {"greekA", "-greekE"}},
{"os", "1&2+", {"greekE", "-greekA"}},
{"ē", "1&2+", {"greekE", "-greekA"}},
{"on", "1&2+", {"greekA", "-greekE"}},
{"on", "1&2+", {"greekE", "-greekA"}},
{"^(.*er)$", "1&2+", {"er"}},
{"^(.*ur)$", "1&2+", {"er"}},
{"^(h)ic$", "1&2+", {"ic"}},
}
local decl3_entries = {
{"^(.*er)$", "3-3+", {"I"}},
{"^(.*er)$", "3-3+", {}},
{"is", "3-2+", {"I"}},
{"is", "3-2+", {}},
{"e", "3-2+", {"I"}},
{"e", "3-2+", {}},
{"^(.*[ij])or$", "3-C+", {"abl_e_i", "-abl_i_e"}},
{"^(.*[ij])or$", "3-C+", {}},
{"^(min)or$", "3-C+", {"abl_e_i", "-abl_i_e"}},
{"^(min)or$", "3-C+", {}},
{"^(.*trīx)$", "3-def+", {"trix", "abl_i_e", "-abl_e_i"}},
{"^(.*trīx)$", "3-def+", {"trix"}},
{"^(.*tor)$", "3-def+", {"tor", "abl_i_e", "-abl_e_i"}},
{"^(.*tor)$", "3-def+", {"tor"}},
-- Detect -ēs as 3-1 without auto-inferring .pl if .pl
-- not specified. If we don't do this, the later entry for
-- -ēs will auto-infer .pl whenever -ēs is specified (which
-- won't work for adjectives like quadripēs, volucripēs).
-- Essentially, for declension-3 adjectives, we require that
-- .pl is given if the lemma is plural.
--
-- Most 3-1 adjectives are i-stem (e.g. audāx) so we require -I
-- to be given with non-i-stem adjectives. The first entry below
-- will apply when -I isn't given, the second when it is given.
{"^(.*ēs)$", "3-1+", {"I", "abl_i_e", "-abl_e_i"}},
{"^(.*ēs)$", "3-1+", {"I"}},
{"^(.*ēs)$", "3-1+", {"par", "abl_i_e", "-abl_e_i"}},
{"^(.*ēs)$", "3-1+", {"par"}},
{"^(.*[ij])ōrēs$", "3-C+", {"pl"}},
{"^(min)ōrēs$", "3-C+", {"pl"}},
-- If .pl with -ēs, we don't know if the adjective is 3-1, 3-2
-- or 3-3. Since 3-2 is probably the most common, we infer it
-- (as well as the fact that these adjectives *are* in a sense
-- 3-2 since they have a distinct neuter in -(i)a. Note that
-- we have two entries here; the first one will apply unless
-- -I is given, and will infer an i-stem adjective; the second
-- one will apply otherwise (and infer a non-i-stem 3-1 adjective).
{"ēs", "3-2+", {"pl", "I"}, base_as_stem2},
{"ēs", "3-1+", {"pl", "par"}, base_as_stem2},
-- Same for neuters.
{"ia", "3-2+", {"pl", "I"}, base_as_stem2},
{"a", "3-1+", {"pl", "par"}, base_as_stem2},
-- As above for -ēs but for miscellaneous singulars.
{"", "3-1+", {"I", "abl_i_e", "-abl_e_i"}},
{"", "3-1+", {"I"}},
{"", "3-1+", {"par", "abl_i_e", "-abl_e_i"}},
{"", "3-1+", {"par"}},
}
local function get_subtypes_and_endings(typ, f)
local subtypes_and_endings = {}
for _, v in ipairs(decl3_entries) do
if f(v) then
v = deep_copy(v)
v[2] = typ
insert(subtypes_and_endings, v)
end
end
return subtypes_and_endings
end
local function compare(spec)
return spec[2] == typ
end
if typ == "+" then
local base, new_stem2, rettype, new_subtypes = get_adj_type_and_subtype_by_ending(lemma, stem2, nil, subtypes, decl12_entries, decl12_stem2)
if rettype then
return base, new_stem2, rettype, new_subtypes
else
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, decl3_entries, decl3_stem2)
end
elseif typ == "3+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, decl3_entries, decl3_stem2)
elseif typ == "1&2+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, decl12_entries, decl12_stem2)
elseif typ == "1-1+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"a", typ, {}},
{"ae", typ, {"pl"}},
})
elseif typ == "2-2+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"us", typ, {}},
{"um", typ, {}},
{"ī", typ, {"pl"}},
{"a", typ, {"pl"}},
{"os", typ, {"greek"}},
{"on", typ, {"greek"}},
{"oe", typ, {"greek", "pl"}},
})
elseif typ == "3-1+" then
-- Use the specs from `decl3_entries`, but add the two i-stem 3-2+ specs when plural-only, as they're the same when 3-1+.
local subtypes_and_endings = get_subtypes_and_endings(typ, function(spec)
local spec1, spec2 = spec[1], spec[2]
return spec2 == typ or (spec2 == "3-2+" and spec1 == "ēs" or spec1 == "ia")
end)
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, subtypes_and_endings, decl3_stem2)
elseif typ == "3-def+" then
-- Like 3-1+ but defective in gender
local subtypes_and_endings = get_subtypes_and_endings(typ, compare)
insert(subtypes_and_endings, {"", typ, {"I"}})
insert(subtypes_and_endings, {"", typ, {"par"}})
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, subtypes_and_endings, decl3_stem2)
elseif typ == "3-2+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"is", typ, {}},
{"e", typ, {}},
-- Detect -ēs as 3-2 without auto-inferring .pl if .pl
-- not specified. If we don't do this, the later entry for
-- -ēs will auto-infer .pl whenever -ēs is specified (which
-- won't work for adjectives like isoscelēs). Essentially,
-- for declension-3 adjectives, we require that .pl is given
-- if the lemma is plural.
{"ēs", typ, {}},
{"ēs", typ, {"pl"}},
{"ia", typ, {"pl"}},
}, decl3_stem2)
elseif typ == "3-3+" or typ == "3-P+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"ēs", typ, {"pl"}, base_as_stem2},
{"ia", typ, {"pl"}, base_as_stem2},
{"", typ, {}},
}, decl3_stem2)
elseif typ == "3-C+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, get_subtypes_and_endings(typ, compare), decl3_stem2)
elseif typ == "irreg+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"^(duo)$", typ, {"pl"}},
{"^(ambō)$", typ, {"pl"}},
{"^(mīll?ia)$", typ, {"N", "pl"}, constant_base("mīlle")},
-- match ea
{"^(ea)$", typ, {}, constant_base("is")},
-- match id
{"^(id)$", typ, {}, constant_base("is")},
-- match plural eī, iī
{"^([ei]ī)$", typ, {"pl"}, constant_base("is")},
-- match plural ea, eae
{"^(eae?)$", typ, {"pl"}, constant_base("is")},
-- match eadem
{"^(eadem)$", typ, {}, constant_base("īdem")},
-- match īdem, idem
{"^([īi]dem)$", typ, {}, constant_base("īdem")},
-- match plural īdem
{"^(īdem)$", typ, {"pl"}},
-- match plural eadem, eaedem
{"^(eae?dem)$", typ, {"pl"}, constant_base("īdem")},
-- match illa, ipsa, ista; it doesn't matter if we overmatch because
-- we'll get an error as we use the stem itself in the returned base
{"^(i[lps][lst])a$", typ, {}, function(base, stem2) return base .. "e", nil end},
-- match illud, istud; as above, it doesn't matter if we overmatch
{"^(i[ls][lt])ud$", typ, {}, function(base, stem2) return base .. "e", nil end},
-- match ipsum
{"^(ipsum)$", typ, {}, constant_base("ipse")},
-- match plural illī, ipsī, istī; as above, it doesn't matter if we
-- overmatch
{"^(i[lps][lst])ī$", typ, {"pl"}, function(base, stem2) return base .. "e", nil end},
-- match plural illa, illae, ipsa, ipsae, ista, istae; as above, it
-- doesn't matter if we overmatch
{"^(i[lps][lst])ae?$", typ, {"pl"}, function(base, stem2) return base .. "e", nil end},
-- Detect quī as non-plural unless .pl specified.
{"^(quī)$", typ, {}},
-- Otherwise detect quī as plural.
{"^(quī)$", typ, {"pl"}},
-- Same for quae.
{"^(quae)$", typ, {}, constant_base("quī")},
{"^(quae)$", typ, {"pl"}, constant_base("quī")},
{"^(quid)$", typ, {}, constant_base("quis")},
{"^(quod)$", typ, {}, constant_base("quī")},
{"^(qui[cd]quid)$", typ, {}, constant_base("quisquis")},
{"^(quīquī)$", typ, {"pl"}, constant_base("quisquis")},
{"^(quaequae)$", typ, {"pl"}, constant_base("quisquis")},
-- match all remaining lemmas in lemma form
{"", typ, {}},
})
elseif typ == "indecl+" then
return get_adj_type_and_subtype_by_ending(lemma, stem2, typ, subtypes, {
{"", typ, {"both"}},
{"", typ, {"sg"}},
{"", typ, {"pl"}},
})
else -- 0+
return lemma, nil, typ, {}
end
end
local noun_lb = {
nom_sg = "sg.",
gen_sg = "sg.",
dat_sg = "sg.",
acc_sg = "sg.",
abl_sg = "sg.",
voc_sg = "sg.",
loc_sg = "sg.",
nom_pl = "pl.",
gen_pl = "pl.",
dat_pl = "pl.",
acc_pl = "pl.",
abl_pl = "pl.",
voc_pl = "pl.",
loc_pl = "pl."
}
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"] = {},
["num"] = {por_defecto = ""},
["núm"] = {alias_de = "num"},
["nota"] = {},
}
for form,_ in pairs(noun_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)
local tpalabras = {}
for _,p in ipairs(args) do
p = match(p, "^(.-);") or p
local a, b = match(p, "^(.-)%.(.*)$")
assert(b, "error en especificaciones de palabra")
local r1 = match(a, "^([^/]+)/")
if not r1 then
r1 = a
end
if r1 == "idem" or r1 == "īdem" then -- REVISAR: parche para idem que internamente lo declina como si fuera "i"
insert(tpalabras, "ī")
else
insert(tpalabras, r1)
end
end
local palabras, separadores = separar_palabras(title, concat(tpalabras, "-"))
local L = #palabras
local M = 1
local declinfo
local titles = {}
local cats = {}
local genero
local nosg, nopl = true, true
for _,arg in ipairs(args) do
local formas = {}
for subarg in gsplit(arg, ";") do
local types = {}
local a, b = match(subarg, "^(.-)%.(.*)$")
assert(b, "error en especificaciones de palabra")
local c, d = match(b, "^(.-)%.(.*)$")
if d then
for spec in gsplit(d, "%.") do
spec = gsub(spec, "(.)%-", "%1_")
types[spec] = true
end
end
c = c or b
local r = split(a, "/")
local r1, r2, detected_subtypes = detect_noun_subtype(r[1], r[2], c, types)
for _, subtype in ipairs(detected_subtypes) do
if types["-" .. subtype] then
-- if a "cancel subtype" spec is given, remove the cancel spec
-- and don't apply the subtype
types["-" .. subtype] = nil
elseif (subtype == "M" or subtype == "F" or subtype == "N") and
(types.M or types.F or types.N) then
-- if gender already specified, don't create conflicting gender spec
elseif (subtype == "sg" or subtype == "pl" or subtype == "both") and
(types.sg or types.pl or types.both) then
-- if number restriction already specified, don't create conflicting
-- number restriction spec
else
types[subtype] = true
end
end
if not genero then
if types.M then
genero = "m"
end
if types.N then
genero = "n"
end
if types.F then
genero = "f"
end
end
local es_adj
if not r1 and genero then
local typ
r1, r2, typ, detected_subtypes = detect_adj_type_and_subtype(r[1], r[2], c, types)
if r1 then
c = typ
es_adj = true
end
end
assert(r1, "forma no reconocida: "..r[1])
local cb = es_adj and adj_decl[c] or noun_decl[c]
assert(cb, "Especifique el tipo de sustantivo correcto en el primer parámetro")
local data = {forms={}, types=types, pos="", subtitles="", notes="", categories=cats, title=titles, loc=types.loc, num=args.num}
cb(data, {r1, r2})
if es_adj then
local forms_ = {}
for form,arr in pairs(data.forms) do
local f1, f2 = form:match("^(.*)(_"..genero..")$")
if f1 then
forms_[f1] = arr
end
end
data.forms = forms_
end
if not types.sg then
nopl = false
end
if not types.pl then
nosg = false
end
if types.sg then
for key,_ in pairs(data.forms) do
if key:find("_pl") then
data.forms[key] = {}
end
end
end
if types.pl then
for key,_ in pairs(data.forms) do
if key:find("_sg") then
data.forms[key] = {}
end
end
end
merge_forms(formas, data.forms, noun_lb)
end
if not declinfo then
declinfo = formas
else
declinfo = combinar_copulativa(declinfo, formas, separadores[M])
M = M + 1
end
end
if declinfo["loc_sg"] and #declinfo["loc_sg"] == 0 then
declinfo["loc_sg"] = nil
end
if declinfo["loc_pl"] and #declinfo["loc_pl"] == 0 then
declinfo["loc_pl"] = nil
end
if nosg == false then
nosg = find(args["num"], "p")
end
if nopl == false then
nopl = find(args["num"], "s")
end
local forms = sobreescribir_formas(declinfo, args, false, {})
comprobar_defectivo(forms, {})
forms = desactivar_formas(forms,
function (form)
return (form:find("pl$") and nopl) or (form:find("sg$") and nosg)
end
)
local raiz_nom = f(forms["nom_sg"][1] or forms["nom_pl"][1] or "?")
local raiz_gen = f(forms["gen_sg"][1] or forms["gen_pl"][1] or "?")
forms = agregar_enlaces(forms, title, normalizar_enlace)
forms = formatear_formas(forms, noun_lb)
local t = {}
insert(t, {{""}, {"Singular"}, {"Plural"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Nominativo", header=true, color=COLOR_H}, forms["nom_sg"], forms["nom_pl"]})
insert(t, {{"Genitivo", header=true, color=COLOR_H}, forms["gen_sg"], forms["gen_pl"]})
insert(t, {{"Dativo", header=true, color=COLOR_H}, forms["dat_sg"], forms["dat_pl"]})
insert(t, {{"Acusativo", header=true, color=COLOR_H}, forms["acc_sg"], forms["acc_pl"]})
insert(t, {{"Ablativo", header=true, color=COLOR_H}, forms["abl_sg"], forms["abl_pl"]})
insert(t, {{"Vocativo", header=true, color=COLOR_H}, forms["voc_sg"], forms["voc_pl"]})
if (forms["loc_sg"] and forms["loc_sg"][1]) or (forms["loc_pl"] and forms["loc_pl"][1]) then
insert(t, {{"Locativo", header=true, color=COLOR_H}, forms["loc_sg"], forms["loc_pl"]})
end
insert(t, {{args["nota"] or "", colspan=3}})
return renderizar_tabla(
frame,
"'''Declinación de ''"..raiz_nom..", "..raiz_gen.."'''''  tipo: "..concat(titles, ", "),
t,
ns == 0 and cats or {}
)
end
local adj_lb = {
nom_sg_m = "m.",
nom_sg_n = "n.",
nom_sg_f = "f.",
nom_pl_m = "m.",
nom_pl_n = "n.",
nom_pl_f = "f.",
gen_sg_m = "m.",
gen_sg_n = "n.",
gen_sg_f = "f.",
gen_pl_m = "m.",
gen_pl_n = "n.",
gen_pl_f = "f.",
dat_sg_m = "m.",
dat_sg_n = "n.",
dat_sg_f = "f.",
dat_pl_m = "m.",
dat_pl_n = "n.",
dat_pl_f = "f.",
acc_sg_m = "m.",
acc_sg_n = "n.",
acc_sg_f = "f.",
acc_pl_m = "m.",
acc_pl_n = "n.",
acc_pl_f = "f.",
abl_sg_m = "m.",
abl_sg_n = "n.",
abl_sg_f = "f.",
abl_pl_m = "m.",
abl_pl_n = "n.",
abl_pl_f = "f.",
voc_sg_m = "m.",
voc_sg_n = "n.",
voc_sg_f = "f.",
voc_pl_m = "m.",
voc_pl_n = "n.",
voc_pl_f = "f.",
}
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] = {requerido=true},
["alt"] = {},
["num"] = {por_defecto = ""},
["núm"] = {alias_de="num"},
["gen"] = {por_defecto="mfn"},
["nota"] = {},
}
for form,_ in pairs(adj_lb) do
params[form] = {lista=true}
end
params["dat_pl"] = {lista=true}
params["abl_pl"] = {lista=true}
params["loc_pl"] = {lista=true}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
if args["dat_pl"][1] then
args["dat_pl_m"] = deep_copy(args["dat_pl"])
args["dat_pl_n"] = deep_copy(args["dat_pl"])
args["dat_pl_f"] = deep_copy(args["dat_pl"])
end
if args["abl_pl"][1] then
args["abl_pl_m"] = deep_copy(args["abl_pl"])
args["abl_pl_n"] = deep_copy(args["abl_pl"])
args["abl_pl_f"] = deep_copy(args["abl_pl"])
end
if args["loc_pl"][1] then
args["loc_pl_m"] = deep_copy(args["loc_pl"])
args["loc_pl_n"] = deep_copy(args["loc_pl"])
args["loc_pl_f"] = deep_copy(args["loc_pl"])
end
args["dat_pl"] = nil
args["abl_pl"] = nil
args["loc_pl"] = nil
assert(not find(title, " "), "locuciones no soportadas aún") -- REVISAR
local tpalabras = {}
for _,p in ipairs(args) do
p = match(p, "^(.-);") or p
local a, b = match(p, "^(.-)%.(.*)$")
assert(b, "error en especificaciones de palabra")
local r1 = match(a, "^([^/]+)/")
if not r1 then
r1 = a
end
if r1 == "idem" or r1 == "īdem" then -- REVISAR: parche para idem que internamente lo declina como si fuera "i"
insert(tpalabras, "ī")
else
insert(tpalabras, r1)
end
end
local palabras, separadores = separar_palabras(title, concat(tpalabras, "-"))
local L = #palabras
local M = 1
local declinfo
local titles = {}
local cats = {}
local nosg, nopl = true, true
for _,arg in ipairs(args) do
local formas = {}
for subarg in gsplit(arg, ";") do
local types = {}
local a, b = match(subarg, "^(.-)%.(.*)$")
a = a or subarg
b = b or "+"
local c, d = match(b, "^(.-)%.(.*)$")
if d then
for spec in gsplit(d, "%.") do
spec = gsub(spec, "(.)%-", "%1_")
types[spec] = true
end
end
c = c or b
local r = split(a, "/")
local r1, r2, typ, detected_subtypes = detect_adj_type_and_subtype(r[1], r[2], c, types)
for _, subtype in ipairs(detected_subtypes) do
if types["-" .. subtype] then
-- if a "cancel subtype" spec is given, remove the cancel spec
-- and don't apply the subtype
types["-" .. subtype] = nil
elseif (subtype == "M" or subtype == "F" or subtype == "N") and
(types.M or types.F or types.N) then
-- if gender already specified, don't create conflicting gender spec
elseif (subtype == "sg" or subtype == "pl" or subtype == "both") and
(types.sg or types.pl or types.both) then
-- if number restriction already specified, don't create conflicting
-- number restriction spec
else
types[subtype] = true
end
end
local cb = adj_decl[typ]
assert(cb, "Especifique el tipo de sustantivo correcto en el primer parámetro")
local data = {forms={}, types=types, pos="", subtitles="", notes="", categories=cats, title=titles, loc=types.loc, num=args.num}
cb(data, {r1, r2})
local formas_ = {} -- necesario crear otro arreglo para no modificar las claves durante la iteración
for form,arr in pairs(data.forms) do
local pref = match(form, "^(.*)_m$")
if pref and not data.forms[pref.."_f"] then
formas_[pref.."_f"] = deep_copy(arr)
end
if pref and not data.forms[pref.."_n"] then
formas_[pref.."_n"] = deep_copy(arr)
end
formas_[form] = arr
end
data.forms = formas_
if not types.sg then
nopl = false
end
if not types.pl then
nosg = false
end
if types.sg then
for key,_ in pairs(data.forms) do
if key:find("_pl") then
data.forms[key] = {}
end
end
end
if types.pl then
for key,_ in pairs(data.forms) do
if key:find("_sg") then
data.forms[key] = {}
end
end
end
merge_forms(formas, data.forms, adj_lb)
end
if not declinfo then
declinfo = formas
else
declinfo = combinar_copulativa(declinfo, formas, separadores[M])
M = M + 1
end
end
if nosg == false then
nosg = find(args["num"], "p")
end
if nopl == false then
nopl = find(args["num"], "s")
end
local m = find(args["gen"], "m")
local fem = find(args["gen"], "f")
local n = find(args["gen"], "n")
local forms = sobreescribir_formas(declinfo, args, false, {}, adj_lb)
comprobar_defectivo(forms)
forms = desactivar_formas(forms,
function (form)
return (form:find("pl") and nopl) or (form:find("sg") and nosg) or (form:find("m$") and not m) or (form:find("f$") and not fem) or (form:find("n$") and not n)
end
)
local raiz_m = f(forms["nom_sg_m"][1] or forms["nom_pl_m"][1] or "?")
local raiz_f = f(forms["nom_sg_f"][1] or forms["nom_pl_f"][1] or "?")
local raiz_n = f(forms["nom_sg_n"][1] or forms["nom_pl_n"][1] or "?")
forms = agregar_enlaces(forms, title, normalizar_enlace)
forms = formatear_formas(forms, adj_lb)
local t = {}
insert(t, {{"Singular", colspan=4}, header=true, color=COLOR_H})
insert(t, {{""}, {"Masculino"}, {"Femenino"}, {"Neutro"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Nominativo", header=true, color=COLOR_H}, forms["nom_sg_m"], forms["nom_sg_f"], forms["nom_sg_n"]})
insert(t, {{"Genitivo", header=true, color=COLOR_H}, forms["gen_sg_m"], forms["gen_sg_f"], forms["gen_sg_n"]})
insert(t, {{"Dativo", header=true, color=COLOR_H}, forms["dat_sg_m"], forms["dat_sg_f"], forms["dat_sg_n"]})
insert(t, {{"Acusativo", header=true, color=COLOR_H}, forms["acc_sg_m"], forms["acc_sg_f"], forms["acc_sg_n"]})
insert(t, {{"Ablativo", header=true, color=COLOR_H}, forms["abl_sg_m"], forms["abl_sg_f"], forms["abl_sg_n"]})
insert(t, {{"Vocativo", header=true, color=COLOR_H}, forms["voc_sg_m"], forms["voc_sg_f"], forms["voc_sg_n"]})
insert(t, {{"Plural", colspan=4, header=true, color=COLOR_H}})
insert(t, {{""}, {"Masculino"}, {"Femenino"}, {"Neutro"}, header=true, color=COLOR_H, class="pc"})
insert(t, {{"Nominativo", header=true, color=COLOR_H}, forms["nom_pl_m"], forms["nom_pl_f"], forms["nom_pl_n"]})
insert(t, {{"Genitivo", header=true, color=COLOR_H}, forms["gen_pl_m"], forms["gen_pl_f"], forms["gen_pl_n"]})
insert(t, {{"Dativo", header=true, color=COLOR_H}, forms["dat_pl_m"], forms["dat_pl_f"], forms["dat_pl_n"]})
insert(t, {{"Acusativo", header=true, color=COLOR_H}, forms["acc_pl_m"], forms["acc_pl_f"], forms["acc_pl_n"]})
insert(t, {{"Ablativo", header=true, color=COLOR_H}, forms["abl_pl_m"], forms["abl_pl_f"], forms["abl_pl_n"]})
insert(t, {{"Vocativo", header=true, color=COLOR_H}, forms["voc_pl_m"], forms["voc_pl_f"], forms["voc_pl_n"]})
insert(t, {{args["nota"] or "", colspan=4}})
return renderizar_tabla(
frame,
"'''Declinación de ''"..raiz_m..", "..raiz_f..", "..raiz_n.."'''''  tipo: "..concat(titles, ", "),
t,
ns == 0 and cats or {}
)
end
local EGO, TU, IS, NOS, VOS, EI = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"ego", "tū", "is, ea, id", "nōs", "vōs", "eī, eae, ea"}
local PRONOMBRES_SUBJ = {"ut ego", "ut tū", "ut is, ut ea, ut id", "ut nōs", "ut vōs", "ut eī, ut eae, ut ea"}
local PRONOMBRES_IMP = {"―", "(tū)", "(is, ea, id)", "―", "(vōs)", "(eī, eae, ea)"}
local IMPERSONALES = {"", "", "(id)", "", "", ""}
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 IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
end
if find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local sufijos = {
["1"] = {
inf_act = {"āre","isse"},
inf_pas = {"ārī"},
part_act = {"āns","ūrus"},
part_pas = {"andus","us"},
ger = {"andī","andō","andum"},
sup = {"um","ū"},
ind_pres = {"ō","ās","at","āmus","ātis","ant"},
ind_imp = {"ābam","ābās","ābat","ābāmus","ābātis","ābant"},
ind_perf = {"ī","istī","it","imus","istis","ērunt",
nil,nil,nil,nil,nil,"ēre"},
ind_pluperf = {"eram","erās","erat","erāmus","erātis","erant"},
ind_fut = {"ābō","ābis","ābit","ābimus","ābitis","ābunt"},
ind_fut_perf = {"erō","eris","erit","erimus","eritis","erint"},
ind_fut_sig = {"ō","is","it","imus","itis","int"},
ind_pres_pas = {"or","āris","ātur","āmur","āminī","antur",
nil,"āre"},
ind_imp_pas = {"ābar","ābāris","ābātur","ābāmur","ābāminī","ābantur",
nil,"ābāre"},
ind_fut_pas = {"ābor","āberis","ābitur","ābimur","ābiminī","ābuntur",
nil,"ābere"},
subj_pres = {"em","ēs","et","ēmus","ētis","ent"},
subj_imp = {"ārem","ārēs","āret","ārēmus","ārētis","ārent"},
subj_perf = {"erim","erīs","erit","erīmus","erītis","erint"},
subj_pluperf = {"issem","issēs","isset","issēmus","issētis","issent"},
subj_aor_sig = {"im","īs","īt","īmus","ītis","int"},
subj_pres_pas = {"er","ēris","ētur","ēmur","ēminī","entur",
nil,"ēre"},
subj_imp_pas = {"ārer","ārēris","ārētur","ārēmur","ārēminī","ārentur",
nil,"ārēre"},
imper_pres = {nil,"ā",nil,nil,"āte",nil},
imper_fut = {nil,"ātō","ātō",nil,"ātōte","antō"},
imper_pres_pas = {nil,"āre",nil,nil,"āminī",nil},
imper_fut_pas = {nil,"ātor","ātor",nil,nil,"antor"},
},
["2"] = {
inf_act = {"ēre","isse"},
inf_pas = {"ērī"},
part_act = {"ēns","ūrus"},
part_pas = {"endus","us"},
ger = {"endī","endō","endum"},
sup = {"um","ū"},
ind_pres = {"eō","ēs","et","ēmus","ētis","ent"},
ind_imp = {"ēbam","ēbās","ēbat","ēbāmus","ēbātis","ēbant"},
ind_perf = {"ī","istī","it","imus","istis","ērunt",
nil,nil,nil,nil,nil,"ēre"},
ind_pluperf = {"eram","erās","erat","erāmus","erātis","erant"},
ind_fut = {"ēbō","ēbis","ēbit","ēbimus","ēbitis","ēbunt"},
ind_fut_perf = {"erō","eris","erit","erimus","eritis","erint"},
ind_fut_sig = {"ō","is","it","imus","itis","int"},
ind_pres_pas = {"eor","ēris","ētur","ēmur","ēminī","entur",
nil,"ēre"},
ind_imp_pas = {"ēbar","ēbāris","ēbātur","ēbāmur","ēbāminī","ēbantur",
nil,"ēbāre"},
ind_fut_pas = {"ēbor","ēberis","ēbitur","ēbimur","ēbiminī","ēbuntur",
nil,"ēbere"},
subj_pres = {"eam","eās","eat","eāmus","eātis","eant"},
subj_imp = {"ērem","ērēs","ēret","ērēmus","ērētis","ērent"},
subj_perf = {"erim","erīs","erit","erīmus","erītis","erint"},
subj_pluperf = {"issem","issēs","isset","issēmus","issētis","issent"},
subj_aor_sig = {"im","īs","īt","īmus","ītis","int"},
subj_pres_pas = {"ear","eāris","eātur","eāmur","eāminī","eantur",
nil,"eāre"},
subj_imp_pas = {"ērer","ērēris","ērētur","ērēmur","ērēminī","ērentur",
nil,"ērēre"},
imper_pres = {nil,"ē",nil,nil,"ēte",nil},
imper_fut = {nil,"ētō","ētō",nil,"ētōte","entō"},
imper_pres_pas = {nil,"ēre",nil,nil,"ēminī",nil},
imper_fut_pas = {nil,"ētor","ētor",nil,nil,"entor"},
},
["3"] = { -- 3 (comparar [[capio]] con [[lego]], las raíces con capi- y leg- pero hay que eliminar la doble ii)
inf_act = {"ere","isse"},
inf_pas = {"ī"},
part_act = {"ēns","ūrus"},
part_pas = {"endus","us"},
ger = {"endī","endō","endum"},
sup = {"um","ū"},
ind_pres = {"ō","is","it","imus","itis","unt"},
ind_imp = {"ēbam","ēbās","ēbat","ēbāmus","ēbātis","ēbant"},
ind_perf = {"ī","istī","it","imus","istis","ērunt",
nil,nil,nil,nil,nil,"ēre"},
ind_pluperf = {"eram","erās","erat","erāmus","erātis","erant"},
ind_fut = {"am","ēs","ēt","ēmus","ētis","ent"},
ind_fut_perf = {"erō","eris","erit","erimus","eritis","erint"},
ind_fut_sig = {"ō","is","it","imus","itis","int"},
ind_pres_pas = {"or","eris","itur","imur","iminī","untur",
nil,"ere"},
ind_imp_pas = {"ēbar","ēbāris","ēbātur","ēbāmur","ēbāminī","ēbantur",
nil,"ēbāre"},
ind_fut_pas = {"ar","ēris","ētur","ēmur","ēminī","entur",
nil,"ēre"},
subj_pres = {"am","ās","at","āmus","ātis","ant"},
subj_imp = {"erem","erēs","eret","erēmus","erētis","erent"},
subj_perf = {"erim","erīs","erit","erīmus","erītis","erint"},
subj_pluperf = {"issem","issēs","isset","issēmus","issētis","issent"},
subj_aor_sig = {"im","īs","īt","īmus","ītis","int"},
subj_pres_pas = {"ar","āris","ātur","āmur","āminī","antur",
nil,"āre"},
subj_imp_pas = {"erer","erēris","erētur","erēmur","erēminī","erentur",
nil,"erēre"},
imper_pres = {nil,"e",nil,nil,"ite",nil},
imper_fut = {nil,"itō","itō",nil,"itōte","untō"},
imper_pres_pas = {nil,"ere",nil,nil,"iminī",nil},
imper_fut_pas = {nil,"itor","itor",nil,nil,"untor"},
},
["3/4"] = {
inf_act = {"ere","isse","īre","isse"},
inf_pas = {"ī","īrī"},
part_act = {"ēns","iēns","ūrus"},
part_pas = {"endus","iendus","us"},
ger = {"endī","endō","endum","iendī","iendō","iendum"},
sup = {"um","ū"},
ind_pres = {"ō","is","it","imus","itis","unt",
"iō","īs",nil,"īmus","ītis","iunt"
},
ind_imp = {"ēbam","ēbās","ēbat","ēbāmus","ēbātis","ēbant",
"iēbam","iēbās","iēbat","iēbāmus","iēbātis","iēbant"
},
ind_perf = {"ī","istī","it","imus","istis","ērunt",
nil,nil,nil,nil,nil,"ēre"},
ind_pluperf = {"eram","erās","erat","erāmus","erātis","erant"},
ind_fut = {"am","ēs","ēt","ēmus","ētis","ent",
"iam","iēs","iet","iēmus","iētis","ient"
},
ind_fut_perf = {"erō","eris","erit","erimus","eritis","erint"},
ind_fut_sig = {"ō","is","it","imus","itis","int"},
ind_pres_pas = {"or","eris","itur","imur","iminī","untur",
"ior","ere","ītur","īmur","īminī","iuntur",
nil,"īris",nil,nil,nil,nil,
nil,"īre"
},
ind_imp_pas = {"ēbar","ēbāris","ēbātur","ēbāmur","ēbāminī","ēbantur",
"iēbar","ēbāre","iēbātur","iēbāmur","iēbāminī","iēbantur",
nil,"iēbāris",nil,nil,nil,nil,
nil,"iēbāre"
},
ind_fut_pas = {"ar","ēris","ētur","ēmur","ēminī","entur",
"iar","ēre","iētur","iēmur","iēminī","ientur",
nil,"iēris",nil,nil,nil,nil,
nil,"iēre"
},
subj_pres = {"am","ās","at","āmus","ātis","ant",
"iam","iās","iat","iāmus","iātis","iant",
},
subj_imp = {"erem","erēs","eret","erēmus","erētis","erent",
"īrem","īrēs","īret","īrēmus","īrētis","īrent"
},
subj_perf = {"erim","erīs","erit","erīmus","erītis","erint"},
subj_pluperf = {"issem","issēs","isset","issēmus","issētis","issent"},
subj_aor_sig = {"im","īs","īt","īmus","ītis","int"},
subj_pres_pas = {"ar","āris","ātur","āmur","āminī","antur",
"iar","āre","iātur","iāmur","iāminī","iantur",
nil,"iāris",nil,nil,nil,nil,
nil,"iāre"
},
subj_imp_pas = {"erer","erēris","erētur","erēmur","erēminī","erentur",
"īrer","erēre","īrētur","īrēmur","īrēminī","īrentur",
nil,"īrēris",nil,nil,nil,nil,
nil,"īrēre"
},
imper_pres = {nil,"e",nil,nil,"ite",nil,
nil,"ī",nil,nil,"īte",nil
},
imper_fut = {nil,"itō","itō",nil,"itōte","untō",
nil,"ītō","ītō",nil,"ītōte","iuntō"
},
imper_pres_pas = {nil,"ere",nil,nil,"iminī",nil,
nil,"īre",nil,nil,"īminī",nil
},
imper_fut_pas = {nil,"itor","itor",nil,nil,"untor",
nil,"ītor","ītor",nil,nil,"iuntor"
},
},
["4"] = {
inf_act = {"īre","isse"},
inf_pas = {"īrī"},
part_act = {"iēns","ūrus"},
part_pas = {"iendus","us"},
ger = {"iendī","iendō","iendum"},
sup = {"um","ū"},
ind_pres = {"iō","īs","it","īmus","ītis","iunt"},
ind_imp = {"iēbam","iēbās","iēbat","iēbāmus","iēbātis","iēbant"},
ind_perf = {"ī","istī","it","imus","istis","ērunt",
nil,nil,nil,nil,nil,"ēre"},
ind_pluperf = {"eram","erās","erat","erāmus","erātis","erant"},
ind_fut = {"iam","iēs","iet","iēmus","iētis","ient"},
ind_fut_perf = {"erō","eris","erit","erimus","eritis","erint"},
ind_fut_sig = {"ō","is","it","imus","itis","int"},
ind_pres_pas = {"ior","īris","ītur","īmur","īminī","iuntur",
nil,"īre"},
ind_imp_pas = {"iēbar","iēbāris","iēbātur","iēbāmur","iēbāminī","iēbantur",
nil,"iēbāre"},
ind_fut_pas = {"iar","iēris","iētur","iēmur","iēminī","ientur",
nil,"iēre"},
subj_pres = {"iam","iās","iat","iāmus","iātis","iant"},
subj_imp = {"īrem","īrēs","īret","īrēmus","īrētis","īrent"},
subj_perf = {"erim","erīs","erit","erīmus","erītis","erint"},
subj_pluperf = {"issem","issēs","isset","issēmus","issētis","issent"},
subj_aor_sig = {"im","īs","īt","īmus","ītis","int"},
subj_pres_pas = {"iar","iāris","iātur","iāmur","iāminī","iantur",
nil,"iāre"},
subj_imp_pas = {"īrer","īrēris","īrētur","īrēmur","īrēminī","īrentur",
nil,"īrēre"},
imper_pres = {nil,"ī",nil,nil,"īte",nil},
imper_fut = {nil,"ītō","ītō",nil,"ītōte","iuntō"},
imper_pres_pas = {nil,"īre",nil,nil,"īminī",nil},
imper_fut_pas = {nil,"ītor","ītor",nil,nil,"iuntor"},
}
}
local formas_no_personales = {
inf_act = true,
inf_pas = true,
part_act = true,
part_pas = true,
ger = true,
sup = true,
}
local formas_personales = {
ind_pres = true,
ind_imp = true,
ind_perf = true,
ind_pluperf = true,
ind_fut = true,
ind_fut_perf = true,
ind_fut_sig = true,
ind_pres_pas = true,
ind_imp_pas = true,
ind_fut_pas = true,
subj_pres = true,
subj_imp = true,
subj_perf = true,
subj_pluperf = true,
subj_aor_sig = true,
subj_pres_pas = true,
subj_imp_pas = true,
imper_pres = true,
imper_fut = true,
imper_pres_pas = true,
imper_fut_pas = true,
}
local formas = merge(formas_no_personales, formas_personales)
local verbos_irregulares = {
{"aiō", {"aiō", "aiiō", "aijō", "ajō"}, {
desactivar = {"inf_pas","part_pas","ger","sup","ind_pluperf","ind_fut","ind_fut_perf",
"ind_pres_pas","ind_imp_pas","ind_fut_pas","subj_perf","subj_pluperf","subj_pres_pas",
"subj_imp_pas","imper_fut","imper_pres_pas","imper_fut_pas"
},
conj = "3",
nucleopres = {"ai"},
nucleoperf = {"a"},
nucleosup = {},
nucleosigm = {},
inf_act = {"aiere"},
ind_pres = {nil,nil,nil,{}},
ind_perf = {{},nil,nil,{},{}},
subj_pres = {nil,nil,nil,{},{}},
subj_imp = {{},{},nil,{},{},{}},
imper_pres = {{},{"ai"},{},{},{},{}},
}},
{"cedo", {"cedo"}, {
desactivar = {"inf_act","inf_pas","part_act","part_pas","ger","sup","ind_pluperf","ind_pres","ind_imp","ind_perf",
"ind_fut","ind_fut_perf","ind_pres_pas","ind_imp_pas","ind_fut_pas","subj_pres","subj_imp","subj_perf",
"subj_pluperf","subj_pres_pas","subj_imp_pas","imper_fut","imper_pres_pas","imper_fut_pas"
},
conj = "3",
nucleopres = {},
nucleoperf = {},
nucleosup = {},
nucleosigm = {},
imper_pres = {nil,{"cedo"},nil,nil,{"cette","cedile"},nil},
}},
{"dīcō", {"dīcō"}, {
conj = "3",
nucleopres = {"dīc"},
nucleoperf = {"dīx"},
nucleosup = {"dict"},
nucleosigm = {"dīx"},
desactivar = {},
imper_pres = {nil, {"dīc", "dīce"}},
inf_pas = {"dīcī", "dīcier{L}"},
}},
{"dō", {"dō"}, {
conj = "1",
nucleopres = {"d"},
nucleoperf = {"ded"},
nucleosup = {"dat"},
nucleosigm = {},
desactivar = {},
inf_act = {"dare","dedisse"},
inf_pas = {"darī"},
ind_pres = {nil,nil,nil,{"damus"},{"datis"},nil},
ind_imp = {{"dabam"},{"dabās"},{"dabat"},{"dabāmus"},{"dabātis"},{"dabant"}},
ind_fut = {{"dabō"},{"dabis"},{"dabit"},{"dabimus"},{"dabitis"},{"dabunt"}},
ind_imp_pas = {{"dabar"},{"dabāris","dabāre"},{"dabātur"},{"dabāmur"},{"dabāminī"},{"dabantur"}},
ind_fut_pas = {{"dabor"},{"daberis","dabere"},{"dabitur"},{"dabimur"},{"dabiminī"},{"dabuntur"}},
subj_imp = {{"darem"},{"darēs"},{"daret"},{"darēmus"},{"darētis"},{"darent"}},
subj_imp_pas = {{"darer"},{"darēris","darēre"},{"darētur"},{"darēmur"},{"darēminī"},{"darentur"}},
imper_pres = {nil,nil,nil,nil,{"date"},nil},
imper_fut = {nil,{"datō"},{"datō"},nil,{"datōte"},{"dantō"}},
imper_pres_pas = {nil,{"dare"},nil,nil,{"daminī"},nil},
imper_fut_pas = {nil,{"dator"},{"dator"},nil,nil,{"dator"}},
}},
{"dūcō", {"dūcō"}, {
conj = "3",
nucleopres = {"dūc"},
nucleoperf = {"dūx"},
nucleosup = {"duct"},
nucleosigm = {},
desactivar = {},
imper_pres = {nil, {"dūc", "dūce"}},
}},
{"edō", {"edō", "ëdō"}, {
conj = "3",
nucleopres = {"ed"},
nucleoperf = {"ed"},
nucleosup = {""},
nucleosigm = {},
desactivar = {},
inf_act = {"edere","ēsse"},
part_act = {"edēns","ēsūrus","ēssūrus","ēstūrus"},
part_pas = {"edendus","edundus","ēsus","ēssus","ēstus"},
sup = {"ēsum","ēssum","ēstum","ēsū","ēssū","ēstū"},
ind_pres = {nil,{"edis","ēs"},{"edit","ēst"},nil,{"editis","ēstis"},nil},
ind_pres_pas = {nil,{"ederis","edere","ēssis","ēsse"},{"editur","ēstur"}},
subj_pres = {{"edam","edim"},{"edās","edīs"},{"edat","edit","ēst"},{"edāmus","edīmus"},{"edātis","edītis"},{"edant","edint"}},
subj_imp = {{"ederem","ēssem"},{"ederēs","ēssēs"},{"ederet","ēsset"},{"ederēmus","ēssēmus"},{"ederētis","ēssētis"},{"ederent","ēssent"}},
subj_imp_pas = {{"ederer","ēsser"},{"ederēris","ederēre","ēssēris","ēssēre"},{"ederetur","ēssetur"},{"ederēmur","ēssēmur"},{"ederēminī","ēssēminī"},{"ederentur","ēssentur"}},
imper_pres = {nil,{"ede","ēs"},nil,nil,{"edite","ēste"},nil},
imper_fut = {nil,{"editō","ēstō"},{"editō","ēstō"},nil,{"editōte","ēstōte"},{"eduntō"}},
imper_pres_pas = {nil,{"edere","ēsse"},nil,nil,{"ediminī"},nil},
imper_fut_pas = {nil,{"editor","ēstor"},{"editor","ēstor"},nil,nil,{"eduntor"}},
}},
{"eō", {"eō", "ëō"}, {
conj = "4",
nucleopres = {""},
nucleoperf = {""},
nucleosup = {""},
nucleosigm = {},
desactivar = {"imper_pres_pas"},
inf_act = {"īre","īsse","iisse","īvisse"},
inf_pas = {"īrī","īrier"},
part_act = {"iēns","itūrus"},
part_pas = {"eundum","itum"},
ger = {"eundī","eundō","eundum"},
sup = {"itum","itū"},
ind_pres = {{"eō"},{"īs"},{"it"},{"īmus"},{"ītis"},{"eunt"}},
ind_imp = {{"ībam"},{"ībās"},{"ībat"},{"ībāmus"},{"ībātis"},{"ībant"}},
ind_perf = {{"iī","īvī"},{"īstī","iistī","īvistī"},{"iit","īvit"},{"iimus","īvimus"},{"īstis","iistis","īvistis"},{"iērunt","iēre","īvērunt","īvēre"}},
ind_pluperf = {{"ieram","īveram"},{"ierās","īverās"},{"ierat","īverat"},{"ierāmus","īverāmus"},{"ierātis","īverātis"},{"ierant","īverant"}},
ind_fut = {{"ībō"},{"ībis"},{"ībit"},{"ībimus"},{"ībitis"},{"ībunt"}},
ind_fut_perf = {{"ierō","īverō"},{"ieris","īveris"},{"ierit","īverit"},{"ierimus","īverimus"},{"ieritis","īveritis"},{"ierint","īverint"}},
ind_fut_sig = {nil,nil,nil,nil,nil,nil},
ind_pres_pas = {{},{},{"ītur"},{},{},{}},
ind_imp_pas = {{},{},{"ībātur"},{},{},{}},
ind_fut_pas = {{},{},{"ībitur"},{},{},{}},
subj_pres = {{"eam"},{"eās"},{"eat"},{"eāmus"},{"eātis"},{"eant"}},
subj_imp = {{"īrem"},{"īrēs"},{"īret"},{"īrēmus"},{"īrētis"},{"īrent"}},
subj_perf = {{"ierim","īverim"},{"ierīs","īverīs"},{"ierit","īverit"},{"ierīmus","īverīmus"},{"ierītis","īverītis"},{"ierint","īverint"}},
subj_pluperf = {{"īssem","iissem","īvissem"},{"īssēs","iissēs","īvissēs"},{"īsset","iisset","īvisset"},{"īssēmus","iissēmus","īvissēmus"},{"īssētis","iissētis","īvissētis"},{"īssent","iissent","īvissent"}},
subj_aor_sig = {nil,nil,nil,nil,nil,nil},
subj_pres_pas = {{},{},{"eātur"},{},{},{}},
subj_imp_pas = {{},{},{"īrētur"},{},{},{}},
imper_pres = {nil,nil,nil,nil,nil,nil},
imper_fut = {nil,nil,nil,nil,nil,{"euntō"}},
imper_fut_pas = {nil,{},nil,nil,nil,{}},
}},
{"faciō", {"faciō"}, {
conj = "3",
nucleopres = {"faci"},
nucleoperf = {"fax"},
nucleosup = {"fact"},
nucleosigm = {"fax","faxs","facs"},
desactivar = {},
ind_pres_pas = {{"fīō"},{"fīs"},{"fit"},{"fīmus"},{"fītis"},{"fīunt"}},
ind_imp_pas = {{"fīēbam"},{"fīēbās"},{"fīēbat"},{"fīēbāmus"},{"fīēbātis"},{"fīēbant"}},
ind_fut_pas = {{"fīam"},{"fīēs"},{"fīet"},{"fīēmus"},{"fīētis"},{"fīent"}},
subj_pres_pas = {{"fīam"},{"fīās"},{"fīat"},{"fīāmus"},{"fīātis"},{"fīant"}},
subj_imp_pas = {{"fierem"},{"fierēs"},{"fieret"},{"fierēmus"},{"fierētis"},{"fierent"}},
imper_pres = {nil,{"fac","face"},nil,nil,nil,nil},
imper_pres_pas = {nil,{"fī"},nil,nil,{"fīte"},nil},
imper_fut_pas = {nil,{"fītō"},{"fītō"},nil,{"fītōte"},{"fīuntō"}},
}},
{"ferō", {"ferō"}, {
conj = "3",
nucleopres = {"fer"},
nucleoperf = {"tul"},
nucleosup = {"lāt"},
nucleosigm = {},
desactivar = {},
inf_pas = {"ferrī"},
ind_pres = {nil,{"fers"},{"fert"},nil,{"fertis"}},
ind_pres_pas = {nil,{"ferris","ferre"}},
subj_imp = {{"ferrem"},{"ferrēs"},{"ferret"},{"ferrēmus"},{"ferrētis"},{"ferrent"}},
subj_imp_pas = {{"ferrer"},{"ferrēris","ferrēre"},{"ferrētur"},{"ferrēmur"},{"ferrēminī"},{"ferrentur"}},
imper_pres = {nil,{"fer"},nil,nil,{"ferte"},nil},
imper_pres_pas = {nil,{"ferre"},nil,nil,nil,nil},
imper_fut = {nil,{"fertō"},{"fertō"},nil,{"fertōte"},{"feruntō"}},
imper_fut_pas = {nil,{"fertor"},{"fertor"},nil,nil,nil},
}},
{"fīō", {"fīō"}, {
conj = "3",
nucleopres = {"fī"},
nucleoperf = {},
nucleosup = {"fact"},
nucleosigm = {},
semidep = true,
desactivar = {},
ind_pres = {{"fīō"},{"fīs"},{"fit"},{"fīmus"},{"fītis"},{"fīunt"}},
imper_pres = {nil,{"fī"},nil,nil,{"fīte"},nil},
imper_fut = {nil,{"fītō"},{"fītō"},nil,{"fītōte"},{"feruntō"}},
}},
{"inquam", {"inquam"}, {
conj = "3",
nucleopres = {"inqui"},
nucleoperf = {},
nucleosup = {},
nucleosigm = {},
nopasivo = true,
desactivar = {"inf_act","inf_pas","part_pas","ger"},
ind_pres = {{"inquam"}},
}},
{"possum", {"possum"}, {
conj = "3",
nucleopres = {"pot"},
nucleoperf = {"pot"},
nucleosup = {},
nucleosigm = {},
pres = "possō",
desactivar = {"inf_pas","part_pas","ger","sup","ind_pres_pas","ind_imp_pas","ind_fut_pas",
"subj_pres_pas","subj_imp_pas","imper_pres","imper_fut","imper_pres_pas","imper_fut_pas"},
inf_act = {"posse","potesse{†}"},
part_act = {"potēns"},
ind_pres = {{"possum"},{"potes"},{"potest"},{"possumus"},{"potestis"},{"possunt"}},
ind_imp = {{"poteram"},{"poterās"},{"poterat"},{"poterāmus"},{"poterātis"},{"poterant"}},
ind_fut = {{"poterō"},{"poteris","potere"},{"poterit"},{"poterimus"},{"poteritis"},{"poterunt"}},
ind_perf = {{"potuī"},{"potuistī"},{"potuit"},{"potuimus"},{"potuistis"},{"potuērunt","potuēre"}},
ind_pluperf = {{"potueram"},{"potuerās"},{"potuerat"},{"potuerāmus"},{"potuerātis"},{"potuerant"}},
ind_fut_perf = {{"potuerō"},{"potueris"},{"potuerit"},{"potuerimus"},{"potueritis"},{"potuerunt"}},
subj_pres = {{"possem"},{"possēs"},{"possēt"},{"possēmus"},{"possētis"},{"possent"}},
subj_imp = {{"possim"},{"possīs"},{"possit"},{"possīmus"},{"possītis"},{"possint"}},
subj_perf = {{"potuerim"},{"potuerīs"},{"potuerit"},{"potuerīmus"},{"potuerītis"},{"potuerint"}},
subj_pluperf = {{"potuissem"},{"potuissēs"},{"potuisset"},{"potuissēmus"},{"potuissētis"},{"potuissent"}},
}},
{"sum", {"sum"}, {
conj = "3",
nucleopres = {"s"},
nucleoperf = {"fu"},
nucleosup = {},
nucleosigm = {},
pres = "sō",
desactivar = {"inf_pas","part_pas","ger","sup","ind_pres_pas","ind_imp_pas","ind_fut_pas",
"subj_pres_pas","subj_imp_pas","imper_pres_pas","imper_fut_pas"},
inf_act = {"esse"},
part_act = {"futūrus"},
ind_pres = {{"sum"},{"es"},{"est"},{"sumus"},{"estis"},{"sunt"}},
ind_imp = {{"eram"},{"erās"},{"erat"},{"erāmus"},{"erātis"},{"erant"}},
ind_fut = {{"erō"},{"eris","ere"},{"erit"},{"erimus"},{"eritis"},{"erunt"}},
subj_pres = {{"sim","siem","fuam{†}"},{"sīs","siēs","fuās{†}"},{"sit","siet","fuat{†}"},{"sīmus","siēmus","fuāmus{†}"},{"sītis","siētis","fuātis{†}"},{"sint","sient","fuant{†}"}},
subj_imp = {{"essem","forem"},{"essēs","forēs"},{"esset","foret"},{"essēmus","forēmus"},{"essētis","forētis"},{"essent","forent"}},
imper_pres = {nil,{"es"},nil,nil,{"este"},nil},
imper_fut = {nil,{"estō"},{"estō"},nil,{"estōte"},nil},
}},
{"mālō", {"mālō"}, {
conj = "3",
nucleopres = {"māl"},
nucleoperf = {"mālu"},
nucleosup = {},
nucleosigm = {},
desactivar = {"sup","ger","inf_pas","part_pas","ind_pres_pas","ind_imp_pas","ind_fut_pas","subj_pres_pas","subj_imp_pas",
"imper_pres","imper_fut","imper_pres_pas","imper_fut_pas"},
inf_act = {"mālle","māluisse"},
ind_pres = {{"mālō"},{"māvīs"},{"māvult"},{"mālumus"},{"māvultis"},{"mālunt"}},
subj_pres = {{"mālim"},{"mālīs"},{"mālit"},{"mālīmus"},{"mālītis"},{"mālint"}},
subj_imp = {{"māllem"},{"māllēs"},{"māllet"},{"māllēmus"},{"māllētis"},{"māllent"}},
}},
{"nōlō", {"nōlō"}, {
conj = "3",
nucleopres = {"nōl"},
nucleoperf = {"nōlu"},
nucleosup = {},
nucleosigm = {},
desactivar = {"sup","ger","inf_pas","part_pas","ind_pres_pas","ind_imp_pas","ind_fut_pas","subj_pres_pas","subj_imp_pas",
"imper_pres","imper_fut","imper_pres_pas","imper_fut_pas"},
inf_act = {"nōlle","nōluisse"},
ind_pres = {{"nōlō"},{"nōn vīs","nevīs{†}"},{"nōn vult","nōn volt","nevolt{†}"},{"nōlumus"},{"nōn vultis","nōn voltis","nōltis{†}"},{"nōlunt"}},
subj_pres = {{"nōlim"},{"nōlīs"},{"nōlit"},{"nōlīmus"},{"nōlītis"},{"nōlint"}},
subj_imp = {{"nōllem"},{"nōllēs"},{"nōllet"},{"nōllēmus"},{"nōllētis"},{"nōllent"}},
}},
{"volō", {"volō"}, {
conj = "3",
nucleopres = {"vol"},
nucleoperf = {"volu"},
nucleosup = {"volit"},
nucleosigm = {},
desactivar = {"sup","ger","inf_pas","part_pas","ind_pres_pas","ind_imp_pas","ind_fut_pas","subj_pres_pas","subj_imp_pas",
"imper_pres","imper_fut","imper_pres_pas","imper_fut_pas"},
inf_act = {"velle","voluisse"},
ind_pres = {{"volō"},{"vīs"},{"vult","volt{†}"},{"volumus"},{"vultis","voltis{†}"},{"volunt"}},
subj_pres = {{"velim","volim{†}"},{"velīs","volīs{†}"},{"velit","volit{†}"},{"velīmus","volīmus{†}"},{"velītis","volītis{†}"},{"velint","volint{†}"}},
subj_imp = {{"vellem"},{"vellēs"},{"vellet"},{"vellēmus"},{"vellētis"},{"vellent"}},
}},
}
local function combinar_prefijo_nucleosufijo(prefijo, nucleosufijo)
return prefijo..nucleosufijo
end
local function combinar_nucleo_sufijo(nucleo, sufijo, agregar_i)
if agregar_i and (not find(sufijo, "^[iī]")) and (sufijo ~= "e") and (not find(sufijo, "^er")) then
return nucleo.."~i~"..sufijo
end
return nucleo..sufijo
end
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijos_ = sufijos[conjinfo.conj][forma]
local nucleos
local prefijo
if forma == "sup" then
nucleos = conjinfo.nucleosup
prefijo = conjinfo.prefijosup or conjinfo.prefijo
elseif find(forma, "sig") then
nucleos = conjinfo.nucleosigm
prefijo = conjinfo.prefijosigm or conjinfo.prefijo
elseif find(forma, "perf") then
nucleos = conjinfo.nucleoperf
prefijo = conjinfo.prefijoperf or conjinfo.prefijo
else
nucleos = conjinfo.nucleopres
prefijo = conjinfo.prefijo
end
if formas_no_personales[forma] then
if conjinfo[forma][1] then
if nucleos and #nucleos > 0 then
for _, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleosufijo(prefijo, fm).."#")
end
end
else
for _, sufijo in ipairs(sufijos_) do
local nucleos_ = nucleos
if forma == "inf_act" and sufijo == "isse" then
nucleos_ = conjinfo.nucleoperf
elseif forma == "part_act" and sufijo == "ūrus" then
nucleos_ = conjinfo.nucleosup
elseif forma == "part_pas" and sufijo == "us" then
nucleos_ = conjinfo.nucleosup
end
local agregar_i = conjinfo.I and nucleos_ == conjinfo.nucleopres
for _,nucleo in ipairs(nucleos_) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleosufijo(prefijo, combinar_nucleo_sufijo(nucleo, sufijo, agregar_i)))
end
end
end
return
end
for i = EGO, EI do
local p = tostr[i]
if conjinfo[forma][i] then
if nucleos and #nucleos > 0 then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleosufijo(prefijo, fm).."#")
end
end
else
local k = i
while sufijos_[k] do
local agregar_i = conjinfo.I and nucleos == conjinfo.nucleopres
for j, n in ipairs(nucleos) do
local x = combinar_prefijo_nucleosufijo(prefijo, combinar_nucleo_sufijo(n, sufijos_[k], agregar_i))
if conjinfo.always_sync_perf and (forma == "ind_perf" or forma == "ind_pluperf" or forma == "ind_fut_perf" or forma == "subj_perf" or forma == "subj_pluperf") then
x = x:gsub("īvī", "iī")
x = x:gsub("īvi", "ī")
x = x:gsub("īve", "ī")
x = x:gsub("īvē", "ē")
end
insert_if_not(conjugado[forma..p], x)
end
k = k + 6
end
end
end
end
local function get_subtype_by_ending(pres, conjinfo, specs)
for _, spec in ipairs(specs) do
local base = extract_base(pres, spec[1])
if base then
for _,s in ipairs(spec[2]) do
if conjinfo[s] == nil then
conjinfo[s] = true
end
end
return base
end
end
error("Unrecognized ending for conjugation " .. conjinfo["conj"])
end
local function detect_v_type_and_subtypes(conjinfo)
local pres = conjinfo["v"]
local conj_arg = conjinfo["conj"]
pres = toNFC(pres)
local base_conj_arg, auto_perf_supine = conj_arg:match("^([124]/?4?)(%+%+?)$")
if base_conj_arg then
if auto_perf_supine == "++" and base_conj_arg ~= "4" then
error("Conjugation types 1++ and 2++ not allowed")
end
conj_arg = base_conj_arg
end
conjinfo.conj = conj_arg
if conj_arg == "1" then
local base = get_subtype_by_ending(pres, conjinfo, {
{"ō", {}},
{"or", {"dep"}},
{"at", {"impers"}},
{"ātur", {"dep", "impers"}},
{"ī", {"nopres"}},
{"it", {"nopres", "impers"}},
})
if not conjinfo["nucleopres"][1] then
conjinfo["nucleopres"][1] = base
end
if auto_perf_supine then
if not conjinfo["nucleoperf"][1] then
conjinfo["nucleoperf"][1] = base .. "āv"
end
if not conjinfo["nucleosup"][1] then
conjinfo["nucleosup"][1] = base .. "āt"
end
end
if conjinfo.sigm then
if not conjinfo["nucleosigm"][1] then
conjinfo["nucleosigm"][1] = base .. "āss"
end
end
elseif conj_arg == "2" then
local base = get_subtype_by_ending(pres, conjinfo, {
{"eō", {}},
{"eor", {"dep"}},
{"et", {"impers"}},
{"ētur", {"dep", "impers"}},
{"ī", {"nopres"}},
{"it", {"nopres", "impers"}},
})
if not conjinfo["nucleopres"][1] then
conjinfo["nucleopres"][1] = base
end
if auto_perf_supine then
if not conjinfo["nucleoperf"][1] then
conjinfo["nucleoperf"][1] = base .. "u"
end
if not conjinfo["nucleosup"][1] then
conjinfo["nucleosup"][1] = base .. "it"
end
end
if conjinfo.sigm then
if not conjinfo["nucleosigm"][1] then
conjinfo["nucleosigm"][1] = base .. "ēss"
end
end
elseif conj_arg == "3" then
local base
if conjinfo.I == false then -- si explícitamente se indicó que no es del tipo -io, hay que excluir sufijos
base = get_subtype_by_ending(pres, conjinfo, {
{"ō", {}},
{"or", {"dep"}},
{"it", {"impers"}},
{"itur", {"dep", "impers"}},
{"ī", {"nopres"}},
})
else
base = get_subtype_by_ending(pres, conjinfo, {
{"iō", {"I"}},
{"ior", {"dep", "I"}},
{"ō", {}},
{"or", {"dep"}},
{"it", {"impers"}},
{"itur", {"dep", "impers"}},
{"ī", {"nopres"}},
})
end
if not conjinfo["nucleopres"][1] then
conjinfo["nucleopres"][1] = base
end
if not conjinfo["nucleoperf"][1] and conjinfo["nopres"] then
conjinfo["nucleoperf"][1] = base
end
assert(conjinfo["nucleoperf"][1], "especifique todos los núcleos para verbos de la tercera conjugación")
assert(conjinfo["nucleosup"][1], "especifique todos los núcleos para verbos de la tercera conjugación")
if conjinfo.sigm then
if not conjinfo["nucleosigm"][1] then
conjinfo["nucleosigm"][1] = base .. "ēss"
end
end
elseif conj_arg == "3/4" then
local base
base = get_subtype_by_ending(pres, conjinfo, {
{"iō", {"I"}},
{"ior", {"dep", "I"}},
})
if not conjinfo["nucleopres"][1] then
conjinfo["nucleopres"][1] = base
end
if not conjinfo["nucleoperf"][1] and conjinfo["nopres"] then
conjinfo["nucleoperf"][1] = base
end
if not conjinfo["nucleoperf"][1] and auto_perf_supine == "++" then
conjinfo["nucleoperf"][1] = base .. "īv"
conjinfo["nucleoperf"][2] = base .. "i"
end
if not conjinfo["nucleoperf"][1] and auto_perf_supine == "+" then
conjinfo["nucleoperf"][1] = base .. "īv"
end
if not conjinfo["nucleosup"][1] and auto_perf_supine then
conjinfo["nucleosup"][1] = base .. "īt"
end
if conjinfo.sigm then
if not conjinfo["nucleosigm"][1] then
conjinfo["nucleosigm"][1] = base .. "īss"
end
end
elseif conj_arg == "4" then
local base = get_subtype_by_ending(pres, conjinfo, {
{"iō", {}},
{"ior", {"dep"}},
{"it", {"impers"}},
{"ītur", {"dep", "impers"}},
{"ī", {"nopres"}},
})
if not conjinfo["nucleopres"][1] then
conjinfo["nucleopres"][1] = base
end
if not conjinfo["nucleoperf"][1] and conjinfo["nopres"] then
conjinfo["nucleoperf"][1] = base
end
if not conjinfo["nucleoperf"][1] and auto_perf_supine == "++" then
conjinfo["nucleoperf"][1] = base .. "īv"
conjinfo["nucleoperf"][2] = base .. "i"
end
if not conjinfo["nucleoperf"][1] and auto_perf_supine == "+" then
conjinfo["nucleoperf"][1] = base .. "īv"
end
if not conjinfo["nucleosup"][1] and auto_perf_supine then
conjinfo["nucleosup"][1] = base .. "īt"
end
if conjinfo.sigm then
if not conjinfo["nucleosigm"][1] then
conjinfo["nucleosigm"][1] = base .. "īss"
end
end
elseif conj_arg == "irreg" then
for _,p in ipairs(verbos_irregulares) do
for _,rx in ipairs(p[2]) do
local pref, verb = match(conjinfo.v, "^(.*)("..rx..")$")
if verb then
conjinfo.v = verb
conjinfo.prefijo = pref
if conjinfo.nucleoperf[1] and conjinfo.nucleoperf[1] ~= "-" then -- [[ecfero]]
conjinfo.prefijoperf = conjinfo.nucleoperf[1]
conjinfo.nucleoperf = {}
end
if conjinfo.nucleosup[1] and conjinfo.nucleosup[1] ~= "-" then
conjinfo.prefijosup = conjinfo.nucleosup[1]
conjinfo.nucleosup = {}
end
if conjinfo.nucleosigm[1] and conjinfo.nucleosigm[1] ~= "-" then
conjinfo.prefijosigm = conjinfo.nucleosigm[1]
conjinfo.nucleosigm = {}
end
conjinfo.irreg = true
conjinfo.conj = p[3].conj
for k,val in pairs(p[3]) do
if not conjinfo[k] or (type(conjinfo[k]) == "table" and not conjinfo[k][1]) then
conjinfo[k] = deep_copy(val)
end
end
return conjinfo
end
end
end
error("Unrecognized conjugation '" .. conj_arg .. "'")
else
error("Unrecognized conjugation '" .. conj_arg .. "'")
end
return conjinfo
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 = "conj"},
[2] = {alias_de = "pres"},
[3] = {alias_de = "nucleoperf"},
[4] = {alias_de = "nucleosup"},
[5] = {alias_de = "nucleosigm"},
["impers"] = {}, -- pas para formas pasivas solamente
["impersonal"] = {alias_de = "impers"},
["dep"] = {tipo="bool"},
["depon"] = {alias_de="dep"},
["deponente"] = {alias_de="dep"},
["semidep"] = {tipo="bool"},
["semidepon"] = {alias_de="semidep"},
["semideponente"] = {alias_de="semidep"},
["sigm"] = {tipo="bool"},
["nopasivo"] = {tipo="bool"},
["soloperf"] = {tipo="bool"},
["I"] = {tipo="bool"},
["p3inf"] = {tipo="bool"}, -- sin uso
["poet_sync_perf"] = {tipo="bool"}, -- sin uso
["always_sync_perf"] = {tipo="bool"}, -- solo en [[saevio]]
["conj"] = {requerido=true},
["pres"] = {requerido=true},
["nucleopres"] = {lista = true},
["nucleoperf"] = {lista = true},
["nucleosup"] = {lista = true},
["nucleosigm"] = {lista = true},
["núcleopres"] = {alias_de="nucleopres"},
["núcleoperf"] = {alias_de="nucleoperf"},
["núcleosup"] = {alias_de="nucleosup"},
["paradigma"] = {lista = true},
["desactivarnucleos"] = {tipo="bool", por_defecto=true}, -- para [[-o]]
["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")
assert(not (args["dep"] and args["semidep"]), "un verbo no puede ser deponente y semideponente a la vez")
local conjinfo = {
conj = args.conj,
prefijo="",
v=args.pres,
desactivar = {},
dep=args.dep,
semidep=args.semidep,
sigm=args.sigm,
impers=args.impers,
nopasivo=args.nopasivo,
soloperf=args.soloperf,
I=args.I,
p3inf=args.p3inf,
poet_sync_perf=args.poet_sync_perf, -- sin uso
always_sync_perf=args.always_sync_perf,
nucleopres = deep_copy(args.nucleopres),
nucleoperf = deep_copy(args.nucleoperf),
nucleosup = deep_copy(args.nucleosup),
nucleosigm = deep_copy(args.nucleosigm)
}
conjinfo = detect_v_type_and_subtypes(conjinfo)
conjinfo.conj = conjinfo.conj
if conjinfo.impers == true then
conjinfo.impers = "3"
end
-- no puede ir conjinfo acá abajo porque si es un sufijo va a quedar "-" en la raíz, lo que anularía todas las formas conjugadas, tiene que venir directo de args
if args.desactivarnucleos then
if args.nucleopres[1] == "-" then
conjinfo.nucleopres = {}
end
if args.nucleoperf[1] == "-" then
conjinfo.nucleoperf = {}
end
if args.nucleosup[1] == "-" then
conjinfo.nucleosup = {}
end
if args.nucleosigm[1] == "-" then
conjinfo.nucleosigm = {}
end
end
local es_irregular = conjinfo.irreg
for _,d in ipairs(conjinfo.desactivar) do
if formas_no_personales[d] then
args[d] = {"no"}
else
args[d.."2"] = {"no"}
end
end
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
local resultante = sobreescribir_formas(conjugado, args)
local mostrar_fut_sig = #resultante["ind_fut_sig1"] > 0
local mostrar_aor_sig = #resultante["subj_aor_sig1"] > 0
local defectivo = comprobar_defectivo(resultante, {"^imper", "_sig"}, tostr)
local defect2
resultante, defect2 = desactivar_formas(resultante,
function (form)
return (conjinfo.nopasivo and form:find("_pas")) or (conjinfo.soloperf and not form:find("perf")) or (conjinfo.impers == "pas" and form:find("_pas[^3]")) or (conjinfo.impers == "pas3" and form:find("_pas[^3]")) or (conjinfo.impers == "pas36" and form:find("_pas[^36]"))
end
)
if defect2 then
defectivo = true
end
-- por ahora innecesario
-- 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 tit_pres = f(resultante["ind_pres1"][1] or "―")
local tit_inf = f(resultante["inf_act"][1] or "―")
local tit_perf = f(resultante["ind_perf1"][1] or "―")
local tit_sup = f(resultante["sup"][1] or "―")
resultante = agregar_enlaces(resultante, tit, normalizar_enlace)
local es_impersonal = conjinfo.impers
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, es_impersonal)
end)
local impers = conjinfo.impers
local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_imper, mostrar_imper
if impers == "3" then
fila_pronombres_ind = {"", "(id)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_subj = {"", "(quod id)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(id)", color=COLOR_IMPER, header=true, class="pc"}
cs = 2
elseif impers == "36" then
error("no soportado actualmente")
cs = 3
else
fila_pronombres_ind = {"", PRONOMBRES[1], PRONOMBRES[2], PRONOMBRES[3], PRONOMBRES[4], PRONOMBRES[5], PRONOMBRES[6], color=COLOR_IND, header=true, class="pc"}
fila_pronombres_subj = {"", PRONOMBRES_SUBJ[1], PRONOMBRES_SUBJ[2], PRONOMBRES_SUBJ[3], PRONOMBRES_SUBJ[4], PRONOMBRES_SUBJ[5], PRONOMBRES_SUBJ[6], color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", PRONOMBRES_IMP[1], PRONOMBRES_IMP[2], PRONOMBRES_IMP[3], PRONOMBRES_IMP[4], PRONOMBRES_IMP[5], PRONOMBRES_IMP[6], color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = cs -- 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
insert(t, {{"Infinitivo activo", header=true, color=COLOR_NP}, resultante.inf_act})
insert(t, {{"Infinitivo pasivo", header=true, color=COLOR_NP}, resultante.inf_pas})
insert(t, {{"Participio activo", header=true, color=COLOR_NP}, resultante.part_act})
insert(t, {{"Participio pasivo", header=true, color=COLOR_NP}, resultante.part_pas})
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger})
insert(t, {{"Supino", header=true, color=COLOR_NP}, resultante.sup})
else
resultante.inf_act.colspan = cs1-1
resultante.inf_pas.colspan = cs1-1
resultante.part_act.colspan = cs1-1
resultante.part_pas.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.sup.colspan = cs1-1
if not conjinfo.dep then
insert(t, {{"Infinitivo activo", header=true, color=COLOR_NP}, resultante.inf_act})
end
if not conjinfo.semidep then
insert(t, {{"Infinitivo pasivo", header=true, color=COLOR_NP}, resultante.inf_pas})
end
if not conjinfo.dep then
insert(t, {{"Participio activo", header=true, color=COLOR_NP}, resultante.part_act})
end
if not conjinfo.semidep then
insert(t, {{"Participio pasivo", header=true, color=COLOR_NP}, resultante.part_pas})
end
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger})
insert(t, {{"Supino", header=true, color=COLOR_NP}, resultante.sup})
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)
if not conjinfo.dep then
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, {{"Futuro", color=COLOR_IND, header=true}, ic("ind_fut")})
end
if not conjinfo.dep and not conjinfo.semidep then
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, {{"Futuro perfecto", color=COLOR_IND, header=true}, ic("ind_fut_perf")})
end
if mostrar_fut_sig then
insert(t, {{f("Futuro sigmático{†}"), color=COLOR_IND, header=true}, ic("ind_fut_sig")})
end
if not conjinfo.semidep then
insert(t, {{"Presente pasivo", color=COLOR_IND, header=true}, ic("ind_pres_pas")})
insert(t, {{"Pretérito imperfecto pasivo", color=COLOR_IND, header=true}, ic("ind_imp_pas")})
insert(t, {{"Futuro pasivo", color=COLOR_IND, header=true}, ic("ind_fut_pas")})
end
insert(t, {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true})
insert(t, fila_pronombres_subj)
if not conjinfo.dep then
insert(t, {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")})
insert(t, {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")})
end
if not conjinfo.dep and not conjinfo.semidep then
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")})
end
if mostrar_aor_sig then
insert(t, {{f("Aorista sigmático{†}"), color=COLOR_SUBJ, header=true}, ic("subj_aor_sig")})
end
if not conjinfo.semidep then
insert(t, {{"Presente pasivo", color=COLOR_SUBJ, header=true}, ic("subj_pres_pas")})
insert(t, {{"Pretérito imperfecto pasivo", color=COLOR_SUBJ, header=true}, ic("subj_imp_pas")})
end
insert(t, {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true})
insert(t, fila_pronombres_imper)
if mostrar_imper then
if not conjinfo.dep then
insert(t, {{"Presente", color=COLOR_IMPER, header=true}, ic("imper_pres")})
insert(t, {{"Futuro", color=COLOR_IMPER, header=true}, ic("imper_fut")})
end
if not conjinfo.semidep then
insert(t, {{"Presente pasivo", color=COLOR_IMPER, header=true}, ic("imper_pres_pas")})
insert(t, {{"Futuro pasivo", color=COLOR_IMPER, header=true}, ic("imper_fut_pas")})
end
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, ~■~ cambio ortográfico, #■# irregularidad"), 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
if conjinfo.impers == "pas" or conjinfo.imeprs == "pas3" then
args["nota"] = args["nota"].." NOTA: impersonal para las formas pasivas"
end
if conjinfo.impers == "pas36" then
args["nota"] = args["nota"].." NOTA: formas pasivas terciopersonales (solamente tercera persona singular y plural)"
end
if conjinfo.soloperf then
args["nota"] = args["nota"].. " NOTA: solo se emplean las formas del perfecto y pluscuamperfecto con valor de presente, imperfecto o futuro"
end
if conjinfo.nopasivo then
args["nota"] = args["nota"].. " NOTA: solo se emplean las formas activas"
end
insert(t, {{args["nota"] and args["nota"] or "", colspan=cs}})
local cats = {}
local subtits = {}
local conj_str
if conjinfo.conj == "1" then
conj_str = "primera conjugación"
elseif conjinfo.conj == "2" then
conj_str = "segunda conjugación"
elseif conjinfo.conj == "3" then
conj_str = "tercera conjugación"
elseif conjinfo.conj == "3/4" then
conj_str = "tercera/cuarta conjugación"
else
conj_str = "cuarta conjugación"
end
insert(cats, "LA:Verbos de la "..conj_str)
insert(subtits, conj_str)
impers = impers or ""
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(subtits, "impersonal")
insert(cats, "LA:Verbos impersonales")
end
if defectivo then
insert(subtits, "defectivo")
insert(cats, "LA:Verbos defectivos")
end
if conjinfo.dep then
insert(subtits, "deponente")
insert(cats, "LA:Verbos deponentes")
end
if conjinfo.semidep then
insert(subtits, "semideponente")
insert(cats, "LA:Verbos semideponentes")
end
if es_irregular then
insert(subtits, "irregular")
insert(cats, "LA:Verbos irregulares")
else
insert(subtits, "regular")
insert(cats, "LA:Verbos regulares")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit_pres..", "..tit_inf..", "..tit_perf..", "..tit_sup.."'''''  ("..concat(subtits, ", ")..")",
t,
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 = {
["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 head = args[1]
local modo = args[2]
local enc
local cats = {}
local cat_pref = "LA:Adverbios"
if modo == "-" then
enc = "sin comparativo ni superlativo"
insert(cats, cat_pref.." incomparables")
return renderizar_encabezado(
frame,
head,
enc,
args["n"],
{},
ns == 0 and cats or {},
normalizar_enlace
)
end
local flex = {comp={},sup={}}
local stem
for _, suff in ipairs{"iter", "nter", "ter", "er", "iē", "ē", "rā", "im", "ō"} do
stem = match(head, "^(.*)" .. suff .. "$")
if stem ~= nil then
local comp_suff, sup_suff = "ius", "issimē"
if suff == "nter" then
stem = stem .. "nt"
end
if suff == "rā" then
comp_suff = "er" .. comp_suff
sup_suff = "imē"
end
insert(flex.comp, stem .. comp_suff)
insert(flex.sup, stem .. sup_suff)
break
end
end
if not stem and not args.comp[1] and not args.sup[1] then
error("Unrecognized adverb type, recognized types are “-ē”, “-er”, “-ter”, “-iter”, “-im”, or “-ō”, “-ra” or specify irregular forms or “-” if incomparable.")
end
local formas, irr = sobreescribir_formas(flex, args)
if args["comp"][1] == "no" then
enc = "sin comparativo"
insert(cats, cat_pref.." sin comparativo")
return renderizar_encabezado(
frame,
head,
enc,
args["n"],
{{"superlativo", formas.sup, args["supnota"]}},
ns == 0 and cats or {},
normalizar_enlace
)
elseif args["sup"][1] == "no" then
enc = "sin superlativo"
insert(cats, cat_pref.." sin superlativo")
return renderizar_encabezado(
frame,
head,
enc,
args["n"],
{{"comparativo", formas.comp, args["compnota"]}},
ns == 0 and cats or {},
normalizar_enlace
)
end
if irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
end
return renderizar_encabezado(
frame,
head,
enc,
args["n"],
{{"comparativo", formas.comp, args["compnota"]},
{"superlativo", formas.sup, args["supnota"]}},
ns == 0 and cats or {},
normalizar_enlace
)
end
return export
iwur5l5aqmrcsadn4ge4lmtkm5n7n1f
licorería
0
1062959
6110102
6109863
2026-04-27T17:32:43Z
~2026-16686-32
181366
/* {{sustantivo femenino|es}} */ imagen
6110102
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|licor|ería}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
[[File:Liquor store in Chernobyl.jpg|thumb|una licorería]]
;1: {{ucf|comercio}} en donde se venden [[licor]]es.
;2: Por extensión, tienda en donde se venden bebidas [[alcohólico|alcohólicas]] en general.
{{sinónimo|fresquería|botillería|vinoteca}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
0kohr2aol8h910mw55rb772aoiceio7
tuneladora
0
1063041
6110107
6109674
2026-04-27T17:52:46Z
~2026-16686-32
181366
/* {{sustantivo femenino|es}} */ imagen
6110107
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|tunelar|dora}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
[[File:Tunnel Boring Machine (Yucca Mt).jpg|thumb|una tuneladora]]
;1 {{csem|máquinas}}: {{ucf|máquina}} para [[excavar]] [[túnel]]es.
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
5c7k99z4m0y11xmzxa1xielqlhq3p19
interfono
0
1063187
6110100
6110018
2026-04-27T17:04:10Z
~2026-16686-32
181366
/* {{sustantivo masculino|es}} */ iamgen
6110100
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|fr|interphone}}, de {{l+|fr|intérieur}} y {{l+|fr|téléphone}}.
==== {{sustantivo masculino|es}} ====
{{es.sust}}
[[File:Videocitofono Bticino 3.jpg|thumb|[1]]]
;1 {{csem|telecomunicaciones}}: Sistema [[telefónico]] que permite [[comunicar]]se entre dos [[terminal]]es telefónicas de un mismo edificio usando una red local.
{{sinónimo|interno|citófono|intercomunicador}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
5b1cbqfpnaxp7azxfkwylyjbdsifjof
potito
0
1063199
6110098
6110055
2026-04-27T16:43:17Z
~2026-16686-32
181366
imagen
6110098
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|marca|Potitos}}.
==== {{sustantivo masculino|es}} ====
[[File:Baby eating baby food.jpg|thumb|bebé comiendo un potito]]
{{es.sust}}
;1 {{csem|alimentos}}: {{ucf|puré}} para [[bebé]]s. Hay una plétora de variantes y sabores en el mercado para elegir.<ref>{{DLE}}</ref>
{{ámbito|España}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
dn2qycyiqab0lv8l07r8auducr9hlna
hibernal
0
1063202
6110078
2026-04-27T13:19:57Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|la|hibernalis|alt=hībernālis}}. ==== {{adjetivo|es}} ==== {{es.adj}} ;1: {{variante|invernal}}. == Referencias y notas == <references />»
6110078
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|la|hibernalis|alt=hībernālis}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;1: {{variante|invernal}}.
== Referencias y notas ==
<references />
cb162yisu6lc7bwm7xdz7gl8vxo6tog
suspiro morado
0
1063203
6110084
2026-04-27T14:58:39Z
Raos10
93688
Creación de página
6110084
wikitext
text/x-wiki
=={{lengua|es}}==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
==== {{sustantivo femenino|es}} ====
{{es.sust|cop=s}}
;1 {{csem|planta}}: {{taxón|Gomphrena globosa}} {{plm|perpetua}}.<ref name='damer'>{{Damer|suspiro}}</ref>
{{ámbito|Panamá}}
{{sinónimo|perpetua|siempreviva|habana|inmortal|sandiego|sempiterna|amarantina|perpetua encarnada}}
====Traducciones====
{{trad-véase|1-2|perpetua}}
== Referencias y notas ==
<references />
8p26rwbse9g294an6monkny57rhfqfj
6110087
6110084
2026-04-27T15:29:07Z
Tmagc
158167
6110087
wikitext
text/x-wiki
=={{lengua|es}}==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
==== {{locución sustantiva|es|masculina}} ====
{{es.sust|cop=s}}
;1 {{csem|planta}}: {{taxón|Gomphrena globosa}} {{plm|perpetua}}.<ref name='damer'>{{Damer|suspiro}}</ref>
{{ámbito|Panamá}}
{{sinónimo|perpetua|siempreviva|habana|inmortal|sandiego|sempiterna|amarantina|perpetua encarnada}}
====Traducciones====
{{trad-véase|1-2|perpetua}}
== Referencias y notas ==
<references />
3ei1zvrnug4s4p5ce5kyiv6zhr5fq3c
suspensión del juicio a prueba
0
1063204
6110086
2026-04-27T15:19:31Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología}}. ==== {{locución|es|sustantiva|femenina}} ==== {{es.sust|cop=n}} ;1 {{csem|derecho}}: Recurso que le permite al condenado por un delito, si se cumplen ciertos requisitos, cumplir su sanción penal en libertad, aunque sujeto a ciertas restricciones. {{sinónimo|libertad condicional|probation}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <…»
6110086
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
==== {{locución|es|sustantiva|femenina}} ====
{{es.sust|cop=n}}
;1 {{csem|derecho}}: Recurso que le permite al condenado por un delito, si se cumplen ciertos requisitos, cumplir su sanción penal en libertad, aunque sujeto a ciertas restricciones.
{{sinónimo|libertad condicional|probation}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
r07bcxai0cg328zlu0jhb3pgx5f54r7
amargón
0
1063205
6110089
2026-04-27T16:00:51Z
Raos10
93688
Creación de página
6110089
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|aumentativo|amargo}}.<ref name='dle'>{{DLE}}</ref>
==== {{sustantivo|es|masculino}} ====
{{es.sust}}
;1 {{csem|planta}}: {{taxón|Taraxacum officinale}} {{plm|diente de león}}.<ref name='dle1925'>{{DLE1925}}</ref>
{{sinónimo|diente de león|almirón|achicoria amarga}}
;2 {{csem|planta}}: {{taxón|Lippia alba}} {{plm|pitiona}}.<ref name='damer'>{{Damer}}</ref>
{{ámbito|El Salvador}}
{{sinónimo|pitión|juanilama|mastranto|salvia|sonora|prontoalivio}}
;3 {{csem|planta}}: {{taxón|Chamaedores lehmannii}} {{plm|chichicuilote}} ('palma pequeña').<ref name='damer'/>
{{ámbito|Honduras}}
{{sinónimo|chichicuilote|chicuilote|garrote amargo}}
;4: Contrariedad intensa o profundo pesar.<ref name='dle'/><ref name='damer'/>
{{ámbito|Perú}}
==== {{sustantivo|es|masculino|femenino}} ====
{{es.sust|mf}}
;5: {{plm|susceptible}}, [[picajoso]].<ref name='damer'/>
{{ámbito|Perú}}
==== Véase también ====
{{w|objeto=varios artículos}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
nq8n14itq4lmu0l1sql6rvbyk5btc8b
Usuario discusión:Col923
3
1063207
6110095
2026-04-27T16:40:54Z
Tmagc
158167
Página creada con «{{subst:Bienvenido}}»
6110095
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, Col923. Te damos la [[Wikcionario:Bienvenido, nuevo visitante|bienvenida a ''Wikcionario'']]. <small style="padding-left:150px">[[Wikcionario:Embajada|If you don't speak Spanish, please visit our Embassy]]</small>
Gracias por participar en el proyecto. Puedes encontrar algunas guías útiles aquí:
:<small>▶</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; si ya has editado en ''Wikipedia'', mira '''[[Wikcionario:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio.
:<small>▶</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''.
:<small>▶</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción;
:<small>▶</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles.
Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}.
{|
| Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(~~~~)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.png|right|Para firmar usa el botón indicado|link=]]
|}
Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable.<br />
Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:40 27 abr 2026 (UTC).</div>
5d2z79q5fbxc78mm1iht399uwkjzijh
6110096
6110095
2026-04-27T16:41:02Z
Tmagc
158167
Sección nueva: /* Notificación de borrado rápido en «cuckoo for Cocoa Puffs» */
6110096
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, Col923. Te damos la [[Wikcionario:Bienvenido, nuevo visitante|bienvenida a ''Wikcionario'']]. <small style="padding-left:150px">[[Wikcionario:Embajada|If you don't speak Spanish, please visit our Embassy]]</small>
Gracias por participar en el proyecto. Puedes encontrar algunas guías útiles aquí:
:<small>▶</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; si ya has editado en ''Wikipedia'', mira '''[[Wikcionario:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio.
:<small>▶</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''.
:<small>▶</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción;
:<small>▶</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles.
Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}.
{|
| Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(~~~~)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.png|right|Para firmar usa el botón indicado|link=]]
|}
Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable.<br />
Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:40 27 abr 2026 (UTC).</div>
== Notificación de borrado rápido en «[[:cuckoo for Cocoa Puffs]]» ==
[[Archivo:Icon_delete.svg|izquierda|50px|link=Wikcionario:Criterios para el borrado rápido#g4]]
Hola, Col923. Se ha revisado la página '''«[[:cuckoo for Cocoa Puffs]]»''' y esta cumple con los [[Wikcionario:Política de borrado#g4|criterios de borrado rápido]], por eso se ha marcado con la plantilla {{ep|destruir}} para que sea borrada de inmediato por un [[Wikcionario:Administradores|administrador]]. Los argumentos de borrado son los siguientes:<br />
:*'''[[WN:BR#G4|G4]]''': La entrada no tiene un contexto claro, ni un formato legible, por favor revisa la página de ayuda sobre cómo [[Ayuda:Cómo empezar una página|empezar una página]] y sobre [[Ayuda:Cómo se edita una página|cómo se edita esta]].
Por favor revisa la [[Wikcionario:Política de borrado|política de borrado]] y sólo si crees que la entrada en cuestión no se ajusta a lo descrito ahí, expón tus argumentos en mi página de discusión, o al <span class=plainlinks>[//es.Wikcionario.org/w/index.php?title=Especial%3ARegistro&type=delete&user=&page=cuckoo_for_Cocoa_Puffs administrador]</span> que eliminó la entrada, por favor menciona de que entrada debatiremos enlazándolo con corchetes dobles así <code><nowiki>[[ejemplo]]</nowiki></code> y recuerda que debes firmar todo mensaje que dejas en una discusión, para esto sólo añade <nowiki>~~~~</nowiki> al final de tu mensaje, se convertirá en tu firma al grabar la página. Si la página la creaste con finalidades de hacer pruebas, por favor utiliza la [[Wikcionario:Zona de pruebas|Zona de pruebas]].
Gracias por tu comprensión. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 16:41 27 abr 2026 (UTC)
lljbifm82beo8kc7xze1s67lfh3m88f
loquera
0
1063208
6110103
2026-04-27T17:33:42Z
JPDAMAY
176835
Página creada con «== {{lengua|es}} == {{pron-graf}} === Etimología 1 === {{año de documentación|1928}}.<ref>{{CNDHE}}</ref> {{etimología|sufijo|loco|-era}}. ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1: {{plm|jaula}} de [[loco]]s.<ref>{{DLE1925|752}}</ref> ;2: {{plm|falta}} o privación de cualquier [[juicio]] o capacidad de [[raciocinio]].<ref name="damer">{{Damer}}</ref> {{ámbito|América}}. {{sinónimo|desatino|locura}}. ;3: {{plm|impulsividad}}, [[frenesí]].<ref na…»
6110103
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{año de documentación|1928}}.<ref>{{CNDHE}}</ref> {{etimología|sufijo|loco|-era}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{plm|jaula}} de [[loco]]s.<ref>{{DLE1925|752}}</ref>
;2: {{plm|falta}} o privación de cualquier [[juicio]] o capacidad de [[raciocinio]].<ref name="damer">{{Damer}}</ref>
{{ámbito|América}}.
{{sinónimo|desatino|locura}}.
;3: {{plm|impulsividad}}, [[frenesí]].<ref name="damer />
{{ámbito|Ámerica}}.
;4: {{plm|tumulto}}, [[desorden]].<ref name="damer />
{{ámbito|El Salvador|Honduras|Panamá|Paraguay|Venezuela}}.
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{t|en|a1=2|t1=madness|a2=2|t2=craziness}}
{{trad-abajo}}
=== Forma flexiva ===
==== Forma adjetiva ====
;1: {{forma adjetivo|loquero|femenino|singular}}.
== Referencias y notas ==
<references />
oihn3lqxg5k4e7izj6h074km1mszi0v
libet
0
1063209
6110104
2026-04-27T17:36:03Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|la}} == {{pron-graf|leng=la|v=lubet}} === Etimología === {{etimología|fone|lubet|leng=la}}, {{etim|leng=la|itc-pro|*luβēt}}, {{etim|leng=la|ine-pro|*lubʰ-eh₁-(ye)-ti|nl=s}}, {{etim|ine-pro|leng=la|*lewbʰ-|amar, desear}}. ==== {{verbo intransitivo|la|terciopersonal}} ==== ;1: {{plm|agradar}} (-le algo a alguien). {{sinónimo|placeo|alt=placeō|leng=la}} ==== Conjugación ==== {{la.v|2|libet|libu|libit|opt_semi_depon=v|ger=-|…»
6110104
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|la}} ==
{{pron-graf|leng=la|v=lubet}}
=== Etimología ===
{{etimología|fone|lubet|leng=la}}, {{etim|leng=la|itc-pro|*luβēt}}, {{etim|leng=la|ine-pro|*lubʰ-eh₁-(ye)-ti|nl=s}}, {{etim|ine-pro|leng=la|*lewbʰ-|amar, desear}}.
==== {{verbo intransitivo|la|terciopersonal}} ====
;1: {{plm|agradar}} (-le algo a alguien).
{{sinónimo|placeo|alt=placeō|leng=la}}
==== Conjugación ====
{{la.v|2|libet|libu|libit|opt_semi_depon=v|ger=-|ind_fut=-|nopasivo=v}}
== Referencias y notas ==
<references />
bxg1ya0itu7thgt2aedx1r6jnct9amc
lubet
0
1063210
6110105
2026-04-27T17:40:53Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|la}} == {{pron-graf|leng=la|v=libet}} === Etimología === {{etimología|leng=la|itc-pro|*luβēt}}, {{etim|leng=la|ine-pro|*lubʰ-eh₁-(ye)-ti|nl=s}}, {{etim|ine-pro|leng=la|*lewbʰ-|amar, desear}}. ==== {{verbo intransitivo|la|terciopersonal}} ==== ;1: {{variante anticuada|leng=la|libet}}. ==== Conjugación ==== {{la.v|2|lubet|lubu|lubit|opt_semi_depon=v|ger=-|ind_fut=-|nopasivo=v}} == Referencias y notas == <references />»
6110105
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|la}} ==
{{pron-graf|leng=la|v=libet}}
=== Etimología ===
{{etimología|leng=la|itc-pro|*luβēt}}, {{etim|leng=la|ine-pro|*lubʰ-eh₁-(ye)-ti|nl=s}}, {{etim|ine-pro|leng=la|*lewbʰ-|amar, desear}}.
==== {{verbo intransitivo|la|terciopersonal}} ====
;1: {{variante anticuada|leng=la|libet}}.
==== Conjugación ====
{{la.v|2|lubet|lubu|lubit|opt_semi_depon=v|ger=-|ind_fut=-|nopasivo=v}}
== Referencias y notas ==
<references />
qw1w32qz5bfsk1i3l19xvv9v7xuexcd
licet
0
1063211
6110106
2026-04-27T17:52:41Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|la}} == {{pron-graf|leng=la}} === Etimología === {{etimología|leng=la|incierta}}. ==== {{verbo intransitivo|la|impersonal}} ==== ;1: {{plm|valer}}; ser (algo) lícito. {{sinónimo|permitto|alt=permittō}} ==== Conjugación ==== {{la.v|2|licet|licu|licit|opt_semi_depon=v|nopasivo=v|sigm=v}} == Referencias y notas == <references />»
6110106
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|la}} ==
{{pron-graf|leng=la}}
=== Etimología ===
{{etimología|leng=la|incierta}}.
==== {{verbo intransitivo|la|impersonal}} ====
;1: {{plm|valer}}; ser (algo) lícito.
{{sinónimo|permitto|alt=permittō}}
==== Conjugación ====
{{la.v|2|licet|licu|licit|opt_semi_depon=v|nopasivo=v|sigm=v}}
== Referencias y notas ==
<references />
57amawvbt7hkg1dqsskl2wuctzyd03u
piget
0
1063212
6110109
2026-04-27T17:59:36Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|la}} == {{pron-graf|leng=la}} === Etimología === {{etimología|ine-pro|*peyǵ-|leng=la}}. ==== {{verbo intransitivo|la|terciopersonal}} ==== ;1: {{plm|afligirse}}, [[acongojarse]]. ==== Conjugación ==== {{la.v|2|opt_semi_depon=v|piget|pigu|pigit|nopasivo=v}} == Referencias y notas == <references />»
6110109
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|la}} ==
{{pron-graf|leng=la}}
=== Etimología ===
{{etimología|ine-pro|*peyǵ-|leng=la}}.
==== {{verbo intransitivo|la|terciopersonal}} ====
;1: {{plm|afligirse}}, [[acongojarse]].
==== Conjugación ====
{{la.v|2|opt_semi_depon=v|piget|pigu|pigit|nopasivo=v}}
== Referencias y notas ==
<references />
s0hw6ut6w5mgrtnkeuix9y1o32a9d91
inquam
0
1063213
6110112
2026-04-27T18:12:45Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|la}} == {{pron-graf|leng=la}} === Etimología === {{etimología|leng=la|incierta}}. ==== {{verbo transitivo|la}} ==== ;1: {{plm|alegar}}, [[mencionar]], [[remarcar]] (que). ==== Conjugación ==== {{la.v|irreg|inquam}} == Referencias y notas == <references />»
6110112
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|la}} ==
{{pron-graf|leng=la}}
=== Etimología ===
{{etimología|leng=la|incierta}}.
==== {{verbo transitivo|la}} ====
;1: {{plm|alegar}}, [[mencionar]], [[remarcar]] (que).
==== Conjugación ====
{{la.v|irreg|inquam}}
== Referencias y notas ==
<references />
reo9sduf65bzz8r29noo541ndu105qr
amarguillo
0
1063214
6110115
2026-04-27T18:31:46Z
Raos10
93688
Creación de página
6110115
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|diminutivo|amargo}}.<ref name='dle1925'>{{DLE1925}}</ref>
==== {{sustantivo|es|masculino}} ====
{{es.sust}}
;1: {{plm|amargo}} ('dulce amargo').<ref name='dle1925'/>
{{sinónimo|amargo}}
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-véase|1|amargo}}
== Referencias y notas ==
<references />
80a8pnjjmugchk3kdgt7aobpkr1rwce
inquisitar
0
1063215
6110117
2026-04-27T18:48:24Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|regresiva|inquisidor}}. ==== {{verbo transitivo|es}} ==== ;1: Procesar e investigar la culpabilidad del sujeto involucrado en una causa. {{ejemplo|El fiscal trascendía sus fueros para adoptar, en una cronometría actoral, el flagelo del martirio o la compasión, según el temple del '''inquisitado'''.|c=libro|t=La isla del olvido|a=Iván González Cruz|f=2008|u=https://www.goo…»
6110117
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|regresiva|inquisidor}}.
==== {{verbo transitivo|es}} ====
;1: Procesar e investigar la culpabilidad del sujeto involucrado en una causa.
{{ejemplo|El fiscal trascendía sus fueros para adoptar, en una cronometría actoral, el flagelo del martirio o la compasión, según el temple del '''inquisitado'''.|c=libro|t=La isla del olvido|a=Iván González Cruz|f=2008|u=https://www.google.com.ar/books/edition/La_isla_del_olvido/6vlNDwAAQBAJ?hl=es-419&gbpv=1&dq=inquisitado&pg=PA140&printsec=frontcover|p=140|isbn=9788479625542|editorial=Verbum}}
==== Conjugación ====
{{es.v}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
sqsffq08ztz0qnn4qdt5gm8ugsidiyq
inquisidor
0
1063216
6110118
2026-04-27T18:51:05Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|la|inquisitor|alt=inquisitōris}}. ==== {{adjetivo|es}} ==== {{es.adj}} ;1: {{adjetivo de verbo|inquirir|inquiere}}. {{uso|utcs}} ;2: {{adjetivo de verbo|inquisitar|inquisita}}. {{uso|utcs}} ==== {{sustantivo masculino y femenino|es}} ==== {{es.sust}} ;3 {{csem|derecho|religión}}: Juez eclesiástico que conocía de las causas de fe.<ref>{{DLE1925}}</ref> ==== Traducciones ==…»
6110118
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|la|inquisitor|alt=inquisitōris}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;1: {{adjetivo de verbo|inquirir|inquiere}}.
{{uso|utcs}}
;2: {{adjetivo de verbo|inquisitar|inquisita}}.
{{uso|utcs}}
==== {{sustantivo masculino y femenino|es}} ====
{{es.sust}}
;3 {{csem|derecho|religión}}: Juez eclesiástico que conocía de las causas de fe.<ref>{{DLE1925}}</ref>
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
cwxqdvrpdeoqdc606cqffcgc61qv8m7
6110119
6110118
2026-04-27T18:51:15Z
Tmagc
158167
6110119
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|la|inquisitor|alt=inquisitōris}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;1: {{adjetivo de verbo|inquirir|inquiere}}.
{{uso|utcs}}
;2: {{adjetivo de verbo|inquisitar|inquisita}}.
{{uso|utcs}}
==== {{sustantivo masculino y femenino|es}} ====
{{es.sust|mf}}
;3 {{csem|derecho|religión}}: Juez eclesiástico que conocía de las causas de fe.<ref>{{DLE1925}}</ref>
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
pr9ienl8nff8bg1fq9m9b6rj1l1ntli
amaricado
0
1063217
6110120
2026-04-27T19:14:04Z
Raos10
93688
Creación de página
6110120
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|confijo|a|marica|ado}}.<ref name='dle'>{{DLE}}</ref>
==== {{adjetivo|es}} ====
{{es.adj}}
;1: {{plm|afeminado}}.<ref name='dle1925'>{{DLE1925}}</ref>
{{uso|malsonante}}
{{sinónimo|afeminado|amanerado}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
4tw0iqeu5zku4zoyrrll4b3wibja3mf
amarilidáceo
0
1063218
6110121
2026-04-27T19:28:41Z
Raos10
93688
Creación de página
6110121
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|la-con|Amaryllidaceae}}, y este de {{l+|la|Amaryllis|glosa=amarilis}} y el sufijo {{l+|la|-aceae|glosa=-áceo}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;1 {{csem|botánica}}: {{taxón|Amaryllidaceae}} {{impropia|Aplicado a una planta:}} De la familia de plantas herbáceas, perennes, bulbosas o rizomatosas, pertenecientes al orden Asparagales de las monocotiledóneas. Pueden ser fácilmente reconocidas por sus flores trímeras dispuestas en inflorescencias similares a [[umbela]]s, las cuales se hallan rodeadas de dos [[bráctea]]s en la extremidad de un [[escapo]].
{{sinónimo|amarilídeo}}
==== Véase también ====
{{w|amarilidáceas}}
* [[amarilidáceas]]
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
qw6ztqn87a7gdy58n0wkk5p6z99l4fs
6110123
6110121
2026-04-27T19:30:14Z
Raos10
93688
variante
6110123
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v=amarilídeo}}
=== Etimología ===
{{etimología|la-con|Amaryllidaceae}}, y este de {{l+|la|Amaryllis|glosa=amarilis}} y el sufijo {{l+|la|-aceae|glosa=-áceo}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;1 {{csem|botánica}}: {{taxón|Amaryllidaceae}} {{impropia|Aplicado a una planta:}} De la familia de plantas herbáceas, perennes, bulbosas o rizomatosas, pertenecientes al orden Asparagales de las monocotiledóneas. Pueden ser fácilmente reconocidas por sus flores trímeras dispuestas en inflorescencias similares a [[umbela]]s, las cuales se hallan rodeadas de dos [[bráctea]]s en la extremidad de un [[escapo]].
==== Véase también ====
{{w|amarilidáceas}}
* [[amarilidáceas]]
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
a2wfnbm5hgi4mpgfo18sex2xmu9f9ek
amarilídeo
0
1063219
6110122
2026-04-27T19:29:44Z
Raos10
93688
Creación de página
6110122
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|variante|amarilidáceo}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;1 {{csem|botánica}}: {{variante|amarilidáceo}}.<ref name='dle'>{{DLE}}</ref>
==== Traducciones ====
{{trad-véase|1|amarilidáceo}}
== Referencias y notas ==
<references />
cr7wn7d0hwpt3kbgtos93v46dmrp6jy
gradualista
0
1063220
6110134
2026-04-27T21:07:07Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|gradual|ista}}. ==== {{adjetivo|es}} ==== {{es.adj}} ;1: {{adjetivo de sustantivo|gradualismo}}. {{uso|utcs}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references />»
6110134
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|gradual|ista}}.
==== {{adjetivo|es}} ====
{{es.adj}}
;1: {{adjetivo de sustantivo|gradualismo}}.
{{uso|utcs}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
f94rm7utxlxnia6zebrz7ozl7kunlt8
cuadratura
0
1063221
6110136
2026-04-27T21:25:22Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf|v=cuadradura}} === Etimología === {{etimología|la|quadratura|alt=quadrātūra}}. ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1: {{sustantivo de verbo|cuadrar}}. ;2 {{csem|astronomía}}: Situación de dos cuerpos celestes, en donde estos forman un ángulo de 90° con respecto a la Tierra. ;3 {{csem|astronomía}}: Por extensión, posición de la Luna en los cuartos crecientes y menguantes. ==== Véase tamb…»
6110136
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf|v=cuadradura}}
=== Etimología ===
{{etimología|la|quadratura|alt=quadrātūra}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{sustantivo de verbo|cuadrar}}.
;2 {{csem|astronomía}}: Situación de dos cuerpos celestes, en donde estos forman un ángulo de 90° con respecto a la Tierra.
;3 {{csem|astronomía}}: Por extensión, posición de la Luna en los cuartos crecientes y menguantes.
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
hawtdx8kavrg165glgksn1x76h0fgnf
cuadradura
0
1063222
6110138
2026-04-27T21:25:59Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|cuadrado|dura}}. ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1: {{variante obsoleta|cuadratura}}. == Referencias y notas == <references />»
6110138
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|cuadrado|dura}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{variante obsoleta|cuadratura}}.
== Referencias y notas ==
<references />
bes3m5i9v73i5hi7mnactyi05imiam9
máakal
0
1063223
6110140
2026-04-27T21:39:18Z
26agcp
138617
Página creada con «== {{lengua|yua}} == {{pron-graf|leng=yua}} === Etimología === {{etimología|leng=yua}}. ==== {{verbo|yua|intransitivo}} ==== ;1 : {{plm|taparse}}, {{l|es|cerrarse}}.<ref>{{DUMY|p=178|cita=máak.al}}</ref> ==== Conjugación ==== {{yua.v|m}} ==== Véase también ==== * {{l|yua|mak}} * {{l|yua|maak}} == Referencias y notas == <references />»
6110140
wikitext
text/x-wiki
== {{lengua|yua}} ==
{{pron-graf|leng=yua}}
=== Etimología ===
{{etimología|leng=yua}}.
==== {{verbo|yua|intransitivo}} ====
;1 : {{plm|taparse}}, {{l|es|cerrarse}}.<ref>{{DUMY|p=178|cita=máak.al}}</ref>
==== Conjugación ====
{{yua.v|m}}
==== Véase también ====
* {{l|yua|mak}}
* {{l|yua|maak}}
== Referencias y notas ==
<references />
dynigr5pwh6mngind9q6emz7g3s2cb5
amarilis
0
1063224
6110142
2026-04-27T21:45:07Z
Raos10
93688
Creación de página
6110142
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|la-con|Amaryllis}}, y este {{etim|la|Amaryllis}}.<ref name='dle'>{{DLE}}</ref>
==== {{sustantivo|es|femenino}} ====
{{es.sust}}
;1 {{csem|planta}}: {{taxón|Amaryllis|Hippeastrum}} {{impropia|Término que denomina a diversas plantas amarilídeas}}.<ref name='dle'/>
==== Véase también ====
{{w|Amaryllis}}
{{w|Hippeastrum}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
atrh6gnq71t2ydhgdbzbl2qvmwijnzd
amarillejo
0
1063225
6110144
2026-04-27T21:48:33Z
Raos10
93688
Creación de página
6110144
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|amarillo|ejo}}.<ref name='dle'>{{DLE}}</ref>
==== {{adjetivo|es}} ====
{{es.adj}}
;1 {{csem|colores}}: {{variante|amarillento}}.<ref name='dle'/>
==== Traducciones ====
{{trad-véase|1|amarillento}}
== Referencias y notas ==
<references />
pt5m7i2bttwcbivmhc7ubx9bpwofgx3
amarillor
0
1063226
6110146
2026-04-27T21:49:53Z
Raos10
93688
Creación de página
6110146
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|amarillo|or}}.
==== {{sustantivo|es|masculino}} ====
{{es.sust}}
;1: {{variante|amarillez}}.<ref name='dle'>{{DLE}}</ref>
==== Traducciones ====
{{trad-véase|1|amarillez}}
== Referencias y notas ==
<references />
91m2yyjsabdqqbnoa050t0oz926gpwo
amarillura
0
1063227
6110149
2026-04-27T21:51:08Z
Raos10
93688
Creación de página
6110149
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|amarillo|ura}}.
==== {{sustantivo|es|masculino}} ====
{{es.sust}}
;1: {{variante|amarillez}}.<ref name='dle'>{{DLE}}</ref>
{{uso|anticuado}}
==== Traducciones ====
{{trad-véase|1|amarillez}}
== Referencias y notas ==
<references />
rp12jybc8kt0b379xxr4hy35apsj1re
amaritud
0
1063228
6110150
2026-04-27T21:53:50Z
Raos10
93688
Creación de página
6110150
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|la|amaritudo|alt=amaritūdo}}.<ref name='dle'>{{DLE}}</ref>
==== {{sustantivo|es|femenino}} ====
{{es.sust}}
;1: {{variante anticuada|amargor}}.<ref name='dle'/>
==== Traducciones ====
{{trad-véase|1|amargor}}
== Referencias y notas ==
<references />
rggy1cs8yu2oz4t3zzptsgukzxryyi1
amarradero
0
1063229
6110152
2026-04-27T21:55:56Z
Raos10
93688
Creación de página
6110152
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|amarrar|dero}}.
==== {{sustantivo|es|masculino}} ====
{{es.sust}}
;1: Poste, pilar o argolla donde se amarra alguna cosa.<ref name='dle1925'>{{DLE1925}}</ref>
{{sinónimo|argolla|poste}}
;2 {{csem|marina}}: Sitio donde se amarran los barcos.<ref name='dle1925'/>
{{sinónimo|embarcadero}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
dxw79uewa7coaw2rho6tylbln6rfhfs
amarradijo
0
1063230
6110153
2026-04-27T21:57:45Z
Raos10
93688
Creación de página
6110153
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|amarrado|-ijo}}.<ref name='dle'>{{DLE}}</ref>
==== {{sustantivo|es|masculino}} ====
{{es.sust}}
;1: Atadura realizada sin precisión ni esmero.<ref name='dle'/>
{{ámbito|México|Cantabria|Colombia|Honduras}}
{{sinónimo|atadijo}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
ruwv2z9ieab1qlgp9gwmxss9rzbgvgu
amarreco
0
1063231
6110154
2026-04-27T21:59:40Z
Raos10
93688
Creación de página
6110154
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|eu|amarreko}}, de {{l+|eu|amarr|diez}}.<ref name='dle'>{{DLE}}</ref>
==== {{sustantivo|es|masculino}} ====
{{es.sust}}
;1: {{variante|amarraco}}.<ref name='dle1925'>{{DLE1925}}</ref>
==== Traducciones ====
{{trad-véase|1|amarraco}}
== Referencias y notas ==
<references />
lseisqhw6scf36t40qcda5vuipv4sf9
barafunda
0
1063232
6110155
2026-04-27T22:00:57Z
JPDAMAY
176835
Página creada con «== {{lengua|ast}} == {{pron-graf|leng=ast}} === Etimología === {{etimología|leng=ast|incierta}}. ==== {{sustantivo femenino|ast}} ==== {{ast.sust|f}} ;1: {{plm|barahúnda}}.<ref>{{DALLA}}</ref> ==== Véase también ==== {{w|idioma=ast}} == {{lengua|gl}} == {{pron-graf|leng=gl}} === Etimología === {{etimología|leng=gl|incierta}}. ==== {{sustantivo femenino|gl}} ==== {{gl.sust}} ;1: {{plm|barahúnda}}, [[bullicio]].<ref name="drag">{{DRAG}}</ref> {{ejemplo|«{…»
6110155
wikitext
text/x-wiki
== {{lengua|ast}} ==
{{pron-graf|leng=ast}}
=== Etimología ===
{{etimología|leng=ast|incierta}}.
==== {{sustantivo femenino|ast}} ====
{{ast.sust|f}}
;1: {{plm|barahúnda}}.<ref>{{DALLA}}</ref>
==== Véase también ====
{{w|idioma=ast}}
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Etimología ===
{{etimología|leng=gl|incierta}}.
==== {{sustantivo femenino|gl}} ====
{{gl.sust}}
;1: {{plm|barahúnda}}, [[bullicio]].<ref name="drag">{{DRAG}}</ref>
{{ejemplo|«{{l|gl|feliz|Feliz}} {{l|gl|quen}} {{l|gl|vivir|vive}} {{l|gl|lonxe}} {{l|gl|das}} '''barafundas'''!»|traducción=«¡{{plm|feliz}} [[quien]] [[vivir|vive]] [[lejos]] [[del]] [[bullicio]]».}}
;2: {{plm|nimiedad}}{{subíndice|4}}, [[banalidad]].<ref name="drag />
{{sinónimo|leng=gl|algueirada}}.
==== Véase también ====
{{w|idioma=gl}}
== {{lengua|pt}} ==
{{pron-graf|leng=pt}}
=== Etimología ===
{{etimología|leng=pt|incierta}}.
==== {{sustantivo femenino|pt}} ====
{{pt.sust}}
;1: {{plm|grupo}} [de diversas ocupaciones].<ref name="priberam">{{Priberam}}</ref>
;2: {{plm|conjunto}}.<ref name="priberam />
{{sinónimo|leng=pt|conjunto}}.
;3: {{plm|barahúnda}}.<ref name="priberam />
;4: {{plm|calado}}.<ref name="priberam />
==== Véase también ====
{{w|idioma=pt}}
== Referencias y notas ==
<references />
pivt9fij8edli7633ixic3ouu0lapq2
6110182
6110155
2026-04-28T00:11:21Z
JPDAMAY
176835
6110182
wikitext
text/x-wiki
== {{lengua|an}} ==
{{pron-graf|leng=an}}
=== Etimología ===
{{etimología|leng=an|incierta}}.
==== {{sustantivo femenino|an}} ====
{{an.sust}}
;1: {{plm|barahúnda}}.<ref>{{Aragonario}}</ref>
==== Véase también ====
{{w|idioma=an}}
== {{lengua|ast}} ==
{{pron-graf|leng=ast}}
=== Etimología ===
{{etimología|leng=ast|incierta}}.
==== {{sustantivo femenino|ast}} ====
{{ast.sust|f}}
;1: {{plm|barahúnda}}.<ref>{{DALLA}}</ref>
==== Véase también ====
{{w|idioma=ast}}
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Etimología ===
{{etimología|leng=gl|incierta}}.
==== {{sustantivo femenino|gl}} ====
{{gl.sust}}
;1: {{plm|barahúnda}}, [[bullicio]].<ref name="drag">{{DRAG}}</ref>
{{ejemplo|«{{l|gl|feliz|Feliz}} {{l|gl|quen}} {{l|gl|vivir|vive}} {{l|gl|lonxe}} {{l|gl|das}} '''barafundas'''!»|traducción=«¡{{plm|feliz}} [[quien]] [[vivir|vive]] [[lejos]] [[del]] [[bullicio]]».}}
;2: {{plm|nimiedad}}{{subíndice|4}}, [[banalidad]].<ref name="drag />
{{sinónimo|leng=gl|algueirada}}.
==== Véase también ====
{{w|idioma=gl}}
== {{lengua|pt}} ==
{{pron-graf|leng=pt}}
=== Etimología ===
{{etimología|leng=pt|incierta}}.
==== {{sustantivo femenino|pt}} ====
{{pt.sust}}
;1: {{plm|grupo}} [de diversas ocupaciones].<ref name="priberam">{{Priberam}}</ref>
;2: {{plm|conjunto}}.<ref name="priberam />
{{sinónimo|leng=pt|conjunto}}.
;3: {{plm|barahúnda}}.<ref name="priberam />
;4: {{plm|calado}}.<ref name="priberam />
==== Véase también ====
{{w|idioma=pt}}
== Referencias y notas ==
<references />
s4hsm50cdfrnrl17fue46bkpuli6tas
amarroso
0
1063233
6110156
2026-04-27T22:04:37Z
Raos10
93688
Creación de página
6110156
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|variante|amargoso}}.<ref name='dle'>{{DLE}}</ref>
==== {{adjetivo|es}} ====
{{es.adj}}
;1: {{variante|amargoso}}, [[amargo]].<ref>{{Damer}}</ref>
{{ámbito|Costa Rica|Honduras|Nicaragua|Puerto Rico}}
==== Traducciones ====
{{trad-véase|1|amargoso}}
== Referencias y notas ==
<references />
cjkk49h8h3g2dlc7dw2jxk5povyqwfb
barafundas
0
1063234
6110157
2026-04-27T22:04:55Z
JPDAMAY
176835
Página creada con «== {{lengua|gl}} == {{pron-graf|leng=gl}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|leng=gl|barafunda}}. == {{lengua|pt}} == {{pron-graf|leng=pt}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|leng=pt|barafunda}}. == Referencias y notas == <references />»
6110157
wikitext
text/x-wiki
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Forma flexiva ===
==== Forma sustantiva ====
;1: {{forma sustantivo plural|leng=gl|barafunda}}.
== {{lengua|pt}} ==
{{pron-graf|leng=pt}}
=== Forma flexiva ===
==== Forma sustantiva ====
;1: {{forma sustantivo plural|leng=pt|barafunda}}.
== Referencias y notas ==
<references />
q6gos0ntnflnsptugnsapz79k8ctp7b
6110183
6110157
2026-04-28T00:11:55Z
JPDAMAY
176835
6110183
wikitext
text/x-wiki
== {{lengua|an}} ==
{{pron-graf|leng=an}}
=== Forma flexiva ===
==== Forma sustantiva ====
;1: {{forma sustantivo plural|leng=an|barafunda}}.
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Forma flexiva ===
==== Forma sustantiva ====
;1: {{forma sustantivo plural|leng=gl|barafunda}}.
== {{lengua|pt}} ==
{{pron-graf|leng=pt}}
=== Forma flexiva ===
==== Forma sustantiva ====
;1: {{forma sustantivo plural|leng=pt|barafunda}}.
== Referencias y notas ==
<references />
5jb6ij6rko7wdptzvoglcuk3s1eao71
barafundes
0
1063235
6110158
2026-04-27T22:05:37Z
JPDAMAY
176835
Página creada con «== {{lengua|ast}} == {{pron-graf|leng=ast}} === Forma flexiva === ==== Forma sustantiva ==== ;1: {{forma sustantivo plural|leng=ast|barafunda}}. == Referencias y notas == <references />»
6110158
wikitext
text/x-wiki
== {{lengua|ast}} ==
{{pron-graf|leng=ast}}
=== Forma flexiva ===
==== Forma sustantiva ====
;1: {{forma sustantivo plural|leng=ast|barafunda}}.
== Referencias y notas ==
<references />
j2hksiimz849pfw4uzf1gzusvdy2fce
amasadera
0
1063236
6110161
2026-04-27T22:21:48Z
Raos10
93688
Creación de página
6110161
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|amasar|dera}}.
==== {{sustantivo|es|femenino}} ====
{{es.sust}}
;1: {{plm|artesa}} en que se amasa.<ref name='dle1925'>{{DLE1925}}</ref>
{{sinónimo|artesa}}
;2 {{csem|murcia}}: {{plm|cuezo}} ('artesa usada por albañiles').<ref name='dle'>{{DLE}}</ref>
{{sinónimo|cuezo}}
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-véase|1|artesa}}
{{trad-véase|2|cuezo}}
== Referencias y notas ==
<references />
99uaqzu76xf2rc3zzv1o8txg07pc162
6110162
6110161
2026-04-27T22:22:40Z
Raos10
93688
6110162
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|amasar|dera}}.
==== {{sustantivo|es|femenino}} ====
{{es.sust}}
;1: {{plm|artesa}} en que se amasa.<ref name='dle1925'>{{DLE1925}}</ref>
{{sinónimo|artesa}}
;2: {{plm|cuezo}} ('artesa usada por albañiles').<ref name='dle'>{{DLE}}</ref>
{{ámbito|murcia}}
{{sinónimo|cuezo}}
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-véase|1|artesa}}
{{trad-véase|2|cuezo}}
== Referencias y notas ==
<references />
g6andvi9qc2kgyjz7cfv8xaymlz8rxh
amasadero
0
1063237
6110165
2026-04-27T22:39:14Z
Raos10
93688
Creación de página
6110165
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|amasar|dero}}.
==== {{sustantivo|es|masculino}} ====
{{es.sust}}
;1: Local donde se amasa el pan.<ref name='dle1925'>{{DLE1925}}</ref>
==== Véase también ====
* [[amasadera]]
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
mvdyfchjffkfzevtpmzu3axnat0n3yg
amasandería
0
1063238
6110166
2026-04-27T22:41:31Z
Raos10
93688
Creación de página
6110166
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|amasandero|ía}}.<ref name='dle'>{{DLE}}</ref>
==== {{sustantivo|es|femenino}} ====
{{es.sust}}
;1: {{plm|panadería}}.<ref name='dle'/><ref>{{Damer}}</ref>
{{ámbito|Chile}}
{{sinónimo|panadería|tahona}}
==== Traducciones ====
{{trad-véase|1|panadería}}
== Referencias y notas ==
<references />
r05r8mp7r0c3m2fcn3huu3iaf5sv7rs
amasandero
0
1063239
6110167
2026-04-27T22:43:26Z
Raos10
93688
Creación de página
6110167
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
==== {{sustantivo|es|masculino|femenino}} ====
{{es.sust|mf}}
;1: {{plm|panadero}}.<ref>{{Damer}}</ref>
{{ámbito|Chile}}
{{sinónimo|panadero}}
==== Traducciones ====
{{trad-véase|1|panadero}}
== Referencias y notas ==
<references />
t3h69ez2x0n1rr7bd3e7lqdpdo5tc5j
amasio
0
1063240
6110168
2026-04-27T22:47:58Z
Raos10
93688
Creación de página
6110168
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|la|amasius}}.<ref name='dle'>{{DLE}}</ref>
==== {{sustantivo|es|masculino|femenino}} ====
{{es.sust|mf}}
;1: {{plm|querido}}, [[concubino]].<ref name='dle'/><ref name='dle1925'>{{DLE1925}}</ref>
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
j8vgqd2q5kyrmopszi5qyvkrja4dvgl
ambitar
0
1063241
6110185
2026-04-28T00:59:32Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|sufijo|ámbito|ar}}. ==== {{verbo intransitivo|es}} ==== ;1: {{plm|frecuentar}}, [[acostumbrar]]. {{uso|raro}} {{ejemplo|Podríamos a su vez delimitarlos en dos: el específicamente andaluz (...) y el que, '''ambitado''' en lo andaluz, tiene como fuente de origen la tradición literaria y religiosa, aunque sea pasada por el propio mundo gitano.|c=libro|t=Yo, García Lorca|a=And…»
6110185
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|ámbito|ar}}.
==== {{verbo intransitivo|es}} ====
;1: {{plm|frecuentar}}, [[acostumbrar]].
{{uso|raro}}
{{ejemplo|Podríamos a su vez delimitarlos en dos: el específicamente andaluz (...) y el que, '''ambitado''' en lo andaluz, tiene como fuente de origen la tradición literaria y religiosa, aunque sea pasada por el propio mundo gitano.|c=libro|t=Yo, García Lorca|a=Andrés Sorel|f=1997|isbn=9788481360813|editorial=Txalaparta|p=91|u=https://www.google.com.ar/books/edition/Yo_Garc%C3%ADa_Lorca/eZtbOCFHbKYC?hl=es-419&gbpv=1&dq=ambitado&pg=PA91&printsec=frontcover}}
==== Conjugación ====
{{es.v}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
73sbkjmd60dq5g1hi2lfzjy7ms5w4ff
6110186
6110185
2026-04-28T01:02:42Z
Tmagc
158167
6110186
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|ámbito|ar}}.
==== {{verbo intransitivo|es}} ====
;1: {{plm|ambientar}}.
{{uso|raro}}
{{ejemplo|Podríamos a su vez delimitarlos en dos: el específicamente andaluz (...) y el que, '''ambitado''' en lo andaluz, tiene como fuente de origen la tradición literaria y religiosa, aunque sea pasada por el propio mundo gitano.|c=libro|t=Yo, García Lorca|a=Andrés Sorel|f=1997|isbn=9788481360813|editorial=Txalaparta|p=91|u=https://www.google.com.ar/books/edition/Yo_Garc%C3%ADa_Lorca/eZtbOCFHbKYC?hl=es-419&gbpv=1&dq=ambitado&pg=PA91&printsec=frontcover}}
;2: {{plm|frecuentar}}, [[acostumbrar]].
{{uso|raro}}
==== Conjugación ====
{{es.v}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
1k51cn4z7x6zi8dmfc1zgf5xprlfb0c
contrainsurgencia
0
1063242
6110194
2026-04-28T03:36:39Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|prefijo|contra|insurgencia}}. ==== {{sustantivo femenino|es}} ==== {{es.sust}} ;1 {{csem|milicia|política}}: El arte de controlar, dominar y someter a todo tipo de [[insurgencia]] que se enfrente a un régimen. ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references />»
6110194
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|prefijo|contra|insurgencia}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1 {{csem|milicia|política}}: El arte de controlar, dominar y someter a todo tipo de [[insurgencia]] que se enfrente a un régimen.
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
cbc3iik6ghm05fpoxwzieqp3d8sk8t4
6110195
6110194
2026-04-28T03:37:06Z
Tmagc
158167
6110195
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf|ayuda=contra-insurgencia}}
=== Etimología ===
{{etimología|prefijo|contra|insurgencia}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1 {{csem|milicia|política}}: El arte de controlar, dominar y someter a todo tipo de [[insurgencia]] que se enfrente a un régimen.
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
4ozv5awn5zv9kuc8kujhltp0sjzpbw3
pentotal
0
1063243
6110197
2026-04-28T03:43:33Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología|marca|Pentothal}}. ==== {{sustantivo masculino|es}} ==== {{es.sust}} ;1 {{csem|química}}: {{plm|tiopentato de sodio}}. {{ámbito|Argentina}} == Referencias y notas == <references />»
6110197
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|marca|Pentothal}}.
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1 {{csem|química}}: {{plm|tiopentato de sodio}}.
{{ámbito|Argentina}}
== Referencias y notas ==
<references />
dc0kzyxrai0jo3vr7x5rvjusrdp4pta
6110198
6110197
2026-04-28T03:45:14Z
Tmagc
158167
6110198
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|marca|Pentothal}}.
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1 {{csem|química}}: {{plm|tiopentato de sodio}}.
{{ámbito|Argentina}}
{{sinónimo|tiopental}}
== Referencias y notas ==
<references />
rfy8yljh1igc1ro633tnv9hjfdw7pgb
tiopentato de sodio
0
1063244
6110199
2026-04-28T03:47:59Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología}}. ==== {{locución|es|sustantiva|masculina}} ==== {{es.sust|s}} ;1 {{csem|química}}: Un [[barbitúrico]] C<sub>11</sub>H<sub>18</sub>N<sub>2</sub>O<sub>2</sub>S utilizado en forma de sal [[sódica]], especialmente como [[anestésico]] [[intravenoso]]; y como [[droga de la verdad]]. ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references />»
6110199
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
==== {{locución|es|sustantiva|masculina}} ====
{{es.sust|s}}
;1 {{csem|química}}: Un [[barbitúrico]] C<sub>11</sub>H<sub>18</sub>N<sub>2</sub>O<sub>2</sub>S utilizado en forma de sal [[sódica]], especialmente como [[anestésico]] [[intravenoso]]; y como [[droga de la verdad]].
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
qf0sgzaed60o2yimgxsw0d7tgxu27rc
droga de la verdad
0
1063245
6110200
2026-04-28T03:49:57Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología}}. ==== {{locución|es|sustantiva|femenina}} ==== {{es.sust|cop=n}} ;1: Medicación psicoactiva utilizada para obtener información de una persona que esta indispuesta o imposibilitada para facilitarla. {{sinónimo|suero de la verdad}} ==== Véase también ==== {{w}} ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references />»
6110200
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
==== {{locución|es|sustantiva|femenina}} ====
{{es.sust|cop=n}}
;1: Medicación psicoactiva utilizada para obtener información de una persona que esta indispuesta o imposibilitada para facilitarla.
{{sinónimo|suero de la verdad}}
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
7vbiooqkvebq1m6m3qkwkz5ib6l56z1