Wikcionario
eswiktionary
https://es.wiktionary.org/wiki/Wikcionario:Portada
MediaWiki 1.47.0-wmf.5
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
ciclista
0
3670
6117372
5716218
2026-06-06T21:09:05Z
~2026-33656-67
182972
Imagen
6117372
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|fr|cycliste}}, {{etim|la|cyclus}}, {{etim|grc|κύκλος}}.<ref>{{DLE}}</ref>
=== {{sustantivo masculino y femenino|es}} ===
{{es.adj|ng}}
[[File:Ciclista (3281411570).jpg|thumb|[1]]]
;1: Persona que se transporta en una [[bicicleta]].
{{uso|utca}}
=== {{adjetivo|es}} ===
{{es.adj|ng}}
;2 {{csem|deporte}}: {{adjetivo de sustantivo|[[ciclismo]]|al}}.
{{uso|utcs}}
=== Véase también ===
{{w}}
* [[ciclismo]]
=== Traducciones ===
{{trad-arriba}}
{{t|de|t1=radfahrer}}
{{t|fr|t1=cycliste}}
{{t|hu|t1=biciklista}}
{{t|en|t1=biker|t2=cyclist}}
{{t|it|t1=ciclista}}
{{t|pt|t1=ciclista}}
{{trad-abajo}}
== Referencias y notas ==
<references />
7l8anvlzmoq2spiaflz3as4jvc5perr
caraqueño
0
8583
6117306
6055405
2026-06-06T15:45:33Z
Limotecariu
6752
/* Traducciones */
6117306
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|sufijo|Caracas|eño}}
=== {{adjetivo|es}} ===
{{es.adj}}
;1: Persona originaria o habitante de [[Caracas]].
{{uso|utcs}}
;2: Se dice de algo que proviene o tiene relación con [[Caracas]], capital de [[Venezuela]].
=== Véase también ===
{{wikipedia}}
[[Categoría:ES:Gentilicios]]
=== Traducciones ===
{{trad-arriba}}
<!-- formato: {{t+|idioma|<acepción#>|palabra|género}} p. ej. {{t+|fr|1|chose|f}} -->
{{t|ast|t1=caraquexu}}
{{trad-abajo}}
== Referencias y notas ==
<references />
1rqap6ia9715lcfskd5n8zt2mvemh7o
comida
0
21925
6117399
6108438
2026-06-07T03:56:56Z
PFSV-UY
128755
/* Asturiano */
6117399
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{etimología|FEM|comido}}, participio de pasado del verbo {{l+|es|comer}}.<ref name=drae>{{DRAE2001}}</ref>
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{sustantivo de verbo|comer}}.
{{sinónimo|ingesta}}
{{ejemplo|A veces una sola ''comida'' de sangre hasta la repleción basta para iniciar la muda hasta el próximo estadio.|título=La enfermedad de Chagas en Bolivia|editorial=Ministerio de Salud y Previsión Social|páginas=27|c=libro|a=Julio R. Alfred Cassab|fecha=1999|l=La Paz}}
;2: {{ucf|sustancia}} que se [[ingerir|ingiere]] para la [[nutrición]] de un [[ser vivo]].
{{sinónimo|alimento}}
{{ejemplo|las gallinas siempre se llevan en tales viajes para tener caldo y carne fresca como única ''comida'' nutritiva.|título=Viajes por el Napo: cartas de un misionero (1924-1930)|editorial=Abya-Yala|páginas=89|c=libro|a=Emilio Gianotti|fecha=1997|l=Quito}}
;3: {{ucf|ocasión}} [[regular]] y [[social]]mente estipulada para comer.
{{hipónimo|almuerzo|cena|desayuno|merienda}}
{{ejemplo|En cada ''comida'' se ofrecía un sacrificio al fuego doméstico.|título=Historia de Las Religiones|editorial=Senén Martín|páginas=173|c=libro|a=Juan B. Bergua|fecha=1964|l=Ávila}}
;4: En particular, ocasión que se destina a la comida{{-sub|3}} de [[mediodía]].
{{ámbito|España|México}}
{{sinónimo|almuerzo}}
;5: En particular, ocasión que se destina a la última comida{{-sub|3}} del día.
{{ámbito|Chile|Colombia|Perú}}
{{sinónimo|cena}}
;6 {{csem|sexualidad}}: {{ucf|estimulación}} de los [[genital]]es con la [[boca]], [[labios]] o [[lengua]] que se practica como parte del [[coito]].
{{ámbito|España|nota=Norte}}
{{uso|coloquial}}
{{sinónimo|sexo oral}}
{{ejemplo|En ''El pintor de batallas'', entre otras cosas, aparece una ''comida'' de coño (dicho en corto y por derecho).|c=libro|t=Libro de estilo de El País|a=El País|f=2014-06-05|editorial=AGUILAR|isbn=9788403131309}}
====Locuciones====
{{trad-arriba|Locuciones}}
* {{l|es|casa de comidas}}
* {{l|es|comida rápida}}
* {{l|es|hacer desastre con la comida}}: transgredir un régimen alimenticio (Venezuela; coloquial).
* {{l|es|reposar la comida}}
{{trad-abajo}}
{{trad-arriba|Refranes}}
* [[comidas hechas, amistades hechas]]: Suele jugarse con el refrán cambiándolo por [[comidas hechas, amistad deshecha]] (Chile)
{{trad-abajo}}
====Véase también====
{{w}}
====Traducciones====
{{trad-arriba}}
{{t|af|t1=ete|t2=maaltyd}}
{{t|de|a1=1|t1=Essen|g1=n|a2=2|t2=Mahlzeit|g2=f|t3=Fraß|g3=m|nota3=informal}}
{{t|ast|a1=1,2|t1=comida|g1=f}}
{{t|br|a1=2|t1=boued|g1=m}}
{{t|bg|t1=храна|t2=ядене}}
{{t|ca|a1=1|t1=menjar|a2=2|t2=àpat|a3=3|t3=dinar|a4=4|t4=sopar}}
{{t|cs|a1=1|t1=jídlo|g1=n}}
{{t|da|t1=måltid}}
{{t|eo|t1=manĝo}}
{{t|eu|t1=jan}}
{{t|fr|a1=2|t1=repas}}
{{t|gl|t1=comida}}
{{t|hu|a1=1|t1=étel}}
{{t|en|a1=1|t1=food|a2=2|t2=meal|a3=3|t3=lunch|a4=4|t4=dinner|t5=supper|a6=5|t6=blowjob}}
{{t|it|a1=1|t1=pasto|a2=1|t2=cibo}}
{{t|arn|a1=1|t1=iyael}}
{{t|yua|t1=haanal|t2=hanlil}}
{{t|mn|t1=хоол}}
{{t|nci|a1=1|t1=tlacualli}}
{{t|nl|a1=1|t1=eten|a2=2|t2=maal|a3=2|t3=maaltijd|a4=3|t4=lunch|a5=3|t5=middagmaal|a6=4|t6=avondmaal|a7=4|t7=diner}}
{{t|nb|t1=måltid}}
{{t|pap|t1=komemento|t2=komementu|t3=kuminda}}
{{t|pt|t1=comida|t2=refeição}}
{{t|sv|t1=måltid}}
{{t|tl|t1=pagkáin}}
{{t|zu|t1=ukudla}}
{{trad-abajo}}
=== Forma flexiva ===
==== Forma adjetiva y de participio ====
;1: {{forma participio|comido|femenino|v=comer}}.
==== Forma verbal ====
;2: {{forma verbo|comedir|1s|t=presente|m=subjuntivo|pronominal=s}}.
;3: {{forma verbo|comedir|3s|presente|subjuntivo|pronominal=s}}.
;4: {{forma verbo|comedir|p=usted|m=imperativo|pronominal=s}}.
== {{lengua|ast}} ==
{{pron-graf|leng=ast|}}
=== Etimología ===
{{etimología|leng=ast}}.
=== {{sustantivo femenino|ast}} ===
;1: {{plm}}.
== {{lengua|gl}} ==
{{pron-graf|leng=gl}}
=== Etimología 1 ===
{{etimología|leng=gl}}.
==== {{sustantivo femenino|gl}} ====
{{gl.sust}}
;1 {{csem}}: {{plm}}
{{ejemplo|Arrematada a ''comida'' en seguida unha puxose a tocar o fandango no pandeiro.}}
== Referencias y notas ==
<references />
qck87q0tc8w6553bw46j8ekovabj44j
kofi
0
36260
6117385
4522569
2026-06-06T22:36:54Z
Egaina
73660
6117385
wikitext
text/x-wiki
== {{lengua|ha}} ==
{{pron-graf|leng=ha}}
=== Etimología ===
{{etimología|leng=ha}}.
=== {{sustantivo|ha}} ===
;1: {{plm|café}}
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag|en|coffee}}
=== {{sustantivo|yag}} ===
;1: {{plm|café}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
qqibsq9lmbc4o98mwj1ncvo6341hx4f
jua
0
36528
6117366
5961163
2026-06-06T19:51:43Z
Egaina
73660
/* Yagán */
6117366
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|onomatopeya}}
=== {{interjección|es}} ===
;1: {{impropia|Exclamación de gozo o risa.}}
{{sinónimo|juas}}
=== Traducciones ===
{{trad-arriba}}
<!--{{t+|ar|?|}}-->
<!--{{t+|de|?|}}-->
<!--{{t+|bg|?|}}-->
<!--{{t+|ca|?|}}-->
<!--{{t+|eo|?|}}-->
<!--{{t+|fr|?|}}-->
<!--{{t+|en|?|}}-->
<!--{{t+|it|?|}}-->
<!--{{t+|ja|?|}}-->
<!--{{t+|nl|?|}}-->
<!--{{t+|pl|?|}}-->
<!--{{t+|pt|?|}}-->
{{trad-abajo}}
== {{lengua|ote}} ==
{{pron-graf|leng=ote}}
=== Etimología ===
{{etimología|leng=ote}}
=== {{sustantivo|ote}} ===
;1 {{csem|mamíferos|leng=ote}}: {{plm|conejo}}.
== {{lengua|sw}} ==
{{pron-graf|leng=sw}}
=== Etimología ===
{{etimología|leng=sw}}.
=== {{sustantivo|sw}} ===
;1: {{plm|sol}}
== {{lengua|yag}} ==
{{pron-graf|leng=yag|fone=ˈjua|v=jóa}}
=== Etimología ===
{{etimología|leng=yag}}.
=== {{verbo|yag}} ===
;1: {{plm|morder}}.
== Referencias y notas ==
<references />
ai23y5h3762cxhpjppwv0pm6i532fxb
litotricia
0
41290
6117377
5744904
2026-06-06T21:34:16Z
Tmagc
158167
/* Etimología */
6117377
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|fr|lithotritie}}; {{etim|prefijo|lito||la|tritum}}.
=== {{sustantivo femenino|es}} ===
{{es.sust}}
;1 {{csem|medicina}}: Técnica utilizada en [[urología]] consistente en la [[fragmentación]] de [[cálculo]]s [[urinario]]s mediante ondas de choque.
=== Traducciones ===
{{trad-arriba}}
{{t|fr|t1=lithotritie}}
{{trad-abajo}}
== Referencias y notas ==
<references />
70h25gdjxq6lqr6hsrib7d84puzubg4
s'enfuir
0
51990
6117303
6100003
2026-06-06T14:12:41Z
~2026-32817-27
182888
6117303
wikitext
text/x-wiki
== {{lengua|fr}} ==
{{pron-graf|leng=fr|1audio1=Fr-enfuir.ogg}}
=== Etimología 1 ===
{{etimología|leng=fr|prefijo|en|fuir}}.
==== {{verbo pronominal|fr}} ====
;1: {{plm|huir}}, [[evadirse]].
==== Conjugación ====
{{fr.v|pronominal=solo}}
== Referencias y notas ==
<references />
[[Categoría:FR:Verbos solo pronominales]]
306bb24u58lihwdpo595hofzw2g9q0q
tauko
0
54938
6117346
5929676
2026-06-06T19:34:36Z
Egaina
73660
6117346
wikitext
text/x-wiki
== {{lengua|fi}} ==
{{pron-graf|leng=fi}}
=== Etimología ===
{{etimología|leng=fi}}
=== {{sustantivo|fi}} ===
;1: {{plm|pausa}}
;2: {{plm|intervalo}}.
=== Información adicional ===
{{derivad|tauota|kahdeksasosatauko|kokotauko|lepotauko|tulitauko}}
=== Locuciones ===
* ''[[pitää]] ~'' [[hacer]] una [[pausa]]
=== Declinación ===
{{fi.sust|type=valo|tau|k||o|a}}
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{verbo|yag}} ===
;1: {{plm|visitar}}, [[acompañar]]. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
gqa73pmkf56cgu32fwsbzy0k9dciu7p
pastelero
0
56461
6117337
5750104
2026-06-06T17:59:30Z
~2026-33656-67
182972
/* Adjetivo */ Imagen
6117337
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
[[Categoría:ES:Oficios]]
=== Etimología 1 ===
{{etimología|sufijo|pastel|ero}}.
==== {{adjetivo|es}} ====
{{es.adj}}
[[File:Konditor.jpg|thumb|[2]]]
;1: {{adjetivo de sustantivo|los [[pastel]]es o la [[pastelería]]}}.
;2: Que [[preparar|prepara]] o [[vender|vende]] pasteles.
{{uso|utcs}}
{{sinónimo|crustulario|nota1=obsoleto}}.
;3: Que se [[plegar|pliega]] a la [[opinión]] de los [[poderoso]]s para [[granjear]]se su [[favor]].
{{ámbito|España}}
{{uso|utcs|coloquial|despectivo}}
{{sinónimo|camaleón|camarón|chaquetero|girasol|panchero|nota5=Venezuela|panqueque|veleta}}.
;4: Que consume [[droga]]s [[recreativo|recreativas]].
{{ámbito|Perú}}
{{uso|utcs|coloquial|despectivo}}
{{sinónimo|adicto|drogadicto|drogado|drogata|nota4=España|drogodependiente|drogón|nota6=Argentina|toxicómano|volado|nota8=Chile}}.
==== Locuciones ====
*[[calabaza pastelera]]
*[[crema pastelera]]
*[[manga pastelera]]
==== Refranes ====
* [[pastelero a tus pasteles]]
==== Véase también ====
{{Wikipedia}}
==== Traducciones ====
{{trad-arriba}}
{{t|de|a1=2|t1=Konditor}}
{{t|sl|a1=2|t1=Slaščičar}}
{{trad-abajo}}
== Referencias y notas ==
<references />
ptdk22xsrmtullufu3e5cvglnrl4dpu
weird
0
66346
6117386
6045087
2026-06-06T22:38:50Z
Adelpine
34679
Corrige la pronunciación AFI de un audio
6117386
wikitext
text/x-wiki
== {{lengua|en}} ==
{{pron-graf|leng=en|1audio1=en-GB-weird.ogg|1fono1=wɪəd|1fono3=wiːəd|1pron1=Received Pronunciation|2audio1=en-us-weird.ogg|2audio2=LL-Q1860 (eng)-Simplificationalizer-weird.wav|2audio3=LL-Q1860 (eng)-Wodencafe-weird.wav|2audio4=LL-Q1860 (eng)-Grendelkhan-weird.wav|2aunota1=California|2aunota2=Nueva Jersey|2aunota3=Texas|2aunota4=Connecticut|2fono1=wiɚd|2fono5=wɪɚd|2pron1=General American, Canadá|3audio2=en-au-weird.ogg|3aunota2=Queensland|3fone2=wɪːd|3fono1=wɪəd|3fono3=wiːəd|3pron1=Australia|1fone2=wɪːd|ls=1}}
=== Etimología 1 ===
{{etimología|leng=en|ang|wyrd}}.
==== {{adjetivo|en}} ====
{{en.adj|c}}
;1: {{plm|sobrenatural}}, que no parece ser de este mundo.
;2: {{plm|extraño}}, [[extraordinario]], [[raro]].
;3: {{plm|fantástico}}.
;4: {{plm|propio}} o relacionado con el destino.
{{uso|leng=en|arcaico}}
==== {{sustantivo|en}} ====
{{en.sust|c}}
;5: {{plm|destino}}.
== Referencias y notas ==
<references />
18sskhrjd8ejpn1xto9if29psj4ri62
chola
0
70526
6117407
5728032
2026-06-07T09:27:52Z
~2026-33460-80
182981
6117407
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{etimología}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: Calzado formado por una suela que se ata al pie con correas, cuerdas o cordones.
{{sinónimo|sandalia}}.
;2: Zapato ligero que se usa en tiempo de calor.
{{ámbito|Canarias|Venezuela}}
{{sinónimo|chancla|chancleta|sandalia}}.
==== Traducciones ====
{{trad-arriba}}
{{t|af|a1=1|t1=sandalo}}
{{trad-abajo}}
=== Etimología 2 ===
{{etimología}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{plm|cabeza}}.
{{uso|coloquial}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Etimología 3 ===
{{etimología}}.
==== {{sustantivo femenino|es}} ====
;1: Dícese del [[pedal]] acelerador de los vehículos de motor.
{{ámbito|Venezuela}}
{{uso|coloquial}}
{{sinónimo|chancleta|nota=Venezuela}}
==== {{adjetivo|es}} ====
;2: Muy rápido, [[veloz]].
{{ámbito|Venezuela}}
{{uso|coloquial|utcadv}}
==== Locuciones ====
*[[darle chola]]: meter prisa, apresurar, hacer algo con rapidez (Venezuela, coloquial).
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Forma flexiva ===
==== Forma adjetiva ====
;1: {{forma adjetivo|cholo|femenino}}.
== Referencias y notas ==
<references />
897z2ptofumu4yoazspmlu31ud5stbz
6117408
6117407
2026-06-07T09:29:26Z
~2026-33460-80
182981
6117408
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{etimología}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: Calzado formado por una suela que se ata al pie con correas, cuerdas o cordones.
{{sinónimo|sandalia}}.
;2: Zapato ligero que se usa en tiempo de calor.
{{ámbito|Canarias|Venezuela}}
{{sinónimo|chancla|chancleta|sandalia}}.
==== Traducciones ====
{{trad-arriba}}
{{t|it|a1=1|t1=sandali}}
{{t|el|a1=1|t1=σανδάλι}}
{{trad-abajo}}
=== Etimología 2 ===
{{etimología}}.
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{plm|cabeza}}.
{{uso|coloquial}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Etimología 3 ===
{{etimología}}.
==== {{sustantivo femenino|es}} ====
;1: Dícese del [[pedal]] acelerador de los vehículos de motor.
{{ámbito|Venezuela}}
{{uso|coloquial}}
{{sinónimo|chancleta|nota=Venezuela}}
==== {{adjetivo|es}} ====
;2: Muy rápido, [[veloz]].
{{ámbito|Venezuela}}
{{uso|coloquial|utcadv}}
==== Locuciones ====
*[[darle chola]]: meter prisa, apresurar, hacer algo con rapidez (Venezuela, coloquial).
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
=== Forma flexiva ===
==== Forma adjetiva ====
;1: {{forma adjetivo|cholo|femenino}}.
== Referencias y notas ==
<references />
mgises3a089yby3jjwjzjkzj1blzylx
ater
0
100597
6117404
6059871
2026-06-07T06:29:15Z
~2026-32817-27
182888
6117404
wikitext
text/x-wiki
== {{lengua|la}} ==
{{pron-graf|leng=la|ayuda=āter}}
=== Etimología ===
{{etimología|leng=la|itc-pro|*ātros|glosa=negro}}, y este del protoindoeuropeo {{l+|ine-pro|*h₂áh₁tr̥|*h₂eh₁-t(-)r-|ine=x|tr="lugar donde se hace el fuego"}}, de {{l+|ine-pro|*h₂eh₁-|tr="estar caliente"}}.<ref name="vaan">{{DeVaan|60}}</ref> Compárese el irlandés antiguo {{l+|sga|áith|glosa=horno}}, el griego antiguo {{l+|grc|αἰθήρ|tr=aithḗr, "[[aire]]", "[[éter]]"}}, el avéstico {{l+|ae|𐬁𐬙𐬀𐬭𐬱|glosa=fuego|tr=ātarš}}, el sánscrito {{l+|sa|अथर्वन्|tr=átharvan}}, el armenio antiguo {{l+|xcl|*այր|glosa=fuego|tr=*ayr}}, {{l+|xcl|այրեմ|glosa=arder|tr=ayrem}}, el persa medio {{l+|pal|ātur}} (moderno {{l+|fa|آدر|tr=ādar}}, o el oseta {{l+|os|арт|tr=art}}.<br>→ {{l+|la|areo|āreō}}, {{l+|la|atrox|atrōx}}
==== {{adjetivo|la}} ====
{{comp.la|ater|āter|atr|ātr|iss=r|nota=¹ <small>latín científico, sin testimonios en el clásico</small>|s3=maximē āter|snotapie=¹}}
;1 {{csem|leng=la|colores}}: {{plm|negro}}, de color [[oscuro]].<ref name="ol">{{Oxf-lat}}</ref>
{{antónimo|leng=la|albus}}
;2: ''Dicho del cabello'': [[negro]], [[oscuro]], [[castaño]].<ref name="ol" />
;3: ''Dicho de la piel'': [[negro]], [[oscuro]], [[moreno]], [[tostado]] (por el sol).<ref name="ol" />
;4: Desprovisto de luz, [[oscuro]], [[fusco]], [[sombrío]].<ref name="ol" />
;5: ''Dicho de nubes, polvo, etc.'': [[negro]], [[oscuro]], [[denso]], [[espeso]].<ref name="ol" />
;6: ''Dicho de bosques'': [[oscuro]], [[sombrío]], [[tenebroso]].<ref name="ol" />
;7: ''Dicho de aguas, olas, etc.'': [[oscuro]], [[turbio]].<ref name="ol" />
;8: ''Dicho de la noche, la oscuridad, etc.'': [[negro]], [[oscuro]], [[tenebroso]], [[profundo]].<ref name="ol" />
;9: ''Dicho de la sangre de heridas, etc.'': [[ennegrecido]], [[manchado]].<ref name="ol" />
;10: {{plm|negro}} de sangre.<ref name="ol" />
;11: {{plm|manchado}}, [[sórdido]], [[escuálido]].<ref name="ol" />
;12: {{plm|manchado}} de moretones, [[acardenalado]].<ref name="ol" />
;13: ''Dicho del fuego, de las llamas, etc.'': [[humeante]], [[humoso]].<ref name="ol" />
;14: ''Dicho de la ceniza, etc.'': [[carbonizado]].<ref name="ol" />
;15: ''Para denotar negatividad, reprobación, etc.'': [[negro]], [[funesto]], [[desgraciado]], de mala suerte.<ref name="ol" />
;16: {{plm|fúnebre}}.<ref name="ol" />
;17: De [[negro]], de [[luto]].<ref name="ol" />
;18: ''Como epíteto de la muerte, especialmente personificada, o cosas asociadas a ella'': [[negro]].<ref name="ol" />
;19: {{plm|mortal}}, [[funesto]], [[terrible]], [[horroroso]].<ref name="ol" />
;20: ''Dicho especialmente de personas o cosas asociadas al inframundo''.<ref name="ol" />
;21: ''Dicho de animales peligrosos, de venenos'': [[mortal]].<ref name="ol" />
;22: ''Dicho del miedo o similar, especialmente personificado'': [[negro]], [[intenso]], [[profundo]].<ref name="ol" />
;23: {{plm|malvado}}, [[malévolo]].<ref name="ol" />
==== Declinación ====
{{la.adj|āter/ātr.+}}
=== Locuciones ===
{{trad-arriba|Locuciones con '''āter'''}}
* {{l|la|albus an ater sit}}
* {{l|la|atra bilis}}
* {{l|la|ater dies}}/{{l|la|atra dies}} -[6]- un día negro, de mala suerte, (poét.) el día de la muerte.
{{trad-abajo}}
=== Información adicional ===
{{derivad|atritas|atritus|atrox|atrocitas|atrociter}}
==== Descendientes ====
{{trad-arriba|Descendientes}}
{{d|fr|d1=âtre|niv=1}}
{{d|ro|d1=vatră|niv=1}}
{{trad-abajo}}
== Referencias y notas ==
<references />
lijs9qwfih07c4211gem9ye1gsxor84
conserva
0
120459
6117409
5894073
2026-06-07T09:31:40Z
~2026-33460-80
182981
6117409
wikitext
text/x-wiki
{{desambiguación|conservá}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología 1 ===
{{etimología|deverbal|conservar}}.
[[File:Canned marinated artichoke hearts.JPG|thumb|[2]]]
==== {{sustantivo femenino|es}} ====
{{es.sust}}
;1: {{sustantivo de verbo|conservar}}.
;2 {{csem|alimentos}}: {{ucf|alimento}} [[preparar|preparado]] y [[envasar|envasado]] de tal manera de [[mantener]]se [[comestible]] durante largo tiempo.
{{hipónimo|encurtido|salazón}}
{{ejemplo|a todos, de grado en grado:<br>'''''conservas''''' y confitado,<br>dátiles y diacitrón,<br>pastas, costras, citronate,<br>maçapanes y rosquillas,<br>pomas, mana, piñonate,<br>graxea y calabaçate,<br>alcorças y empanadillas.|c=libro|t=Cancionero general de Hernando del Castillo|a=Cancionero|f=1882|p=71}}
{{ejemplo|Así en el aspecto de primera apariencia, que importa mucho para dar boga y auge a una '''''conserva''''' alimenticia y hacerla apetecible como en el estado químico y orgánico y en el valor nutritivo de las conservas de pescado, surte efectos notables, determinando mejora substancial.|c=libro|t=Dictámenes|a=Antonio Maura|f=1929|oclc=934097404|p=470}}
;3 {{csem|alimentos}}: En particular, [[dulce]] de [[fruta]] que se deja [[secar]] para su conservación.
{{ámbito|El Salvador|Venezuela}}
;4 {{csem|náutica|Milicia}}: Compañía que se hacen varias embarcaciones navegando juntas para [[auxiliar]]se o defenderse.<ref name="drae1925">{{DLE1925}}</ref>
{{ejemplo|é asi nosotros arribamos al dicho rio, y en entrando con gran dificultad é peligro, porque la capitana estuvo encallada mas de tres horas en la entrada, y entrados de dentro no hallamos la '''''conserva''''', que fué nuestra total destruccion.|a=. Anónimo|f=1837|fo=1528|t=Declaraciones que algunos marineros de la nao San Gabriel dieron en Pernambuco|l=Madrid|editorial=Nacional|pasaje=¶4|c=libro}}
{{ejemplo|Y la otra de diez navíos de línea y seis fragatas para la '''''conserva''''' de flotas y galeones, guardacostas en las Indias y la escuadra de Barlovento, que aquí dice se puede componer de tres navíos de línea y tres fragatas de cuarenta y treinta, y, veinte cañones, aplicando para la manutención de dicha armada los fletes.|c=libro|t=Restablecimiento de las fabricas, y comercio español|a=Bernardo de Ulloa|f=1740|p=105}}
==== Locuciones ====
* {{l|es|conserva trojezada}}
* {{l|es|en conserva}}
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{t|de|a1=4|t1=Konserve|g1=f}}
{{t|hy|a1=4|t1=պահածո|tl1=pahaço}}
{{t|bg|a1=4|t1=консерва|tl1=konserva|g1=f}}
{{t|ca|a1=4|t1=conserva|g1=f}}
{{t|cs|a1=4|t1=plechovce}}
{{t|fr|a1=4|t1=conserve|g1=f}}
{{t|it|a1=4|t1=scatolame|g1=m}}
{{t|it|a1=3|t1=conserva|g1=f}}
{{t|pl|a1=4|t1=konserwa|g1=f}}
{{t|ro|a1=4|t1=conserve}}
{{t|sv|a1=4|t1=konserv|g1=c}}
{{t|th|a1=4|t1=เครื่องกระป๋อง|tl1=krêuang gràbpŏng}}
{{t|vi|a1=4|t1=lương khô}}
{{trad-abajo}}
=== Etimología 2 ===
{{etimología|acort|conservador}}.
==== {{sustantivo masculino y femenino|es}} ====
{{es.sust|mf}}
;1 {{csem|política}}: {{plm|conservador}}.<ref>{{referencia|c=pagina|u=https://www.laprensa.com.ar/Diccionario-Rioplatense-IV-493677.note.aspx|t=Diccionario Rioplatense IV|sitio=La Prensa|f=2020-9-15}}</ref>
{{uso|despectivo|utca}}
{{antónimo|progre}}
=== Forma flexiva ===
==== Forma verbal ====
;1: {{forma verbo|conservar|p=3s|t=presente|m=indicativo}}.
;2: {{forma verbo|conservar|p=2s|t=imperativo|afirmativo=sí}}.
== Referencias y notas ==
<references />
ju45ifyl6l0haanibaaxbokccv8owex
sifrino
0
135485
6117405
6023007
2026-06-07T09:21:32Z
~2026-33460-80
182981
6117405
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|incierta}}. Al parecer proviene del árabe ṣifr (صفر) que significa cero, para indicar vacío o nulidad.
=== {{adjetivo|es}} ===
{{es.adj}}
;1: Dicho de una persona, que [[ostentosamente]] [[pertenecer|pertenece]] o [[simular|simula]] pertenecer a una [[clase social]] [[pudiente]].{{cita requerida}}
{{ámbito|Venezuela}}.
{{uso|utcs|despectivo}}.
{{wikisauro|snob}}
;2: Persona que tiene y ostenta bienes materiales y de moda, pero tiene bajo nivel espiritual e intelectual, es decir, está "vacío" o es "nulo".{{cita requerida}}
{{ámbito|Venezuela}}.
{{uso|utcs|despectivo}}.
;3: Persona con alto nivel económico y social, con atributos físicos y económicos llamativos, generalmente con una forma de hablar con modismos, anglicismos y elementos de lenguaje culto.
{{ámbito|Venezuela}}.
{{uso|utcs|Elogioso}}.
=== Traducciones ===
{{trad-arriba}}
<!-- formato: {{t+|idioma|<acepción#>|palabra}} p. ej. {{t+|fr|a1=1|t1=voir}} si es sustantivo, indicar el género, p. ej. {{t+|fr|t1=voiture|f}} -->
<!--{{t+|de|}}-->
<!--{{t+|ar|}}-->
<!--{{t+|bg|}}-->
<!--{{t+|ca|}}-->
<!--{{t+|eo|}}-->
<!--{{t+|fr|}}-->
<!--{{t+|en|}}-->
{{t|it|a1=1|t1=snob}}
<!--{{t+|ja|}}-->
<!--{{t+|nl|}}-->
<!--{{t+|pl|}}-->
<!--{{t+|pt|}}-->
{{trad-abajo}}
== Referencias y notas ==
<references />
093p02fjzy5gy2ocbza7ztegtt3bx6k
Usuario discusión:Limotecariu
3
166861
6117376
5915694
2026-06-06T21:23:05Z
Tmagc
158167
Sección nueva: /* Pronunciación del grupo -sc- */
6117376
wikitext
text/x-wiki
* [[Usuario discusión:Limotecariu/Archivo 1]]
* [[Usuario discusión:Limotecariu/Archivo 2]]
== verbos ==
Hola, feliz año nuevo! Quiero encarar ahora el tema de los verbos. Me estoy basando en las normas ortográficas de 2012 (7ma edición) y ya tengo todo bastante cocinado, pouesto que funciona muy parecido al español. La plantilla {{ep|ast.v}} será muy similar a {{ep|es.v}}, pero de las diferencias nos debemos ocupar.
# De lo que aparece categorizado como "verbos altamente irregulares" (que tienen más irregularidades que una diptongación o cambio vocálico), tenemos [[asir]], pero por lo que veo no existe este verbo en asturiano. Está bien?
# Para los verbos terminados en -uar, tenemos [[:Categoría:ES:Verbos del paradigma averiguar]], [[:Categoría:ES:Verbos del paradigma evacuar]], [[:Categoría:ES:Verbos del paradigma actuar]], [[:Categoría:ES:Verbos del paradigma estatuar]]. Para los que terminan en -guar, siempre es diptongo. Para los que terminan en -cuar se puede decir "yo adecúo" o "yo adecuo", pero vi en asturiano que no existe la conjugación con hiato, es correcto? Después, para los que terminan en -uar que no pertenezcan a los demás grupos, se conjugan todos con hiato salvo [[estatuar]] (yo estatuo en vez de yo estatúo), asumo que es igual en asturiano. Podrías revisar estos cuatro paradigmas y decirme si estoy en lo correcto?
[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 22:25 31 dic 2025 (UTC)
:@[[Usuario:Limotecariu|Limotecariu]] Hola de nuevo y feliz año nuevo! Tengo más dudas pero antes de continuar, quisiera que revises primero las tablas que agregué en [https://es.wiktionary.org/w/index.php?title=Especial%3AContribuciones&target=Tmagc&namespace=all&tagfilter=&start=2026-01-01&end=2026-01-01&limit=250 estas contribuciones mías] (es decir, las que hice hoy 1-1-2026). Son pocos verbos, pero paradigmas bien variados. Quiero que veas si encontrás algún error en particular para confirmar que estoy haciendo todo bien antes de seguir avanzando. Cuando lo hagas avisame así proseguimos. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:24 2 ene 2026 (UTC)
:Hola, otra duda más. Para formar tiempos compuestos se usa la forma que termina en -ío o la que termina en -íu? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:52 3 ene 2026 (UTC)
@[[Usuario:Tmagc|Tmagc]] ¡Hola!, ¡feliz año! y perdona pero estuve desconectado en todos los sentidos todos estos días, por eso no te contesto hasta ahora. A ver, hay mucho que decir. te comento cosa que me preguntas y otras que fui viendo.
::1) Deberías consultar siempre la última edición de las ''Normes ortográfiques'', en este caso, [https://alladixital.org/wp-content/uploads/2024/01/Normes-Ortografiques-8a-edicion-FINAL-3.pdf la octava], aunque no cambia ni aporta nada (por lo menos en cuanto a la conjugación verbal) comparándola con la anterior edición (y anteriores, incluso). Hablando de conjugación verbal, deberías consultar también '''[http://ast.oslin.org/ esta página]''': escribe el verbo que quieras conjugar, dale a enter, y ya te sale su conjugación.
::::1bis) Se publicó a finales del año pasado un libro muy interesante sobre la conjugación asturiana, ''Xeografía llingüística del verbu asturianu'', del lingüista Ramón d'Andrés Díaz (Universidad de Oviedo, ed. Trabe, ISBN 978-84-10345-72-0), que trata las diferentes formas dialectales de la conjugación. Cuando termine de leerlo entero y hacer mis tablas con toda la información que aporta, igual habrá que cambiar o matizar algo de la conjugación general asturiana (un ejemplo, la forma secuandaria del futuro y del condicional para el verbo "ser", las formas "sedré/sedría", aunque normativas, son muy minoritarias, e igual habría que indicarlo; otro ejemplo, sí existen formas para el pretérito de subjuntivo terminado en -se -falase, comiese, viviese-, que igualmente habría que incluirla aunque la normativa actual no lo hace).
::2) Estuve viendo que has incluido tiempos compuestos para la conjugación asturiana y eso no es del todo correcto. A ver, no es que no existan, pero es un tema a tratar aparte, y lo mejor y más adecuado por el momento, es no incluir formas compuestas, porque lleva a error y a cometer errores: el auxiliar no es exactamente el verbo ''tener'' como pasa en protugués (esa construcción de "tener + participio" del asturiano, sin ser incorrecta del todo y equivaler a las formas compuestas castellanas, es más bien el equivalente a la perífrasis "llevar + participio" del castellano), sino también el verbo ''haber'', y está presente en algunos casos, como para el infinitivo compuesto (haber falao) o para el pluscuamperfecto de indicativo, pero que este caso se conjugaría en imperfecto (había falao), pero también en perfecto (hubiere falao) significando lo mismo; de todos modos, el pluscuamperfecto en asturiano suele ser sintético (falara ~ falare, coincidente con el imperfecto de subjuntivo), usado incluso hablando en castellano.
:::2bis) Y sobre tu pregunta, en estos tiempos "compuestos", la forma a usar del '''participio es la forma neutra, es decir, la terminada en «-o»''', ya que no cambia ni en género ni en número. De hecho, verbos como ser o tar nun tienen más forma que la neutra "sío, tao", ensin formes masculina/femenina o singular/plural.
::3) En cuanto a la nomenclatura o distribución de los tiempos verbales en asturiano, difiere un poco del castellano. El modo indicativo se compone de cuatro tiempos: presente, imperfecto, "indefinido", y pluscuamperfecto. El futuro y condicional forman el modo potencial. El modo subjuntivo se compone de presente y "imperfecto". Luego el modo imperativo, y por último, las formas no personales, que son infinitivo, gerundio y participio. Como ves, no hay nunca tiempos compuestos (ojo, que hay un error "muy gordo" en tus tablas de conjugación, y es con el pluscuamperfecto de indicativo, que es un tiempo sintético, como en gallego y portugués, y antaño también en castellano: falara ~ falare, comiera ~ comiere, viviera ~ viviere, fora ~ fore, viniera ~ viniere, dixera ~ dixere, ficiera ~ficiere, etc.).
::::3bis) Si te fijaste, puse entrecomillados el nombre de dos tiempos: el indefinido de indicativo y el imperfecto de subjuntivo, que son los nombres que aparecen tanto en las ''Normes'' de la Academia como en el lexicon ''Oslin'' (la página que te enlacé más arriba). Si miras los nombres que aparecen en el wikcionariu, no se usan (no uso) esos nombres, sino *''perfecto'' y simplemente *''pretérito'', respectivamente. En el primer caso, el nombre "oficial" es un calco de la nomenclatura tradicional castellana que llama indefinido a "canté" y simplemente perfecto a "he cantado"; en asturiano, al no tener esa diferencia entre perfecto simple/perfecto compuesto, lo suyo es llamarlo "perfecto" (además, por lógica, si hay un imperfecto y un pluscuamperfecto, lo suyo es que haya "en medio" un perfecto, ¿no?). Y con respecto al modo subjuntivo, simplemente hay que diferenciar entre un tiempo presente y un tiempo pasado, que es tanto imperfecto, como perfecto como pluscuamperfecto, por lo que llamarlo "imperfecto" es otra vez influencia de la nomenclatura castellana que no tiene sentido en el conjunto verbal asturiano. En el libro que te mencioné antes, para este último sí usa esta nomenclatura, o sea, "pretérito de subjuntivo" (aunque también lo llama "imperfecto de subjuntivo").
::4) Hay un problema con los verbos de "doble participio", uno regular y otro irregular, como ''ensugar'' > ''ensugáu//ensuchu'': la forma regular es la que se usaría para tiempos compuestos (Les camises '''tienen ensugao''' en pocu tiempu = secado), y la forma irregular sería en uso como adjetivo (Les camises '''tán ensuches''' = secas; aquí también se puede decir ''Les camises tán ensugaes''); es lo mismo que pasa en portugués, por otro lado.
::5) Los verbos acabado en '''-ducir''', en el perfecto y pluscuamperfecto de indicativo y en el pretérito de subjuntivo tienen dos formas, una regular (la genuina asturiana) y otra irregular (culta, más bien castellanismo): conducir > conducí ~ conduxi, conduciera/conduciere ~ conduxera/conduxere
::6) Los verbos acabados en -uar tienen dos comprptamientos. En princicpio, los acabado en -guar/-cuar, la -u- forma diptongo y se acentúa en la sílaba anterior, es decir: averiguar > aver'''i'''guo; en el caso de "evacuar", si miras el Oslin, lo conjuga sin embargo acentuando la -u-: evacuar > evac'''ú'''o (para otros terminados en -cuar, siempre como -guar). El resto de verbos termindaos en -uar, se conjugan como acentuar > acent'''ú'''o.
::7) En cuanto a los verbos diptongadores de las conjugaciones -er/-ir, la forma singular del imperativo puede presentar una forma secundaria no diptongada: coyer > cueyi ~ coyi (tu), dormir > duermi ~ dormi (de hecho, un baile tradicional asturiano se llama "corricorri", que es el imperativo repetido del verbo correr > cuerri ~ corri (tu). En algunos verbos, como coser, también pueden presentar una forma sin vocal desinencial, en este caso con el lexema diptongado: cues ~ cuesi ~ cosi (tu). La no diptongación no pasa sin embargo en los verbos de la primera conjugación: almorzar > almuerza (no existe *almorza).
::8) En el verbo "dir", incluyes para la primera y tercera personas singulares del presente de subjuntivo la forma "fora" que, para mi sorpresa, aparece también en el Oslin. No me parece que sea así, y en cuanto al oslin, supongo que será un error, no tiene sentido que esa forma, propia del pretérito de subjuntivo (y del pluscuamperfecto de indicativo) se use para el presente, y solo en esas dos personas, y no en las otras.
::9) En el caso del verbo "tener" las formas "teo, to" de la primera persona singular del presente de indicativo solo son válidas cuando se usa este verbo en perífrasis, pero no como verbo pleno sinónimo de "poseer": "tengo de facer la compra" ~ "teo (de) facer la compra" ~ "to (de) facer la compra", pero "tengo tres hermanos, tengo fame" (pero nunca *teo tres hermanos, *to tres hermanos, *teo/*to fame).
::10) Para terminar, mirando el modelo de flexión, el pronombre átono de la segunda persona plural es "vos" no "os" como en castellano; y no hay que confundirlo con "vós", que es el pronombre tónico sinónimo de "vosotros/vosotres". Pasa lo mismo son "nós", sinónimo de "nosotros/nosotres", diferente de "nos", el correspondiente átono, que tiene la variante "mos". El pronombre "tu" nunca lleva acento gráfico en asturiano. Los pronombres de cortesía pueden ser "vusté, vustedes" o "usté, ustedes". Y el pronombre "él" tiene la variante "elli".
Y hasta aquí lo que me preguntabas y otras cosas. Lo dicho, tengo que terminar de leer el libro anterior que te dije, pues aporta mucha, y nueva, información sobre la conjugación verbal asturiana, que habrá que tenerla en cuenta. Yo voy a tener que reelaborar las tablas de conjugación del wikcionariu pues hay algunos errores y cosas no del todo correctas en algunos verbos. Si tienes más preguntaso sugerencias, no dudes en contactar. Chau!!--[[Usuario:Limotecariu|Limotecariu]] ([[Usuario discusión:Limotecariu|discusión]]) 20:31 7 ene 2026 (UTC)
:@[[Usuario:Limotecariu|Limotecariu]] Corregí todos tus puntos salvo 7), que es lo que te preguntaré a continuación. Pero en resumen:
:* Reorganizé la denominación y taxonomía de los tiempos. Ahora el futuro y el condicional pasan a estar dentro del "modo potencial". El pluscuamperfecto es lo mismo que el imperfecto del subjuntivo, pero como las Normas Ortográficas lo consideran un tiempo aparte en las tablas, lo agregaré como un tiempo más en el modo indicativo. Las formas compuestas las quité por ahora, pero cuando tengas tiempo podrías modificar <code>auxiliar</code> ([[Módulo:flex/ast]], línea 559), una tabla con todos los auxiliares que se usan para cada persona de cada tiempo compuesto y avisarme cuando lo hagas si es que lo vas a hacer.
:* En efecto, es el pretérito perfecto. La denominación "indefinido" no dice mucho nada, por eso no la utilizo.
:* Para confirmar, estos verbos que supuestamente se dice que tienen "doble participio", en realidad tienen uno solo y es la forma regular: [[ensugar]], [[encender]], [[imprimir]]. Después tenemos en español [[proveer]] que no sé cómo se dice en asturiano pero el participio es [[provisto]] (la RAE reconoce [[proveído]] pero está en retroceso) y supongo que en asturiano sería regular o irregular? Después está [[freír]] con doble participio en castellano, pero en asturiano sería [[frir]] y es de participio regular.
:* Agregada la doble variante en -ducir
:* Eliminadas las variantes con fo- en el presente del subjuntivo de [[dir]].
:* Agregado el marcador de perífrasis en las formas teo, to del presente indicativo de [[tener]].
:* Corregidos los pronombres, aunque el objetivo es que los títulos y encabezados de la tabla sean sintéticos, por lo que no quiero que se convierta en una colección de variantes de pronombres, para eso ya existe {{ep|pron-graf}}.
:Cualquier duda sobre tus puntos, salvo 7), avisame porfa. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:00 13 ene 2026 (UTC)
:@[[Usuario:Limotecariu|Limotecariu]] Ahora sí, vamos con 7) y otras dudas que me quedaron. Es hora de empezar a hilar fino.
:Por un lado, hay verbos que terminan en -Vcer, -erer, -Vser, -Vxer, -Vcir, -erir, -Vsir, -Vxir, donde V representa una vocal cualquiera. De este grupo de verbos, vi que la tercera persona del presente del indicativo y la segunda del imperativo pierden la vocal final. Esto es algo ''regular'', en tanto que es una regla que se aplica simplemente de analizar la morfología de la palabra y no es algo que se aplica a verbos específicos. Sin embargo, vi que hay varios verbos que admiten ambas variantes, esto es, con y sin la vocal final. En las Normas se menciona dentro de este grupo a corr'''exir''', el'''ixir''', f'''uxir''', t'''exer'''. Esto significa que todos los verbos que terminan en -V'''x'''er y -V'''x'''ir admiten esta doble variante y que el resto (de los que mencioné al principio) solo admiten la variante sin la vocal final? En otras palabras, es correcta mi generalización o se te ocurre algún contraejemplo? (nota: [[facer]] ya está marcado como irregular en el módulo así que no entra en esta categoría)
:En línea con lo anterior, t'''usir''' tiene dos imperativos, pero no encontré más verbos en -Vsir así que supongo que podría dejarlo como una regla que se aplique para este tipo de verbos.
:Y por el otro, en efecto estoy viendo que hay verbos que diptongan el núcleo tónico (una irregularidad, por supuesto) que admiten doble imperativo, pero absolutamente todos los verbos que diptongan tienen el doble imperativo o solamente algunos. Y si solamente se da en algunos, habría en ese caso alguna regla para determinar cuándo lo tienen o no hay ninguna y solamente se puede saber "conociendo la misma palabra"? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:23 13 ene 2026 (UTC)
::@[[Usuario:Tmagc|Tmagc]] ¡Hola! Te contesto según me comentabas en tu mensaje anterior:
::1) Con respecto a la forma "falara~falare"/"bebiera~bebiere"/..., en asturiano es tanto el tiempo de pluscumaperfecto de indicativo (en castellano "había hablado"/"había bebido"/...) como el pretérito de subjuntivo (en castellano "hablase~hablara"/"bebiese~bebiera"/..); lo suyo es que, aunque coincidentes, aparezcan en apartados diferentes como ya está puesto. Como te comenté, también existe para el subjuntivo la conjugación con el morfema "-se", pero que no está recogida en la normativa (nada nuevo bajo el sol, un verbo como "caber", que sí aparece en el ''DALLA'', no tiene de momento un modelo de conjugación normativo), así que es necesario que aparezcan diferenciados si hay que incluir por ejemplo esta conjugación. Lo mismo para el pluscuamperfecto,q ue como te dije también existe una forma "compuesta (falar = había faloa = hubiera falao), pero que de momento la normativa no la recoge. Todos estos datos están recogidos en el libro que te comenté publicado a finales del año pasado, que trae mucha mucha inforamción y muy interesante, que habrá que tener en cuenta.
:::1bis) Lo que me pides de modifical la linea 559 sobre el auxiliar: como doje, lo de los tiempos compuestos en asturiano es complicado. En principio se usa el verbo "haber", como en castellano, pero también el verbo "tener" como en portugués, pero esta última perífrasis equivale más vien la la perífrasis "llevar + participio" del castellano -también existente en asturiano-; por tanto lo salomónico sería incluir como auxiliar tanto "haber" como "tener", pero el problema no es el auxiliar a usar sino qué tiempos compuestos existen en asturiano (infinitivo compuesto por ejemplo, y las formas alternativas ya dichas para el pluscumaperfecto, por ejemplo).
::2) Sería recomendable también cambiar el nombre de "pretérito imperecto" del subjuntivo a simplemente "pretériro": no hay más que un único pretérito en ese modo, y el propio Ramón d'Andrés (autor del libro mencionado) lo usa tambiéna secas para referirse a ese tiempo.
::3) Cierto que es un tanto cuestionable lo de doble participio, ya que para tiempos compuestos se usa solo la forma regular y en otros casos, ambos. La cuestión es si poner las dos formas en la tabla de conjugación o solo la forma regular. Yo pondría las dos. Los verbos que tienen este doble participio son los siguientes (pongo solo la forma masculina singular): ensugar, ensugáu/ensuchu; cocer, cocíu/cochu; frir, fríu/fritu; encender, encendíu/encesu; arrepentir, arrepentíu/arrepresu; cansar, cansáu/cansu; esneviar, esneviáu/esneviu; fartar, fartáu/fartu; llimpiar, llimpiáu/llimpiu; nublar, nubláu/nublu; pagar, pagáu/pagu; soltar, soltáu/sueltu. Quizá habría alguno más (p.ej.: imprentar, imprentáu/impresu ~ imprimir, imprimíu/impresu).
:::3bis) "proveer" no existe en asturiano; su equivalente en asturiano serían verbos como "abastecer, abondar, bastiar, fornir"; "provisto" como adjetivo, sería o bien el participio de algunod e los verbos anteriores o el adejtivo "aprevíu, -iad, -ío". El participio de ""frir" es de los dobles, regular "fríu" e irregular "fritu"; cuidado con la morfología del participio regular: fríu, '''frida''', frío (no confundirlo con el adjetivo "fríu, '''fría''', frío" = frío, lo contrario de "caliente").
::4) Estuve mirando las tablas del verbo "ser" y "dir", y para el pluscuamperfecto y para el pretérito de subjuntivo faltan las formas con -o-, esto es "fora ~ fore", "foras ~ fores", etc.
::5) Sobre lo de los pronombre, solo era una apreciación sobre alguna forma que no estaba correcta. Te recomendaría usar solo una forma de las posibles, como "él" (y no ya "elli", o usar "ella", para tener el femenino), y "nós, vós" en vez de "nosotros, vosotros" (los primeros engloban también la forma femenina); con el de cortesía, no pondría los de "(v)usté", o "usté" o "vusté". Solo una cosa más, para el cuadro del subjuntivo, habría que apostrofar la conjunción con los pronombres que empiecen por vocal: "qu'él", "qu'ella", "qu'usté".
::6) Los verbos acabados en -Vxer/-Vxir tienen dos formas en 3ps presente y en el imperativo, con o sin vocal final: texer: "él texe ~ tex la bufanda", "texi ~ tex [tu] la bufanda"; ambas son válidas y normativas. Con los verbos tipo -Vcer/-Vcir, -Vler/-Vlir, -Vner/-Vnir, -Vrer/-Vrir, -Vser/-Vsir, en principio desaparece siempre la vocal: traducir: "él traduz la novela", "traduz [tu] la novela"; pero...
:::6bis) en los siguientes verbos no desaparace la vocal ni en 3ps presente ni en imperativo: raener, definir, unir~aunir~xunir (& desunir~desaunir~dexunir), esgulir, espulir, gulir, pulir, abolir, dilir, xilir, guarir, parir, aferir, enxirir, firir, sirir ~ xirir, espavorir, escurir, xunxurir, xurir. P.ej., definir: "él define al palabra", "define [tu] la palabra" (y no "él *defín la palabra", "*defín [tu] la palabra"). Menos el primero de los verbos, son todos verbos de la tercera conjugación (cuidado, que verbos como venir, valir, adquirir, dixerir, preferir y otros sí presentan esa pérdida vocálica). Por tanto, aquí hay un dilema si considerarlo como una irregularidad o no: los verbos en -Vcer/-Vcir presentan todos esa pérdida vocálica, los verbos en -er todos (menos "raener") y los de en -ir depende del verbo...
::::6ter) en cuanto al verbo "facer" ~ "faer", hay un error en su conjugación: independientemente de si tomamos uno u otro infinitivo, las formas del presente indicativo son para ambos [tu] '''faes''', [él/ella] '''fai''', [ellos/elles] '''faen''', imperativo '''fai''' [tu]. por otro lado, las formas de perfecto, pluscuamperfecto y pretérito de subjuntivo con lexema "fix-" no presentan la -i- de la desinencia: fixera, fixere, etc., pero las formas en "fic-" no pierden esa -i- de la desiencia: ficiesti, ficiemos, etc.
:::::6quater) Sobre el imperativo del verbo "tusir", tus ~ tusi, pues sí, tanto el Oslin como las ''Normes ortográfiques'' le ponen doble imperativo. No sé qué decir, porque ciertamente es el único en -Vsir. Por ejemplo, los verbos acabados en -ducir pierden siempre la desinencia tanto en el presente como el imperativo (traducir: él traduz, traduz [tu], no existe *traduci [tu]), y en general, esos verbos que pierden la desinencia en el presente hacen lo mismo en el imperativo (aunque mira el punto siguiente)
::7) Sobre el imperativo de los verbos diptongadores: los que son de la primera conjugación, o sea, acabos en -ar, siempre diptongan: almorzar: él almuerza, almuerza [tu], sentar/sentase: él siéntase, siéntate [tu]. Es en los verbos diptongadores de la segunda y tercera conjugación, -er/-ir, donde el imperativo tiene dos formas, la diptongada y la no diptongada, a causa de la desinencia -i de este tiempo: vender: él viende la casa, viendi ~ vendi [tu] la casa (cuidado, que en asturiano el verbo "vender" sí diptonga, como perder, a diferencia del castellano); responder: ella respuende la pregunta, respuendi ~ respondi [tu] la pregunta (ídem); sentir: él siente la canción, sienti ~ senti [tu] la canción; dormir: él duerme nel sofá, duermi ~ dormi [tu] nel sofá. En verbos como los del punto 6, los que pierden la desinencia final, son poquitos verbos pero hay de todo: los verbos en -ocer que diptonguen, pierden la vocal del imperativo siempre y solo presentan forma diptongada en el imperativo: cocer: él cuez, cuez [tu] (básicamente, es este verbo y sus compuestos); en -oler, como goler: él güel, güel ~ güeli ~ goli [tu] pero moler: él muel, mueli ~ moli [tu] según el Oslin, pero según las ''Normes ortográfiques'', muel ~ mueli [tu] (con el verbo soler, misma conjugación que moler), coser: él cues, cues ~ cuesi ~ cosi [tu] (y sus compuestos igual). Para moler/soler, que son los que presentan conjugación diferente según la fuente consultada, pondría un paradigma similar a los verbos goler/coser: las tres posibles formas: diptongada sin desinencia, diptongada con desinencia, no diptongada con desinencia: muel ~ mueli ~ moli, suel ~ sueli ~ soli (aunque este último verbo, en imperativo, no me parece muy "natural", ni en castellano).
::8) Viendo la tabla del verbo "tener" hay dos errores: en el perfecto, solo las personas yo y él/ella tienen la forma con -e- en el lexema junto con la forma general con -u-, es decir, tuvi ~ tevi/tuvo ~ tevo; el resto de personas solo presentan el lexema tuv-: tuvisti, tuvimos, etc. (pero no *tevisti, *tevimos...). Por otro lado, el segundo error es que hay formas que no presentan la -i- en la desinencia: tuviesti/tuviemos/tuviestis/tuvieron y no *tuvesti/*tuvemos... como aparece en la tabla.
:::8bis) La alternancia u/e en el lexema es común también para el verbo "tar", que va a tener las mismas formas que el verbo "tener" (tuvi~tevi, tuviera~tuviere y el resto de la flexión de estos tiempos, es coincidente tanto para tener como para tar); lo mismo para "andar", que en la tabla correspondiente aparece correcto; sin embargo, el pluscumaperfecto y pretérito de subjuntivo aparece conjugado de manera regular, y en principio es irregular, es decir, anduviera~anduviere y no *andara~*andare. Y el verbo "haber" también tiene esa alternancia u/e en esas dos personas: hubi ~ hebi/hubo ~ hebo.
::Y creo que nada más por el momento, que ya es bastante. Esto del verbo es bastante complicado, y la normativa no explica ni muestra toda la variación y posibilidades, todas correctas, que hay. Te digo, tengo que leer y "estudiar" ese manual que te mencioné, porque aporta mucha y nueva información sobre la conjugación formal del asturiano, y habrá cosa que será necesario incluir aunque no lo mencione la normativa o mismamente sea contrario a ella. Sigo aquí para más. Chau!! [[Usuario:Limotecariu|Limotecariu]] ([[Usuario discusión:Limotecariu|discusión]]) 10:32 14 ene 2026 (UTC)
:::@[[Usuario:Limotecariu|Limotecariu]] Estuve ocupado con varias cosas pero finalmente volví a terminar de atar cabos sueltos
:::1) Para evitar una tabla excesivamente larga que consista en una mera exhibición de formas combinadas que no aportan nada de información nueva para el lector, creo que lo mejor es no mostrar las formas compuestas, de acuerdo a lo que me dijiste.
:::2) {{hecho|Cambiada la denominación}} a mostrar, de "subjuntivo, pretérito imperfecto" a "subjuntivo, pretérito". Aunque "internamente" el módulo usa la denominación "subj_imperf" porque no me dan ganas de ponerme a cambiar todo ahora. Es inofensivo esto último.
:::3) {{No}} escribiremos en el módulo los dobles participios para evitar sobrecargarlo con información que no es propia de lo puramente verbal, aunque en los verbos que tienen la variante irregular que se usa como adjetivo es posible insertarla por fuera del módulo sobre la misma plantilla, de forma similar a como lo hice en [[insertar]].
:::4) {{hecho|Corregidas}} las formas de los verbos [[ser]], [[dir]]
:::5) {{hecho}}
:::6) Aquí según el caso que corresponda, el módulo determinará si hay que eliminar o no la vocal final:
:::# -Vxer, -Vxir, -Vcer, -Vcir: {{hecho|sí}}
:::# -Vler: {{hecho|solamente si termina en -aler u -oler}}
:::# -Vlir: {{No}}, los únicos aquí son [[salir]] y [[valir]], que ya están marcados aparte como irregulares (tienen sus propias reglas)
:::# -Vner: {{No}}, los únicos son [[raener]] (regular básico) y [[poner]] (irregular)
:::# -Vnir: {{No}}, los únicos son [[definir]] y [[unir]] y no pierden la vocal
:::# -Vrer, -Vrir: {{hecho|solamente si termina en -erer o -erir}}
:::# -Vser, -Vsir: {{hecho|ya estaba puesta la regla}} aunque los únicos son [[coser]] y [[tusir]].
:::7) {{hecho|Agregados los imperativos dobles}} para verbos de la segunda y tercera conjugación que diptonguen y que NO pierdan la vocal final en el imperativo. Ejemplo en [[correr]] o [[vender]]. En cuanto a [[goler]] y [[coser]] que son los únicos que tienen el triple imperativo no sabría cómo acomodarlos, por ahora tiene el módulo la regla harcodeada para estos dos únicos verbos.
:::8) {{hecho|Corregidos los pretéritos fuertes en general}}, revisadas las formas de [[tar]], [[tener]], [[andar]], [[haber]] y agregadas para este último las formas afines a '''heb'''a en el presente del subjuntivo.
:::9) '''Pregunta''' Asumí que los imperativos para el resto de las personas (usted, nosotros, ustedes) se deben copiar de las formas del presente del subjuntivo tal como en español, esto es correcto?
:::Eso es todo creo. En cuanto a "tu" libro que nos va a traer innovaciones, de qué tipo de novedades habla? Si se refiere a formas irregulares que aplican a verbos específicos, entendería que modifiques las tablas en ast.wikt. Si los cambios son más masivos, regulares e involucran el reconocimiento de determinados patrones específicos, te recomendaría que aproveches el módulo que hice. No te ayudo a importarlo porque ya tengo demasiado trabajo con este proyecto, pero deberías hacer campaña para conseguir a alguien que quiera colaborar, supongo que en toda Asturias alguien que tenga un par de horas para dedicar a esto a la semana debe haber; es muy fácil hacerlo si se cuenta con los conocimientos adecuados. Como sea, saludos y gracias por el asesoramiento. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:06 22 ene 2026 (UTC)
::::@[[Usuario:Tmagc|Tmagc]]¡Hola! Pues creo que ya estará. Habrá que mirar las tablas de algunos verbos así al azar por si se escapó algo, pero creo que ya está todo. Sobre lo que me preguntas del imperativo, sí, para el resto de formas se usan las del presente de subjuntivo (esto es, para el tratamiento de cortesí y para las formas negativas); en cuanto a la primera persona plural, sería también la forma del presnte de subjuntivo, como en español, pero más propiamente la construcción "vamos + infinitivo" (semejante a lo que hace el inglés con "let's + inf.").
::::Sobre el libro/manual que mencioné, que es "mío" porque tengo una copia, jejeje, cuya autoría es del lingüisca y académico [[es:w:Ramón d'Andrés|Ramón d'Andrés]], aporta mucha información de todo tipo, desde cuestiones y formas dialectales (que no interesarían para las tablas de conjugación) hasta vitalidad y extensión de diferentes formas y flexiones (por ejemplo, con este manual, descubrí que las formas "sedré/sedría" del verbo "ser" son muy minoritarias y ni pertenecen casi al dialecto-base con el que se construye el estándar aunque éste las incluya, lo que me da a querer eliminarlas, al no incluirse otras formas -de este u otro verbo- con más presencia); como dije, es de lectura pausada y concienzuda, que [me] lleva, está llevando, tiempo, además de ser también trabajoso, y yo solo soy un wikipedista que no puede decidir realmente sin cotejo y otras opiniones o fuente qué admitir o qué no basándome solo en lo que aparece ahí.
::::Pero dejando ya lo que aporta y peude aportar este manual, creo que por el momento las tablas de conjugación para los verbos asturianos está completa, y podemos dar un descanso, salvo error o despiste en algún caso concreto. Muchísimas gracias por tu trabajo e interés en crear estos y todos los demás módulos para las entradas asturianas. [[Usuario:Limotecariu|Limotecariu]] ([[Usuario discusión:Limotecariu|discusión]]) 15:36 26 ene 2026 (UTC)
== Pronunciación del grupo -sc- ==
Cómo se pronuncia este grupo consonántico, por ejemplo en [[fascinante]], en el asturiano? Sería igual que en la variante no seseante del castellano, /s.θ/? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 21:23 6 jun 2026 (UTC)
d8mgj3orvmxt44dyb95t11balsr5d6f
6117400
6117376
2026-06-07T04:52:11Z
Limotecariu
6752
/* Pronunciación del grupo -sc- */ Respuesta
6117400
wikitext
text/x-wiki
* [[Usuario discusión:Limotecariu/Archivo 1]]
* [[Usuario discusión:Limotecariu/Archivo 2]]
== verbos ==
Hola, feliz año nuevo! Quiero encarar ahora el tema de los verbos. Me estoy basando en las normas ortográficas de 2012 (7ma edición) y ya tengo todo bastante cocinado, pouesto que funciona muy parecido al español. La plantilla {{ep|ast.v}} será muy similar a {{ep|es.v}}, pero de las diferencias nos debemos ocupar.
# De lo que aparece categorizado como "verbos altamente irregulares" (que tienen más irregularidades que una diptongación o cambio vocálico), tenemos [[asir]], pero por lo que veo no existe este verbo en asturiano. Está bien?
# Para los verbos terminados en -uar, tenemos [[:Categoría:ES:Verbos del paradigma averiguar]], [[:Categoría:ES:Verbos del paradigma evacuar]], [[:Categoría:ES:Verbos del paradigma actuar]], [[:Categoría:ES:Verbos del paradigma estatuar]]. Para los que terminan en -guar, siempre es diptongo. Para los que terminan en -cuar se puede decir "yo adecúo" o "yo adecuo", pero vi en asturiano que no existe la conjugación con hiato, es correcto? Después, para los que terminan en -uar que no pertenezcan a los demás grupos, se conjugan todos con hiato salvo [[estatuar]] (yo estatuo en vez de yo estatúo), asumo que es igual en asturiano. Podrías revisar estos cuatro paradigmas y decirme si estoy en lo correcto?
[[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 22:25 31 dic 2025 (UTC)
:@[[Usuario:Limotecariu|Limotecariu]] Hola de nuevo y feliz año nuevo! Tengo más dudas pero antes de continuar, quisiera que revises primero las tablas que agregué en [https://es.wiktionary.org/w/index.php?title=Especial%3AContribuciones&target=Tmagc&namespace=all&tagfilter=&start=2026-01-01&end=2026-01-01&limit=250 estas contribuciones mías] (es decir, las que hice hoy 1-1-2026). Son pocos verbos, pero paradigmas bien variados. Quiero que veas si encontrás algún error en particular para confirmar que estoy haciendo todo bien antes de seguir avanzando. Cuando lo hagas avisame así proseguimos. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:24 2 ene 2026 (UTC)
:Hola, otra duda más. Para formar tiempos compuestos se usa la forma que termina en -ío o la que termina en -íu? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:52 3 ene 2026 (UTC)
@[[Usuario:Tmagc|Tmagc]] ¡Hola!, ¡feliz año! y perdona pero estuve desconectado en todos los sentidos todos estos días, por eso no te contesto hasta ahora. A ver, hay mucho que decir. te comento cosa que me preguntas y otras que fui viendo.
::1) Deberías consultar siempre la última edición de las ''Normes ortográfiques'', en este caso, [https://alladixital.org/wp-content/uploads/2024/01/Normes-Ortografiques-8a-edicion-FINAL-3.pdf la octava], aunque no cambia ni aporta nada (por lo menos en cuanto a la conjugación verbal) comparándola con la anterior edición (y anteriores, incluso). Hablando de conjugación verbal, deberías consultar también '''[http://ast.oslin.org/ esta página]''': escribe el verbo que quieras conjugar, dale a enter, y ya te sale su conjugación.
::::1bis) Se publicó a finales del año pasado un libro muy interesante sobre la conjugación asturiana, ''Xeografía llingüística del verbu asturianu'', del lingüista Ramón d'Andrés Díaz (Universidad de Oviedo, ed. Trabe, ISBN 978-84-10345-72-0), que trata las diferentes formas dialectales de la conjugación. Cuando termine de leerlo entero y hacer mis tablas con toda la información que aporta, igual habrá que cambiar o matizar algo de la conjugación general asturiana (un ejemplo, la forma secuandaria del futuro y del condicional para el verbo "ser", las formas "sedré/sedría", aunque normativas, son muy minoritarias, e igual habría que indicarlo; otro ejemplo, sí existen formas para el pretérito de subjuntivo terminado en -se -falase, comiese, viviese-, que igualmente habría que incluirla aunque la normativa actual no lo hace).
::2) Estuve viendo que has incluido tiempos compuestos para la conjugación asturiana y eso no es del todo correcto. A ver, no es que no existan, pero es un tema a tratar aparte, y lo mejor y más adecuado por el momento, es no incluir formas compuestas, porque lleva a error y a cometer errores: el auxiliar no es exactamente el verbo ''tener'' como pasa en protugués (esa construcción de "tener + participio" del asturiano, sin ser incorrecta del todo y equivaler a las formas compuestas castellanas, es más bien el equivalente a la perífrasis "llevar + participio" del castellano), sino también el verbo ''haber'', y está presente en algunos casos, como para el infinitivo compuesto (haber falao) o para el pluscuamperfecto de indicativo, pero que este caso se conjugaría en imperfecto (había falao), pero también en perfecto (hubiere falao) significando lo mismo; de todos modos, el pluscuamperfecto en asturiano suele ser sintético (falara ~ falare, coincidente con el imperfecto de subjuntivo), usado incluso hablando en castellano.
:::2bis) Y sobre tu pregunta, en estos tiempos "compuestos", la forma a usar del '''participio es la forma neutra, es decir, la terminada en «-o»''', ya que no cambia ni en género ni en número. De hecho, verbos como ser o tar nun tienen más forma que la neutra "sío, tao", ensin formes masculina/femenina o singular/plural.
::3) En cuanto a la nomenclatura o distribución de los tiempos verbales en asturiano, difiere un poco del castellano. El modo indicativo se compone de cuatro tiempos: presente, imperfecto, "indefinido", y pluscuamperfecto. El futuro y condicional forman el modo potencial. El modo subjuntivo se compone de presente y "imperfecto". Luego el modo imperativo, y por último, las formas no personales, que son infinitivo, gerundio y participio. Como ves, no hay nunca tiempos compuestos (ojo, que hay un error "muy gordo" en tus tablas de conjugación, y es con el pluscuamperfecto de indicativo, que es un tiempo sintético, como en gallego y portugués, y antaño también en castellano: falara ~ falare, comiera ~ comiere, viviera ~ viviere, fora ~ fore, viniera ~ viniere, dixera ~ dixere, ficiera ~ficiere, etc.).
::::3bis) Si te fijaste, puse entrecomillados el nombre de dos tiempos: el indefinido de indicativo y el imperfecto de subjuntivo, que son los nombres que aparecen tanto en las ''Normes'' de la Academia como en el lexicon ''Oslin'' (la página que te enlacé más arriba). Si miras los nombres que aparecen en el wikcionariu, no se usan (no uso) esos nombres, sino *''perfecto'' y simplemente *''pretérito'', respectivamente. En el primer caso, el nombre "oficial" es un calco de la nomenclatura tradicional castellana que llama indefinido a "canté" y simplemente perfecto a "he cantado"; en asturiano, al no tener esa diferencia entre perfecto simple/perfecto compuesto, lo suyo es llamarlo "perfecto" (además, por lógica, si hay un imperfecto y un pluscuamperfecto, lo suyo es que haya "en medio" un perfecto, ¿no?). Y con respecto al modo subjuntivo, simplemente hay que diferenciar entre un tiempo presente y un tiempo pasado, que es tanto imperfecto, como perfecto como pluscuamperfecto, por lo que llamarlo "imperfecto" es otra vez influencia de la nomenclatura castellana que no tiene sentido en el conjunto verbal asturiano. En el libro que te mencioné antes, para este último sí usa esta nomenclatura, o sea, "pretérito de subjuntivo" (aunque también lo llama "imperfecto de subjuntivo").
::4) Hay un problema con los verbos de "doble participio", uno regular y otro irregular, como ''ensugar'' > ''ensugáu//ensuchu'': la forma regular es la que se usaría para tiempos compuestos (Les camises '''tienen ensugao''' en pocu tiempu = secado), y la forma irregular sería en uso como adjetivo (Les camises '''tán ensuches''' = secas; aquí también se puede decir ''Les camises tán ensugaes''); es lo mismo que pasa en portugués, por otro lado.
::5) Los verbos acabado en '''-ducir''', en el perfecto y pluscuamperfecto de indicativo y en el pretérito de subjuntivo tienen dos formas, una regular (la genuina asturiana) y otra irregular (culta, más bien castellanismo): conducir > conducí ~ conduxi, conduciera/conduciere ~ conduxera/conduxere
::6) Los verbos acabados en -uar tienen dos comprptamientos. En princicpio, los acabado en -guar/-cuar, la -u- forma diptongo y se acentúa en la sílaba anterior, es decir: averiguar > aver'''i'''guo; en el caso de "evacuar", si miras el Oslin, lo conjuga sin embargo acentuando la -u-: evacuar > evac'''ú'''o (para otros terminados en -cuar, siempre como -guar). El resto de verbos termindaos en -uar, se conjugan como acentuar > acent'''ú'''o.
::7) En cuanto a los verbos diptongadores de las conjugaciones -er/-ir, la forma singular del imperativo puede presentar una forma secundaria no diptongada: coyer > cueyi ~ coyi (tu), dormir > duermi ~ dormi (de hecho, un baile tradicional asturiano se llama "corricorri", que es el imperativo repetido del verbo correr > cuerri ~ corri (tu). En algunos verbos, como coser, también pueden presentar una forma sin vocal desinencial, en este caso con el lexema diptongado: cues ~ cuesi ~ cosi (tu). La no diptongación no pasa sin embargo en los verbos de la primera conjugación: almorzar > almuerza (no existe *almorza).
::8) En el verbo "dir", incluyes para la primera y tercera personas singulares del presente de subjuntivo la forma "fora" que, para mi sorpresa, aparece también en el Oslin. No me parece que sea así, y en cuanto al oslin, supongo que será un error, no tiene sentido que esa forma, propia del pretérito de subjuntivo (y del pluscuamperfecto de indicativo) se use para el presente, y solo en esas dos personas, y no en las otras.
::9) En el caso del verbo "tener" las formas "teo, to" de la primera persona singular del presente de indicativo solo son válidas cuando se usa este verbo en perífrasis, pero no como verbo pleno sinónimo de "poseer": "tengo de facer la compra" ~ "teo (de) facer la compra" ~ "to (de) facer la compra", pero "tengo tres hermanos, tengo fame" (pero nunca *teo tres hermanos, *to tres hermanos, *teo/*to fame).
::10) Para terminar, mirando el modelo de flexión, el pronombre átono de la segunda persona plural es "vos" no "os" como en castellano; y no hay que confundirlo con "vós", que es el pronombre tónico sinónimo de "vosotros/vosotres". Pasa lo mismo son "nós", sinónimo de "nosotros/nosotres", diferente de "nos", el correspondiente átono, que tiene la variante "mos". El pronombre "tu" nunca lleva acento gráfico en asturiano. Los pronombres de cortesía pueden ser "vusté, vustedes" o "usté, ustedes". Y el pronombre "él" tiene la variante "elli".
Y hasta aquí lo que me preguntabas y otras cosas. Lo dicho, tengo que terminar de leer el libro anterior que te dije, pues aporta mucha, y nueva, información sobre la conjugación verbal asturiana, que habrá que tenerla en cuenta. Yo voy a tener que reelaborar las tablas de conjugación del wikcionariu pues hay algunos errores y cosas no del todo correctas en algunos verbos. Si tienes más preguntaso sugerencias, no dudes en contactar. Chau!!--[[Usuario:Limotecariu|Limotecariu]] ([[Usuario discusión:Limotecariu|discusión]]) 20:31 7 ene 2026 (UTC)
:@[[Usuario:Limotecariu|Limotecariu]] Corregí todos tus puntos salvo 7), que es lo que te preguntaré a continuación. Pero en resumen:
:* Reorganizé la denominación y taxonomía de los tiempos. Ahora el futuro y el condicional pasan a estar dentro del "modo potencial". El pluscuamperfecto es lo mismo que el imperfecto del subjuntivo, pero como las Normas Ortográficas lo consideran un tiempo aparte en las tablas, lo agregaré como un tiempo más en el modo indicativo. Las formas compuestas las quité por ahora, pero cuando tengas tiempo podrías modificar <code>auxiliar</code> ([[Módulo:flex/ast]], línea 559), una tabla con todos los auxiliares que se usan para cada persona de cada tiempo compuesto y avisarme cuando lo hagas si es que lo vas a hacer.
:* En efecto, es el pretérito perfecto. La denominación "indefinido" no dice mucho nada, por eso no la utilizo.
:* Para confirmar, estos verbos que supuestamente se dice que tienen "doble participio", en realidad tienen uno solo y es la forma regular: [[ensugar]], [[encender]], [[imprimir]]. Después tenemos en español [[proveer]] que no sé cómo se dice en asturiano pero el participio es [[provisto]] (la RAE reconoce [[proveído]] pero está en retroceso) y supongo que en asturiano sería regular o irregular? Después está [[freír]] con doble participio en castellano, pero en asturiano sería [[frir]] y es de participio regular.
:* Agregada la doble variante en -ducir
:* Eliminadas las variantes con fo- en el presente del subjuntivo de [[dir]].
:* Agregado el marcador de perífrasis en las formas teo, to del presente indicativo de [[tener]].
:* Corregidos los pronombres, aunque el objetivo es que los títulos y encabezados de la tabla sean sintéticos, por lo que no quiero que se convierta en una colección de variantes de pronombres, para eso ya existe {{ep|pron-graf}}.
:Cualquier duda sobre tus puntos, salvo 7), avisame porfa. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:00 13 ene 2026 (UTC)
:@[[Usuario:Limotecariu|Limotecariu]] Ahora sí, vamos con 7) y otras dudas que me quedaron. Es hora de empezar a hilar fino.
:Por un lado, hay verbos que terminan en -Vcer, -erer, -Vser, -Vxer, -Vcir, -erir, -Vsir, -Vxir, donde V representa una vocal cualquiera. De este grupo de verbos, vi que la tercera persona del presente del indicativo y la segunda del imperativo pierden la vocal final. Esto es algo ''regular'', en tanto que es una regla que se aplica simplemente de analizar la morfología de la palabra y no es algo que se aplica a verbos específicos. Sin embargo, vi que hay varios verbos que admiten ambas variantes, esto es, con y sin la vocal final. En las Normas se menciona dentro de este grupo a corr'''exir''', el'''ixir''', f'''uxir''', t'''exer'''. Esto significa que todos los verbos que terminan en -V'''x'''er y -V'''x'''ir admiten esta doble variante y que el resto (de los que mencioné al principio) solo admiten la variante sin la vocal final? En otras palabras, es correcta mi generalización o se te ocurre algún contraejemplo? (nota: [[facer]] ya está marcado como irregular en el módulo así que no entra en esta categoría)
:En línea con lo anterior, t'''usir''' tiene dos imperativos, pero no encontré más verbos en -Vsir así que supongo que podría dejarlo como una regla que se aplique para este tipo de verbos.
:Y por el otro, en efecto estoy viendo que hay verbos que diptongan el núcleo tónico (una irregularidad, por supuesto) que admiten doble imperativo, pero absolutamente todos los verbos que diptongan tienen el doble imperativo o solamente algunos. Y si solamente se da en algunos, habría en ese caso alguna regla para determinar cuándo lo tienen o no hay ninguna y solamente se puede saber "conociendo la misma palabra"? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 19:23 13 ene 2026 (UTC)
::@[[Usuario:Tmagc|Tmagc]] ¡Hola! Te contesto según me comentabas en tu mensaje anterior:
::1) Con respecto a la forma "falara~falare"/"bebiera~bebiere"/..., en asturiano es tanto el tiempo de pluscumaperfecto de indicativo (en castellano "había hablado"/"había bebido"/...) como el pretérito de subjuntivo (en castellano "hablase~hablara"/"bebiese~bebiera"/..); lo suyo es que, aunque coincidentes, aparezcan en apartados diferentes como ya está puesto. Como te comenté, también existe para el subjuntivo la conjugación con el morfema "-se", pero que no está recogida en la normativa (nada nuevo bajo el sol, un verbo como "caber", que sí aparece en el ''DALLA'', no tiene de momento un modelo de conjugación normativo), así que es necesario que aparezcan diferenciados si hay que incluir por ejemplo esta conjugación. Lo mismo para el pluscuamperfecto,q ue como te dije también existe una forma "compuesta (falar = había faloa = hubiera falao), pero que de momento la normativa no la recoge. Todos estos datos están recogidos en el libro que te comenté publicado a finales del año pasado, que trae mucha mucha inforamción y muy interesante, que habrá que tener en cuenta.
:::1bis) Lo que me pides de modifical la linea 559 sobre el auxiliar: como doje, lo de los tiempos compuestos en asturiano es complicado. En principio se usa el verbo "haber", como en castellano, pero también el verbo "tener" como en portugués, pero esta última perífrasis equivale más vien la la perífrasis "llevar + participio" del castellano -también existente en asturiano-; por tanto lo salomónico sería incluir como auxiliar tanto "haber" como "tener", pero el problema no es el auxiliar a usar sino qué tiempos compuestos existen en asturiano (infinitivo compuesto por ejemplo, y las formas alternativas ya dichas para el pluscumaperfecto, por ejemplo).
::2) Sería recomendable también cambiar el nombre de "pretérito imperecto" del subjuntivo a simplemente "pretériro": no hay más que un único pretérito en ese modo, y el propio Ramón d'Andrés (autor del libro mencionado) lo usa tambiéna secas para referirse a ese tiempo.
::3) Cierto que es un tanto cuestionable lo de doble participio, ya que para tiempos compuestos se usa solo la forma regular y en otros casos, ambos. La cuestión es si poner las dos formas en la tabla de conjugación o solo la forma regular. Yo pondría las dos. Los verbos que tienen este doble participio son los siguientes (pongo solo la forma masculina singular): ensugar, ensugáu/ensuchu; cocer, cocíu/cochu; frir, fríu/fritu; encender, encendíu/encesu; arrepentir, arrepentíu/arrepresu; cansar, cansáu/cansu; esneviar, esneviáu/esneviu; fartar, fartáu/fartu; llimpiar, llimpiáu/llimpiu; nublar, nubláu/nublu; pagar, pagáu/pagu; soltar, soltáu/sueltu. Quizá habría alguno más (p.ej.: imprentar, imprentáu/impresu ~ imprimir, imprimíu/impresu).
:::3bis) "proveer" no existe en asturiano; su equivalente en asturiano serían verbos como "abastecer, abondar, bastiar, fornir"; "provisto" como adjetivo, sería o bien el participio de algunod e los verbos anteriores o el adejtivo "aprevíu, -iad, -ío". El participio de ""frir" es de los dobles, regular "fríu" e irregular "fritu"; cuidado con la morfología del participio regular: fríu, '''frida''', frío (no confundirlo con el adjetivo "fríu, '''fría''', frío" = frío, lo contrario de "caliente").
::4) Estuve mirando las tablas del verbo "ser" y "dir", y para el pluscuamperfecto y para el pretérito de subjuntivo faltan las formas con -o-, esto es "fora ~ fore", "foras ~ fores", etc.
::5) Sobre lo de los pronombre, solo era una apreciación sobre alguna forma que no estaba correcta. Te recomendaría usar solo una forma de las posibles, como "él" (y no ya "elli", o usar "ella", para tener el femenino), y "nós, vós" en vez de "nosotros, vosotros" (los primeros engloban también la forma femenina); con el de cortesía, no pondría los de "(v)usté", o "usté" o "vusté". Solo una cosa más, para el cuadro del subjuntivo, habría que apostrofar la conjunción con los pronombres que empiecen por vocal: "qu'él", "qu'ella", "qu'usté".
::6) Los verbos acabados en -Vxer/-Vxir tienen dos formas en 3ps presente y en el imperativo, con o sin vocal final: texer: "él texe ~ tex la bufanda", "texi ~ tex [tu] la bufanda"; ambas son válidas y normativas. Con los verbos tipo -Vcer/-Vcir, -Vler/-Vlir, -Vner/-Vnir, -Vrer/-Vrir, -Vser/-Vsir, en principio desaparece siempre la vocal: traducir: "él traduz la novela", "traduz [tu] la novela"; pero...
:::6bis) en los siguientes verbos no desaparace la vocal ni en 3ps presente ni en imperativo: raener, definir, unir~aunir~xunir (& desunir~desaunir~dexunir), esgulir, espulir, gulir, pulir, abolir, dilir, xilir, guarir, parir, aferir, enxirir, firir, sirir ~ xirir, espavorir, escurir, xunxurir, xurir. P.ej., definir: "él define al palabra", "define [tu] la palabra" (y no "él *defín la palabra", "*defín [tu] la palabra"). Menos el primero de los verbos, son todos verbos de la tercera conjugación (cuidado, que verbos como venir, valir, adquirir, dixerir, preferir y otros sí presentan esa pérdida vocálica). Por tanto, aquí hay un dilema si considerarlo como una irregularidad o no: los verbos en -Vcer/-Vcir presentan todos esa pérdida vocálica, los verbos en -er todos (menos "raener") y los de en -ir depende del verbo...
::::6ter) en cuanto al verbo "facer" ~ "faer", hay un error en su conjugación: independientemente de si tomamos uno u otro infinitivo, las formas del presente indicativo son para ambos [tu] '''faes''', [él/ella] '''fai''', [ellos/elles] '''faen''', imperativo '''fai''' [tu]. por otro lado, las formas de perfecto, pluscuamperfecto y pretérito de subjuntivo con lexema "fix-" no presentan la -i- de la desinencia: fixera, fixere, etc., pero las formas en "fic-" no pierden esa -i- de la desiencia: ficiesti, ficiemos, etc.
:::::6quater) Sobre el imperativo del verbo "tusir", tus ~ tusi, pues sí, tanto el Oslin como las ''Normes ortográfiques'' le ponen doble imperativo. No sé qué decir, porque ciertamente es el único en -Vsir. Por ejemplo, los verbos acabados en -ducir pierden siempre la desinencia tanto en el presente como el imperativo (traducir: él traduz, traduz [tu], no existe *traduci [tu]), y en general, esos verbos que pierden la desinencia en el presente hacen lo mismo en el imperativo (aunque mira el punto siguiente)
::7) Sobre el imperativo de los verbos diptongadores: los que son de la primera conjugación, o sea, acabos en -ar, siempre diptongan: almorzar: él almuerza, almuerza [tu], sentar/sentase: él siéntase, siéntate [tu]. Es en los verbos diptongadores de la segunda y tercera conjugación, -er/-ir, donde el imperativo tiene dos formas, la diptongada y la no diptongada, a causa de la desinencia -i de este tiempo: vender: él viende la casa, viendi ~ vendi [tu] la casa (cuidado, que en asturiano el verbo "vender" sí diptonga, como perder, a diferencia del castellano); responder: ella respuende la pregunta, respuendi ~ respondi [tu] la pregunta (ídem); sentir: él siente la canción, sienti ~ senti [tu] la canción; dormir: él duerme nel sofá, duermi ~ dormi [tu] nel sofá. En verbos como los del punto 6, los que pierden la desinencia final, son poquitos verbos pero hay de todo: los verbos en -ocer que diptonguen, pierden la vocal del imperativo siempre y solo presentan forma diptongada en el imperativo: cocer: él cuez, cuez [tu] (básicamente, es este verbo y sus compuestos); en -oler, como goler: él güel, güel ~ güeli ~ goli [tu] pero moler: él muel, mueli ~ moli [tu] según el Oslin, pero según las ''Normes ortográfiques'', muel ~ mueli [tu] (con el verbo soler, misma conjugación que moler), coser: él cues, cues ~ cuesi ~ cosi [tu] (y sus compuestos igual). Para moler/soler, que son los que presentan conjugación diferente según la fuente consultada, pondría un paradigma similar a los verbos goler/coser: las tres posibles formas: diptongada sin desinencia, diptongada con desinencia, no diptongada con desinencia: muel ~ mueli ~ moli, suel ~ sueli ~ soli (aunque este último verbo, en imperativo, no me parece muy "natural", ni en castellano).
::8) Viendo la tabla del verbo "tener" hay dos errores: en el perfecto, solo las personas yo y él/ella tienen la forma con -e- en el lexema junto con la forma general con -u-, es decir, tuvi ~ tevi/tuvo ~ tevo; el resto de personas solo presentan el lexema tuv-: tuvisti, tuvimos, etc. (pero no *tevisti, *tevimos...). Por otro lado, el segundo error es que hay formas que no presentan la -i- en la desinencia: tuviesti/tuviemos/tuviestis/tuvieron y no *tuvesti/*tuvemos... como aparece en la tabla.
:::8bis) La alternancia u/e en el lexema es común también para el verbo "tar", que va a tener las mismas formas que el verbo "tener" (tuvi~tevi, tuviera~tuviere y el resto de la flexión de estos tiempos, es coincidente tanto para tener como para tar); lo mismo para "andar", que en la tabla correspondiente aparece correcto; sin embargo, el pluscumaperfecto y pretérito de subjuntivo aparece conjugado de manera regular, y en principio es irregular, es decir, anduviera~anduviere y no *andara~*andare. Y el verbo "haber" también tiene esa alternancia u/e en esas dos personas: hubi ~ hebi/hubo ~ hebo.
::Y creo que nada más por el momento, que ya es bastante. Esto del verbo es bastante complicado, y la normativa no explica ni muestra toda la variación y posibilidades, todas correctas, que hay. Te digo, tengo que leer y "estudiar" ese manual que te mencioné, porque aporta mucha y nueva información sobre la conjugación formal del asturiano, y habrá cosa que será necesario incluir aunque no lo mencione la normativa o mismamente sea contrario a ella. Sigo aquí para más. Chau!! [[Usuario:Limotecariu|Limotecariu]] ([[Usuario discusión:Limotecariu|discusión]]) 10:32 14 ene 2026 (UTC)
:::@[[Usuario:Limotecariu|Limotecariu]] Estuve ocupado con varias cosas pero finalmente volví a terminar de atar cabos sueltos
:::1) Para evitar una tabla excesivamente larga que consista en una mera exhibición de formas combinadas que no aportan nada de información nueva para el lector, creo que lo mejor es no mostrar las formas compuestas, de acuerdo a lo que me dijiste.
:::2) {{hecho|Cambiada la denominación}} a mostrar, de "subjuntivo, pretérito imperfecto" a "subjuntivo, pretérito". Aunque "internamente" el módulo usa la denominación "subj_imperf" porque no me dan ganas de ponerme a cambiar todo ahora. Es inofensivo esto último.
:::3) {{No}} escribiremos en el módulo los dobles participios para evitar sobrecargarlo con información que no es propia de lo puramente verbal, aunque en los verbos que tienen la variante irregular que se usa como adjetivo es posible insertarla por fuera del módulo sobre la misma plantilla, de forma similar a como lo hice en [[insertar]].
:::4) {{hecho|Corregidas}} las formas de los verbos [[ser]], [[dir]]
:::5) {{hecho}}
:::6) Aquí según el caso que corresponda, el módulo determinará si hay que eliminar o no la vocal final:
:::# -Vxer, -Vxir, -Vcer, -Vcir: {{hecho|sí}}
:::# -Vler: {{hecho|solamente si termina en -aler u -oler}}
:::# -Vlir: {{No}}, los únicos aquí son [[salir]] y [[valir]], que ya están marcados aparte como irregulares (tienen sus propias reglas)
:::# -Vner: {{No}}, los únicos son [[raener]] (regular básico) y [[poner]] (irregular)
:::# -Vnir: {{No}}, los únicos son [[definir]] y [[unir]] y no pierden la vocal
:::# -Vrer, -Vrir: {{hecho|solamente si termina en -erer o -erir}}
:::# -Vser, -Vsir: {{hecho|ya estaba puesta la regla}} aunque los únicos son [[coser]] y [[tusir]].
:::7) {{hecho|Agregados los imperativos dobles}} para verbos de la segunda y tercera conjugación que diptonguen y que NO pierdan la vocal final en el imperativo. Ejemplo en [[correr]] o [[vender]]. En cuanto a [[goler]] y [[coser]] que son los únicos que tienen el triple imperativo no sabría cómo acomodarlos, por ahora tiene el módulo la regla harcodeada para estos dos únicos verbos.
:::8) {{hecho|Corregidos los pretéritos fuertes en general}}, revisadas las formas de [[tar]], [[tener]], [[andar]], [[haber]] y agregadas para este último las formas afines a '''heb'''a en el presente del subjuntivo.
:::9) '''Pregunta''' Asumí que los imperativos para el resto de las personas (usted, nosotros, ustedes) se deben copiar de las formas del presente del subjuntivo tal como en español, esto es correcto?
:::Eso es todo creo. En cuanto a "tu" libro que nos va a traer innovaciones, de qué tipo de novedades habla? Si se refiere a formas irregulares que aplican a verbos específicos, entendería que modifiques las tablas en ast.wikt. Si los cambios son más masivos, regulares e involucran el reconocimiento de determinados patrones específicos, te recomendaría que aproveches el módulo que hice. No te ayudo a importarlo porque ya tengo demasiado trabajo con este proyecto, pero deberías hacer campaña para conseguir a alguien que quiera colaborar, supongo que en toda Asturias alguien que tenga un par de horas para dedicar a esto a la semana debe haber; es muy fácil hacerlo si se cuenta con los conocimientos adecuados. Como sea, saludos y gracias por el asesoramiento. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:06 22 ene 2026 (UTC)
::::@[[Usuario:Tmagc|Tmagc]]¡Hola! Pues creo que ya estará. Habrá que mirar las tablas de algunos verbos así al azar por si se escapó algo, pero creo que ya está todo. Sobre lo que me preguntas del imperativo, sí, para el resto de formas se usan las del presente de subjuntivo (esto es, para el tratamiento de cortesí y para las formas negativas); en cuanto a la primera persona plural, sería también la forma del presnte de subjuntivo, como en español, pero más propiamente la construcción "vamos + infinitivo" (semejante a lo que hace el inglés con "let's + inf.").
::::Sobre el libro/manual que mencioné, que es "mío" porque tengo una copia, jejeje, cuya autoría es del lingüisca y académico [[es:w:Ramón d'Andrés|Ramón d'Andrés]], aporta mucha información de todo tipo, desde cuestiones y formas dialectales (que no interesarían para las tablas de conjugación) hasta vitalidad y extensión de diferentes formas y flexiones (por ejemplo, con este manual, descubrí que las formas "sedré/sedría" del verbo "ser" son muy minoritarias y ni pertenecen casi al dialecto-base con el que se construye el estándar aunque éste las incluya, lo que me da a querer eliminarlas, al no incluirse otras formas -de este u otro verbo- con más presencia); como dije, es de lectura pausada y concienzuda, que [me] lleva, está llevando, tiempo, además de ser también trabajoso, y yo solo soy un wikipedista que no puede decidir realmente sin cotejo y otras opiniones o fuente qué admitir o qué no basándome solo en lo que aparece ahí.
::::Pero dejando ya lo que aporta y peude aportar este manual, creo que por el momento las tablas de conjugación para los verbos asturianos está completa, y podemos dar un descanso, salvo error o despiste en algún caso concreto. Muchísimas gracias por tu trabajo e interés en crear estos y todos los demás módulos para las entradas asturianas. [[Usuario:Limotecariu|Limotecariu]] ([[Usuario discusión:Limotecariu|discusión]]) 15:36 26 ene 2026 (UTC)
== Pronunciación del grupo -sc- ==
Cómo se pronuncia este grupo consonántico, por ejemplo en [[fascinante]], en el asturiano? Sería igual que en la variante no seseante del castellano, /s.θ/? [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 21:23 6 jun 2026 (UTC)
:¡Hola! Sí, esa secuencia sería /-sθ-/. Cabría la posibilidad de asimilar la primera a la segunda y reducirlo a la simple /θ/ (*facinante); es una pronunciación común, pero no única, en casos como los de los numerales "doscientos/trescientos/seiscientos" > *docientos/*trecientos/*seicientos, aunque en otros casos no, como en derivados formados por prefijos como es-/des (eszanganar, no *ezanganar). Así que el grupo -sz-/-sc<sup>e/i</sup> se pronuncia /-sθ-/. Ah, ya puestos, también existe la secuencia contraria, /-θs-/, aunque esta se encuentra solo entre formas verbales acabadas en -z más el pronombre átono "se" (dizse, ofrezse, conozse, conduzse, etc.). [[Usuario:Limotecariu|Limotecariu]] ([[Usuario discusión:Limotecariu|discusión]]) 04:52 7 jun 2026 (UTC)
f6nxgpvyvzc4hvnml2smmh9uefgse1b
paay
0
178644
6117338
5618795
2026-06-06T18:29:23Z
26agcp
138617
entradas similares, csem
6117338
wikitext
text/x-wiki
{{desambiguación|pay|Pay|páay|pa'ay}}
== {{lengua|klb}} ==
{{pron-graf|leng=klb}}
=== Etimología ===
{{etimología|leng=klb}}.
==== {{sustantivo|klb}} ====
;1 {{csem|botánica|leng=klb}}: {{plm|fruto}}.
== Referencias y notas ==
<references />
rwzmorfwtmsmbywjjfrgg92blrbukv9
calzareis
0
233196
6117302
5538361
2026-06-06T12:25:29Z
Jemily1
121719
desambiguación corregida
6117302
wikitext
text/x-wiki
{{desambiguación|calzaréis}}
== {{lengua|es}} ==
{{pron-graf}}
=== Forma verbal ===
;1: {{forma verbo|calzar|p=2p|t=futuro|m=subjuntivo}}.
{{uso|anticuado}}
== Referencias y notas ==
<references />
m8ovgo32od20eib54j7bcgusj4uxneu
calzare
0
233200
6117300
5537809
2026-06-06T12:15:21Z
Jemily1
121719
desambiguación corregida
6117300
wikitext
text/x-wiki
{{desambiguación|calzaré}}
== {{lengua|es}} ==
{{pron-graf}}
=== Forma verbal ===
;1: {{forma verbo|calzar|p=1s|t=futuro|m=subjuntivo}}.
{{uso|anticuado}}
;2: {{forma verbo|calzar|p=3s|t=futuro|m=subjuntivo}}.
{{uso|anticuado}}
== Referencias y notas ==
<references />
slg13wbwxg540a4qromv0rkpk008n96
calzáremos
0
233204
6117301
5548135
2026-06-06T12:23:36Z
Jemily1
121719
desambiguación corregida
6117301
wikitext
text/x-wiki
{{desambiguación|calzaremos}}
== {{lengua|es}} ==
{{pron-graf}}
=== Forma verbal ===
;1: {{forma verbo|calzar|p=1p|t=futuro|m=subjuntivo}}.
{{uso|anticuado}}
== Referencias y notas ==
<references />
r3dfxojdr51cljekpp18lvbhfyaajxa
Guilmai
0
434481
6117351
6117285
2026-06-06T19:41:30Z
Alex4660
182950
/* Etimología 1 */
6117351
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v1=Guilmay|v2=Huilmai|v3=Huilmay}}
=== Etimología 1 ===
{{etimología|Origen discutido. El apellido figura en listados contemporáneos de apellidos mapuches vinculados a títulos de merced.{{PainemalMorales2011}} Sin embargo, el patronímico se encuentra documentado en registros parroquiales y civiles de Francia (departamento de Eure y Loir) desde al menos fines del siglo XVIII, mucho antes de su documentación en Chile.<ref>{{cita web |url=https://www.familysearch.org/ark:/61903/1:1:699P-PJMM |título=France, Eure-et-Loir, Parish and Civil Registration, 1526-1902: Entry for Léon Guilmai and Françoise Vallée, 15 Jun 1795 |sitio web=FamilySearch |fechaacceso=6 de junio de 2026 |nota=Se requiere crear una cuenta gratuita para visualizar el documento original o la transcripción completa.}}</ref>}}
==== {{sustantivo propio|es}} ====
;1: {{apellido}}.
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
bkhddw0pk4g0d3b1wadn16m0bpej6qa
6117353
6117351
2026-06-06T19:42:24Z
Alex4660
182950
/* Etimología 1 */
6117353
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v1=Guilmay|v2=Huilmai|v3=Huilmay}}
=== Etimología 1 ===
Origen discutido. El apellido figura en listados contemporáneos de apellidos mapuches vinculados a títulos de merced.{{PainemalMorales2011}} Sin embargo, el patronímico se encuentra documentado en registros parroquiales y civiles de Francia (departamento de Eure y Loir) desde al menos fines del siglo XVIII, mucho antes de su documentación en Chile.<ref>{{cita web |url=https://www.familysearch.org/ark:/61903/1:1:699P-PJMM |título=France, Eure-et-Loir, Parish and Civil Registration, 1526-1902: Entry for Léon Guilmai and Françoise Vallée, 15 Jun 1795 |sitio web=FamilySearch |fechaacceso=6 de junio de 2026 |nota=Se requiere crear una cuenta gratuita para visualizar el documento original o la transcripción completa.}}</ref>
==== {{sustantivo propio|es}} ====
;1: {{apellido}}.
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
qkfz2mtlsmjnsvc5en9dyozcysxe035
6117364
6117353
2026-06-06T19:50:39Z
Peter Bowman
34685
rv - [[Usuario discusión:Alex4660#Guilmai]]
6117364
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v1=Guilmay|v2=Huilmai|v3=Huilmay}}
=== Etimología 1 ===
{{etimología}}.
==== {{sustantivo propio|es}} ====
;1: {{apellido}}.<ref>{{PainemalMorales2011}}</ref>
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
k61g01h3f1ux4ozvizcvm5quzfi685h
6117391
6117364
2026-06-06T23:16:20Z
Alex4660
182950
6117391
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v1=Guilmay|v2=Huilmai|v3=Huilmay}}
=== Etimología 1 ===
{{etimología}}.
==== {{sustantivo propio|es}} ====
;1: {{apellido}}.<ref>{{PainemalMorales2011}}</ref>
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== {{lengua|fr}} ==
=== Etimología ===
De origen franco-germánico, como variante fonética de apellidos patronímicos como ''Guillemet'' (diminutivo de ''Guillaume''). El patronímico se encuentra documentado en registros parroquiales y vitales de Francia (departamentos de Indre, Eure y Loir, entre otros) desde la Edad Moderna, con actas familiares que datan desde al menos los siglos XVI y XVIII.<ref>{{cita web |url=https://www.familysearch.org/ark:/61903/1:1:699P-PJMM |título=France, Eure-et-Loir, Parish and Civil Registration, 1526-1902: Entry for Léon Guilmai and Françoise Vallée, 15 Jun 1795 |sitio web=FamilySearch |fechaacceso=6 de junio de 2026 |nota=Se requiere crear una cuenta gratuita para visualizar el documento original o la transcripción completa.}}</ref>
==== {{sustantivo propio|fr}} ====
;1: {{apellido|fr}}.
== Referencias y notas ==
<references />
aqabtniz4rndfkyspbjnc7eqthficz9
6117392
6117391
2026-06-06T23:17:34Z
Alex4660
182950
6117392
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v1=Guilmay|v2=Huilmai|v3=Huilmay}}
=== Etimología 1 ===
{{etimología}}.
==== {{sustantivo propio|es}} ====
;1: {{apellido}}.<ref>{{PainemalMorales2011}}</ref>
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== {{lengua|fr}} ==
=== Etimología ===
De origen franco-germánico, como variante fonética de apellidos patronímicos como ''Guillemet'' (diminutivo de ''Guillaume''). El patronímico se encuentra documentado en registros parroquiales y vitales de Francia (departamentos de Indre, Eure y Loir, entre otros) desde la Edad Moderna, con actas familiares que datan desde al menos los siglos XVI y XVIII.<ref>Registro civil y parroquial francés: "France, Eure-et-Loir, Parish and Civil Registration, 1526-1902: Entry for Léon Guilmai and Françoise Vallée, 15 Jun 1795". Documento indexado en FamilySearch: https://www.familysearch.org/ark:/61903/1:1:699P-PJMM (Se requiere crear una cuenta gratuita para visualizar la transcripción completa).</ref>
==== {{sustantivo propio|fr}} ====
;1: {{apellido|fr}}.
== Referencias y notas ==
<references />
4lcnl4rd1d9mwtsyvuwt5h0ikg3u0v8
6117393
6117392
2026-06-06T23:23:15Z
Alex4660
182950
/* {{lengua|fr}} */
6117393
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf|v1=Guilmay|v2=Huilmai|v3=Huilmay}}
=== Etimología 1 ===
{{etimología}}.
==== {{sustantivo propio|es}} ====
;1: {{apellido}}.<ref>{{PainemalMorales2011}}</ref>
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== {{lengua|fr}} ==
=== Etimología ===
{{etimología|endo|Guillemet|leng=fr}}. Variante fonética y antigua del patronímico, a su vez diminutivo del nombre propio franco-germánico ''Guillaume''. El apellido se encuentra ampliamente documentado en registros parroquiales y vitales de Francia (departamentos de Indre, Eure y Loir, entre otros) desde la Edad Moderna, con actas de bautismo y matrimonio familiar que datan desde al menos los siglos XVI y XVIII.<ref>Registro civil y parroquial francés: "France, Eure-et-Loir, Parish and Civil Registration, 1526-1902: Entry for Léon Guilmai and Françoise Vallée, 15 Jun 1795". Documento indexado en FamilySearch: https://www.familysearch.org/ark:/61903/1:1:699P-PJMM (Se requiere crear una cuenta gratuita para visualizar la transcripción completa).</ref>
==== {{sustantivo propio|fr}} ====
;1: {{apellido}}.
== Referencias y notas ==
<references />
9bqgu7ozpk21np2lk2huvjs4spu2bk2
téki
0
921541
6117343
5608606
2026-06-06T19:28:10Z
Egaina
73660
/* Yagán */
6117343
wikitext
text/x-wiki
{{desambiguación|teki}}
== {{lengua|yag}} ==
{{pron-graf|leng=yag|1fone1=ˈte.ki|v1=tiki|v2=taki}}
=== Etimología 1 ===
{{etimología|leng=yag}}.
==== {{verbo transitivo|yag}} ====
;1: {{plm|ver}}<ref>{{Goodbar1985}}</ref>, [[mirar]]<ref name="Thomas">{{referencia|a=Thomas Bridges|t=Yamana-English a dictionary of the speech of Tierra del fuego|c=libro}}</ref>, [[observar]].<ref name="Thomas" />
;2: {{plm|espiar}}.<ref name="Thomas" />
;3: {{plm|encontrar}}, [[hallar]].
== Referencias y notas ==
<references />
[[Categoría:YAG:Lista Swadesh|101téki]]
jll77qh0uen78l5k84t2c86s1mc96da
werhu
0
925565
6117388
5608876
2026-06-06T22:44:59Z
Egaina
73660
/* Yagán */
6117388
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag|1fone1=weɻu|v1=warhu|v2=wéarhu}}
=== Etimología 1 ===
{{etimología|leng=yag}}.
==== {{adverbio|yag}} ====
;1:{{plm|mucho}}.<ref>{{Espinoza1990}}</ref>
==== {{adjetivo|yag}} ====
;1: {{plm|varios}}.
== Referencias y notas ==
<references/>
lu9vxi71icw32rsx5nrep711axk3v9n
tapóna
0
926320
6117347
5609972
2026-06-06T19:36:50Z
Egaina
73660
/* Yagán */
6117347
wikitext
text/x-wiki
{{desambiguación|tapona|taponá}}
== {{lengua|yag}} ==
{{pron-graf|leng=yag|1fone1=taˈpona|v1=tupóana|v2=tupawana|v3=tapoána}}
=== Etimología 1 ===
{{etimología|leng=yag}}.
==== {{verbo|yag}} ====
;1: {{plm|tirar}}.<ref>{{Eissmann315}}</ref>
;2: {{plm|empujar}}.<ref>{{Eissman1989}}</ref>
== Referencias y notas ==
<references/>
on7iwtxlx60uslvj7uzqyo7stoaskba
šánato
0
932376
6117341
5610138
2026-06-06T19:23:56Z
Egaina
73660
/* Yagán */
6117341
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag|1fone1=ˈɕanato|v1=šanöta|v2=sánöta|v3=šánata}}
=== Etimología 1 ===
{{etimología|leng=yag}}.
==== {{verbo intransitivo|yag}} ====
;1: {{plm|volver}},<ref>{{Eissmann315}}</ref>[[retornar]], [[regresar]].<ref>{{Bridges1933|p=154}}</ref>
== Referencias y notas ==
<references />
1aaekonjuyzusn6ien0mmpm6pkq1gza
tualöna
0
932465
6117349
5608584
2026-06-06T19:39:55Z
Egaina
73660
/* Yagán */
6117349
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag|fone=twaləna|v=tuelána}}
=== Etimología ===
{{etimología|leng=yag|circunfijo|tu|áala|na}}
==={{verbo transitivo|yag}}===
;1:{{plm|enseñar}}.<ref>{{Goodbar1977}}</ref>
== Referencias y notas ==
<references />
jymujg6o05hpinv7p2lb5ov6qytays8
tumalöhtöka
0
932581
6117383
6059799
2026-06-06T22:33:08Z
Egaina
73660
/* Yagán */
6117383
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag|fone=tumaləhˈtəka|v=tumalaxtáka}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{sustantivo|yag}} ===
;1: {{plm|fogata}}.<ref>{{Espinoza1990}}</ref>
== Referencias y notas ==
<references/>
p1xiawpyxnx74pg1qa08ufrtug7yck5
tuwákata
0
933261
6117389
5609052
2026-06-06T22:47:24Z
Egaina
73660
/* Yagán */
6117389
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag|fone=tuˈwakata|v=tuwaxkéata}}
=== Forma verbal ===
;1: {{impropia|Plural de [[mutu]]}}.<ref>{{Meroz2012}}</ref>
== Referencias y notas ==
<references />
d6c27tmy59zrqvf3rfy3azfe1u3jvav
túpušu
0
933833
6117348
5610006
2026-06-06T19:38:38Z
Egaina
73660
/* Yagán */ añadí variante
6117348
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag|fone=ˈtupuɕu|v=tupušo}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{verbo|yag}} ===
;1: {{plm|sembrar}}, [[plantar]]<ref>{{Eissmann315}}</ref>
== Referencias y notas ==
<references />
63gyicaocf2yfxyjyl2jxjhn4fmsl92
tönkáta
0
934280
6117345
6116120
2026-06-06T19:30:58Z
Egaina
73660
/* Yagán */ Añadí variante
6117345
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag|fone=təŋˈkata|v=tankeáta}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{verbo|yag}} ===
;1: {{plm|tener}}.<ref>{{Goodbar1977}}</ref>
== Referencias y notas ==
<references />
dmyowry4m871s30p0qys03cmtmcbwzm
tuhátaka
0
934362
6117350
6116123
2026-06-06T19:41:09Z
Egaina
73660
/* Yagán */ Añadí variante
6117350
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag|fone=tuˈhataka|v=tuxátaka}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{verbo transitivo|yag}} ===
;1: {{plm|traer}}, [[llevar]], [[mover]].<ref>{{Goodbar1977}}</ref>
== Referencias y notas ==
<references />
hfytzmtuog4k0n5t8m9m6nonz41whyf
unna
0
934367
6117352
4732038
2026-06-06T19:41:53Z
Egaina
73660
/* Yagán */
6117352
wikitext
text/x-wiki
{{desambiguación|Unna}}
== {{lengua|yag}} ==
{{pron-graf|leng=yag|fono=ˈunːa|v=uóna}}
=== Etimología ===
{{etimología|leng=yag}}.
=== {{verbo|yag}} ===
;1: {{plm|caminar}}.
== Referencias y notas ==
<references/>
8mrp8k4rsaqnhmfz5lha9ma86qjorq6
matúku
0
935066
6117368
5883454
2026-06-06T19:57:24Z
Egaina
73660
/* Sustantivo */
6117368
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag|fone=maˈtuku}}
=== Etimología 1 ===
{{etimología|leng=yag|prefijo|ma|tuku}}
==== {{sustantivo|yag}} ====
;1: {{plm|pareja}}, [[relación]], [[matrimonio]].
==== {{verbo|yag}} ====
;2: {{plm|estar}} en una [[relación]], [[casado]].
=== Etimología 2 ===
{{etimología|leng=yag|prefijo|mat|tuku}}
;1: {{plm|ir}} o venir del lado [[norte]] a [[casarse]].
== Referencias y notas ==
<references />
hourmd5629aer4g6shl0tewsjjyedq5
anda a cagar
0
937218
6117406
5819191
2026-06-07T09:23:40Z
~2026-33460-80
182981
6117406
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== {{locución verbal|es}} ===
;1: {{impropia|Expresión de rechazo a una persona o a lo que dice}}
{{ámbito|Venezuela}}
{{uso|malsonante}}
{{sinónimo|anda a bañarte|nota1=América|vete a freír espárragos|vete a freír monos|vete de paseo|nota4=España}}
=== Traducciones ===
{{trad-arriba}}
<!-- formato: {{t+|idioma|<acepción#>|palabra}} p. ej. {{t+|fr|1|facile}} -->
<!--{{t+|de|}}-->
<!--{{t+|ar|}}-->
<!--{{t+|bg|}}-->
<!--{{t+|ca|}}-->
<!--{{t+|eo|}}-->
<!--{{t+|fr|}}-->
<!--{{t+|en|}}-->
{{t|it|a1=1|t1=vai a cagare}}
<!--{{t+|ja|}}-->
<!--{{t+|nl|}}-->
<!--{{t+|pl|}}-->
<!--{{t+|pt|}}-->
{{trad-abajo}}
== Referencias y notas ==
<references />
fma2wu1jawsw4rszaoif6xzcsdc80tk
bicifestación
0
1026201
6117304
6117199
2026-06-06T15:06:41Z
~2026-33339-61
182966
6117304
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|compuesto|bicicleta|manifestación}}.
=== {{sustantivo femenino|es}} ===
{{es.sust}}
[[Imagen:Bicycle demonstration against A49 and A100 in Berlin 2020-11-14 61.jpg|thumb|bicifestación]]
;1 {{csem|ciclismo}}: {{plm|manifestación}} realizada en [[bicicleta]].
=== Traducciones ===
{{trad-arriba}}
{{t|de|t1=Fahrraddemonstration}}
{{t|ca|t1=bicifestació}}
{{t|eu|t1=bizifestazio}}
{{t|fr|t1=vélofestation}}
{{t|gl|t1=bicifestación}}
{{t|it|t1=bicifestazione}}
{{t|oc|t1=bicifestacion}}
{{t|pt|t1=bicifestação}}
{{t|ro|t1=bicifestație}}
{{trad-abajo}}
== Referencias y notas ==
<references />
ofm105cdy2w4f4jehydrmqruw98iw5l
6117305
6117304
2026-06-06T15:07:32Z
~2026-33339-61
182966
/* Traducciones */
6117305
wikitext
text/x-wiki
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología|compuesto|bicicleta|manifestación}}.
=== {{sustantivo femenino|es}} ===
{{es.sust}}
[[Imagen:Bicycle demonstration against A49 and A100 in Berlin 2020-11-14 61.jpg|thumb|bicifestación]]
;1 {{csem|ciclismo}}: {{plm|manifestación}} realizada en [[bicicleta]].
=== Traducciones ===
{{trad-arriba}}
{{t|de|t1=Fahrraddemonstration}}
{{t|ca|t1=bicifestació}}
{{t|fr|t1=vélofestation}}
{{t|gl|t1=bicifestación}}
{{t|it|t1=bicifestazione}}
{{t|oc|t1=bicifestacion}}
{{t|pt|t1=bicifestação}}
{{t|ro|t1=bicifestație}}
{{t|eu|t1=bizifestazio}}
{{trad-abajo}}
== Referencias y notas ==
<references />
gflq8v31wfv3ufhto6axjc6o0jfzxd7
Módulo:generar-pron/ast
828
1034053
6117373
6070178
2026-06-06T21:11:46Z
Tmagc
158167
6117373
Scribunto
text/plain
-- Transcripciones fonéticas en asturiano
-- 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 gsubb = m_str.gsubb
local gsubrep = m_str.gsubrep
local split = m_str.split
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
--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 vocales_salvo_i = "aeouyüAEOUYÜáéíóúýàèìòùỳÁÉÍÓÚÝÀÈÌÒÙỲ"
local VOCAL_TILDADA = "[" .. vocales_tildadas .. "]"
local vocales = vocales_no_tildadas .. vocales_tildadas
local VOCAL = "[" .. vocales .. "]"
local VOCAL_SALVO_I = "["..vocales_salvo_i.."]"
local CONS = "[^" .. vocales .. separador .. "]"
local CONS_SALVO_H = "[^" .. vocales .. separador .. "hH]"
local CONS_SALVO_R = "[^" .. vocales .. separador .. "rR]"
local LETRA = "[^" .. separador .. "]"
local no_acentuado = list_to_set({
"el", "la", "los", "las", -- artículos
"me", "te", "se", "nos", "vos", "lu", "la", "lo", "los", "les", -- pron. objeto
"que", "quien", "como", "cuando", "onde", "u", "au", "cuantu", "cuanta", "cuanto", "cuantos", "cuantes", -- pron. relativos
"y", "ya", "o", "u", "nin", -- conjunciones
"de", "del", "a", "al", -- preposiciones y articulos
"por", "en", "con", "sin", "tras", -- más preposiciones
--"mas", --pero REVISAR, hay otro “mas”
"so", --de so pretexto
"si", -- ??
-- "sol", "col", "cola", "colo", "coles", "polos", "pela", "pelo", "pelos", "peles" REVISAR, puede haber variantes tónicas
})
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"},{"ce"},{"de"},{"e"},{"efe"},{"gue"},{"hache"},{"i"},
{"jota","yota"},{"ka"},{"ele"},{"eme"},{"ene"},{"o"},{"pe"},{"cu"},{"erre"},{"ese"},{"te"},{"u"},
{"uve"},{"uve doble"},{"xe","equis"},{"ye","y griega"},{"zeta","zeda"},{"eñe"}}
local function silabear(p)
-- 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")
-- más prefijos con h (para evitar que se unan en diptongo con la vocal anterior)
p = gsub(p, "(" .. VOCAL .. ")(hidr)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hisp)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hex)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(he[cp]t)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hetero)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hemi)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(homo)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hipo)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hiper)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hecto)", "%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")
p = gsubrep(p, "("..LETRA..")([ḷḶ][ḷḶ]"..VOCAL..")", "%1"..divsil.."%2") -- esto también existe en asturiano
-- 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")
-- 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") -- no puede ir íi
p = gsubrep(p, "([íÍ])([hH]?"..VOCAL_SALVO_I..")", "%1"..divsil.."%2") -- no puede ir íi
p = gsubrep(p, "([iI])([hH]?[iIíÍ])", "%1"..divsil.."%2") -- no puede ir íi
p = gsubrep(p, "([uUúÚ])([hH]?[íÍ])", "%1"..divsil.."%2")
p = gsubrep(p, "([uUiI])([hH]?[áÁéÉóÓ])"..FIN_PALABRA, "%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 generar_fono(text)
-- 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, "x", "ʃ")
-- 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", "")
-- g, j, ñ, v, z
text = gsub(text, "[gjñvz]", {["g"]="ɣ", ["j"]="x", ["ñ"]="ɲ", ["v"]="b", ["z"]="θ"})
-- s + s/θ, ks.s, s.ce, s.ci, ej [[excepción]], [[fascinante]]
text = gsub(text, "[sθ]("..SEPSIL.."[sθ])", "%1")
-- diptongos
text = gsub(text, "ii", "ij") -- íi
text = gsub(text, "i([aeou])", "j%1")
text = gsub(text, "u([aeo])", "w%1") -- no puede ir wi/ui
text = gsub(text, "([aeou])[iy]", "%1j")
text = gsub(text, "([aeo])u", "%1w")
text = gsub(text, "uu", "u") -- [[inxenuu]]
-- y consonántica
text = gsub(text, "y", "ʝ")
-- grafías dialectales
text = gsub(text, "ḷḷ", "ʈ͡ʂ")
text = gsub(text, "ḥ", "h")
-- n.b, n.p, n.m
text = gsub(text, "n("..SEPARADOR.."[bmp])", "m%1")
-- s.r
text = gsub(text, "s("..SEPARADOR.."[ɾr])", "%1")
return text
end
local function normalizar_fono(fono)
fono = gsub(fono, "ʧ", "t͡ʃ")
return fono
end
local function generar_fone(fono)
-- [[redacción]] ~ "redaición" (acc/ecc -> aic/eic), [[redactor]] ~ "redautor" (act/ect -> aut/eut)
fono = gsub(fono, "([ae])k("..SEPARADOR..")θ", "%1j%2θ")
fono = gsub(fono, "([ae])k("..SEPARADOR..")t", "%1(k)%2t") -- véase [[Discusión:oviductu]]
-- geminación de consonantes a final de sílaba [[absolutu]] ~ "assolutu"
fono = gsub(fono, "[bdkgp]("..SEPARADOR..")([^"..vocales.."bdkgp".."])", "%2%1%2")
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, "^("..SEPARADOR.."*)([βðɣ])", function(a, b) return a..fricative_to_stop[b] 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 al igual que con el español
fono = gsub(fono, "ŋg", "ŋ")
-- 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)
-- 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
-- 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 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 fono = generar_fono(s1b)
local fone = generar_fone(fono)
args["fone"][k] = fone
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, {{"k%-s", ".-x"}, {"ks%-.", "x-."}})] = true
end
end
rimas[rima(normalizar_fono(fono))] = true
if args["ayudanota"][j] then
args["fnota"][j] = {args["ayudanota"][j]}
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
kts0psttxng8gwfn61ebps600h7gf4u
6117374
6117373
2026-06-06T21:15:55Z
Tmagc
158167
Se ha deshecho la revisión [[Special:Diff/6117373|6117373]] de [[Special:Contributions/Tmagc|Tmagc]] ([[User talk:Tmagc|disc.]])
6117374
Scribunto
text/plain
-- Transcripciones fonéticas en asturiano
-- 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 gsubb = m_str.gsubb
local gsubrep = m_str.gsubrep
local split = m_str.split
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
--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 vocales_salvo_i = "aeouyüAEOUYÜáéíóúýàèìòùỳÁÉÍÓÚÝÀÈÌÒÙỲ"
local VOCAL_TILDADA = "[" .. vocales_tildadas .. "]"
local vocales = vocales_no_tildadas .. vocales_tildadas
local VOCAL = "[" .. vocales .. "]"
local VOCAL_SALVO_I = "["..vocales_salvo_i.."]"
local CONS = "[^" .. vocales .. separador .. "]"
local CONS_SALVO_H = "[^" .. vocales .. separador .. "hH]"
local CONS_SALVO_R = "[^" .. vocales .. separador .. "rR]"
local LETRA = "[^" .. separador .. "]"
local no_acentuado = list_to_set({
"el", "la", "los", "las", -- artículos
"me", "te", "se", "nos", "vos", "lu", "la", "lo", "los", "les", -- pron. objeto
"que", "quien", "como", "cuando", "onde", "u", "au", "cuantu", "cuanta", "cuanto", "cuantos", "cuantes", -- pron. relativos
"y", "ya", "o", "u", "nin", -- conjunciones
"de", "del", "a", "al", -- preposiciones y articulos
"por", "en", "con", "sin", "tras", -- más preposiciones
--"mas", --pero REVISAR, hay otro “mas”
"so", --de so pretexto
"si", -- ??
-- "sol", "col", "cola", "colo", "coles", "polos", "pela", "pelo", "pelos", "peles" REVISAR, puede haber variantes tónicas
})
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"},{"ce"},{"de"},{"e"},{"efe"},{"gue"},{"hache"},{"i"},
{"jota","yota"},{"ka"},{"ele"},{"eme"},{"ene"},{"o"},{"pe"},{"cu"},{"erre"},{"ese"},{"te"},{"u"},
{"uve"},{"uve doble"},{"xe","equis"},{"ye","y griega"},{"zeta","zeda"},{"eñe"}}
local function silabear(p)
-- 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")
-- más prefijos con h (para evitar que se unan en diptongo con la vocal anterior)
p = gsub(p, "(" .. VOCAL .. ")(hidr)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hisp)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hex)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(he[cp]t)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hetero)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hemi)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(homo)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hipo)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hiper)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hecto)", "%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")
p = gsubrep(p, "("..LETRA..")([ḷḶ][ḷḶ]"..VOCAL..")", "%1"..divsil.."%2") -- esto también existe en asturiano
-- 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")
-- 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") -- no puede ir íi
p = gsubrep(p, "([íÍ])([hH]?"..VOCAL_SALVO_I..")", "%1"..divsil.."%2") -- no puede ir íi
p = gsubrep(p, "([iI])([hH]?[iIíÍ])", "%1"..divsil.."%2") -- no puede ir íi
p = gsubrep(p, "([uUúÚ])([hH]?[íÍ])", "%1"..divsil.."%2")
p = gsubrep(p, "([uUiI])([hH]?[áÁéÉóÓ])"..FIN_PALABRA, "%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 generar_fono(text)
-- 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, "x", "ʃ")
-- 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", "")
-- g, j, ñ, v, z
text = gsub(text, "[gjñvz]", {["g"]="ɣ", ["j"]="x", ["ñ"]="ɲ", ["v"]="b", ["z"]="θ"})
-- s + s/θ, ks.s, s.ce, s.ci, ej [[excepción]], [[fascinante]]
text = gsub(text, "[sθ]("..SEPSIL.."[sθ])", "%1")
-- diptongos
text = gsub(text, "ii", "ij") -- íi
text = gsub(text, "i([aeou])", "j%1")
text = gsub(text, "u([aeo])", "w%1") -- no puede ir wi/ui
text = gsub(text, "([aeou])[iy]", "%1j")
text = gsub(text, "([aeo])u", "%1w")
text = gsub(text, "uu", "u") -- [[inxenuu]]
-- y consonántica
text = gsub(text, "y", "ʝ")
-- grafías dialectales
text = gsub(text, "ḷḷ", "ʈ͡ʂ")
text = gsub(text, "ḥ", "h")
-- n.b, n.p, n.m
text = gsub(text, "n("..SEPARADOR.."[bmp])", "m%1")
-- s.r
text = gsub(text, "s("..SEPARADOR.."[ɾr])", "%1")
return text
end
local function normalizar_fono(fono)
fono = gsub(fono, "ʧ", "t͡ʃ")
return fono
end
local function generar_fone(fono)
-- [[redacción]] ~ "redaición" (acc/ecc -> aic/eic), [[redactor]] ~ "redautor" (act/ect -> aut/eut)
fono = gsub(fono, "([ae])k("..SEPARADOR..")θ", "%1j%2θ")
fono = gsub(fono, "([ae])k("..SEPARADOR..")t", "%1w%2t")
-- geminación de consonantes a final de sílaba [[absolutu]] ~ "assolutu"
fono = gsub(fono, "[bdkgp]("..SEPARADOR..")([^"..vocales.."bdkgp".."])", "%2%1%2")
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, "^("..SEPARADOR.."*)([βðɣ])", function(a, b) return a..fricative_to_stop[b] 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 al igual que con el español
fono = gsub(fono, "ŋg", "ŋ")
-- 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)
-- 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
-- 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 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 fono = generar_fono(s1b)
local fone = generar_fone(fono)
args["fone"][k] = fone
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, {{"k%-s", ".-x"}, {"ks%-.", "x-."}})] = true
end
end
rimas[rima(normalizar_fono(fono))] = true
if args["ayudanota"][j] then
args["fnota"][j] = {args["ayudanota"][j]}
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
1o0yokf0wsr3wa7z8uq3zym0tj7syql
6117375
6117374
2026-06-06T21:18:12Z
Tmagc
158167
6117375
Scribunto
text/plain
-- Transcripciones fonéticas en asturiano
-- 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 gsubb = m_str.gsubb
local gsubrep = m_str.gsubrep
local split = m_str.split
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
--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 vocales_salvo_i = "aeouyüAEOUYÜáéíóúýàèìòùỳÁÉÍÓÚÝÀÈÌÒÙỲ"
local VOCAL_TILDADA = "[" .. vocales_tildadas .. "]"
local vocales = vocales_no_tildadas .. vocales_tildadas
local VOCAL = "[" .. vocales .. "]"
local VOCAL_SALVO_I = "["..vocales_salvo_i.."]"
local CONS = "[^" .. vocales .. separador .. "]"
local CONS_SALVO_H = "[^" .. vocales .. separador .. "hH]"
local CONS_SALVO_R = "[^" .. vocales .. separador .. "rR]"
local LETRA = "[^" .. separador .. "]"
local no_acentuado = list_to_set({
"el", "la", "los", "las", -- artículos
"me", "te", "se", "nos", "vos", "lu", "la", "lo", "los", "les", -- pron. objeto
"que", "quien", "como", "cuando", "onde", "u", "au", "cuantu", "cuanta", "cuanto", "cuantos", "cuantes", -- pron. relativos
"y", "ya", "o", "u", "nin", -- conjunciones
"de", "del", "a", "al", -- preposiciones y articulos
"por", "en", "con", "sin", "tras", -- más preposiciones
--"mas", --pero REVISAR, hay otro “mas”
"so", --de so pretexto
"si", -- ??
-- "sol", "col", "cola", "colo", "coles", "polos", "pela", "pelo", "pelos", "peles" REVISAR, puede haber variantes tónicas
})
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"},{"ce"},{"de"},{"e"},{"efe"},{"gue"},{"hache"},{"i"},
{"jota","yota"},{"ka"},{"ele"},{"eme"},{"ene"},{"o"},{"pe"},{"cu"},{"erre"},{"ese"},{"te"},{"u"},
{"uve"},{"uve doble"},{"xe","equis"},{"ye","y griega"},{"zeta","zeda"},{"eñe"}}
local function silabear(p)
-- 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")
-- más prefijos con h (para evitar que se unan en diptongo con la vocal anterior)
p = gsub(p, "(" .. VOCAL .. ")(hidr)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hisp)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hex)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(he[cp]t)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hetero)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hemi)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(homo)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hipo)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hiper)", "%1"..divsil.."%2")
p = gsub(p, "(" .. VOCAL .. ")(hecto)", "%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")
p = gsubrep(p, "("..LETRA..")([ḷḶ][ḷḶ]"..VOCAL..")", "%1"..divsil.."%2") -- esto también existe en asturiano
-- 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")
-- 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") -- no puede ir íi
p = gsubrep(p, "([íÍ])([hH]?"..VOCAL_SALVO_I..")", "%1"..divsil.."%2") -- no puede ir íi
p = gsubrep(p, "([iI])([hH]?[iIíÍ])", "%1"..divsil.."%2") -- no puede ir íi
p = gsubrep(p, "([uUúÚ])([hH]?[íÍ])", "%1"..divsil.."%2")
p = gsubrep(p, "([uUiI])([hH]?[áÁéÉóÓ])"..FIN_PALABRA, "%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 generar_fono(text)
-- 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, "x", "ʃ")
-- 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", "")
-- g, j, ñ, v, z
text = gsub(text, "[gjñvz]", {["g"]="ɣ", ["j"]="x", ["ñ"]="ɲ", ["v"]="b", ["z"]="θ"})
-- s + s/θ, ks.s, s.ce, s.ci, ej [[excepción]], [[fascinante]]
text = gsub(text, "[sθ]("..SEPSIL.."[sθ])", "%1")
-- diptongos
text = gsub(text, "ii", "ij") -- íi
text = gsub(text, "i([aeou])", "j%1")
text = gsub(text, "u([aeo])", "w%1") -- no puede ir wi/ui
text = gsub(text, "([aeou])[iy]", "%1j")
text = gsub(text, "([aeo])u", "%1w")
text = gsub(text, "uu", "u") -- [[inxenuu]]
-- y consonántica
text = gsub(text, "y", "ʝ")
-- grafías dialectales
text = gsub(text, "ḷḷ", "ʈ͡ʂ")
text = gsub(text, "ḥ", "h")
-- n.b, n.p, n.m
text = gsub(text, "n("..SEPARADOR.."[bmp])", "m%1")
-- s.r
text = gsub(text, "s("..SEPARADOR.."[ɾr])", "%1")
return text
end
local function normalizar_fono(fono)
fono = gsub(fono, "ʧ", "t͡ʃ")
return fono
end
local function generar_fone(fono)
-- [[redacción]] ~ "redaición" (acc/ecc -> aic/eic), [[redactor]] ~ "redautor" (act/ect -> aut/eut)
fono = gsub(fono, "([ae])k("..SEPARADOR..")θ", "%1j%2θ")
fono = gsub(fono, "([ae])k("..SEPARADOR..")t", "%1w%2t")
-- geminación de consonantes a final de sílaba [[absolutu]] ~ "assolutu"
-- véase [[Discusión:oviductu]]
fono = gsub(fono, "([bdkgp])("..SEPARADOR..")([^"..vocales.."bdkgp".."])", "(%1)%2%3")
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, "^("..SEPARADOR.."*)([βðɣ])", function(a, b) return a..fricative_to_stop[b] 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 al igual que con el español
fono = gsub(fono, "ŋg", "ŋ")
-- 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)
-- 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
-- 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 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 fono = generar_fono(s1b)
local fone = generar_fone(fono)
args["fone"][k] = fone
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, {{"k%-s", ".-x"}, {"ks%-.", "x-."}})] = true
end
end
rimas[rima(normalizar_fono(fono))] = true
if args["ayudanota"][j] then
args["fnota"][j] = {args["ayudanota"][j]}
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
ailuqqrbr28pex4gq9b7554k9r5u6bf
Módulo:flex/es
828
1048487
6117310
6110507
2026-06-06T16:45:54Z
TMCbot
164594
.
6117310
Scribunto
text/plain
-- Módulo para flexión de sustantivos, adjetivos y verbos
-- Autor: Tmagc
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local generar_traza = require("Módulo:traza")
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local len = m_str.len
local sub = m_str.sub
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local vocal_no_tilde = "aeiouüAEIOUÜ"
local vocal_tilde = "áéíóúÁÉÍÓÚ"
local vocal = vocal_no_tilde..vocal_tilde
local cons = "bcdfghjklmnñpqrstvwxyzBCDFGHJKLMNÑPQRSTVWXYZ"
local espacios = "%-‐%s"
local guion = "%-"
local VOCAL = "["..vocal.."]"
local CONS = "["..cons.."]"
local CONS_SALVO_H = "[^"..vocal.."hH~#{}]"
local ESPACIO = "["..espacios.."]"
local LETRA = "[^"..espacios.."]"
local agregar_tilde =
{
["a"] = "á",
["e"] = "é",
["i"] = "í",
["o"] = "ó",
["u"] = "ú",
["á"] = "á",
["é"] = "é",
["í"] = "í",
["ó"] = "ó",
["ú"] = "ú",
["A"] = "Á",
["E"] = "É",
["I"] = "Í",
["O"] = "Ó",
["U"] = "Ú",
["Á"] = "Á",
["É"] = "É",
["Í"] = "Í",
["Ó"] = "Ó",
["Ú"] = "Ú",
}
local quitar_tilde =
{
["á"] = "a",
["é"] = "e",
["í"] = "i",
["ó"] = "o",
["ú"] = "u",
["a"] = "a",
["e"] = "e",
["i"] = "i",
["o"] = "o",
["u"] = "u",
["Á"] = "A",
["É"] = "E",
["Í"] = "I",
["Ó"] = "O",
["Ú"] = "U",
["A"] = "A",
["E"] = "E",
["I"] = "I",
["O"] = "O",
["U"] = "U",
}
local function try(p, rx, pl, f, fpl, pl2, femenino)
local p2, sust = gsubb(p, rx, "~%0~")
if not sust then
return nil
end
if type(pl) == "string" and sub(pl, 1, 1) ~= "#" then
pl = "~"..pl.."~"
end
if type(f) == "string" and sub(f, 1, 1) ~= "#" then
f = "~"..f.."~"
end
if type(fpl) == "string" and sub(fpl, 1, 1) ~= "#" then
fpl = "~"..fpl.."~"
end
if type(pl2) == "string" and sub(pl2, 1, 1) ~= "#" then
pl2 = "~"..pl2.."~"
end
if not pl then
return {m={p2}, p={}, f={}, fp={}}
end
if not femenino or not f then
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={}, fp={}}
else
return {m={p2}, p={gsub1(p, rx, pl)}, f={}, fp={}}
end
end
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}}
else
return {m={p2}, p={gsub1(p, rx, pl)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}}
end
end
function export.flexionar_palabra(p, g, forzar_s)
local mf = g == "mf"
local no_s = not forzar_s
local es_monosilabo = find(p, "^"..CONS.."-[iuü]?[iu]?[aeiou][iu]?"..CONS.."-$")
local sin_tildes = not find(p, "[áéíóúÁÉÍÓÚ]")
local function rep_2_es(v, c) return "~"..quitar_tilde[v]..c.."es~" end
local function rep_2_a(v, c) return "~"..quitar_tilde[v]..c.."a~" end
local function rep_2_as(v, c) return "~"..quitar_tilde[v]..c.."as~" end
local function rep_2_es_yz_llana(v, r, c) return no_s and ("~"..v..r..(c == "z" and "c" or c).."es~") or ("#"..(c == "y" and quitar_tilde[v] or v)..r..(c == "y" and "i" or c).."s#") end
local function rep_2_es_yz_aguda(v, c) return no_s and ("~"..quitar_tilde[v]..(c == "z" and "c" or c).."es~") or ("#"..((c == "y" and not es_monosilabo) and agregar_tilde[v] or v)..(c == "y" and "i" or c).."s#") end
local function rep_2_es_yz_aguda_tilde(v, c) return no_s and ("~"..v..(c == "z" and "c" or c).."es~") or ("#"..v..(c == "y" and "i" or c).."s#") end
local function rep_2_es_n_tilde(v, c) return no_s and "~"..agregar_tilde[v]..c.."es~" or "#"..v..c.."s#" end
local changed = -- vocal
try(p, sin_tildes and "ote$" or "^%A$", "otes", "ota", "otas", nil, mf)
or try(p, sin_tildes and "ete$" or "^%A$", "etes", "eta", "etas", nil, mf)
or try(p, "o$", "os", "a", "as", nil, mf)
or try(p, "[íú]$", "%0s", nil, nil, no_s and "%0es" or nil)
or try(p, VOCAL.."$", "%0s")
-- doble consonante
or try(p, "ch$", no_s and "%0es" or "#%0s#")
or try(p, "("..CONS..")y$", "%1is")
or try(p, "[sz]"..CONS.."$", nil)
or try(p, CONS.."[sz]$", nil)
or try(p, CONS..CONS.."$", "%0s")
-- vocal + consonante
or try(p, es_monosilabo and "[ns]$" or "^%A$", no_s and "%0es" or "#%0s#", "%0a", "%0as", nil, mf) -- monosilabo en n o s
or try(p, sin_tildes and "x$" or "^%A$", no_s and "%0es" or "#%0s#") -- monosilabo o aguda en x
or try(p, "[aeo][íú][nsx]$", no_s and "%0es" or "#%0s#", "%0a", "%0as", nil, mf) -- aguda en n o s (hiato final)
or try(p, "([áéó])([iuü][nsx])$", rep_2_es, rep_2_a, rep_2_as, nil, mf) -- aguda en n o s (diptongo final)
or try(p, "([áéíóú])([nsx])$", rep_2_es, rep_2_a, rep_2_as, nil, mf) -- aguda en n o s
or try(p, sin_tildes and "([aeo])(h?[iuü]?h?[iuü]?h?[aeo][iuü]?h?n)$" or "^%A$", rep_2_es_n_tilde) -- llana en n (hiato entre dos vocales abiertas)
or try(p, "([íú])(h?[iuü]?h?[aeiou]h?[iuü]?h?n)$" or "^%A$", rep_2_es_n_tilde) -- llana en n (hiato decreciente)
or try(p, sin_tildes and "([aeo])(h?[iuü]h?[iuü]?h?[aeiou][iuü]?h?n)" or "^%A$", rep_2_es_n_tilde) -- llana en n (diptongo con sílaba anterior, muy raro)
or try(p, sin_tildes and "([aeiou])(h?[iuü]?h?"..CONS_SALVO_H.."+h?u?[iuü]?h?[aeiou][iuü]?h?n)$" or "^%A$", rep_2_es_n_tilde) -- llana en n (con consonante de separacion)
or try(p, "(["..vocal_tilde.."])(h?[iuü]?h?"..CONS_SALVO_H.."+h?u?[iuü]?h?[aeiou][iuü]?h?n)$", rep_2_es_n_tilde) -- llana en n (con consonante de separacion)
or try(p, "[nsx]$", nil) -- esdrújulas en n, llanas/esdrújulas en x o s
or try(p, sin_tildes and "o[lr]$" or "^%A$", no_s and "%0es" or "#%0s#", "%0a", "%0as", nil, mf) -- -ol, -or (agudo)
or try(p, sin_tildes and "uz$" or "^%A$", "uces", "uza", "%uzas", nil, mf) -- -uz [[andaluz]], [[marfuz]] (REVISAR)
or try(p, "([aeo])úz$", "%1úces", "%1úza", "%1úzas", nil, mf) -- -uz (REVISAR)
or try(p, "úz$", "uces", "uza", "uzas", nil, mf) -- -uz (REVISAR)
or try(p, sin_tildes and "("..VOCAL..")([lrdjyzñ])$" or "^%A$", rep_2_es_yz_aguda) -- agudas en [lrdjyzñ]
or try(p, "([aeo][íú])([lrdjyzñ])$", rep_2_es_yz_aguda_tilde) -- agudas en [lrdjyzñ] (hiatos finales)
or try(p, "(["..vocal_tilde.."])([lrdjyzñ])$", rep_2_es_yz_aguda) -- agudas en [lrdjyzñ] (grafías anticuadas)
or try(p, "([áéó])(h?[iuü]?h?[aeiou][iuü]?)([lrdjyzñ])$", rep_2_es_yz_llana) -- llanas en [lrdjyzñ] (hiato entre vocales)
or try(p, "([íú])(h?[iuü]?h?[aeiou][iuü]?)([lrdjyzñ])$", rep_2_es_yz_llana) -- llanas en [lrdjyzñ] (hiato entre vocales 2)
or try(p, "([áéó])(h?[iuü]h?[iuü]?h?[aeiou][iuü]?h?)([lrdjyzñ])", rep_2_es_yz_llana) -- llanas en [lrdjyzñ] (diptongo con sílaba anterior, muy raro)
or try(p, "([áéó])(h?[iuü]?h?"..CONS_SALVO_H.."+h?u?[iuü]?h?[aeiou][iuü]?)([lrdjyzñ])$", rep_2_es_yz_llana) -- llanas en [lrdjyzñ] (con consonante de separación y diptongo)
or try(p, "([áéíóú])(h?"..CONS_SALVO_H.."+h?u?[iuü]?h?[aeiou][iuü]?)([lrdjyzñ])$", rep_2_es_yz_llana) -- llanas en [lrdjyzñ] (con consonante de separación)
or try(p, "[lrdjyzñ]$", nil) -- esdrújulas en [lrdjyzñ]
or try(p, CONS.."$", "%0s")
assert(changed, "No se pudo determinar la flexión de la palabra")
return changed
end
function export.flexion_sust_adj(palabras, g, forzar_s, copulativa)
local a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
if b then
if copulativa == nil then
error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"")
end
local flex1 = export.flexionar_palabra(a, g, forzar_s)
local flex2 = copulativa and export.flexionar_palabra(b, g, forzar_s) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto = match(palabras, "^("..guion.."?"..LETRA.."+)(.-)$")
local flex = export.flexionar_palabra(p, g, forzar_s)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
end
local cop -- = modo == "irreg" and false or args["cop"] falla...
if modo == "irreg" then
cop = false
else
cop = args["cop"]
end
local flex_ = export.flexion_sust_adj(title, modo, args["s"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." regulares")
elseif find(title, LETRA..ESPACIO..LETRA) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["n"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
return formatear_sust_adj(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "ES:Locuciones sustantivas" or "ES:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
args[1] = args[1] or "mf"
return formatear_sust_adj(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "ES:Locuciones adjetivas" or "ES:Adjetivos")
end
local YO, TU, VOS, EL, NOSOTROS, VOSOTROS, ELLOS = 1, 2, 3, 4, 5, 6, 7
local tostr = {"1", "2", "3", "4", "5", "6", "7"}
local PRONOMBRES = {"yo", "tú", "vos", "él, ella, usted", "nosotros", "vosotros", "ustedes, ellos"}
local PRONOMBRES_SUBJ = {"que yo", "que tú", "que vos", "que él, que ella, que usted", "que nosotros", "que vosotros", "que ustedes, que ellos"}
local PRONOMBRES_IMP = {"―", "(tú)", "(vos)", "(usted)", "(nosotros)", "(vosotros)", "(ustedes)"}
local IMPERSONALES = {"", "", "", "(ello)", "", "", "(ellos)"}
local IMPERSONALES_SUBJ = {"", "", "", "(que ello)", "", "", "(que ellos)"}
local REFLEXIVOS = {"me", "te", "te", "se", "nos", "os", "se"}
local function obtener_pronombre(forma, impers, indirecto)
if indirecto then
return nil
end
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local formas_no_personales = {
["ger"] = true,
["part"] = true,
["inf"] = true,
}
local formas_personales = {
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["ind_fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["subj_fut"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["ind_perf_comp"] = true,
["ind_pluperf"] = true,
["ind_anter"] = true,
["ind_fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
["subj_fut_comp"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local sufijos = {
{
["ger"] = {"ando"},
["part"] = {"ado"},
["ind_pres"] = {"o", "as", "ás", "a", "amos", "áis", "an"},
["ind_imp"] = {"aba", "abas", "abas", "aba", "ábamos", "abais", "aban"},
["ind_perf"] = {"é", "aste", "aste", "ó", "amos", "asteis", "aron"},
["ind_perf_alt"] = {"é", "aste", "aste", "ó", "amos", "asteis", "aron"},
["ind_fut"] = {"aré", "arás", "arás", "ará", "aremos", "aréis", "arán"},
["subj_pres"] = {"e", "es", "és", "e", "emos", "éis", "en"},
["subj_imp"] = {"ara", "aras", "aras", "ara", "áramos", "arais", "aran",
"ase", "ases", "ases", "ase", "ásemos", "aseis", "asen"},
["subj_fut"] = {"are", "ares", "ares", "are", "áremos", "areis", "aren"},
["cond"] = {"aría", "arías", "arías", "aría", "aríamos", "aríais", "arían"},
["imper"] = {"-", "a", "á", "e", "emos", "ad", "en"}
},
{
["ger"] = {"iendo"},
["part"] = {"ido"},
["ind_pres"] = {"o", "es", "és", "e", "emos", "éis", "en"},
["ind_imp"] = {"ía", "ías", "ías", "ía", "íamos", "íais", "ían"},
["ind_perf"] = {"í", "iste", "iste", "ió", "imos", "isteis", "ieron"},
["ind_perf_alt"] = {"e", "iste", "iste", "o", "imos", "isteis", "ieron"},
["ind_fut"] = {"eré", "erás", "erás", "erá", "eremos", "eréis", "erán"},
["subj_pres"] = {"a", "as", "ás", "a", "amos", "áis", "an"},
["subj_imp"] = {"iera", "ieras", "ieras", "iera", "iéramos", "ierais", "ieran",
"iese", "ieses", "ieses", "iese", "iésemos", "ieseis", "iesen"},
["subj_fut"] = {"iere", "ieres", "ieres", "iere", "iéremos", "iereis", "ieren"},
["cond"] = {"ería", "erías", "erías", "ería", "eríamos", "eríais", "erían"},
["imper"] = {"-", "e", "é", "a", "amos", "ed", "an"}
},
{
["ger"] = {"iendo"},
["part"] = {"ido"},
["ind_pres"] = {"o", "es", "ís", "e", "imos", "ís", "en"},
["ind_imp"] = {"ía", "ías", "ías", "ía", "íamos", "íais", "ían"},
["ind_perf"] = {"í", "iste", "iste", "ió", "imos", "isteis", "ieron"},
["ind_perf_alt"] = {"e", "iste", "iste", "o", "imos", "isteis", "ieron"},
["ind_fut"] = {"iré", "irás", "irás", "irá", "iremos", "iréis", "irán"},
["subj_pres"] = {"a", "as", "ás", "a", "amos", "áis", "an"},
["subj_imp"] = {"iera", "ieras", "ieras", "iera", "iéramos", "ierais", "ieran",
"iese", "ieses", "ieses", "iese", "iésemos", "ieseis", "iesen"},
["subj_fut"] = {"iere", "ieres", "ieres", "iere", "iéremos", "iereis", "ieren"},
["cond"] = {"iría", "irías", "irías", "iría", "iríamos", "iríais", "irían"},
["imper"] = {"-", "e", "í", "a", "amos", "id", "an"}
},
}
local auxiliar = {
["inf_comp"] = {"haber"},
["ger_comp"] = {"habiendo"},
["ind_perf_comp"] = {"he", "has", "has", "ha", "hemos", "habéis", "han"},
["ind_pluperf"] = {"había", "habías", "habías", "había", "habíamos", "habíais", "habían"},
["ind_anter"] = {"hube", "hubiste", "hubiste", "hubo", "hubimos", "hubisteis", "hubieron"},
["ind_fut_comp"] = {"habré", "habrás", "habrás", "habrá", "habremos", "habréis", "habrán"},
["cond_comp"] = {"habría", "habrías", "habrías", "habría", "habríamos", "habríais", "habrían"},
["subj_perf"] = {"haya", "hayas", "hayas", "haya", "hayamos", "hayáis", "hayan"},
["subj_pluperf"] = {"hubiera", "hubieras", "hubieras", "hubiera", "hubiéramos", "hubierais", "hubieran",
"hubiese", "hubieses", "hubieses", "hubiese", "hubiésemos", "hubieseis", "hubiesen"},
["subj_fut_comp"] = {"hubiere", "hubieres", "hubieres", "hubiere", "hubiéremos", "hubiereis", "hubieren"}
}
local function obtener_sufijos(sufijo_inf, forma)
if sufijo_inf == "ar" then
return sufijos[1][forma]
elseif sufijo_inf == "er" then
return sufijos[2][forma]
else
return sufijos[3][forma]
end
end
local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf)
if not nexo then
return sufijo
end
if sufijo_inf == "ar" then
if find(sufijo, "^[eéií]") then
if nexo == "c" then
return "~qu~"..sufijo
end
if nexo == "g" then
return "g~u~"..sufijo
end
if nexo == "z" then
return "~c~"..sufijo
end
if nexo == "gu" then
return "g~ü~"..sufijo
end
end
local _, cnt = gsub(sufijo, "[aeiou]", "")
if cnt == 1
and not find(sufijo, "[áéíóú]")
and find(sub(sufijo, -1), "[aeiouns]") then
if nexo == "cu" then
return sub(nexo, -2, -2).."~ú~"..sufijo, nexo..sufijo -- es llana y entonces lleva tilde
end
if nexo == "u" then
return "~ú~"..sufijo -- es llana y entonces lleva tilde
end
if nexo == "U" then
return "#u#"..sufijo -- [[estatuar]]
end
if nexo == "i" then
return "#í#"..sufijo -- es llana y entonces lleva tilde
end
if nexo == "I" then
return "#e#"..sufijo -- es llana y entonces la sinéresis de la i se pierde
end
end
if find(sufijo, "^ar") then
if find(nexo, "^[~#]?[bdr]?r[~#]?$") then
return nexo..sub(sufijo, 3)
end
end
else -- ER/IR/ÍR
if find(sufijo, "^[aáoóuú]") then
if nexo == "c" then
return "~z~"..sufijo
end
if nexo == "S" then -- mecer
return "#z#"..sufijo
end
if nexo == "g" then
return "~j~"..sufijo
end
if nexo == "gu" then
return "g~"..sufijo.."~"
end
if nexo == "qu" then
return "~c~"..sufijo
end
if nexo == "C" then
return "~zc~"..sufijo
end
end
if find(sufijo, "^[aeoáéó]") then
if nexo == "gü" then
return "g~uy~"..sufijo
end
if nexo == "u" then
return "u~y~"..sufijo
end
end
if find(sufijo, "^i[aeoáéó]") then
if (nexo == "ñ" or nexo == "ll") then
return "~"..nexo..sub(sufijo, 2).."~"
end
if nexo == "gü" then
return "g~uy~"..sub(sufijo, 2)
end
if nexo == "u" then
return "u~y~"..sub(sufijo, 2)
end
if nexo == "e" then
return nexo.."~y~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i[^aeiouáéíóú]") then
if nexo == "e" then
return nexo.."~í~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i[eé]") then
if find(nexo, "u#$") then -- ir --> fuera (subj)
return nexo..sub(sufijo, 2)
end
if nexo == "#j#" or nexo == "~j~" then
return nexo..sub(sufijo, 2)
end
end
if find(sufijo, "^í$") then
if nexo == "#j#" or nexo == "~j~" then
return nexo.."~e~"
end
end
if find(sufijo, "^ió$") then
if nexo == "#j#" or nexo == "~j~" then
return nexo.."~o~"
end
end
if find(sufijo, "^[ie]r") then
if find(nexo, "^[~#]?[bdr]?r[~#]?$") then
return nexo..sub(sufijo, 3)
end
end
end
if nexo == "I" then
return "i"..sufijo -- sinéresis normal
end
if nexo == "U" then -- estatuar
return "u"..sufijo
end
if nexo == "C" then
return "c"..sufijo -- sin epéntesis
end
if nexo == "S" then -- mecer
return "c"..sufijo
end
return nexo..sufijo
end
local function combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf)
local nucleo_ = gsub(nucleo, "[~#]", "")
local nexosufijo_ = gsub(nexosufijo, "[~#]", "")
if find(nucleo_, "[yi]$") and find(nexosufijo_, "^i") then -- se juntan dos íes o y-i (ej. reír, freír, oír)
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1")
elseif find(nucleo_, "^[^áéíóú]-[aeiou]h?$") and find(nexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- sufijo con i/u tónica (caISTE, caIMOS, caIDO, oID, reHÚyo etc.)
return nucleo..gsub1(nexosufijo, "^([~#]?h?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleo_, "[^gq][aeiou]$") and find(nexosufijo_, "^i[aeiouáéíóú]") then -- se junta [aeiou]i[aeiouáéíóú] -> cambio a y (creYO) PERO [[chinguiar]] -> chinguIando
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~y~")
elseif find(nucleo_, "[aeiou]$") and find(nexosufijo_, "^id$") then -- reír -> reÍd, embaír -> embaÍd
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~í~")
elseif find(nucleo_, "^[^aeiouáéíóú]+$")
and (find(nexosufijo_, "^"..CONS.."?"..CONS.."?".."[iuü]?[áéó][iuü]?[ns]?$") or find(nexosufijo_, "^[íú][ns]?$")) then -- caso de dar, vos *d+ás, debo quitar la tilde
return nucleo..gsub1(nexosufijo, "[áéíóú]", function(v) return "~"..quitar_tilde[v].."~" end)
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
local prefijo_ = gsub(prefijo, "[~#]", "")
local nucleonexosufijo_ = gsub(nucleonexosufijo, "[~#]", "")
if prefijo_ and find(prefijo_, "[aeiou]") and not find(prefijo_, "[áéíóú]") then
if find(prefijo_, "^[^áéíóú]-[aeiou]h?$") and find(nucleonexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- nucleonexosufijo con i/u tónica (rehacer -> rehíce)
return prefijo..gsub1(nucleonexosufijo, "^([~#]?h?[~#]?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleonexosufijo_, "^("..CONS.."*[iuü]?)([aeiou])([iuü]?[ns]?)$") then -- monosílabo: prever --> prevén
return prefijo..gsub1(nucleonexosufijo, "^([~#]?"..CONS.."*[~#]?[iuü]?[~#]?)([aeiou])([~#]?[iuü]?[~#]?[ns]?[~#]?)$", function(a, b, c) return a..agregar_tilde[b]..c end) -- ven --> prevén
end
end
return prefijo..nucleonexosufijo
end
local paradigmas_regulares = {
["ar"] = {
{"anunciar", {"iar$"}, { --necesidad de explicitar el diptongo, aunque esta variante es la que consideramos como la regular
}},
{"evacuar", {"cuar$"}, {
nexo = "cu"
}},
{"averiguar", {"guar$"}, {
nexo = "gu"
}},
{"complicar", {"car$"}, {
nexo = "c"
}},
{"llegar", {"gar$"}, {
nexo = "g"
}},
{"actuar", {"uar$"}, {
nexo = "u"
}},
{"realizar", {"zar$"}, {
nexo = "z"
}},
{"amar", {"ar$"}, {
}},
},
["er"] = {
{"ller", {"ller$"}, { -- Existe esto??
nexo = "ll"
}},
{"guer", {"guer$"}, { -- Existe esto??
nexo = "gu"
}},
{"güer", {"güer$"}, { -- Existe esto??
nexo = "gü"
}},
{"quer", {"quer$"}, { -- Existe esto??
nexo = "qu"
}},
{"parecer", {"[aeiou]cer$"}, {
nexo = "C"
}},
{"vencer", {"[^aeious]cer$"}, { -- los verbos en -scer NO entran en este paradigma (ver fosforescer o evanescer)
nexo = "c"
}},
{"leer", {"eer$"}, {
nexo = "e"
}},
{"proteger", {"ger$"}, {
nexo = "g"
}},
{"atañer", {"ñer$"}, {
nexo = "ñ"
}},
{"uer", {"uer$"}, { -- Existe esto??
nexo = "u"
}},
{"temer", {"er$"}, {
}},
},
["ir"] = {
{"producir", {"ducir$"}, {
nucleo = "du",
nexo = "C",
ind_perf = {nexo = "~j~"},
subj_imp = {nexo = "~j~"},
subj_fut = {nexo = "~j~"}
}},
{"escabullir", {"llir$"}, {
nexo = "ll"
}},
{"distinguir", {"guir$"}, {
nexo = "gu"
}},
{"argüir", {"güir$"}, {
nexo = "gü"
}},
{"delinquir", {"quir$"}, {
nexo = "qu"
}},
{"lucir", {"[aeiou]cir$"}, {
nexo = "C"
}},
{"fruncir", {"[^aeious]cir$"}, {
nexo = "c"
}},
{"dirigir", {"gir$"}, {
nexo = "g"
}},
{"gruñir", {"ñir$"}, {
nexo = "ñ"
}},
{"construir", {"uir$"}, {
nexo = "u"
}},
{"partir", {"ir$"}, {
}},
},
["ír"] = {
{"reír", {"eír$"}, {
nucleo = "e",
alt = {"í-i"},
}},
{"embaír", {"ír$"}, {
}},
}
}
local paradigmas_irregulares = {
["ar"] = {
{"andar", {"^d?e?s?andar$"}, { -- cuidado con mandar
nucleo = "and",
ind_perf = {{"anduve", "andé{x}"}, {"anduviste", "andaste{x}"}, {"anduviste", "andaste{x}"}, {"anduvo", "andó{x}"}, {"anduvimos", "andamos{x}"}, {"anduvisteis", "andasteis{x}"}, {"anduvieron", "andaron{x}"}},
subj_imp = {nucleo = "anduv"},
subj_fut = {nucleo = "anduv"}
}},
{"dar", {"^d?e?s?dar$"}, { -- no pueden ir otros verbos como "andar o quedar"
nucleo = "d",
ind_pres = {{"doy"}},
ind_perf = {sufijo_inf = "er"},
subj_pres = {{"dé"}, nil, nil, {"dé"}},
subj_imp = {sufijo_inf = "er"},
subj_fut = {sufijo_inf = "er"},
imper = {nil, nil, nil, {"dé"}}
}},
{"errar", {"^errar$"}, {
nucleo = "err",
alt = {"ye", "REG"},
}},
{"estar", {"^estar$"}, {
ind_pres = {{"estoy"}, {"estás"}, nil, {"está"}, nil, nil, {"están"}},
ind_perf = {nucleo = "estuv"},
subj_pres = {{"esté"}, {"estés"}, {"estés"}, {"esté"}, nil, nil, {"estén"}},
subj_imp = {nucleo = "estuv"},
subj_fut = {nucleo = "estuv"},
imper = {nil, {"está"}, nil, {"esté"}, nil, nil, {"estén"}}
}},
{"estatuar", {"estatuar$"}, {
nexo = "U"
}},
{"inhestar", {"inhestar$"}, {
alt = {"ie"},
part = {"inhiesto"}
}},
{"tar", {"^tar$"}, {
ind_pres = {{"toy"}},
ind_perf = {nucleo = "tuv"},
subj_pres = {{"té"}, nil, nil, {"té"}},
subj_imp = {nucleo = "tuv"},
subj_fut = {nucleo = "tuv"},
imper = {nil, nil, nil, {"té"}, nil, nil, nil}
}},
{"enviar", {"enviar$"}, {
nexo = "i",
}},
{"culiar", {"culiar$"}, {
nexo = "I"
}},
{"aislar", {"aislar$"}, {
alt = {"í"}
}},
{"agorar", {"agorar$"}, {
alt = {"üe"}
}},
{"aunar", {"^aunar$"}, {
alt = {"ú"}
}},
{"contar", {"contar$"}, {
alt = {"ue"}
}},
{"pensar", {"^pensar$"}, { -- no puede ir compensar
alt = {"ie"}
}},
},
["er"] = {
{"caber", {"^caber$"}, {
ind_pres = {{"quepo"}},
ind_fut = {nucleo = "ca", nexo = "#br#"},
ind_perf = {nucleo = "cup"},
subj_pres = {nucleo = "quep"},
subj_imp = {nucleo = "cup"},
subj_fut = {nucleo = "cup"},
cond = {nucleo = "ca", nexo = "#br#"},
imper = {nil, nil, nil, {"quepa"}, {"quepamos"}, nil, {"quepan"}}
}},
{"caer", {"caer$"}, {
nucleo = "ca",
ind_pres = {{"caigo"}},
subj_pres = {nucleo = "caig"},
imper = {nil, nil, nil, {"caiga"}, {"caigamos"}, nil, {"caigan"}}
}},
{"cocer", {"cocer$"}, {
nucleo = "co",
nexo = "S", -- evitar C (epéntesis con zc)
alt = {"ue"},
part = {"cocido", "cocho{†}"}
}},
{"hacer", {"[hfj]acer$"}, {
nucleo = "a",
nexo = "S", -- evitar C (epéntesis con zc)
part = {"echo"},
ind_pres = {{"ago"}},
ind_perf = {nucleo = "i"},
ind_fut = {nucleo = "a", nexo = "#r#"},
subj_pres = {nucleo = "ag", nexo = ""},
subj_imp = {nucleo = "i"},
subj_fut = {nucleo = "i"},
cond = {nucleo = "a", nexo = "#r#"},
imper = {nil, {"az", "ace{x}"}, {"acé"}, {"aga"}, {"agamos"}, nil, {"agan"}},
}},
{"haber", {"^haber$"}, {
ind_pres = {{"he"}, {"has"}, {"has"}, {"ha", "hay{IMPERSONAL}"}, {"hemos"}, nil, {"han"}, {"hay"}},
ind_perf = {nucleo = "hub"},
ind_fut = {nucleo = "ha", nexo = "#br#"},
subj_pres = {nucleo = "hay"},
subj_imp = {nucleo = "hub"},
subj_fut = {nucleo = "hub"},
cond = {nucleo = "ha", nexo = "#br#"},
imper = {nil, {"he{†}", "habe{†}"}, {"he{†}", "habe{†}"}, {"haya{†}"}, {"hayamos{†}"}, nil, {"hayan{†}"}},
}},
{"mecer", {"^r?e?mecer$"}, {
nexo = "S", -- evitar C (epéntesis con zc)
}},
{"oler", {"^oler$"}, {
alt = {"hue"},
}},
{"volver", {"olver$"}, {
nucleo = "olv",
alt = {"ue"},
part = {"uelto"}
}},
{"placer", {"placer$"}, {
nucleo = "pla",
ind_perf = {nil, nil, nil, {"plació", "plugo"}, nil, nil, {"placieron", "pluguieron"}},
subj_imp = {nil, nil, nil, {"placiera", "placiese", "pluguiera", "pluguiese"}, nil, nil, nil},
subj_fut = {nil, nil, nil, {"placiere", "pluguiere"}, nil, nil, nil},
}},
{"poder", {"poder$"}, {
nucleo = "pod",
alt = {"ue"},
ger = {"pudiendo"},
ind_perf = {nucleo = "pud"},
ind_fut = {nucleo = "po", nexo = "#dr#"},
subj_imp = {nucleo = "pud"},
subj_fut = {nucleo = "pud"},
cond = {nucleo = "po", nexo = "#dr#"},
}},
{"poner", {"poner$"}, {
nucleo = "pon",
part = {"puesto"},
ind_pres = {{"pongo"}},
ind_perf = {nucleo = "pus"},
ind_fut = {nucleo = "pon", nexo = "#dr#"},
subj_pres = {nucleo = "pong"},
subj_imp = {nucleo = "pus"},
subj_fut = {nucleo = "pus"},
cond = {nucleo = "pon", nexo = "#dr#"},
imper = {nil, {"pon", "pone{x}"}, nil, {"ponga"}, {"pongamos"}, nil, {"pongan"}},
}},
{"proveer", {"proveer$"}, {
nucleo = "prov",
part = {"provisto", "proveído{†}"}
}},
{"querer", {"querer$"}, {
nucleo = "quer",
alt = {"ie"},
ind_perf = {nucleo = "quis"},
ind_fut = {nucleo = "que", nexo = "#rr#"},
subj_imp = {nucleo = "quis"},
subj_fut = {nucleo = "quis"},
cond = {nucleo = "que", nexo = "#rr#"},
}},
{"raer", {"^raer$"}, { -- no contraer, etc.
ind_pres = {{"raigo", "rayo"}},
subj_pres = {nucleo = {"raig", "ray"}},
imper = {nil, nil, nil, {"raiga", "raya"}, {"raigamos", "rayamos"}, nil, {"raigan", "rayan"}}
}},
{"roer", {"roer$"}, {
nucleo = "ro",
ind_pres = {{"roo", "roigo", "royo"}},
subj_pres = {nucleo = {"ro", "roig", "roy"}},
imper = {nil, nil, nil, {"roa", "roiga", "roya"}, {"roamos", "roigamos", "royamos"}, nil, {"roan", "roigan", "royan"}}
}},
{"romper", {"^romper$", "^arromper$"}, { -- no corromper, derromper, entrerromper
nucleo = "romp",
part = {"roto", "rompido{†}"}
}},
{"saber", {"saber$"}, {
nucleo = "sab",
ind_pres = {{"sé", "sabo{x}"}},
ind_perf = {nucleo = "sup"},
ind_fut = {nucleo = "sa", nexo = "#br#"},
subj_pres = {nucleo = "sep"},
subj_imp = {nucleo = "sup"},
subj_fut = {nucleo = "sup"},
cond = {nucleo = "sa", nexo = "#br#"},
imper = {nil, nil, nil, {"sepa"}, {"sepamos"}, nil, {"sepan"}}
}},
{"ser", {"^ser$"}, {
ind_pres = {{"soy"}, {"eres"}, {"sos"}, {"es"}, {"somos"}, {"sois", "ereis{†}"}, {"son"}},
ind_imp = {{"era"}, {"eras"}, {"eras"}, {"era"}, {"éramos"}, {"erais"}, {"eran"}},
ind_perf = {{"fui"}, {"fuiste"}, {"fuiste"}, {"fue"}, {"fuimos"}, {"fuisteis"}, {"fueron"}},
subj_pres = {nucleo = "se"},
subj_imp = {nucleo = "", nexo = "#fu#"}, -- no puedo poner "u" porque obtendría "fuyera"
subj_fut = {nucleo = "", nexo = "#fu#"},
imper = {nil, {"sé"}, {"sé"}, {"sea"}, {"seamos"}, nil, {"sean"}}
}},
{"seer", {"^seer$", "^eser$"}, {
prefijo = "",
nucleo = "s",
ind_pres = {{"só", "seo"}, {"sees", "siedes"}, {"sos", "sodes"}, {"siede"}, {"sedemos"}, {"seedes", "sodes"}, {"seyen", "sieden"}},
ind_imp = {{"era"}, {"eras"}, {"eras"}, {"era"}, {"éramos"}, {"érades"}, {"eran"}},
ind_perf = {{"fu", "fué"}, {"fueste", "fuste"}, {"fuestes", "fuistes"}, {"fo", "foé", "suvo"}, {"fuemos"}, {"fuestes", "fuistes"}, {"foron"}},
ind_fut = {nil, nil, {"seredes"}, nil, nil, {"seredes"}, nil},
cond = {nil, nil, {"seríades"}, nil, nil, {"seríades"}, nil},
subj_pres = {nil, nil, {"seades"}, nil, nil, {"seades"}, nil},
subj_imp = {nucleo = "", nexo = "#fu#", nil, nil, {"fuérades"}, nil, nil, {"fuérades"}, nil}, -- no puedo poner "u" porque obtendría "fuyera"
subj_fut = {nucleo = "", nexo = "#fu#", nil, nil, {"fuéredes"}, nil, nil, {"fuéredes"}, nil},
imper = {nil, {"sé"}, {"seades"}, {"sea"}, {"seamos"}, {"seades"}, {"sean"}}
}},
{"tener", {"tener$"}, {
nucleo = "ten",
alt = {"ie"},
ind_pres = {{"tengo"}},
ind_perf = {nucleo = "tuv"},
ind_fut = {nucleo = "ten", nexo = "#dr#"},
subj_pres = {nucleo = "teng"},
subj_imp = {nucleo = "tuv"},
subj_fut = {nucleo = "tuv"},
cond = {nucleo = "ten", nexo = "#dr#"},
imper = {nil, {"ten", "tiene{x}"}, nil, {"tenga"}, {"tengamos"}, nil, {"tengan"}}
}},
{"traer", {"traer$"}, {
nucleo = "tra",
ind_pres = {{"traigo"}},
ind_perf = {nucleo = "tra", nexo = "#j#"},
subj_pres = {nucleo = "traig"},
subj_imp = {nucleo = "tra", nexo = "#j#"},
subj_fut = {nucleo = "tra", nexo = "#j#"},
imper = {nil, nil, nil, {"traiga"}, {"traigamos"}, nil, {"traigan"}}
}},
{"valer", {"valer$"}, {
nucleo = "val",
ind_pres = {{"valgo"}},
ind_fut = {nucleo = "val", nexo = "#dr#"},
subj_pres = {nucleo = "valg"},
cond = {nucleo = "val", nexo = "#dr#"},
imper = {nil, nil, nil, {"valga"}, {"valgamos"}, nil, {"valgan"}}
}},
{"ver", {"^ver$"}, {
nucleo = "v",
part = {"visto"},
ind_pres = {{"veo"}},
ind_imp = {nucleo = "ve"},
subj_pres = {nucleo = "ve"},
imper = {nil, nil, {"mirá"}, {"vea"}, {"veamos"}, nil, {"vean"}}
}},
{"prever", {"antever$", "entrever$", "prever$", "^rever$", "tran?sver$"}, {
nucleo = "v",
part = {"visto"},
ind_pres = {{"veo"}, {"vés"}, nil, {"vé"}, nil, nil, {"vén"}},
ind_imp = {nucleo = "ve"},
subj_pres = {nucleo = "ve"},
imper = {nil, nil, nil, {"vea"}, {"veamos"}, nil, {"vean"}}
}},
{"yacer", {"yacer$"}, {
nucleo = "yac",
nexo = "", -- evitar C (epéntesis con zc), lo voy a agregar manual
ind_pres = {{"yazco", "yazgo", "yago"}},
subj_pres = {nucleo = {"yazc", "yazg", "yag"}},
imper = {nil, {"yace", "yaz"}, {"yacé"}, {"yazca", "yazga", "yaga"}, {"yazcamos", "yazgamos", "yagamos"}, nil, {"yazcan", "yazgan", "yagan"}}
}},
{"mover", {"mover$"}, {
alt = {"ue"},
}},
{"entender", {"entender$"}, {
alt = {"ie"},
}},
},
["ir"] = {
{"asir", {"asir$"}, {
nucleo = "as",
ind_pres = {{"asgo"}},
subj_pres = {nucleo = "asg"},
imper = {nil, nil, nil, {"asga"}, {"asgamos"}, nil, {"asgan"}}
}},
{"abrir", {"[^js]abrir$", "^abrir$"}, { -- abrir, cubrir y derivados, pero no "desabrir" ni "jabrir" (son regs.)
nucleo = "abr",
part = {"abierto"}
}},
{"abrir", {"ubrir$"}, { -- Parte 2. NOTA: no pueto tomar "br" como núcleo porque el programa piensa que es monosílabo y pone mal las tildes (cf. [[entreabrir]], [[reabrir]])
nucleo = "ubr",
part = {"ubierto"}
}},
-- para decir contemplo 4 casos:
-- 1. decir, redecir, entredecir, antedecir: lo normal, con el imperativo en "dí" (di)
-- 2. interdecir: similar a 1. pero el imperativo es interdice (no *interdí)
-- 3. bendecir, maldecir: agrego bendito, maldito al pp
-- 4. condecir, contradecir, desdecir, predecir: parto de 1 pero agrego el futuro regular que esta aceptado
{"decir", {"^decir$", "^redecir$", "^entredecir$", "^antedecir$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"dicho"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
ind_fut = {nucleo = "d", nexo=""},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
subj_fut = {nexo = "#j#"},
cond = {nucleo = "d", nexo=""},
imper = {nil, {"di", "dice{x}"}, nil, {"diga"}, {"digamos"}, nil, {"digan"}}
}},
{"interdecir", {"interdecir$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"dicho"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
ind_fut = {nucleo = "d", nexo=""},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
subj_fut = {nexo = "#j#"},
cond = {nucleo = "d", nexo=""},
imper = {nil, {"dice"}, nil, {"diga"}, {"digamos"}, nil, {"digan"}}
}},
{"bendecir", {"bendecir$", "maldecir$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"decido{PART}", "dito{ADJ}"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
subj_fut = {nexo = "#j#"},
imper = {nil, {"dice"}, nil, {"diga"}, {"digamos"}, nil, {"digan"}}
}},
{"predecir", {"decir$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"dicho"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
ind_fut = {nucleo = {"dec", "d"}, nexo=""},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
subj_fut = {nexo = "#j#"},
cond = {nucleo = {"dec", "d"}, nexo=""},
imper = {nil, {"dice", "dí{x}"}, nil, {"diga"}, {"digamos"}, nil, {"digan"}}
}},
{"erguir", {"^erguir$"}, {
nucleo = "er",
alt = {"ye-i", "i-i"},
}},
{"imprimir", {"imprimir$"}, {
nucleo = "imprim",
part = {"impreso{PART/ADJ}", "imprimido{PART}"}
}},
{"ir", {"^ir$"}, {
ger = {"yendo"},
ind_pres = {{"voy"}, {"vas"}, {"vas"}, {"va"}, {"vamos"}, {"vais"}, {"van"}},
ind_imp = {{"iba"}, {"ibas"}, {"ibas"}, {"iba"}, {"íbamos"}, {"ibais"}, {"iban"}},
ind_perf = {{"fui"}, {"fuiste"}, {"fuiste"}, {"fue"}, {"fuimos"}, {"fuisteis"}, {"fueron"}},
subj_pres = {nucleo = "vay"},
subj_imp = {nucleo = "", nexo = "#fu#"}, -- no puedo poner "u" porque obtendría "fuyera"
subj_fut = {nucleo = "", nexo = "#fu#"},
imper = {nil, {"ve", "ves{x}"}, {"andá", "i{x}"}, {"vaya"}, {"vayamos", "vamos"}, nil, {"vayan"}}
}},
{"morir", {"morir$"}, {
nucleo = "mor",
alt = {"ue-u"},
part = {"muerto"},
}},
{"pudrir", {"pudrir$"}, {
nucleo = "pudr",
part = {"podrido"}
}},
{"salir", {"salir$"}, {
nucleo = "sal",
ind_pres = {{"salgo"}},
ind_fut = {nucleo = "sal", nexo = "#dr#"},
subj_pres = {nucleo = "salg"},
cond = {nucleo = "sal", nexo = "#dr#"},
imper = {nil, {"sal", "sale{x}"}, nil, {"salga"}, {"salgamos"}, nil, {"salgan"}}
}},
{"escribir", {"^escribir$", "^reescribir$"}, {
nucleo = "escrib",
part = {"escrito"}
}},
{"inscribir", {"scribir$"}, {
nucleo = "scrib",
part = {"scrito", "scripto{ARG/URU}"}
}},
{"venir", {"venir$"}, {
nucleo = "ven",
alt = {"ie-i"},
ind_pres = {{"vengo"}},
ind_fut = {nexo = "#dr#"},
ind_perf = {nucleo = "vin"},
subj_pres = {nucleo = "veng"},
cond = {nexo = "#dr#"},
imper = {nil, {"ven", "viene{x}"}, nil, {"venga"}, {"vengamos"}, nil, {"vengan"}}
}},
{"discernir", {"discernir$"}, {
alt = {"ie"}
}},
{"sentir", {"sentir$"}, {
alt = {"ie-i"}
}},
{"podrir", {"podrir$"}, {
alt = {"u-u"},
}},
{"reunir", {"reunir$"}, {
alt = {"ú"}
}},
{"prohibir", {"prohibir$"}, {
alt = {"í"}
}},
{"rehenchir", {"rehenchir$"}, {
alt = {"í-i"}
}},
{"dormir", {"dormir$"}, {
alt = {"ue-u"}
}},
{"pedir", {"pedir$"}, { -- también ceñir (incluyo en este paradigma especificando el alt)
alt = {"i-i"}
}},
},
["ír"] = {
{"desvaír", {"desvaír$"}, { -- hay más verbos en -air? no podemos considerarlo como regla general
ind_pres = {{"desvayo"}},
subj_pres = {nucleo = "desvay"},
imper = {nil, nil, nil, {"desvaya"}, {"desvayamos"}, nil, {"desvayan"}}
}},
{"freír", {"freír$"}, {
nucleo = "fre",
part = {"frito{PART/ADJ}", "freído{PART}"},
}},
{"oír", {"oír$"}, {
nucleo = "o",
alt = {"oy"},
ger = {"oyendo"},
ind_pres = {{"oigo"}},
subj_pres = {nucleo = "oig"},
imper = {nil, nil, nil, {"oiga"}, {"oigamos"}, nil, {"oigan"}}
}},
},
}
local alt_info = {
["ar"] = {
["í"] = {"aislar", "i", "í"}, -- tb. descafeinar
["ú"] = {"aunar", "u", "ú"}, -- tb. rehusar
["ie"] = {"pensar", "e", "ie"},
["ue"] = {"contar", "ou", "ue"}, -- también jugar
["üe"] = {"agorar", "o", "üe"},
["hue"] = {"desosar", "ou", "hue"},
["ye"] = {"errar", "e", "ye"},
},
["er"] = {
["i"] = {"???", "e", "i"}, -- REVISAR: existe esto??
["ie"] = {"entender", "e", "ie"},
["ue"] = {"mover", "o", "ue"},
["hue"] = {"oler", "o", "hue"},
},
["ir"] = {
["i"] = {"???", "e", "i"}, -- REVISAR: existe esto??
["í"] = {"prohibir", "i", "í"},
["í-i"] = {"rehenchir", "e", "í", "i"},
["i-i"] = {"pedir", "e", "i", "i"},
["ie"] = {"discernir", "ei", "ie"}, -- por las dudas también la i, por inquirir
["ie-i"] = {"sentir", "ei", "ie", "i"}, -- inquirir
["u"] = {"???", "o", "u", "u"},
["ú"] = {"reunir", "u", "ú"},
["u-u"] = {"podrir", "o", "u", "u"}, -- REVISAR: existe esto??
["ue-u"] = {"dormir", "o", "ue", "u"},
["ye-i"] = {"erguir", "e", "ye", "i"},
},
["ír"] = {
["í-i"] = {"reír", "e", "í", "i"},
["oy"] = {"oír", "o", "oy", "oy"},
}
}
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo[forma].sufijo_inf or conjinfo.sufijo_inf
if sufijo_inf == "ar" and conjinfo[forma].nucleo then
sufijo_inf = "er" -- echo mano a los sufijos de la otra conjugación, más que nada aplica a verbos como andar -> ANDUViera
end
local sufijos_ = obtener_sufijos(sufijo_inf, (forma == "ind_perf" and conjinfo[forma].nucleo) and forma.."_alt" or forma)
local nucleos
if not conjinfo[forma].nucleo then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleos2
elseif forma == "part" then
nucleos = conjinfo.nucleo_inf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos1}
elseif forma == "ind_perf" then
nucleos = {conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos2, conjinfo.nucleos1}
elseif forma == "subj_imp" or forma == "subj_fut" then
local n = conjinfo.nucleos2
nucleos = {n, n, n, n, n, n, n}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleos1}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n, n}
end
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for j, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[1], sufijo_inf)
for _,nucleo in ipairs(nucleos) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, conjinfo.nucleo_inf[1])))
end
end
end
return
end
for i = YO, ELLOS do
local p = tostr[i]
if conjinfo[forma][i] then
for j, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
if forma == "subj_pres" and i == VOS then
for _,fm in ipairs(conjugado[forma..tostr[TU]]) do
insert_if_not(conjugado[forma..p], fm)
end
end
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[i], sufijo_inf)
for _,nucleo in ipairs(nucleos[i]) do
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, conjinfo.nucleo_inf[1])))
end
if forma == "subj_imp" then
local nexosufijo3, _ = combinar_nexo_sufijo(nexo, sufijos_[i+7], sufijo_inf)
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo3, conjinfo.nucleo_inf[1])))
end
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local arr = res[forma]
local t = {}
local tiempo, i = match(forma, "^(.*)(%d)$")
if not i then
tiempo = forma
i = 1
end
i = tonumber(i)
local rest_ = i < NOSOTROS and resto or resto_pl
local rest_pl_ = resto_pl
if tiempo == "imper" and adv == "no " then
tiempo = "subj_pres"
arr = fmtinfo["subj_pres"..tostr[i]]
end
for _, v in ipairs(arr) do
local hs = auxiliar[tiempo]
local v2
local rest = rest_
local rest_pl = rest_pl_
if hs then
rest = " "..v..rest
rest_pl = " "..v..rest_pl
v = hs[i]
v2 = hs[i+7] -- subjuntivo imperfecto
end
if forma == "inf" or forma == "inf_comp" then
if pron ~= "" and art ~= "" then
v = gsub(v, "([aei])r$", function (x) return agregar_tilde[x].."r" end)
end
insert(t, adv..v..pron..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..v..pron..art..f_links(rest_pl))
end
elseif forma == "ger" or forma == "ger_comp" then
local vpron = v..pron
if pron ~= "" or art ~= "" then
vpron = gsub(vpron, "^(.*)([ae])(ndo)", function(x, y, z) return x..agregar_tilde[y]..z end)
end
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..f(vpron)..art..f_links(rest_pl))
end
elseif forma == "part" then
insert(t, adv..f_links(v)..f_links(resto))
if (resto_pl ~= resto) then
insert(t, adv..f_links(v)..f_links(resto_pl))
end
elseif tiempo == "imper" and (pron ~= "" or art ~= "") then
-- tengo que correr la acentuación una sílaba para atrás, lo bueno es que no hay formas terminadas en consonante dist. de n o s
local vpron = gsub(v, "[~#]", "") -- PARCHE: quito todas las marcas de colores, ya que cuesta mucho transformar los verbos con imperativos irregulares, quedan incrustadas en el medio
-- 1. Las llanas pasan a esdrújulas
vpron = gsub(vpron,
"^([^áéíóú]-)([aeo])(h?[iuü]?h?[aeo][ns]?)$", -- si no hay consonante de separación, hay un hiato de dos vocales abiertas. OJO, no es lo mismo comenzar con [^áéíóú]- que comenzar con [^áéíóú]*
function(x, y, z) return x..agregar_tilde[y]..z end
)
vpron = gsub(vpron,
"^([^áéíóú]-)([aeoiu])(h?[iuü]?"..CONS_SALVO_H.."+u?[iuü]?[aeiou]+[ns]?)$", -- normal, con consonante de separación. OJO, no es lo mismo comenzar con [^áéíóú]- que comenzar con [^áéíóú]*
function(x, y, z) return x..agregar_tilde[y]..z end
)
-- si es un hiato con tilde, lo dejo
-- 2. Las agudas pasan a llanas, los monosílabos con tilde la pierden, SALVO LOS HIATOS CON VOCAL CERRADA (ej: reí -> reíte. embaí -> embaíte, PERO pecheá -> pecheala)
vpron = gsub(vpron,
"^([^áéíóú]*"..CONS_SALVO_H.."u?[iuü]?)([áéíóú])([ns]?)$",
function(x, y, z) return x..quitar_tilde[y]..z end
)
vpron = gsub(vpron,
"^([^áéíóú]*[aeo])([áéó])([ns]?)$",
function(x, y, z) return x..quitar_tilde[y]..z end
)
if pron == "se" then -- ajustes finales https://www.rae.es/dpd/pronombres%20personales%20%C3%A1tonos
local enc = REFLEXIVOS[i]
if enc == "nos" then -- dejémoS nos -> dejémonos
vpron = gsub(vpron, "mos$", "mo")
end
if enc == "os" then -- amaD + os -> amaos, hacED + os -> haceos, salvo idos
vpron = gsub(vpron, "([ae])d$", "%1")
vpron = gsub(vpron, "("..LETRA..")[ií]d$", "%1í") -- aseguro q no sea "id" a secas
end
if art ~= "" then -- Si tengo pronombre y artículo, la palabra tiene que quedar esdrújula o sobreesdrújula (dársela -> dátela)
vpron = gsub(vpron,
"^([^áéíóú]*)([aeiou])([^áéíóú]-)$",
function(x, y, z) return x..agregar_tilde[y]..z end
)
end
vpron = vpron..enc
end
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
else -- si es imperativo y el pronombre y artículo están ambos vacíos, es lo mismo anteponerlos que posponerlos
local pronart = pron == "se" and REFLEXIVOS[i].." " or ""
pronart = art ~= "" and pronart..art.." " or pronart
insert(t, adv..pronart..f_links(v)..f_links(rest))
if v2 then
insert(t, adv..pronart..f_links(v2)..f_links(rest))
end
end
end
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["impersonal"] = {},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["indirecto"] = {tipo = "bool"},
["alt"] = {lista = true},
["nucleopres1"] = {lista = true},
["nucleopret3"] = {lista = true},
["núcleopres1"] = {alias_de = "nucleopres1"},
["núcleopret3"] = {alias_de = "nucleopret3"},
["paradigma"] = {lista = true},
["nota"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
if args["indirecto"] then
generar_traza("indirecto")
end
local adv, r1 = match(tit, "^([sSnN][ío]"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiáéí]r)(s?e?)(l?[aeo]?s?)(.-)$")
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[ío]?"..ESPACIO.."?"..LETRA.."*[aeiáéí]rs?e?l?[aeo]?s?(.-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
v = gsub(v, "^(%S*)ár$", "%1ar") -- pronominales
v = gsub(v, "^(%S*)ér$", "%1er") -- pronominales
v = gsub(v, "^(%S*[^aeo])ír$", "%1ir") -- grafías anticuadas
local sufijo_inf = match(v, "[aeií]r$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
for N = 1, math.max(1,
maxindex(args["paradigma"]),
maxindex(args["alt"]),
maxindex(args["nucleopres1"]),
maxindex(args["nucleopret3"])) do
local conjinfo = {}
if find(v, "iar$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then
error("Especifique el (los) paradigma(s) para los verbos en -iar (anunciar, enviar, culiar)")
end
local encontre_irreg = false
for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
conjinfo = deepcopy(p[3])
es_irregular = true
paradigmas_reconocidos[p[1]] = true
encontre_irreg = true
break
end
end
if encontre_irreg then
break
end
end
local encontre_reg = false
for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
local vacio = true
for k, v in pairs(p[3]) do
vacio = false
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
if vacio then
paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]]
end
encontre_reg = true
break
end
end
if encontre_reg then
break
end
end
assert(encontre_reg, "paradigma no reconocido")
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
if not conjinfo.nucleo_inf then
conjinfo.nucleo_inf = sub(v, 1, len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
conjinfo.prefijo = ""
elseif not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, len(v) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
if not conjinfo.prefijo then -- caso en el que cambié el núcleo
conjinfo.prefijo = ""
end
conjinfo.nucleos1 = {}
conjinfo.nucleos2 = {}
conjinfo.alt = conjinfo.alt or {}
if args["alt"][N] then
insert_if_not(conjinfo.alt, args["alt"][N])
end
for i, a in ipairs(conjinfo.alt) do
if a ~= "REG" then
local n1, n2
local info = alt_info[sufijo_inf][a]
assert(info, "Valor de alt no reconocido: "..a)
local sust
n1, sust = gsubb(conjinfo.nucleo_inf, "^(.*)["..info[2].."](.-)$", "%1#"..info[3].."#%2")
if info[4] then
n2, sust = gsubb(conjinfo.nucleo_inf, "^(.*)["..info[2].."](.-)$", "%1#"..info[4].."#%2")
end
assert(sust, "Alternancia vocálica no reconocida")
insert_if_not(conjinfo.nucleos1, n1)
insert_if_not(conjinfo.nucleos2, n2)
paradigmas_reconocidos[info[1]] = true
es_irregular = true -- si tengo el alt será siemrpe irregular, indistintamente de si el paradigma del mismo índice es regular
else
insert_if_not(conjinfo.nucleos1, conjinfo.nucleo_inf)
end
end
if args["nucleopres1"][N] then
for k, v in pairs(alt_info[sufijo_inf]) do
if args["nucleopret3"][N] then
if v[4] then
if gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[3]) == gsub1(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1")
and gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[4]) == gsub1(args["nucleopret3"][N], "^.*#([^#]+)#.*$", "%1")
then
es_irregular = true
paradigmas_reconocidos[v[1]] = true
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
insert_if_not(conjinfo.nucleos2, args["nucleopret3"][N])
break
end
end
else
if not v[4] then
if gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[3]) == gsub1(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1")
then
es_irregular = true
paradigmas_reconocidos[v[1]] = true
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
break
end
end
end
end
end
if not conjinfo.nucleos1[1] then
conjinfo.nucleos1[1] = conjinfo.nucleo_inf
end
if not conjinfo.nucleos2[1] then
conjinfo.nucleos2[1] = conjinfo.nucleo_inf
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if (find(e, 'PART') or not find(e, 'ADJ')) and not find(e, "†") then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, resto=resto, resto_pl=resto_pl,impers=args["impersonal"]}
for _,s in ipairs(tostr) do
fmtinfo["subj_pres"..s] = deepcopy(resultante["subj_pres"..s])
end
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local es_impersonal = args["impersonal"]
local es_indirecto = args["indirecto"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, es_impersonal, es_indirecto)
end)
local impers = args["impersonal"]
local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper
if impers == "3" then
if args["indirecto"] then
fila_pronombres_ind = {"", "a mí me, a ti te, a vos te, a él le, a ella le, a usted le, a nosotros nos, a vosotros os, a ustedes les, a ellos les", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "a mí me, a ti te, a vos te, a él le, a ella le, a usted le, a nosotros nos, a vosotros os, a ustedes les, a ellos les", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que a mí me, que a ti te, que a vos te, que a él le, que a ella le, que a usted le, que a nosotros nos, que a vosotros os, que a ustedes les, que a ellos les", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(ello)", color=COLOR_IMPER, header=true, class="pc"}
else
fila_pronombres_ind = {"", "(ello)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(ello)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que ello)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(ello)", color=COLOR_IMPER, header=true, class="pc"}
end
cs = 2
elseif impers == "36" then
fila_pronombres_ind = {"", "(ello)", "(ellos)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(ello)", "(ellos)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que ello)", "(que ellos)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(ello)", "(ellos)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_ind = {"", "yo", "tú", "vos", "él, ella, usted", "nosotros", "vosotros", "ustedes, ellos", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "yo", "tú", "vos", "él, ella, usted", "nosotros", "vosotros", "ustedes, ellos", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que yo", "que tú", "que vos", "que él, que ella, que usted", "que nosotros", "que vosotros", "que ustedes, que ellos", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tú)", "(vos)", "(usted)", "(nosotros)", "(vosotros)", "(ustedes)", color=COLOR_IMPER, header=true, class="pc"}
cs = 8
mostrar_imper = true
end
cs1 = math.floor(cs / 2)
cs2 = cs - cs1
local t = {}
t[1] = {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true}
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
else
resultante.inf.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.part.colspan = cs1-1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."4"]
elseif impers == "36" then
return resultante[tiempo.."4"], resultante[tiempo.."7"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"], resultante[tiempo.."7"]
end
t[5] = {{"Formas personales", colspan=cs}, color=COLOR_H, header=true}
t[6] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true}
t[7] = fila_pronombres_ind
t[8] = {{"Presente", color=COLOR_IND, header=true}, ic("ind_pres")}
t[9] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")}
t[10] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("ind_perf")}
t[11] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")}
t[12] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("ind_perf_comp")}
t[13] = {{"Futuro", color=COLOR_IND, header=true}, ic("ind_fut")}
t[14] = {{"Futuro compuesto", color=COLOR_IND, header=true}, ic("ind_fut_comp")}
t[15] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("ind_anter")}
t[16] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true}
t[17] = fila_pronombres_cond
t[18] = {{"Condicional simple", color=COLOR_COND, header=true}, ic("cond")}
t[19] = {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("cond_comp")}
t[20] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true}
t[21] = fila_pronombres_subj
t[22] = {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")}
t[23] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")}
t[24] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")}
t[25] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")}
t[26] = {{f("Futuro{†}"), color=COLOR_SUBJ, header=true}, ic("subj_fut")}
t[27] = {{f("Futuro compuesto{†}"), color=COLOR_SUBJ, header=true}, ic("subj_fut_comp")}
t[28] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true}
t[29] = fila_pronombres_imper
if mostrar_imper then
t[30] = {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")}
else
t[30] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}}
end
t[31] = {{f("Leyenda: † arcaico, x no normativo, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}}
args["nota"] = args["nota"] or ""
if args["impersonal"] == "utc3" then
args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "umc3" then
args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "utc36" then
args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
if args["impersonal"] == "umc36" then
args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
t[32] = {{args["nota"] and args["nota"] or "", colspan=cs}}
local paradigmas_t = {}
local cats = {}
if es_irregular then
insert(cats, "ES:Verbos irregulares")
-- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar
paradigmas_reconocidos["anunciar"] = nil
paradigmas_reconocidos["amar"] = nil
paradigmas_reconocidos["temer"] = nil
paradigmas_reconocidos["partir"] = nil
paradigmas_reconocidos["embaír"] = nil
else
insert(cats, "ES:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "ES:Verbos del paradigma "..p)
end
impers = impers or ""
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "ES:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "ES:Verbos terciopersonales")
end
if find(impers, "^ind") then
insert(cats, "ES:Verbos de objeto indirecto")
end
if defectivo then
insert(cats, "ES:Verbos defectivos")
end
if sufijo_inf == "ar" then
insert(cats, "ES:Verbos de la primera conjugación")
elseif sufijo_inf == "er" then
insert(cats, "ES:Verbos de la segunda conjugación")
else -- será ir o ír, ya fue chequeado antes
insert(cats, "ES:Verbos de la tercera conjugación")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")",
t,
ns == 0 and cats or {})
end
return export
k1ufr7ftaoeaolcn6sbu6nwwyih10ql
Plantilla:es.sust/doc
10
1048527
6117330
5705343
2026-06-06T17:17:51Z
TMCbot
164594
.
6117330
wikitext
text/x-wiki
{{subpágina documentación de plantilla}}
<!-- POR FAVOR, AÑADE LAS CATEGORÍAS AL FINAL DE ESTA PÁGINA. -->
<!-- Si te dispones a documentar una plantilla de mantenimiento, por favor considera adoptar el formato de [[Wikipedia:Documentación de plantillas de mantenimiento]]-->
== Uso ==
Esta es la nueva plantilla para flexionar '''sustantivos''' del español. Reemplaza a todas las anteriores que se usaron para el español.
TLDR: Generalmente, o bien no es necesario especificar nada, o bien es necesario invocarla con {{epc|es.sust|mf}} en el primer parámetro si el sustantivo es masculino y femenino. Para la plantilla {{ep|es.adj}}, este parámetro se activa por defecto para que genere ambas formas, mientras que el resto funciona igual a esta plantilla.
Los sustantivos se flexionan de acuerdo a la norma establecida por el Diccionario Panhispánico de Dudas.<ref>{{DPD|plural}}</ref>
=== Sustantivos y adjetivos irregulares ===
:* '''Sustantivos masculinos y femeninos''': Invóquese con el valor <code>mf</code> en el primer parámetro
:* '''Sustantivos y adjetivos invariantes, o solo en singular o plural''': En estos casos debe usarse el primer parámetro:
::* con {{epc|es.sust|n}} o {{epc|es.sust|ng}} (no género) se especifica "mf" pero se prohíbe explícitamente flexionar en género, muy útil en adjetivos excepcionales que terminan en -o o a veces en -e pero que no flexionan a -a.
::* con {{epc|es.sust|inv}}, la palabra es invariante tanto en género como en número.
::* con {{epc|es.sust|s}} o con {{epc|es.sust|p}}, la palabra existe solo en singular o solo en plural.
::* con {{epc|es.sust|irreg}}, la palabra flexiona de forma irregular (ver Sustantivos y adjetivos con femeninos o plurales irregulares).
:* '''Plural con -s''': Por defecto, el módulo intentará formar el plural con -es en caso de ambigüedad. Para prohibir el plural con -es, debe invocarse usando el parámetro no posicional {{parámetro|s}}, o {{parámetro|forzars}}, es decir <code><nowiki>{{es.sust|s=s}}</nowiki></code> o <code><nowiki>{{es.sust|forzars=s}}</nowiki></code>. Ejemplo en [[menú]], [[vermú]] o [[jersey]].
:* '''Comparativos y superlativos''': Se puede especificar cada uno de los comparativos y superlativos con los parámetros de lista {{parámetro|comparativo}} y {{parámetro|superlativo}}. Ver ejemplo en [[bueno]].
:* '''Sustantivos y adjetivos con femeninos o plurales irregulares''': Las palabras que no se ajustan a las reglas del DPD deberán especificarse manualmente con los parámetros de lista {{parámetro|p}} (plural), {{parámetro|f}} (femenino), {{parámetro|fp}} (femenino plural). Por defecto, el segundo, tercer y cuarto parámetro posicional de la plantilla están asociados con {{parámetro|p1}}, {{parámetro|f1}}, {{parámetro|fp1}}. Ver ejemplos en [[líder]] o [[actor]].
:* '''Notas al pie''': Se puede agregar una nota al pie con el parámetro {{parámetro|nota}}.
=== Parámetros ===
{| class="wikitable"
|+Parámetros
!Parámetro
!Función
!Tipo
!Valores posibles
|-
|{{parámetro|1}}
|Tipo de flexión en el sustantivo o adjetivo.
|Lista de valores
|ninguno (por defecto), mf (masculino y femenino), ng (sin marca de género), inv (invariante), s (singularia tantum), p (pluralia tantum), irreg (sufijo completamente irregular)
|-
|{{parámetro|2}}
|Alias para {{parámetro|p1}}
|
|
|-
|{{parámetro|3}}
|Alias para {{parámetro|f1}}
|
|
|-
|{{parámetro|4}}
|Alias para {{parámetro|fp1}}
|
|
|-
|{{parámetro|s}} ({{parámetro|forzars}}, {{parámetro|noes}})
|Prohibir el plural con -es
|booleano
|n (no, por defecto), s (sí)
|-
|{{parámetro|p}} ({{parámetro|p2}}, {{parámetro|p3}}, etc.)
|Plurales (masculinos) irregulares
|Libre
|especificar el plural
|-
|{{parámetro|f}} ({{parámetro|f2}}, {{parámetro|f3}}, etc.)
|Femeninos irregulares
|Libre
|especificar el femenino
|-
|{{parámetro|fp}} ({{parámetro|fp2}}, {{parámetro|fp3}}, etc.)
|Femeninos plurales irregulares
|Libre
|especificar el femenino en plural
|-
|{{parámetro|comp}} ({{parámetro|comp2}}, {{parámetro|comp3}}, etc.)
|Comparativo
|Libre
|especificar el comparativo
|-
|{{parámetro|sup}} ({{parámetro|sup2}}, {{parámetro|sup3}}, etc.)
|Superlativo
|Libre
|especificar el superlativo
|-
|{{parámetro|cop}}
|Si la estructura es copulativa; '''obligatorio especificarlo en las locuciones que tienen plural, si no lo tiene o es invariante especificarlo con el primer parámetro'''. Ejemplo de estructura copulativa: [[peso molecular]]. Ejemplo de estructura no copulativa: [[año luz]].
|booleano
|n (no), s (sí)
|-
|{{parámetro|nota}}
|Nota
|Libre
|especificar una nota al pie
|}
=== Categorías relacionadas ===
* [[:Categoría:ES:Plantillas de flexión]]
=== Véase también ===
* {{ep|es.adj}}
* {{ep|es.v}}
== Referencias ==
<references />
<includeonly><!--
++++ POR FAVOR, AÑADE LAS CATEGORÍAS DEBAJO DE ESTA LÍNEA, DENTRO DE LAS ETIQUETAS INCLUDEONLY, GRACIAS. -->
[[Categoría:ES:Plantillas de flexión]]
</includeonly>
5032nl7oz2l25xlq4c4pn3pz9tmtand
chalote
0
1048681
6117401
5688251
2026-06-07T05:25:56Z
Apisite
115465
/* Traducciones */ + Volapük
6117401
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf|v=echalote|v2=chalota|v3=ascalonia|v4=escalona|v5=escalonia|v6=escaloña}}
=== Etimología ===
{{etimología|fr|échalote}}, {{etim|frm|eschaloigne}}, {{etim|la-vul|*escalonia}}, {{etim|la|ascalonia}}, por [[Ascalón]], ciudad costera del reino de Israel.
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1 {{csem|plantas|verduras}}: (''Allium ascalonium'') Ajo chalote, planta perenne de la familia de las Liliáceas, con tallo de tres a cinco dm de altura, hojas finas, alesnadas y tan largas como el tallo; flores moradas y muchos bulbos, agregados como en el ajo común, blancos por dentro y rojizos por fuera. Es originaria de Asia, se cultiva en las huertas y se emplea como condimento.
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{t|en|t1=shallot}}
{{t|vo|t1=jalot}}
{{trad-abajo}}
== Referencias y notas ==
<references />
dcohq0myovmzqi4piwcw6rxkfyc5tmh
6117402
6117401
2026-06-07T05:27:40Z
Apisite
115465
6117402
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf|v=echalote|v2=chalota|v3=ascalonia|v4=escalona|v5=escalonia|v6=escaloña}}
=== Etimología ===
{{etimología|fr|échalote}}, {{etim|frm|eschaloigne}}, {{etim|la-vul|*escalonia}}, {{etim|la|ascalonia}}, por [[Ascalón]], ciudad costera del reino de Israel.
==== {{sustantivo masculino|es}} ====
{{es.sust}}
;1 {{csem|plantas|verduras}}: (''Allium ascalonium'') Ajo chalote, planta perenne de la familia de las Liliáceas, con tallo de tres a cinco dm de altura, hojas finas, alesnadas y tan largas como el tallo; flores moradas y muchos bulbos, agregados como en el ajo común, blancos por dentro y rojizos por fuera. Es originaria de Asia, se cultiva en las huertas y se emplea como condimento.
==== Véase también ====
{{w}}
==== Traducciones ====
{{trad-arriba}}
{{t|de|t1=Schalotte|g1=f}}
{{t|en|t1=shallot}}
{{t|vo|t1=jalot}}
{{trad-abajo}}
== Referencias y notas ==
<references />
6nvv459k1ro09b9x8k2gogj0jn7aiyq
Módulo:flex/it
828
1055180
6117314
6076997
2026-06-06T16:46:06Z
TMCbot
164594
.
6117314
Scribunto
text/plain
-- Módulo para flexión de sustantivos, adjetivos y verbos
-- Autor: Tmagc
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local max = math.max
local m_bool = require("Módulo:sí-no")
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local match = m_str.match
local len = m_str.len
local sub = m_str.sub
local gsplit = m_str.gsplit
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local vocal = "aeiouAEIOU"
local vocal_tildada = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ"
local vocales = vocal .. vocal_tildada
local consonantes = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"
local V = "[" .. vocales .. "]"
local C = "[" .. consonantes .. "]"
local espacios = "%-‐%s"
local guion = "%-"
local ESPACIO = "["..espacios.."]"
local LETRA = "[^"..espacios.."]"
local quitar_tilde =
{
["à"] = "a",
["è"] = "e",
["ì"] = "i",
["ò"] = "o",
["ù"] = "u",
["á"] = "a",
["é"] = "e",
["í"] = "i",
["ó"] = "o",
["ú"] = "u",
["a"] = "a",
["e"] = "e",
["i"] = "i",
["o"] = "o",
["u"] = "u",
["À"] = "A",
["È"] = "E",
["Ì"] = "I",
["Ò"] = "O",
["Ù"] = "U",
["Á"] = "A",
["É"] = "E",
["Í"] = "I",
["Ó"] = "O",
["Ú"] = "U",
["A"] = "A",
["E"] = "E",
["I"] = "I",
["O"] = "O",
["U"] = "U",
}
local function try(p, nexo, m, pl, f, fpl, g, h)
if h == true and not find(pl, "^h") then
pl = "#h"..pl.."#"
elseif h == false and find(pl, "^h") then
pl = "#"..sub(pl, 2).."#"
end
if g == "m" or g == "mf" then
local r, n, mascu
r, n, mascu = match(p, "^(.-)("..nexo..")("..m..")$")
if n then
if type(n) ~= "string" then
n = ""
end
r = gsub(r, "["..vocal_tildada.."]", quitar_tilde) -- quito tildes para que genere los enlaces correctos
n = gsub(n, "["..vocal_tildada.."]", quitar_tilde)
if not pl then
return {m={r.."~"..n..mascu.."~"}, p={}, f={}, fp={}}
elseif g == "mf" and (f ~= m or fpl ~= pl) then
return {m={r.."~"..n..mascu.."~"}, p={r.."~"..n..pl.."~"}, f={r.."~"..n..f.."~"}, fp={r.."~"..n..fpl.."~"}}
else -- g == m
return {m={r.."~"..n..mascu.."~"}, p={r.."~"..n..pl.."~"}, f={}, fp={}}
end
end
else -- g == "f"
local r, n, feme
r, n, feme = match(p, "^(.-)("..nexo..")("..f..")$")
if n then
if type(n) ~= "string" then
n = ""
end
r = gsub(r, "["..vocal_tildada.."]", quitar_tilde) -- quito tildes para que genere los enlaces correctos
n = gsub(n, "["..vocal_tildada.."]", quitar_tilde)
if not fpl then
return {m={r.."~"..n..feme.."~"}, p={}, f={}, fp={}}
else
return {m={r.."~"..n..feme.."~"}, p={r.."~"..n..fpl.."~"}, f={}, fp={}}
end
end
end
return nil
end
-- https://www.treccani.it/enciclopedia/plurale-dei-nomi_(La-grammatica-italiana)/
-- https://www.lagrammaticaitaliana.it/it/corsi/1/grammatica/lezioni/59/formazione-del-plurale
local function flexionar_palabra(p, g, h)
local changed = try(p, "ist", "a", "i", "a", "e", g, nil) or
try(p, "ì", "o", "i", "a", "e", g, nil) or -- addio / addii, pendio / pendii, zio / zii, si la i está acentuada hace plural con i doble
try(p, "i", "o", "", "a", "e", g, nil) or
try(p, V.."fug", "o", "hi", "a", "he", g, h) or -- -fugo, es un caso particular de -co/-go, en este caso siempre es plural con ghi
try(p, V.."fag", "o", "i", "a", "he", g, h) or -- -fago, es un caso particular de -co/-go, el tipo de plural depende de si es persona u objeto
try(p, "olog", "o", "i", "a", "he", g, h) or -- -ologo, es un caso particular de -co/-go asumo que refiere a una persona
try(p, V.."log", "o", "hi", "a", "he", g, h) or -- -logo, para el resto de palabras en -logo asumo que son objetos
try(p, "iac", "o", "i", "a", "he", g, h) or -- -iaco, es un caso particular de -co/-go pero si está este sufijo asumo que es esdrújula
try(p, V..C.."+ic", "o", "i", "a", "he", g, h) or -- -ico (trisílaba), es un caso particular de -co/-go pero si está este sufijo asumo que es esdrújula
try(p, "["..vocal_tildada.."][iu]?"..C.."?[cg]", "o", "hi", "a", "he", g, h) or -- -co/-go (llana)
try(p, "["..vocal_tildada.."][^"..vocal_tildada.."]+[cg]", "o", "i", "a", "he", g, h) or -- -co/-go (esdrújula)
try(p, "[cg]", "o", "hi", "a", "he", g, h) or -- -co/-go (llana)
try(p, "[cg]", "a", "hi", "a", "he", g, h) or
try(p, "[cg]ì", "a", "e", "a", "e", g, nil) or
try(p, V.."[cg]", "ia", "i", "ia", "ie", g, nil) or
try(p, C.."[cg]", "ia", "i", "ia", "e", g, nil) or
try(p, "", "NO", "NO", "logia", "logie", g, nil) or
try(p, "", "tore", "tori", "trice", "trici", g, nil) or
try(p, "", "o", "i", "a", "e", g, nil) or
try(p, "", "o", "i", "o", "e", g, nil) or
try(p, "", "a", "i", "a", "e", g, nil) or
try(p, "", "one", "oni", "ona", "one", g, nil) or
try(p, "", "e", "i", "e", "i", g, nil) or
try(p, "", "["..vocal_tildada.."]", nil, "["..vocal_tildada.."]", nil, g, nil) or
try(p, C, "", nil, "", nil, g, nil)
if g == "m" or g == "f" or g == "mf" or g == "ng" then
assert(changed, "No se pudo determinar la flexión de la palabra")
else
changed = changed or {m={p}, p={}, f={}, fp={}}
end
return changed
end
local function flexion_sust_adj(palabras, g, h, copulativa)
local a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
if b then
if copulativa == nil then
error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"")
end
local flex1 = flexionar_palabra(a, g, h)
local flex2 = copulativa and flexionar_palabra(b, g, h) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto = match(palabras, "^("..guion.."?"..LETRA.."+)(.-)$")
local flex = flexionar_palabra(p, g, h)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
if not args["ayuda"] then
args["ayuda"] = title
end
local enc
if modo then
if find(modo, "^inv") then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
end
local cop -- = modo == "irreg" and false or args["cop"] falla...
if modo == "irreg" then
cop = false
else
cop = args["cop"]
end
local flex_ = flexion_sust_adj(args["ayuda"], modo, args["h"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." regulares")
elseif find(args["ayuda"], LETRA..ESPACIO..LETRA) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["n"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {alias_de = "ayuda"},
["ayuda"] = {},
["h"] = {tipo = "bool"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["mpl"] = {alias_de = "p"},
["pl"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["fem"] = {alias_de = "f"},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["fempl"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local valido = {
["m"] = true,
["f"] = true,
["mf"] = true,
["n"] = true,
["ng"] = true,
["inv"] = true,
["s"] = true,
["p"] = true,
["irreg"] = true
}
assert(valido[args[1]], "Especifique el género del sustantivo en el primer parámetro: m, f, mf, ng, inv, s, p, irreg")
return formatear_sust_adj(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "IT:Locuciones sustantivas" or "IT:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {alias_de = "ayuda"},
["ayuda"] = {},
["h"] = {tipo = "bool"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["mpl"] = {alias_de = "p"},
["pl"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["fem"] = {alias_de = "f"},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["fempl"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
args[1] = args[1] or "mf"
return formatear_sust_adj(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "IT:Locuciones adjetivas" or "IT:Adjetivos")
end
local IO, TU, LUI, NOI, VOI, LORO = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"io", "tu", "lui, lei", "noi", "voi", "loro, essi, esse"}
local PRONOMBRES_SUBJ = {"che io", "che tu", "che lui, che lei", "che noi", "che voi", "che loro, che essi"}
local PRONOMBRES_IMP = {"-", "(tu)", "(Lei)", "(noi)", "(voi)", "-"}
local IMPERSONALES = {"", "", "(esso)", "", "", "(essi)"}
local IMPERSONALES_SUBJ = {"", "", "(che esso)", "", "", "(che essi)"}
local REFLEXIVOS = {"mi", "ti", "si", "ci", "vi", "si"}
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers and impers ~= "" then
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local formas_no_personales = {
["ger"] = true,
["part"] = true,
["part_pres"] = true,
["inf"] = true,
}
local formas_personales = {
["ind_pres"] = true,
["ind_imp"] = true,
["perf"] = true,
["fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["perf_comp"] = true,
["ind_pluperf"] = true,
["anter"] = true,
["fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local sufijos = {
["are"] = {
["ger"] = {"ando"},
["part"] = {"ato"},
["part_alt"] = {"o"},
["part_pres"] = {"ante"},
["ind_pres"] = {"o", "i", "a", "iamo", "ate", "ano"},
["ind_imp"] = {"avo", "avi", "ava", "avamo", "avate", "avano"},
["perf"] = {"ai", "asti", "ò", "ammo", "aste", "arono"},
["perf_alt"] = {"i", "esti", "e", "emmo", "este", "ero"},
["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"},
["fut_dare"] = {"arò", "arai", "arà", "aremo", "arete", "aranno"},
["subj_pres"] = {"i", "i", "i", "iamo", "iate", "ino"},
["subj_imp"] = {"assi", "assi", "asse", "assimo", "aste", "assero"},
["subj_imp_alt"] = {"essi", "essi", "esse", "essimo", "este", "essero"},
["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"},
["cond_dare"] = {"arei", "aresti", "arebbe", "aremmo", "areste", "arebbero"},
["imper"] = {"-", "a", "i", "iamo", "ate", "ino"},
["imper_alt"] = {"-", "a", "i", "iamo", "iate", "ino"}
},
["ere"] = {
["ger"] = {"endo"},
["part"] = {"uto"},
["part_alt"] = {"o"},
["part_pres"] = {"ente"},
["ind_pres"] = {"o", "i", "e", "iamo", "ete", "ono"},
["ind_pres_mpiere"] = {"o", "", "e", "amo", "ite", "ono"},
["ind_imp"] = {"evo", "evi", "eva", "evamo", "evate", "evano"},
["perf"] = {"ei", "esti", "é", "emmo", "este", "erono",
"etti", nil, "ette", nil, nil, "ettero"},
["perf_alt"] = {"i", "esti", "e", "emmo", "este", "ero"},
["perf_plaudere"] = {"ii", "isti", "ì", "immo", "iste", "irono"},
["fut"] = {"erò", "erai", "erà", "eremo", "erete", "eranno"},
["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"},
["subj_imp"] = {"essi", "essi", "esse", "essimo", "este", "essero"},
["cond"] = {"erei", "eresti", "erebbe", "eremmo", "ereste", "erebbero"},
["imper"] = {"-", "i", "a", "iamo", "ete", "ano"},
["imper_alt"] = {"-", "i", "a", "iamo", "iate", "ano"}
},
["ire"] = {
["ger"] = {"endo"},
["part"] = {"ito"},
["part_alt"] = {"o"},
["part_pres"] = {"ente"},
["ind_pres"] = {"o", "i", "e", "iamo", "ite", "ono"},
["ind_imp"] = {"ivo", "ivi", "iva", "ivamo", "ivate", "ivano"},
["perf"] = {"ii", "isti", "ì", "immo", "iste", "irono"},
["perf_alt"] = {"i", "isti", "i", "immo", "iste", "iro"},
["fut"] = {"irò", "irai", "irà", "iremo", "irete", "iranno"},
["subj_pres"] = {"a", "a", "a", "iamo", "iate", "ano"},
["subj_imp"] = {"issi", "issi", "isse", "issimo", "iste", "issero"},
["cond"] = {"irei", "iresti", "irebbe", "iremmo", "ireste", "irebbero"},
["imper"] = {"-", "i", "a", "iamo", "ite", "ano"},
["imper_alt"] = {"-", "i", "a", "iamo", "ite", "ano"}
},
["arre"] = {
["ger"] = {"aendo"},
["part"] = {"atto"},
["part_pres"] = {"aente"},
["ind_pres"] = {"aggo", "ai", "ae", "aiamo", "aete", "aggono"},
["ind_imp"] = {"aevo", "aevi", "aeva", "aevamo", "aevate", "aevano"},
["perf"] = {"assi", "aesti", "asse", "aemmo", "aeste", "assero"},
["fut"] = {"arrò", "arrai", "arrà", "arremo", "arrete", "arranno"},
["subj_pres"] = {"agga", "agga", "agga", "aiamo", "aiate", "aggano"},
["subj_imp"] = {"aessi", "aessi", "aesse", "aessimo", "aeste", "aessero"},
["cond"] = {"arrei", "arresti", "arrebbe", "arremmo", "arreste", "arrebbero"},
["imper"] = {"-", "ai", "agga", "aiamo", "aete", "aggano"}
},
["orre"] = {
["ger"] = {"onendo"},
["part"] = {"osto"},
["part_pres"] = {"onente"},
["ind_pres"] = {"ongo", "oni", "one", "oniamo", "onete", "ongono"},
["ind_imp"] = {"onevo", "onevi", "oneva", "onevamo", "onevate", "onevano"},
["perf"] = {"osi", "onesti", "ose", "onemmo", "oneste", "osero"},
["fut"] = {"orrò", "orrai", "orrà", "orremo", "orrete", "orranno"},
["subj_pres"] = {"onga", "onga", "onga", "oniamo", "oniate", "ongano"},
["subj_imp"] = {"onessi", "onessi", "onesse", "onessimo", "oneste", "onessero"},
["cond"] = {"orrei", "orresti", "orrebbe", "orremmo", "orreste", "orrebbero"},
["imper"] = {"-", "oni", "onga", "oniamo", "oniate", "ongano"}
},
["urre"] = {
["ger"] = {"ucendo"},
["part"] = {"otto"},
["part_pres"] = {"ucente"},
["ind_pres"] = {"uco", "uci", "uce", "uciamo", "ucete", "ucono"},
["ind_imp"] = {"ucevo", "ucevi", "uceva", "ucevamo", "ucevate", "ucevano"},
["perf"] = {"ussi", "ucesti", "usse", "ucemmo", "uceste", "ussero"},
["fut"] = {"urrò", "urrai", "urrà", "urremo", "urrete", "urranno"},
["subj_pres"] = {"uca", "uca", "uca", "uciamo", "uciate", "ucano"},
["subj_imp"] = {"ucessi", "ucessi", "ucesse", "ucessimo", "uceste", "ucessero"},
["cond"] = {"urrei", "urresti", "urrebbe", "urremmo", "urreste", "urrebbero"},
["imper"] = {"-", "uci", "uca", "uciamo", "ucete", "ucano"}
}
}
local auxiliar = {
["essere"] = {
["inf_comp"] = {"essere"},
["ger_comp"] = {"essendo"},
["perf_comp"] = {"sono", "sei", "è", "siamo", "siete", "sono"},
["ind_pluperf"] = {"ero", "eri", "era", "eravamo", "eravate", "erano"},
["anter"] = {"fui", "fosti", "fu", "fummo", "foste", "furono"},
["fut_comp"] = {"sarò", "sarai", "sarà", "saremo", "sarete", "saranno"},
["cond_comp"] = {"sarei", "saresti", "sarebbe", "saremmo", "sareste", "sarebbero"},
["subj_perf"] = {"sia", "sia", "sia", "siamo", "siate", "siano"},
["subj_pluperf"] = {"fossi", "fossi", "fosse", "fossimo", "foste", "fossero"},
},
["avere"] = {
["inf_comp"] = {"avere"},
["ger_comp"] = {"avendo"},
["perf_comp"] = {"ho", "hai", "ha", "abbiamo", "avete", "hanno"},
["ind_pluperf"] = {"avevo", "avevi", "aveva", "avevamo", "avevate", "avevano"},
["anter"] = {"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero"},
["fut_comp"] = {"avrò", "avrai", "avrà", "avremo", "avrete", "avranno"},
["cond_comp"] = {"avrei", "avresti", "avrebbe", "avremmo", "avreste", "avrebbero"},
["subj_perf"] = {"abbia", "abbia", "abbia", "abbiamo", "abbiate", "abbiano"},
["subj_pluperf"] = {"avessi", "avessi", "avesse", "avessimo", "aveste", "avessero"},
}
}
local function combinar_nucleo_nexosufijo(nucleo, nexosufijo)
if find(nucleo, "[bdfgkprtv]r#$") and find(nexosufijo, "^"..V.."r") then
return nucleo..sub(nexosufijo, 3)
end
if (nucleo == "empi" or nucleo == "mpi" or nucleo == "gli") and find(nexosufijo, "^i") then
return nucleo..sub(nexosufijo, 2)
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
return prefijo..nucleonexosufijo
end
local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf)
if not nexo then
return sufijo
end
if find(sufijo, "^[ei]") then
if nexo == "c" then
return "~ch~"..sufijo
end
if nexo == "g" then
return "~gh~"..sufijo
end
if nexo == "ci" then
return "~c~"..sufijo
end
if nexo == "gi" then
return "~g~"..sufijo
end
end
if find(sufijo, "^i") then
if nexo == "i" then
return sufijo
end
end
return nexo .. sufijo
end
local paradigmas_regulares = {
["are"] = {
{"bruciare", {"ciare$"}, {
nexo = "ci"
}},
{"galleggiare", {"giare$"}, {
nexo = "gi"
}},
{"asciugare", {"gare$"}, {
nexo = "g"
}},
{"giocare", {"care$"}, {
nexo = "c"
}},
{"abbaiare", {"iare$"}, {
nexo = "i"
}},
{"avviare", {"iare$"}, {
}},
{"amare", {"are$"}, {
}},
},
["ere"] = {
{"prudere", {"prudere$"}, { -- impersonal
nucleoperf = {"REG{R}"},
part = {},
}},
{"stridere", {"stridere$", "concernere$", "discernere$", "serpere$", "splendere$", "lucere$", "combere$", "esimere$", "fervere$"}, {
part = {},
}},
{"controvertere", {"controvertere$"}, {
nucleoperf = {},
part = {},
}},
{"temere", {"ere$"}, {
}},
},
["ire"] = {
{"introvertire", {"introvertire$"}, { -- no va vertire
nucleopres = {"INCO"},
nucleoperf = {},
}},
{"compartire", {"compartire$", "putire$", "languire$", "eseguire$", "borrire$", "sbollire$", "inghiottire$"}, {
nucleopres = {"INCO", "REG"},
}},
{"compartire", {"sorbire$"}, {
nucleopres = {"INCO", "REG{R}"}
}},
{"compartire", {"applaudire$", "assalire$"}, {
nucleopres = {"REG", "INCO{R}"}
}},
{"compartire", {"^mentire$"}, {
nucleopres = {"REG", "INCO"},
}},
{"finire", {"finire$", "muggire$", "asservire$"}, { -- fuggire no es inco
nucleopres = {"INCO"},
}},
{"partire", {"ire$"}, {
}},
-- cuidado con sortire, tiene doble etimología y en una es inco y en la otra no
},
["arre"] = {
{"trarre", {"arre$"}, {
}},
},
["orre"] = {
{"porre", {"orre$"}, {
}},
},
["urre"] = {
{"condurre", {"urre$"}, {
}},
}
}
local paradigmas_irregulares = {
["are"] = {
{"andare", {"andare$"}, { -- andare, riandare, trasandare
nucleo = "and",
ind_pres = {{"vado"}, {"vai"}, {"va{G}"}, {"andiamo"}, {"andate"}, {"vanno"}},
nucleofut = {"andr"},
subj_pres = {{"vada", "vadi{x}"}, {"vada", "vadi{x}"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}},
imper = {nil, {"vai", "va'"}, {"vada", "vadi{x}"}, nil, nil, {"vadano", "vadino{x}"}}
}},
{"dare", {"^dare$", "addare$", "ridare$"}, { -- dare, addare, ridare, pero NO guidare, ni otros terminados en -dare
nucleo = "d",
ind_pres = {{"do{G}"}, {"dai"}, {"dà{G}"}, {"diamo"}, {"date"}, {"danno"}},
perf = {{"diedi", "detti"}, nil, {"diede", "dette", "diè{†}"}, nil, nil, {"diedero", "dettero", "diero{†}"}},
fut = {sufijos = "fut_dare"},
cond = {sufijos = "cond_dare"},
subj_pres = {{"dia"}, {"dia"}, {"dia"}, {"diamo"}, {"diate"}, {"diano"}},
subj_imp = {sufijos = "sub_imp_alt"},
imper = {nil, {"dai", "da'", "dà{†}"}}
}},
{"stare", {"stare$"}, {
ind_pres = {{"sto{G}"}, {"stai"}, {"sta{G}"}, {"stiamo"}, {"state"}, {"stanno"}},
perf = {{"stetti", "stiedi", "stei{†}", "stiei{†}"}, nil, {"stette", "stiede", "ste{†}", "stie{†}"}, nil, nil, {"stettero", "stiedero{x}", "sttetono{†}", "sterono{†}", "stierono{†}"}},
fut = {sufijos = "fut_dare"},
cond = {sufijos = "cond_dare"},
subj_pres = {{"stia", "stea{L}"}, {"stia", "stie{L}"}, {"stia", "stea{L}", "stie{L}"}, {"stiamo"}, {"stiate"}, {"stiano", "steano{L}"}},
imper = {nil, {"stai", "sta'", "sta{†}"}, {"stia", "stea{L}", "stie{L}"}, nil, nil, {"stiano", "steano{L}"}}
}},
-- NOTA: NO puede ir buffare, así que por las dudas ennumero todos los prefijos y compuestos
{"fare", {"^s?fare$"}, {
nucleo = "f",
nucleoperf = {"fec-fac"},
ger = {"facendo"},
part = {"fatto"},
part_pres = {"facente"},
ind_pres = {{"faccio"}, {"fai"}, nil, {"facciamo"}, nil, {"fanno"}},
ind_imp = {{"facevo"}, {"facevi"}, {"faceva"}, {"facevamo"}, {"facevate"}, {"facevano"}},
fut = {sufijos = "fut_dare"},
cond = {sufijos = "cond_dare"},
subj_pres = {{"faccia"}, {"faccia"}, {"faccia"}, {"facciamo"}, {"facciate"}, {"facciano"}},
subj_imp = {{"facessi"}, {"facessi"}, {"facesse"}, {"facessimo"}, {"faceste"}, {"facessero"}},
imper = {nil, {"fai", "fa'"}, {"faccia"}, {"facciamo"}, nil, {"facciano"}}
}},
-- estos van con tilde
{"fare", {"^rifare$", "^affare$", "assuefare$", "confare$", "contraffare$", "disfare$", "dis?a?ssuefare$", "liquefare$", "malfare$", "mansuefare$", "putrefare$", "rarefare$", "sopraffare$", "strafare$", "stupefare$", "torrefare$", "tumefare$"}, {
nucleo = "f",
nucleoperf = {"fec-fac"},
ger = {"facendo"},
part = {"fatto"},
part_pres = {"facente"},
ind_pres = {{"faccio"}, {"fai"}, {"fà"}, {"facciamo"}, nil, {"fanno"}},
ind_imp = {{"facevo"}, {"facevi"}, {"faceva"}, {"facevamo"}, {"facevate"}, {"facevano"}},
fut = {sufijos = "fut_dare"},
cond = {sufijos = "cond_dare"},
subj_pres = {{"faccia"}, {"faccia"}, {"faccia"}, {"facciamo"}, {"facciate"}, {"facciano"}},
subj_imp = {{"facessi"}, {"facessi"}, {"facesse"}, {"facessimo"}, {"faceste"}, {"facessero"}},
imper = {nil, {"fai", "fa'"}, {"faccia"}, {"facciamo"}, nil, {"facciano"}}
}},
},
["ere"] = {
{"essere", {"essere$", "riessere$", "trasessere$"}, {
nucleo = "ess",
part_pres = {"essente{R}"},
ind_pres = {{"sono"}, {"sei"}, {"è"}, {"siamo"}, {"siete"}, {"sono"}},
ind_imp = {{"ero"}, {"eri"}, {"era"}, {"eravamo"}, {"eravate"}, {"erano"}},
perf = {{"fui"}, {"fosti"}, {"fu{G}"}, {"fummo"}, {"foste"}, {"furono"}},
fut = {{"sarò"}, {"sarai"}, {"sarà"}, {"saremo"}, {"sarete"}, {"saranno"}},
cond = {{"sarei"}, {"saresti"}, {"sarebbe"}, {"saremmo"}, {"sareste"}, {"sarebbero"}},
subj_pres = {{"sia"}, {"sia"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}},
subj_imp = {{"fossi"}, {"fossi"}, {"fosse"}, {"fossimo"}, {"foste"}, {"fossero"}},
imper = {nil, {"sii"}, {"sia"}, {"siamo"}, {"siate"}, {"siano"}}
}},
{"avere", {"^avere$", "^riavere$", "^bene?avere$"}, {
nucleo = "av",
nucleopres = {"abbi-abb-abb-abb"},
nucleoperf = {"ebb-av"},
nucleofut = {"avr"},
part_pres = {"avente", "abbiente"},
ger_comp = {"avendo"},
ind_pres = {{"ho"}, {"hai"}, {"ha"}, nil, nil, {"hanno"}},
}},
{"sapere", {"sapere$"}, {
nucleo = "sap",
nucleopres = {"sappi-sapp-sapp-sapp"},
nucleoperf = {"sepp"},
nucleofut = {"sapr"},
part_pres = {},
ind_pres = {{"so{G}"}, {"sai"}, {"sa{G}"}, nil, nil, {"sanno"}},
}},
{"potere", {"potere$"}, {
nucleo = "pot",
nucleopres = {"poss-poss-poss"},
nucleofut = {"potr"},
ind_pres = {nil, {"puoi"}, {"può"}, nil, nil, nil},
imper = {nil, {}, {}, {}, {}, {}}
}},
{"dovere", {"dovere$"}, {
nucleo = "dov",
nucleopres = {"dev-dev-dobb", "debb-dev-dobb"},
nucleofut = {"dovr"},
ind_pres = {{"devo"}},
imper = {nil, {}, {}, {}, {}, {}}
}},
{"piacere", {"acere$"}, { -- REVISAR ESTO
nucleopres = {"acci-REG-acc"},
nucleoperf = {"acqu"},
nucleopart = {"aciut"},
}},
{"nuocere", {"nuocere$"}, { -- REVISAR
nucleopres = {"nocci", "nuocci-nuoc-noc"},
nucleoperf = {"nocqu"},
ger = {"nuocendo", "nocendo{R}"},
part = {"nociuto", "nuociuto{R}"},
part_pres = {"nocente"},
}},
{"nascere", {"nascere$"}, {
nucleoperf = {"nacqu"},
part = {"nato"},
}},
{"crescere", {"crescere$", "noscere$"}, { -- tb -noscere, pero no pascere, mescere
nucleo = "sc",
nucleoperf = {"bb"},
nucleopart = {"sciut"},
}},
{"cadere", {"cadere$"}, {
nucleoperf = {"cadd"},
nucleofut = {"cadr"},
}},
{"possedere", {"possedere$"}, {
nucleopres = {"possied-possied", "possegg-possied"},
nucleofut = {"possied", "possed"}
}},
{"sedere", {"sedere$"}, {
nucleopres = {"sied", "segg{†}", "siegg{†}"},
nucleofut = {"sied", "sed"},
}},
{"prevedere", {"prevedere$"}, {
nucleo = "ved",
nucleoperf = {"vid"},
part = {"visto", "veduto{R}"},
nucleofut = {"vedr", "veder"},
part_pres = {"vedente", "veggente"},
}},
{"provedere", {"provedere$", "provvedere$"}, {
nucleo = "ved",
nucleoperf = {"vid"},
part = {"veduto{PART}", "visto{ADJ}"},
nucleofut = {"vedr", "veder"},
part_pres = {"vedente", "veggente"},
}},
{"ravedere", {"^ravedere$"}, {
nucleo = "ved",
nucleoperf = {"vid"},
part = {"veduto"},
nucleofut = {"vedr", "veder"},
part_pres = {"vedente", "veggente"},
}},
{"travedere", {"^travedere$", "trasvedere$", "transvedere$", "stravedere$", "antivedere$"}, {
nucleo = "ved",
nucleoperf = {"vid"},
part = {"veduto"},
nucleofut = {"vedr"},
part_pres = {"vedente", "veggente"},
}},
{"vedere", {"vedere$"}, {
nucleo = "ved",
nucleoperf = {"vid"},
part = {"visto", "veduto{R}"},
nucleofut = {"vedr"},
part_pres = {"vedente", "veggente"},
}},
{"spandere", {"spandere$"}, { -- REVISAR: fusionar con el resto de paradigmas (ojo a la ns)?
nucleoperf = {"spans", "REG{R}"},
part = {"spanto", "spanso"},
}},
{"fendere", {"fendere$"}, { -- fendere, rifendere, sfendere, etc.
part = {"fenduto", "fesso"},
}},
{"propendere", {"propendere$"}, {
part = {"propeso{R}"},
}},
{"fondere", {"fondere$"}, {
nucleoperf = {"fus"},
part = {"fuso"},
}},
{"tondere", {"tondere$"}, {
part = {"tonduto", "tonso"},
}},
{"godere", {"godere$"}, {
nucleofut = {"godr"},
}},
{"plaudere", {"plaudere$"}, {
perf = {sufijos = "perf_plaudere"},
part = {"plaudito"},
}},
-- estos son ss-tt pero alteran una vocal
{"redigere", {"redigere$"}, {
nucleoperf = {"redass"},
part = {"redatto"},
}},
{"cuocere", {"cuocere$"}, {
nucleopres = {"cuoci-cuoc-cuoc", "cuoci-cuoc-coc{R}"},
nucleoimp = {"cuoci", "coci{R}"},
nucleofut = {"cuoc", "coc{R}"},
nucleoperf = {"ss"},
nucleopart = {"cott"},
}},
{"diligere", {"diligere$"}, {
nucleoperf = {"diless"},
part = {"diletto"},
}},
{"ducere", {"ducere$"}, {
nucleoperf = {"ss"},
nucleofut = {"durr"},
part = {"dotto"},
}},
{"rigere", {"rigere$"}, {
nucleoperf = {"ress"},
part = {"retto"},
}},
{"sigere", {"sigere$"}, { -- esigere, transigere
nucleoperf = {"REG{R}"},
part = {"satto"},
}},
{"stringere", {"stringere$"}, {
nucleoperf = {"strins"},
part = {"stretto"},
}},
{"fungere", {"fungere$"}, {
nucleoperf = {"funs"},
part = {"funto{R}"},
}},
{"ergere", {"^ergere$", "adergere$", "ridergere$"}, {
nucleo = "erg",
nucleoperf = {"s"},
part = {"t"},
}},
{"urgere", {"^urgere$"}, { -- no surgere
nucleoperf = {},
part = {},
}},
{"empiere", {"^empiere$", "riempiere$"}, { -- tb. riempiere
nucleo = "empi",
ind_pres = {sufijos = "ind_pres_mpiere"},
perf = {{"empii", "empiei{R}"}, {"empisti", "empiesti{R}"}, {"empì", "empié{R}"}, {"empimmo", "empiemmo{R}"}, {"empiste", "empieste{R}"}, {"empirono", "empierono{R}"}},
}},
{"adempiere", {"mpiere$"}, { -- adempiere, compiere, disimpeire
nucleo = "mpi",
ind_pres = {sufijos = "ind_pres_mpiere"},
perf = {ei = true},
}},
{"valere", {"valere$"}, {
nucleopres = {"valg"},
nucleoperf = {"vals"},
nucleofut = {"varr"},
part = {"valso"},
}},
{"pellere", {"pellere$", "avellere$"}, {
nucleo = "elle",
nucleoperf = {"uls"},
part = {"ulso"},
}},
{"svellere", {"svellere$", "divellere$"}, {
nucleo = "vell",
nucleopres = {"REG", "velg"},
nucleoperf = {"vels"},
part = {"velto"},
}},
{"dolere", {"dolere$"}, {
nucleopres = {"dolg-duol"},
nucleoperf = {"dols"},
nucleofut = {"dorr"},
}},
{"solere", {"solere$"}, {
nucleopres = {"sogli-suol-sogl"},
nucleoperf = {"REG{R}"},
part = {"solito"},
fut = {{},{},{},{},{},{}},
imper = {{},{},{},{},{},{}},
part_pres = {},
}},
{"volere", {"volere$"}, {
nucleopres = {"vogli-vogl-vogl-vogl"},
ind_pres = {nil, {"vuoi"}, {"vuole"}, nil, nil, nil},
nucleoperf = {"voll"},
nucleofut = {"vorr"},
}},
{"redimere", {"redimere$"}, {
nucleoperf = {"redens"},
part = {"redento"},
}},
{"perplimere", {"perplimere$"}, {
part = {"perplesso", "perplimuto{R}"},
}},
{"dirimere", {"dirimere"}, {
part = {"dirento{†}"},
}},
{"primere", {"primere$"}, {
nucleoperf = {"press"},
part = {"presso"},
}},
{"sumere", {"sumere$"}, {
nucleoperf = {"suns"},
part = {"sunto"},
}},
{"rimanere", {"rimanere$"}, {
nucleopres = {"rimang"},
nucleoperf = {"rimas"},
part = {"rimasto"},
nucleofut = {"rimarr"},
}},
{"permanere", {"permanere$"}, {
nucleopres = {"permang"},
nucleoperf = {"permas"},
part = {},
nucleofut = {"permarr"},
}},
{"tenere", {"tenere$"}, {
nucleopres = {"teng-tien"},
nucleoperf = {"tenn"},
nucleofut = {"terr"},
}},
{"spegnere", {"spegnere$"}, {
nucleopres = {"speng"},
nucleoperf = {"spens"},
part = {"spento"},
}},
{"cernere", {"^cernere$", "ricernere$"}, {
nucleoperf = {},
part = {"cernito"},
}},
{"secernere", {"secernere$"}, {
part = {"secreto"},
}},
{"rompere", {"rompere$"}, {
nucleoperf = {"rupp"},
part = {"rotto"},
}},
{"^parere", {"^parere$"}, {
nucleopres = {"pai-par-pai"},
nucleoperf = {"parv"},
nucleofut = {"parr"},
part = {"parso"},
ind_imp = {{},{},{},{},{},{}},
part_pres = {"parvente"},
}},
{"correre", {"correre$"}, {
nucleoperf = {"cors"},
part = {"corso"},
}},
{"cuotere", {"cuotere$"}, {
nucleoperf = {"coss"},
part = {"cosso"},
}},
-- vertere impersonal
{"estrovertere", {"estrovertere$"}, {
nucleoperf = {},
part = {"estroverso", "estrovertito{R}"},
}},
{"introvertere", {"introvertere$"}, {
nucleoperf = {},
part = {"introverso"},
}},
{"sistere", {"sistere$"}, {
nucleoperf = {"sistito"},
}},
{"flettere", {"flettere$"}, {
nucleoperf = {"REG", "ss"},
perf = {ei = true},
part = {"flesso"},
}},
{"mettere", {"mettere$"}, {
nucleoperf = {"misi"},
part = {"messo"},
}},
{"convivere", {"convivere$", "sopravivere$"}, {
nucleo = "viv",
nucleoperf = {"viss"},
nucleofut = {"vivr", "REG"},
part = {"vissuto"},
}},
{"vivere", {"vivere$"}, {
nucleo = "viv",
nucleoperf = {"viss"},
nucleofut = {"vivr"},
part = {"vissuto"},
}},
{"asciolvere", {"sciolvere$"}, {
nucleoperf = {"REG", "sciols"},
}},
{"volvere", {"volvere$"}, {
nucleoperf = {"vols", "REG"},
part = {"voluto"},
}},
{"bere", {"^bere$"}, {
nucleo = "bev",
nucleoperf = {"bevv", "REG"},
nucleofut = {"berr"},
}},
{"piovere", {"piovere$"}, {
nucleoperf = {"piovv"},
}},
{"muovere", {"muovere$"}, { -- muovere, commuovere
nucleoperf = {"moss"},
part = {"mosso"},
}},
{"ripetere", {"tere$", "tessere$"}, { -- competere, mietere, fotere, vertere, battere, nettere
perf = {ei = true},
}},
{"togliere", {"gliere$"}, { --scegliere
nucleo = "gli",
nucleopres = {"lg"},
nucleoperf = {"ls"},
part = {"lto"},
}},
{"scindere", {"scindere$", "affiggere$", "crocifiggere$", "infiggere$", "defiggere$", "prefiggere$", "sufiggere$", "cotere$", "cutere$"}, {
nucleoperf = {"ss"},
nucleopart = {"ss"},
}},
{"radere", {"[aeiou]dere$", "[eu]ndere$", "ergere$"}, { --radere, suadere, invadere, ledere, ridere, scendere, cendere, difendere, defendere, offendere, pendere (appendere, spendere, dipendere, rispendere, rispendere, rispendere, rispendere), prendere, arrendere, tendere, tundere, plodere, rodere, ardere, mordere, udere, spargere, mergere, spergere, tergere, convergere, eccellere (defectivo), divergere pero no cadere
nucleoperf = {"s"},
nucleopart = {"s"},
}},
{"vincere", {"vincere$", "torcere$", "[lnr]gu?ere$", "solvere$"}, { -- torcere, volgere, indulgere, fulgere, angere, spengere, mingere, ingere, ungere, fungere, scorgere, -porgere, -accorgersi, sorgere, surgere, stinguere, solvere
nucleoperf = {"s"},
nucleopart = {"t"},
}},
{"succedere", {"succedere$", "concedere$", "retrocedere$", "perdere$"}, {
nucleoperf = {"ss", "REG"},
nucleopart = {"ss", "REG"},
}},
{"leggere", {"ggere$", "scrivere$"}, { -- eggere, ^figgere, configgere, rifiggere, scalfiggere, trafiggere, affliggere, infliggere, rifliggere, friggere, struggere, scrivere
nucleoperf = {"ss"},
nucleopart = {"tt"},
}},
{"chiedere", {"chiedere$", "rimanere$", "s[cp]ondere$"}, { -- tb. rimanere, scondere, spondere, pero no cedere o siedere
nucleoperf = {"s"},
nucleopart = {"st"},
}},
--regulares: vendere, credere, gemere, fremere, premere, temere, ricevere
},
["ire"] = {
{"benedire", {"benedire$", "mal[ea]dire$"}, {
nucleo = "d",
ger = {"dicendo"},
part = {"detto"},
part_pres = {"dicente"},
nucleopres = {"dic-dic-dic"},
nucleoperf = {"diss-dic"},
ind_imp = {{"dicevo"}, {"dicevi"}, {"diceva"}, {"dicevamo"}, {"dicevate"}, {"dicevano"}},
subj_imp = {{"dicessi"}, {"dicessi"}, {"dicesse"}, {"dicessimo"}, {"diceste"}, {"dicessero"}},
}},
{"dire", {"^dire$", "^ridd?ire$"}, {
ger = {"dicendo"},
part = {"detto"},
part_pres = {"dicente"},
nucleopres = {"dic-dic-dic"},
nucleoperf = {"diss-dic"},
ind_imp = {{"dicevo"}, {"dicevi"}, {"diceva"}, {"dicevamo"}, {"dicevate"}, {"dicevano"}},
subj_imp = {{"dicessi"}, {"dicessi"}, {"dicesse"}, {"dicessimo"}, {"diceste"}, {"dicessero"}},
imper = {nil, {"dì", "di'"}},
}},
{"cucire", {"cucire$"}, {
nucleopres = {"cuci"},
}},
{"uscire", {"uscire$"}, {
nucleopres = {"esc-esc"},
}},
{"sdrucire", {"sdrucire$"}, {
nucleopres = {"INCO", "sdruci"},
}},
{"udire", {"^udire$", "riudire$", "traudire$"}, {
nucleo = "ud",
nucleopres = {"od-od"},
nucleofut = {"udr"},
}},
{"salire", {"salire$"}, {
nucleopres = {"salg"},
part_pres = {"saliente", "salente"},
}},
{"seppellire", {"seppellire$"}, {
nucleopres = {"INCO"},
part = {"sepolto", "seppellito"},
}},
{"dormire", {"dormire$"}, {
part_pres = {"dormiente", "dormente"},
}},
{"venire", {"venire$"}, {
nucleopres = {"veng"},
nucleoperf = {"venn"},
part = {"venuto"},
nucleofut = {"verr"},
part_pres = {"veniente"},
}},
{"empire", {"empire$"}, {
perf = {{"empii", "empiei{R}"}, {"empisti", "empiesti{R}"}, {"empì", "empié{R}"}, {"empimmo", "empiemmo{R}"}, {"empiste", "empieste{R}"}, {"empirono", "empierono{R}"}},
part = {"empito", "empiuto{R}"},
ger = {"empiendo"},
part_pres = {"empiente"},
}},
{"adempire", {"mpire$"}, {
nucleo = "mp",
nucleopres = {"INCO"},
ger = {"mpiendo"},
part_pres = {"mpiente"},
}},
{"^sparire", {"^sparire$"}, {
nucleopres = {"INCO"},
nucleoperf = {"sparv", "spari{R}", "spars{R}"},
part = {"sparso"},
}},
{"disparire", {"disparire$"}, {
nucleopres = {"dispai"},
nucleoperf = {"REG", "disparvi"},
}},
{"trasparire", {"trasparire$"}, {
nucleopres = {"traspai", "INCO"},
}},
{"parire", {"parire$"}, {
nucleopres = {"pai", "INCO"},
nucleoperf = {"parv", "REG{R}", "pars{R}"},
part = {"parso"},
}},
{"inferire", {"inferire$"}, {
nucleopres = {"INCO"},
nucleoperf = {"infers"},
part = {"inferto"},
}},
{"profferire", {"profferire$"}, {
nucleopres = {"INCO"},
nucleoperf = {"REG", "proffers"},
part = {"profferto"},
}},
{"offrire", {"offrire$"}, {
nucleoperf = {"REG", "offers{R}"},
part = {"offerto"},
part_pres = {"offerente"},
}},
{"morire", {"morire$"}, {
nucleopres = {"muoi-muor"},
nucleoperf = {"mort"},
nucleofut = {"REG", "morr"},
part_pres = {"morente", "moriente{†}"},
}},
{"aprire", {"aprire$"}, {
nucleoperf = {"REG", "apers"},
part = {"aperto"},
}},
{"coprire", {"coprire$"}, {
nucleoperf = {"REG", "copersi"},
part = {"coperto"},
}},
{"nutrire", {"nutrire$"}, {
nucleopres = {"REG", "INCO{R}"},
part_pres = {"nutriente"},
}},
{"presentire", {"presentire$"}, {
nucleopres = {"REG", "INCO"},
part_pres = {},
}},
{"concepire", {"concepire"}, {
nucleopres = {"INCO"},
part_pres = {"concipiente"},
}},
{"sentire", {"sentire$"}, {
part_pres = {"sentente{R}", "senziente{ADJ}"},
}},
},
["arre"] = {
},
["orre"] = {
},
["urre"] = {
},
}
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo.sufijo_inf
local sufijos_ = conjinfo[forma].sufijos and sufijos[sufijo_inf][conjinfo[forma].sufijos]
or ((forma == "part" and conjinfo.hay_nucleopart) and sufijos[sufijo_inf][forma.."_alt"]
or (forma == "perf" and conjinfo.hay_nucleoperf and sufijos[sufijo_inf][forma.."_alt"]
or (forma == "imper" and conjinfo.hay_nucleopres4 and sufijos[sufijo_inf][forma.."_alt"]
or sufijos[sufijo_inf][forma])))
local nucleos
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "part" then
nucleos = conjinfo.nucleopart
elseif forma == "ger" or forma == "part_pres" then
nucleos = conjinfo.nucleo_inf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleopres1, conjinfo.nucleopres2, conjinfo.nucleopres2, conjinfo.nucleopres3, conjinfo.nucleo_inf, conjinfo.nucleopres1}
elseif forma == "ind_imp" or forma == "subj_imp" then
nucleos = {conjinfo.nucleoimp, conjinfo.nucleoimp, conjinfo.nucleoimp, conjinfo.nucleoimp, conjinfo.nucleoimp, conjinfo.nucleoimp}
elseif forma == "perf" then
nucleos = {conjinfo.nucleoperf1, conjinfo.nucleoperf2, conjinfo.nucleoperf1, conjinfo.nucleoperf2, conjinfo.nucleoperf2, conjinfo.nucleoperf1}
elseif forma == "fut" or forma == "cond" then
nucleos = {conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleopres1, conjinfo.nucleopres1, conjinfo.nucleopres1, conjinfo.nucleopres3, conjinfo.nucleopres3, conjinfo.nucleopres1}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleopres2, conjinfo.nucleopres1, conjinfo.nucleopres3, conjinfo.nucleopres4, conjinfo.nucleopres1}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for j, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
for j, n in ipairs(nucleos) do
local nucleo, marca = match(n, "^(.*)([{%[].-[}%]])$")
if not marca then
nucleo = n
marca = ""
end
local sufijos__ = sufijos_
if nucleo == "REG" then
nucleo = conjinfo.nucleo_inf[1]
sufijos__ = sufijos[sufijo_inf][forma]
end
local k = 1
while sufijos__[k] do
local nexosufijo = combinar_nexo_sufijo(nexo, sufijos__[k], sufijo_inf)
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo))..marca)
k = k + 1
end
end
end
return
end
for i = IO, LORO do
local p = tostr[i]
if conjinfo[forma][i] then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
for j,n in ipairs(nucleos[i]) do
local nucleo, marca = match(n, "^(.*)([{%[].-[}%]])$")
if not marca then
nucleo = n
marca = ""
end
local sufijos__ = sufijos_
if nucleo == "REG" then
nucleo = conjinfo.nucleo_inf[1]
sufijos__ = sufijos[sufijo_inf][forma]
end
local k = i
while sufijos__[k] do
local nexosufijo = combinar_nexo_sufijo(nexo, sufijos__[k], sufijo_inf)
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo))..marca)
k = k + 6
if conjinfo[forma].ei then -- [[ripetere]]
break
end
end
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local auxs = fmtinfo.auxs
local arr = res[forma]
local t = {}
local tiempo, i = match(forma, "^(.*)(%d)$")
if not i then
tiempo = forma
i = 1
end
i = tonumber(i)
local rest_ = i < NOI and resto or resto_pl
local rest_pl_ = resto_pl
if auxiliar["essere"][tiempo] and not auxs[1] then -- si es un tiempo compuesto y no hay participio, no debo mostrarlo
res[forma] = t
return
end
for _, v in ipairs(arr) do
local hs = auxiliar[auxs[1]][tiempo]
local v2
local rest = rest_
local rest_pl = rest_pl_
-- necesidad de duplicar los restos puesto que con essere hay que concordarlo en número al verbo
local v_ = v
local rest2 = rest_
local rest_pl2 = rest_pl_
if hs then
if auxs[1] == "essere" and i >= NOI then
v = gsub(v, "o([~#]?)$", "i%1")
end
rest = " "..v..rest
rest_pl = " "..v..rest_pl
v = auxiliar[auxs[1]][tiempo][i]
if auxs[2] then
if auxs[2] == "essere" and i >= NOI then
v_ = gsub(v_, "o([~#]?)$", "i%1")
end
v2 = auxiliar[auxs[2]][tiempo][i]
rest2 = " "..v_..rest2
rest_pl2 = " "..v_..rest_pl2
end
end
if forma == "inf" or forma == "inf_comp" then
if find(v, "[aei]re$") and pron == "si" then
v = sub(v, 1, -2)
end
insert(t, adv..v..pron..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..v..pron..art..f_links(rest_pl))
end
if v2 then
if find(v2, "[aei]re$") and pron == "si" then
v2 = sub(v2, 1, -2)
end
insert(t, adv..v2..pron..art..f_links(rest2))
if rest_pl ~= rest then
insert(t, adv..v2..pron..art..f_links(rest_pl2))
end
end
elseif forma == "ger" or forma == "ger_comp" then
local vpron = v..pron
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..f(vpron)..art..f_links(rest_pl))
end
if v2 then
vpron = v2..pron
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest2))
if rest_pl ~= rest then
insert(t, adv..f(vpron)..art..f_links(rest_pl2))
end
end
elseif forma == "part" or forma == "part_pres" then
insert(t, adv..f_links(v)..f_links(resto))
if (resto_pl ~= resto) then
insert(t, adv..f_links(v)..f_links(resto_pl))
end
elseif tiempo == "imper" and i ~= LUI and i ~= LORO then
local vpron = v
if pron == "si" then
local enc = REFLEXIVOS[i]
vpron = vpron..enc
end
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
else
local pronart = pron == "si" and REFLEXIVOS[i].." " or ""
pronart = art ~= "" and pronart..art.." " or pronart
insert(t, adv..pronart..f_links(v)..f_links(rest))
if v2 then
insert(t, adv..pronart..f_links(v2)..f_links(rest2))
end
end
end
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {alias_de = "aux"},
["impersonal"] = {por_defecto = ""},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["indirecto"] = {tipo = "bool"},
["nucleopres"] = {lista = true},
["núcleopres"] = {alias_de = "nucleopres"},
["nucleoimp"] = {lista = true},
["núcleoimp"] = {alias_de = "nucleoimp"},
["nucleoperf"] = {lista = true},
["núcleoperf"] = {alias_de = "nucleoperf"},
["nucleopart"] = {lista = true},
["núcleopart"] = {alias_de = "nucleopart"},
["nucleofut"] = {lista = true},
["núcleofut"] = {alias_de = "nucleofut"},
["paradigma"] = {lista = true},
["nota"] = {},
["aux"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
if args["part"][1] == "no" or args["part"][1] == "-" then
args["aux"] = "a" -- para simplificar código, no tendrá efecto en las conjugaciones
end
if (args["aux"] ~= "a" and args["aux"] ~= "e" and args["aux"] ~= "ae" and args["part"][1] ~= "no") then
error("Especifique el auxiliar: a (avere), e (essere), ae (avere o essere), o especifique \"no\" en el participio si es defectivo")
end
local adv, r1 = match(tit, "^([sSnN][ío]n?"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiou]r?re)(s?i?)(l?[aeo]?s?)(.-)$")
if not v then
v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiou]r)(s?i?)(l?[aeo]?s?)(.-)$")
if v then
v = v.."e"
end
end
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[ío]?n?"..ESPACIO.."?"..LETRA.."*[aeiou]r?res?i?l?[aeo]?s?(.-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
local sufijo_inf = match(v, "[aeiou]r?re$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
local es_inco
local es_puro
local auxiliares
for N = 1, math.max(1,
maxindex(args["paradigma"]),
maxindex(args["nucleopres"]),
maxindex(args["nucleoimp"]),
maxindex(args["nucleoperf"]),
maxindex(args["nucleopart"]),
maxindex(args["nucleofut"])) do
local conjinfo = {}
if find(v, "[^cg]iare$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then
error("Especifique el (los) paradigma(s) para los verbos en -iare (abbaiare o avviare)")
end
local encontre_irreg = false
for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
local rxx = match(v, rx)
if args["paradigma"][N] == p[1] or rxx then
assert(rxx)
conjinfo = deepcopy(p[3])
conjinfo.rxx = rxx
es_irregular = true
paradigmas_reconocidos[p[1]] = true
encontre_irreg = true
break
end
end
if encontre_irreg then
break
end
end
local encontre_reg = false
for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
local rxx = match(v, rx)
if args["paradigma"][N] == p[1] or rxx then
assert(rxx)
local vacio = true
if not conjinfo.rxx then
conjinfo.rxx = rxx -- no puede sobreescribir la información del paradigma irregular
end
for k, v in pairs(p[3]) do
vacio = false
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
if vacio then
paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]]
end
encontre_reg = true
break
end
end
if encontre_reg then
break
end
end
if find(args["nucleopres"][N] or "", "^INCO") then
paradigmas_reconocidos["partire"] = nil
paradigmas_reconocidos["finire"] = true
end
assert(encontre_reg, "paradigma no reconocido")
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
if not conjinfo.nucleo_inf then
if conjinfo.rxx == conjinfo.sufijo_inf then
conjinfo.nucleo_inf = sub(v, 1, max(len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf), 0)) -- no busco regex porque pueden haberse cambiado
else
conjinfo.nucleo_inf = sub(conjinfo.rxx, 1, max(len(conjinfo.rxx) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf), 0))
end
end
if not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, max(len(v) - len(conjinfo.nucleo_inf) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf), 0))
end
conjinfo.nucleopres = args["nucleopres"][N] and {args["nucleopres"][N]} or conjinfo.nucleopres
conjinfo.nucleoimp = args["nucleoimp"][N] and {args["nucleoimp"][N]} or conjinfo.nucleoimp
conjinfo.nucleoperf = args["nucleoperf"][N] and {args["nucleoperf"][N]} or conjinfo.nucleoperf
conjinfo.nucleopart = args["nucleopart"][N] and {args["nucleopart"][N]} or conjinfo.nucleopart
conjinfo.nucleofut = args["nucleofut"][N] and {args["nucleofut"][N]} or conjinfo.nucleofut
local function parsear_nucleo(nucl_)
if not nucl_ then
return conjinfo.nucleo_inf
end
local nucl, marca = match(nucl_, "^(.*)([{%[].-[}%]])$")
if not marca then
nucl = nucl_
marca = ""
end
if nucl == "s" or nucl == "ss" or nucl == "t" or nucl == "tt" or nucl == "st" or nucl == "bb" then
local w = conjinfo.nucleo_inf
w = gsub(w, "nd$", "#"..nucl.."#")
w = gsub(w, "gg$", "#"..nucl.."#")
w = gsub(w, "sc$", "#"..nucl.."#")
w = gsub(w, "gu?$", "#"..nucl.."#")
w = gsub(w, "ll?$", "l#"..nucl.."#")
w = gsub(w, "ci?$", "#"..nucl.."#")
w = gsub(w, C.."$", "#"..nucl.."#")
return w..marca
end
if nucl == "REG" then
return conjinfo.nucleo_inf..marca
end
if nucl == "INCO" then
return gsub1(conjinfo.nucleo_inf, "i?$", "~isc~")..marca
end
if nucl == conjinfo.nucleo_inf then
return nucl..marca
end
return "#"..nucl.."#"..marca
end
local function insertar_nucleo_por_defecto(arr)
if not arr[1] then
arr[1] = conjinfo.nucleo_inf
end
end
conjinfo.nucleopres1 = {}
conjinfo.nucleopres2 = {}
conjinfo.nucleopres3 = {}
conjinfo.nucleopres4 = {}
if conjinfo.nucleopres then
for i,ns in ipairs(conjinfo.nucleopres) do
local a, b, c, d
a, b, c, d = match(ns, "^(.-)%-(.-)%-(.-)%-(.-)$")
if not d then
a, b, c = match(ns, "^(.-)%-(.-)%-(.-)$")
end
if not c then
a, b = match(ns, "^(.-)%-(.-)$")
end
if not b then
a = ns
end
if d then
conjinfo.hay_nucleopres4 = true
end
if find(a, "^INCO") then
insert_if_not(conjinfo.nucleopres1, parsear_nucleo(a))
insert_if_not(conjinfo.nucleopres2, parsear_nucleo(a))
insert_if_not(conjinfo.nucleopres3, conjinfo.nucleo_inf)
insert_if_not(conjinfo.nucleopres4, conjinfo.nucleo_inf)
es_inco = true
else
insert_if_not(conjinfo.nucleopres1, parsear_nucleo(a))
insert_if_not(conjinfo.nucleopres2, parsear_nucleo(b))
insert_if_not(conjinfo.nucleopres3, parsear_nucleo(c))
insert_if_not(conjinfo.nucleopres4, parsear_nucleo(d))
es_puro = true
end
end
else
insert_if_not(conjinfo.nucleopres1, conjinfo.nucleo_inf)
insert_if_not(conjinfo.nucleopres2, conjinfo.nucleo_inf)
insert_if_not(conjinfo.nucleopres3, conjinfo.nucleo_inf)
insert_if_not(conjinfo.nucleopres4, conjinfo.nucleo_inf)
end
conjinfo.nucleoperf1 = {}
conjinfo.nucleoperf2 = {}
if conjinfo.nucleoperf then
local aux = conjinfo.nucleoperf
for _,ns in ipairs(aux) do
local a, b = match(ns, "^(.-)%-(.-)$")
if b then
insert_if_not(conjinfo.nucleoperf1, parsear_nucleo(a))
insert_if_not(conjinfo.nucleoperf2, parsear_nucleo(b))
else
insert_if_not(conjinfo.nucleoperf1, parsear_nucleo(ns))
insert_if_not(conjinfo.nucleoperf2, conjinfo.nucleo_inf)
end
conjinfo.hay_nucleoperf = true
end
else
insert_if_not(conjinfo.nucleoperf1, conjinfo.nucleo_inf)
insert_if_not(conjinfo.nucleoperf2, conjinfo.nucleo_inf)
end
if conjinfo.nucleoimp then
local aux = conjinfo.nucleoimp
conjinfo.nucleoimp = {}
for _,ns in ipairs(aux) do
insert_if_not(conjinfo.nucleoimp, parsear_nucleo(ns))
end
else
conjinfo.nucleoimp = {conjinfo.nucleo_inf}
end
if conjinfo.nucleopart then
local aux = conjinfo.nucleopart
conjinfo.nucleopart = {}
for _,ns in ipairs(aux) do
insert_if_not(conjinfo.nucleopart, parsear_nucleo(ns))
conjinfo.hay_nucleopart = true
end
else
conjinfo.nucleopart = {conjinfo.nucleo_inf}
end
if conjinfo.nucleofut then
local aux = conjinfo.nucleofut
conjinfo.nucleofut = {}
for _,ns in ipairs(aux) do
insert_if_not(conjinfo.nucleofut, parsear_nucleo(ns))
end
else
conjinfo.nucleofut = {conjinfo.nucleo_inf}
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if (find(e, 'PART') or not find(e, 'ADJ')) and not find(e, "†") then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local part_no_adj_pl = {}
for _,e in ipairs(part_no_adj) do
local partpl = gsub(e, "o([#~]?)$", "i%1")
insert(part_no_adj_pl, partpl)
end
local auxs = {}
if args.aux == "a" then
insert(auxs, "avere")
auxiliares = "avere"
elseif args.aux == "e" then
insert(auxs, "essere")
auxiliares = "essere"
elseif args.aux == "ae" then
insert(auxs, "avere")
insert(auxs, "essere")
auxiliares = "avere/essere"
else
auxiliares = "sin participio"
end
local fmtinfo = {adv=adv, pron=pron, art=art, resto=resto, resto_pl=resto_pl,impers=args["impersonal"], auxs=auxs}
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local es_impersonal = args["impersonal"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, es_impersonal)
end)
local impers = args["impersonal"]
local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper
if impers == "3" then
-- REVISAR: cómo funcionan los verbos con el objeto indirecto??? (a x le y)
fila_pronombres_ind = {"", "(esso)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(esso)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(che esso)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(esso)", color=COLOR_IMPER, header=true, class="pc"}
cs = 2
elseif impers == "36" then
fila_pronombres_ind = {"", "(esso)", "(essi)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(esso)", "(essi)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(che esso)", "(che essi)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(esso)", "(essi)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_ind = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "io", "tu", "lui, lei", "noi", "voi", "essi, esse, loro", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "che io", "che tu", "che lui, che lei", "che noi", "che voi", "che essi, che loro", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tu)", "(lui, lei)", "(noi)", "(voi)", "(essi, loro)", color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = math.floor((cs-1) / 2)
cs2 = cs - 1 - cs1
local t = {}
t[1] = {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true}
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio pasado", header=true, color=COLOR_NP}, resultante.part}
t[5] = {{"Participio presente", header=true, color=COLOR_NP}, resultante.part_pres}
t[6] = {{"Auxiliar", header=true, color=COLOR_NP}, {concat(auxs, ", ")}}
else
resultante.inf.colspan = cs1
resultante.ger.colspan = cs1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
resultante.part.colspan = cs - 1
resultante.part_pres.colspan = cs - 1
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp}
t[4] = {{"Participio pasado", header=true, color=COLOR_NP}, resultante.part}
t[5] = {{"Participio presente", header=true, color=COLOR_NP}, resultante.part_pres}
t[6] = {{"Auxiliar", header=true, color=COLOR_NP}, {concat(auxs, ", "), colspan=cs-1}}
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
t[7] = {{"Formas personales", colspan=cs}, color=COLOR_H, header=true}
t[8] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true}
t[9] = fila_pronombres_ind
t[10] = {{"Presente", color=COLOR_IND, header=true}, ic("ind_pres")}
t[11] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")}
t[12] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("perf")}
t[13] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")}
t[14] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("perf_comp")}
t[15] = {{"Futuro", color=COLOR_IND, header=true}, ic("fut")}
t[16] = {{"Futuro compuesto", color=COLOR_IND, header=true}, ic("fut_comp")}
t[17] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("anter")}
t[18] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true}
t[19] = fila_pronombres_cond
t[20] = {{"Condicional simple", color=COLOR_COND, header=true}, ic("cond")}
t[21] = {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("cond_comp")}
t[22] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true}
t[23] = fila_pronombres_subj
t[24] = {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")}
t[25] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")}
t[26] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")}
t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")}
t[28] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true}
t[29] = fila_pronombres_imper
if mostrar_imper then
t[30] = {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")}
else
t[30] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}}
end
t[31] = {{f("Leyenda: † arcaico, x no normativo, R raro, L literario, G geminado, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}}
args["nota"] = args["nota"] or ""
if args["impersonal"] == "utc3" then
args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "umc3" then
args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "utc36" then
args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
if args["impersonal"] == "umc36" then
args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
t[32] = {{args["nota"] and args["nota"] or "", colspan=cs}}
local paradigmas_t = {}
local cats = {}
if es_irregular then
insert(cats, "IT:Verbos irregulares")
paradigmas_reconocidos["avviare"] = nil
paradigmas_reconocidos["amare"] = nil
paradigmas_reconocidos["temere"] = nil
paradigmas_reconocidos["partire"] = nil
paradigmas_reconocidos["porre"] = nil
paradigmas_reconocidos["condurre"] = nil
else
insert(cats, "IT:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "IT:Verbos del paradigma "..p)
end
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "IT:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "IT:Verbos terciopersonales")
end
if defectivo then
insert(cats, "IT:Verbos defectivos")
end
local inc_enc
if sufijo_inf == "are" then
insert(cats, "IT:Verbos de la primera conjugación")
elseif sufijo_inf == "ere" then
insert(cats, "IT:Verbos de la segunda conjugación")
elseif sufijo_inf == "ire" then
insert(cats, "IT:Verbos de la tercera conjugación")
if not es_inco and not es_puro then
insert(cats, "IT:Verbos puros")
es_puro = true
inc_enc = "puro"
elseif es_inco and es_puro then
insert(cats, "IT:Verbos incoativos")
insert(cats, "IT:Verbos puros")
inc_enc = "incoativo/puro"
elseif es_inco then
insert(cats, "IT:Verbos incoativos")
inc_enc = "incoativo"
elseif es_puro then
insert(cats, "IT:Verbos puros")
inc_enc = "puro"
end
elseif sufijo_inf == "orre" then
insert(cats, "IT:Verbos de la cuarta conjugación")
elseif sufijo_inf == "urre" then
insert(cats, "IT:Verbos de la quinta conjugación")
end
local q_t = {es_irregular and "irregular" or "regular", auxiliares, inc_enc}
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..concat(q_t, ", ")..")",
t,
ns == 0 and cats or {})
end
return export
d606752r6wb9dgk9zyp6uo3m8hok9fm
Módulo:flex/pt
828
1055289
6117317
6077003
2026-06-06T16:46:12Z
TMCbot
164594
.
6117317
Scribunto
text/plain
-- Flexión de sustantivos, adjetivos y verbos
-- Autor: Tmagc
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local u = m_str.char
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local len = m_str.len
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_INF = m_flex.COLOR_INF
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local tilde = u(0x301)
local unaccented_vowel = "aeiouàAEIOUÀ"
local accented_vowel = "áéíóúýâêôÁÉÍÓÚÝÂÊÔ"
local maybe_accented_vowel = "ãõÃÕ"
local vowel = unaccented_vowel .. accented_vowel .. maybe_accented_vowel
local cons = "bcdfghjklmnpqrstvwxyzçBCDFGHJKLMNPQRSTVWXYZÇ"
local V = "[" .. vowel .. "]"
local AV = "[" .. accented_vowel .. "]"
local NAV = "[^" .. accented_vowel .. "]"
local C = "[" .. cons .. "]"
local espacios = "%s"
local espacios_o_guiones = "%-‐%s"
local ESPACIO = "["..espacios.."]"
local ESPACIO_O_GUION = "["..espacios_o_guiones.."]"
local LETRA = "[^"..espacios.."]"
local agregar_tilde =
{
["a"] = "á",
["e"] = "é",
["i"] = "í",
["o"] = "ó",
["u"] = "ú",
["á"] = "á",
["é"] = "é",
["í"] = "í",
["ó"] = "ó",
["ú"] = "ú",
["A"] = "Á",
["E"] = "É",
["I"] = "Í",
["O"] = "Ó",
["U"] = "Ú",
["Á"] = "Á",
["É"] = "É",
["Í"] = "Í",
["Ó"] = "Ó",
["Ú"] = "Ú",
}
local quitar_tilde =
{
["á"] = "a",
["é"] = "e",
["í"] = "i",
["ó"] = "o",
["ú"] = "u",
["a"] = "a",
["e"] = "e",
["i"] = "i",
["o"] = "o",
["u"] = "u",
["Á"] = "A",
["É"] = "E",
["Í"] = "I",
["Ó"] = "O",
["Ú"] = "U",
["A"] = "A",
["E"] = "E",
["I"] = "I",
["O"] = "O",
["U"] = "U",
}
local remove_accent = {
["á"]="a", ["é"]="e", ["í"]="i", ["ó"]="o", ["ú"]="u", ["ý"]="y", ["â"]="a", ["ê"]="e", ["ô"]="o",
["Á"]="A", ["É"]="E", ["Í"]="I", ["Ó"]="O", ["Ú"]="U", ["Ý"]="Y", ["Â"]="A", ["Ê"]="E", ["Ô"]="O"
}
local function es_locucion(tit, cop)
return find(tit, LETRA..ESPACIO_O_GUION..LETRA) or (cop ~= nil and find(tit, LETRA..ESPACIO_O_GUION..LETRA))
end
local function try(p, nexo, m, pl, f, fpl, g, s)
if s == true then
if pl == "es" then
pl = "s"
end
end
local r, n, suf = match(p, "^(.-)("..nexo..")("..m..")$")
if suf then
if type(n) ~= "string" then
n = ""
end
if type(suf) ~= "string" then
suf = ""
end
if pl and find(pl, "#") then
if g == "mf" and f then
return {m={r.."~"..n..suf.."~"}, p={r..n..pl}, f={r..n..f}, fp={r..n..fpl}}
elseif pl then
return {m={r.."~"..n..suf.."~"}, p={r..n..pl}, f={}, fp={}}
else
return {m={r.."~"..n..suf.."~"}, p={}, f={}, fp={}}
end
else
if g == "mf" and f then
return {m={r.."~"..n..suf.."~"}, p={r.."~"..n..pl.."~"}, f={r.."~"..n..f.."~"}, fp={r.."~"..n..fpl.."~"}}
elseif pl then
return {m={r.."~"..n..suf.."~"}, p={r.."~"..n..pl.."~"}, f={}, fp={}}
else
return {m={r.."~"..n..suf.."~"}, p={}, f={}, fp={}}
end
end
end
return nil
end
local function flexionar_palabra(p, g, forzar_s)
local r, v, s = match(p, "^(.*)("..AV..")(.-n)$")
if s then
local w = remove_accent[v]
if g == "mf" then
if forzar_s then
return {m={r.."~"..v..s.."~"}, p={r.."#"..w..s.."s#"}, f={r.."~"..v..s.."a~"}, fp={r.."~"..v..s.."as~"}}
else
return {m={r.."~"..v..s.."~"}, p={r.."~"..v..s.."es~", r.."~"..w..s.."s~"}, f={r.."~"..v..s.."a~"}, fp={r.."~"..v..s.."as~"}}
end
else
if forzar_s then
return {m={r.."~"..v..s.."~"}, p={r.."#"..w..s.."s#"}, f={}, fp={}}
else
return {m={r.."~"..v..s.."~"}, p={r.."~"..v..s.."es~", r.."~"..w..s.."s~"}, f={}, fp={}}
end
end
end
r, v, s = match(p, "^(.*[aeiou])([íú])(s)$") -- [[país]]
if v then
if g == "mf" then
return {m={r.."~"..v..s.."~"}, p={r.."~"..v.."ses~"}, f={r.."~"..v.."sa~"}, fp={r.."~"..v.."sas~"}}
else
return {m={r.."~"..v..s.."~"}, p={r.."~"..v.."ses~"}, f={}, fp={}}
end
end
r, v, s = match(p, "^(.*)(" .. AV .. ")(s)$") -- final -ês, -ós etc.
if v then
local w = remove_accent[v]
if g == "mf" then
return {m={r.."~"..v..s.."~"}, p={r.."~"..w.."ses~"}, f={r.."~"..w.."sa~"}, fp={r.."~"..w.."sas~"}}
else
return {m={r.."~"..v..s.."~"}, p={r.."~"..w.."ses~"}, f={}, fp={}}
end
end
local changed = try(p, "", "ão", forzar_s and "#ãos#" or "ões", forzar_s and "#ã#" or "ona", forzar_s and "#ãs#" or "onas", g, s)
or try(p, AV .. ".*", "[ei]l", "eis", nil, nil, g, s) -- final unstressed -el or -il: inábil, imcerivel
or try(p, "", "el", "éis", nil, nil, g, s) -- final stressed -el: cartel
or try(p, "", "il", "is", nil, nil, g, s) -- final stressed -il: hostil
or try(p, AV .. ".*", "ol", "ois", nil, nil, g, s) -- final unstressed -ol
or try(p, "", "ol", "óis", "ola", "olas", g, s) -- final stressed -ol: espanhol (otras como mongol son comunes en género)
or try(p, V, "l", "is", nil, nil, g, s) -- any other vowel + -l: escencial, baul, etc. sin femenino
or try(p, "", "m", "ns", nil, nil, g, s) -- final -m: jovem, asumo que es invariante aunque para bom sería boa?
or try(p, "or", "", forzar_s and "#s#" or "es", "a", "as", g, s) -- -or con femenino (tutor)
or try(p, "[rz]", "", forzar_s and "#s#" or "es", nil, nil, g, s) -- final -r or -z
or try(p, "", "eu", "eus", "eia", "eias", g, s)
or try(p, "", "u", "us", "ua", "uas", g, s)
or try(p, "", "o", "os", "a", "as", g, s)
or try(p, V, "", "s", nil, nil, g, s) -- final vowel
or try(p, AV .. ".*", "[ui]s", nil, nil, nil, g, s) -- final unstressed -us or -is
or try(p, C, "[ui]s", "es", "a", "as", g, s) -- final stressed -us or -is after consonant
or try(p, "", "[ui]s", nil, nil, nil, g, s) -- final stressed -us or -is after vowel
or try(p, "[sx]", "", nil, nil, nil, g, s)
or try(p, "ch", "", forzar_s and "#s#" or "es", nil, nil, g, s) -- extranjerismos
or try(p, "n", "", forzar_s and "#s#" or "es", "a", "as", g, s)
or try(p, C, "", "s", nil, nil, g, s) -- extranjerismos
assert(changed, "No se pudo determinar la flexión de la palabra")
return changed
end
local function flexion_sust_adj(palabras, g, forzar_s, copulativa)
local a, separador, b
if copulativa == true or copulativa == false then
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO_O_GUION..")("..LETRA.."+)$")
else
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
end
if b then
if copulativa == nil then
error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"")
end
local flex1 = flexionar_palabra(a, g, forzar_s)
local flex2 = copulativa and flexionar_palabra(b, g, forzar_s) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto
if copulativa == false then
p, resto = match(palabras, "^(%-?[^"..espacios_o_guiones.."]+)(.-)$")
else
p, resto = match(palabras, "^("..LETRA.."+)(.-)$")
end
local flex = flexionar_palabra(p, g, forzar_s)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
end
local cop -- = modo == "irreg" and false or args["cop"] falla...
if modo == "irreg" then
cop = false
else
cop = args["cop"]
end
local flex_ = flexion_sust_adj(title, modo, args["s"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." regulares")
elseif es_locucion(title, args["cop"]) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["n"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
return formatear_sust_adj(frame, title, ns, args, es_locucion(title, args["cop"]) and "PT:Locuciones sustantivas" or "PT:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
args[1] = args[1] or "mf"
return formatear_sust_adj(frame, title, ns, args, es_locucion(title, args["cop"]) and "PT:Locuciones adjetivas" or "PT:Adjetivos")
end
local EU, TU, ELE, NOS, VOS, ELES = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"eu", "tu", "ele, ela, você", "nós", "vós", "vocês, eles, elas"}
local PRONOMBRES_INF = {"por eu", "por tu", "por ele, por ela, por você", "por nós", "por vós", "por vocês, por eles, por elas"}
local PRONOMBRES_SUBJ = {"que eu", "que tu", "que ele, que ela, que você", "que nós", "que vós", "que vocês, que eles, que elas"}
local PRONOMBRES_IMP = {"―", "(tu)", "(você)", "(nós)", "(vós)", "(vocês)"}
local IMPERSONALES_INF = {"", "", "(por isso)", "", "", "(por issos)"}
local IMPERSONALES = {"", "", "(isso)", "", "", "(issos)"}
local IMPERSONALES_SUBJ = {"", "", "(que isso)", "", "", "(que issos)"}
local REFLEXIVOS = {"me", "te", "se", "nos", "vos", "se"}
local formas_no_personales = {
["inf"] = true,
["ger"] = true,
["part"] = true,
}
local formas_personales = {
["inf_pers"] = true,
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["ind_pluperf"] = true,
["ind_fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["subj_fut"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["inf_pers_comp"] = true,
["ind_perf_comp"] = true,
["ind_pluperf_comp"] = true,
["ind_anter"] = true,
["ind_fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
["subj_fut_comp"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local antepuesto = {
["subj_pres"] = true,
["subj_imp"] = true,
["subj_fut"] = true,
["subj_perf"] = true,
["subj_imp_comp"] = true,
["subj_fut_comp"] = true,
}
local interpuesto = {
["ind_fut"] = true,
["ind_fut_comp"] = true,
["cond"] = true,
["cond_comp"] = true
}
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^inf_pers") then
return IMPERSONALES_INF[p]
end
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^inf_pers") then
return PRONOMBRES_INF[p]
elseif find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local sufijos = {
{ -- ar
["ger"] = {"ando"},
["part"] = {"ado"},
["inf_pers"] = {"ar", "ares", "ar", "armos", "ardes", "arem"},
["ind_pres"] = {"o", "as", "a", "amos", "ais", "am"},
["ind_imp"] = {"ava", "avas", "ava", "ávamos", "áveis", "avam"},
["ind_perf"] = {"ei", "aste", "ou", "amos{BR}", "astes", "aram",
nil, nil, nil, "ámos{PT}", nil, nil},
["ind_perf_alt"] = {"ei", "aste", "ou", "amos{BR}", "astes", "aram",
nil, nil, nil, "ámos{PT}", nil, nil},
["ind_pluperf"] = {"ara", "aras", "ara", "áramos", "áreis", "aram"},
["ind_fut"] = {"arei", "arás", "ará", "aremos", "areis", "arão"},
["subj_pres"] = {"e", "es", "e", "emos", "eis", "em"},
["subj_imp"] = {"asse", "asses", "asse", "ássemos", "ásseis", "assem"},
["subj_fut"] = {"ar", "ares", "ar", "armos", "ardes", "arem"},
["cond"] = {"aria", "arias", "aria", "aríamos", "aríeis", "ariam"},
["imper"] = {"-", "a", "e", "emos", "ai", "em"}
},
{ -- er
["ger"] = {"endo"},
["part"] = {"ido"},
["inf_pers"] = {"er", "eres", "er", "ermos", "erdes", "erem"},
["ind_pres"] = {"o", "es", "e", "emos", "eis", "em"},
["ind_imp"] = {"ia", "ias", "ia", "íamos", "íeis", "iam"},
["ind_perf"] = {"i", "este", "eu", "emos", "estes", "eram"},
["ind_perf_alt"] = {"e", "este", "e", "emos", "estes", "eram"},
["ind_pluperf"] = {"era", "eras", "era", "êramos", "êreis", "eram"},
["ind_fut"] = {"erei", "erás", "erá", "eremos", "ereis", "erão"},
["subj_pres"] = {"a", "as", "a", "amos", "ais", "am"},
["subj_imp"] = {"esse", "esses", "esse", "êssemos", "êsseis", "essem"},
["subj_fut"] = {"er", "eres", "er", "ermos", "erdes", "erem"},
["cond"] = {"eria", "erias", "eria", "eríamos", "eríeis", "eriam"},
["imper"] = {"-", "e", "a", "amos", "ei", "am"}
},
{ -- ir
["ger"] = {"indo"},
["part"] = {"ido"},
["inf_pers"] = {"ir", "ires", "ir", "irmos", "irdes", "irem"},
["ind_pres"] = {"o", "es", "e", "imos", "is", "em"},
["ind_imp"] = {"ia", "ias", "ia", "íamos", "íeis", "iam"},
["ind_perf"] = {"i", "iste", "iu", "imos", "istes", "iram"},
["ind_perf_alt"] = {"e", "este", "e", "emos", "estes", "eram"},
["ind_pluperf"] = {"ira", "iras", "ira", "íramos", "íreis", "iram"},
["ind_fut"] = {"irei", "irás", "irá", "iremos", "ireis", "irão"},
["subj_pres"] = {"a", "as", "a", "amos", "ais", "am"},
["subj_imp"] = {"isse", "isses", "isse", "íssemos", "ísseis", "issem"},
["subj_fut"] = {"ir", "ires", "ir", "irmos", "irdes", "irem"},
["cond"] = {"iria", "irias", "iria", "iríamos", "iríeis", "iriam"},
["imper"] = {"-", "e", "a", "amos", "i", "am"}
},
{ -- or
["ger"] = {"ondo"},
["part"] = {"osto"},
["inf_pers"] = {"or", "ores", "or", "ormos", "ordes", "orem"},
["ind_pres"] = {"onho", "ões", "õe", "omos", "ondes", "õem"},
["ind_imp"] = {"unha", "unhas", "unha", "únhamos", "únheis", "unham"},
["ind_perf"] = {"us", "useste", "ôs", "usemos", "usestes", "useram"},
["ind_perf_alt"] = {"e", "este", "e", "emos", "estes", "eram"},
["ind_pluperf"] = {"usera", "useras", "usera", "uséramos", "uséreis", "useram"},
["ind_fut"] = {"orei", "orás", "orá", "oremos", "oreis", "orão"},
["subj_pres"] = {"onha", "onhas", "onha", "onhamos", "onhais", "onham"},
["subj_imp"] = {"usesse", "usesses", "usesse", "uséssemos", "usésseis", "usessem"},
["subj_fut"] = {"user", "useres", "user", "usermos", "userdes", "userem"},
["cond"] = {"oria", "orias", "oria", "oríamos", "oríeis", "oriam"},
["imper"] = {"-", "õe", "onha", "onhamos", "onde", "onham"}
},
}
local auxiliar = {
["inf_comp"] = {"ter"},
["ger_comp"] = {"tendo"},
["inf_pers_comp"] = {"ter", "teres", "ter", "termos", "terdes", "terem"},
["ind_perf_comp"] = {"tenho", "tens", "tem", "temos", "tendes", "têm"},
["ind_pluperf_comp"] = {"tinha", "tinhas", "tinha", "tínhamos", "tínheis", "tinham"},
["ind_anter"] = {"tive", "tiveste", "teve", "tivemos", "tivestes", "tiveram"},
["ind_fut_comp"] = {"terei", "terás", "terá", "teremos", "tereis", "terão"},
["cond_comp"] = {"teria", "terias", "teria", "teríamos", "teríeis", "teriam"},
["subj_perf"] = {"tenha", "tenhas", "tenha", "tenhamos", "tenhais", "tenham"},
["subj_pluperf"] = {"tivesse", "tivesses", "tivesse", "tivéssemos", "tivésseis", "tivessem"},
["subj_fut_comp"] = {"tiver", "tiveres", "tiver", "tivermos", "tiverdes", "tiverem"}
}
local function obtener_sufijos(sufijo_inf, forma)
if sufijo_inf == "ar" then
return sufijos[1][forma]
elseif sufijo_inf == "er" then
return sufijos[2][forma]
elseif sufijo_inf == "ir" then
return sufijos[3][forma]
else
return sufijos[4][forma]
end
end
local paradigmas_regulares = {
["ar"] = {
{"complicar", {"car$"}, {
nexo = "c"
}},
{"frear", {"ear$"}, {
nexo = "e"
}},
{"chegar", {"gar$"}, {
nexo = "g"
}},
{"começar", {"çar$"}, {
nexo = "ç"
}},
{"amar", {"ar$"}, {
}},
},
["er"] = {
{"erguer", {"guer$"}, {
nexo = "gu"
}},
{"parecer", {"cer$"}, {
nexo = "c"
}},
{"proteger", {"ger$"}, {
nexo = "g"
}},
{"roer", {"oer$"}, {
nexo = "o"
}},
{"temer", {"er$"}, {
}},
},
["ir"] = {
{"argüir", {"güir$"}, {
nexo = "gü",
}},
{"delinqüir", {"qüir$"}, {
nexo = "qü",
}},
{"extorquir", {"quir$"}, {
nexo = "qu"
}},
{"distinguir", {"guir$"}, {
nexo = "gu"
}},
{"produzir", {"uzir$"}, {
nexo = "z",
}},
{"ressarcir", {"cir$"}, {
nexo = "c"
}},
{"dirigir", {"gir$"}, {
nexo = "g"
}},
{"fluir", {"uir$"}, {
nexo = "u"
}},
{"partir", {"ir$"}, {
}},
},
["or"] = {
{"pôr", {"or$"}, {
}},
},
["ôr"] = {
{"pôr", {"ôr$"}, {
}}
}
}
local paradigmas_irregulares = {
["ar"] = {
{"dar", {"^dar$", "^redar$", "desdar$"}, { -- no pueden ir otros verbos como "andar o quedar"
nucleo = "d",
ind_pres = {{"dou"}, {"dás"}, {"dá"}, nil, nil, {"dão"}},
ind_perf = {sufijo_inf = "er", {"dei"}},
ind_pluperf = {sufijo_inf = "er"},
subj_pres = {{"dê"}, {"dês"}, {"dê"}, nil, nil, {"deem"}},
subj_imp = {sufijo_inf = "er"},
subj_fut = {sufijo_inf = "er"},
imper = {nil, {"dá"}, {"dê"}, nil, nil, {"deem"}}
}},
{"estar", {"^estar$", "^tar$"}, {
nucleo = "t",
ind_pres = {{"tou"}, {"tás"}, {"tá"}, nil, nil, {"tão"}},
ind_perf = {nucleo = "tiv", sufijo_inf = "er"},
ind_pluperf = {nucleo = "tiv", sufijo_inf = "er"},
subj_pres = {nucleo = "tej", sufijo_inf = "er"},
subj_imp = {nucleo = "tiv", sufijo_inf = "er"},
subj_fut = {nucleo = "tiv", sufijo_inf = "er"},
imper = {nil, {"tá"}, {"teja"}, {"tejamos"}, nil, {"tejam"}}
}},
{"ansiar", {"ansiar$"}, {
alt = {"ei-ei"},
}},
{"fraguar", {V.."guar$"}, {
nexo = "u", -- evitar que acentúe en la "u"
alt = {"´-´"},
}},
{"descafeinar", {"descafeinar$"}, {
alt = {"í-í"},
}},
{"saudar", {"saudar$"}, {
alt = {"ú-ú"},
}},
},
["er"] = {
{"caber", {"^caber$"}, {
nucleo = "cab",
nucleos1 = {"caib"},
ind_perf = {nucleo = "coub"},
ind_pluperf = {nucleo = "coub"},
subj_imp = {nucleo = "coub"},
subj_fut = {nucleo = "coub"},
}},
{"dizer", {"dizer$"}, {
nucleo = "diz",
nucleos1 = {"dig"},
part = {"dito"},
ind_pres = {nil, nil, {"diz"}},
ind_perf = {nucleo = "diss"},
ind_pluperf = {nucleo = "diss"},
subj_imp = {nucleo = "diss"},
subj_fut = {nucleo = "diss"},
ind_fut = {nucleo = "di", nexo="#r#"},
cond = {nucleo = "di", nexo="#r#"},
imper = {nil, {"diz", "dize"}}
}},
{"fazer", {"fazer$"}, {
nucleo = "faz",
nucleos1 = {"faç"},
part = {"feito"},
ind_pres = {nil, nil, {"faz"}},
ind_perf = {nucleo = "fiz", nil, nil, {"fez"}},
ind_pluperf = {nucleo = "fiz"},
subj_imp = {nucleo = "fiz"},
subj_fut = {nucleo = "fiz"},
ind_fut = {nucleo = "fa", nexo = "#r#"},
cond = {nucleo = "fa", nexo = "#r#"},
imper = {nil, {"faz", "faze"}},
}},
{"haver", {"^haver$", "^reaver$"}, {
nucleo = "av",
ind_pres = {{"ei"}, {"ás"}, {"á"}, nil, nil, {"ão"}},
ind_perf = {nucleo = "ouv"},
ind_pluperf = {nucleo = "ouv"},
subj_pres = {nucleo = "aj"},
subj_imp = {nucleo = "ouv"},
subj_fut = {nucleo = "ouv"},
imper = {nil, {"á{†}"}, {"aja{†}"}, {"ajamos{†}"}, {"avei{†}"}, {"ajam{†}"}},
}},
{"prazer", {"prazer$"}, {
nucleo = "praz",
ind_pres = {nil, nil, {"praz"}},
ind_perf = {nucleo = "prouv"},
ind_pluperf = {nucleo = "prouv"},
subj_imp = {nucleo = "prouv"},
subj_fut = {nucleo = "prouv"},
imper = {nil, {"praz", "praze"}}
}},
{"poder", {"poder$"}, {
nucleo = "pod",
nucleos1 = {"poss"},
ind_perf = {nucleo = "pud", nil, nil, {"pôde"}},
ind_pluperf = {nucleo = "pud"},
subj_imp = {nucleo = "pud"},
subj_fut = {nucleo = "pud"},
}},
{"querer", {"querer$"}, {
nucleo = "quer", -- no uso nucleos1 para que no sobreescriba ind_pres
ind_pres = {nil, nil, {"quer"}},
ind_perf = {nucleo = "quis", {"quis"}, nil, {"quis"}},
ind_pluperf = {nucleo = "quis"},
subj_pres = {nucleo = "queir"},
subj_imp = {nucleo = "quis"},
subj_fut = {nucleo = "quis"},
imper = {nil, {"quer"}, {"queira"}, {"queiramos"}, nil, {"queiram"}}
}},
{"rer", {"^rer$"}, { -- según infopédia
nucleos1 = {"rei"},
ind_pres = {nil, {"rês"}, {"rê"}, nil, {"redes"}, {"rêem"}},
imper = {nil, {"rê"}, nil, nil, {"rede"}}
}},
-- según infopédia, raer es regular y defectivo en las formas rizotónicas
{"romper", {"^romper$", "^arromper$"}, { -- no corromper, derromper, entrerromper
nucleo = "romp",
part = {"roto", "rompido"}
}},
{"saber", {"saber$"}, {
nucleo = "sab",
nucleos1 = {"saib"},
ind_pres = {{"sei"}},
ind_perf = {nucleo = "soub"},
ind_pluperf = {nucleo = "soub"},
subj_imp = {nucleo = "soub"},
subj_fut = {nucleo = "soub"},
}},
{"ser", {"^ser$"}, {
nucleos1 = {"sej"},
ind_pres = {{"sou"}, {"és"}, {"é"}, {"somos"}, {"sois"}, {"são"}},
ind_imp = {{"era"}, {"eras"}, {"era"}, {"éramos"}, {"éreis"}, {"eram"}},
ind_perf = {{"fui"}, {"foste"}, {"foi"}, {"fomos"}, {"fostes"}, {"foram"}},
ind_pluperf = {{"fora"}, {"foras"}, {"fora"}, {"fôramos"}, {"fôreis"}, {"foram"}},
subj_imp = {{"fosse"}, {"fosses"}, {"fosse"}, {"fôssemos"}, {"fôsseis"}, {"fossem"}}, -- no puedo poner "u" porque obtendría "fuyera"
subj_fut = {{"for"}, {"fores"}, {"for"}, {"formos"}, {"fordes"}, {"forem"}},
imper = {nil, {"sê"}, nil, nil, {"sede"}}
}},
{"ter", {"^ter$", "suster$", "manter$", "^ater$", "abster$", "obter$", "^reter$", "deter$", "conter$"}, {
nucleo = "t",
nucleos1 = {"tenh"},
ind_pres = {nil, {"tens"}, {"tem"}, nil, {"tendes"}, {"têm"}},
ind_imp = {nucleo = "tinh"},
ind_perf = {nucleo = "tiv"},
ind_pluperf = {nucleo = "tiv"},
subj_imp = {nucleo = "tiv"},
subj_fut = {nucleo = "tiv"},
imper = {nil, {"tem"}, nil, nil, {"tende"}}
}},
{"trazer", {"trazer$"}, {
nucleo = "traz",
nucleos1 = {"trag"},
ind_pres = {nil, nil, {"traz"}},
ind_perf = {nucleo = "troux"},
ind_pluperf = {nucleo = "troux"},
subj_imp = {nucleo = "troux"},
subj_fut = {nucleo = "troux"},
ind_fut = {nucleo = "tra", nexo = "#r#"},
cond = {nucleo = "tra", nexo = "#r#"},
imper = {nil, {"traz"}}
}},
{"ver", {"^ver$", "antever$", "entrever$", "prever$", "^rever$", "prover$"}, {
nucleo = "v",
nucleos1 = {"vej"},
part = {"visto"},
ind_pres = {nil, {"vês"}, {"vê"}, nil, {"vedes"}, {"veem"}},
ind_perf = {sufijo_inf = "ir"},
ind_pluperf = {sufijo_inf = "ir"},
subj_imp = {sufijo_inf = "ir"},
subj_fut = {sufijo_inf = "ir"},
imper = {nil, {"vê"}, nil, nil, {"vede"}}
}},
{"jazer", {"jazer$"}, {
nucleo = "jaz",
ind_pres = {nil, nil, "jaz"}
}},
{"ler", {"^ler$", "^reler$", "crer$"}, {
nucleo = "",
nucleos1 = {"ei"},
ind_pres = {nil, nil, {"ê"}, nil, {"edes"}, {"eem"}},
imper = {nil, {"ê"}, nil, nil, {"ede"}, nil}
}},
{"escrever", {"screver$"}, {
nucleo = "screv",
part = {"scrito"}
}},
{"morrer", {"morrer$"}, {
nucleo = "morr",
part = {"morrido", "morto"},
}},
{"valer", {"valer$"}, {
alt = {"h"},
}},
},
["ir"] = {
{"abrir", {"[^js]abrir$", "^abrir$"}, { -- abrir, cubrir y derivados, pero no "desabrir" ni "jabrir" (son regs.)
nucleo = "abr",
part = {"aberto"}
}},
{"cobrir", {"obrir$"}, { -- Parte 2. NOTA: no pueto tomar "br" como núcleo porque el programa piensa que es monosílabo y pone mal las tildes (cf. [[entreabrir]], [[reabrir]])
nucleo = "obr",
part = {"oberto"},
alt = {"u"},
}},
{"rir", {"^rir$", "sorrir$"}, {
nucleo = "r",
nucleos1 = {"ri"},
nucleos2 = {"ri"},
nucleos3 = {"ri"},
ind_pres = {nil, {"ris"}, {"ri"}, nil, {"rides"}},
imper = {nil, {"ri"}, nil, nil, {"ride"}, nil}
}},
{"imprimir", {"imprimir$"}, {
nucleo = "imprim",
part = {"imprimido", "impresso"}
}},
{"ir", {"^ir$"}, {
ind_pres = {{"vou"}, {"vais"}, {"vai"}, {"vamos"}, {"ides"}, {"vão"}},
ind_perf = {{"fui"}, {"foste"}, {"foi"}, {"fomos"}, {"fostes"}, {"foram"}},
ind_pluperf = {nexo = "#fo#", nil, nil, nil, {"fôramos"}, {"fôreis"}},
subj_pres = {{"vá"}, {"vás"}, {"vá"}, {"vamos"}, {"vades"}, {"vão"}},
subj_imp = {nexo = "#fo#", nil, nil, nil, {"fôssemos"}, {"fôsseis"}}, -- no puedo poner "u" porque obtendría "fuyera"
subj_fut = {nexo = "#fo#"},
imper = {nil, {"vai"}, {"vá"}, {"vamos"}, {"ide"}, {"vão"}}
}},
{"vir", {"^vir$", "^avir$", "advir$", "convir$", "contravir$", "devir$", "^desavir$", "entrevir$", "intervir$", "obvir$", "provir$", "^revir$", "sobrevir$"}, {
nucleo = "v",
nucleos1 = {"venh"},
ind_pres = {nil, {"vens"}, {"vem"}, nil, {"vindes"}, {"vêm"}},
ind_imp = {{"vinha"}, {"vinhas"}, {"vinha"}, {"vínhamos"}, {"vínheis"}, {"vinham"}},
ind_perf = {{"vim"}, {"vieste"}, {"veio"}, {"viemos"}, {"viestes"}, {"vieram"}},
ind_pluperf = {{"viera"}, {"vieras"}, {"viera"}, {"viéramos"}, {"viéreis"}, {"vieram"}},
subj_imp = {{"viesse"}, {"viesses"}, {"viesse"}, {"viéssemos"}, {"viésseis"}, {"viessem"}},
subj_fut = {{"vier"}, {"vieres"}, {"vier"}, {"viermos"}, {"vierdes"}, {"vierem"}},
imper = {nil, {"vem"}, nil, nil, {"vinde"}, nil}
}},
{"frigir", {"frigir$"}, {
nucleo = "fri",
part = {"frigido", "frito"},
alt = {"-e"},
}},
{"construir", {"construir$", "destruir$"}, {
nucleo = "tr",
ind_pres = {nil, {"tróis"}, {"trói"}, nil, nil, {"troem"}},
imper = {nil, {"trói"}},
}},
{"cair", {"air$"}, {
nucleo = "a",
alt = {"ai"},
ind_pres = {nil, {"ais"}, {"ai"}},
imper = {nil, {"ai"}},
}},
{"parir", {"parir$"}, {
alt = {"ai"},
}},
{"sentir", {"sentir$"}, {
alt = {"i"},
}},
{"agredir", {"gredir$"}, {
alt = {"i-i-i"}
}},
{"proibir", {"proibir$"}, {
alt = {"í-í"}
}},
{"reunir", {"reunir$"}, {
alt = {"ú-ú"}
}},
{"dormir", {"dormir$"}, {
alt = {"u"},
}},
{"polir", {"polir$"}, {
alt = {"u-u-u"},
}},
{"fugir", {"fugir$"}, { --fugir, bulir
alt = {"-o"},
}},
{"ouvir", {"ouvir$", "edir$"}, {
alt = {"ç"},
}},
{"arguir", {"arguir$"}, {
nexo = "GU",
}},
{"delinquir", {"delinquir$"}, {
nexo = "QU",
}},
},
["or"] = {
},
["ôr"] = {
}
}
local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf, forma)
if not nexo then
return sufijo
end
if sufijo_inf == "ar" then
if find(sufijo, "^[aeo][ms]?$") then
if nexo == "e" then
return "~ei~"..sufijo
end
end
if find(sufijo, "^[eiéí]") then
if nexo == "c" then
return "~qu~"..sufijo
end
if nexo == "g" then
return "g~u~"..sufijo
end
if nexo == "ç" then
return "~c~"..sufijo
end
end
else -- -er/-ir/-or
if sufijo == "e" and forma == "ind_pres" then
if nexo == "z" then
return "~z~"
end
end
if sufijo == "e" and forma == "imper" then
if nexo == "z" then
return "~z~", nexo..sufijo
end
end
if find(sufijo, "^er") then -- [[dizer]]
if nexo == "#r#" then
return nexo..sub(sufijo, 3)
end
end
if find(sufijo, "^[aouáóú]") then
if nexo == "c" then
return "~ç~"..sufijo
end
if nexo == "g" then
return "~j~"..sufijo
end
if nexo == "gu" then
return "~g~"..sufijo
end
if nexo == "gü" then
return "g~u~"..sufijo
end
if nexo == "qu" then
return "~c~"..sufijo
end
if nexo == "qü" then
return "q~u~"..sufijo
end
if nexo == "GU" then
return "#gu#"..sufijo
end
if nexo == "QU" then
return "#qu#"..sufijo
end
end
if find(sufijo, "^es?$") then
if nexo == "o" then
return "~ói~"..sub(sufijo, 2)
end
if nexo == "u" then
return nexo.."~i~"..sub(sufijo, 2)
end
if nexo == "gü" then -- arguir
return nexo.."~i~"..sub(sufijo, 2)
end
if nexo == "GU" then -- arguir
return "gu~i~"..sub(sufijo, 2)
end
end
if find(sufijo, "^is?$") then
if nexo == "gü" then -- arguir
return nexo.."~í~"..sub(sufijo, 2)
end
if nexo == "GU" then -- arguir
return "gu~í~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i") then
if nexo == "o" then
return "o~í~"..sub(sufijo, 2)
end
if nexo == "#fo#" then
return nexo..sub(sufijo, 2)
end
end
if (forma ~= "ind_fut" and forma ~= "cond") and find(sufijo, "^ir[ae]") or find(sufijo, "^i[^ru]") or find(sufijo, "^i$") then
if nexo == "u" then
return nexo.."~í~"..sub(sufijo, 2)
end
end
end
if nexo == "GU" then
return "gu"..sufijo
end
if nexo == "QU" then
return "qu"..sufijo
end
return nexo..sufijo
end
local function combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma)
local nucleo_ = gsub(nucleo, "[~#]", "")
local nexosufijo_ = gsub(nexosufijo, "[~#]", "")
if find(nucleo_, "i$") and find(nexosufijo_, "^i") then -- se juntan dos íes o y-i (ej. reír, freír, oír)
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1")
elseif forma ~= "ind_fut" and forma ~= "cond" and find(nucleo_, "^[^áéíóú]-[aeiou]h?$") and (find(nexosufijo_, "^h?[iu]"..C.."?[st]?[aeo]i?[mns]?$") or find(nexosufijo_, "^h?[iu]s?$")) then -- sufijo con i/u tónica (caISTE, caIMOS, caIDO, oID, reHÚyo etc.)
return nucleo..gsub1(nexosufijo, "^([~#]?h?)([iu])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif ((find(nucleo, "[iu]"..C.."#$") or find(nucleo, "[iu]ss#$")) and find(nexosufijo, "^ê")) or nucleo == "d" then -- pretéritos fuertes, estar, caber
return nucleo..gsub1(nexosufijo, "^([~#]?)ê", "%1é")
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
return prefijo..nucleonexosufijo
end
local alt_info = {
["ar"] = {
["ei-ei"] = {"ansiar", "[i]", "ei", "ei"},
["´-´"] = {"fraguar", "[aeiou]", "%2"..tilde, "%2"..tilde},
["í-í"] = {"descafeinar", "[i]", "í", "í"},
["ú-ú"] = {"saudar", "[u]", "ú", "ú"},
},
["er"] = {
["h"] = {"valer", "", "h"},
},
["ir"] = {
["-e"] = {"frigir", "[i]", nil, "e"},
["-o"] = {"fugir", "[u]", nil, "o"},
["ai"] = {"parir", "[a]", "ai"},
["i"] = {"sentir", "[e]", "i"},
["u"] = {"dormir", "[o]", "u"},
["ç"] = {"ouvir", ".", "ç"},
["í-í"] = {"proibir", "[i]", "í", "í"},
["ú-ú"] = {"reunir", "[u]", "ú", "ú"},
["u-u-u"] = {"polir", "[o]", "u", "u", "u"},
--["i-i"] = {"agredir", "[e]", "i", "i"},
["i-i-i"] = {"agredir", "[e]", "i", "i", "i"},
}
}
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo[forma].sufijo_inf or conjinfo.sufijo_inf
local sufijos_ = obtener_sufijos(sufijo_inf, (forma == "ind_perf" and conjinfo[forma].nucleo) and forma.."_alt" or forma)
local nucleos
if not conjinfo[forma].nucleo then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleo_inf
elseif forma == "part" then
nucleos = conjinfo.nucleo_inf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos3, conjinfo.nucleos3, conjinfo.nucleos1}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleos2, conjinfo.nucleos1, conjinfo.nucleos3, conjinfo.nucleo_inf, conjinfo.nucleos1}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n}
end
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for _, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[1], sufijo_inf, forma)
for _,nucleo in ipairs(nucleos) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma)))
end
end
return
end
for i = EU, ELES do
local p = tostr[i]
if conjinfo[forma][i] then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local k = i
while sufijos_[k] do
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, (conjinfo.v == "pôr" and sufijos_[k] == "or") and "ôr" or sufijos_[k], sufijo_inf, forma)
for _, n in ipairs(nucleos[i]) do
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo, forma)))
if nexosufijo2 then
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo2, forma)))
end
end
k = k + 6
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local art2 = fmtinfo.art2
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local arr = res[forma]
local t = {}
local es_no_personal = formas_no_personales[forma]
local tiempo, i = match(forma, "^(.*)(%d)$")
local j
if not i then
tiempo = forma
i = 1
j = 3
else
j = tonumber(i)
end
i = tonumber(i)
local rest_ = i < NOS and resto or resto_pl
local rest_pl_ = resto_pl
for _, v in ipairs(arr) do
local rest = rest_
local rest_pl = rest_pl_
if auxiliar[tiempo] then
rest = " "..v..rest
v = auxiliar[tiempo][i]
end
if antepuesto[tiempo] then
local pronart = pron == "se" and REFLEXIVOS[j].." " or ""
pronart = (art and art ~= "") and pronart..art2.." " or pronart
insert(t, adv..pronart..f_links(v)..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..f_links(v)..f_links(rest_pl))
end
elseif interpuesto[tiempo] then
local pronart = pron == "se" and "-"..REFLEXIVOS[j].."-" or ""
pronart = (art and art ~= "") and pronart..art.."-" or pronart
if pronart and pronart ~= "" then
v = gsub(v, "^(.*r)(.-)$", function(u, v) return u..pronart..v end)
end
insert(t, adv..f_links(v)..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..f_links(v)..f_links(rest_pl))
end
else -- pospuesto
local pronart = pron == "se" and "-"..REFLEXIVOS[j] or ""
if pronart ~= "" or (art and art ~= "") then
local subs
if (art2 and art2 ~= "") and pron ~= "se" then -- artículo, sin pronombre
v, subs = gsubb(v, "^(.*)[srz]$", "%1")
else
v, subs = gsubb(v, "mos$", "mo")
end
if subs then
pronart = pronart..((art2 and art2 ~= "") and "-"..art2 or "")
else
pronart = pronart..((art and art ~= "") and "-"..art or "")
end
v = v..pronart
end
if forma == "inf" or forma == "inf_pers" then
insert(t, adv..v..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..v..f_links(rest_pl))
end
else
insert(t, adv..f_links(v)..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..f_links(v)..f_links(rest_pl))
end
end
end
end
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["impersonal"] = {},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["alt"] = {lista = true},
["nucleopres1"] = {lista = true},
["nucleopres3"] = {lista = true},
["nucleosubj4"] = {lista = true},
["núcleopres1"] = {alias_de = "nucleopres1"},
["núcleopres3"] = {alias_de = "nucleopres3"},
["núcleosubj4"] = {alias_de = "nucleosubj4"},
["paradigma"] = {lista = true},
["nota"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local adv, r1 = match(tit, "^([sSnN][iã]o?"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeioô]r)%-?(s?e?)%-?(l?[aeo]?s?)(.-)$")
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[iã]?o?"..ESPACIO.."?"..LETRA.."*[aeioô]r%-?s?e?%-?l?[aeo]?s?(.-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
local art2 = ""
if art ~= "" then
assert(find(art, "^l"), "el artículo debe comenzar por l")
art2 = gsub(art, "^l", "")
end
local sufijo_inf = match(v, "[aeioô]r$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
for N = 1, math.max(1,
maxindex(args["paradigma"]),
maxindex(args["alt"]),
maxindex(args["nucleopres1"]),
maxindex(args["nucleopres3"]),
maxindex(args["nucleosubj4"])) do
local conjinfo = {}
local encontre_irreg = false
for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
conjinfo = deepcopy(p[3])
es_irregular = true
paradigmas_reconocidos[p[1]] = true
encontre_irreg = true
break
end
end
if encontre_irreg then
break
end
end
local encontre_reg = false
for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
for k, v in pairs(p[3]) do
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
end
end
paradigmas_reconocidos[p[1]] = true
encontre_reg = true
break
end
end
if encontre_reg then
break
end
end
assert(encontre_reg, "paradigma no reconocido")
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
if not conjinfo.nucleo_inf then
conjinfo.nucleo_inf = sub(v, 1, len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
conjinfo.prefijo = ""
elseif not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, len(v) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
if not conjinfo.prefijo then -- caso en el que cambié el núcleo
conjinfo.prefijo = ""
end
conjinfo.nucleos1 = conjinfo.nucleos1 or {}
conjinfo.nucleos2 = conjinfo.nucleos2 or {}
conjinfo.nucleos3 = conjinfo.nucleos3 or {}
conjinfo.alt = conjinfo.alt or {}
if args["alt"][N] then
insert_if_not(conjinfo.alt, args["alt"][N])
end
for i, a in ipairs(conjinfo.alt) do
if a ~= "REG" then
local n1, n2, n3
local info = alt_info[sufijo_inf][a]
assert(info, "Valor de alt no reconocido: "..a)
local sust
if info[3] then
n1, sust = gsubb(conjinfo.nucleo_inf, "^(.*)("..info[2]..")(.-)$", "%1#"..info[3].."#%3")
end
if info[4] then
n2, sust = gsubb(conjinfo.nucleo_inf, "^(.*)("..info[2]..")(.-)$", "%1#"..info[4].."#%3")
end
if info[5] then
n3, sust = gsubb(conjinfo.nucleo_inf, "^(.*)("..info[2]..")(.-)$", "%1#"..info[5].."#%3")
end
assert(sust, "Alternancia vocálica no reconocida")
if a == "´-´" then
insert_if_not(conjinfo.nucleos1, n1.."{BR}")
insert_if_not(conjinfo.nucleos2, n2.."{BR}")
insert_if_not(conjinfo.nucleos1, conjinfo.nucleo_inf.."{PT}")
insert_if_not(conjinfo.nucleos2, conjinfo.nucleo_inf.."{PT}")
else -- lo normal
insert_if_not(conjinfo.nucleos1, n1)
insert_if_not(conjinfo.nucleos2, n2)
insert_if_not(conjinfo.nucleos3, n3)
end
paradigmas_reconocidos[info[1]] = true
es_irregular = true -- si tengo el alt será siemrpe irregular, indistintamente de si el paradigma del mismo índice es regular
else
insert_if_not(conjinfo.nucleos1, conjinfo.nucleo_inf)
end
end
if args["nucleopres1"][N] then
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
end
if args["nucleopres3"][N] then
insert_if_not(conjinfo.nucleos2, args["nucleopres3"][N])
end
if args["nucleosubj4"][N] then
insert_if_not(conjinfo.nucleos3, args["nucleosubj4"][N])
end
if not conjinfo.nucleos3[1] then -- tengo que escribir primero este núcleo
if conjinfo.nucleos1[1] and not conjinfo.nucleos2[1] then
conjinfo.nucleos3[1] = gsub(conjinfo.nucleos1[1], "^[^#~]+$", "#%0#")
else
conjinfo.nucleos3[1] = conjinfo.nucleo_inf
end
else
conjinfo.nucleos3[1] = gsub(conjinfo.nucleos3[1], "^[^#~]+$", "#%0#")
end
if not conjinfo.nucleos1[1] then
conjinfo.nucleos1[1] = conjinfo.nucleo_inf
else
conjinfo.nucleos1[1] = gsub(conjinfo.nucleos1[1], "^[^#~]+$", "#%0#")
end
if not conjinfo.nucleos2[1] then
conjinfo.nucleos2[1] = conjinfo.nucleo_inf
else
conjinfo.nucleos2[1] = gsub(conjinfo.nucleos2[1], "^[^#~]+$", "#%0#")
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if (find(e, 'PART') or not find(e, 'ADJ')) and not find(e, "†") then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, art2=art2, resto=resto, resto_pl=resto_pl,impers=args["impersonal"]}
for _,s in ipairs(tostr) do
fmtinfo["subj_pres"..s] = deepcopy(resultante["subj_pres"..s])
end
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local impers = args["impersonal"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, impers)
end)
local cs, cs1, cs2, fila_pronombres_inf, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper
if impers == "3" then
fila_pronombres_inf = {"", "(por isso)", color=COLOR_INF, header=true, class="pc"}
fila_pronombres_ind = {"", "(isso)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(isso)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que isso)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(isso)", color=COLOR_IMPER, header=true, class="pc"}
cs = 2
elseif impers == "36" then
fila_pronombres_inf = {"", "(por isso)", "(por issos)", color=COLOR_INF, header=true, class="pc"}
fila_pronombres_ind = {"", "(isso)", "(issos)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(isso)", "(issos)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que isso)", "(que issos)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(isso)", "(issos)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_inf = {"", "por eu", "por tu", "por ele, por ela, por você", "por nós", "por vós", "por vocês, por eles, por elas", color=COLOR_INF, header=true, class="pc"}
fila_pronombres_ind = {"", "eu", "tu", "ele, ela, você", "nós", "vós", "vocês, eles, elas", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "eu", "tu", "ele, ela, você", "nós", "vós", "vocês, eles, elas", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que eu", "que tu", "que ele, que ela, que você", "que nós", "que vós", "que vocês, que eles, que elas", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tu)", "(você)", "(nós)", "(vós)", "(vocês)", color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = math.floor(cs / 2)
cs2 = cs - cs1
local t = {}
insert(t, {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true})
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
insert(t, {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf})
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger})
insert(t, {{"Participio", header=true, color=COLOR_NP}, resultante.part})
else
resultante.inf.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.part.colspan = cs1-1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
insert(t, {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp})
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp})
insert(t, {{"Participio", header=true, color=COLOR_NP}, resultante.part})
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
insert(t, {{"Formas personales", colspan=cs}, color=COLOR_H, header=true})
insert(t, {{"Modo infinitivo", colspan=cs}, color=COLOR_INF, header=true})
insert(t, fila_pronombres_inf)
if mostrar_imper then
insert(t, {{"Infinitivo simple", color=COLOR_INF, header=true}, ic("inf_pers")})
insert(t, {{"Infinitivo compuesto", color=COLOR_INF, header=true}, ic("inf_pers_comp")})
else
insert(t, {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de infinitivo personal", color=COLOR_IMPER, header=true, colspan=cs}})
end
insert(t, {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true})
insert(t, fila_pronombres_ind)
insert(t, {{"Presente", color=COLOR_IND, header=true}, ic("ind_pres")})
insert(t, {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")})
insert(t, {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("ind_perf")})
insert(t, {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")})
insert(t, {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("ind_perf_comp")})
insert(t, {{"Pretérito pluscuamperfecto compuesto", color=COLOR_IND, header=true}, ic("ind_pluperf_comp")})
insert(t, {{"Futuro", color=COLOR_IND, header=true}, ic("ind_fut")})
insert(t, {{"Futuro compuesto", color=COLOR_IND, header=true}, ic("ind_fut_comp")})
insert(t, {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("ind_anter")})
insert(t, {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true})
insert(t, fila_pronombres_cond)
insert(t, {{"Condicional simple", color=COLOR_COND, header=true}, ic("cond")})
insert(t, {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("cond_comp")})
insert(t, {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true})
insert(t, fila_pronombres_subj)
insert(t, {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")})
insert(t, {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")})
insert(t, {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")})
insert(t, {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")})
insert(t, {{f("Futuro"), color=COLOR_SUBJ, header=true}, ic("subj_fut")})
insert(t, {{f("Futuro compuesto"), color=COLOR_SUBJ, header=true}, ic("subj_fut_comp")})
insert(t, {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true})
insert(t, fila_pronombres_imper)
if mostrar_imper then
insert(t, {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")})
else
insert(t, {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}})
end
insert(t, {{f("Leyenda: † arcaico, x no normativo, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}})
args["nota"] = args["nota"] or ""
if args["impersonal"] == "utc3" then
args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "umc3" then
args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "utc36" then
args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
if args["impersonal"] == "umc36" then
args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
insert(t, {{args["nota"] and args["nota"] or "", colspan=cs}})
local paradigmas_t = {}
local cats = {}
if es_irregular then
insert(cats, "PT:Verbos irregulares")
paradigmas_reconocidos["amar"] = nil
paradigmas_reconocidos["temer"] = nil
paradigmas_reconocidos["partir"] = nil
paradigmas_reconocidos["pôr"] = nil
else
insert(cats, "PT:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "PT:Verbos del paradigma "..p)
end
impers = impers or ""
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "PT:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "PT:Verbos terciopersonales")
end
if find(impers, "^ind") then
insert(cats, "PT:Verbos de objeto indirecto")
end
if defectivo then
insert(cats, "PT:Verbos defectivos")
end
if sufijo_inf == "ar" then
insert(cats, "PT:Verbos de la primera conjugación")
elseif sufijo_inf == "er" then
insert(cats, "PT:Verbos de la segunda conjugación")
elseif sufijo_inf == "ir" then
insert(cats, "PT:Verbos de la tercera conjugación")
else
insert(cats, "PT:Verbos de la cuarta conjugación")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")",
t,
ns == 0 and cats or {})
end
return export
dz1vjicr5idx6o9zisxe40blakgrynd
Módulo:flex/ca
828
1055674
6117309
6109521
2026-06-06T16:45:50Z
TMCbot
164594
.
6117309
Scribunto
text/plain
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local max = math.max
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local size = m_table.size
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local len = m_str.len
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local unaccented_vowel = "aeiouïüAEIOUÏÜ"
local accented_vowel = "àèéíòóúÀÈÉÍÒÓÚ"
local vowel = unaccented_vowel .. accented_vowel
local cons = "bcdfghjklmnpqrstvwxyzçBCDFGHJKLMNPQRSTVWXYZÇ·"
local V = "[" .. vowel .. "]"
local AV = "[" .. accented_vowel .. "]"
local NAV = "[^" .. accented_vowel .. "]"
local UAV = "[" .. unaccented_vowel .. "]"
local C = "[" .. cons .. "]"
-- local LETRA = "[" .. vowel .. cons .. "]"
local espacios = "%s"
local espacios_o_guiones = "%-‐%s"
local ESPACIO = "["..espacios.."]"
local ESPACIO_O_GUION = "["..espacios_o_guiones.."]"
local LETRA = "[^"..espacios.."]"
local quitar_tilde =
{
["á"] = "a",
["é"] = "e",
["í"] = "i",
["ó"] = "o",
["ú"] = "u",
["à"] = "a",
["è"] = "e",
["ì"] = "i",
["ò"] = "o",
["ù"] = "u",
["a"] = "a",
["e"] = "e",
["i"] = "i",
["o"] = "o",
["u"] = "u",
["Á"] = "A",
["É"] = "E",
["Í"] = "I",
["Ó"] = "O",
["Ú"] = "U",
["À"] = "A",
["È"] = "E",
["Ì"] = "I",
["Ò"] = "O",
["Ù"] = "U",
["A"] = "A",
["E"] = "E",
["I"] = "I",
["O"] = "O",
["U"] = "U",
}
local tildar = {
["a"] = "à",
["e"] = "è",
["i"] = "í",
["o"] = "ò",
["u"] = "ú",
["ï"] = "í",
["A"] = "À",
["E"] = "È",
["I"] = "Í",
["O"] = "Ò",
["U"] = "Ú",
["Ï"] = "Í",
}
local function es_locucion(tit, cop)
return find(tit, LETRA..ESPACIO_O_GUION..LETRA) or (cop ~= nil and find(tit, LETRA..ESPACIO_O_GUION..LETRA))
end
local function try(p, rx, repl1, repl2)
local p2, sust = gsubb(p, rx, "~%0~")
if sust then
if not repl1 then
return {m={p2}, p={}, f={}, fp={}}
end
local a, sust = gsubb(p, rx, repl1)
if not repl2 then
return {m={p2}, p={a}, f={}, fp={}}
end
local b, sust2 = gsubb(p, rx, repl2)
if sust2 then
return {m={p2}, p={a, b}, f={}, fp={}}
end
return {m={p2}, p={a}, f={}, fp={}}
end
return nil
end
-- https://salt.gva.es/auto/ajuda-salt/puntuacio/plural_dels_substantius.html
local function forma_plural(word, genere, forzar_s)
local no_forzar_s = not forzar_s
local plural = try(word, "s[cpt]$", "~%0s~", no_forzar_s and "~%0os~" or nil)
or try(word, "xt$", "~xts~", no_forzar_s and "~xtos~" or nil)
or try(word, "ig$", "~igs~", no_forzar_s and "~jos~" or nil)
or try(word, "[aio]ç$", (genere == "ng" and no_forzar_s) and "~%0os~" or ((genere == "f" or forzar_s) and "~%0s~" or "~%0os~"), (genere == "ng" and no_forzar_s) and "~%0ces~" or nil)
or try(word, "([^g][aeou])í$", "~%1ïns~")
or try(word, "("..AV..")n?$", function(a) return "~"..quitar_tilde[a].."ns~" end)
or try(word, "[aou]n$", "~%1s~") -- estas también son agudas
or try(word, "^("..C.."*"..V..")n?$", "~%1ns~") -- no considero diptongos
or try(word, "^"..NAV.."*([aeiou])([^aeio]+[ei]n)$", function(a, b) return "~"..tildar[a]..b.."s~" end)
or try(word, "[aàeèéiíïoòóuú].-[aeiou]s$", nil) -- llanas o esdrújulas en -s
or try(word, "([eèóú])s$", function(a) return "~"..quitar_tilde[a].."sos~" end)
or try(word, "([^gq][au])ís$", "~%1ïsos~")
or try(word, "oís$", "~oïssos~")
or try(word, "("..AV..")s$", function(a) return "~"..quitar_tilde[a].."ssos~" end)
or try(word, "^("..C.."*"..V..")s$", "~%1ssos~") -- por las dudas no considero diptongos
or try(word, "^("..C.."*"..V..C.."+)s$", "~%1sos~")
or try(word, "ca$", "~ques~")
or try(word, "ga$", "~gues~")
or try(word, "ça$", "~ces~")
or try(word, "ja$", "~ges~")
or try(word, "([gq])ua$", "~%1ües~")
or try(word, "a$", "~es~")
or try(word, "x$", ((not genere or genere == "m") and not find(word, AV) and no_forzar_s) and "~xos~" or "~xs~")
or try(word, "ç$", forzar_s and "~çs~" or (genere == "f" and "~ces~" or "~ços~"))
or try(word, "ch$", forzar_s and "~chs~" or "~ches~")
or try(word, C.."[^"..vowel.."s]".."$", "~%0s~")
or try(word, "z$", "~zos~") -- REVISAR
or try(word, "[^s]$", "~%0s~")
if not plural then
return {m={word}, p={}, f={}, fp={}}
end
return plural
end
local function forma_femenina(head)
if find(head, "aire$")
or find(head, "ç$") -- audaz, feliz, dulce, etc.
or (find(head, V..".+[ae]l$") and not find(head, AV)) -- -al, -el agudo (tiene qe tener más de una sílaba)
or (find(head, "[aeo][ae]l$") and not find(head, AV)) -- -al, -el agudo (tiene qe tener más de una sílaba)
or find(head, "[^f]il$") -- -il agudo o llano
or find(head, V..".+ar$") -- escolar (varias sílabas y aguda)
or find(head, "[aeo]ar$") -- escolar (varias sílabas y aguda)
or find(head, "rior$") -- anterior
or find(head, V..".+[ae]nt$") -- constant
or find(head, "ble$") -- constant
or find(head, "a$") -- constant
then
return head
end
local fem = head
fem = gsub(fem, "([aeo])í$", "%1ïna")
fem = gsub(fem, "([^gq]u)í$", "%1ïna")
fem = gsub(fem, "([aeio])u$", "%1va")
-- fem = gsub(fem, "([aeiou])l$", "%1l·la") muy dudoso (cf [[cérvol]]), no recuerdo qué quise hacer acá
fem = gsub(fem, "[àèìòùáéíóú]$", function(v) return quitar_tilde[v].."na" end)
fem = gsub(fem, "o$", "a")
fem = gsub(fem, "ce$", "ça")
fem = gsub(fem, "que$", "ca")
fem = gsub(fem, "qüe$", "qua")
fem = gsub(fem, "ge$", "ja")
fem = gsub(fem, "gue$", "ga")
fem = gsub(fem, "güe$", "gua")
fem = gsub(fem, "e$", "a")
fem = gsub(fem, "p$", "ba")
fem = gsub(fem, "f$", "va")
if find(fem, "g$") then
fem = gsub(fem, "leg$", "loga")
fem = gsub(fem, "oig$", "oja")
fem = gsub(fem, "ig$", "tja")
elseif find(fem, "[ei]n$") and not find(fem, "[àèéíòóú]") then
fem = gsub(fem, "a([^aeio]+[ei]n)$", "à%1a")
fem = gsub(fem, "e([^aeio]+[ei]n)$", "è%1a")
fem = gsub(fem, "i([^aeio]+[ei]n)$", "í%1a")
fem = gsub(fem, "o([^aeio]+[ei]n)$", "ò%1a")
fem = gsub(fem, "u([^aeio]+[ei]n)$", "ú%1a")
elseif find(fem, "s$") then
fem = gsub(fem, "[aà]s$", "assa")
fem = gsub(fem, "ès$", "esa")
fem = gsub(fem, "és$", "essa")
fem = gsub(fem, "ís$", "issa")
fem = gsub(fem, "[oò]s$", "ossa")
fem = gsub(fem, "ós$", "osa")
fem = gsub(fem, "ús$", "usa")
end
fem = gsub(fem, "([aiïu])t$", "%1da")
fem = gsub(fem, "a(%l)i$", "à%1ia")
fem = gsub(fem, "i(%l)i$", "í%1ia")
if fem == head and not find(head, "a$") then
fem = head .. "a"
end
return fem
end
local function flexionar_palabra(p, g, s)
if g ~= "mf" then
return forma_plural(p, g, s)
end
local flex = forma_plural(p, "m", s)
local fem = forma_femenina(p)
local flex_f = forma_plural(fem, "f", s)
if not deepequals(flex, flex_f) then
flex.f = flex_f.m
flex.fp = flex_f.p
end
return flex
end
local function flexion_sust_adj(palabras, g, forzar_s, copulativa)
local a, separador, b
if copulativa == true or copulativa == false then
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO_O_GUION..")("..LETRA.."+)$")
else
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
end
if b then
if copulativa == nil then
error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"")
end
local flex1 = flexionar_palabra(a, g, forzar_s)
local flex2 = copulativa and flexionar_palabra(b, g, forzar_s) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto
if copulativa == false then
p, resto = match(palabras, "^(%-?[^"..espacios_o_guiones.."]+)(.-)$")
else
p, resto = match(palabras, "^("..LETRA.."+)(.-)$")
end
local flex = flexionar_palabra(p, g, forzar_s)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
end
local cop -- = modo == "irreg" and false or args["cop"] falla...
if modo == "irreg" then
cop = false
else
cop = args["cop"]
end
local flex_ = flexion_sust_adj(title, modo, args["s"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." regulares")
elseif es_locucion(title, args["cop"]) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["n"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local valido = {
["m"] = true,
["f"] = true,
["mf"] = true,
["n"] = true,
["ng"] = true,
["inv"] = true,
["s"] = true,
["p"] = true,
["irreg"] = true
}
assert(valido[args[1]], "Especifique el género del sustantivo en el primer parámetro: m, f, mf, ng, inv, s, p, irreg")
return formatear_sust_adj(frame, title, ns, args, es_locucion(title, args["cop"]) and "CA:Locuciones sustantivas" or "CA:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
args[1] = args[1] or "mf"
return formatear_sust_adj(frame, title, ns, args, es_locucion(title, args["cop"]) and "CA:Locuciones adjetivas" or "CA:Adjetivos")
end
local sufijos = {
["ar"] = { -- ar
["ger"] = {"ant"},
["part"] = {"at"},
["ind_pres"] = {"o", "es", "a", "em", "eu", "en",
"e", nil, nil, "am", "au", nil,
"i", nil, nil, nil, nil, nil,
"", nil, nil, nil, nil, nil},
["ind_imp"] = {"ava", "aves", "ava", "àvem", "àveu", "aven"},
["ind_perf"] = {"í", "ares", "à", "àrem", "àreu", "aren"},
["ind_perf_alt"] = {"é", "aste", "aste", "ó", "amos", "asteis"},
["ind_fut"] = {"aré", "aràs", "arà", "arem", "areu", "aran"},
["subj_pres"] = {"i", "is", "i", "em", "eu", "in",
"e", "es", "e", nil, nil, "en"},
["subj_imp"] = {"és", "essis", "és", "éssim", "éssiu", "essin",
"às", "esses", "às", "éssem", "ésseu", "essen",
"ara", "assis", "ara", "àssim", "àssiu", "assin",
nil, "asses", nil, "àssem", "àsseu", "assen",
nil, "ares", nil, "àrem", "àreu", "aren"},
["cond"] = {"aria", "aries", "aria", "aríem", "aríeu", "arien"},
["imper"] = {nil, "a", "i", "em", "eu", "in",
nil, nil, "e", nil, "au", "en"}
},
["er"] = { -- er
["ger"] = {"ent"},
["part"] = {"ut"},
["ind_pres"] = {"o", "s", "", "em", "eu", "en",
"i", nil, nil, nil, nil, nil,
"", nil, nil, nil, nil, nil},
["ind_imp"] = {"ia", "ies", "ia", "íem", "íeu", "ien"},
["ind_perf"] = {"í", "eres", "é", "érem", "éreu", "eren"},
["ind_perf_alt"] = {"é", "aste", "aste", "ó", "amos", "asteis"},
["ind_fut"] = {"eré", "eràs", "erà", "erem", "ereu", "eran"},
["subj_pres"] = {"i", "is", "i", "em", "eu", "in",
"a", "es", "a", nil, nil, "en"},
["subj_imp"] = {"és", "essis", "és", "éssim", "éssiu", "essin",
"era", "esses", "era", "éssem", "ésseu", "essen",
nil, "eres", nil, "érem", "éreu", "eren",},
["cond"] = {"eria", "eries", "eria", "eríem", "eríeu", "erien"},
["imper"] = {nil, "", "i", "em", "eu", "in",
nil, nil, "a", nil, nil, "en"}
},
["ir"] = { -- ir
["ger"] = {"int"},
["part"] = {"it"},
["ind_pres"] = {"o", "s", "", "im", "iu", "en",
"i", nil, nil, nil, nil, nil,
"", nil, nil, nil, nil, nil,},
["ind_imp"] = {"ia", "ies", "ia", "íem", "íeu", "ien"},
["ind_perf"] = {"í", "ires", "í", "írem", "íreu", "iren"},
["ind_perf_alt"] = {"é", "aste", "aste", "ó", "amos", "asteis"},
["ind_fut"] = {"iré", "iràs", "irà", "irem", "ireu", "iran"},
["subj_pres"] = {"i", "is", "i", "im", "iu", "in",
"a", "es", "a", "iguem", "igueu", "en",},
["subj_imp"] = {"ís", "issis", "ís", "íssim", "íssiu", "issin",
"ira", "isses", "ira", "íssem", "ísseu", "issen",
nil, "ires", nil, "írem", "íreu", "iren",},
["cond"] = {"iria", "iries", "iria", "iríem", "iríeu", "irien"},
["imper"] = {nil, "", "i", "im", "iu", "in",
nil, nil, "a", "iguem", nil, "en",},
},
["re"] = { -- -re, -dre
["ger"] = {"ent"},
["part"] = {"ut"},
["ind_pres"] = {"o", "s", "", "em", "eu", "en",
"i", nil, nil, nil, nil, nil,
"", nil, nil, nil, nil, nil},
["ind_imp"] = {"ia", "ies", "ia", "íem", "íeu", "ien"},
["ind_perf"] = {"í", "eres", "é", "érem", "éreu", "eren"},
["ind_perf_alt"] = {"é", "aste", "aste", "ó", "amos", "asteis"},
["ind_fut"] = {"ré", "ràs", "rà", "rem", "reu", "ran"},
["subj_pres"] = {"i", "is", "i", "em", "eu", "in",
"a", "es", "a", nil, nil, "en"},
["subj_imp"] = {"és", "essis", "és", "éssim", "éssiu", "essin",
"era", "esses", "era", "éssem", "ésseu", "essen",
nil, "eres", nil, "érem", "éreu", "eren",},
["cond"] = {"ria", "ries", "ria", "ríem", "ríeu", "rien"},
["imper"] = {nil, "", "i", "em", "eu", "in",
nil, nil, "a", nil, nil, "en"}
},
}
local pronombres = {"me", "te", "te", "se", "nos", "os", "se"}
local auxiliar = {
["inf_comp"] = {"haver"},
["ger_comp"] = {"havent"},
["ind_perf_comp"] = {"he", "has", "ha", "hem", "heu", "han",
nil, nil, nil, "havem", "haveu", nil,},
["ind_peri"] = {"vaig", "vas", "va", "vem", "vau", "van",
nil, "vares", nil, "vàrem", "vàreu", "varen",},
["ind_pluperf"] = {"havia", "havies", "havia", "havíem", "havíeu", "havien"},
["ind_anter"] = {"haguí", "hagueres", "hagué", "haguérem", "haguéreu", "hagueren",
"vaig haver", "vas haver", "va haver", "vem haver", "vau haver", "van haver",
nil, "vares haver", nil, "vàrem haver", "vàreu haver", "varen haver",},
["ind_fut_comp"] = {"hauré", "hubràs", "haurà", "haurem", "haureu", "hauran"},
["cond_comp"] = {"hauria", "hauries", "hauria", "hauríem", "hauríeu", "haurien",
"haguera", "hagueres", "haguera", "haguérem", "haguéreu", "hagueren",},
["subj_perf"] = {"hagi", "hagis", "hagi", "hàgim", "hàgiu", "hagin",
"haja", "hages", "haja", "hàgem", "hàgeu", "hagen",},
["subj_peri"] = {"vagi", "vagis", "vagi", "vàgim", "vàgiu", "vagin",
"vaja", "vages", "vaja", "vàgem", "vàgeu", "vagen",},
["subj_pluperf"] = {"hagués", "haguessis", "hagués", "haguéssim", "haguéssiu", "haguessin",
"haguera", "haguesses", "haguera", "haguéssem", "haguésseu", "haguessen",
nil, "hagueres", nil, "haguérem", "haguéreu", "hagueren",},
["subj_anter"] = {"vagi haver", "vagis haver", "vagi haver", "vàgim haver", "vàgiu haver", "vagin haver",
"vaja haver", "vages haver", "vaja haver", "vàgem haver", "vàgeu haver", "vagen haver",},
}
local JO, TU, ELL, NOSALTRES, VOSALTRES, ELLS = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"jo", "tu", "el, ella, vostè", "nosaltres", "vosaltres, vós", "ells, elles, vostès"}
local PRONOMBRES_SUBJ = {"que jo", "que tu", "que el, que ella, que vostè", "que nosaltres", "que vosaltres, que vós", "que ells, que elles, que vostès"}
local PRONOMBRES_IMP = {"―", "(tu)", "(vostè)", "(nosaltres)", "(vosaltres)", "(vostès)"}
local IMPERSONALES = {"", "", "", "(això)", "", "", "(ells)"}
local IMPERSONALES_SUBJ = {"", "", "", "(que això)", "", "", "(que elss)"}
local REFLEXIVOS_ANTEPUESTOS = {"em", "et", "es", "ens", "us", "es"}
local REFLEXIVOS_ANTEPUESTOS_CONTRAIDOS = {"m'", "t'", "s'", "ens ", "us ", "s'"}
local REFLEXIVOS_POSPUESTOS = {"-me", "-te", "-se", "-nos", "-vos", "-se"}
local REFLEXIVOS_POSPUESTOS_CONTRAIDOS = {"'m", "'t", "'s", "-nos", "-vos", "'s"}
local formas_no_personales = {
["ger"] = true,
["part"] = true,
["inf"] = true,
}
local formas_personales = {
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["ind_fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["ind_perf_comp"] = true,
["ind_pluperf"] = true,
["ind_peri"] = true,
["ind_anter"] = true,
["ind_fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
["subj_peri"] = true,
["subj_anter"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local paradigmas_regulares = {
["ar"] = {
{"adequar", {"quar$"}, {
nexo = "qu"
}},
{"averiguar", {"guar$"}, {
nexo = "gu"
}},
{"evacuar", {"[^aeiougq]uar$"}, {
nexo = "u",
}},
{"emproar", {"oar$"}, {
nexo = "o",
}},
{"desmaiar", {"[aeou]iar$"}, {
nexo = "I",
}},
{"acariciar", {"[^aeiou]iar$"}, {
nexo = "i",
}},
{"pujar", {"[aeiou]jar$"}, {
nexo = "J",
}},
{"viatjar", {"jar$"}, {
nexo = "j",
}},
{"alçar", {"çar$"}, {
nexo = "ç",
}},
{"educar", {"car$"}, {
nexo = "c",
}},
{"jugar", {"gar$"}, {
nexo = "g",
}},
{"amar", {"ar$"}, {
}},
},
["er"] = {
{"vèncer", {"cer$"}, {
nexo = "c",
}},
{"témer", {"er$"}, {
}},
},
["ir"] = {
{"fugir", {"fugir$"}, { -- NO es irregular, es un cambio ortográfico. Lo que pasa es que es el único que no es inco.
nexo = "g",
}},
{"trair", {"air$"}, {
nexo = "a"
}},
{"trair", {"eir$"}, {
nexo = "e"
}},
{"trair", {"oir$"}, {
nexo = "o"
}},
{"trair", {"uir$"}, {
nexo = "u"
}},
{"argüir", {"üir$"}, {
nexo = "ü"
}},
{"partir", {"ir$"}, {
}},
},
["re"] = {
{"concebre", {"bre$"}, {
nexo = "b"
}},
{"abatre", {"re$"}, {
}},
},
["ur"] = {
{"dur", {"dur$"}, { -- para que no tire error el módulo
}},
}
}
-- partir: paradigma modelo inco
-- dormir: paradigma modelo puro
local verbos_puros = {
"ajupir$", "buixir$", "bullir$", "cruixir$", "dormir$", "funyir$", "grunyir$", "munyir$", "pudir$", "punyir$",
"retrunyir$", "^sentir$", "pressentir$", "^ressentir$", "collir$", "cosir$", "^eixir$", "[^t]eixir$", "escopir$", "fugir$",
"morir$", "^obrir$", "reobrir$", "entreobrir$", "omplir$", "[^c]omplir$", "pruir$", "^sortir$", "[^a][^s]sortir$", "tossir$"}
local verbos_mixtos = {
"acudir$", "arrupir$", "brumir$", "brunzir$", "consumir$", "^resumir$", "presumir$", "mentir$", "percudir$", "consentir$",
"lluir$"}
-- los que quedan son incoativos
local paradigmas_irregulares = {
["ar"] = {
{"aguar", {"^aguar$"}, {
nexo = "GU",
}},
{"anar", {"^anar$"}, { -- cuidado con mandar
nucleopres = {"vaj-vaj"},
ind_pres = {{"vaig"}, {"vas"}, {"va"}, nil, nil, {"van"}},
ind_fut = {{"aniré", "iré"}, {"aniràs", "iràs"}, {"anirà", "irà"}, {"anirem", "irem"}, {"anireu", "ireu"}, {"aniran", "iran"}},
cond = {{"aniria", "iria"}, {"aniries", "iries"}, {"aniria", "iria"}, {"aniríem", "iríem"}, {"aniríeu", "iríeu"}, {"anirien", "irien"}},
imper = {nil, {"vés"}},
}},
{"dar", {"^dar$", "^desdar$"}, { -- no pueden ir otros verbos como "andar o quedar"
nucleo = "d",
ind_pres = {{"do"}, {"das"}, {"da"}, nil, nil, {"dan"}},
subj_pres = {{"de"}, {"des"}, {"de"}, nil, nil, {"den"}},
imper = {nil, {"da"}, {"de"}, nil, {"deu"}, {"den"}}
}},
{"estar", {"^estar$"}, {
ind_pres = {{"estic"}, {"estàs"}, {"està"}, nil, nil, {"estan"}},
subj_pres = {{"estigui", "estiga"}, nil, {"estigui", "estiga"}},
ind_perf = {{"estiguí"}, {"estigueres"}, {"estigué"}, {"estiguérem"}, {"estiguéreu"}, {"estigueren"}},
nucleopres = {"estig"},
part = {"estat"}, -- necesario sobrescribir por la asignación de núcleos
imper = {nil, {"estigues"}, {"estigui", "estiga"}, nil, {"estigueu"}}
}},
},
["er"] = {
-- caler regular imeprs
{"soler", {"^soler$"}, {
nucleopres = {"g"},
}},
{"voler", {"voler$"}, {
nucleopres = {"vulg"},
nucleoperf = {"volg"},
ind_pres = {{"vull"}},
imper = {nil, {"vulgues"}, nil, nil, {"vulgueu"}},
nucleofut = {"voldr"},
}},
{"valer", {"ler$"}, {
nucleopres = {"g"},
nucleofut = {"ldr"},
}},
{"atènyer", {"^atènyer$", "^empènyer$", "^espènyer$"}, {
nucleo = "èny",
part = {"ès"},
}},
{"estrènyer", {"strènyer$"}, {
part = {"stret"},
nucleoperf = {"streng", "streny"},
}},
{"fènyer", {"fènyer$", "plànyer$", "pertànyer$"}, {
nucleo = "ny",
part = {"ngut", "nyut"},
nodial = true,
}},
-- júnyer es junyir
{"saber", {"saber$"}, {
ind_pres = {{"sé"}},
nucleofut = {"sabr"},
subj_pres = {{"sàpiga", "sàpia"}, {"sàpigues", "sàpies"}, {"sàpiga", "sàpia"}, {"sapiguem", "sapiem"}, {"sapigueu", "sapieu"}, {"sàpiguen", "sàpien"}},
imper = {nil, {"sàpigues", "sàpies"}, {"sàpiga", "sàpia"}, {"sapiguem", "sapiem"}, {"sapigueu", "sapieu"}, {"sàpiguen", "sàpien"}}
}},
{"conèixer", {"conèixer$"}, {
part = {"conegut"},
nucleopres = {"coneg"},
}},
{"créixer", {"créixer$"}, {
part = {"crescut"},
nucleoperf = {"cresqu", "REG"},
subj_pres = {{"creixi", "cresca"}, {"creixis", "cresques"}, {"creixi", "cresca"}, {"creixem", "cresquem"}, {"creixeu", "cresqueu"}, {"creixin", "cresquen"}},
imper = {nil, nil, {"creixi", "cresca"}, {"creixem", "cresquem"}, nil, {"creixin", "cresquen"}}
}},
{"merèixer", {"merèixer$", "^irèixer"}, {-- cambia la tilde
nucleo = "rèix",
part = {"rescut"},
nucleoperf = {"resqu", "REG"},
subj_pres = {{"reixi", "resca"}, {"reixis", "resques"}, {"reixi", "resca"}, {"reixem", "resquem"}, {"reixeu", "resqueu"}, {"reixin", "resquen"}},
imper = {nil, nil, {"reixi", "resca"}, {"reixem", "resquem"}, nil, {"reixin", "resquen"}}
}},
{"parèixer", {"parèixer$"}, {--REV, aparèixer
nucleopres = {"pareg"},
}},
{"néixer", {"néixer$", "péixer$"}, {
nucleo = "éix",
nucleopresa = {"aix"},
part = {"ascut"},
ind_imp = {nucleo = "aix"},
nucleoperf = {"asqu", "aix"},
nucleofut = {"aix"},
nodial = true,
}},
{"néixer", {"nàixer$", "pàixer$"}, {
nucleo = "àix",
part = {"ascut"},
nucleoperf = {"asqu", "aix"},
subj_pres = {{"asca", "aixi"}, {"asques", "aixis"}, {"asca", "aixi"}, {"aixem", "asquem"}, {"aixeu", "asqueu"}, {"asquen", "aixin"}},
imper = {nil, nil, {"asca"}, {"aixem", "asquem"}, nil, {"asquen"}},
nodial = true,
}},
{"poder", {"poder$"}, {
nucleopres = {"pug"},
nucleoperf = {"pog"},
nucleofut = {"podr"},
imper = {nucleo = false}
}},
{"caber", {"caber$"}, { -- es cabre
nucleo = false,
}},
{"córrer", {"córrer$"}, {
part = {"corregut"},
ind_pres = {{"corro", "córrec", "corri", "corr"}},
subj_pres = {{"corri", "córrega"}, {"corris", "córregues"}, {"corri", "córrega"}, {"correm", "córregem"}, {"correu", "córregeu"}, {"corrin", "córreguen"}},
nucleoperf = {"correg"},
}},
{"haver", {"haver$"}, { -- aux
nucleopres = {"haj-haj-hàj"},
ind_pres = {{"he"}, {"has"}, {"ha"}, {"hem"}, {"heu"}, {"han"}},
part = {"hagut"},
nucleofut = {"haur"},
nucleoperf = {"hag"},
cond = {nucleo = {"haur", "hag"}},
imper = {nucleo = false}
}},
{"ser", {"^ser$"}, {
part = {"sigut"},
ind_pres = {{"soc"}, {"ets"}, {"és"}, {"som"}, {"sou"}, {"són"}},
ind_imp = {{"era"}, {"eres"}, {"era"}, {"érem"}, {"éreu"}, {"eren"}},
ind_perf = {{"fui"}, {"fores"}, {"fou"}, {"fórem"}, {"fóreu"}, {"foren"}},
subj_pres = {nucleo = "sig"},
subj_imp = {nucleo = "fo"},
imper = {nil, {"sigues"}, {"sigui", "siga"}, {"siguem", "sigam"}, {"sigeu", "sigau"}, {"siguin", "siguen"}}
}},
{"ésser", {"^ésser$", "^esser$"}, {
ger = {"essent"},
part = {"estat"},
nucleo = false,
}},
{"fer", {"^fer$"}, {
part = {"fet"},
ind_pres = {{"faig", "faç"}, {"fas"}, {"fa"}, nil, nil, {"fan"}},
ind_imp = {nucleo = "fe"},
ind_perf = {{"fiu"}, {"feres"}, {"feu"}, {"férem"}, {"féreu"}, {"feren"}},
imper = {nil, {"fes", "fe"}, nil, nil, {"feu", "feis"}},
nucleofut = {"far"},
nucleopres = {"faç-faç"}
}},
-- esprémer no forma paradigma
},
["ir"] = {
{"obrir", {"obrir$"}, {
part = {"obert"},
}},
{"cosir", {"collir$", "osir$", "tossir$", "escopir$", "sortir$"}, {
nucleopres = {"u-u"},
}},
{"complir", {"omplir$"}, {
part = {"omplert", "omplit"},
}},
{"eixir", {"^eixir$", "^deseixir$"}, {
nucleopres = {"i-i"}
}},
{"reeixir", {"reeixir$"}, {
nucleopres = {"ï-ï"},
nodial = true
}},
{"establir", {"establir$"}, {
part = {"establert", "establit"},
}},
-- pruir reg.
{"dir", {"^dir$", "^adir$", "contradir$", "desdir$", "entredir$", "interdir$", "maldir$", "predir$", "^redir$"}, {
nucleo = "d",
ger = {"dient"},
part = {"dit"}, -- necesario sobreescribirlo para que no genere *dig
nucleopres = {"dig-diu-dig"},
ind_imp = {nucleo = "de"},
ind_pres = {nil, nil, nil, {"diem"}, {"dieu"}},
subj_pres = {nil, nil, nil, {"diguem"}, {"digueu"}},
imper = {nil, {"digues"}, nil, {"diguem"}, {"digueu"}}
}},
{"venir", {"^venir$"}, {
ind_pres = {nil, nil, {"ve"}},
part = {"vingut"},
nucleopres = {"ving"},
nucleoperf = {"ving", "veng"},
nucleofut = {"vindr"},
imper = {nil, {"vine"}}
}},
{"prevenir", {"^advenir$", "^avenir$", "contravenir$", "convenir$", "desavenir$", "entrevenir$", "esdevenir$", "intervenir$", "obvenir$", "pervenir$", "prevenir$", "provenir$", "^revenir$", "sobrevenir$", "subvenir$"}, {
nucleo = "ven",
pres = {nil, nil, {"vé"}},
part = {"vingut"},
nucleopres = {"ving"},
nucleoperf = {"ving", "veng"},
nucleofut = {"vindr"},
imper = {nil, {"vine"}}
}},
-- vestir, llegir, servir
{"tenir", {"tenir$"}, { -- y mantenir
nucleopres = {"ting"},
nucleoperf = {"ting", "teng"},
nucleofut = {"tindr", "tendr"},
part = {"tingut", "tengut"},
ind_pres = {nil, nil, {"té"}},
imper = {nil, {"tingues", "ten"}, nil, nil, {"tingueu", "teniu"}}
}},
{"morir", {"morir$"}, {
part = {"mort"},
}},
{"imprimir", {"imprimir$"}, {
part = {"imprès"},
}},
-- oir
},
["re"] = {
{"caldre", {"caldre$", "doldre$", "^oldre$", "soldre$", "valdre$"}, {
nucleopres = {"g"}
}},
{"coldre", {"oldre$"}, { -- moldre, absoldre, dissoldre, toldre
part = {"olt"},
nucleopres = {"g"},
}},
{"romandre", {"^romandre$"}, {
part = {"romàs"},
nucleopres = {"g"},
}},
{"encendre", {"encendre$", "tendre$"}, {
nucleo = "end",
part = {"ès"},
nucleopres = {"g"},
ind_pres = {nil, nil, {"én"}},
imper = {nil, {"én"}},
}},
{"vendre", {"^vendre$"}, {
part = {"venut", "vengut"},
nucleopres = {"g"},
nucleoperf = {"veng", "ven"}
}},
{"advendre", {"vendre$"}, {
part = {"venut", "vengut"},
nucleopres = {"g"},
nucleoperf = {"veng", "ven"},
ind_pres = {nil, nil, {"vèn"}},
imper = {nil, {"vèn"}},
}},
{"fendre", {"^"..C.."*endre$"}, {
nucleo = "end",
part = {"es"},
nucleopres = {"g"},
}},
{"defendre", {"endre$"}, {
nucleo = "end",
part = {"ès"},
nucleopres = {"g"},
ind_pres = {nil, nil, {"èn"}},
imper = {nil, {"èn"}},
}},
{"enfondre", {"^enfondre$"}, {
part = {"enfús"},
nucleopres = {"g"}
}},
{"pondre", {"pondre$"}, {
part = {"post"},
nucleopres = {"g"}
}},
{"fondre", {"^"..C.."*ondre$"}, {
nucleo = "ond",
part = {"os", "us"},
nucleopres = {"g"}
}},
{"difondre", {"ondre$"}, {
part = {"ós"},
nucleopres = {"g"}
}},
{"caure", {"caure$"}, {
nucleopres = {"caig"},
nucleopresa = {"cai"},
ind_imp = {nucleo = "que"},
}},
{"plaure", {"plaure$"}, {
nucleopres = {"g"},
nucleopresa = {"pla"},
}},
{"raure", {"^raure$"}, {
nucleopres = {"g"},
nucleopresa = {"ra"},
part = {"ragut", "ras"}
}},
{"beure", {"beure$", "deure$", "lleure$"}, {
nucleo = "eu",
nucleopres = {"g"},
nucleopresa = {"ev"},
ind_imp = {nucleo = "ev"},
}},
{"creure", {"creure$", "seure$"}, {
nucleo = "eu",
nucleopresa = {"ei"},
nucleopres = {"g"},
}},
{"jeure", {"jeure$", "jaure$"}, {
v = "jeure",
part = {"jagut"},
nucleofut = {"jau"},
nucleopresa = {"jai"},
ind_pres = {{"jec", "jac"}},
nucleopres = {"g"},
ind_imp = {nucleo = "jeu"},
}},
{"treure", {"treure$", "traure$"}, {
part = {"tret"},
nucleofut = {"trau"},
nucleopresa = {"trai"},
nucleoperf = {"trag"},
ind_imp = {nucleo = "tre"},
ind_pres = {{"trec", "trac"}},
nucleopres = {"g"},
}},
{"veure", {"veure$"}, {
part = {"vist"},
nucleopres = {"vej"},
nucleopresa = {"vei"},
nucleoperf = {"vei"},
ind_perf = {{"viu"}},
}},
{"escriure", {"scriure$"}, {
part = {"scrit"},
nucleopres = {"g"},
nucleopresa = {"scrivi"},
nucleoperf = {"scrig", "scriv"},
ind_imp = {nucleo = "scriv"},
subj_imp = {nucleo = "scrig"},
}},
{"riure", {"riure$"}, {
part = {"rigut", "rist"},
nucleopresa = {"ri"},
nucleopres = {"g"},
ind_imp = {nucleo = "re"},
}},
{"viure", {"viure$"}, {
part = {"viscut"},
nucleopres = {"visc"},
nucleopresa = {"vivi"},
ind_pres = {{"visc"}},
ind_imp = {nucleo = "viv"},
}},
{"cloure", {"cloure$"}, { -- REVISAR: tiene dos participios según la etimología
part = {"clos"},
nucleopres = {"g"},
nucleopresa = {"clo"},
}},
{"moure", {"moure$", "ploure$"}, {
part = {"mogut"},
nucleopres = {"g"},
nucleopresa = {"mov"},
ind_imp = {nucleo = "mov"},
}},
{"noure", {"noure$"}, {
part = {"nogut"},
nucleopres = {"g"},
nucleopresa = {"no"},
}},
{"vindre", {"^vindre$"}, {
part = {"vingut", "vengut"},
nucleopres = {"ving-ven-ving"},
nucleopresa = {"veni"},
ind_imp = {nucleo = "veni"},
imper = {nil, {"vine"}},
}},
},
["ur"] = {
{"dur", {"dur$"}, {
nucleo = "du",
sufijo = "re",
nucleopres = {"g"},
part = {"dut"},
ind_pres = {nil, {"duus", "dus"}, {"duu", "du"}},
imper = {nil, {"duu", "du"}}
}},
}
}
local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf, forma)
if not nexo then
return sufijo
end
if sufijo_inf == "ar" then
if sufijo == "" then
if nexo == "gu" then
return nil
end
if nexo == "qu" then
return nil
end
if nexo == "u" or nexo == "o" then
return nexo.."~u~" -- [[evacuar]], [[lloar]]
end
if nexo == "i" then
return nexo.."~i~" -- [[acariciar]]
end
if nexo == "J" then
return "~ig~" -- [[pujar]]
end
if nexo == "GU" then
return "#gúu#" -- [[aguar]]
end
end
if sufijo == "i" and forma == "ind_pres" then
if nexo == "gu" then
return nil
end
end
if find(sufijo, "^í") then
if nexo == "I" then
return "~"..sufijo.."~"
end
end
if find(sufijo, "^i[ns]?$") then
if nexo == "I" then
return "~ï~"..sub(sufijo, 2)
end
if nexo == "i" then
return nexo.."~ï~"..sub(sufijo, 2)
end
if nexo == "o" or nexo == "u" then
return nexo.."~ï~"..sub(sufijo, 2)
end
if nexo == "GU" then
return "gu#ï#"..sub(sufijo, 2)
end
end
if find(sufijo, "^"..UAV.."[ns]?$") then
if nexo == "GU" then
return "#gú#"..sufijo
end
end
if find(sufijo, "^[eiéí]") then
if nexo == "gu" or nexo == "GU" then
return "g~ü~"..sufijo
end
if nexo == "qu" then
return "q~ü~"..sufijo
end
if nexo == "ç" then
return "~c~"..sufijo
end
if nexo == "c" then
return "~qu~"..sufijo
end
if nexo == "g" then
return "~gu~"..sufijo
end
if nexo == "j" or nexo == "J" then
return "~g~"..sufijo
end
end
else -- ER/RE/IR
if sufijo == "" then
if nexo == "b" then
return "~p~"..sufijo
end
if nexo == "c" then
return "~ç~"..sufijo
end
if nexo == "g" then
return "~ig~" -- [[fugir]]
end
if nexo == "u" or nexo == "o" then
return nexo.."~u~" -- [[lluir]]
end
end
if sufijo == "s" then
if nexo == "b" then
return "~p~"..sufijo
end
if nexo == "c" then
return "~ce~"..sufijo
end
if nexo == "g" then
return nexo.."~e~"..sufijo
end
if nexo == "u" then
return nexo.."~u~"..sufijo, nexo..sufijo -- [[lluir]]
end
end
if find(sufijo, "^i") and forma ~= "ind_fut" and forma ~= "cond" and forma ~= "ger" then
if nexo == "a" or nexo == "e" or nexo == "o" or nexo == "u" then
return nexo.."~ï~"..sub(sufijo, 2)
end
if nexo == "ü" then
return "~uï~"..sub(sufijo, 2)
end
end
if find(sufijo, "^[aouáóúàòù]") then
if nexo == "c" then
return "~ç~"..sufijo
end
if nexo == "g" then
return "~j~"..sufijo
end
end
end
if nexo == "I" then
return "i"..sufijo
end
if nexo == "J" then
return "j"..sufijo
end
if nexo == "GU" then
return "gu"..sufijo
end
return nexo..sufijo
end
local function combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma, sufijo_inf)
if not nucleo or not nexosufijo then
return nil
end
if sufijo_inf == "ar" and forma == "ind_pres" and nexosufijo == "" and find(nucleo, "[aeiouï]ss?#?$") then -- passar, envasar, expressar, etc.
return (gsub(nucleo, "([aeiouï])s?(s#?)$", function(a, b) return "~"..tildar[a]..b.."~" end))
end
if sufijo_inf == "ar" and forma == "ind_pres" and nexosufijo == "" and find(nucleo, "[eiï]n#?$") then -- encadenar, eliminar
return (gsub(nucleo, "([eiï])(n#?)$", function(a, b) return "~"..tildar[a]..b.."~" end))
end
if find(nucleo, "d#?$") and sufijo_inf == "re" and forma ~= "ind_fut" and forma ~= "cond" then
nucleo = gsub(nucleo, "d(#?)$", "%1")
end
if find(nucleo, "[aeio]u#?$") and sufijo_inf == "re" and forma ~= "ind_pres" and forma ~= "imper" and forma ~= "ind_fut" and forma ~= "cond" then
nucleo = gsub(nucleo, "([aeio])u(#?)$", "%1%2")
end
if find(nucleo, "[ao]#?$") and forma == "ind_imp" and find(nexosufijo, "^i"..UAV.."*[mns]?$") then
return nucleo..(gsub(nexosufijo, "^i", "~ï~"))
end
if find(nucleo, "e#?$") and forma == "ind_imp" and find(nexosufijo, "^íe") then
return gsub(nucleo, "e(#?)$", "è%1")..(gsub(nexosufijo, "^íe", "~i~e"))
end
if find(nucleo, "o([~#]?)$") and forma == "subj_imp" and find(nexosufijo, "^([~#]?)[eé]") then -- [[ser]]
return nucleo..(gsub(nexosufijo, "^([~#]?)[eé]", "%1"))
end
if find(nucleo, "[nv]i#") and find(nexosufijo, "^e") and sufijo_inf == "re" then -- escriure, viure
return nucleo..sub(nexosufijo, 2)
end
if find(nucleo, "[bdg]#?$") and (nexosufijo == "o" or nexosufijo == "i") and forma == "ind_pres" then
return nil
end
if find(nucleo, "b#?$") and (nexosufijo == "" or nexosufijo == "s") then
return (gsub(nucleo, "b(#?)$", "~p~%1"))..nexosufijo
end
if find(nucleo, "d#?$") and (nexosufijo == "" or nexosufijo == "s") then
return (gsub(nucleo, "d(#?)$", "~t~%1"))..nexosufijo
end
if find(nucleo, "g#?$") and (nexosufijo == "" or nexosufijo == "s") then
return (gsub(nucleo, "g(#?)$", "~c~%1"))..nexosufijo
end
if find(nucleo, "g#$") and find(nexosufijo, "^igu") then
return (gsub(nucleo, "g#$", "gu#"))..sub(nexosufijo, 4)
end
if find(nucleo, "g#$") and find(nexosufijo, "^[eiéí]") then
return (gsub(nucleo, "g#$", "gu#"))..nexosufijo
end
if find(nucleo, "j#$") and find(nexosufijo, "^[eiéí]") then
return (gsub(nucleo, "j#$", "g#"))..nexosufijo
end
if find(nucleo, "gu#$") and find(nexosufijo, "^[eiéí]") then
return (gsub(nucleo, "gu#$", "gü#"))..nexosufijo
end
if find(nucleo, "ç#$") and find(nexosufijo, "^[eiéí]") then
return (gsub(nucleo, "ç#$", "c#"))..nexosufijo
end
if find(nucleo, "c#$") and find(nexosufijo, "^[eiéí]") then
return (gsub(nucleo, "c#$", "qu#"))..nexosufijo
end
if find(nucleo, "[ií]([~#]?)$") and find(nexosufijo, "^([~#]?)[ií]") then
return nucleo..(gsub(nexosufijo, "^([~#]?)[ií]", "%1"))
end
if find(nucleo, "[bdfgkprtvaeiou]r#$") and find(nexosufijo, "^"..V.."r") then
return nucleo..sub(nexosufijo, 3)
elseif (find(nucleo, "[bcdgptr]r([~#]?)$") or find(nucleo, "[srxz]([~#]?)$")) and nexosufijo == "s" then
return nucleo.."~es~"
elseif find(nucleo, "[bcdgptr]r([~#]?)$") and nexosufijo == "" then
return nucleo.."~e~"
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
if not prefijo or not nucleonexosufijo then
return nil
end
return prefijo..nucleonexosufijo
end
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo.sufijo_inf
local sufijos_ = conjinfo[forma].sufijos and sufijos[sufijo_inf][conjinfo[forma].sufijos] or sufijos[sufijo_inf][forma]
local nucleos
if conjinfo[forma].nucleo == nil then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleopresa
elseif forma == "part" then
nucleos = conjinfo.nucleoperf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleopres1, conjinfo.nucleopres2, conjinfo.nucleopres2, conjinfo.nucleopresa, conjinfo.nucleopresa, conjinfo.nucleopres2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleopres1, conjinfo.nucleopres1, conjinfo.nucleopres1, conjinfo.nucleopres3, conjinfo.nucleopres3, conjinfo.nucleopres1}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleopres2, conjinfo.nucleopres1, conjinfo.nucleopres3, conjinfo.nucleopresa, conjinfo.nucleopres1}
elseif forma == "ind_fut" then
nucleos = {conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut}
elseif forma == "cond" then
nucleos = {conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut}
elseif forma == "ind_perf" then
nucleos = {conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf}
elseif forma == "subj_imp" then
nucleos = {conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n}
end
elseif conjinfo[forma].nucleo == false then
nucleos = {{}, {}, {}, {}, {}, {}}
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo_inf
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for _, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
for _,nucleo in ipairs(nucleos) do
local nexosufijo = combinar_nexo_sufijo(find(nucleo, "~eix~") and "" or nexo, sufijos_[1], sufijo_inf, forma)
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma, sufijo_inf)))
end
end
return
end
for i = JO, ELLS do
local p = tostr[i]
if conjinfo[forma][i] then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local k = i
while sufijos_[k] do
for _, n in ipairs(nucleos[i]) do
if (not find(n, "~eix~") and not conjinfo.nodial) or k <= 6 then -- de momento, desactivo las formas dialectales si el verbo es inco
local nexosufijo = combinar_nexo_sufijo(find(n, "~eix~") and "" or nexo, sufijos_[k], sufijo_inf, forma)
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo, forma, sufijo_inf)))
end
end
k = k + 6
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local arr = res[forma]
local t = {}
local tiempo, i = match(forma, "^(.*)(%d)$")
if not i then
i = 1
tiempo = forma
end
i = tonumber(i)
local rest_ = i < NOSALTRES and resto or resto_pl
local rest_pl_ = resto_pl
for _, v in ipairs(arr) do
local hs = auxiliar[tiempo]
local v2, v3
local rest = rest_
local rest_pl = rest_pl_
if hs then
rest = " "..v..rest
rest_pl = " "..v..rest_pl
v = auxiliar[tiempo][i]
if auxiliar[tiempo][i+6] then
v2 = auxiliar[tiempo][i+6]
end
if auxiliar[tiempo][i+12] then
v3 = auxiliar[tiempo][i+12]
end
end
if forma == "inf" or forma == "inf_comp" then
insert(t, adv..v..pron..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..v..pron..art..f_links(rest_pl))
end
elseif forma == "ger" or forma == "ger_comp" then
local vpron = v..pron
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..f(vpron)..art..f_links(rest_pl))
end
elseif forma == "part" then
insert(t, adv..f_links(v)..f_links(rest))
if (rest_pl ~= rest) then
insert(t, adv..f_links(v)..f_links(rest_pl))
end
elseif forma == "imper" then
local vpron = v
if pron == "se" then
local enc = find(v, V.."$") and v..REFLEXIVOS_POSPUESTOS_CONTRAIDOS[i] or v..REFLEXIVOS_POSPUESTOS[i]
vpron = enc
end
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
else
local vpron
if pron == "se" then
vpron = find(v, "^"..V) and REFLEXIVOS_ANTEPUESTOS_CONTRAIDOS[i]..v or REFLEXIVOS_ANTEPUESTOS[i]..v
else
vpron = v
end
local vpronart = vpron..art
insert(t, adv..(art == "" and f_links(vpronart) or f(vpronart))..f_links(rest))
if v2 then
if pron == "se" then
vpron = find(v2, "^"..V) and REFLEXIVOS_ANTEPUESTOS_CONTRAIDOS[i]..v2 or REFLEXIVOS_ANTEPUESTOS[i]..v2
else
vpron = v2
end
vpronart = vpron..art
insert(t, adv..(art == "" and f_links(vpronart) or f(vpronart))..f_links(rest))
end
if v3 then
if pron == "se" then
vpron = find(v3, "^"..V) and REFLEXIVOS_ANTEPUESTOS_CONTRAIDOS[i]..v3 or REFLEXIVOS_ANTEPUESTOS[i]..v3
else
vpron = v3
end
vpronart = vpron..art
insert(t, adv..(art == "" and f_links(vpronart) or f(vpronart))..f_links(rest))
end
end
end
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["paradigma"] = {lista = true},
["impersonal"] = {},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["nucleopres"] = {lista = true},
["núcleopres"] = {alias_de = "nucleopres"},
["nucleopresa"] = {lista = true},
["núcleopresa"] = {alias_de = "nucleopresa"},
["nucleoperf"] = {lista = true},
["núcleoperf"] = {alias_de = "nucleoperf"},
["nucleofut"] = {lista = true},
["núcleofut"] = {alias_de = "nucleofut"},
["nota"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local adv, r1 = match(tit, "^([sSnN][ío]"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiu]r)(s?e?)%-?(l?[oai]?s?)( .-)$")
if not resto then
v, pron, art, resto = match(r1, "^("..LETRA.."*re)(s?e?)%-?(l?[oai]?s?)( .-)$")
end
if not resto then
v, pron, art = match(r1, "^("..LETRA.."*[aeiu]r)(s?e?)%-?(l?[oai]?s?)$")
end
if not art then
v, pron, art = match(r1, "^("..LETRA.."*re)(s?e?)%-?(l?[oai]?s?)$")
end
if not resto then
resto = ""
end
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[ío]?"..ESPACIO.."?"..LETRA.."+( .-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
local sufijo_inf = match(v, "[aeiur][re]$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_inco
local es_puro
local es_irregular
for N = 1, max(1,
maxindex(args["paradigma"]),
maxindex(args["nucleopres"]),
maxindex(args["nucleopresa"]),
maxindex(args["nucleoperf"]),
maxindex(args["nucleofut"])) do
local conjinfo = {}
local encontre_irreg = false
for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
local rxx = match(v, rx)
if args["paradigma"][N] == p[1] or rxx then
conjinfo = deepcopy(p[3])
conjinfo.rxx = rxx
es_irregular = true
paradigmas_reconocidos[p[1]] = true
encontre_irreg = true
break
end
end
if encontre_irreg then
break
end
end
local encontre_reg = false
for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
if size(p[3]) == 0 then
paradigmas_reconocidos[p[1]] = true
end
for k, v in pairs(p[3]) do
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
encontre_reg = true
break
end
end
if encontre_reg then
break
end
end
assert(encontre_reg, "paradigma no reconocido")
conjinfo.nucleo_inf = conjinfo.nucleo
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
local v_ = gsub(v, "dur$", "dure") -- excepción: en dur no coincide nucleo + sufijo con el verbo entero, necesito forzarlo a que coincida para buscar el prefijo correctamente
if conjinfo.nucleo_inf == nil then -- puede ser false
if conjinfo.rxx then
conjinfo.nucleo_inf = sub(conjinfo.rxx, 1, max(len(conjinfo.rxx) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf), 0)) -- no busco regex porque pueden haberse cambiado
else
conjinfo.nucleo_inf = sub(v_, 1, max(len(v_) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf), 0)) -- no busco regex porque pueden haberse cambiado
end
end
if type(conjinfo.nucleo_inf) == "string" then
if not conjinfo.prefijo then
conjinfo.prefijo = sub(v_, 1, max(len(v_) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf), 0)) -- no busco regex porque pueden haberse cambiado
end
conjinfo.prefijo = gsub(conjinfo.prefijo, AV, quitar_tilde)
conjinfo.nucleo_inf = gsub(conjinfo.nucleo_inf, AV, quitar_tilde)
else
conjinfo.prefijo = ""
end
conjinfo.nucleopres = args["nucleopres"][N] and {args["nucleopres"][N]} or (conjinfo.nucleopres and conjinfo.nucleopres or {})
conjinfo.nucleopresa = args["nucleopresa"][N] and {args["nucleopresa"][N]} or (conjinfo.nucleopresa and conjinfo.nucleopresa or {})
conjinfo.nucleoperf = args["nucleoperf"][N] and {args["nucleoperf"][N]} or (conjinfo.nucleoperf and conjinfo.nucleoperf or {})
conjinfo.nucleofut = args["nucleofut"][N] and {args["nucleofut"][N]} or (conjinfo.nucleofut and conjinfo.nucleofut or {})
conjinfo.nucleopres1 = {}
conjinfo.nucleopres2 = {}
conjinfo.nucleopres3 = {}
local function esta_en_clase(verbo, arr)
for _,a in ipairs(arr) do
if find(verbo, a) then
return true
end
end
return false
end
-- si conjinfo.nucleo_inf == false, no conjugo nada
if conjinfo.nucleo_inf then
if conjinfo.nucleopres[1] == nil and conjinfo.sufijo_inf == "ir" then
if esta_en_clase(v, verbos_mixtos) then
conjinfo.nucleopres[1] = "INCO"
conjinfo.nucleopres[2] = "PURO"
elseif esta_en_clase(v, verbos_puros) then
conjinfo.nucleopres[1] = "PURO"
else
conjinfo.nucleopres[1] = "INCO"
end
end
local function parsear_nucleo(nucl_)
if not nucl_ then
return conjinfo.nucleo_inf
end
local nucl, marca = match(nucl_, "^(.*)([{%[].-[}%]])$")
if not marca then
nucl = nucl_
marca = ""
end
if nucl == "g" then
local aux = conjinfo.nucleo_inf
local sust1, sust2
aux, sust1 = gsubb(aux, "d$", "#g#")
aux, sust2 = gsubb(aux, "([aeio])u$", "%1#g#")
if not sust1 and not sust2 then
aux = aux.."#g#"
end
return aux..marca
end
if nucl == "i" then
return gsub(conjinfo.nucleo_inf, "^(.*)ei?(.-)$", "%1#i#%2")..marca
end
if nucl == "ï" then
return gsub(conjinfo.nucleo_inf, "^(.*)ei?(.-)$", "%1#ï#%2")..marca
end
if nucl == "u" then
return gsub(conjinfo.nucleo_inf, "^(.*)ou?(.-)$", "%1#u#%2")..marca
end
if nucl == "PURO" or nucl == "REG" then
return conjinfo.nucleo_inf..marca
end
if nucl == "INCO" then
return conjinfo.nucleo_inf..conjinfo.nexo_inf.."~eix~"..marca
end
if nucl == conjinfo.nucleo_inf then
return nucl..marca
end
return "#"..nucl.."#"..marca
end
local a, b, c
if conjinfo.nucleopres[1] then
for i,n_ in ipairs(conjinfo.nucleopres) do
a, b, c = match(n_, "^(.-)%-(.-)%-(.-)$")
if not c then
a, b = match(n_, "^(.-)%-(.-)$")
end
if not b then
a = n_
end
if find(a, "^INCO") then
insert_if_not(conjinfo.nucleopres1, parsear_nucleo(a))
insert_if_not(conjinfo.nucleopres2, parsear_nucleo(a))
insert_if_not(conjinfo.nucleopres3, conjinfo.nucleo_inf)
es_inco = true
else
insert_if_not(conjinfo.nucleopres1, parsear_nucleo(a))
insert_if_not(conjinfo.nucleopres2, parsear_nucleo(b))
insert_if_not(conjinfo.nucleopres3, c and parsear_nucleo(c) or ((a and not b) and parsear_nucleo(a) or conjinfo.nucleo_inf))
es_puro = true
end
end
else
insert_if_not(conjinfo.nucleopres1, conjinfo.nucleo_inf)
insert_if_not(conjinfo.nucleopres2, conjinfo.nucleo_inf)
insert_if_not(conjinfo.nucleopres3, conjinfo.nucleo_inf)
end
if not conjinfo.nucleoperf[1] and (a or c) and es_puro and not es_inco then
conjinfo.nucleoperf = deepcopy(conjinfo.nucleopres3)
elseif conjinfo.nucleoperf[1] then
for i,n_ in ipairs(conjinfo.nucleoperf) do
conjinfo.nucleoperf[i] = parsear_nucleo(n_)
conjinfo.hay_nucleoperf = true
end
else
insert_if_not(conjinfo.nucleoperf, conjinfo.nucleo_inf)
end
if conjinfo.nucleofut[1] then
for i,n_ in ipairs(conjinfo.nucleofut) do
conjinfo.nucleofut[i] = parsear_nucleo(n_)
end
else
insert_if_not(conjinfo.nucleofut, conjinfo.nucleo_inf)
end
if conjinfo.nucleopresa[1] then
for i,n_ in ipairs(conjinfo.nucleopresa) do
conjinfo.nucleopresa[i] = parsear_nucleo(n_)
end
else
insert_if_not(conjinfo.nucleopresa, conjinfo.nucleo_inf)
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
else
conjinfo.nucleo_inf = {}
end
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if find(e, 'PART') or not find(e, 'ADJ') then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, resto=resto, resto_pl=resto_pl,impers=args["impersonal"]}
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local impers = args["impersonal"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, impers)
end)
local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper
if impers == "3" then
if args["indirecto"] then
error("no implementado aún")
else
fila_pronombres_ind = {"", "(això)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(això)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que això)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(això)", color=COLOR_IMPER, header=true, class="pc"}
end
cs = 2
elseif impers == "36" then
fila_pronombres_ind = {"", "(això)", "(ells)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(això)", "(ells)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que això)", "(que ells)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(això)", "(ells)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_ind = {"", "jo", "tu", "el, ella, vostè", "nosaltres", "vosaltres, vós", "ells, elles, vostès", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "jo", "tu", "el, ella, vostè", "nosaltres", "vosaltres, vós", "ells, elles, vostès", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que jo", "que tu", "que el, que ella, que vostè", "que nosaltres", "que vosaltres, que vós", "que ells, que elles, que vostès", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tu)", "(vostè)", "(nosaltres)", "(vosaltres, vós)", "(vostès)", color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = math.floor(cs / 2)
cs2 = cs - cs1
local t = {}
t[1] = {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true}
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
else
resultante.inf.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.part.colspan = cs1-1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
t[5] = {{"Formas personales", colspan=cs}, color=COLOR_H, header=true}
t[6] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true}
t[7] = fila_pronombres_ind
t[8] = {{"Presente", color=COLOR_IND, header=true}, ic("ind_pres")}
t[9] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")}
t[10] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("ind_perf")}
t[11] = {{"Pretérito perifrástico", color=COLOR_IND, header=true}, ic("ind_peri")}
t[12] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")}
t[13] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("ind_perf_comp")}
t[14] = {{"Futuro", color=COLOR_IND, header=true}, ic("ind_fut")}
t[15] = {{"Futuro compuesto", color=COLOR_IND, header=true}, ic("ind_fut_comp")}
t[16] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("ind_anter")}
t[17] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true}
t[18] = fila_pronombres_cond
t[19] = {{"Condicional simple", color=COLOR_COND, header=true}, ic("cond")}
t[20] = {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("cond_comp")}
t[21] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true}
t[22] = fila_pronombres_subj
t[23] = {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")}
t[24] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")}
t[25] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")}
t[26] = {{"Pretérito perifrástico", color=COLOR_SUBJ, header=true}, ic("subj_peri")}
t[27] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")}
t[28] = {{f("Pretérito anterior{†}"), color=COLOR_SUBJ, header=true}, ic("subj_anter")}
t[29] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true}
t[30] = fila_pronombres_imper
if mostrar_imper then
t[31] = {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")}
else
t[31] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}}
end
t[32] = {{f("Leyenda: † arcaico, x no normativo, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}}
args["nota"] = args["nota"] or ""
if args["impersonal"] == "utc3" then
args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "umc3" then
args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "utc36" then
args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
if args["impersonal"] == "umc36" then
args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
t[33] = {{args["nota"] and args["nota"] or "", colspan=cs}}
local paradigmas_t = {}
local cats = {}
if es_inco and es_puro then
paradigmas_reconocidos["acudir"] = true
paradigmas_reconocidos["partir"] = nil
paradigmas_reconocidos["dormir"] = nil
elseif es_inco then
paradigmas_reconocidos["acudir"] = nil
paradigmas_reconocidos["partir"] = true
paradigmas_reconocidos["dormir"] = nil
elseif es_puro then
paradigmas_reconocidos["acudir"] = nil
paradigmas_reconocidos["partir"] = nil
paradigmas_reconocidos["dormir"] = true
end
if es_irregular then
insert(cats, "CA:Verbos irregulares")
paradigmas_reconocidos["amar"] = nil
paradigmas_reconocidos["temer"] = nil
paradigmas_reconocidos["acudir"] = nil
paradigmas_reconocidos["partir"] = nil
paradigmas_reconocidos["dormir"] = nil
paradigmas_reconocidos["abatre"] = nil
else
insert(cats, "CA:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "CA:Verbos del paradigma "..p)
end
impers = impers or ""
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "CA:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "CA:Verbos terciopersonales")
end
if find(impers, "^ind") then
insert(cats, "CA:Verbos de objeto indirecto")
end
if defectivo then
insert(cats, "CA:Verbos defectivos")
end
local inc_enc
if sufijo_inf == "ar" then
insert(cats, "CA:Verbos de la primera conjugación")
elseif sufijo_inf == "er" then
insert(cats, "CA:Verbos de la segunda conjugación")
elseif sufijo_inf == "ir" then
insert(cats, "CA:Verbos de la tercera conjugación")
if not es_inco and not es_puro then
insert(cats, "CA:Verbos puros")
es_puro = true
inc_enc = "puro"
elseif es_inco and es_puro then
insert(cats, "CA:Verbos incoativos")
insert(cats, "CA:Verbos puros")
inc_enc = "incoativo/puro"
elseif es_inco then
insert(cats, "CA:Verbos incoativos")
inc_enc = "incoativo"
elseif es_puro then
insert(cats, "CA:Verbos puros")
inc_enc = "puro"
end
else
insert(cats, "CA:Verbos de la cuarta conjugación")
end
local q_t = {es_irregular and "irregular" or "regular", inc_enc}
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..concat(q_t, ", ")..")",
t,
ns == 0 and cats or {})
end
return export
o43ey9r3bw22o1j48n0zu2irmkjo62i
Módulo:flex/ast
828
1055819
6117308
6077048
2026-06-06T16:45:48Z
TMCbot
164594
.
6117308
Scribunto
text/plain
-- Flexión del asturiano
-- Autor: Tmagc
local export = {}
local max = math.max
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local len = m_str.len
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local vocal_no_tilde = "aeiouAEIOU"
local vocal_tilde = "áéíóúÁÉÍÓÚ"
local vocal = vocal_no_tilde..vocal_tilde
local cons = "bcdfghjklmnñpqrstvwxyzḥḷBCFGHJKLMNÑPQRSTVWXYZḤḶ"
local espacios = "%-‐%s"
local guion = "%-"
local VOCAL = "["..vocal.."]"
local CONS = "["..cons.."]"
local CONS_SALVO_H = "[^"..vocal.."hH~#{}]"
local ESPACIO = "["..espacios.."]"
local LETRA = "[^"..espacios.."]"
local agregar_tilde =
{
["a"] = "á",
["e"] = "é",
["i"] = "í",
["o"] = "ó",
["u"] = "ú",
["á"] = "á",
["é"] = "é",
["í"] = "í",
["ó"] = "ó",
["ú"] = "ú",
["A"] = "Á",
["E"] = "É",
["I"] = "Í",
["O"] = "Ó",
["U"] = "Ú",
["Á"] = "Á",
["É"] = "É",
["Í"] = "Í",
["Ó"] = "Ó",
["Ú"] = "Ú",
}
local quitar_tilde =
{
["á"] = "a",
["é"] = "e",
["í"] = "i",
["ó"] = "o",
["ú"] = "u",
["a"] = "a",
["e"] = "e",
["i"] = "i",
["o"] = "o",
["u"] = "u",
["Á"] = "A",
["É"] = "E",
["Í"] = "I",
["Ó"] = "O",
["Ú"] = "U",
["A"] = "A",
["E"] = "E",
["I"] = "I",
["O"] = "O",
["U"] = "U",
}
local function try(p, rx, pl, f, fpl, n, pl2, n2, femenino)
local p2, sust = gsubb(p, rx, "~%0~")
if not sust then
return nil
end
if not pl then
return {m={p2}, p={}, f={}, fp={}, n={}}
end
if not femenino or not f then
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={}, fp={}, n={}}
else
return {m={p2}, p={gsub1(p, rx, pl)}, f={}, fp={}, n={}}
end
end
if not n then
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}, n={}}
else
return {m={p2}, p={gsub1(p, rx, pl)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}, n={}}
end
end
if pl2 and n2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}, n={gsub1(p, rx, n), gsub1(p, rx, n2)}}
elseif pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}, n={gsub1(p, rx, n)}}
elseif n2 then
return {m={p2}, p={gsub1(p, rx, pl)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}, n={gsub1(p, rx, n), gsub1(p, rx, n2)}}
end
return {m={p2}, p={gsub1(p, rx, pl)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}, n={gsub1(p, rx, n)}}
end
-- https://www.alladixital.org/wp-content/uploads/2015/03/Normes-Ortogr%C3%A1fiques-7%C2%AA-edici%C3%B3n-2012.pdf
local function flexionar_palabra(p, g, forzar_s, on)
local adj = g == "mf"
local r, v, c
r, v, c = match(p, "^([^áéíóú]*)([aeiou])([iu]?"..CONS.."+[iu]?[aeiou][iu]?[n])$") -- llanas en n --> agrego tilde
if not c then
r, v, c = match(p, "^([^áéíóú]*[aeo])([aeo])("..CONS.."*[iu]?[aeiou][iu]?[n])$") -- llanas en n --> agrego tilde
end
if c then
local w = agregar_tilde[v]
return {m={r..v.."~"..c.."~"}, p={r..w..c.."~es~"}, f={}, fp={}, n={}}
end
r, v, c = match(p, "^([^áéíóú]*)([aeiou])("..CONS.."+e)u$") -- llanas en diptongo terminado en -eu --> agrego tilde + -os cf. [[gluteu]], [[aereu]]
if c then
local w = agregar_tilde[v]
if adj then
return {m={r..v..c.."~u~"}, p={r..w..c.."~os~"}, f={r..w..c.."~a~"}, fp={r..w..c.."~es~"}, n={r..w..c.."~o~"}}
end
return {m={r..v..c.."~u~"}, p={r..w..c.."~os~"}, f={}, fp={}, n={}}
end
local function rep_a(v, c) return "~"..quitar_tilde[v]..c.."a~" end
local function rep_o(v, c) return "~"..quitar_tilde[v]..c.."o~" end
local function rep_es(v, c) return "~"..quitar_tilde[v]..c.."es~" end
local function rep_os(v, c) return "~"..quitar_tilde[v]..c.."os~" end
local es_monosilabo = find(p, "^"..CONS.."-[iuü]?[iu]?[aeoiu][iu]?"..CONS.."-$")
local fl = try(p, es_monosilabo and "es$" or "és$", "~eses~", "~esa~", "~eses~", "~és~", nil, "~eso~", adj)
or try(p, "[aeiou][íú]s$", "~%0es~", "~%0a~", "~%0es~", "~%0o~", nil, nil, adj) -- hiatos como en [[país]]
or try(p, es_monosilabo and "([aiou])(s)$" or "([áíóú])(s)$", rep_es, rep_a, rep_es, rep_o, nil, nil, adj)
or try(p, es_monosilabo and "on$" or "ón$", "~ones~", "~ona~", "~ones~", "~ón~", on and "~onos~" or nil, "~ono~", adj)
or try(p, es_monosilabo and "([ae])(n)$" or "([áé])(n)$", rep_es, rep_a, rep_es, rep_o, nil, nil, adj)
or try(p, "[aeiou][íú]n$", "~%0os~", "~%0a~", "~%0es~", "~%0o~", nil, nil, adj) -- hiatos como en [[saín]]
or try(p, es_monosilabo and "([iu])(n)$" or "([íú])(n)$", rep_os, rep_a, rep_es, rep_o, nil, nil, adj)
or try(p, "[aá]u$", "~aos~", "~ada~", "~aes~", "~ao~", nil, nil, adj)
or try(p, "[oó]u$", "~oos~", "~oa~", "~oes~", "~oo~", nil, nil, adj)
or try(p, "éu$", "~eos~", "~eda~", "~ees~", "~eo~", nil, nil, adj)
or try(p, "íu$", "~íos~", "~ida~", "~íes~", "~ío~", nil, nil, adj)
or try(p, "izu$", "~izos~", "~iza~", "~ices~", "~izo~", nil, nil, adj)
or try(p, "nte$", "~ntes~")
or try(p, "c[ou]$", "~cos~", "~ca~", "~ques~", "~co~", nil, nil, adj)
or try(p, "gu[ou]$", "~guos~", "~gua~", "~gües~", "~guo~", nil, nil, adj)
or try(p, "g[ou]$", "~gos~", "~ga~", "~gues~", "~go~", nil, nil, adj)
or try(p, "z[ou]$", "~zos~", "~za~", "~ces~", "~zo~", nil, nil, adj)
or try(p, "[ou]$", "~os~", "~a~", "~es~", "~o~", nil, nil, adj)
or try(p, "az$", "~azos~", "~az~", "~aces~", "~az~", nil, nil, adj) -- debe ir antes que za?$
or try(p, "ca$", "~ques~")
or try(p, "gua$", "~gües~")
or try(p, "ga$", "~gues~")
or try(p, "(["..vocal_tilde.."].*[aei])da$", "~%1des~") -- las esdrújulas mantienen la d intervocálica
or try(p, "peda$", "~pedes~") -- las que terminan en -peda mantienen la d intervocálica
or try(p, "([ae])d?a$", "~%1es~")
or try(p, "ida$", "~íes~")
or try(p, "za?$", "~ces~")
or try(p, "([dt])á$", "~%1aes~") -- equivale a -dad (ciudad) creo que innecesario
or try(p, "tú$", "~túes~") -- equivale a -tud (virtud)
or try(p, "a$", "~es~")
or try(p, VOCAL.."$", "~%0s~")
or try(p, "ol$", "~%0es~", "~%0a~", "~%0es~", "~%0~", nil, nil, adj)
or try(p, "or$", "~%0es~", "~%0a~", "~%0es~", "~%0~", nil, "~%0o~", adj)
or try(p, VOCAL.."[lrxñ]$", "~%0es~") -- pex, limaz, animal
or try(p, "[ns]$", nil) -- esdrújulas en n, llanas/esdrújulas en s
or try(p, VOCAL..CONS.."$", "~%0s~")
or try(p, "ch$", forzar_s and "~%0s~" or "~%0es~")
or try(p, CONS.."[sz]$", nil)
or try(p, "[sz]"..CONS.."$", nil)
or try(p, CONS..CONS.."$", "s")
if fl then
return fl
end
error("No se pudo determinar la flexión de la palabra")
end
local function flexion_sust_adj(palabras, g, forzar_s, on, copulativa)
local a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
if b then
if copulativa == nil then
error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"")
end
local flex1 = flexionar_palabra(a, g, forzar_s, on)
local flex2 = copulativa and flexionar_palabra(b, g, forzar_s, on) or {m={b}, p={}, f={}, fp={}, n={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex1.n = flex1.n[1] and flex1.n or flex1.m
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
flex2.n = flex2.n[1] and flex2.n or flex2.m
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.n, flex.m) then
flex.n = {}
end
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto = match(palabras, "^("..guion.."?"..LETRA.."+)(.-)$")
local flex = flexionar_palabra(p, g, forzar_s, on)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["nota"],
{},
ns == 0 and cats or {}
)
end
end
local cop -- = modo == "irreg" and false or args["cop"] falla...
if modo == "irreg" then
cop = false
else
cop = args["cop"]
end
local flex_ = flexion_sust_adj(title, modo, args["s"], args["on"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." regulares")
elseif find(title, LETRA..ESPACIO..LETRA) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["nota"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"neutro", flex.n},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
[5] = {alias_de="n"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["on"] = {tipo = "bool"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {lista = true},
["nota"] = {},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
return formatear_sust_adj(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "AST:Locuciones sustantivas" or "AST:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
[5] = {alias_de="n"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["on"] = {tipo = "bool"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {lista = true},
["nota"] = {},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
args[1] = args[1] or "mf"
return formatear_sust_adj(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "AST:Locuciones adjetivas" or "AST:Adjetivos")
end
local YO, TU, EL, NOSOTROS, VOSOTROS, ELLOS = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"yo", "tu", "él, elli, (v)usté", "nosotros", "vosotros", "(v)ustedes, ellos"}
local PRONOMBRES_SUBJ = {"que yo", "que tu", "que él, que elli, (v)usté", "que nosotros", "que vosotros", "que (v)ustedes, ellos"}
local PRONOMBRES_IMP = {"―", "(tu)", "((v)usté)", "(nosotros)", "(vosotros)", "((v)ustedes)"}
local IMPERSONALES = {"", "", "(ello)", "", "", "(ellos)"}
local IMPERSONALES_SUBJ = {"", "", "(que ello)", "", "", "(que ellos)"}
local REFLEXIVOS = {"me", "te", "se", "nos", "vos", "se"}
local function obtener_pronombre(forma, impers, indirecto)
if indirecto then
return nil
end
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local formas_no_personales = {
["ger"] = true,
["part"] = true,
["inf"] = true,
}
local formas_personales = {
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["ind_pluperf"] = true,
["fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["cond"] = true,
["imper"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["ind_perf_comp"] = true,
["ind_anter"] = true,
["fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
}
local sufijos = {
{
["ger"] = {"ando"},
["part"] = {"ao"},
["ind_pres"] = {"o", "es", "a", "amos", "áis", "en"},
["ind_imp"] = {"aba", "abes", "aba", "ábamos", "abais", "aben",
nil, nil, nil, "ábemos", "abeis", nil},
["ind_perf"] = {"é", "asti", "ó", "emos", "astis", "aron",
nil, "esti", nil, nil, "estis", nil},
["ind_perf_alt"] = {"uvi", "uvisti", "uvo", "uvimos", "uvistis", "uvieron",
"evi", "uviesti", "evo", "uviemos", "uviestis"
},
["ind_pluperf"] = {"ara", "aras", "ara", "áramos", "arais", "aran",
"are", "ares", "are", "áremos", "areis", "aren"},
["ind_pluperf_alt"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["fut"] = {"aré", "arás", "ará", "aremos", "aréis", "arán"},
["subj_pres"] = {"e", "as", "e", "emos", "éis", "an",
nil, "es", nil, nil, nil, "en"},
["subj_imp"] = {"ara", "aras", "ara", "áramos", "arais", "aran",
"are", "ares", "are", "áremos", "areis", "aren"},
["subj_imp_alt"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["cond"] = {"aría", "aríes", "aría", "aríamos", "aríais", "aríen",
nil, nil, nil, "aríemos", "aríeis", nil},
["imper"] = {"-", "a", "e", "emos", "ái", "an",
nil, nil, nil, nil, nil, "en"}
},
{
["ger"] = {"iendo"},
["part"] = {"ío"},
["ind_pres"] = {"o", "es", "e", "emos", "éis", "en"},
["ind_imp"] = {"ía", "íes", "ía", "íamos", "íais", "íen",
nil, nil, nil, "íemos", "íeis", nil},
["ind_perf"] = {"í", "iesti", "ió", "iemos", "iestis", "ieron",
nil, "isti", nil, "imos", "istis", nil},
["ind_perf_alt"] = {"i", "isti", "o", "imos", "istis", "ieron",
nil, "iesti", nil, "iemos", "iestis"
},
["ind_pluperf"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["ind_pluperf_alt"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["fut"] = {"eré", "erás", "erá", "eremos", "eréis", "erán"},
["subj_pres"] = {"a", "as", "a", "amos", "áis", "an"},
["subj_imp"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["subj_imp_alt"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["cond"] = {"ería", "eríes", "ería", "eríamos", "eríais", "eríen",
nil, nil, nil, "eríemos", "eríeis", nil},
["imper"] = {"-", "i", "a", "amos", "éi", "an"}
},
{
["ger"] = {"iendo"},
["part"] = {"ío"},
["ind_pres"] = {"o", "es", "e", "imos", "ís", "en"},
["ind_imp"] = {"ía", "íes", "ía", "íamos", "íais", "íen",
nil, nil, nil, "íemos", "íeis", nil},
["ind_perf"] = {"í", "iesti", "ió", "iemos", "iestis", "ieron",
nil, "isti", nil, "imos", "istis", nil},
["ind_perf_alt"] = {"i", "isti", "o", "imos", "istis", "ieron",
nil, "iesti", nil, "iemos", "iestis"
},
["ind_pluperf"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["ind_pluperf_alt"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["fut"] = {"iré", "irás", "irá", "iremos", "iréis", "irán"},
["subj_pres"] = {"a", "as", "a", "amos", "áis", "an"},
["subj_imp"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["subj_imp_alt"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["cond"] = {"iría", "irías", "iría", "iríamos", "iríais", "iríen",
nil, nil, nil, "iríemos", "iríeis", nil},
["imper"] = {"-", "i", "a", "amos", "íi", "an"}
},
}
local pronombres = {"me", "te", "se", "nos", "os", "se"}
local auxiliar = {
["inf_comp"] = {"tener"},
["ger_comp"] = {"teniendo"},
["ind_perf_comp"] = {"tengo", "tienes", "tien", "tenemos", "tenéis", "tienen"},
-- ["ind_pluperf"] = {"tenía", "teníes", "tenía", "teníamos", "teníais", "teníen"},
["ind_anter"] = {"tuvi", "tuvisti", "tuvo", "tuvimos", "tuvistis", "tuvieron"},
["fut_comp"] = {"tendré", "tendrás", "tendrá", "tendremos", "tendréis", "tendrán"},
["cond_comp"] = {"tendría", "tendríes", "tendría", "tendríamos", "tendríais", "tendríen"},
["subj_perf"] = {"tenga", "tengas", "tenga", "tengamos", "tengáis", "tengan"},
["subj_pluperf"] = {"tuviera", "tuvieras", "tuviera", "tuviéramos", "tuvierais", "tuvieran",
"tuviese", "tuvieses", "tuviese", "tuviésemos", "tuvieseis", "tuviesen"},
}
local function obtener_sufijos(sufijo_inf, forma)
if sufijo_inf == "ar" then
return sufijos[1][forma]
elseif sufijo_inf == "er" then
return sufijos[2][forma]
else
return sufijos[3][forma]
end
end
local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf)
if not nexo then
return sufijo
end
if sufijo_inf == "ar" then
if find(sufijo, "^[eéií]") then
if nexo == "c" then
return "~qu~"..sufijo
end
if nexo == "g" then
return "g~u~"..sufijo
end
if nexo == "z" then
return "~c~"..sufijo
end
if nexo == "gu" then
return "g~ü~"..sufijo
end
end
local _, cnt = gsub(sufijo, "[aeiou]", "")
if cnt == 1
and not find(sufijo, "[áéíóú]")
and find(sub(sufijo, -1), "[aeiouns]") then
-- no existe adecúo
if nexo == "u" then
return "~ú~"..sufijo -- es llana y entonces lleva tilde
end
if nexo == "i" then
return "#í#"..sufijo -- es llana y entonces lleva tilde
end
end
if find(sufijo, "^ar") then
if find(nexo, "^[~#]?[bdeir]?r[~#]?$") then
return nexo..sub(sufijo, 3)
end
end
else -- ER/IR/ÍR
if sufijo == "e" then -- 3ra del presente
if nexo == "C" then
return "~z~"
end
if nexo == "L" then -- l de goler
return "~l~"
end
if nexo == "l" then -- l de valir, salir
return "~l~"
end
if nexo == "R" then
return "~r~"
end
if nexo == "S" then
return "~s~"
end
if nexo == "X" then
return "~x~", "x"..sufijo
end
end
if sufijo == "i" then -- 1ra del imperativo
if nexo == "C" then
return "~z~"
end
if nexo == "L" then -- l de goler
return "~l~", "l"..sufijo
end
if nexo == "l" then -- l de valir, salir
return "~l~"
end
if nexo == "R" then
return "~r~"
end
if nexo == "S" then
return "~s~", "s"..sufijo
end
if nexo == "X" then
return "~x~", "x"..sufijo
end
end
if find(sufijo, "^[aáoóuú]") then
if nexo == "C" then
return "~z~"..sufijo
end
if nexo == "c" then
return "~z~"..sufijo
end
if nexo == "g" then
return "~x~"..sufijo
end
if nexo == "gu" then
return "g~"..sufijo.."~"
end
if nexo == "qu" then
return "~c~"..sufijo
end
end
if find(sufijo, "^[ei][ns]?$") then
if nexo == "gü" then
return "g~ú~"..(gsub(sufijo, "e", "i"))
end
if nexo == "u" then
return "~ú~"..(gsub(sufijo, "e", "i"))
end
end
if find(sufijo, "^ie") then
if find(nexo, "u#$") then -- ir --> fuera (subj)
return nexo..sub(sufijo, 2)
end
if find(nexo, "o#$") then -- ir --> fora (subj)
return nexo..sub(sufijo, 3)
end
end
if find(sufijo, "^ié") then
if find(nexo, "u#$") then -- ir --> fuera (subj)
return nexo..sub(sufijo, 2)
end
if find(nexo, "o#$") then -- ir --> fora (subj)
return sub(nexo, 1, -3).."ó#"..sub(sufijo, 3)
end
end
if find(sufijo, "^í$") then
if nexo == "#x#" or nexo == "~x~" then
return nexo.."~i~"
end
end
if find(sufijo, "^ió$") then
if nexo == "#x#" or nexo == "~x~" then
return nexo.."~o~"
end
end
if find(sufijo, "^[ie]r") then
if find(nexo, "^[~#]?[bdeir]?r[~#]?$") then
return nexo..sub(sufijo, 3)
end
end
if find(sufijo, "^[aeoáéó]") then
if nexo == "gü" then
return "g~uy~"..sufijo
end
if nexo == "u" then
return "u~y~"..sufijo
end
end
if find(sufijo, "^i[aeoáéó]") then
if nexo == "ñ" or nexo == "ll" or nexo == "#x#" or nexo == "~x~" or nexo == "x" then
return "~"..nexo..sub(sufijo, 2).."~"
end
if nexo == "X" then
return "~x"..sub(sufijo, 2).."~"
end
if nexo == "gü" then
return "g~uy~"..sub(sufijo, 2)
end
if nexo == "u" then
return "u~y~"..sub(sufijo, 2)
end
if nexo == "e" then
return nexo.."~y~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i[^aeiouáéíóú]") then
if nexo == "e" then
return nexo.."~í~"..sub(sufijo, 2)
end
end
end
if nexo == "C" then
return "c"..sufijo
end
if nexo == "L" then
return "l"..sufijo
end
if nexo == "R" then
return "r"..sufijo
end
if nexo == "S" then
return "s"..sufijo
end
if nexo == "X" then
return "x"..sufijo
end
return nexo..sufijo
end
local function combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf)
local nucleo_ = gsub(nucleo, "[~#]", "")
local nexosufijo_ = gsub(nexosufijo, "[~#]", "")
if find(nucleo_, "ca[yi]$") and nexosufijo_ == "i" then -- [[cayer]], pero no [[coyer]]
return gsub1(nucleo, "[yi]([~#]?)$", "%1")..nexosufijo
elseif find(nucleo_, "[xy]([~#]?)$") and find(nexosufijo_, "^i"..VOCAL) then -- yió -> yó, xió -> xó
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1")
elseif find(nucleo_, "i$") and find(nexosufijo_, "^i") then -- se juntan dos íes o y-i (ej. reír, freír, oír)
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1")
elseif find(nucleo_, "í[~#]?$") and find(nexosufijo_, "^á") then -- cambiar síáis por síais
return nucleo..gsub1(nexosufijo, "^([~#]?)á", "%1a")
elseif find(nucleo_, "^[^áéíóú]-[aeiou]h?$") and find(nexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- sufijo con i/u tónica (caISTE, caIMOS, caIDO, oID, reHÚyo etc.)
return nucleo..gsub1(nexosufijo, "^([~#]?h?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleo_, "[^gq][aeiou]$") and find(nexosufijo_, "^i[aeiouáéíóú]") then -- se junta [aeiou]i[aeiouáéíóú] -> cambio a y (creYO) PERO [[chinguiar]] -> chinguIando
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~y~")
elseif find(nucleo_, "[aeiou]$") and find(nexosufijo_, "^id$") then -- reír -> reÍd, embaír -> embaÍd
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~í~")
elseif find(nucleo_, "[bdeir]r[~#]?$") and find(nexosufijo_, "^er.") then -- moler, moldr
return nucleo..sub(nexosufijo, 3)
elseif find(nucleo_, "^[^aeiouáéíóú]+$")
and (find(nexosufijo_, "^"..CONS.."?"..CONS.."?".."[iuü]?[áéó][iuü]?[ns]?$") or find(nexosufijo_, "^[íú][ns]?$")) then -- caso de dar, vos *d+ás, debo quitar la tilde
return nucleo..gsub1(nexosufijo, "[áéíóú]", function(v) return "~"..quitar_tilde[v].."~" end)
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
local prefijo_ = gsub(prefijo, "[~#]", "")
local nucleonexosufijo_ = gsub(nucleonexosufijo, "[~#]", "")
if prefijo_ and find(prefijo_, "[aeiou]") and not find(prefijo_, "[áéíóú]") then
if find(prefijo_, "^[^áéíóú]-[aeiou]h?$") and find(nucleonexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- nucleonexosufijo con i/u tónica (rehacer -> rehíce)
return prefijo..gsub1(nucleonexosufijo, "^([~#]?h?[~#]?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleonexosufijo_, "^("..CONS.."*[iuü]?)([aeiou])([iuü]?[ns]?)$") then -- monosílabo: prever --> prevén
return prefijo..gsub1(nucleonexosufijo, "^([~#]?"..CONS.."*[~#]?[iuü]?[~#]?)([aeiou])([~#]?[iuü]?[~#]?[ns]?[~#]?)$", function(a, b, c) return a..agregar_tilde[b]..c end) -- ven --> prevén
end
end
return prefijo..nucleonexosufijo
end
local paradigmas_regulares = {
["ar"] = {
{"añunciar", {"iar$"}, { --necesidad de explicitar el diptongo, aunque esta variante es la que consideramos como la regular
}},
{"evacuar", {"cuar$"}, {
nexo = "cu"
}},
{"averiguar", {"guar$"}, {
nexo = "gu"
}},
{"complicar", {"car$"}, {
nexo = "c"
}},
{"llegar", {"gar$"}, {
nexo = "g"
}},
{"actuar", {"uar$"}, {
nexo = "u"
}},
{"realizar", {"zar$"}, {
nexo = "z"
}},
{"amar", {"ar$"}, {
}},
},
["er"] = {
{"ller", {"ller$"}, { -- Existe esto??
nexo = "ll"
}},
{"guer", {"guer$"}, { -- Existe esto??
nexo = "gu"
}},
{"güer", {"güer$"}, { -- Existe esto??
nexo = "gü"
}},
{"quer", {"quer$"}, { -- Existe esto??
nexo = "qu"
}},
{"paecer", {"[aeious]cer$"}, {
nexo = "C"
}},
{"vencer", {"[^aeious]cer$"}, { -- los verbos en -scer NO entran en este paradigma (ver fosforescer o evanescer)
nexo = "c"
}},
{"caler", {"[ao]ler$"}, { -- caler, goler
nexo = "L"
}},
{"querer", {"erer$"}, {
nexo = "R"
}},
{"coser", {"[aeiou]ser$"}, {
nexo = "S"
}},
{"texer", {"[aeiou]xer$"}, {
nexo = "X"
}},
{"lleer", {"eer$"}, {
nexo = "e"
}},
{"proteger", {"ger$"}, {
nexo = "g"
}},
{"atañer", {"ñer$"}, {
nexo = "ñ"
}},
{"uer", {"uer$"}, { -- Existe esto??
nexo = "u"
}},
{"emerxer", {"xer$"}, {
nexo = "x"
}},
{"temer", {"er$"}, {
}},
},
["ir"] = {
{"escabullir", {"llir$"}, {
nexo = "ll"
}},
{"distinguir", {"guir$"}, {
nexo = "gu"
}},
{"argüir", {"güir$"}, {
nexo = "gü"
}},
{"delinquir", {"quir$"}, {
nexo = "qu"
}},
{"llucir", {"[aeious]cir$"}, {
nexo = "C"
}},
{"fruncir", {"[^aeious]cir$"}, {
nexo = "c"
}},
{"inxerir", {"erir$"}, {
nexo = "R"
}},
{"tusir", {"[aeiou]sir$"}, {
nexo = "S"
}},
{"elixir", {"[aeiou]xir$"}, {
nexo = "X"
}},
{"dirigir", {"gir$"}, {
nexo = "g"
}},
{"gruñir", {"ñir$"}, {
nexo = "ñ"
}},
{"construir", {"uir$"}, { -- var. construyir
nexo = "u"
}},
{"finxir", {"xir$"}, {
nexo = "x"
}},
{"partir", {"ir$"}, {
}},
},
["ír"] = {
{"reír", {"eír$"}, {
nucleo = "e",
alt = {"í-i"},
}},
{"ír", {"ír$"}, { -- para que oír no tire error
}},
}
}
local paradigmas_irregulares = {
["ar"] = {
{"andar", {"^d?e?s?andar$"}, { -- cuidado con mandar
nucleo = "and",
ind_perf = {nucleo = "and"},
ind_pluperf = {nucleo = "anduv"},
subj_imp = {nucleo = "anduv"},
}},
{"dar", {"^d?e?s?dar$"}, { -- no pueden ir otros verbos como "andar o quedar"
nucleo = "d",
ind_pres = {{"doi", "do"}, {"das"}, nil, nil, nil, {"dan"}},
ind_perf = {sufijo_inf = "er"},
ind_pluperf = {sufijo_inf = "er"},
subj_pres = {{"dea"}, {"deas"}, {"dea"}, {"deamos"}, {"deáis"}, {"dean"}},
subj_imp = {sufijo_inf = "er"},
imper = {nil, nil, {"dea"}, {"deamos"}, nil, {"dean"}},
}},
{"errar", {"^errar$"}, {
nucleo = "err",
alt = {"ye"},
}},
{"inhestar", {"inhestar$"}, {
alt = {"ie"},
part = {"inhiesto"}
}},
{"tar", {"^tar$"}, {
ind_pres = {{"toi", "to"}, {"tas"}, nil, nil, nil, {"tán"}},
ind_perf = {nucleo = "t"},
ind_pluperf = {nucleo = "tuv"},
subj_pres = {{"tea"}, {"teas"}, {"tea"}, {"teamos"}, {"teáis"}, {"tean"}},
subj_imp = {nucleo = "tuv"},
imper = {nil, nil, {"tea"}, nil, {"tai"}, {"tean"}}
}},
--{"ensugar", {"ensugar$"}, {
-- part = {"ensugao", "ensucho"},
--}},
{"triar", {"triar$"}, {
nexo = "i",
}},
{"aislar", {"aislar$"}, {
alt = {"í"}
}},
{"avergoñar", {"avergoñar$"}, {
alt = {"üe"}
}},
{"auñar", {"^auñar$"}, { -- REVISAR
alt = {"ú"}
}},
{"contar", {"contar$"}, {
alt = {"ue"}
}},
{"pensar", {"^pensar$"}, { -- no puede ir compensar
alt = {"ie"}
}},
},
["er"] = {
{"caber", {"^caber$"}, {
ind_pres = {{"quepo"}},
fut = {nucleo = "ca", nexo = "#br#"},
ind_perf = {nucleo = "cup"},
ind_pluperf = {nucleo = "cup"},
subj_pres = {nucleo = "quep"},
subj_imp = {nucleo = "cup"},
cond = {nucleo = "ca", nexo = "#br#"},
imper = {nil, nil, {"quepa"}, {"quepamos"}, nil, {"quepan"}}
}},
{"caer", {"caer$"}, {
nucleo = "ca",
ind_pres = {{"caigo"}, nil, {"cai"}},
subj_pres = {nucleo = "caig"},
imper = {nil, nil, {"caiga"}, {"caigamos"}, nil, {"caigan"}}
}},
{"cayer", {"cayer$"}, {
ind_pres = {nil, {"caes"}, {"cai"}},
}},
{"encender", {"encender$"}, {
alt = {"ie"},
-- part = {"encendío", "encenso"}, -- encenso adjetivo??
}},
{"facer", {"[hfj]acer$"}, { -- REVISAR
nucleo = "a",
nexo = "c", -- evitar "C", necesito forzarlo
part = {"echo"},
ind_pres = {{"ago"}, {"aes"}, {"ai"}, nil, nil, {"aen"}},
ind_perf = {nucleo = "i"},
ind_pluperf = {nucleo = "i"},
fut = {nucleo = "a", nexo = "#dr#"},
subj_pres = {nucleo = "ag", nexo = ""},
subj_imp = {nucleo = "i"},
cond = {nucleo = "a", nexo = "#dr#"},
imper = {nil, {"ai"}, {"aga"}, {"agamos"}, nil, {"agan"}}
}},
{"faer", {"[hfj]aer$"}, { -- REVISAR
nucleo = "a",
part = {"echo"},
ind_pres = {{"aigo"}, nil, {"ai"}},
ind_perf = {nucleo = "ix"},
ind_pluperf = {nucleo = "ix"},
fut = {nucleo = "a", nexo = "#ir#"},
subj_pres = {nucleo = "aig", nexo = ""},
subj_imp = {nucleo = "ix"},
cond = {nucleo = "a", nexo = "#ir#"},
imper = {nil, nil, {"aiga"}, {"aigamos"}, nil, {"aigan"}}
}},
{"haber", {"^haber$"}, {
ind_pres = {{"he"}, {"has"}, {"ha", "hai{IMPERSONAL}"}, {"hemos", "habemos"}, nil, {"han"}},
ind_perf = {nucleo = "hub", {"hubi", "hebi"}, nil, {"hubo", "hebo"}},
ind_pluperf = {nucleo = "hub"},
fut = {nucleo = "ha", nexo = "#br#"},
subj_pres = {nucleo = {"hay", "heb"}},
subj_imp = {nucleo = "hub"},
cond = {nucleo = "ha", nexo = "#br#"},
imper = {nil, {"he{†}", "habe{†}"}, {"he{†}", "habe{†}"}, {"haya{†}"}, {"hayamos{†}"}, nil, {"hayan{†}"}},
}},
{"moler", {"[^g]oler$"}, { -- no goler porque muta a üe
nucleo = "o",
nexo = "L",
alt = {"ue"},
ind_pres = {{"uelo", "uelgo"}},
subj_pres = {nucleo = {"uel", "uelg"}, nexo = "", nil, nil, nil, {"olamos", "olgamos"}, {"oláis", "olgáis"}},
fut = {nucleo = {"ol", "oldr"}, nexo = ""},
cond = {nucleo = {"ol", "oldr"}, nexo = ""},
imper = {nil, nil, {"uela", "uelga"}, {"olamos", "olgamos"}, nil, {"uelan", "uelgan"}}
}},
{"morrer", {"morrer$"}, {
nucleo = "morr",
alt = {"ue"},
part = {"muerto"},
}},
{"goler", {"^goler$"}, {
alt = {"üe"},
}},
{"volver", {"olver$"}, {
nucleo = "olv",
alt = {"ue"},
part = {"uelto"}
}},
{"oyer", {"^oyer$"}, { -- pero no coyer
ind_pres = {{"oigo"}},
subj_pres = {nucleo = "oig"},
imper = {nil, nil, nil, {"oiga"}, {"oigamos"}, nil, {"oigan"}}
}},
-- placer sale solo como sust.
{"poder", {"poder$"}, {
nucleo = "pod",
alt = {"ue"},
ger = {"pudiendo"},
ind_perf = {nucleo = "pud"},
ind_pluperf = {nucleo = "pud"},
fut = {nucleo = "po", nexo = "#dr#"},
subj_imp = {nucleo = "pud"},
cond = {nucleo = "po", nexo = "#dr#"},
}},
{"poner", {"poner$"}, {
nucleo = "pon",
part = {"puesto"},
ind_pres = {{"pongo"}},
ind_perf = {nucleo = "punx"},
ind_pluperf = {nucleo = "punx"},
fut = {nucleo = "pon", nexo = "#dr#"},
subj_pres = {nucleo = "pong"},
subj_imp = {nucleo = "punx"},
cond = {nucleo = "pon", nexo = "#dr#"},
imper = {nil, {"pon"}, {"ponga"}, nil, nil, {"pongan"}},
}},
{"proveer", {"proveer$"}, {
nucleo = "prov",
part = {"provisto"}
}},
{"querer", {"querer$"}, { -- REVISAR
nucleo = "quer",
alt = {"ie"},
ind_perf = {nucleo = "quix"},
ind_pluperf = {nucleo = "quix"},
fut = {nucleo = "que", nexo = "#dr#"},
subj_imp = {nucleo = "quix"},
cond = {nucleo = "que", nexo = "#dr#"},
}},
{"raer", {"^raer$"}, { -- no contraer, etc. REVISAR
ind_pres = {{"raigo"}},
subj_pres = {nucleo = "raig"},
imper = {nil, nil, {"raiga"}, nil, nil, {"raigan"}}
}},
-- rayer regular?
{"roer", {"roer$"}, { -- REVISAR
nucleo = "ro",
ind_pres = {{"roigo"}},
subj_pres = {nucleo = "roig"},
imper = {nil, nil, {"roiga"}, nil, nil, {"roigan"}}
}},
-- royer regular?
{"romper", {"^romper$", "^arromper$"}, { -- no corromper, derromper, entrerromper
nucleo = "romp",
alt = {"ue"},
part = {"roto"}
}},
{"corromper", {"romper$"}, {
nucleo = "romp",
alt = {"ue"},
}},
{"saber", {"saber$"}, {
nucleo = "sab",
ind_pres = {{"sé"}},
ind_perf = {nucleo = "sup"},
ind_pluperf = {nucleo = "sup"},
fut = {nucleo = "sa", nexo = "#br#"},
subj_pres = {nucleo = "sep"},
subj_imp = {nucleo = "sup"},
cond = {nucleo = "sa", nexo = "#br#"},
imper = {nil, nil, {"sepa"}, nil, nil, {"sepan"}}
}},
{"ser", {"^ser$"}, {
ind_pres = {{"soi", "so"}, {"yes"}, {"ye"}, {"somos"}, {"sois"}, {"son"}},
ind_imp = {{"yera"}, {"yeres"}, {"yera"}, {"yéramos", "yéremos"}, {"yerais", "yereis"}, {"yeren"}},
ind_pluperf = {nucleo = "", nexo = {"#fu#", "#fo#"}},
ind_perf = {{"fui"}, {"fosti", "fuesti", "fuisti"}, {"foi", "fo"}, {"fomos", "fuemos", "fuimos"}, {"fostis", "fuestis", "fuistis"}, {"foron", "fueron"}},
subj_pres = {nucleo = {"sey", "sí"}},
subj_imp = {nucleo = "", nexo = {"#fu#", "#fo#"}}, -- no puedo poner "u" porque obtendría "fuyera" -- REVISAR: hay que agregar la variante con fo
imper = {nil, {"sé"}, {"seya", "sía"}, {"seyamos", "síamos"}, nil, {"seyan", "sían"}}
}},
{"tener", {"tener$", "^ter$"}, {
nucleo = "ten",
alt = {"ie"},
ind_pres = {{"tengo", "teo{P}", "to{P}"}},
ind_perf = {nucleo = "tuv", {"tuvi", "tevi"}, nil, {"tuvo", "tevo"}},
ind_pluperf = {nucleo = "tuv"},
fut = {nucleo = "ten", nexo = "#dr#"},
subj_pres = {nucleo = "teng"},
subj_imp = {nucleo = "tuv"},
cond = {nucleo = "ten", nexo = "#dr#"},
imper = {nil, {"ten"}, {"tenga"}, {"tengamos"}, nil, {"tengan"}}
}},
{"traer", {"traer$"}, {
nucleo = "tra",
ind_pres = {{"traigo"}},
ind_perf = {nucleo = "tra", nexo = "#x#"},
ind_pluperf = {nucleo = "tra", nexo = "#x#"},
subj_pres = {nucleo = "traig"},
subj_imp = {nucleo = "tra", nexo = "#x#"},
imper = {nil, nil, nil, {"traiga"}, {"traigamos"}, nil, {"traigan"}}
}},
{"trayer", {"trayer$"}, {
nucleo = "tra",
ind_perf = {nucleo = "tra", nexo = "#x#"},
ind_pluperf = {nucleo = "tra", nexo = "#x#"},
subj_imp = {nucleo = "tra", nexo = "#x#"},
}},
{"ver", {"^ver$", "^antever$", "^entrever$", "^prever$", "^rever$"}, {
nucleo = "v",
part = {"visto"},
ind_pres = {{"veo"}},
subj_pres = {nucleo = "ve"},
imper = {nil, {"ve"}, {"vea"}, nil, nil, {"vean"}}
}},
{"yacer", {"^yacer$", "^subyacer$"}, { -- REVISAR: existe esto? xacer me sale como sustantivo
nucleo = "yac",
nexo = "", -- evitar C (epéntesis con zc), lo voy a agregar manual
ind_pres = {{"yazco", "yazgo", "yago"}},
subj_pres = {nucleo = {"yazc", "yazg", "yag"}},
imper = {nil, {"yace", "yaz"}, {"yazca", "yazga", "yaga"}, nil, nil, {"yazcan", "yazgan", "yagan"}}
}},
{"mover", {"mover$"}, {
alt = {"ue"},
}},
{"entender", {"entender$"}, {
alt = {"ie"},
}},
},
["ir"] = {
-- asir no existe
{"abrir", {"[^js]abrir$", "^abrir$"}, { -- abrir, cubrir y derivados, pero no "desabrir" ni "jabrir" (son regs.)
nucleo = "abr",
part = {"abierto"}
}},
{"abrir", {"ubrir$"}, { -- Parte 2. NOTA: no pueto tomar "br" como núcleo porque el programa piensa que es monosílabo y pone mal las tildes (cf. [[entreabrir]], [[reabrir]])
nucleo = "ubr",
part = {"ubierto"}
}},
-- para decir contemplo 4 casos:
-- 1. decir, redecir, entredecir, antedecir: lo normal, con el imperativo en "dí" (di)
-- 2. interdecir: similar a 1. pero el imperativo es interdice (no *interdí) --> esto no existe en ast creo
-- 3. bendecir, maldecir: agrego bendito, maldito al pp
-- 4. condecir, contradecir, desdecir, predecir: parto de 1 pero agrego el futuro regular que esta aceptado
{"dicir", {"^dicir$", "^redicir$", "^entredicir$", "^antedicir$"}, {
nucleo = "di",
part = {"dicho"},
ind_pres = {{"digo"}},
ind_perf = {nexo = "#x#"},
ind_pluperf = {nexo = "#x#"},
fut = {nucleo = "d", nexo=""},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#x#"},
cond = {nucleo = "d", nexo=""},
imper = {nil, {"di"}, {"diga"}, {"digamos"}, nil, {"digan"}}
}},
{"bendicir", {"bendicir$", "maldicir$"}, {
nucleo = "di",
part = {"dicío{PART}", "dito{ADJ}"},
ind_pres = {{"digo"}},
ind_perf = {nexo = "#x#"},
ind_pluperf = {nexo = "#x#"},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#x#"},
imper = {nil, {"diz"}, {"diga"}, nil, nil, {"digan"}}
}},
{"predicir", {"dicir$"}, {
nucleo = "di",
part = {"dichu"},
ind_pres = {{"digo"}},
ind_perf = {nexo = "#x#"},
ind_pluperf = {nexo = "#x#"},
fut = {nucleo = {"dec", "d"}, nexo=""},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#x#"},
cond = {nucleo = {"dec", "d"}, nexo=""},
imper = {nil, {"dí"}, {"diga"}, nil, nil, {"digan"}}
}},
-- erguir (erguer) es regular
--{"imprimir", {"imprimir$"}, {
-- nucleo = "imprim",
-- part = {"imprimíu{PART}", "impresu{PART/ADJ}"}
--}},
{"dir", {"^dir$"}, {
ind_pres = {{"voi", "vo"}, {"vas"}, {"va"}, {"vamos"}, {"vais"}, {"van"}},
ind_imp = {{"diba"}, {"dibas"}, {"diba"}, {"díbamos", "díbemos"}, {"dibais", "dibeis"}, {"diben"}},
ind_perf = {{"fui"}, {"fosti", "fuesti", "fuisti"}, {"foi", "fo"}, {"fomos", "fuemos", "fuimos"}, {"fuestis", "fuistis"}, {"foron", "fueron"}},
ind_pluperf = {nucleo = "", nexo = {"#fu#", "#fo#"}},
subj_pres = {{"vaiga", "vaya"}, {"vaigas", "vayas"}, {"vaiga", "vaya"}, {"vaigamos", "vayamos"}, {"vaigáis", "vayáis"}, {"vaigan", "vayan"}},
subj_imp = {nucleo = "", nexo = {"#fu#", "#fo#"}}, -- no puedo poner "u" porque obtendría "fuyera" -- REVISAR: faltan los otros nexos posibles
imper = {nil, {"ve"}, {"vaiga", "vaya"}, {"vaigamos", "vayamos"}, {"vaigáis", "vayáis"}, {"vaigan", "vayan"}}
}},
-- pudrir es podrecer (simil paecer)
{"salir", {"salir$"}, {
nucleo = "sa",
nexo = "l",
ind_pres = {{"salgo"}},
fut = {nucleo = "sal", nexo = "#dr#"},
subj_pres = {nucleo = "salg", nexo = ""},
cond = {nucleo = "sal", nexo = "#dr#"},
imper = {nil, {"sal"}, {"salga"}, {"salgamos"}, nil, {"salgan"}}
}},
{"escribir", {"scribir$"}, {
nucleo = "scrib",
part = {"scrito"}
}},
{"producir", {"ducir$"}, {
ind_perf = {nexo = {"c", "#x#"}},
ind_pluperf = {nexo = {"c", "#x#"}},
subj_imp = {nexo = {"c", "#x#"}},
}},
{"valir", {"valir$"}, {
nucleo = "va",
nexo = "l",
ind_pres = {{"valgo"}},
fut = {nucleo = "val", nexo = "#dr#"},
subj_pres = {nucleo = "valg", nexo = ""},
cond = {nucleo = "val", nexo = "#dr#"},
imper = {nil, nil, {"valga"}, {"valgamos"}, nil, {"valgan"}}
}},
{"venir", {"venir$"}, {
nucleo = "ven",
alt = {"ie-i"},
ind_pres = {{"vengo"}, nil, {"vien"}},
fut = {nexo = "#dr#"},
ind_perf = {nucleo = "vin", nil, nil, {"vieno"}}, -- REVISAR: la 3s es él vIEno, no *vino, hay más verbos así?
subj_pres = {nucleo = "veng"},
cond = {nexo = "#dr#"},
imper = {nil, {"ven"}, {"venga"}, {"vengamos"}, nil, {"vengan"}}
}},
{"rir", {"^rir$", "^frir$"}, {
nucleo = "r",
part = {"frío", "frito"},
ind_pres = {{"río"}},
subj_pres = {nucleo = "rí"},
imper = {nil, nil, {"ría"}, {"riamos"}, nil, {"rían"}}
}},
{"sentir", {"sentir$"}, { -- discernir entra en este paradigma tmb.
alt = {"ie-i"}
}},
{"podrir", {"podrir$"}, {
alt = {"u-u"},
}},
{"reunir", {"reunir$"}, {
alt = {"ú"}
}},
{"prohibir", {"prohibir$"}, {
alt = {"í"}
}},
{"rehenchir", {"rehenchir$"}, {
alt = {"í-i"}
}},
{"repetir", {"repetir$"}, {
alt = {"i-i"}
}},
{"dormir", {"dormir$"}, {
alt = {"ue-u"}
}},
},
["ír"] = {
{"desvaír", {"desvaír$"}, { -- hay más verbos en -air? no podemos considerarlo como regla general
ind_pres = {{"desvayo"}},
subj_pres = {nucleo = "desvay"},
imper = {nil, nil, nil, {"desvaya"}, {"desvayamos"}, nil, {"desvayan"}}
}},
--{"freír", {"freír$"}, {
-- nucleo = "fre",
-- part = {"frito{PART/ADJ}", "freído{PART}"},
--}},
},
}
local alt_info = {
["ar"] = {
["í"] = {"aislar", "i", "í"}, -- tb. descafeinar
["ú"] = {"aunar", "u", "ú"}, -- tb. rehusar
["ie"] = {"pensar", "e", "ie"},
["ue"] = {"contar", "ou", "ue"}, -- también jugar
["üe"] = {"agorar", "o", "üe"},
["hue"] = {"desosar", "ou", "hue"},
["ye"] = {"errar", "e", "ye"},
},
["er"] = {
["i"] = {"???", "e", "i"}, -- REVISAR: existe esto??
["ie"] = {"entender", "e", "ie"},
["ue"] = {"mover", "o", "ue"},
["üe"] = {"goler", "o", "üe"},
},
["ir"] = {
["i"] = {"???", "e", "i"}, -- REVISAR: existe esto??
["í"] = {"prohibir", "i", "í"},
["í-i"] = {"rehenchir", "e", "í", "i"},
["i-i"] = {"repetir", "e", "i", "i"},
--["ie"] = {"discernir", "ei", "ie"}, -- por las dudas también la i, por inquirir
["ie-i"] = {"sentir", "ei", "ie", "i"}, -- inquirir
["u"] = {"???", "o", "u", "u"},
["ú"] = {"reunir", "u", "ú"},
["u-u"] = {"podrir", "o", "u", "u"}, -- REVISAR: existe esto??
["ue-u"] = {"dormir", "o", "ue", "u"},
["ye-i"] = {"erguir", "e", "ye", "i"},
},
["ír"] = {
["í-i"] = {"reír", "e", "í", "i"},
["oy"] = {"oír", "o", "oy", "oy"},
}
}
local function doble_imperativo(alt, nexo, sufijo_inf)
if sufijo_inf == "ar" or nexo:find("[CLRSX]") then
return false
end
for _,a in ipairs(alt) do
if a == "ie" or a == "ue" or a == "üe" or a == "ie-i" or a == "ue-u" then
return true
end
end
return false
end
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo[forma].sufijo_inf or conjinfo.sufijo_inf
local sufijos_ = obtener_sufijos(sufijo_inf, ((forma == "ind_perf" or forma == "ind_pluperf" or forma == "subj_imp") and conjinfo[forma].nucleo) and forma.."_alt" or forma)
local nucleos
if not conjinfo[forma].nucleo then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleos2
elseif forma == "part" then
nucleos = conjinfo.nucleo_inf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos1}
elseif forma == "ind_perf" then
nucleos = {conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos2, conjinfo.nucleos1}
elseif forma == "ind_pluperf" or forma == "subj_imp" then
local n = conjinfo.nucleos2
nucleos = {n, n, n, n, n, n}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleos1}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n}
end
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
if not nexo then
nexo = ""
end
local prefijo = conjinfo.prefijo
if type(nexo) == "string" then
nexo = {nexo}
end
if forma == "imper" and doble_imperativo(conjinfo.alt, conjinfo.nexo or "", conjinfo.sufijo_inf) then
nucleos[TU] = deepcopy(nucleos[TU]) -- para no modificar los demás núcleos
insert_if_not(nucleos[TU], conjinfo.nucleo_inf[1])
end
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for j, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo[1], sufijos_[1], sufijo_inf)
for _,nucleo in ipairs(nucleos) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, conjinfo.nucleo_inf[1])))
end
end
end
return
end
for i = YO, ELLOS do
local p = tostr[i]
if conjinfo[forma][i] then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local k = i
while sufijos_[k] do
for _, nx in ipairs(nexo) do
for _, n in ipairs(nucleos[i]) do
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nx, sufijos_[k], sufijo_inf)
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo2, conjinfo.nucleo_inf[1])))
if forma == "imper" and i == TU and (conjinfo.v:find("goler$") or conjinfo.v:find("coser$")) then -- excepciones con triple imperativo harcodeadas
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(conjinfo.nucleo_inf[1], nexosufijo2, conjinfo.nucleo_inf[1])))
end
end
end
end
k = k + 6
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local arr = res[forma]
local t = {}
local tiempo, i = match(forma, "^(.*)(%d)$")
if not i then
tiempo = forma
i = 1
end
i = tonumber(i)
local rest_ = i < NOSOTROS and resto or resto_pl
local rest_pl_ = resto_pl
if tiempo == "imper" and adv == "no " then
tiempo = "subj_pres"
arr = fmtinfo["subj_pres"..tostr[i]]
end
for _, v in ipairs(arr) do
local hs = auxiliar[tiempo]
local v2
local rest = rest_
local rest_pl = rest_pl_
if hs then
rest = " "..v..rest
rest_pl = " "..v..rest_pl
v = hs[i]
v2 = hs[i+7] -- subjuntivo imperfecto
end
if forma == "inf" or forma == "inf_comp" then
if pron ~= "" and art ~= "" then
v = gsub(v, "([aei])r$", function (x) return agregar_tilde[x].."r" end)
end
insert(t, adv..v..pron..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..v..pron..art..f_links(rest_pl))
end
elseif forma == "ger" or forma == "ger_comp" then
local vpron = v..pron
if pron ~= "" or art ~= "" then
vpron = gsub(vpron, "^(.*)([ae])(ndo)", function(x, y, z) return x..agregar_tilde[y]..z end)
end
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
if rest_pl ~= rest then
insert(t, adv..f(vpron)..art..f_links(rest_pl))
end
elseif forma == "part" then
insert(t, adv..f_links(v)..f_links(resto))
if (resto_pl ~= resto) then
insert(t, adv..f_links(v)..f_links(resto_pl))
end
elseif tiempo == "imper" and (pron ~= "" or art ~= "") then
-- tengo que correr la acentuación una sílaba para atrás, lo bueno es que no hay formas terminadas en consonante dist. de n o s
local vpron = gsub(v, "[~#]", "") -- PARCHE: quito todas las marcas de colores, ya que cuesta mucho transformar los verbos con imperativos irregulares, quedan incrustadas en el medio
-- 1. Las llanas pasan a esdrújulas
vpron = gsub(vpron,
"^([^áéíóú]-)([aeo])(h?[iuü]?h?[aeo][ns]?)$", -- si no hay consonante de separación, hay un hiato de dos vocales abiertas. OJO, no es lo mismo comenzar con [^áéíóú]- que comenzar con [^áéíóú]*
function(x, y, z) return x..agregar_tilde[y]..z end
)
vpron = gsub(vpron,
"^([^áéíóú]-)([aeoiu])(h?[iuü]?"..CONS_SALVO_H.."+u?[iuü]?[aeiou]+[ns]?)$", -- normal, con consonante de separación. OJO, no es lo mismo comenzar con [^áéíóú]- que comenzar con [^áéíóú]*
function(x, y, z) return x..agregar_tilde[y]..z end
)
-- si es un hiato con tilde, lo dejo
-- 2. Las agudas pasan a llanas, los monosílabos con tilde la pierden, SALVO LOS HIATOS CON VOCAL CERRADA (ej: reí -> reíte. embaí -> embaíte, PERO pecheá -> pecheala)
vpron = gsub(vpron,
"^([^áéíóú]*"..CONS_SALVO_H.."u?[iuü]?)([áéíóú])([ns]?)$",
function(x, y, z) return x..quitar_tilde[y]..z end
)
vpron = gsub(vpron,
"^([^áéíóú]*[aeo])([áéó])([ns]?)$",
function(x, y, z) return x..quitar_tilde[y]..z end
)
if pron == "se" then -- ajustes finales https://www.rae.es/dpd/pronombres%20personales%20%C3%A1tonos
local enc = REFLEXIVOS[i]
if enc == "nos" then -- dejémoS nos -> dejémonos
vpron = gsub(vpron, "mos$", "mo")
end
if enc == "os" then -- amaD + os -> amaos, hacED + os -> haceos, salvo idos
vpron = gsub(vpron, "([ae])d$", "%1")
vpron = gsub(vpron, "("..LETRA..")[ií]d$", "%1í") -- aseguro q no sea "id" a secas
end
if art ~= "" then -- Si tengo pronombre y artículo, la palabra tiene que quedar esdrújula o sobreesdrújula (dársela -> dátela)
vpron = gsub(vpron,
"^([^áéíóú]*)([aeiou])([^áéíóú]-)$",
function(x, y, z) return x..agregar_tilde[y]..z end
)
end
vpron = vpron..enc
end
insert(t, adv..(art == "" and f_links(vpron) or f(vpron))..art..f_links(rest))
else -- si es imperativo y el pronombre y artículo están ambos vacíos, es lo mismo anteponerlos que posponerlos
local pronart = pron == "se" and REFLEXIVOS[i].." " or ""
pronart = art ~= "" and pronart..art.." " or pronart
insert(t, adv..pronart..f_links(v)..f_links(rest))
if v2 then
insert(t, adv..pronart..f_links(v2)..f_links(rest))
end
end
end
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["impersonal"] = {},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["indirecto"] = {tipo = "bool"},
["alt"] = {lista = true},
["paradigma"] = {lista = true},
["nota"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local adv, r1 = match(tit, "^([sSnN][íu]n?"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiáéí]r)(s?e?)(l?[aeo]?s?)(.-)$")
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[ío]?"..ESPACIO.."?"..LETRA.."*[aeiáéí]rs?e?l?[aeo]?s?(.-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
v = gsub(v, "^(%S*)ár$", "%1ar") -- pronominales
v = gsub(v, "^(%S*)ér$", "%1er") -- pronominales
v = gsub(v, "^(%S*[^aeo])ír$", "%1ir") -- grafías anticuadas
local sufijo_inf = match(v, "[aeií]r$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
for N = 1, math.max(1,
maxindex(args["paradigma"]),
maxindex(args["alt"])) do
local conjinfo = {}
if find(v, "iar$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then
error("Especifique el (los) paradigma(s) para los verbos en -iar (añunciar, triar)")
end
local encontre_irreg = false
for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
conjinfo = deepcopy(p[3])
es_irregular = true
paradigmas_reconocidos[p[1]] = true
encontre_irreg = true
break
end
end
if encontre_irreg then
break
end
end
local encontre_reg = false
for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
local vacio = true
for k, v in pairs(p[3]) do
vacio = false
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
if vacio then
paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]]
end
encontre_reg = true
break
end
end
if encontre_reg then
break
end
end
assert(encontre_reg, "paradigma no reconocido")
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
if not conjinfo.nucleo_inf then
conjinfo.nucleo_inf = sub(v, 1, len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
conjinfo.prefijo = ""
elseif not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, len(v) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
if not conjinfo.prefijo then -- caso en el que cambié el núcleo
conjinfo.prefijo = ""
end
conjinfo.nucleos1 = {}
conjinfo.nucleos2 = {}
conjinfo.alt = conjinfo.alt or {}
if args["alt"][N] then
insert_if_not(conjinfo.alt, args["alt"][N])
end
for i, a in ipairs(conjinfo.alt) do
if a ~= "REG" then
local n1, n2
local info = alt_info[sufijo_inf][a]
assert(info, "Valor de alt no reconocido: "..a)
local sust
n1, sust = gsubb(conjinfo.nucleo_inf, "^(.*)["..info[2].."](.-)$", "%1#"..info[3].."#%2")
if info[4] then
n2, sust = gsubb(conjinfo.nucleo_inf, "^(.*)["..info[2].."](.-)$", "%1#"..info[4].."#%2")
end
assert(sust, "Alternancia vocálica no reconocida")
insert_if_not(conjinfo.nucleos1, n1)
insert_if_not(conjinfo.nucleos2, n2)
paradigmas_reconocidos[info[1]] = true
es_irregular = true -- si tengo el alt será siemrpe irregular, indistintamente de si el paradigma del mismo índice es regular
else
insert_if_not(conjinfo.nucleos1, conjinfo.nucleo_inf)
end
end
if not conjinfo.nucleos1[1] then
conjinfo.nucleos1[1] = conjinfo.nucleo_inf
end
if not conjinfo.nucleos2[1] then
conjinfo.nucleos2[1] = conjinfo.nucleo_inf
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if find(e, 'PART') or not find(e, 'ADJ') and not find(e, "†") and not find(e, "{x}") then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, resto=resto, resto_pl=resto_pl,impers=args["impersonal"]}
for _,s in ipairs(tostr) do
fmtinfo["subj_pres"..s] = deepcopy(resultante["subj_pres"..s])
end
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local impers = args["impersonal"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, impers)
end)
local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper
if impers == "3" then
fila_pronombres_ind = {"", "(ello)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(ello)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que ello)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(ello)", color=COLOR_IMPER, header=true, class="pc"}
cs = 2
elseif impers == "36" then
fila_pronombres_ind = {"", "(ello)", "(ellos)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(ello)", "(ellos)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que ello)", "(que ellos)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(ello)", "(ellos)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_ind = {"", "yo", "tu", "él, vusté", "nós", "vós", "ellos", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "yo", "tu", "él, vusté", "nos", "vos", "ellos", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que yo", "que tu", "qu'él, que vusté", "que nos", "que vos", "qu'ellos", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tu)", "(vusté)", "(nosotros)", "(vosotros)", "(vustedes)", color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = math.floor(cs / 2)
cs2 = cs - cs1
local t = {}
insert(t, {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true})
if impers == "3" then
-- resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
-- resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
insert(t, {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf})
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger})
insert(t, {{"Participio", header=true, color=COLOR_NP}, resultante.part})
else
resultante.inf.colspan = cs
resultante.ger.colspan = cs
resultante.part.colspan = cs
-- resultante.inf.colspan = cs1-1
-- resultante.ger.colspan = cs1-1
-- resultante.part.colspan = cs1-1
-- resultante.inf_comp.colspan = cs2
-- resultante.ger_comp.colspan = cs2
insert(t, {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf})
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger})
insert(t, {{"Participio", header=true, color=COLOR_NP}, resultante.part})
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
insert(t, {{"Formas personales", colspan=cs}, color=COLOR_H, header=true})
insert(t, {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true})
insert(t, fila_pronombres_ind)
insert(t, {{"Presente", color=COLOR_IND, header=true}, ic("ind_pres")})
insert(t, {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")})
insert(t, {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("ind_perf")})
insert(t, {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")})
-- insert(t, {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("ind_perf_comp")})
-- insert(t, {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("ind_anter")})
insert(t, {{"Modo potencial", colspan=cs}, color=COLOR_COND, header=true})
insert(t, fila_pronombres_cond)
insert(t, {{"Futuro", color=COLOR_COND, header=true}, ic("fut")})
--insert(t, {{"Futuro compuesto", color=COLOR_COND, header=true}, ic("fut_comp")})
insert(t, {{"Condicional simple", color=COLOR_COND, header=true}, ic("cond")})
-- insert(t, {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("cond_comp")})
insert(t, {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true})
insert(t, fila_pronombres_subj)
insert(t, {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")})
insert(t, {{"Pretérito", color=COLOR_SUBJ, header=true}, ic("subj_imp")})
-- insert(t, {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")})
-- insert(t, {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")})
insert(t, {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true})
insert(t, fila_pronombres_imper)
if mostrar_imper then
insert(t, {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")})
else
insert(t, {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}})
end
insert(t, {{f("Leyenda: † arcaico, x no normativo, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}})
args["nota"] = args["nota"] or ""
impers = impers or ""
if impers == "utc3" then
args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if impers == "umc3" then
args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if impers == "utc36" then
args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
if impers == "umc36" then
args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
insert(t, {{args["nota"] and args["nota"] or "", colspan=cs}})
local paradigmas_t = {}
local cats = {}
if es_irregular then
insert(cats, "AST:Verbos irregulares")
-- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar
paradigmas_reconocidos["añunciar"] = nil
paradigmas_reconocidos["amar"] = nil
paradigmas_reconocidos["temer"] = nil
paradigmas_reconocidos["partir"] = nil
paradigmas_reconocidos["ír"] = nil
else
insert(cats, "AST:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "AST:Verbos del paradigma "..p)
end
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "AST:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "AST:Verbos terciopersonales")
end
if find(impers, "^ind") then
insert(cats, "AST:Verbos de objeto indirecto")
end
if defectivo then
insert(cats, "AST:Verbos defectivos")
end
if sufijo_inf == "ar" then
insert(cats, "AST:Verbos de la primera conjugación")
elseif sufijo_inf == "er" then
insert(cats, "AST:Verbos de la segunda conjugación")
else -- será ir o ír, ya fue chequeado antes
insert(cats, "AST:Verbos de la tercera conjugación")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")",
t,
ns == 0 and cats or {})
end
return export
66t4poqsglgfq0rkqjsmgk10pr9qz3a
Categoría:IT:Sustantivos invariantes en género
14
1056056
6117318
5835627
2026-06-06T17:08:57Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:IT:Sustantivos sin género definido]] a [[Categoría:IT:Sustantivos invariantes en género]] sin dejar una redirección: obsoleta
5835627
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Categoría:IT:Adjetivos invariantes en género
14
1056057
6117320
5835628
2026-06-06T17:09:06Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:IT:Adjetivos sin género definido]] a [[Categoría:IT:Adjetivos invariantes en género]] sin dejar una redirección: obsoleta
5835628
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Categoría:ES:Adjetivos invariantes en género
14
1056290
6117319
5836294
2026-06-06T17:09:00Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:ES:Adjetivos sin género definido]] a [[Categoría:ES:Adjetivos invariantes en género]] sin dejar una redirección: obsoleta
5836294
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Módulo:flex/gl
828
1056411
6117313
6076994
2026-06-06T16:46:01Z
TMCbot
164594
.
6117313
Scribunto
text/plain
-- Flexión de sustantivos, adjetivos y verbos
-- Autor: Tmagc
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local len = m_str.len
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_INF = m_flex.COLOR_INF
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local unaccented_vowel = "aeiouàAEIOUÀ"
local accented_vowel = "áéíóúýâêôÁÉÍÓÚÝÂÊÔ"
local maybe_accented_vowel = "ãõÃÕ"
local vowel = unaccented_vowel .. accented_vowel .. maybe_accented_vowel
local cons = "bcdfghjklmnñpqrstvwxyzçBCDFGHJKLMNÑPQRSTVWXYZÇ" -- agrego la ñ y mantengo las consonantes del portugués por las dudas que haya extranjerismos o palabras "reintegracionistas"
local V = "[" .. vowel .. "]"
local AV = "[" .. accented_vowel .. "]"
local NAV = "[^" .. accented_vowel .. "]"
local C = "[" .. cons .. "]"
local espacios = "%s"
local espacios_o_guiones = "%-‐%s"
local ESPACIO = "["..espacios.."]"
local ESPACIO_O_GUION = "["..espacios_o_guiones.."]"
local LETRA = "[^"..espacios.."]"
local agregar_tilde =
{
["a"] = "á",
["e"] = "é",
["i"] = "í",
["o"] = "ó",
["u"] = "ú",
["á"] = "á",
["é"] = "é",
["í"] = "í",
["ó"] = "ó",
["ú"] = "ú",
["A"] = "Á",
["E"] = "É",
["I"] = "Í",
["O"] = "Ó",
["U"] = "Ú",
["Á"] = "Á",
["É"] = "É",
["Í"] = "Í",
["Ó"] = "Ó",
["Ú"] = "Ú",
}
local quitar_tilde = {
["á"]="a", ["é"]="e", ["í"]="i", ["ó"]="o", ["ú"]="u", ["ý"]="y", ["â"]="a", ["ê"]="e", ["ô"]="o",
["Á"]="A", ["É"]="E", ["Í"]="I", ["Ó"]="O", ["Ú"]="U", ["Ý"]="Y", ["Â"]="A", ["Ê"]="E", ["Ô"]="O"
}
local function es_locucion(tit, cop)
return find(tit, LETRA..ESPACIO_O_GUION..LETRA) or (cop ~= nil and find(tit, LETRA..ESPACIO_O_GUION..LETRA))
end
local function try(p, nexo, m, pl, f, fpl, g, s)
if s == true then
if pl == "es" then
pl = "s"
end
end
local r, n, suf
if nexo:sub(1, 1) == "^" then
r = ""
n, suf = match(p, "^("..nexo:sub(2, -1)..")("..m..")$")
else
r, n, suf = match(p, "^(.-)("..nexo..")("..m..")$")
end
if suf then
if type(n) ~= "string" then
n = ""
end
if type(suf) ~= "string" then
suf = ""
end
if pl and find(pl, "#") then
if g == "mf" and f then
return {m={r.."~"..n..suf.."~"}, p={r..n..pl}, f={r..n..f}, fp={r..n..fpl}}
elseif pl then
return {m={r.."~"..n..suf.."~"}, p={r..n..pl}, f={}, fp={}}
else
return {m={r.."~"..n..suf.."~"}, p={}, f={}, fp={}}
end
else
if g == "mf" and f then
return {m={r.."~"..n..suf.."~"}, p={r.."~"..n..pl.."~"}, f={r.."~"..n..f.."~"}, fp={r.."~"..n..fpl.."~"}}
elseif pl then
return {m={r.."~"..n..suf.."~"}, p={r.."~"..n..pl.."~"}, f={}, fp={}}
else
return {m={r.."~"..n..suf.."~"}, p={}, f={}, fp={}}
end
end
end
return nil
end
-- https://www.lingua.gal/c/document_library/get_file?file_path=/portal-lingua/celga/celga-1/material-alumno/Manual_Aula_de_Galego_1_resumo_gramatical.pdf
local function flexionar_palabra(p, g, forzar_s)
local r, v, s
r, v, s = match(p, "^(.*[aeiouü])([íú])(s)$") -- [[país]]
if v then
if g == "mf" then
return {m={r.."~"..v..s.."~"}, p={r.."~"..v.."ses~"}, f={r.."~"..v.."sa~"}, fp={r.."~"..v.."sas~"}}
else
return {m={r.."~"..v..s.."~"}, p={r.."~"..v.."ses~"}, f={}, fp={}}
end
end
r, v, s = match(p, "^(.*)(" .. AV .. ")(s)$") -- final -ês, -ós etc.
if v then
local w = quitar_tilde[v]
if g == "mf" then
return {m={r.."~"..v..s.."~"}, p={r.."~"..w.."ses~"}, f={r.."~"..w.."sa~"}, fp={r.."~"..w.."sas~"}}
else
return {m={r.."~"..v..s.."~"}, p={r.."~"..w.."ses~"}, f={}, fp={}}
end
end
local changed = try(p, "", "ão", forzar_s and "#ãos#" or "ões", forzar_s and "#ã#" or "ona", forzar_s and "#ãs#" or "onas", g, s)
or try(p, V.."[iu]s", "", "es", nil, nil, g, s) -- diptongo final con -s ejemplo [[deus]]
or try(p, "^"..C.."-[iuü]?[aeiou]s", "", "es", nil, nil, g, s) -- monosilabos en -s, ejemplo [[gas]]
or try(p, V, "bel", "beis", nil, nil, g, s) -- -able, -ible
or try(p, "^"..C.."-[iuü]?[iu]?[aeoiu][iu]?l", "", "es", nil, nil, g, s) -- monosílabos en -l
or try(p, AV..".*l", "", "es", nil, nil, g, s) -- llanas/esdrújulas en -l
or try(p, "", "ol", "ois", "ola", "olas", g, s) -- agudas en -ol
or try(p, "", "il", "ís", nil, nil, g, s) -- agudas en -il
or try(p, "[aeou]", "l", "is", nil, nil, g, s) -- agudas en -l
or try(p, "or", "", forzar_s and "#ors#" or "es", "a", "as", g, s) -- -or con femenino (tutor)
or try(p, "r", "", forzar_s and "#s#" or "es", nil, nil, g, s) -- final -r
or try(p, "", "z", "ces", nil, nil, g, s) -- final -z, por las dudas no flexiono en -a excepciones son [[rapaz]] o [[andaluz]]
or try(p, "", "eu", "eus", "ía", "ías", g, s)
or try(p, "^"..C.."*", "u", "us", "úa", "úas", g, s) -- [[nu]] --> núa, [[cru]] --> [[crúa]]
or try(p, "", "o", "os", "a", "as", g, s)
or try(p, V, "", "s", nil, nil, g, s) -- final vowel
or try(p, "[sx]", "", nil, nil, nil, g, s)
or try(p, "", "án", "áns", "á", "ás", g, s) -- CUIDADO: remite a los adjetivos que vienen de -anus, -anum, pero no a palabras como "folgazán", "mentirán"
or try(p, "", "ín", "íns", "ina", "inas", g, s) -- única excepción [[ruín]]
or try(p, "", "ón", "óns", "ona", "onas", g, s) -- CUIDADO: hay un gran grupo de palabras que forma el sufijo con -oa https://es.wikibooks.org/wiki/Gallego/Gram%C3%A1tica/Sufijos_y_terminaciones
or try(p, "", "ún", "úns", "úa", "úas", g, s) -- CUIDADO: consultar referencia anterior
or try(p, "^"..C.."*[iuü]?", "an", "ans", "á", "ás", g, s)
or try(p, "^"..C.."*[iuü]?", "in", "ins", "ina", "inas", g, s)
or try(p, "^"..C.."*[iuü]?", "on", "ons", "ona", "onas", g, s)
or try(p, "^"..C.."*[iuü]?", "un", "uns", "úa", "úas", g, s)
or try(p, C, "", "s", nil, nil, g, s) -- extranjerismos
assert(changed, "No se pudo determinar la flexión de la palabra")
return changed
end
local function flexion_sust_adj(palabras, g, forzar_s, copulativa)
local a, separador, b
if copulativa == true or copulativa == false then
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO_O_GUION..")("..LETRA.."+)$")
else
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
end
if b then
if copulativa == nil then
error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"")
end
local flex1 = flexionar_palabra(a, g, forzar_s)
local flex2 = copulativa and flexionar_palabra(b, g, forzar_s) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto
if copulativa == false then
p, resto = match(palabras, "^(%-?[^"..espacios_o_guiones.."]+)(.-)$")
else
p, resto = match(palabras, "^("..LETRA.."+)(.-)$")
end
local flex = flexionar_palabra(p, g, forzar_s)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
end
local cop -- = modo == "irreg" and false or args["cop"] falla...
if modo == "irreg" then
cop = false
else
cop = args["cop"]
end
local flex_ = flexion_sust_adj(title, modo, args["s"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." regulares")
elseif es_locucion(title, args["cop"]) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["n"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
return formatear_sust_adj(frame, title, ns, args, es_locucion(title, args["cop"]) and "GL:Locuciones sustantivas" or "GL:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
args[1] = args[1] or "mf"
return formatear_sust_adj(frame, title, ns, args, es_locucion(title, args["cop"]) and "GL:Locuciones adjetivas" or "GL:Adjetivos")
end
local EU, TU, ELE, NOS, VOS, ELES = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"eu", "ti", "el, el, vostede", "nós", "vós", "vostedes, eles, elas"}
local PRONOMBRES_INF = {"por . eu", "por . ti", "por . ele, por . ela, por . vostede", "por . nós", "por . vós", "por . vostedes, por . eles, por . elas"}
local PRONOMBRES_SUBJ = {"que eu", "que ti", "que ele, que ela, que vostede", "que nós", "que vós", "que vostedes, que eles, que elas"}
local PRONOMBRES_IMP = {"―", "(ti)", "(vostede)", "(nós)", "(vós)", "(vostedes)"}
local IMPERSONALES_INF = {"", "", "(por . iso)", "", "", "(por . isos)"}
local IMPERSONALES = {"", "", "(iso)", "", "", "(isos)"}
local IMPERSONALES_SUBJ = {"", "", "(que iso)", "", "", "(que isos)"}
local REFLEXIVOS = {"me", "te", "se", "nos", "vos", "se"}
local formas_no_personales = {
["inf"] = true,
["ger"] = true,
["part"] = true,
}
local formas_personales = {
["inf_pers"] = true,
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["ind_pluperf"] = true,
["ind_fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["subj_fut"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["inf_pers_comp"] = true,
["ind_perf_comp"] = true,
["ind_pluperf_comp"] = true,
["ind_anter"] = true,
["ind_fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
["subj_fut_comp"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local antepuesto = {
["subj_pres"] = true,
["subj_imp"] = true,
["subj_fut"] = true,
["subj_perf"] = true,
["subj_imp_comp"] = true,
["subj_fut_comp"] = true,
}
local interpuesto = {
["ind_fut"] = true,
["ind_fut_comp"] = true,
["cond"] = true,
["cond_comp"] = true
}
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^inf_pers") then
return IMPERSONALES_INF[p]
end
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^inf_pers") then
return PRONOMBRES_INF[p]
elseif find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local sufijos = {
{ -- ar
["ger"] = {"ando"},
["part"] = {"ado"},
["inf_pers"] = {"ar", "ares", "ar", "armos", "ardes", "aren"},
["ind_pres"] = {"o", "as", "a", "amos", "ades", "an"},
["ind_imp"] = {"aba", "abas", "aba", "abamos", "abades", "aban"},
["ind_perf"] = {"ei", "aches", "ou", "amos", "astes", "aron"},
["ind_perf_alt"] = {"ei", "aches", "ou", "amos", "astes", "aron"},
["ind_pluperf"] = {"ara", "aras", "ara", "aramos", "arades", "aran"},
["ind_fut"] = {"arei", "arás", "ará", "aremos", "aredes", "arán"},
["subj_pres"] = {"e", "es", "e", "emos", "edes", "en"},
["subj_imp"] = {"ase", "ases", "ase", "ásemos", "ásedes", "asen"},
["subj_fut"] = {"ar", "ares", "ar", "armos", "ardes", "aren"},
["cond"] = {"aría", "arías", "aría", "ariamos", "ariades", "arían"},
["imper"] = {"-", "a", "e", "emos", "ade", "en"}
},
{ -- er
["ger"] = {"endo"},
["part"] = {"ido"},
["inf_pers"] = {"er", "eres", "er", "ermos", "erdes", "eren"},
["ind_pres"] = {"o", "es", "e", "emos", "edes", "en"},
["ind_imp"] = {"ía", "ías", "ía", "iamos", "iades", "ían"},
["ind_perf"] = {"ín", "iches", "eu", "emos", "estes", "eron"},
["ind_perf_alt"] = {"en", "eches", "o", "emos", "estes", "eron"},
["ind_pluperf"] = {"era", "eras", "era", "eramos", "erades", "eran"},
["ind_fut"] = {"erei", "erás", "erá", "eremos", "eredes", "erán"},
["subj_pres"] = {"a", "as", "a", "amos", "ades", "an"},
["subj_imp"] = {"ese", "eses", "ese", "ésemos", "ésedes", "esen"},
["subj_fut"] = {"er", "eres", "er", "ermos", "erdes", "eren"},
["cond"] = {"ería", "erías", "ería", "eriamos", "eriades", "erían"},
["imper"] = {"-", "e", "a", "amos", "ede", "an"}
},
{ -- ir
["ger"] = {"indo"},
["part"] = {"ido"},
["inf_pers"] = {"ir", "ires", "ir", "irmos", "irdes", "iren"},
["ind_pres"] = {"o", "es", "e", "imos", "ides", "en"},
["ind_imp"] = {"ía", "ías", "ía", "iamos", "iades", "ían"},
["ind_perf"] = {"ín", "iches", "iu", "imos", "istes", "iron"},
["ind_perf_alt"] = {"en", "eches", "o", "emos", "estes", "eron"},
["ind_pluperf"] = {"ira", "iras", "ira", "iramos", "irades", "iran"},
["ind_fut"] = {"irei", "irás", "irá", "iremos", "iredes", "irán"},
["subj_pres"] = {"a", "as", "a", "amos", "ades", "an"},
["subj_imp"] = {"ise", "ises", "ise", "ísemos", "ísedes", "isen"},
["subj_fut"] = {"ir", "ires", "ir", "irmos", "irdes", "iren"},
["cond"] = {"iría", "irías", "iría", "iriamos", "iriades", "irían"},
["imper"] = {"-", "e", "a", "amos", "ide", "an"}
},
{ -- or
["ger"] = {"ondo"},
["part"] = {"osto"},
["inf_pers"] = {"or", "ores", "or", "ormos", "ordes", "oren"},
["ind_pres"] = {"oño", "ós", "ón", "omos", "ondes", "ón"},
["ind_imp"] = {"uña", "uñas", "uña", "uñamos", "uñades", "uñan"},
["ind_perf"] = {"uxen", "uxeches", "uxo", "uxemos", "uxestes", "uxeron"},
["ind_perf_alt"] = {"en", "eches", "o", "emos", "estes", "eron"},
["ind_pluperf"] = {"uxera", "uxeras", "uxera", "uxeramos", "uxerades", "uxeran"},
["ind_fut"] = {"orei", "orás", "orá", "oremos", "oredes", "orán"},
["subj_pres"] = {"oña", "oñas", "oña", "oñamos", "oñades", "oñan"},
["subj_imp"] = {"uxese", "uxeses", "uxese", "uxésemos", "uxésedes", "uxesen"},
["subj_fut"] = {"uxer", "uxeres", "uxer", "uxermos", "uxerdes", "uxeren"},
["cond"] = {"oría", "orías", "oría", "oriamos", "oriades", "orían"},
["imper"] = {"-", "ón", "oña", "oñamos", "onde", "oñan"}
},
}
local auxiliar = {
["inf_comp"] = {"ter"},
["ger_comp"] = {"tendo"},
["inf_pers_comp"] = {"ter", "teres", "ter", "termos", "terdes", "teren"},
["ind_perf_comp"] = {"teño", "tes", "ten", "temos", "tendes", "teñen"},
["ind_pluperf_comp"] = {"tiña", "tiñas", "tiña", "tiñamos", "tiñades", "tiñan"},
["ind_anter"] = {"tiven", "tiveches", "tivo", "tivemos", "tivestes", "tiveron"},
["ind_fut_comp"] = {"terei", "terás", "terá", "teremos", "teredes", "terán"},
["cond_comp"] = {"tería", "terías", "tería", "teriamos", "teriades", "terían"},
["subj_perf"] = {"teña", "teñas", "teña", "teñamos", "teñades", "teñan"},
["subj_pluperf"] = {"tivese", "tiveses", "tivese", "tivésemos", "tivésedes", "tivesen"},
["subj_fut_comp"] = {"tiver", "tiveres", "tiver", "tivermos", "tiverdes", "tiveren"}
}
local function obtener_sufijos(sufijo_inf, forma)
if sufijo_inf == "ar" then
return sufijos[1][forma]
elseif sufijo_inf == "er" then
return sufijos[2][forma]
elseif sufijo_inf == "ir" or sufijo_inf == "ír" then
return sufijos[3][forma]
else
return sufijos[4][forma]
end
end
local paradigmas_regulares = {
["ar"] = {
{"anunciar", {"iar$"}, { --necesidad de explicitar el diptongo, aunque esta variante es la que consideramos como la regular
}},
{"evacuar", {"cuar$"}, {
nexo = "cu"
}},
{"averiguar", {"guar$"}, {
nexo = "gu"
}},
{"complicar", {"car$"}, {
nexo = "c"
}},
{"chegar", {"gar$"}, {
nexo = "g"
}},
{"actuar", {"uar$"}, {
nexo = "u"
}},
{"comezar", {"zar$"}, {
nexo = "z"
}},
{"amar", {"ar$"}, {
}},
},
["er"] = {
{"ller", {"ller$"}, { -- Existe esto??
nexo = "ll"
}},
{"güer", {"güer$"}, { -- Existe esto??
nexo = "gü"
}},
{"quer", {"quer$"}, { -- Existe esto??
nexo = "qu"
}},
{"erguer", {"guer$"}, {
nexo = "gu"
}},
{"parecer", {"cer$"}, {
nexo = "c"
}},
{"proteger", {"ger$"}, {
nexo = "g"
}},
{"temer", {"er$"}, {
}},
},
["ir"] = {
{"argüir", {"güir$"}, {
nexo = "gü",
}},
{"delinquir", {"quir$"}, {
nexo = "qu"
}},
{"distinguir", {"guir$"}, {
nexo = "gu"
}},
{"resarcir", {"cir$"}, {
nexo = "c"
}},
{"dirigir", {"gir$"}, {
nexo = "g"
}},
{"partir", {"ir$"}, {
}},
},
["ír"] = {
{"argüír", {"güír$"}, {
nexo = "gü",
}},
{"fluír", {"uír$"}, {
nexo = "u"
}},
{"partir", {"ír$"}, {
}},
},
["or"] = {
{"pór", {"or$"}, {
}},
},
["ór"] = {
{"pór", {"ór$"}, {
}}
}
}
local paradigmas_irregulares = {
["ar"] = {
{"dar", {"^dar$", "^redar$", "desdar$"}, { -- no pueden ir otros verbos como "andar o quedar"
nucleo = "d",
ind_pres = {{"dou"}, {"dás"}, {"dá"}, nil, nil, {"dán"}},
ind_perf = {sufijo_inf = "er", {"dei"}, {"deches"}},
ind_pluperf = {sufijo_inf = "er"},
subj_pres = {sufijo_inf = "er", nucleo = "de"},
subj_imp = {sufijo_inf = "er"},
subj_fut = {sufijo_inf = "er"},
imper = {nil, {"dá"}, {"dea"}, {"deamos"}, nil, {"dean"}}
}},
{"estar", {"^estar$", "^tar$"}, {
nucleo = "t",
ind_pres = {{"tou"}, {"tás"}, {"tá"}, nil, nil, {"tán"}},
ind_perf = {nucleo = "tiv", sufijo_inf = "er"},
ind_pluperf = {nucleo = "tiv", sufijo_inf = "er"},
subj_pres = {nucleo = "te", sufijo_inf = "er"},
subj_imp = {nucleo = "tiv", sufijo_inf = "er"},
subj_fut = {nucleo = "tiv", sufijo_inf = "er"},
imper = {nil, {"tá"}, {"tea"}, {"teamos"}, nil, {"tean"}}
}},
{"enviar", {"enviar$"}, {
nexo = "i"
}},
{"descafeinar", {"descafeinar$"}, {
alt = {"í-í"},
}},
{"saudar", {"saudar$"}, {
alt = {"ú-ú"},
}},
},
["er"] = {
{"caber", {"^caber$"}, {
nucleo = "cab",
nucleos1 = {"caib"},
ind_perf = {nucleo = "coub"},
ind_pluperf = {nucleo = "coub"},
subj_imp = {nucleo = "coub"},
subj_fut = {nucleo = "coub"},
}},
{"facer", {"facer$"}, {
nucleo = "fac",
nexo = "",
nucleos1 = {"fag"},
part = {"feito"},
ind_pres = {nil, {"fás"}, {"fai"}, nil, nil, {"fán"}},
ind_perf = {nucleo = "fix"},
ind_pluperf = {nucleo = "fix"},
subj_imp = {nucleo = "fix"},
subj_fut = {nucleo = "fix"},
ind_fut = {nucleo = "fa", nexo = "#r#"},
cond = {nucleo = "fa", nexo = "#r#"},
imper = {nil, {"fai"}},
}},
{"haber", {"^haber$", "^rehaber$"}, {
nucleo = "ab",
ind_pres = {{"ei"}, {"ás"}, {"á", "ai"}, nil, nil, {"án"}},
ind_perf = {nucleo = "oub"},
ind_pluperf = {nucleo = "oub"},
subj_pres = {nucleo = "ax"},
subj_imp = {nucleo = "oub"},
subj_fut = {nucleo = "oub"},
imper = {nil, {"á{†}"}, {"axa{†}"}, {"axamos{†}"}, {"abei{†}"}, {"axan{†}"}},
}},
{"pracer", {"pracer$"}, {
nucleo = "pra",
ind_perf = {nucleo = "proug"},
ind_pluperf = {nucleo = "proug"},
subj_imp = {nucleo = "proug"},
subj_fut = {nucleo = "proug"},
}},
{"poder", {"poder$"}, {
nucleo = "pod",
ind_perf = {nucleo = "puid"},
ind_pluperf = {nucleo = "puid"},
subj_pres = {nucleo = "poid"},
subj_imp = {nucleo = "puid"},
subj_fut = {nucleo = "puid"},
}},
{"poñer", {"poñer$"}, {
nucleo = "poñ",
part = {"posto"},
ind_pres = {nil, {"pós"}, {"pón"}},
ind_perf = {nucleo = "pux"},
ind_pluperf = {nucleo = "pux"},
subj_imp = {nucleo = "pux"},
subj_fut = {nucleo = "pux"},
imper = {nil, {"pón"}}
}},
{"querer", {"querer$"}, {
nucleo = "quer", -- no uso nucleos1 para que no sobreescriba ind_pres
ind_perf = {nucleo = "quix"},
ind_pluperf = {nucleo = "quix"},
subj_pres = {nucleo = "queir"},
subj_imp = {nucleo = "quix"},
subj_fut = {nucleo = "quix"},
}},
{"romper", {"^romper$", "^arromper$"}, { -- no corromper, derromper, entrerromper
nucleo = "romp",
part = {"roto", "rompido"}
}},
{"saber", {"saber$"}, {
nucleo = "sab",
ind_pres = {{"sei"}},
ind_perf = {nucleo = "soub"},
ind_pluperf = {nucleo = "soub"},
subj_pres = {nucleo = "saib"},
subj_imp = {nucleo = "soub"},
subj_fut = {nucleo = "soub"},
}},
{"ser", {"^ser$"}, {
nucleos1 = {"sex"},
ind_pres = {{"son"}, {"es"}, {"é"}, {"somos"}, {"sodes"}, {"son"}},
ind_imp = {{"era"}, {"eras"}, {"era"}, {"eramos"}, {"erades"}, {"eran"}},
ind_perf = {{"fun"}, {"fuches"}, {"foi"}, {"fomos"}, {"fostes"}, {"foron"}},
ind_pluperf = {{"fora"}, {"foras"}, {"fora"}, {"foramos"}, {"forades"}, {"foran"}},
subj_imp = {{"fose"}, {"foses"}, {"fose"}, {"fósemos"}, {"fósedes"}, {"fosen"}}, -- no puedo poner "u" porque obtendría "fuyera"
subj_fut = {{"for"}, {"fores"}, {"for"}, {"formos"}, {"fordes"}, {"foren"}},
imper = {nil, {"sé"}, nil, nil, {"sede"}}
}},
{"ter", {"^ter$", "suster$", "manter$", "^ater$", "abster$", "obter$", "^reter$", "deter$", "conter$"}, {
nucleo = "t",
nucleos1 = {"teñ"},
ind_pres = {nil, {"tés"}, {"tén"}, nil, {"tendes", "tedes"}, {"teñen"}},
ind_imp = {{"tiña"}, {"tiñas"}, {"tiña"}, {"tiñamos"}, {"tiñades"}, {"tiñan"}},
ind_perf = {nucleo = "tiv"},
ind_pluperf = {nucleo = "tiv"},
subj_imp = {nucleo = "tiv"},
subj_fut = {nucleo = "tiv"},
imper = {nil, {"tén"}, nil, nil, {"tende", "tede"}}
}},
{"traer", {"traer$"}, { -- REVISAR fut y cond
nucleos1 = {"trai"},
ind_perf = {nucleo = "troux"},
ind_pluperf = {nucleo = "troux"},
subj_imp = {nucleo = "troux"},
subj_fut = {nucleo = "troux"},
}},
{"ver", {"^ver$", "antever$", "entrever$", "prever$", "^rever$", "prover$"}, {
nucleo = "v",
nucleos1 = {"vex"},
part = {"visto"},
ind_pres = {nil, {"vés"}, {"vé"}, nil, nil, {"vén"}},
ind_perf = {sufijo_inf = "ir"},
ind_pluperf = {sufijo_inf = "ir"},
subj_imp = {sufijo_inf = "ir"},
subj_fut = {sufijo_inf = "ir"},
imper = {nil, {"vé"}},
}},
{"ler", {"^ler$", "^reler$", "crer$"}, {
nucleo = "",
nucleos1 = {"e"},
ind_pres = {nil, {"és"}, {"é"}, nil, nil, {"én"}},
imper = {nil, {"é"}},
}},
{"morrer", {"morrer$"}, {
nucleo = "morr",
part = {"morto"},
}},
{"valer", {"valer$"}, {
alt = {"ll"},
}},
{"moer", {"oer$"}, {
alt = {"oi"},
}},
},
["ir"] = {
{"abrir", {"[^js]abrir$", "^abrir$"}, { -- abrir, cubrir y derivados, pero no "desabrir" ni "jabrir" (son regs.)
nucleo = "abr",
part = {"aberto"}
}},
{"cubrir", {"ubrir$"}, { -- Parte 2. NOTA: no pueto tomar "br" como núcleo porque el programa piensa que es monosílabo y pone mal las tildes (cf. [[entreabrir]], [[reabrir]])
nucleo = "ubr",
part = {"uberto"},
alt = {"o"},
}},
{"dicir", {"dicir$"}, {
nucleo = "di",
nucleos1 = {"dig"},
part = {"dito"},
ind_pres = {nil, nil, {"di"}, nil, nil, {"din"}},
ind_perf = {nucleo = "dix"},
ind_pluperf = {nucleo = "dix"},
subj_imp = {nucleo = "dix"},
subj_fut = {nucleo = "dix"},
ind_fut = {nucleo = "di", nexo="#r#"},
cond = {nucleo = "di", nexo="#r#"},
imper = {nil, {"di"}}
}},
{"escribir", {"scribir$"}, {
nucleo = "scrib",
part = {"scrito"}
}},
{"rir", {"^rir$", "sorrir$"}, {
nucleo = "r",
ind_pres = {nil, {"rís"}, {"rí"}, nil, nil, {"rín"}},
nucleos1 = {"rí"},
nucleos2 = {"ri"},
nucleos3 = {"ri"},
imper = {nil, {"rí"}},
}},
{"imprimir", {"imprimir$"}, {
nucleo = "imprim",
part = {"imprimido", "impreso"}
}},
{"ir", {"^ir$"}, {
ind_pres = {{"vou"}, {"vas"}, {"vai"}, nil, nil, {"ván"}},
ind_perf = {{"fun"}, {"fuches"}, {"foi"}, {"fomos"}, {"fostes"}, {"foron"}},
ind_pluperf = {nexo = "#fo#"},
subj_pres = {nucleo = "vai"},
subj_imp = {nexo = "#fo#", nil, nil, nil, {"fósemos"}, {"fósedes"}}, -- no puedo poner "u" porque obtendría "fuyera"
subj_fut = {nexo = "#fo#"},
imper = {nil, {"vai"}, {"vaia"}, {"vamos"}, nil, {"vaian"}}
}},
{"vir", {"^vir$", "^avir$", "advir$", "convir$", "contravir$", "devir$", "^desavir$", "entrevir$", "intervir$", "obvir$", "provir$", "^revir$", "sobrevir$"}, {
nucleo = "v",
nucleos1 = {"veñ"},
ind_pres = {nil, {"vés"}, {"vén"}, nil, {"vindes", "vides"}, {"veñen"}},
ind_imp = {{"viña"}, {"viñas"}, {"viña"}, {"viñamos"}, {"viñades"}, {"viñan"}},
ind_perf = {{"vin"}, {"viñeches"}, {"veu"}, {"viñemos"}, {"viñestes"}, {"viñeron"}},
ind_pluperf = {{"viñera"}, {"viñeras"}, {"viñera"}, {"viñeramos"}, {"viñerades"}, {"viñeran"}},
subj_imp = {{"viñese"}, {"viñeses"}, {"viñese"}, {"viñésemos"}, {"viñésedes"}, {"viñesen"}},
subj_fut = {{"viñer"}, {"viñeres"}, {"viñer"}, {"viñermos"}, {"viñerdes"}, {"viñeren"}},
imper = {nil, {"ven"}, nil, nil, {"vinde", "vide"}, nil}
}},
{"frixir", {"frixir$"}, {
part = {"frigido", "frito"},
-- alt = {"-e"},
}},
{"cair", {"air$"}, {
nucleo = "a",
alt = {"ai"},
imper = {nil, {"ae"}},
}},
{"parir", {"parir$"}, {
alt = {"ai"},
}},
{"sentir", {"sentir$"}, {
alt = {"i"},
}},
{"agredir", {"gredir$"}, {
alt = {"i-i-i"}
}},
{"proibir", {"proibir$"}, {
alt = {"í-í"}
}},
{"reunir", {"reunir$"}, {
alt = {"ú-ú"}
}},
{"fuxir", {"fuxir$"}, { --fuxir, bulir, durmir
alt = {"-o"},
}},
{"ouvir", {"ouvir$"}, {
alt = {"z"},
}},
},
["ír"] = {
{"saír", {"aír$"}, {
alt = {"ai"},
}},
{"oír", {"oír$"}, {
alt = {"oi"},
}},
},
["or"] = {
},
["ór"] = {
}
}
local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf, forma)
if not nexo then
return sufijo
end
if sufijo_inf == "ar" then
if find(sufijo, "^[aeo][ns]?$") then
if nexo == "e" then
return "~ei~"..sufijo
end
end
if find(sufijo, "^[eiéí]") then
if nexo == "c" then
return "~qu~"..sufijo
end
if nexo == "g" then
return "g~u~"..sufijo
end
if nexo == "z" then
return "~c~"..sufijo
end
end
local _, cnt = gsub(sufijo, "[aeiouü]", "")
if cnt == 1
and not find(sufijo, "[áéíóú]")
and find(sub(sufijo, -1), "[aeiouns]") then
if nexo == "cu" then
return sub(nexo, -2, -2).."~ú~"..sufijo, nexo..sufijo -- es llana y entonces lleva tilde
end
if nexo == "u" then
return "~ú~"..sufijo -- es llana y entonces lleva tilde
end
if nexo == "i" then
return "#í#"..sufijo -- es llana y entonces lleva tilde
end
end
else -- -er/-ir/-or
if find(sufijo, "^er") then -- [[dicir]]
if nexo == "#r#" then
return nexo..sub(sufijo, 3)
end
end
local _, cnt = gsub(sufijo, "[aeiouü]", "")
if cnt == 1
and not find(sufijo, "[áéíóú]")
and find(sub(sufijo, -1), "[aeiouns]") then
if nexo == "gü" then
return "g~ú~"..sufijo
end
if nexo == "u" then
return "~ú~"..sufijo
end
end
if find(sufijo, "^[aouáóú]") then
if nexo == "c" then
return "~z~"..sufijo
end
if nexo == "g" then
return "~j~"..sufijo
end
if nexo == "gu" then
return "~g~"..sufijo
end
if nexo == "gü" then
return "g~u~"..sufijo
end
if nexo == "qu" then
return "~c~"..sufijo
end
if nexo == "qü" then
return "q~u~"..sufijo
end
end
if find(sufijo, "^es?$") then
if nexo == "u" then
return nexo.."~i~"..sub(sufijo, 2)
end
if nexo == "gü" then -- arguir
return nexo.."~i~"..sub(sufijo, 2)
end
end
if find(sufijo, "^is?$") then
if nexo == "gü" then -- arguir
return nexo.."~í~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i") then
if nexo == "#fo#" then
return nexo..sub(sufijo, 2)
end
end
if (forma ~= "ind_fut" and forma ~= "cond") then
if find(sufijo, "^ia[md][oe]s$") then
if nexo == "u" then
return nexo.."~ï~"..sub(sufijo, 2)
end
if nexo == "gü" then -- arguir
return nexo.."~ï~"..sub(sufijo, 2)
end
end
if find(sufijo, "^ir[aeo]"..C.."*$") or find(sufijo, "^i[^r]") or find(sufijo, "^ir[^aeiouü]") or find(sufijo, "^ir?$") then
if nexo == "u" then
return nexo.."~í~"..sub(sufijo, 2)
end
if nexo == "gü" then -- arguir
return nexo.."~í~"..sub(sufijo, 2)
end
end
end
end
return nexo..sufijo
end
local function combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma)
local nucleo_ = gsub(nucleo, "[~#]", "")
local nexosufijo_ = gsub(nexosufijo, "[~#]", "")
if find(nucleo_, "i$") and find(nexosufijo_, "^i") then -- se juntan dos íes o y-i (ej. reír, freír, oír)
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1")
elseif forma == "ind_imp" and find (nucleo_, "^[^áéíóú]-[aeiouü]h?$") and (find(nexosufijo_, "[ií]a[md][eo]s$")) then -- sair
return nucleo..gsub1(nexosufijo, "^([~#]?)[ií]", "%1~ï~")
elseif forma == "ind_perf" and find (nucleo_, "^[^áéíóú]-[aeiouü]h?$") and (find(nexosufijo_, "^iu$")) then -- sair
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~í~")
elseif forma ~= "ind_fut" and forma ~= "cond" and find(nucleo_, "^[^áéíóú]-[aeiouü]h?$") and (find(nexosufijo_, "^h?[iu]"..C.."*[aeo]i?[mns]?$") or find(nexosufijo_, "^h?[iu][rs]?$")) then -- sufijo con i/u tónica (caISTE, caIMOS, caIDO, oID, reHÚyo etc.)
return nucleo..gsub1(nexosufijo, "^([~#]?h?)([iu])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
local prefijo_ = gsub(prefijo, "[~#]", "")
local nucleonexosufijo_ = gsub(nucleonexosufijo, "[~#]", "")
if find(prefijo_, "^[^aeiouáéíóú]*$")
and nucleonexosufijo_ ~= "é" and nucleonexosufijo_ ~= "sé" -- excepción: ser
and (find(nucleonexosufijo_, "^"..C.."?"..C.."?".."[iuü]?[áéó][iuü]?[ns]?$") or find(nucleonexosufijo_, "^"..C.."?"..C.."?".."[íú][ns]?$")) then -- caso de dar, vos *d+ás, debo quitar la tilde
return prefijo..gsub1(nucleonexosufijo, "[áéíóú]", function(v) return quitar_tilde[v] end)
end
return prefijo..nucleonexosufijo
end
local alt_info = {
["ar"] = {
["í-í"] = {"descafeinar", "[i]", "í", "í"},
["ú-ú"] = {"saudar", "[u]", "ú", "ú"},
},
["er"] = {
["oi"] = {"moer", "[o]", "oi"},
["ll"] = {"valer", "l", "ll"},
},
["ir"] = {
--["-e"] = {"frigir", "[i]", nil, "e"},
["-o"] = {"fuxir", "[u]", nil, "o"},
["ai"] = {"parir", "[a]", "ai"},
["i"] = {"sentir", "[e]", "i"},
--["u"] = {"dormir", "[o]", "u"},
["z"] = {"ouvir", ".", "z"},
["í-í"] = {"proibir", "[i]", "í", "í"},
["ú-ú"] = {"reunir", "[u]", "ú", "ú"},
--["u-u-u"] = {"polir", "[o]", "u", "u", "u"},
--["i-i"] = {"agredir", "[e]", "i", "i"},
["i-i-i"] = {"agredir", "[e]", "i", "i", "i"},
},
["ír"] = {
["ai"] = {"saír", "[a]", "ai"},
["oi"] = {"oír", "[o]", "oi"},
},
}
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo[forma].sufijo_inf or conjinfo.sufijo_inf
local sufijos_ = obtener_sufijos(sufijo_inf, (forma == "ind_perf" and conjinfo[forma].nucleo) and forma.."_alt" or forma)
local nucleos
if not conjinfo[forma].nucleo then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleo_inf
elseif forma == "part" then
nucleos = conjinfo.nucleo_inf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos3, conjinfo.nucleos3, conjinfo.nucleos1}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleos4, conjinfo.nucleos1, conjinfo.nucleos3, conjinfo.nucleo_inf, conjinfo.nucleos1}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n}
end
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for _, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[1], sufijo_inf, forma)
for _,nucleo in ipairs(nucleos) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma)))
end
end
return
end
for i = EU, ELES do
local p = tostr[i]
if conjinfo[forma][i] then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local k = i
while sufijos_[k] do
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, (conjinfo.v == "pór" and sufijos_[k] == "or") and "ór" or sufijos_[k], sufijo_inf, forma)
for _, n in ipairs(nucleos[i]) do
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo, forma)))
if nexosufijo2 then
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo2, forma)))
end
end
k = k + 6
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local art2 = fmtinfo.art2
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local arr = res[forma]
local t = {}
local es_no_personal = formas_no_personales[forma]
local tiempo, i = match(forma, "^(.*)(%d)$")
local j
if not i then
tiempo = forma
i = 1
j = 3
else
j = tonumber(i)
end
i = tonumber(i)
local rest_ = i < NOS and resto or resto_pl
local rest_pl_ = resto_pl
for _, v in ipairs(arr) do
local rest = rest_
local rest_pl = rest_pl_
if auxiliar[tiempo] then
rest = " "..v..rest
v = auxiliar[tiempo][i]
end
if antepuesto[tiempo] then
local pronart = pron == "se" and REFLEXIVOS[j].." " or ""
pronart = (art and art ~= "") and pronart..art2.." " or pronart
insert(t, adv..pronart..f_links(v)..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..f_links(v)..f_links(rest_pl))
end
elseif interpuesto[tiempo] then
local pronart = pron == "se" and "-"..REFLEXIVOS[j].."-" or ""
pronart = (art and art ~= "") and pronart..art.."-" or pronart
if pronart and pronart ~= "" then
v = gsub(v, "^(.*r)(.-)$", function(u, v) return u..pronart..v end)
end
insert(t, adv..f_links(v)..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..f_links(v)..f_links(rest_pl))
end
else -- pospuesto
local pronart = pron == "se" and "-"..REFLEXIVOS[j] or ""
if pronart ~= "" or (art and art ~= "") then
local subs
if (art2 and art2 ~= "") and pron ~= "se" then -- artículo, sin pronombre
v, subs = gsubb(v, "^(.*)[srz]$", "%1")
else
v, subs = gsubb(v, "mos$", "mo")
end
if subs then
pronart = pronart..((art2 and art2 ~= "") and "-"..art2 or "")
else
pronart = pronart..((art and art ~= "") and "-"..art or "")
end
v = v..pronart
end
if forma == "inf" or forma == "inf_pers" then
insert(t, adv..v..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..v..f_links(rest_pl))
end
else
insert(t, adv..f_links(v)..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..pronart..f_links(v)..f_links(rest_pl))
end
end
end
end
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["impersonal"] = {},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["alt"] = {lista = true},
["nucleopres1"] = {lista = true},
["nucleopres3"] = {lista = true},
["nucleosubj4"] = {lista = true},
["nucleoimper"] = {lista = true},
["núcleopres1"] = {alias_de = "nucleopres1"},
["núcleopres3"] = {alias_de = "nucleopres3"},
["núcleosubj4"] = {alias_de = "nucleosubj4"},
["núcleoimper"] = {alias_de = "nucleoimper"},
["paradigma"] = {lista = true},
["nota"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local adv, r1 = match(tit, "^([sSnN][io]n?"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiíoó]r)%-?(s?e?)%-?(l?[aeo]?s?)(.-)$")
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[io]?n?"..ESPACIO.."?"..LETRA.."*[aeiíoó]r%-?s?e?%-?l?[aeo]?s?(.-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
local art2 = ""
if art ~= "" then
assert(find(art, "^l"), "el artículo debe comenzar por l")
art2 = gsub(art, "^l", "")
end
local sufijo_inf = match(v, "[aeiíoó]r$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
for N = 1, math.max(1,
maxindex(args["paradigma"]),
maxindex(args["alt"]),
maxindex(args["nucleopres1"]),
maxindex(args["nucleopres3"]),
maxindex(args["nucleosubj4"]),
maxindex(args["nucleoimper"])) do
local conjinfo = {}
local encontre_irreg = false
for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
conjinfo = deepcopy(p[3])
es_irregular = true
paradigmas_reconocidos[p[1]] = true
encontre_irreg = true
break
end
end
if encontre_irreg then
break
end
end
local encontre_reg = false
for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
for k, v in pairs(p[3]) do
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
end
end
paradigmas_reconocidos[p[1]] = true
encontre_reg = true
break
end
end
if encontre_reg then
break
end
end
assert(encontre_reg, "paradigma no reconocido")
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
if not conjinfo.nucleo_inf then
conjinfo.nucleo_inf = sub(v, 1, len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
conjinfo.prefijo = ""
elseif not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, len(v) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
if not conjinfo.prefijo then -- caso en el que cambié el núcleo
conjinfo.prefijo = ""
end
conjinfo.nucleos1 = conjinfo.nucleos1 or {}
conjinfo.nucleos2 = conjinfo.nucleos2 or {}
conjinfo.nucleos3 = conjinfo.nucleos3 or {}
conjinfo.nucleos4 = conjinfo.nucleos4 or {}
conjinfo.alt = conjinfo.alt or {}
if args["alt"][N] then
insert_if_not(conjinfo.alt, args["alt"][N])
end
for i, a in ipairs(conjinfo.alt) do
if a ~= "REG" then
local n1, n2, n3
local info = alt_info[sufijo_inf][a]
assert(info, "Valor de alt no reconocido: "..a)
local sust
if info[3] then
n1, sust = gsubb(conjinfo.nucleo_inf, "^(.*)("..info[2]..")(.-)$", "%1#"..info[3].."#%3")
end
if info[4] then
n2, sust = gsubb(conjinfo.nucleo_inf, "^(.*)("..info[2]..")(.-)$", "%1#"..info[4].."#%3")
end
if info[5] then
n3, sust = gsubb(conjinfo.nucleo_inf, "^(.*)("..info[2]..")(.-)$", "%1#"..info[5].."#%3")
end
assert(sust, "Alternancia vocálica no reconocida")
insert_if_not(conjinfo.nucleos1, n1)
insert_if_not(conjinfo.nucleos2, n2)
insert_if_not(conjinfo.nucleos3, n3)
paradigmas_reconocidos[info[1]] = true
es_irregular = true -- si tengo el alt será siemrpe irregular, indistintamente de si el paradigma del mismo índice es regular
else
insert_if_not(conjinfo.nucleos1, conjinfo.nucleo_inf)
end
end
if args["nucleopres1"][N] then
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
end
if args["nucleopres3"][N] then
insert_if_not(conjinfo.nucleos2, args["nucleopres3"][N])
end
if args["nucleosubj4"][N] then
insert_if_not(conjinfo.nucleos3, args["nucleosubj4"][N])
end
if args["nucleoimper"][N] then
insert_if_not(conjinfo.nucleos4, args["nucleoimper"][N])
end
if not conjinfo.nucleos4[1] then -- tengo que escribir primero este núcleo
if (conjinfo.nucleos1[1] and conjinfo.nucleos2[1]) or conjinfo.alt[1] == "i" then
conjinfo.nucleos4[1] = gsub(conjinfo.nucleos1[1], "^[^#~]+$", "#%0#")
else
conjinfo.nucleos4[1] = conjinfo.nucleo_inf
end
end
if not conjinfo.nucleos3[1] then -- tengo que escribir primero este núcleo
if conjinfo.nucleos1[1] and not conjinfo.nucleos2[1] then
conjinfo.nucleos3[1] = gsub(conjinfo.nucleos1[1], "^[^#~]+$", "#%0#")
else
conjinfo.nucleos3[1] = conjinfo.nucleo_inf
end
else
conjinfo.nucleos3[1] = gsub(conjinfo.nucleos3[1], "^[^#~]+$", "#%0#")
end
if not conjinfo.nucleos1[1] then
conjinfo.nucleos1[1] = conjinfo.nucleo_inf
else
conjinfo.nucleos1[1] = gsub(conjinfo.nucleos1[1], "^[^#~]+$", "#%0#")
end
if not conjinfo.nucleos2[1] then
conjinfo.nucleos2[1] = conjinfo.nucleo_inf
else
conjinfo.nucleos2[1] = gsub(conjinfo.nucleos2[1], "^[^#~]+$", "#%0#")
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if (find(e, 'PART') or not find(e, 'ADJ')) and not find(e, "†") then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, art2=art2, resto=resto, resto_pl=resto_pl,impers=args["impersonal"]}
for _,s in ipairs(tostr) do
fmtinfo["subj_pres"..s] = deepcopy(resultante["subj_pres"..s])
end
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local impers = args["impersonal"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, impers)
end)
local cs, cs1, cs2, fila_pronombres_inf, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper
if impers == "3" then
fila_pronombres_inf = {"", "(por iso)", color=COLOR_INF, header=true, class="pc"}
fila_pronombres_ind = {"", "(iso)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(iso)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que iso)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(iso)", color=COLOR_IMPER, header=true, class="pc"}
cs = 2
elseif impers == "36" then
fila_pronombres_inf = {"", "(por iso)", "(por isos)", color=COLOR_INF, header=true, class="pc"}
fila_pronombres_ind = {"", "(iso)", "(isos)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(iso)", "(isos)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que iso)", "(que isos)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(iso)", "(isos)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_inf = {"", "por . eu", "por . tu", "por . ele, por . ela, por . vostede", "por . nós", "por . vós", "por . vostedes, por . eles, por . elas", color=COLOR_INF, header=true, class="pc"}
fila_pronombres_ind = {"", "eu", "tu", "ele, ela, vostede", "nós", "vós", "vostedes, eles, elas", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "eu", "tu", "ele, ela, vostede", "nós", "vós", "vostedes, eles, elas", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que eu", "que tu", "que ele, que ela, que vostede", "que nós", "que vós", "que vostedes, que eles, que elas", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tu)", "(vostede)", "(nós)", "(vós)", "(vostedes)", color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = math.floor(cs / 2)
cs2 = cs - cs1
local t = {}
insert(t, {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true})
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
insert(t, {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf})
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger})
insert(t, {{"Participio", header=true, color=COLOR_NP}, resultante.part})
else
resultante.inf.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.part.colspan = cs1-1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
insert(t, {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp})
insert(t, {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp})
insert(t, {{"Participio", header=true, color=COLOR_NP}, resultante.part})
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
insert(t, {{"Formas personales", colspan=cs}, color=COLOR_H, header=true})
insert(t, {{"Modo infinitivo", colspan=cs}, color=COLOR_INF, header=true})
insert(t, fila_pronombres_inf)
if mostrar_imper then
insert(t, {{"Infinitivo simple", color=COLOR_INF, header=true}, ic("inf_pers")})
insert(t, {{"Infinitivo compuesto", color=COLOR_INF, header=true}, ic("inf_pers_comp")})
else
insert(t, {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de infinitivo personal", color=COLOR_IMPER, header=true, colspan=cs}})
end
insert(t, {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true})
insert(t, fila_pronombres_ind)
insert(t, {{"Presente", color=COLOR_IND, header=true}, ic("ind_pres")})
insert(t, {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")})
insert(t, {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("ind_perf")})
insert(t, {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")})
insert(t, {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("ind_perf_comp")})
insert(t, {{"Pretérito pluscuamperfecto compuesto", color=COLOR_IND, header=true}, ic("ind_pluperf_comp")})
insert(t, {{"Futuro", color=COLOR_IND, header=true}, ic("ind_fut")})
insert(t, {{"Futuro compuesto", color=COLOR_IND, header=true}, ic("ind_fut_comp")})
insert(t, {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("ind_anter")})
insert(t, {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true})
insert(t, fila_pronombres_cond)
insert(t, {{"Condicional simple", color=COLOR_COND, header=true}, ic("cond")})
insert(t, {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("cond_comp")})
insert(t, {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true})
insert(t, fila_pronombres_subj)
insert(t, {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")})
insert(t, {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")})
insert(t, {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")})
insert(t, {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")})
insert(t, {{f("Futuro{†}"), color=COLOR_SUBJ, header=true}, ic("subj_fut")})
insert(t, {{f("Futuro compuesto{†}"), color=COLOR_SUBJ, header=true}, ic("subj_fut_comp")})
insert(t, {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true})
insert(t, fila_pronombres_imper)
if mostrar_imper then
insert(t, {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")})
else
insert(t, {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}})
end
insert(t, {{f("Leyenda: † arcaico, x no normativo, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}})
args["nota"] = args["nota"] or ""
if args["impersonal"] == "utc3" then
args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "umc3" then
args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "utc36" then
args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
if args["impersonal"] == "umc36" then
args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
insert(t, {{args["nota"] and args["nota"] or "", colspan=cs}})
local paradigmas_t = {}
local cats = {}
if es_irregular then
insert(cats, "GL:Verbos irregulares")
paradigmas_reconocidos["amar"] = nil
paradigmas_reconocidos["temer"] = nil
paradigmas_reconocidos["partir"] = nil
paradigmas_reconocidos["pór"] = nil
else
insert(cats, "GL:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "GL:Verbos del paradigma "..p)
end
impers = impers or ""
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "GL:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "GL:Verbos terciopersonales")
end
if find(impers, "^ind") then
insert(cats, "GL:Verbos de objeto indirecto")
end
if defectivo then
insert(cats, "GL:Verbos defectivos")
end
if sufijo_inf == "ar" then
insert(cats, "GL:Verbos de la primera conjugación")
elseif sufijo_inf == "er" then
insert(cats, "GL:Verbos de la segunda conjugación")
elseif sufijo_inf == "ir" or sufijo_inf == "ír" then
insert(cats, "GL:Verbos de la tercera conjugación")
else
insert(cats, "GL:Verbos de la cuarta conjugación")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")",
t,
ns == 0 and cats or {})
end
return export
fyh1ckqj9gtx0o5euclmmh9ybj0930l
Módulo:flex/ext
828
1056427
6117311
6076989
2026-06-06T16:45:57Z
TMCbot
164594
.
6117311
Scribunto
text/plain
-- Flexión del extremeño
-- Autor: Tmagc
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local maxindex = m_table.maxIndex
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local len = m_str.len
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local vocal_no_tilde = "aeiouüAEIOUÜ"
local vocal_tilde = "áéíóúÁÉÍÓÚ"
local vocal = vocal_no_tilde..vocal_tilde
local cons = "bcdfghjklmnñpqrstvwxyzçBCFGHJKLMNÑPQRSTVWXYZÇ"
local espacios = "%-‐%s"
local guion = "%-"
local VOCAL = "["..vocal.."]"
local CONS = "["..cons.."]"
local CONS_SALVO_H = "[^"..vocal.."hH~#{}]"
local ESPACIO = "["..espacios.."]"
local LETRA = "[^"..espacios.."]"
local agregar_tilde =
{
["a"] = "á",
["e"] = "é",
["i"] = "í",
["o"] = "ó",
["u"] = "ú",
["á"] = "á",
["é"] = "é",
["í"] = "í",
["ó"] = "ó",
["ú"] = "ú",
["A"] = "Á",
["E"] = "É",
["I"] = "Í",
["O"] = "Ó",
["U"] = "Ú",
["Á"] = "Á",
["É"] = "É",
["Í"] = "Í",
["Ó"] = "Ó",
["Ú"] = "Ú",
}
local quitar_tilde =
{
["á"] = "a",
["é"] = "e",
["í"] = "i",
["ó"] = "o",
["ú"] = "u",
["a"] = "a",
["e"] = "e",
["i"] = "i",
["o"] = "o",
["u"] = "u",
["Á"] = "A",
["É"] = "E",
["Í"] = "I",
["Ó"] = "O",
["Ú"] = "U",
["A"] = "A",
["E"] = "E",
["I"] = "I",
["O"] = "O",
["U"] = "U",
}
local function try(p, rx, pl, f, fpl, pl2, femenino)
local p2, sust = gsubb(p, rx, "~%0~")
if not sust then
return nil
end
if not pl then
return {m={p2}, p={}, f={}, fp={}}
end
if not femenino or not f then
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={}, fp={}}
else
return {m={p2}, p={gsub1(p, rx, pl)}, f={}, fp={}}
end
end
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}}
end
return {m={p2}, p={gsub1(p, rx, pl)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}}
end
-- https://elcanton.org/2016/02/17/sengulal-i-plural/
local function flexionar_palabra(p, g, forzar_s, on)
local adj = g == "mf"
local function rep_a(v) return "~"..quitar_tilde[v].."a~" end
local function rep_as(v) return "~"..quitar_tilde[v].."as~" end
local function rep_is(v) return "~"..quitar_tilde[v].."is~" end
local function rep_a_2(v, c) return "~"..quitar_tilde[v]..c.."a~" end
local function rep_as_2(v, c) return "~"..quitar_tilde[v]..c.."as~" end
local function rep_is_2(v, c) return "~"..quitar_tilde[v]..c.."is~" end
local function rep_n(v, c) return "~"..agregar_tilde[v]..c.."~" end
local es_monosilabo = find(p, "^"..CONS.."-[iuü]?[aeoiu][iu]?"..CONS.."-$")
local sin_tilde = not find(p, "["..vocal_tilde.."]")
local fl = try(p, "o$", "~os~", "~a~", "~as~", nil, adj)
or try(p, "u$", "~us~", "~a~", "~as~", nil, adj)
or try(p, "([td]i?)á$", "~%1ais~", nil, nil, nil, adj) -- -dad, -tad, -idad [[libertá]]
or try(p, "tú$", "~tuis~", nil, nil, nil, adj) -- tud, [[virtú]]
or try(p, VOCAL.."$", "~%0s~", nil, nil, nil, adj)
or try(p, "o[lr]$", "~oris~", "~ora~", "~oras~", nil, adj)
or try(p, "[aeiou][íú][ns]$", "~%0is~", "~%0a~", "~%0as~", nil, adj)
or try(p, es_monosilabo and "([aeiou])([ns])$" or "([áéíóú])([ns])$", rep_is_2, rep_a_2, rep_as_2, nil, adj) -- agudas/monosílabos en n, s
or try(p, (es_monosilabo or sin_tilde) and "x$" or "^%A$", forzar_s and "~xs~" or "~xis~", nil, nil, nil, adj) -- agudas/monosílabos en x
or try(p, "x$", nil, nil, nil, nil, adj) -- llanas/esdrújulas en x
or try(p, sin_tilde and "([aeiou])([ui]?"..CONS.."+[iu]?[aeiou][iu]?n)$" or "^%A$", "~%0~", nil, nil, rep_n, adj) -- llanas en n
or try(p, "[ns]$", nil, nil, nil, nil, adj) -- llanas/esdrújulas en s, esdrújulas en n
or try(p, sin_tilde and VOCAL.."[lrdjzñ]$" or "^%A$", "~%0is~", nil, nil, nil, adj)
or try(p, VOCAL.."[lrdjzñ]$", nil)
or try(p, "("..CONS..")y$", "~%1is~", nil, nil, nil, adj) -- ferry, REVISAR
or try(p, CONS.."[sz]$", nil)
or try(p, "[sz]"..CONS.."$", nil)
or try(p, "ch$", forzar_s and "~%0s~" or "~%0es~")
or try(p, CONS..CONS.."$", "~%0s~")
or try(p, CONS.."$", "~%0s~")
if fl then
return fl
end
error("No se pudo determinar la flexión de la palabra")
end
local function flexion_sust_adj(palabras, g, forzar_s, on, copulativa)
local a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
if b then
if copulativa == nil then
error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"")
end
local flex1 = flexionar_palabra(a, g, forzar_s, on)
local flex2 = copulativa and flexionar_palabra(b, g, forzar_s, on) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto = match(palabras, "^("..guion.."?"..LETRA.."+)(.-)$")
local flex = flexionar_palabra(p, g, forzar_s, on)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["nota"],
{},
ns == 0 and cats or {}
)
end
end
local cop -- = modo == "irreg" and false or args["cop"] falla...
if modo == "irreg" then
cop = false
else
cop = args["cop"]
end
local flex_ = flexion_sust_adj(title, modo, args["s"], args["on"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." regulares")
elseif find(title, LETRA..ESPACIO..LETRA) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["nota"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["on"] = {tipo = "bool"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
return formatear_sust_adj(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "EXT:Locuciones sustantivas" or "EXT:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["on"] = {tipo = "bool"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
args[1] = args[1] or "mf"
return formatear_sust_adj(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "EXT:Locuciones adjetivas" or "EXT:Adjetivos")
end
-- FALTA TERMINAR LOS VERBOS
local YO, TU, EL, NOSOTROS, VOSOTROS, ELLOS = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"yo", "tu", "él, vusté", "nusotrus", "vusotrus", "ellus"}
local PRONOMBRES_SUBJ = {"que yo", "que tu", "que él, vusté", "que nusotrus", "que vusotrus", "que ellus"}
local PRONOMBRES_IMP = {"―", "(tú)", "(vusté)", "(nusotrus)", "(vusotrus)", "―"}
local IMPERSONALES = {"", "", "(ello)", "", "", "(ellus)"}
local IMPERSONALES_SUBJ = {"", "", "(que ello)", "", "", "(que ellus)"}
local REFLEXIVOS = {"me", "te", "se", "nos", "os", "se"}
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local formas_no_personales = {
["ger"] = true,
["part"] = true,
["inf"] = true,
}
local formas_personales = {
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["ind_fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["subj_fut"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["ind_perf_comp"] = true,
["ind_pluperf"] = true,
["ind_anter"] = true,
["ind_fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
["subj_fut_comp"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local sufijos = {
["al"] = {
["ger"] = {"andu"},
["part"] = {"au"},
["ind_pres"] = {"u", "as", "a", "amus", "ais", "an"},
["ind_imp"] = {"ava", "avas", "ava", "avamus", "avais", "avan",
nil, nil, nil, "ávamus", "ávais", nil,
nil, nil, nil, nil, "avis"},
["ind_perf"] = {"é", "asti", "ó", "émus", "aistis", "arun",
"ei", "esti", nil, nil, "estis", "orin"},
["ind_perf_alt"] = {"é", "asti", "ó", "emos", "astis", "arun"},
["ind_fut"] = {"aré", "arás", "ará", "aremus", "areis", "arán",
"arei"},
["subj_pres"] = {"i", "is", "i", "emus", "eis", "in"},
["subj_imp"] = {"ara", "aras", "ara", "áramus", "árais", "aran"},
["subj_fut"] = {"ari", "aris", "ari", "árimus", "áris", "arin"},
["cond"] = {"aría", "arías", "aría", "ariamus", "ariais", "arían",
"aríe", "aríes", "aríe", "ariemus", "arieis", "aríen"},
["imper"] = {nil, "a", "i", nil, "ai", "in"}
},
["el"] = {
["ger"] = {"iendu"},
["part"] = {"íu"},
["ind_pres"] = {"u", "is", "i", "emus", "eis", "in"},
["ind_imp"] = {"ía", "ías", "ía", "iamus", "iais", "ían",
nil, nil, nil, nil, "ivis", nil},
["ind_perf"] = {"í", "isti", "ió", "imus", "istis", "ierun",
nil, nil, nil, nil, nil, "iorin"},
["ind_perf_alt"] = {"e", "isti", "o", "imus", "istis", "ierun"},
["ind_fut"] = {"eré", "erás", "erá", "eremus", "ereis", "erán",
"erei"},
["subj_pres"] = {"a", "as", "a", "amus", "ais", "an"},
["subj_imp"] = {"iera", "ieras", "iera", "iéramus", "iérais", "ieran"},
["subj_fut"] = {"ieri", "ieris", "ieri", "iérimus", "iéris", "ierin"},
["cond"] = {"ería", "eríes", "ería", "eríamos", "eríais", "eríen",
"eríe", "eríes", "eríe", "eríemos", "eríeis", "eríen"},
["imper"] = {"-", "i", "a", nil, "ei", "an"}
},
["il"] = {
["ger"] = {"iendu"},
["part"] = {"íu"},
["ind_pres"] = {"u", "is", "i", "imus", "ís", "in"},
["ind_imp"] = {"ía", "ías", "ía", "iamus", "iais", "ían",
nil, nil, nil, nil, "ivis", nil},
["ind_perf"] = {"í", "isti", "ió", "imus", "istis", "ierun",
nil, nil, nil, nil, nil, "iorin"},
["ind_perf_alt"] = {"e", "isti", "o", "imus", "istis", "ierun"},
["ind_fut"] = {"iré", "irás", "irá", "iremus", "ireis", "irán",
"irei"},
["subj_pres"] = {"a", "as", "a", "amus", "ais", "an"},
["subj_imp"] = {"iera", "ieras", "iera", "iéramus", "iérais", "ieran"},
["subj_fut"] = {"ieri", "ieris", "ieri", "iérimus", "iéris", "ierin"},
["cond"] = {"iría", "iríes", "iría", "iríamos", "iríais", "iríen",
"iríe", "iríes", "iríe", "iríemos", "iríeis", "iríen"},
["imper"] = {"-", "i", "a", nil, "í", "an"}
},
}
local pronombres = {"me", "te", "se", "nos", "os", "se"}
local auxiliar = {
["inf_comp"] = {"tenel"},
["ger_comp"] = {"teniendu"},
["ind_perf_comp"] = {"é", "ás", "á", "avemus", "aveis", "ain",
"ei", nil, nil, "amus", "eis", "án"},
["ind_cont"] = {"tengu", "tienis", "tien", "tenemus", "teneis", "tienin",
nil, nil, "tieni"},
["ind_pluperf"] = {"avía", "avías", "avía", "aviamus", "aviais", "avían",
"vía", "vías", "vía", "viamus", "viais", "vían",
"diva", "divas", "diva", "divamus", "divais", "divan",
"iva", "ivas", "iva", "ivamus", "ivais", "ivan"},
["ind_anter"] = {"ubi", "abisti", "ubu", "abimus", "abistis", "ubun"},
["ind_fut_comp"] = {"abré", "abrás", "abrá", "abremus", "abreis", "abrán",
"bré", "brás", "brá", "bremus", "breis", "brán",
"averé", "averás", "averá", "averemus", "avereis", "averán"},
["cond_comp"] = {"uviera", "uvieras", "uviera", "uviéramus", "uviérais", "uvieran",
"aviera", "avieras", "aviera", "aviéramus", "aviérais", "avieran"},
["subj_perf"] = {"aiga", "aigas", "aiga", "aigamus", "aigais", "aigan"},
["subj_pluperf"] = {"huera", "hueras", "huera", "huéramus", "huérais", "hueran"},
}
local function obtener_sufijos(sufijo_inf, forma)
if sufijo_inf == "al" then
return sufijos[1][forma]
elseif sufijo_inf == "el" then
return sufijos[2][forma]
else
return sufijos[3][forma]
end
end
local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf)
if not nexo then
return sufijo
end
if sufijo_inf == "al" then
if find(sufijo, "^[eéií]") then
if nexo == "c" then
return "~qu~"..sufijo
end
if nexo == "g" then
return "g~u~"..sufijo
end
if nexo == "z" then
return "~c~"..sufijo
end
if nexo == "gu" then
return "g~ü~"..sufijo
end
end
local _, cnt = gsub(sufijo, "[aeiou]", "")
if cnt == 1
and not find(sufijo, "[áéíóú]")
and find(sub(sufijo, -1), "[aeiouns]") then
if nexo == "cu" then
return sub(nexo, -2, -2).."~ú~"..sufijo, nexo..sufijo -- es llana y entonces lleva tilde
end
if nexo == "u" then
return "~ú~"..sufijo -- es llana y entonces lleva tilde
end
if nexo == "i" then
return "#í#"..sufijo -- es llana y entonces lleva tilde
end
end
if find(sufijo, "^ar") then
if find(nexo, "^[~#]?[bdr]?r[~#]?$") then
return nexo..sub(sufijo, 3)
end
end
else -- ER/IR/ÍR
if find(sufijo, "^[aáoóuú]") then
if nexo == "c" then
return "~z~"..sufijo
end
if nexo == "S" then -- mecer
return "#z#"..sufijo
end
if nexo == "g" then
return "~j~"..sufijo
end
if nexo == "gu" then
return "g~"..sufijo.."~"
end
if nexo == "qu" then
return "~c~"..sufijo
end
if nexo == "C" then
return "~zc~"..sufijo
end
end
if find(sufijo, "^[aeoáéó]") then
if nexo == "gü" then
return "g~uy~"..sufijo
end
if nexo == "u" then
return "u~y~"..sufijo
end
end
if find(sufijo, "^i[aeoáéó]") then
if (nexo == "ñ" or nexo == "ll") then
return "~"..nexo..sub(sufijo, 2).."~"
end
if nexo == "gü" then
return "g~uy~"..sub(sufijo, 2)
end
if nexo == "u" then
return "u~y~"..sub(sufijo, 2)
end
if nexo == "e" then
return nexo.."~y~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i[^aeiouáéíóú]") then
if nexo == "e" then
return nexo.."~í~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i[eé]") then
if find(nexo, "u#$") then -- ir --> fuera (subj)
return nexo..sub(sufijo, 2)
end
if nexo == "#j#" or nexo == "~j~" then
return nexo..sub(sufijo, 2)
end
end
if find(sufijo, "^í$") then
if nexo == "#j#" or nexo == "~j~" then
return nexo.."~e~"
end
end
if find(sufijo, "^ió$") then
if nexo == "#j#" or nexo == "~j~" then
return nexo.."~o~"
end
end
if find(sufijo, "^[ie]r") then
if find(nexo, "^[~#]?[bdr]?r[~#]?$") then
return nexo..sub(sufijo, 3)
end
end
end
if nexo == "C" then
return "c"..sufijo -- sin epéntesis
end
if nexo == "S" then -- mecer
return "c"..sufijo
end
return nexo..sufijo
end
local function combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf)
local nucleo_ = gsub(nucleo, "[~#]", "")
local nexosufijo_ = gsub(nexosufijo, "[~#]", "")
if find(nucleo_, "[yi]$") and find(nexosufijo_, "^i") then -- se juntan dos íes o y-i (ej. reír, freír, oír)
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1")
elseif find(nucleo_, "^[^áéíóú]-[aeiou]h?$") and find(nexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- sufijo con i/u tónica (caISTE, caIMOS, caIDO, oID, reHÚyo etc.)
return nucleo..gsub1(nexosufijo, "^([~#]?h?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleo_, "[^gq][aeiou]$") and find(nexosufijo_, "^i[aeiouáéíóú]") then -- se junta [aeiou]i[aeiouáéíóú] -> cambio a y (creYO) PERO [[chinguiar]] -> chinguIando
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~y~")
elseif find(nucleo_, "[aeiou]$") and find(nexosufijo_, "^id$") then -- reír -> reÍd, embaír -> embaÍd
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~í~")
elseif find(nucleo_, "^[^aeiouáéíóú]+$")
and (find(nexosufijo_, "^"..CONS.."?"..CONS.."?".."[iuü]?[áéó][iuü]?[ns]?$") or find(nexosufijo_, "^[íú][ns]?$")) then -- caso de dar, vos *d+ás, debo quitar la tilde
return nucleo..gsub1(nexosufijo, "[áéíóú]", function(v) return "~"..quitar_tilde[v].."~" end)
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
local prefijo_ = gsub(prefijo, "[~#]", "")
local nucleonexosufijo_ = gsub(nucleonexosufijo, "[~#]", "")
if prefijo_ and find(prefijo_, "[aeiou]") and not find(prefijo_, "[áéíóú]") then
if find(prefijo_, "^[^áéíóú]-[aeiou]h?$") and find(nucleonexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- nucleonexosufijo con i/u tónica (rehacer -> rehíce)
return prefijo..gsub1(nucleonexosufijo, "^([~#]?h?[~#]?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleonexosufijo_, "^("..CONS.."*[iuü]?)([aeiou])([iuü]?[ns]?)$") then -- monosílabo: prever --> prevén
return prefijo..gsub1(nucleonexosufijo, "^([~#]?"..CONS.."*[~#]?[iuü]?[~#]?)([aeiou])([~#]?[iuü]?[~#]?[ns]?[~#]?)$", function(a, b, c) return a..agregar_tilde[b]..c end) -- ven --> prevén
end
end
return prefijo..nucleonexosufijo
end
local paradigmas_regulares = {
["al"] = {
{"añuncial", {"ial$"}, { --necesidad de explicitar el diptongo, aunque esta variante es la que consideramos como la regular
}},
{"evacual", {"cual$"}, {
nexo = "cu"
}},
{"averigual", {"gual$"}, {
nexo = "gu"
}},
{"complical", {"cal$"}, {
nexo = "c"
}},
{"llegal", {"gal$"}, {
nexo = "g"
}},
{"actual", {"ual$"}, {
nexo = "u"
}},
{"realizal", {"zal$"}, {
nexo = "z"
}},
{"amal", {"al$"}, {
}},
},
["el"] = {
{"llel", {"llel$"}, { -- Existe esto??
nexo = "ll"
}},
{"guel", {"guel$"}, { -- Existe esto??
nexo = "gu"
}},
{"güel", {"güel$"}, { -- Existe esto??
nexo = "gü"
}},
{"quel", {"quel$"}, { -- Existe esto??
nexo = "qu"
}},
{"parecel", {"[aeiou]cel$"}, {
nexo = "C"
}},
{"vencel", {"[^aeious]cel$"}, { -- los verbos en -scer NO entran en este paradigma (ver fosforescer o evanescer)
nexo = "c"
}},
{"leel", {"eel$"}, {
nexo = "e"
}},
{"protegel", {"gel$"}, {
nexo = "g"
}},
{"atañel", {"ñel$"}, {
nexo = "ñ"
}},
{"uel", {"uel$"}, { -- Existe esto??
nexo = "u"
}},
{"temel", {"el$"}, {
}},
},
["il"] = {
{"producil", {"ducil$"}, { -- REVISAR
nucleo = "du",
nexo = "C",
ind_perf = {nexo = "~j~"},
subj_imp = {nexo = "~j~"},
}},
{"escabullil", {"llil$"}, {
nexo = "ll"
}},
{"distinguil", {"guil$"}, {
nexo = "gu"
}},
{"argüil", {"güil$"}, {
nexo = "gü"
}},
{"delinquil", {"quil$"}, {
nexo = "qu"
}},
{"lucil", {"[aeiou]cil$"}, {
nexo = "C"
}},
{"fruncil", {"[^aeious]cil$"}, {
nexo = "c"
}},
{"dirigil", {"gil$"}, {
nexo = "g"
}},
{"gruñil", {"ñil$"}, {
nexo = "ñ"
}},
{"construil", {"uil$"}, {
nexo = "u"
}},
{"partil", {"il$"}, {
}},
},
["íl"] = {
{"reíl", {"eíl$"}, {
nucleo = "e",
alt = {"í-i"},
}},
{"íl", {"íl$"}, { -- para que oír no tire error
}},
}
}
local paradigmas_irregulares = {
["al"] = {
{"andal", {"^d?e?s?andal$"}, { -- cuidado con mandar
nucleo = "and",
ind_perf = {nucleo = "anduv"},
subj_imp = {nucleo = "anduv"},
}},
{"dal", {"^d?e?s?dal$"}, { -- no pueden ir otros verbos como "andar o quedal"
nucleo = "d",
ind_pres = {{"doi", "do"}},
ind_perf = {sufijo_inf = "el"},
subj_pres = {nucleo = "de"},
subj_imp = {sufijo_inf = "el"},
}},
{"erral", {"^erral$"}, {
nucleo = "err",
alt = {"ye"},
}},
{"inhestal", {"inhestal$"}, {
alt = {"ie"},
part = {"inhiesto"}
}},
{"tal", {"^tal$"}, {
ind_pres = {{"toi", "to"}},
ind_perf = {nucleo = "tuv"},
subj_pres = {nucleo = "te"},
subj_imp = {nucleo = "tuv"},
imper = {nil, nil, {"tea"}, nil, {"tai"}, {"tean"}}
}},
{"enfrial", {"enfrial$"}, {
nexo = "i",
}},
--{"culial", {"culial$"}, { por precaución sacamos esto
-- nexo = "I"
--}},
{"aislal", {"aislal$"}, {
alt = {"í"}
}},
{"avergoñal", {"avergoñal$"}, {
alt = {"üe"}
}},
{"auñal", {"^auñal$"}, { -- REVISAR
alt = {"ú"}
}},
{"contal", {"contal$"}, {
alt = {"ue"}
}},
{"pensal", {"^pensal$"}, { -- no puede ir compensar
alt = {"ie"}
}},
},
["el"] = {
{"cabel", {"^cabel$"}, {
ind_pres = {{"quepo"}},
ind_fut = {nucleo = "ca", nexo = "#br#"},
ind_perf = {nucleo = "cup"},
subj_pres = {nucleo = "quep"},
subj_imp = {nucleo = "cup"},
cond = {nucleo = "ca", nexo = "#br#"},
}},
{"cael", {"cael$"}, { -- REVISAR http://ast.oslin.org/index.php?action=lemma&lemma=11064 hay alguna regla detrás de esto??
nucleo = "ca",
ind_pres = {{"caigo", "cayo"}, {"caes", "cayes"}, nil, {"caemos", "cayemos"}, {"caéis", "cayéis"}, {"caen", "cayen"}},
subj_pres = {nucleo = "caig"},
imper = {nil, nil, nil, {"caiga"}, {"caigamos"}, nil, {"caigan"}}
}},
{"cocel", {"cocel$"}, {
nucleo = "co",
nexo = "S", -- evitar C (epéntesis con zc)
alt = {"ue"},
}},
{"facel", {"[hfj]acel$"}, { -- REVISAR
nucleo = "a",
nexo = "S", -- evitar C (epéntesis con zc)
part = {"echu"},
ind_pres = {{"ago", "aigo"}},
ind_perf = {nucleo = "i"},
ind_fut = {nucleo = "a", nexo = "#dr#"},
subj_pres = {nucleo = "ag", nexo = ""},
subj_imp = {nucleo = "i"},
cond = {nucleo = "a", nexo = "#dr#"},
}},
{"habel", {"^habel$"}, {
ind_pres = {{"he"}, {"has"}, {"ha", "hai{IMPERSONAL}"}, {"hemos", "habemos"}, nil, {"han"}},
ind_perf = {nucleo = "hub"},
ind_fut = {nucleo = "ha", nexo = "#br#"},
subj_pres = {nucleo = "hay"},
subj_imp = {nucleo = "hub"},
cond = {nucleo = "ha", nexo = "#br#"},
imper = {nil, {"he{†}", "habe{†}"}, {"he{†}", "habe{†}"}, {"haya{†}"}, {"hayamos{†}"}, nil, {"hayan{†}"}},
}},
{"mecel", {"^r?e?mecel$"}, {
nexo = "S", -- evitar C (epéntesis con zc)
}},
{"morrel", {"morrel$"}, {
nucleo = "morr",
alt = {"ue"},
part = {"muertu"},
}},
{"golel", {"^golel$"}, {
alt = {"üe"},
}},
{"volvel", {"olvel$"}, {
nucleo = "olv",
alt = {"ue"},
part = {"ueltu"}
}},
{"placel", {"placel$"}, { -- REVISAR, existe esto??
nucleo = "pla",
ind_perf = {nil, nil, nil, {"plació", "plugo"}, nil, nil, {"placieron", "pluguieron"}},
subj_imp = {nil, nil, nil, {"placiera", "placiese", "pluguiera", "pluguiese"}, nil, nil, nil},
}},
{"podel", {"podel$"}, {
nucleo = "pod",
alt = {"ue"},
ger = {"pudiendo"},
ind_perf = {nucleo = "pud"},
ind_fut = {nucleo = "po", nexo = "#dr#"},
subj_imp = {nucleo = "pud"},
cond = {nucleo = "po", nexo = "#dr#"},
}},
{"ponel", {"ponel$"}, {
nucleo = "pon",
part = {"puesto"},
ind_pres = {{"pongo"}},
ind_perf = {nucleo = "pus"},
ind_fut = {nucleo = "pon", nexo = "#dr#"},
subj_pres = {nucleo = "pong"},
subj_imp = {nucleo = "pus"},
cond = {nucleo = "pon", nexo = "#dr#"},
imper = {nil, {"pon"}, {"ponga"}, nil, nil, {"pongan"}},
}},
{"proveel", {"proveel$"}, {
nucleo = "prov",
part = {"provisto", "proveído{†}"}
}},
{"querel", {"querel$"}, { -- REVISAR
nucleo = "quer",
alt = {"ie"},
ind_perf = {nucleo = "quis"},
ind_fut = {nucleo = "que", nexo = "#dr#"},
subj_imp = {nucleo = "quis"},
cond = {nucleo = "que", nexo = "#dr#"},
}},
{"rael", {"^rael$", "^rayel$"}, { -- no contraer, etc. REVISAR
ind_pres = {{"raigo", "rayo"}},
subj_pres = {nucleo = {"raig", "ray"}},
imper = {nil, nil, {"raiga", "raya"}, nil, {"raíi", "rayíi"}, {"raigan", "rayan"}}
}},
{"roel", {"roel$", "royel$"}, { -- REVISAR
nucleo = "ro",
ind_pres = {{"roigo", "royo"}},
subj_pres = {nucleo = {"roig", "roy"}},
imper = {nil, nil, {"roiga", "roya"}, nil, {"roíi", "royíi"}, {"roigan", "royan"}}
}},
{"rompel", {"^rompel$", "^arrompel$"}, { -- no corromper, derromper, entrerromper
nucleo = "romp",
alt = {"ue"},
part = {"rotu"}
}},
{"sabel", {"sabel$"}, {
nucleo = "sab",
ind_pres = {{"sé"}},
ind_perf = {nucleo = "sup"},
ind_fut = {nucleo = "sa", nexo = "#br#"},
subj_pres = {nucleo = "sep"},
subj_imp = {nucleo = "sup"},
cond = {nucleo = "sa", nexo = "#br#"},
imper = {nil, nil, {"sepa"}, nil, nil, {"sepan"}}
}},
{"sel", {"^sel$"}, {
ind_pres = {{"soi", "so"}, {"yes"}, {"ye"}, {"somos"}, {"sois"}, {"son"}},
ind_imp = {{"yera"}, {"yeres"}, {"yera"}, {"yéramos", "yéremos"}, {"yerais", "yereis"}, {"yeren"}},
ind_perf = {{"fui"}, {"fosti", "fuesti", "fuisti"}, {"foi", "fo"}, {"fomos", "fuemos", "fuimos"}, {"fostis", "fuestis", "fuistis"}, {"foron", "fueron"}},
subj_pres = {nucleo = {"sey", "sí"}},
subj_imp = {nucleo = "", nexo = "#fu#"}, -- no puedo poner "u" porque obtendría "fuyera" -- REVISAR: hay que agregar la variante con fo
imper = {nil, {"sé"}, {"sea"}, nil, nil, {"sean"}}
}},
{"tenel", {"tenel$", "^tel$"}, {
nucleo = "ten",
alt = {"ie"},
ind_pres = {{"tengo", "teo", "to"}},
ind_perf = {nucleo = {"tev", "tuv"}},
ind_fut = {nucleo = "ten", nexo = "#dr#"},
subj_pres = {nucleo = "teng"},
subj_imp = {nucleo = "tuv"},
cond = {nucleo = "ten", nexo = "#dr#"},
imper = {nil, {"ten"}, {"tenga"}, nil, nil, {"tengan"}}
}},
{"trael", {"trael$", "trayel$"}, {
nucleo = "tra",
ind_pres = {{"traigo"}},
ind_perf = {nucleo = "tra", nexo = "#j#"},
subj_pres = {nucleo = "traig"},
subj_imp = {nucleo = "tra", nexo = "#j#"},
imper = {nil, nil, nil, {"traiga"}, {"traigamos"}, nil, {"traigan"}}
}},
{"vel", {"^vel$", "^antevel$", "^entrevel$", "^prevel$", "^revel$"}, {
nucleo = "v",
part = {"visto"},
ind_pres = {{"veo"}},
subj_pres = {nucleo = "ve"},
imper = {nil, nil, {"vea"}, nil, nil, {"vean"}}
}},
{"yacel", {"^yacel$", "^subyacel$"}, { -- REVISAR: existe esto?
nucleo = "yac",
nexo = "", -- evitar C (epéntesis con zc), lo voy a agregar manual
ind_pres = {{"yazco", "yazgo", "yago"}},
subj_pres = {nucleo = {"yazc", "yazg", "yag"}},
imper = {nil, {"yace", "yaz"}, {"yazca", "yazga", "yaga"}, nil, nil, {"yazcan", "yazgan", "yagan"}}
}},
{"movel", {"movel$"}, {
alt = {"ue"},
}},
{"entendel", {"entendel$"}, {
alt = {"ie"},
}},
},
["il"] = {
{"asil", {"asil$"}, { -- REVISAR: existe esto
nucleo = "as",
ind_pres = {{"asgo"}},
subj_pres = {nucleo = "asg"},
imper = {nil, nil, {"asga"}, {"asgamos"}, nil, {"asgan"}}
}},
{"abril", {"[^js]abril$", "^abril$"}, { -- abrir, cubrir y derivados, pero no "desabrir" ni "jabrir" (son regs.)
nucleo = "abr",
part = {"abiertu"}
}},
{"abril", {"ubril$"}, { -- Parte 2. NOTA: no pueto tomar "br" como núcleo porque el programa piensa que es monosílabo y pone mal las tildes (cf. [[entreabrir]], [[reabrir]])
nucleo = "ubr",
part = {"ubiertu"}
}},
-- para decir contemplo 4 casos:
-- 1. decir, redecir, entredecir, antedecir: lo normal, con el imperativo en "dí" (di)
-- 2. interdecir: similar a 1. pero el imperativo es interdice (no *interdí) --> esto no existe en ast creo
-- 3. bendecir, maldecir: agrego bendito, maldito al pp
-- 4. condecir, contradecir, desdecir, predecir: parto de 1 pero agrego el futuro regular que esta aceptado
{"dicil", {"^dicil$", "^redicil$", "^entredicil$", "^antedicil$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"dichu"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
ind_fut = {nucleo = "d", nexo=""},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
cond = {nucleo = "d", nexo=""},
imper = {nil, {"di"}, {"diga"}, nil, nil, {"digan"}}
}},
{"bendicil", {"bendicil$", "maldicil$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"decíu{PART}", "ditu{ADJ}"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
imper = {nil, {"diz"}, {"diga"}, nil, nil, {"digan"}}
}},
{"predicil", {"dicil$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"dichu"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
ind_fut = {nucleo = {"dec", "d"}, nexo=""},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
cond = {nucleo = {"dec", "d"}, nexo=""},
imper = {nil, {"dí"}, {"diga"}, nil, nil, {"digan"}}
}},
{"erguil", {"^erguil$"}, {
nucleo = "el",
alt = {"ye-i", "i-i"},
}},
{"imprimil", {"imprimil$"}, {
nucleo = "imprim",
part = {"imprimíu{PART}", "impresu{ADJ}"}
}},
{"dil", {"^dil$"}, {
ind_pres = {{"voi", "vo"}, {"vas"}, {"va"}, {"vamos"}, {"vais"}, {"van"}},
ind_imp = {{"diba"}, {"dibas"}, {"diba"}, {"díbamos", "díbemos"}, {"dibais", "dibeis"}, {"diben"}},
ind_perf = {{"fui"}, {"fosti", "fuesti", "fuisti"}, {"foi", "fo"}, {"fomos", "fuemos", "fuimos"}, {"fuestis", "fuistis"}, {"foron", "fueron"}},
subj_pres = {{"fora", "vaiga", "vaya"}, {"vaigas", "vayas"}, {"fora", "vaiga", "vaya"}, {"vaigamos", "vayamos"}, {"vaigáis", "vayáis"}, {"vaigan", "vayan"}},
subj_imp = {nucleo = "", nexo = "#fu#"}, -- no puedo poner "u" porque obtendría "fuyera" -- REVISAR: faltan los otros nexos posibles
imper = {nil, {"ve"}, {"vaya"}, nil, nil, {"vayan"}}
}},
{"pudril", {"pudril$"}, { -- REVISAR: existe esto?
nucleo = "pudr",
part = {"podridu"}
}},
{"salil", {"salil$"}, {
nucleo = "sal",
ind_pres = {{"salgo"}},
ind_fut = {nucleo = "sal", nexo = "#dr#"},
subj_pres = {nucleo = "salg"},
cond = {nucleo = "sal", nexo = "#dr#"},
imper = {nil, {"sal"}, {"salga"}, nil, nil, {"salgan"}}
}},
{"escribil", {"scribil$"}, {
nucleo = "scrib",
part = {"scrito"}
}},
{"valil", {"valil$"}, {
nucleo = "val",
ind_pres = {{"valgo"}},
ind_fut = {nucleo = "val", nexo = "#dr#"},
subj_pres = {nucleo = "valg"},
cond = {nucleo = "val", nexo = "#dr#"},
imper = {nil, nil, {"valga"}, nil, nil, {"valgan"}}
}},
{"venil", {"venil$"}, {
nucleo = "ven",
alt = {"ie-i"},
ind_pres = {{"vengo"}},
ind_fut = {nexo = "#dr#"},
ind_perf = {nucleo = "vin"}, -- REVISAR: la 3s es él vIEno, no *vino, hay más verbos así?
subj_pres = {nucleo = "veng"},
cond = {nexo = "#dr#"},
imper = {nil, {"ven"}, {"venga"}, nil, nil, {"vengan"}}
}},
{"sentil", {"sentil$"}, { -- discernir entra en este paradigma tmb.
alt = {"ie-i"}
}},
{"podril", {"podril$"}, {
alt = {"u-u"},
}},
{"reunil", {"reunil$"}, {
alt = {"ú"}
}},
{"prohibil", {"prohibil$"}, {
alt = {"í"}
}},
{"rehenchil", {"rehenchil$"}, {
alt = {"í-i"}
}},
{"dormil", {"dormil$"}, {
alt = {"ue-u"}
}},
},
["íl"] = {
{"desvaíl", {"desvaíl$"}, { -- hay más verbos en -air? no podemos considerarlo como regla general
ind_pres = {{"desvayo"}},
subj_pres = {nucleo = "desvay"},
imper = {nil, nil, nil, {"desvaya"}, {"desvayamos"}, nil, {"desvayan"}}
}},
{"freíl", {"freíl$"}, {
nucleo = "fre",
part = {"frito{PART/ADJ}", "freído{PART}"},
}},
{"oíl", {"oíl$"}, {
nucleo = "o",
alt = {"oy"},
ger = {"oyendo"},
ind_pres = {{"oigo"}},
subj_pres = {nucleo = "oig"},
imper = {nil, nil, nil, {"oiga"}, {"oigamos"}, nil, {"oigan"}}
}},
},
}
local alt_info = {
["al"] = {
["í"] = {"aislal", "i", "í"}, -- tb. descafeinar
["ú"] = {"aunal", "u", "ú"}, -- tb. rehusar
["ie"] = {"pensal", "e", "ie"},
["ue"] = {"contal", "ou", "ue"}, -- también jugar
["üe"] = {"agoral", "o", "üe"},
["hue"] = {"desosal", "ou", "hue"},
["ye"] = {"erral", "e", "ye"},
},
["el"] = {
["i"] = {"???", "e", "i"}, -- REVISAR: existe esto??
["ie"] = {"entendel", "e", "ie"},
["ue"] = {"movel", "o", "ue"},
["üe"] = {"golel", "o", "üe"},
},
["il"] = {
["i"] = {"???", "e", "i"}, -- REVISAR: existe esto??
["í"] = {"prohibil", "i", "í"},
["í-i"] = {"rehenchil", "e", "í", "i"},
-- ["i-i"] = {"pedil", "e", "i", "i"},
--["ie"] = {"discernil", "ei", "ie"}, -- por las dudas también la i, por inquirir
["ie-i"] = {"sentil", "ei", "ie", "i"}, -- inquirir
["u"] = {"???", "o", "u", "u"},
["ú"] = {"reunil", "u", "ú"},
["u-u"] = {"podril", "o", "u", "u"}, -- REVISAR: existe esto??
["ue-u"] = {"dormil", "o", "ue", "u"},
["ye-i"] = {"erguil", "e", "ye", "i"},
},
["íl"] = {
["í-i"] = {"reíl", "e", "í", "i"},
["oy"] = {"oíl", "o", "oy", "oy"},
}
}
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo[forma].sufijo_inf or conjinfo.sufijo_inf
if sufijo_inf == "ar" and conjinfo[forma].nucleo then
sufijo_inf = "er" -- echo mano a los sufijos de la otra conjugación, más que nada aplica a verbos como andar -> ANDUViera
end
local sufijos_ = obtener_sufijos(sufijo_inf, (forma == "ind_perf" and conjinfo[forma].nucleo) and forma.."_alt" or forma)
local nucleos
if not conjinfo[forma].nucleo then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleos2
elseif forma == "part" then
nucleos = conjinfo.nucleo_inf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos1}
elseif forma == "ind_perf" then
nucleos = {conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos2, conjinfo.nucleos1}
elseif forma == "subj_imp" or forma == "subj_fut" then
local n = conjinfo.nucleos2
nucleos = {n, n, n, n, n, n}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleos1}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n}
end
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for j, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[1], sufijo_inf)
for _,nucleo in ipairs(nucleos) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, conjinfo.nucleo_inf[1])))
end
end
end
return
end
for i = YO, ELLOS do
local p = tostr[i]
if conjinfo[forma][i] then
for j, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local k = i
while sufijos_[k] do
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[k], sufijo_inf)
for _,nucleo in ipairs(nucleos[i]) do
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, conjinfo.nucleo_inf[1])))
end
end
k = k + 6
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local arr = res[forma]
local t = {}
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["impersonal"] = {},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["alt"] = {lista = true},
["nucleopres1"] = {lista = true},
["nucleopret3"] = {lista = true},
["núcleopres1"] = {alias_de = "nucleopres1"},
["núcleopret3"] = {alias_de = "nucleopret3"},
["paradigma"] = {lista = true},
["nota"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local adv, r1 = match(tit, "^([sSnN][íu]n?"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiáéí]r)(s?e?)(l?[aeo]?s?)(.-)$")
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[ío]?"..ESPACIO.."?"..LETRA.."*[aeiáéí]rs?e?l?[aeo]?s?(.-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
v = gsub(v, "^(%S*)ál$", "%1al") -- pronominales
v = gsub(v, "^(%S*)él$", "%1el") -- pronominales
v = gsub(v, "^(%S*[^aeo])íl$", "%1il") -- grafías anticuadas
local sufijo_inf = match(v, "[aeií]r$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
for N = 1, math.max(1,
maxindex(args["paradigma"]),
maxindex(args["alt"]),
maxindex(args["nucleopres1"]),
maxindex(args["nucleopret3"])) do
local conjinfo = {}
if find(v, "ial$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then
error("Especifique el (los) paradigma(s) para los verbos en -iar (añuncial, enfrial)")
end
local encontre_irreg = false
for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
conjinfo = deepcopy(p[3])
es_irregular = true
paradigmas_reconocidos[p[1]] = true
encontre_irreg = true
break
end
end
if encontre_irreg then
break
end
end
local encontre_reg = false
for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
local vacio = true
for k, v in pairs(p[3]) do
vacio = false
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
if vacio then
paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]]
end
encontre_reg = true
break
end
end
if encontre_reg then
break
end
end
assert(encontre_reg, "paradigma no reconocido")
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
if not conjinfo.nucleo_inf then
conjinfo.nucleo_inf = sub(v, 1, len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
conjinfo.prefijo = ""
elseif not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, len(v) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
if not conjinfo.prefijo then -- caso en el que cambié el núcleo
conjinfo.prefijo = ""
end
conjinfo.nucleos1 = {}
conjinfo.nucleos2 = {}
conjinfo.alt = conjinfo.alt or {}
if args["alt"][N] then
insert_if_not(conjinfo.alt, args["alt"][N])
end
for i, a in ipairs(conjinfo.alt) do
if a ~= "REG" then
local n1, n2
local info = alt_info[sufijo_inf][a]
assert(info, "Valor de alt no reconocido: "..a)
local sust
n1, sust = gsubb(conjinfo.nucleo_inf, "^([^"..info[2].."]*)["..info[2].."]([^"..info[2].."]*)$", "%1#"..info[3].."#%2")
if info[4] then
n2, sust = gsubb(conjinfo.nucleo_inf, "^([^"..info[2].."]*)["..info[2].."]([^"..info[2].."]*)$", "%1#"..info[4].."#%2")
end
assert(sust, "Alternancia vocálica no reconocida")
insert_if_not(conjinfo.nucleos1, n1)
insert_if_not(conjinfo.nucleos2, n2)
paradigmas_reconocidos[info[1]] = true
es_irregular = true -- si tengo el alt será siemrpe irregular, indistintamente de si el paradigma del mismo índice es regular
else
insert_if_not(conjinfo.nucleos1, conjinfo.nucleo_inf)
end
end
if args["nucleopres1"][N] then
for k, v in pairs(alt_info[sufijo_inf]) do
if args["nucleopret3"][N] then
if v[4] then
if gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[3]) == gsub1(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1")
and gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[4]) == gsub1(args["nucleopret3"][N], "^.*#([^#]+)#.*$", "%1")
then
es_irregular = true
paradigmas_reconocidos[v[1]] = true
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
insert_if_not(conjinfo.nucleos2, args["nucleopret3"][N])
break
end
end
else
if not v[4] then
if gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[3]) == gsub1(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1")
then
es_irregular = true
paradigmas_reconocidos[v[1]] = true
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
break
end
end
end
end
end
if not conjinfo.nucleos1[1] then
conjinfo.nucleos1[1] = conjinfo.nucleo_inf
end
if not conjinfo.nucleos2[1] then
conjinfo.nucleos2[1] = conjinfo.nucleo_inf
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if (find(e, 'PART') or not find(e, 'ADJ')) and not find(e, "†") then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, resto=resto, resto_pl=resto_pl,impers=args["impersonal"]}
for _,s in ipairs(tostr) do
fmtinfo["subj_pres"..s] = deepcopy(resultante["subj_pres"..s])
end
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local es_impersonal = args["impersonal"]
local es_indirecto = args["indirecto"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, es_impersonal)
end)
local impers = args["impersonal"]
local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper
if impers == "3" then
if args["indirecto"] then
error("No implementado aún")
else
fila_pronombres_ind = {"", "(ello)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(ello)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que ello)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(ello)", color=COLOR_IMPER, header=true, class="pc"}
end
cs = 2
elseif impers == "36" then
fila_pronombres_ind = {"", "(ello)", "(ellus)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(ello)", "(ellus)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que ello)", "(que ellus)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(ello)", "(ellus)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_ind = {"", "yo", "tu", "él, vusté", "nusotrus", "vusotrus", "ellus", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "yo", "tu", "él, vusté", "nusotrus", "vusotrus", "ellus", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que yo", "que tu", "que él, vusté", "que nusotrus", "que vusotrus", "que ellus", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tú)", "(vusté)", "(nusotrus)", "(vusotrus)", "―", color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = math.floor(cs / 2)
cs2 = cs - cs1
local t = {}
t[1] = {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true}
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
else
resultante.inf.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.part.colspan = cs1-1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
t[5] = {{"Formas personales", colspan=cs}, color=COLOR_H, header=true}
t[6] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true}
t[7] = fila_pronombres_ind
t[8] = {{"Presente", color=COLOR_IND, header=true}, ic("ind_pres")}
t[9] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")}
t[10] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("ind_perf")}
t[11] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")}
t[12] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("ind_perf_comp")}
t[13] = {{"Futuro", color=COLOR_IND, header=true}, ic("ind_fut")}
t[14] = {{"Futuro compuesto", color=COLOR_IND, header=true}, ic("ind_fut_comp")}
t[15] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("ind_anter")}
t[16] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true}
t[17] = fila_pronombres_cond
t[18] = {{"Condicional simple", color=COLOR_COND, header=true}, ic("cond")}
t[19] = {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("cond_comp")}
t[20] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true}
t[21] = fila_pronombres_subj
t[22] = {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")}
t[23] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")}
t[24] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")}
t[25] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")}
t[26] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true}
t[27] = fila_pronombres_imper
if mostrar_imper then
t[28] = {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")}
else
t[29] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}}
end
t[30] = {{f("Leyenda: † arcaico, x no normativo, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}}
args["nota"] = args["nota"] or ""
if args["impersonal"] == "utc3" then
args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "umc3" then
args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "utc36" then
args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
if args["impersonal"] == "umc36" then
args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
t[31] = {{args["nota"] and args["nota"] or "", colspan=cs}}
local paradigmas_t = {}
local cats = {}
if es_irregular then
insert(cats, "EXT:Verbos irregulares")
paradigmas_reconocidos["añuncial"] = nil
paradigmas_reconocidos["amal"] = nil
paradigmas_reconocidos["temel"] = nil
paradigmas_reconocidos["partil"] = nil
paradigmas_reconocidos["íl"] = nil
else
insert(cats, "EXT:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "EXT:Verbos del paradigma "..p)
end
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "EXT:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "EXT:Verbos terciopersonales")
end
if find(impers, "^ind") then
insert(cats, "EXT:Verbos de objeto indirecto")
end
if defectivo then
insert(cats, "EXT:Verbos defectivos")
end
if sufijo_inf == "al" then
insert(cats, "EXT:Verbos de la primera conjugación")
elseif sufijo_inf == "el" then
insert(cats, "EXT:Verbos de la segunda conjugación")
else -- será ir o ír, ya fue chequeado antes
insert(cats, "EXT:Verbos de la tercera conjugación")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")",
t,
ns == 0 and cats or {})
end
return export
7uff2q9n3dcpcvaqsbn0n8gwse7fbet
Módulo:flex/an
828
1056431
6117307
6077049
2026-06-06T16:45:47Z
TMCbot
164594
.
6117307
Scribunto
text/plain
-- Flexión del aragonés
-- Autor: Tmagc
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local len = m_str.len
local find = m_str.find
local gsub1 = m_str.gsub1
local gsub = m_str.gsub
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local vocal_no_tilde = "aeiouüAEIOUÜ"
local vocal_tilde = "áéíóúÁÉÍÓÚ"
local vocal = vocal_no_tilde..vocal_tilde
local cons = "bcdfghjklmnñpqrstvwxyzçBCFGHJKLMNÑPQRSTVWXYZÇ"
local espacios = "%-‐%s"
local guion = "%-"
local VOCAL = "["..vocal.."]"
local CONS = "["..cons.."]"
local CONS_SALVO_H = "[^"..vocal.."hH~#{}]"
local ESPACIO = "["..espacios.."]"
local LETRA = "[^"..espacios.."]"
local agregar_tilde =
{
["a"] = "á",
["e"] = "é",
["i"] = "í",
["o"] = "ó",
["u"] = "ú",
["á"] = "á",
["é"] = "é",
["í"] = "í",
["ó"] = "ó",
["ú"] = "ú",
["A"] = "Á",
["E"] = "É",
["I"] = "Í",
["O"] = "Ó",
["U"] = "Ú",
["Á"] = "Á",
["É"] = "É",
["Í"] = "Í",
["Ó"] = "Ó",
["Ú"] = "Ú",
}
local quitar_tilde =
{
["á"] = "a",
["é"] = "e",
["í"] = "i",
["ó"] = "o",
["ú"] = "u",
["a"] = "a",
["e"] = "e",
["i"] = "i",
["o"] = "o",
["u"] = "u",
["Á"] = "A",
["É"] = "E",
["Í"] = "I",
["Ó"] = "O",
["Ú"] = "U",
["A"] = "A",
["E"] = "E",
["I"] = "I",
["O"] = "O",
["U"] = "U",
}
local function try(p, rx, pl, f, fpl, pl2, femenino)
local p2, sust = gsubb(p, rx, "~%0~")
if not sust then
return nil
end
if not pl then
return {m={p2}, p={}, f={}, fp={}}
end
if not femenino or not f then
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={}, fp={}}
else
return {m={p2}, p={gsub1(p, rx, pl)}, f={}, fp={}}
end
end
if pl2 then
return {m={p2}, p={gsub1(p, rx, pl), gsub1(p, rx, pl2)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}}
end
return {m={p2}, p={gsub1(p, rx, pl)}, f={gsub1(p, rx, f)}, fp={gsub1(p, rx, fpl)}}
end
-- https://an.wikipedia.org/wiki/Numero_gramatical_en_aragon%C3%A9s
local function flexionar_palabra(p, g, forzar_s, on)
local adj = g == "mf"
local function rep_a_2(v, c) return "~"..quitar_tilde[v]..c.."a~" end
local function rep_as_2(v, c) return "~"..quitar_tilde[v]..c.."as~" end
local function rep_s_2(v, c) return "~"..quitar_tilde[v]..c.."s~" end
local function rep_es_2(v, c) return "~"..quitar_tilde[v]..c.."es~" end
local function rep_n_2(v, c) return "~"..agregar_tilde[v]..c.."s~" end
local es_monosilabo = find(p, "^"..CONS.."-[iuü]?[aeoiu][iu]?"..CONS.."-$")
local diptongo_final_ns = find(p, "[aeiouü][ui][ns]$") -- las palabras que terminen en diptongo con u/i final y n/s no llevan tilde
local sin_tilde = not find(p, "["..vocal_tilde.."]")
local fl = try(p, "o$", "~os~", "~a~", "~as~", nil, adj)
or try(p, "ce$", "~ces~", "~za~", "~zas~", nil, adj)
or try(p, "eu$", "~eus~", "~eua~", "~euas~", nil, adj)
or try(p, "au$", "~aus~", "~ada~", "~adas~", nil, adj)
or try(p, "íu$", "~íus~", "~ida~", "~idas~", nil, adj)
or try(p, VOCAL.."$", "~%0s~", nil, nil, nil, adj)
or try(p, "("..VOCAL..")[td]$", "~%1z~", nil, nil, nil, adj) -- -d, -t
or try(p, "rt$", "~rz~", nil, nil, nil, adj) -- -rt
or try(p, "([oe]r)$", "~%1s~", "~%1a~", "~%1as~", nil, adj) -- -er (-ero en castellano), -or
or try(p, "(ol)$", "~%1s~", "~%1a~", "~%1as~", nil, adj) -- -er (-ero en castellano), -or
or try(p, "[aeiou][íú]n$", "~%0s~", "~%0a~", "~%0as~", nil, adj) -- hiatos con n
or try(p, "[aeiou][íú]s$", "~%0es~", "~%0a~", "~%0as~", nil, adj) -- hiatos con s
or try(p, (es_monosilabo or diptongo_final_ns) and "([aeiou])(n)$" or "([áéíóú])(n)$", rep_s_2, rep_a_2, rep_as_2, nil, adj) -- agudas/monosílabos en n
or try(p, (es_monosilabo or diptongo_final_ns) and "([aeiou])(s)$" or "([áéíóú])(s)$", rep_es_2, rep_a_2, rep_as_2, nil, adj) -- agudas/monosílabos en s
or try(p, (es_monosilabo or sin_tilde) and "x$" or "^%A$", forzar_s and "~xs~" or "~xes~", nil, nil, nil, adj) -- agudas/monosílabos en x
or try(p, sin_tilde and "([aeiou])([ui]?"..CONS.."+[iu]?[aeiou][iu]?n)$" or "^%A$", rep_n_2, nil, nil, nil, adj) -- llanas en n
or try(p, "[nsx]$", nil, nil, nil, nil, adj) -- esdrújulas en n, llanas/esdrújulas s, x
or try(p, "("..VOCAL..")z$", "~%1ces~", nil, nil, nil, adj)
or try(p, "("..VOCAL..")c$", "~%1ques~", nil, nil, nil, adj)
or try(p, "("..CONS..")y$", "~%1is~", nil, nil, nil, adj) -- ferry, REVISAR
or try(p, CONS.."[sz]$", nil)
or try(p, "[sz]"..CONS.."$", nil)
or try(p, "ch$", forzar_s and "~%0s~" or "~%0es~")
or try(p, CONS..CONS.."$", "~%0s~")
or try(p, CONS.."$", "~%0s~")
if fl then
return fl
end
error("No se pudo determinar la flexión de la palabra")
end
local function flexion_sust_adj(palabras, g, forzar_s, on, copulativa)
local a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
if b then
if copulativa == nil then
error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"")
end
local flex1 = flexionar_palabra(a, g, forzar_s, on)
local flex2 = copulativa and flexionar_palabra(b, g, forzar_s, on) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto = match(palabras, "^("..guion.."?"..LETRA.."+)(.-)$")
local flex = flexionar_palabra(p, g, forzar_s, on)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["nota"],
{},
ns == 0 and cats or {}
)
end
end
local cop -- = modo == "irreg" and false or args["cop"] falla...
if modo == "irreg" then
cop = false
else
cop = args["cop"]
end
local flex_ = flexion_sust_adj(title, modo, args["s"], args["on"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." regulares")
elseif find(title, LETRA..ESPACIO..LETRA) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["nota"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["on"] = {tipo = "bool"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
return formatear_sust_adj(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "AN:Locuciones sustantivas" or "AN:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["on"] = {tipo = "bool"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
args[1] = args[1] or "mf"
return formatear_sust_adj(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "AN:Locuciones adjetivas" or "AN:Adjetivos")
end
-- FALTA TERMINAR LOS VERBOS
local YO, TU, EL, NOSOTROS, VOSOTROS, ELLOS = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"yo", "tu", "él, vusté", "nosotros", "vosotros", "vustedes, ellos"}
local PRONOMBRES_SUBJ = {"que yo", "que tu", "que él, vusté", "que nosotros", "que vosotros", "que vustedes, ellos"}
local PRONOMBRES_IMP = {"―", "(tú)", "(vusté)", "(nosotros)", "(vosotros)", "(vustedes)"}
local IMPERSONALES = {"", "", "(ello)", "", "", "(ellos)"}
local IMPERSONALES_SUBJ = {"", "", "(que ello)", "", "", "(que ellos)"}
local REFLEXIVOS = {"me", "te", "se", "nos", "os", "se"}
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
local formas_no_personales = {
["ger"] = true,
["part"] = true,
["inf"] = true,
}
local formas_personales = {
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["ind_fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["ind_perf_comp"] = true,
["ind_pluperf"] = true,
["ind_anter"] = true,
["ind_fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local sufijos = {
["ar"] = {
["ger"] = {"ando"},
["part"] = {"áu"},
["ind_pres"] = {"o", "es", "a", "amos", "áis", "en"},
["ind_imp"] = {"aba", "abes", "aba", "ábamos", "abais", "aben",
nil, nil, nil, "ábemos", "abeis", nil},
["ind_perf"] = {"é", "asti", "ó", "emos", "astis", "aron",
nil, "esti", nil, nil, "estis", nil},
["ind_perf_alt"] = {"é", "asti", "ó", "emos", "astis", "aron"},
["ind_fut"] = {"aré", "arás", "ará", "aremos", "aréis", "arán"},
["subj_pres"] = {"e", "as", "e", "emos", "éis", "an",
nil, "es", nil, nil, nil, "en"},
["subj_imp"] = {"ara", "aras", "ara", "áramos", "arais", "aran",
"are", "ares", "are", "áremos", "areis", "aren"},
["cond"] = {"aría", "aríes", "aría", "aríamos", "aríais", "aríen",
nil, nil, nil, "aríemos", "aríeis", nil},
["imper"] = {"-", "a", "e", "emos", "ái", nil}
},
["er"] = {
["ger"] = {"iendo"},
["part"] = {"íu"},
["ind_pres"] = {"o", "es", "e", "emos", "éis", "en"},
["ind_imp"] = {"ía", "íes", "ía", "íamos", "íais", "íen",
nil, nil, nil, "íemos", "íeis", nil},
["ind_perf"] = {"í", "iesti", "iera", "iemos", "iestis", "ieron",
nil, "isti", "iere", "imos", "istis", nil},
["ind_perf_alt"] = {"e", "iste", "o", "imos", "istis", "ieron"},
["ind_fut"] = {"eré", "erás", "erá", "eremos", "eréis", "erán"},
["subj_pres"] = {"a", "as", "a", "amos", "áis", "an"},
["subj_imp"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["cond"] = {"ería", "eríes", "ería", "eríamos", "eríais", "eríen",
nil, nil, nil, "eríemos", "eríeis", nil},
["imper"] = {"-", "i", "a", "amos", "éi", nil}
},
["ir"] = {
["ger"] = {"iendo"},
["part"] = {"ido"},
["ind_pres"] = {"o", "es", "e", "imos", "ís", "en"},
["ind_imp"] = {"ía", "íes", "ía", "íamos", "íais", "íen",
nil, nil, nil, "íemos", "íeis", nil},
["ind_perf"] = {"í", "iesti", "ió", "iemos", "iesteis", "ieron",
nil, "isti", nil, "imos", "istis", nil},
["ind_perf_alt"] = {"e", "iste", "o", "imos", "isteis", "ieron"},
["ind_fut"] = {"iré", "irás", "irá", "iremos", "iréis", "irán"},
["subj_pres"] = {"a", "as", "a", "amos", "áis", "an"},
["subj_imp"] = {"iera", "ieras", "iera", "iéramos", "ierais", "ieran",
"iere", "ieres", "iere", "iéremos", "iereis", "ieren"},
["cond"] = {"iría", "irías", "iría", "iríamos", "iríais", "iríen",
nil, nil, nil, "iríemos", "iríeis", nil},
["imper"] = {"-", "i", "a", "amos", "íi", nil}
},
}
local pronombres = {"me", "te", "se", "nos", "os", "se"}
local auxiliar = {
["inf_comp"] = {"tener"},
["ger_comp"] = {"teniendo"},
["ind_perf_comp"] = {"tengo", "tienes", "tien", "tenemos", "tenéis", "tienen"},
["ind_pluperf"] = {"tenía", "teníes", "tenía", "teníamos", "teníais", "teníen"},
["ind_anter"] = {"tuvi", "tuvisti", "tuvo", "tuvimos", "tuvistis", "tuvieron"},
["ind_fut_comp"] = {"tendré", "tendrás", "tendrá", "tendremos", "tendréis", "tendrán"},
["cond_comp"] = {"tendría", "tendríes", "tendría", "tendríamos", "tendríais", "tendríen"},
["subj_perf"] = {"tenga", "tengas", "tenga", "tengamos", "tengáis", "tengan"},
["subj_pluperf"] = {"tuviera", "tuvieras", "tuviera", "tuviéramos", "tuvierais", "tuvieran",
"tuviese", "tuvieses", "tuviese", "tuviésemos", "tuvieseis", "tuviesen"},
}
local function obtener_sufijos(sufijo_inf, forma)
if sufijo_inf == "ar" then
return sufijos[1][forma]
elseif sufijo_inf == "er" then
return sufijos[2][forma]
else
return sufijos[3][forma]
end
end
local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf)
if not nexo then
return sufijo
end
if sufijo_inf == "ar" then
if find(sufijo, "^[eéií]") then
if nexo == "c" then
return "~qu~"..sufijo
end
if nexo == "g" then
return "g~u~"..sufijo
end
if nexo == "z" then
return "~c~"..sufijo
end
if nexo == "gu" then
return "g~ü~"..sufijo
end
end
local _, cnt = gsub(sufijo, "[aeiou]", "")
if cnt == 1
and not find(sufijo, "[áéíóú]")
and find(sub(sufijo, -1), "[aeiouns]") then
if nexo == "cu" then
return sub(nexo, -2, -2).."~ú~"..sufijo, nexo..sufijo -- es llana y entonces lleva tilde
end
if nexo == "u" then
return "~ú~"..sufijo -- es llana y entonces lleva tilde
end
if nexo == "i" then
return "#í#"..sufijo -- es llana y entonces lleva tilde
end
if nexo == "I" then
return "#e#"..sufijo -- es llana y entonces la sinéresis de la i se pierde
end
end
if find(sufijo, "^ar") then
if find(nexo, "^[~#]?[bdr]?r[~#]?$") then
return nexo..sub(sufijo, 3)
end
end
else -- ER/IR/ÍR
if find(sufijo, "^[aáoóuú]") then
if nexo == "c" then
return "~z~"..sufijo
end
if nexo == "S" then -- mecer
return "#z#"..sufijo
end
if nexo == "g" then
return "~j~"..sufijo
end
if nexo == "gu" then
return "g~"..sufijo.."~"
end
if nexo == "qu" then
return "~c~"..sufijo
end
if nexo == "C" then
return "~zc~"..sufijo
end
end
if find(sufijo, "^[aeoáéó]") then
if nexo == "gü" then
return "g~uy~"..sufijo
end
if nexo == "u" then
return "u~y~"..sufijo
end
end
if find(sufijo, "^i[aeoáéó]") then
if (nexo == "ñ" or nexo == "ll") then
return "~"..nexo..sub(sufijo, 2).."~"
end
if nexo == "gü" then
return "g~uy~"..sub(sufijo, 2)
end
if nexo == "u" then
return "u~y~"..sub(sufijo, 2)
end
if nexo == "e" then
return nexo.."~y~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i[^aeiouáéíóú]") then
if nexo == "e" then
return nexo.."~í~"..sub(sufijo, 2)
end
end
if find(sufijo, "^i[eé]") then
if find(nexo, "u#$") then -- ir --> fuera (subj)
return nexo..sub(sufijo, 2)
end
if nexo == "#j#" or nexo == "~j~" then
return nexo..sub(sufijo, 2)
end
end
if find(sufijo, "^í$") then
if nexo == "#j#" or nexo == "~j~" then
return nexo.."~e~"
end
end
if find(sufijo, "^ió$") then
if nexo == "#j#" or nexo == "~j~" then
return nexo.."~o~"
end
end
if find(sufijo, "^[ie]r") then
if find(nexo, "^[~#]?[bdr]?r[~#]?$") then
return nexo..sub(sufijo, 3)
end
end
end
if nexo == "I" then
return "i"..sufijo -- sinéresis normal
end
if nexo == "C" then
return "c"..sufijo -- sin epéntesis
end
if nexo == "S" then -- mecer
return "c"..sufijo
end
return nexo..sufijo
end
local function combinar_nucleo_nexosufijo(nucleo, nexosufijo, nucleo_inf)
local nucleo_ = gsub(nucleo, "[~#]", "")
local nexosufijo_ = gsub(nexosufijo, "[~#]", "")
if find(nucleo_, "[yi]$") and find(nexosufijo_, "^i") then -- se juntan dos íes o y-i (ej. reír, freír, oír)
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1")
elseif find(nucleo_, "^[^áéíóú]-[aeiou]h?$") and find(nexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- sufijo con i/u tónica (caISTE, caIMOS, caIDO, oID, reHÚyo etc.)
return nucleo..gsub1(nexosufijo, "^([~#]?h?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleo_, "[^gq][aeiou]$") and find(nexosufijo_, "^i[aeiouáéíóú]") then -- se junta [aeiou]i[aeiouáéíóú] -> cambio a y (creYO) PERO [[chinguiar]] -> chinguIando
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~y~")
elseif find(nucleo_, "[aeiou]$") and find(nexosufijo_, "^id$") then -- reír -> reÍd, embaír -> embaÍd
return nucleo..gsub1(nexosufijo, "^([~#]?)i", "%1~í~")
elseif find(nucleo_, "^[^aeiouáéíóú]+$")
and (find(nexosufijo_, "^"..CONS.."?"..CONS.."?".."[iuü]?[áéó][iuü]?[ns]?$") or find(nexosufijo_, "^[íú][ns]?$")) then -- caso de dar, vos *d+ás, debo quitar la tilde
return nucleo..gsub1(nexosufijo, "[áéíóú]", function(v) return "~"..quitar_tilde[v].."~" end)
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
local prefijo_ = gsub(prefijo, "[~#]", "")
local nucleonexosufijo_ = gsub(nucleonexosufijo, "[~#]", "")
if prefijo_ and find(prefijo_, "[aeiou]") and not find(prefijo_, "[áéíóú]") then
if find(prefijo_, "^[^áéíóú]-[aeiou]h?$") and find(nucleonexosufijo_, "^h?[iuü]"..CONS..CONS.."?[aeiou][iuü]?[ns]?$") then -- nucleonexosufijo con i/u tónica (rehacer -> rehíce)
return prefijo..gsub1(nucleonexosufijo, "^([~#]?h?[~#]?)([iuü])", function (a, v) return a.."~"..agregar_tilde[v].."~" end)
elseif find(nucleonexosufijo_, "^("..CONS.."*[iuü]?)([aeiou])([iuü]?[ns]?)$") then -- monosílabo: prever --> prevén
return prefijo..gsub1(nucleonexosufijo, "^([~#]?"..CONS.."*[~#]?[iuü]?[~#]?)([aeiou])([~#]?[iuü]?[~#]?[ns]?[~#]?)$", function(a, b, c) return a..agregar_tilde[b]..c end) -- ven --> prevén
end
end
return prefijo..nucleonexosufijo
end
local paradigmas_regulares = {
["ar"] = {
{"añunciar", {"iar$"}, { --necesidad de explicitar el diptongo, aunque esta variante es la que consideramos como la regular
}},
{"evacuar", {"cuar$"}, {
nexo = "cu"
}},
{"averiguar", {"guar$"}, {
nexo = "gu"
}},
{"complicar", {"car$"}, {
nexo = "c"
}},
{"llegar", {"gar$"}, {
nexo = "g"
}},
{"actuar", {"uar$"}, {
nexo = "u"
}},
{"realizar", {"zar$"}, {
nexo = "z"
}},
{"amar", {"ar$"}, {
}},
},
["er"] = {
{"ller", {"ller$"}, { -- Existe esto??
nexo = "ll"
}},
{"guer", {"guer$"}, { -- Existe esto??
nexo = "gu"
}},
{"güer", {"güer$"}, { -- Existe esto??
nexo = "gü"
}},
{"quer", {"quer$"}, { -- Existe esto??
nexo = "qu"
}},
{"parecer", {"[aeiou]cer$"}, {
nexo = "C"
}},
{"vencer", {"[^aeious]cer$"}, { -- los verbos en -scer NO entran en este paradigma (ver fosforescer o evanescer)
nexo = "c"
}},
{"leer", {"eer$"}, {
nexo = "e"
}},
{"proteger", {"ger$"}, {
nexo = "g"
}},
{"atañer", {"ñer$"}, {
nexo = "ñ"
}},
{"uer", {"uer$"}, { -- Existe esto??
nexo = "u"
}},
{"temer", {"er$"}, {
}},
},
["ir"] = {
{"producir", {"ducir$"}, { -- REVISAR
nucleo = "du",
nexo = "C",
ind_perf = {nexo = "~j~"},
subj_imp = {nexo = "~j~"},
}},
{"escabullir", {"llir$"}, {
nexo = "ll"
}},
{"distinguir", {"guir$"}, {
nexo = "gu"
}},
{"argüir", {"güir$"}, {
nexo = "gü"
}},
{"delinquir", {"quir$"}, {
nexo = "qu"
}},
{"lucir", {"[aeiou]cir$"}, {
nexo = "C"
}},
{"fruncir", {"[^aeious]cir$"}, {
nexo = "c"
}},
{"dirigir", {"gir$"}, {
nexo = "g"
}},
{"gruñir", {"ñir$"}, {
nexo = "ñ"
}},
{"construir", {"uir$"}, {
nexo = "u"
}},
{"partir", {"ir$"}, {
}},
},
["ír"] = {
{"reír", {"eír$"}, {
nucleo = "e",
alt = {"í-i"},
}},
{"ír", {"ír$"}, { -- para que oír no tire error
}},
}
}
local paradigmas_irregulares = {
["ar"] = {
{"andar", {"^d?e?s?andar$"}, { -- cuidado con mandar
nucleo = "and",
ind_perf = {nucleo = "anduv"},
subj_imp = {nucleo = "anduv"},
}},
{"dar", {"^d?e?s?dar$"}, { -- no pueden ir otros verbos como "andar o quedar"
nucleo = "d",
ind_pres = {{"doi", "do"}},
ind_perf = {sufijo_inf = "er"},
subj_pres = {nucleo = "de"},
subj_imp = {sufijo_inf = "er"},
}},
{"errar", {"^errar$"}, {
nucleo = "err",
alt = {"ye"},
}},
{"inhestar", {"inhestar$"}, {
alt = {"ie"},
part = {"inhiesto"}
}},
{"tar", {"^tar$"}, {
ind_pres = {{"toi", "to"}},
ind_perf = {nucleo = "tuv"},
subj_pres = {nucleo = "te"},
subj_imp = {nucleo = "tuv"},
imper = {nil, nil, {"tea"}, nil, {"tai"}, {"tean"}}
}},
{"enfriar", {"enfriar$"}, {
nexo = "i",
}},
--{"culiar", {"culiar$"}, { por precaución sacamos esto
-- nexo = "I"
--}},
{"aislar", {"aislar$"}, {
alt = {"í"}
}},
{"avergoñar", {"avergoñar$"}, {
alt = {"üe"}
}},
{"auñar", {"^auñar$"}, { -- REVISAR
alt = {"ú"}
}},
{"contar", {"contar$"}, {
alt = {"ue"}
}},
{"pensar", {"^pensar$"}, { -- no puede ir compensar
alt = {"ie"}
}},
},
["er"] = {
{"caber", {"^caber$"}, {
ind_pres = {{"quepo"}},
ind_fut = {nucleo = "ca", nexo = "#br#"},
ind_perf = {nucleo = "cup"},
subj_pres = {nucleo = "quep"},
subj_imp = {nucleo = "cup"},
cond = {nucleo = "ca", nexo = "#br#"},
}},
{"caer", {"caer$"}, { -- REVISAR http://ast.oslin.org/index.php?action=lemma&lemma=11064 hay alguna regla detrás de esto??
nucleo = "ca",
ind_pres = {{"caigo", "cayo"}, {"caes", "cayes"}, nil, {"caemos", "cayemos"}, {"caéis", "cayéis"}, {"caen", "cayen"}},
subj_pres = {nucleo = "caig"},
imper = {nil, nil, nil, {"caiga"}, {"caigamos"}, nil, {"caigan"}}
}},
{"cocer", {"cocer$"}, {
nucleo = "co",
nexo = "S", -- evitar C (epéntesis con zc)
alt = {"ue"},
}},
{"facer", {"[hfj]acer$"}, { -- REVISAR
nucleo = "a",
nexo = "S", -- evitar C (epéntesis con zc)
part = {"echu"},
ind_pres = {{"ago", "aigo"}},
ind_perf = {nucleo = "i"},
ind_fut = {nucleo = "a", nexo = "#dr#"},
subj_pres = {nucleo = "ag", nexo = ""},
subj_imp = {nucleo = "i"},
cond = {nucleo = "a", nexo = "#dr#"},
}},
{"haber", {"^haber$"}, {
ind_pres = {{"he"}, {"has"}, {"ha", "hai{IMPERSONAL}"}, {"hemos", "habemos"}, nil, {"han"}},
ind_perf = {nucleo = "hub"},
ind_fut = {nucleo = "ha", nexo = "#br#"},
subj_pres = {nucleo = "hay"},
subj_imp = {nucleo = "hub"},
cond = {nucleo = "ha", nexo = "#br#"},
imper = {nil, {"he{†}", "habe{†}"}, {"he{†}", "habe{†}"}, {"haya{†}"}, {"hayamos{†}"}, nil, {"hayan{†}"}},
}},
{"mecer", {"^r?e?mecer$"}, {
nexo = "S", -- evitar C (epéntesis con zc)
}},
{"morrer", {"morrer$"}, {
nucleo = "morr",
alt = {"ue"},
part = {"muertu"},
}},
{"goler", {"^goler$"}, {
alt = {"üe"},
}},
{"volver", {"olver$"}, {
nucleo = "olv",
alt = {"ue"},
part = {"ueltu"}
}},
{"placer", {"placer$"}, { -- REVISAR, existe esto??
nucleo = "pla",
ind_perf = {nil, nil, nil, {"plació", "plugo"}, nil, nil, {"placieron", "pluguieron"}},
subj_imp = {nil, nil, nil, {"placiera", "placiese", "pluguiera", "pluguiese"}, nil, nil, nil},
}},
{"poder", {"poder$"}, {
nucleo = "pod",
alt = {"ue"},
ger = {"pudiendo"},
ind_perf = {nucleo = "pud"},
ind_fut = {nucleo = "po", nexo = "#dr#"},
subj_imp = {nucleo = "pud"},
cond = {nucleo = "po", nexo = "#dr#"},
}},
{"poner", {"poner$"}, {
nucleo = "pon",
part = {"puesto"},
ind_pres = {{"pongo"}},
ind_perf = {nucleo = "pus"},
ind_fut = {nucleo = "pon", nexo = "#dr#"},
subj_pres = {nucleo = "pong"},
subj_imp = {nucleo = "pus"},
cond = {nucleo = "pon", nexo = "#dr#"},
imper = {nil, {"pon"}, {"ponga"}, nil, nil, {"pongan"}},
}},
{"proveer", {"proveer$"}, {
nucleo = "prov",
part = {"provisto", "proveído{†}"}
}},
{"querer", {"querer$"}, { -- REVISAR
nucleo = "quer",
alt = {"ie"},
ind_perf = {nucleo = "quis"},
ind_fut = {nucleo = "que", nexo = "#dr#"},
subj_imp = {nucleo = "quis"},
cond = {nucleo = "que", nexo = "#dr#"},
}},
{"raer", {"^raer$", "^rayer$"}, { -- no contraer, etc. REVISAR
ind_pres = {{"raigo", "rayo"}},
subj_pres = {nucleo = {"raig", "ray"}},
imper = {nil, nil, {"raiga", "raya"}, nil, {"raíi", "rayíi"}, {"raigan", "rayan"}}
}},
{"roer", {"roer$", "royer$"}, { -- REVISAR
nucleo = "ro",
ind_pres = {{"roigo", "royo"}},
subj_pres = {nucleo = {"roig", "roy"}},
imper = {nil, nil, {"roiga", "roya"}, nil, {"roíi", "royíi"}, {"roigan", "royan"}}
}},
{"romper", {"^romper$", "^arromper$"}, { -- no corromper, derromper, entrerromper
nucleo = "romp",
alt = {"ue"},
part = {"rotu"}
}},
{"saber", {"saber$"}, {
nucleo = "sab",
ind_pres = {{"sé"}},
ind_perf = {nucleo = "sup"},
ind_fut = {nucleo = "sa", nexo = "#br#"},
subj_pres = {nucleo = "sep"},
subj_imp = {nucleo = "sup"},
cond = {nucleo = "sa", nexo = "#br#"},
imper = {nil, nil, {"sepa"}, nil, nil, {"sepan"}}
}},
{"ser", {"^ser$"}, {
ind_pres = {{"soi", "so"}, {"yes"}, {"ye"}, {"somos"}, {"sois"}, {"son"}},
ind_imp = {{"yera"}, {"yeres"}, {"yera"}, {"yéramos", "yéremos"}, {"yerais", "yereis"}, {"yeren"}},
ind_perf = {{"fui"}, {"fosti", "fuesti", "fuisti"}, {"foi", "fo"}, {"fomos", "fuemos", "fuimos"}, {"fostis", "fuestis", "fuistis"}, {"foron", "fueron"}},
subj_pres = {nucleo = {"sey", "sí"}},
subj_imp = {nucleo = "", nexo = "#fu#"}, -- no puedo poner "u" porque obtendría "fuyera" -- REVISAR: hay que agregar la variante con fo
imper = {nil, {"sé"}, {"sea"}, nil, nil, {"sean"}}
}},
{"tener", {"tener$", "^ter$"}, {
nucleo = "ten",
alt = {"ie"},
ind_pres = {{"tengo", "teo", "to"}},
ind_perf = {nucleo = {"tev", "tuv"}},
ind_fut = {nucleo = "ten", nexo = "#dr#"},
subj_pres = {nucleo = "teng"},
subj_imp = {nucleo = "tuv"},
cond = {nucleo = "ten", nexo = "#dr#"},
imper = {nil, {"ten"}, {"tenga"}, nil, nil, {"tengan"}}
}},
{"traer", {"traer$", "trayer$"}, {
nucleo = "tra",
ind_pres = {{"traigo"}},
ind_perf = {nucleo = "tra", nexo = "#j#"},
subj_pres = {nucleo = "traig"},
subj_imp = {nucleo = "tra", nexo = "#j#"},
imper = {nil, nil, nil, {"traiga"}, {"traigamos"}, nil, {"traigan"}}
}},
{"ver", {"^ver$", "^antever$", "^entrever$", "^prever$", "^rever$"}, {
nucleo = "v",
part = {"visto"},
ind_pres = {{"veo"}},
subj_pres = {nucleo = "ve"},
imper = {nil, nil, {"vea"}, nil, nil, {"vean"}}
}},
{"yacer", {"^yacer$", "^subyacer$"}, { -- REVISAR: existe esto?
nucleo = "yac",
nexo = "", -- evitar C (epéntesis con zc), lo voy a agregar manual
ind_pres = {{"yazco", "yazgo", "yago"}},
subj_pres = {nucleo = {"yazc", "yazg", "yag"}},
imper = {nil, {"yace", "yaz"}, {"yazca", "yazga", "yaga"}, nil, nil, {"yazcan", "yazgan", "yagan"}}
}},
{"mover", {"mover$"}, {
alt = {"ue"},
}},
{"entender", {"entender$"}, {
alt = {"ie"},
}},
},
["ir"] = {
{"asir", {"asir$"}, { -- REVISAR: existe esto
nucleo = "as",
ind_pres = {{"asgo"}},
subj_pres = {nucleo = "asg"},
imper = {nil, nil, {"asga"}, {"asgamos"}, nil, {"asgan"}}
}},
{"abrir", {"[^js]abrir$", "^abrir$"}, { -- abrir, cubrir y derivados, pero no "desabrir" ni "jabrir" (son regs.)
nucleo = "abr",
part = {"abiertu"}
}},
{"abrir", {"ubrir$"}, { -- Parte 2. NOTA: no pueto tomar "br" como núcleo porque el programa piensa que es monosílabo y pone mal las tildes (cf. [[entreabrir]], [[reabrir]])
nucleo = "ubr",
part = {"ubiertu"}
}},
-- para decir contemplo 4 casos:
-- 1. decir, redecir, entredecir, antedecir: lo normal, con el imperativo en "dí" (di)
-- 2. interdecir: similar a 1. pero el imperativo es interdice (no *interdí) --> esto no existe en ast creo
-- 3. bendecir, maldecir: agrego bendito, maldito al pp
-- 4. condecir, contradecir, desdecir, predecir: parto de 1 pero agrego el futuro regular que esta aceptado
{"dicir", {"^dicir$", "^redicir$", "^entredicir$", "^antedicir$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"dichu"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
ind_fut = {nucleo = "d", nexo=""},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
cond = {nucleo = "d", nexo=""},
imper = {nil, {"di"}, {"diga"}, nil, nil, {"digan"}}
}},
{"bendicir", {"bendicir$", "maldicir$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"decíu{PART}", "ditu{ADJ}"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
imper = {nil, {"diz"}, {"diga"}, nil, nil, {"digan"}}
}},
{"predicir", {"dicir$"}, {
nucleo = "de",
nexo = "S", -- para evitar C (epéntesis con zc)
alt = {"i-i"},
part = {"dichu"},
ind_pres = {{"digo"}},
ind_perf = {nucleo = "di", nexo = "#j#"},
ind_fut = {nucleo = {"dec", "d"}, nexo=""},
subj_pres = {nexo = "#g#"},
subj_imp = {nexo = "#j#"},
cond = {nucleo = {"dec", "d"}, nexo=""},
imper = {nil, {"dí"}, {"diga"}, nil, nil, {"digan"}}
}},
{"erguir", {"^erguir$"}, {
nucleo = "er",
alt = {"ye-i", "i-i"},
}},
{"imprimir", {"imprimir$"}, {
nucleo = "imprim",
part = {"imprimíu{PART}", "impresu{ADJ}"}
}},
{"dir", {"^dir$"}, {
ind_pres = {{"voi", "vo"}, {"vas"}, {"va"}, {"vamos"}, {"vais"}, {"van"}},
ind_imp = {{"diba"}, {"dibas"}, {"diba"}, {"díbamos", "díbemos"}, {"dibais", "dibeis"}, {"diben"}},
ind_perf = {{"fui"}, {"fosti", "fuesti", "fuisti"}, {"foi", "fo"}, {"fomos", "fuemos", "fuimos"}, {"fuestis", "fuistis"}, {"foron", "fueron"}},
subj_pres = {{"fora", "vaiga", "vaya"}, {"vaigas", "vayas"}, {"fora", "vaiga", "vaya"}, {"vaigamos", "vayamos"}, {"vaigáis", "vayáis"}, {"vaigan", "vayan"}},
subj_imp = {nucleo = "", nexo = "#fu#"}, -- no puedo poner "u" porque obtendría "fuyera" -- REVISAR: faltan los otros nexos posibles
imper = {nil, {"ve"}, {"vaya"}, nil, nil, {"vayan"}}
}},
{"pudrir", {"pudrir$"}, { -- REVISAR: existe esto?
nucleo = "pudr",
part = {"podridu"}
}},
{"salir", {"salir$"}, {
nucleo = "sal",
ind_pres = {{"salgo"}},
ind_fut = {nucleo = "sal", nexo = "#dr#"},
subj_pres = {nucleo = "salg"},
cond = {nucleo = "sal", nexo = "#dr#"},
imper = {nil, {"sal"}, {"salga"}, nil, nil, {"salgan"}}
}},
{"escribir", {"scribir$"}, {
nucleo = "scrib",
part = {"scrito"}
}},
{"valir", {"valir$"}, {
nucleo = "val",
ind_pres = {{"valgo"}},
ind_fut = {nucleo = "val", nexo = "#dr#"},
subj_pres = {nucleo = "valg"},
cond = {nucleo = "val", nexo = "#dr#"},
imper = {nil, nil, {"valga"}, nil, nil, {"valgan"}}
}},
{"venir", {"venir$"}, {
nucleo = "ven",
alt = {"ie-i"},
ind_pres = {{"vengo"}},
ind_fut = {nexo = "#dr#"},
ind_perf = {nucleo = "vin"}, -- REVISAR: la 3s es él vIEno, no *vino, hay más verbos así?
subj_pres = {nucleo = "veng"},
cond = {nexo = "#dr#"},
imper = {nil, {"ven"}, {"venga"}, nil, nil, {"vengan"}}
}},
{"sentir", {"sentir$"}, { -- discernir entra en este paradigma tmb.
alt = {"ie-i"}
}},
{"podrir", {"podrir$"}, {
alt = {"u-u"},
}},
{"reunir", {"reunir$"}, {
alt = {"ú"}
}},
{"prohibir", {"prohibir$"}, {
alt = {"í"}
}},
{"rehenchir", {"rehenchir$"}, {
alt = {"í-i"}
}},
{"dormir", {"dormir$"}, {
alt = {"ue-u"}
}},
},
["ír"] = {
{"desvaír", {"desvaír$"}, { -- hay más verbos en -air? no podemos considerarlo como regla general
ind_pres = {{"desvayo"}},
subj_pres = {nucleo = "desvay"},
imper = {nil, nil, nil, {"desvaya"}, {"desvayamos"}, nil, {"desvayan"}}
}},
{"freír", {"freír$"}, {
nucleo = "fre",
part = {"frito{PART/ADJ}", "freído{PART}"},
}},
{"oír", {"oír$"}, {
nucleo = "o",
alt = {"oy"},
ger = {"oyendo"},
ind_pres = {{"oigo"}},
subj_pres = {nucleo = "oig"},
imper = {nil, nil, nil, {"oiga"}, {"oigamos"}, nil, {"oigan"}}
}},
},
}
local alt_info = {
["ar"] = {
["í"] = {"aislar", "i", "í"}, -- tb. descafeinar
["ú"] = {"aunar", "u", "ú"}, -- tb. rehusar
["ie"] = {"pensar", "e", "ie"},
["ue"] = {"contar", "ou", "ue"}, -- también jugar
["üe"] = {"agorar", "o", "üe"},
["hue"] = {"desosar", "ou", "hue"},
["ye"] = {"errar", "e", "ye"},
},
["er"] = {
["i"] = {"???", "e", "i"}, -- REVISAR: existe esto??
["ie"] = {"entender", "e", "ie"},
["ue"] = {"mover", "o", "ue"},
["üe"] = {"goler", "o", "üe"},
},
["ir"] = {
["i"] = {"???", "e", "i"}, -- REVISAR: existe esto??
["í"] = {"prohibir", "i", "í"},
["í-i"] = {"rehenchir", "e", "í", "i"},
-- ["i-i"] = {"pedir", "e", "i", "i"},
--["ie"] = {"discernir", "ei", "ie"}, -- por las dudas también la i, por inquirir
["ie-i"] = {"sentir", "ei", "ie", "i"}, -- inquirir
["u"] = {"???", "o", "u", "u"},
["ú"] = {"reunir", "u", "ú"},
["u-u"] = {"podrir", "o", "u", "u"}, -- REVISAR: existe esto??
["ue-u"] = {"dormir", "o", "ue", "u"},
["ye-i"] = {"erguir", "e", "ye", "i"},
},
["ír"] = {
["í-i"] = {"reír", "e", "í", "i"},
["oy"] = {"oír", "o", "oy", "oy"},
}
}
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijo_inf = conjinfo[forma].sufijo_inf or conjinfo.sufijo_inf
if sufijo_inf == "ar" and conjinfo[forma].nucleo then
sufijo_inf = "er" -- echo mano a los sufijos de la otra conjugación, más que nada aplica a verbos como andar -> ANDUViera
end
local sufijos_ = obtener_sufijos(sufijo_inf, (forma == "ind_perf" and conjinfo[forma].nucleo) and forma.."_alt" or forma)
local nucleos
if not conjinfo[forma].nucleo then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleos2
elseif forma == "part" then
nucleos = conjinfo.nucleo_inf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos1}
elseif forma == "ind_perf" then
nucleos = {conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleo_inf, conjinfo.nucleos2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleos2, conjinfo.nucleos1}
elseif forma == "subj_imp" then
local n = conjinfo.nucleos2
nucleos = {n, n, n, n, n, n}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleos1, conjinfo.nucleos1, conjinfo.nucleos2, conjinfo.nucleo_inf, conjinfo.nucleos1}
else
local n = conjinfo.nucleo_inf
nucleos = {n, n, n, n, n, n}
end
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for j, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[1], sufijo_inf)
for _,nucleo in ipairs(nucleos) do
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(nucleo, nexosufijo2, conjinfo.nucleo_inf[1])))
end
end
end
return
end
for i = YO, ELLOS do
if conjinfo[forma][i] then
for j, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..tostr[i]], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local k = i
while sufijos_[k] do
for _, n in ipairs(nucleos[i]) do
local nexosufijo, nexosufijo2 = combinar_nexo_sufijo(nexo, sufijos_[k], sufijo_inf)
insert_if_not(conjugado[forma..tostr[i]], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo, conjinfo.nucleo_inf[1])))
if nexosufijo2 then
insert_if_not(conjugado[forma..tostr[i]], combinar_prefijo_nucleonexosufijo(prefijo, combinar_nucleo_nexosufijo(n, nexosufijo2, conjinfo.nucleo_inf[1])))
end
end
k = k + 6
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local arr = res[forma]
local t = {}
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["impersonal"] = {},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["indirecto"] = {tipo = "bool"},
["alt"] = {lista = true},
["nucleopres1"] = {lista = true},
["nucleopret3"] = {lista = true},
["núcleopres1"] = {alias_de = "nucleopres1"},
["núcleopret3"] = {alias_de = "nucleopret3"},
["paradigma"] = {lista = true},
["nota"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local adv, r1 = match(tit, "^([sSnN][íu]n?"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local v, pron, art, resto = match(r1, "^("..LETRA.."*[aeiáéí]r)(s?e?)(l?[aeo]?s?)(.-)$")
local resto_pl = args["plural"] and match(args["plural"], "^[sSnN]?[ío]?"..ESPACIO.."?"..LETRA.."*[aeiáéí]rs?e?l?[aeo]?s?(.-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
v = gsub(v, "^(%S*)ár$", "%1ar") -- pronominales
v = gsub(v, "^(%S*)ér$", "%1er") -- pronominales
v = gsub(v, "^(%S*[^aeo])ír$", "%1ir") -- grafías anticuadas
local sufijo_inf = match(v, "[aeií]r$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
for N = 1, math.max(1,
maxindex(args["paradigma"]),
maxindex(args["alt"]),
maxindex(args["nucleopres1"]),
maxindex(args["nucleopret3"])) do
local conjinfo = {}
if find(v, "iar$") and (not args["paradigma"][N] or args["paradigma"][N] == "") then
error("Especifique el (los) paradigma(s) para los verbos en -iar (añunciar, enfriar)")
end
local encontre_irreg = false
for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
conjinfo = deepcopy(p[3])
es_irregular = true
paradigmas_reconocidos[p[1]] = true
encontre_irreg = true
break
end
end
if encontre_irreg then
break
end
end
local encontre_reg = false
for _,p in ipairs(paradigmas_regulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
local vacio = true
for k, v in pairs(p[3]) do
vacio = false
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
if vacio then
paradigmas_reconocidos[p[1]] = true -- caso de [[anunciar]]
end
encontre_reg = true
break
end
end
if encontre_reg then
break
end
end
assert(encontre_reg, "paradigma no reconocido")
if conjinfo.nucleo then
conjinfo.nucleo_inf = conjinfo.nucleo
end
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo or sufijo_inf
if not conjinfo.nucleo_inf then
conjinfo.nucleo_inf = sub(v, 1, len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
conjinfo.prefijo = ""
elseif not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, len(v) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
if not conjinfo.prefijo then -- caso en el que cambié el núcleo
conjinfo.prefijo = ""
end
conjinfo.nucleos1 = {}
conjinfo.nucleos2 = {}
conjinfo.alt = conjinfo.alt or {}
if args["alt"][N] then
insert(conjinfo.alt, args["alt"][N])
end
for i, a in ipairs(conjinfo.alt) do
if a ~= "REG" then
local n1, n2
local info = alt_info[sufijo_inf][a]
assert(info, "Valor de alt no reconocido: "..a)
local sust
n1, sust = gsubb(conjinfo.nucleo_inf, "^([^"..info[2].."]*)["..info[2].."]([^"..info[2].."]*)$", "%1#"..info[3].."#%2")
if info[4] then
n2, sust = gsubb(conjinfo.nucleo_inf, "^([^"..info[2].."]*)["..info[2].."]([^"..info[2].."]*)$", "%1#"..info[4].."#%2")
end
assert(sust, "Alternancia vocálica no reconocida")
insert_if_not(conjinfo.nucleos1, n1)
insert_if_not(conjinfo.nucleos2, n2)
paradigmas_reconocidos[info[1]] = true
es_irregular = true -- si tengo el alt será siemrpe irregular, indistintamente de si el paradigma del mismo índice es regular
else
insert_if_not(conjinfo.nucleos1, conjinfo.nucleo_inf)
end
end
if args["nucleopres1"][N] then
for k, v in pairs(alt_info[sufijo_inf]) do
if args["nucleopret3"][N] then
if v[4] then
if gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[3]) == gsub1(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1")
and gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[4]) == gsub1(args["nucleopret3"][N], "^.*#([^#]+)#.*$", "%1")
then
es_irregular = true
paradigmas_reconocidos[v[1]] = true
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
insert_if_not(conjinfo.nucleos2, args["nucleopret3"][N])
break
end
end
else
if not v[4] then
if gsub1(conjinfo.nucleo_inf, "^.*["..v[2].."].-$", v[3]) == gsub1(args["nucleopres1"][N], "^.*#([^#]+)#.*$", "%1")
then
es_irregular = true
paradigmas_reconocidos[v[1]] = true
insert_if_not(conjinfo.nucleos1, args["nucleopres1"][N])
break
end
end
end
end
end
if not conjinfo.nucleos1[1] then
conjinfo.nucleos1[1] = conjinfo.nucleo_inf
end
if not conjinfo.nucleos2[1] then
conjinfo.nucleos2[1] = conjinfo.nucleo_inf
end
conjinfo.nucleo_inf = {conjinfo.nucleo_inf}
conjinfo.v = v
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante)
local part_no_adj = {}
for _,e in ipairs(resultante.part) do
if find(e, 'PART') or not find(e, 'ADJ') then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, resto=resto, resto_pl=resto_pl,impers=args["impersonal"]}
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for _,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for _,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local es_impersonal = args["impersonal"]
local es_indirecto = args["indirecto"]
if es_indirecto then
error("no implementado")
end
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, es_impersonal)
end)
local impers = args["impersonal"]
local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper
if impers == "3" then
if args["indirecto"] then
error("No implementado aún")
else
fila_pronombres_ind = {"", "(ello)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(ello)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que ello)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(ello)", color=COLOR_IMPER, header=true, class="pc"}
end
cs = 2
elseif impers == "36" then
fila_pronombres_ind = {"", "(ello)", "(ellos)", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "(ello)", "(ellos)", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "(que ello)", "(que ellos)", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(ello)", "(ellos)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_ind = {"", "yo", "tu", "él, vusté", "nosotros", "vosotros", "vustedes, ellos", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "yo", "tu", "él, vusté", "nosotros, nosotres, nós", "vosotros", "vustedes, ellos", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que yo", "que tu", "que él, vusté", "que nosotros", "que vosotros", "que vustedes, ellos", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tú)", "(vusté)", "(nosotros)", "(vosotros)", "(vustedes)", color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = math.floor(cs / 2)
cs2 = cs - cs1
local t = {}
t[1] = {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true}
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
else
resultante.inf.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.part.colspan = cs1-1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
end
t[5] = {{"Formas personales", colspan=cs}, color=COLOR_H, header=true}
t[6] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true}
t[7] = fila_pronombres_ind
t[8] = {{"Presente", color=COLOR_IND, header=true}, resultante.ind_pres1, resultante.ind_pres2, resultante.ind_pres3, resultante.ind_pres4, resultante.ind_pres5, resultante.ind_pres6}
t[9] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, resultante.ind_imp1, resultante.ind_imp2, resultante.ind_imp3, resultante.ind_imp4, resultante.ind_imp5, resultante.ind_imp6}
t[10] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, resultante.ind_perf1, resultante.ind_perf2, resultante.ind_perf3, resultante.ind_perf4, resultante.ind_perf5, resultante.ind_perf6}
t[11] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, resultante.ind_pluperf1, resultante.ind_pluperf2, resultante.ind_pluperf3, resultante.ind_pluperf4, resultante.ind_pluperf5, resultante.ind_pluperf6}
t[12] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, resultante.ind_perf_comp1, resultante.ind_perf_comp2, resultante.ind_perf_comp3, resultante.ind_perf_comp4, resultante.ind_perf_comp5, resultante.ind_perf_comp6}
t[13] = {{"Futuro", color=COLOR_IND, header=true}, resultante.ind_fut1, resultante.ind_fut2, resultante.ind_fut3, resultante.ind_fut4, resultante.ind_fut5, resultante.ind_fut6}
t[14] = {{"Futuro compuesto", color=COLOR_IND, header=true}, resultante.ind_fut_comp1, resultante.ind_fut_comp2, resultante.ind_fut_comp3, resultante.ind_fut_comp4, resultante.ind_fut_comp5, resultante.ind_fut_comp6}
t[15] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, resultante.ind_anter1, resultante.ind_anter2, resultante.ind_anter3, resultante.ind_anter4, resultante.ind_anter5, resultante.ind_anter6}
t[16] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true}
t[17] = fila_pronombres_cond
t[18] = {{"Condicional simple", color=COLOR_COND, header=true}, resultante.cond1, resultante.cond2, resultante.cond3, resultante.cond4, resultante.cond5, resultante.cond6}
t[19] = {{"Condicional compuesto", color=COLOR_COND, header=true}, resultante.cond_comp1, resultante.cond_comp2, resultante.cond_comp3, resultante.cond_comp4, resultante.cond_comp5, resultante.cond_comp6}
t[20] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true}
t[21] = fila_pronombres_subj
t[22] = {{"Presente", color=COLOR_SUBJ, header=true}, resultante.subj_pres1, resultante.subj_pres2, resultante.subj_pres3, resultante.subj_pres4, resultante.subj_pres5, resultante.subj_pres6}
t[23] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, resultante.subj_imp1, resultante.subj_imp2, resultante.subj_imp3, resultante.subj_imp4, resultante.subj_imp5, resultante.subj_imp6}
t[24] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, resultante.subj_perf1, resultante.subj_perf2, resultante.subj_perf3, resultante.subj_perf4, resultante.subj_perf5, resultante.subj_perf6}
t[25] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, resultante.subj_pluperf1, resultante.subj_pluperf2, resultante.subj_pluperf3, resultante.subj_pluperf4, resultante.subj_pluperf5, resultante.subj_pluperf6}
t[26] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true}
t[27] = fila_pronombres_imper
if mostrar_imper then
t[28] = {{"Presente", color=COLOR_IMPER, header=true}, resultante.imper}
else
t[29] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}}
end
t[30] = {{f("Leyenda: † arcaico, x no normativo, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}}
args["nota"] = args["nota"] or ""
if args["impersonal"] == "utc3" then
args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "umc3" then
args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "utc36" then
args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
if args["impersonal"] == "umc36" then
args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
t[31] = {{args["nota"] and args["nota"] or "", colspan=cs}}
local paradigmas_t = {}
local cats = {}
if es_irregular then
insert(cats, "AN:Verbos irregulares")
-- si es irregular, los paradigmas regulares que no aportan nada de información (los vacíos) no pueden estar
paradigmas_reconocidos["añunciar"] = nil
paradigmas_reconocidos["amar"] = nil
paradigmas_reconocidos["temer"] = nil
paradigmas_reconocidos["partir"] = nil
paradigmas_reconocidos["ír"] = nil
else
insert(cats, "AN:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "AN:Verbos del paradigma "..p)
end
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "AN:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "AN:Verbos terciopersonales")
end
if find(impers, "^ind") then
insert(cats, "AN:Verbos de objeto indirecto")
end
if defectivo then
insert(cats, "AN:Verbos defectivos")
end
if sufijo_inf == "ar" then
insert(cats, "AN:Verbos de la primera conjugación")
elseif sufijo_inf == "er" then
insert(cats, "AN:Verbos de la segunda conjugación")
else -- será ir o ír, ya fue chequeado antes
insert(cats, "AN:Verbos de la tercera conjugación")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")",
t,
ns == 0 and cats or {})
end
return export
sp1novlb4sb07yy6m8ksj91qqbixb32
Módulo:flex/fr
828
1056508
6117312
6076991
2026-06-06T16:45:59Z
TMCbot
164594
.
6117312
Scribunto
text/plain
-- Flexión de sustantivos, adjetivos y verbos en francés
-- Autor: Tmagc
local export = {}
local max = math.max
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local size = m_table.size
local m_str = require("Módulo:string")
local u = m_str.char
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local len = m_str.len
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local renderizar_tabla = m_flex.renderizar_tabla
local COLOR_H = m_flex.COLOR_H
local COLOR_NP = m_flex.COLOR_NP
local COLOR_IND = m_flex.COLOR_IND
local COLOR_COND = m_flex.COLOR_COND
local COLOR_SUBJ = m_flex.COLOR_SUBJ
local COLOR_IMPER = m_flex.COLOR_IMPER
local CFLEX = u(0x302)
local DIER = u(0x308)
local vocales = "aàâeéèêiîoôuûäëïöüÿæœAÀÂEÉÈÊIÎOÔUÛÄËÏÖÜŸÆŒ"
local consonantes_salvo_cglryx = "bdfhjkmnpqstvwzçBDFHJKMNPQSTVWZÇ"
local V = "[" .. vocales .. "]"
local C = "[" .. consonantes_salvo_cglryx .. "cglryxCGLRYX]"
local C_SALVO_Y = "[" .. consonantes_salvo_cglryx .. "cglrxCGLRX]"
local C_SALVO_CGY = "[" .. consonantes_salvo_cglryx .. "lrxLRX]"
local C_SALVO_YX = "[" .. consonantes_salvo_cglryx .. "cglrCGLR]"
local C_SALVO_LRYX = "[" .. consonantes_salvo_cglryx .. "cgCG]"
local espacios = "%s"
local espacios_o_guiones = "%-‐%s"
local ESPACIO = "["..espacios.."]"
local ESPACIO_O_GUION = "["..espacios_o_guiones.."]"
local LETRA = "[^"..espacios.."]"
local function es_locucion(tit, cop)
return find(tit, LETRA..ESPACIO_O_GUION..LETRA) or (cop ~= nil and find(tit, LETRA..ESPACIO_O_GUION..LETRA))
end
local function try(p, rx, pl, f, fpl, femenino)
local p2, sust = gsubb(p, rx, "~%0~")
if not sust then
return nil
end
if not pl then
return {m={p2}, p={}, f={}, fp={}}
end
if not femenino or not f then
if pl == sub(rx, 1, -2) then
return {m={p2}, p={}, f={}, fp={}}
else
return {m={p2}, p={gsub1(p, rx, "~"..pl.."~")}, f={}, fp={}}
end
end
return {m={p2}, p={gsub1(p, rx, "~"..pl.."~")}, f={gsub1(p, rx, "~"..f.."~")}, fp={gsub1(p, rx, "~"..fpl.."~")}}
end
-- https://fr.wiktionary.org/wiki/Annexe:Pluriels_irr%C3%A9guliers_en_fran%C3%A7ais
-- https://fr.wiktionary.org/wiki/Module:fr-flexion
-- https://dictionnaire.lerobert.com/guide/feminin-des-noms
-- https://www.alloprof.qc.ca/fr/eleves/bv/francais/le-pluriel-des-noms-f1489
-- https://web.unica.it/unica/protected/409843/0/def/ref/MAT407472/s
local function flexionar_palabra(p, g)
local femenino = g == "mf"
local changed = try(p, "ieur$", "ieurs", "ieure", "ieures", femenino) or
try(p, "teur$", "teurs", "trice", "trices", femenino) or
try(p, "ain$", "ains", "aine", "aines", femenino) or
try(p, "eau$", "eaux", "elle", "elles", femenino) or
try(p, "eux$", "eux", "euse", "euses", femenino) or
try(p, "eur$", "eurs", "euse", "euses", femenino) or -- CUIDADO: multiples excepciones
try(p, "oeu$", "oeux", "oeue", "oeues", femenino) or -- grafía no estándar, se repite abajo
try(p, "al$", "aux", "ale", "ales", femenino) or
try(p, "an$", "ans", "ane", "anes", femenino) or -- no duplico porque es más común la consonante simple
try(p, "el$", "els", "elle", "elles", femenino) or
try(p, "en$", "ens", "enne", "ennes", femenino) or
try(p, "er$", "ers", "ère", "ères", femenino) or
try(p, "et$", "ets", "ette", "ettes", femenino) or -- agregar excepciones
try(p, "gu$", "gus", "güe", "gües", femenino) or
try(p, "if$", "ifs", "ive", "ives", femenino) or
try(p, "on$", "ons", "onne", "onnes", femenino) or -- excepciones?
try(p, "[aeœ]u$", "%0x", "%0e", "%0es", femenino) or
try(p, "f$", "fs", "ve", "ves", femenino) or
try(p, "p$", "ps", "ve", "ves", femenino) or
try(p, "c$", "cs", "que", "ques", femenino) or -- REVISAR
try(p, "x$", "x", "se", "ses", femenino) or
try(p, "s$", "s", "se", "ses", femenino) or -- agregar excepciones que dupliquen la s, si las hay
try(p, "z$", "z", "ze", "zes", femenino) or
try(p, "e$", "es", nil, nil, femenino) or
try(p, LETRA.."$", "%0s", "%0e", "%0es", femenino)
assert(changed, "No se pudo determinar la flexión de la palabra")
return changed
end
local function flexion_sust_adj(palabras, g, copulativa)
local a, separador, b
if copulativa == true or copulativa == false then
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO_O_GUION..")("..LETRA.."+)$")
else
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
end
if b then
if copulativa == nil then
error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"")
end
local flex1 = flexionar_palabra(a, g)
local flex2 = copulativa and flexionar_palabra(b, g) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto
if copulativa == false then
p, resto = match(palabras, "^(%-?[^"..espacios_o_guiones.."]+)(.-)$")
else
p, resto = match(palabras, "^("..LETRA.."+)(.-)$")
end
local flex = flexionar_palabra(p, g)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
end
local cop -- = modo == "irreg" and false or args["cop"] falla...
if modo == "irreg" then
cop = false
else
cop = args["cop"]
end
local flex_ = flexion_sust_adj(title, modo, cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." regulares")
elseif es_locucion(title, args["cop"]) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["n"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
return formatear_sust_adj(frame, title, ns, args, es_locucion(title, args["cop"]) and "FR:Locuciones sustantivas" or "FR:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
args[1] = args[1] or "mf"
return formatear_sust_adj(frame, title, ns, args, es_locucion(title, args["cop"]) and "FR:Locuciones adjetivas" or "FR:Adjetivos")
end
local sufijos = {
{ -- er
["ger"] = {"ant"},
["part"] = {"é"},
["ind_pres"] = {"e", "es", "e", "ons", "ez", "ent"},
["ind_imp"] = {"ais", "ais", "ait", "ions", "iez", "aient"},
["ind_perf"] = {"ai", "as", "a", "âmes", "âtes", "èrent"},
["fut"] = {"erai", "eras", "era", "erons", "erez", "eront"},
["subj_pres"] = {"e", "es", "e", "ions", "iez", "ent"},
["subj_imp"] = {"asse", "asses", "ât", "assions", "assiez", "assent"},
["cond"] = {"erais", "erais", "erait", "erions", "eriez", "eraient"},
["imper"] = {nil, "e", nil, "ons", "ez", nil}
},
{ -- ir, re
["ger"] = {"ant"},
["part"] = {""},
["ind_pres"] = {"s", "s", "t", "ons", "ez", "ent"},
["ind_pres_alt"] = {"e", "es", "e", "ons", "ez", "ent"},
["ind_imp"] = {"ais", "ais", "ait", "ions", "iez", "aient"},
["ind_perf"] = {"s", "s", "t", CFLEX.."mes", CFLEX.."tes", "rent"},
["ind_perf_alt"] = {"ai", "as", "a", "âmes", "âtes", "èrent"},
["fut"] = {"ai", "as", "a", "ons", "ez", "ont"},
["subj_pres"] = {"e", "es", "e", "ions", "iez", "ent"},
["subj_imp"] = {"sse", "sses", CFLEX.."t", "ssions", "ssiez", "ssent"},
["subj_imp_alt"] = {"asse", "asses", "ât", "assions", "assiez", "assent"},
["cond"] = {"ais", "ais", "ait", "ions", "iez", "aient"},
["imper"] = {nil, "s", nil, "ons", "ez", nil},
["imper_alt"] = {nil, "e", nil, "ons", "ez", nil}
},
}
local nucleos = {
["er"] = {
},
["ër"] = {
},
["ir"] = {
nucleopres1 = {"-i"},
nucleopres2 = {"-iss"},
nucleopres3 = {"-iss"},
nucleosubj1 = {"-iss"},
nucleosubj2 = {"-iss"},
nucleoperf = {"-i"},
nucleofut = {"-ir"},
},
["ïr"] = {
nucleopres1 = {"-ï"},
nucleopres2 = {"-ïss"},
nucleopres3 = {"-ïss"},
nucleosubj1 = {"-ïss"},
nucleosubj2 = {"-ïss"},
nucleoperf = {"-ï"},
nucleofut = {"-ïr"}
},
["re"] = {
nucleoperf = {"-i"},
nucleofut = {"-r"},
},
}
local auxiliar = {
["avoir"] = {
["inf_comp"] = {"avoir"},
["ger_comp"] = {"en (ayant)"},
["ind_perf_comp"] = {"ai", "as", "a", "avons", "avez", "ont"},
["ind_pluperf"] = {"avais", "avais", "avait", "avions", "aviez", "avaient"},
["ind_anter"] = {"eus", "eus", "eut", "eûmes", "eûtes", "eurent"},
["fut_comp"] = {"aurai", "auras", "aura", "aurons", "aurez", "auront"},
["cond_comp"] = {"aurais", "aurais", "aurait", "aurions", "auriez", "auraient"},
["subj_perf"] = {"aie", "aies", "ait", "ayons", "ayez", "aient"},
["subj_pluperf"] = {"eusse", "eusses", "eût", "eussions", "eussiez", "eussent"},
},
["etre"] = {
["inf_comp"] = {"être"},
["ger_comp"] = {"en (étant)"},
["ind_perf_comp"] = {"suis", "es", "est", "sommes", "êtes", "sont"},
["ind_pluperf"] = {"étais", "étais", "était", "étions", "étiez", "étaient"},
["ind_anter"] = {"fus", "fus", "fut", "fûmes", "fûtes", "furent"},
["fut_comp"] = {"serai", "seras", "sera", "serons", "serez", "seront"},
["cond_comp"] = {"serais", "serais", "serait", "serions", "seriez", "seraient"},
["subj_perf"] = {"sois", "sois", "soit", "soyons", "soyez", "soient"},
["subj_pluperf"] = {"fusse", "fusses", "fût", "fussions", "fussiez", "fussent"},
}
}
local function obtener_sufijos(sufijo_inf, forma)
if sufijo_inf == "er" or sufijo_inf == "ër" then
return sufijos[1][forma]
else
return sufijos[2][forma]
end
end
local JE, TU, IL, NOUS, VOUS, ILLS = 1, 2, 3, 4, 5, 6
local tostr = {"1", "2", "3", "4", "5", "6"}
local PRONOMBRES = {"je/j'", "tu", "il, elle, on", "nous", "vous", "ils/elles"}
local PRONOMBRES_SUBJ = {"que je/j'", "que tu", "qu'il, qu'elle, qu'on", "que nous", "que vous", "qu'ils, qu'elles"}
local PRONOMBRES_IMP = {"―", "(tu)", "―", "(nous)", "(vous)", "―"}
local IMPERSONALES = {"", "", "", "il, elle", "", "", "ils, elles"}
local IMPERSONALES_SUBJ = {"", "", "", "qu'il, qu'elle", "", "", "qu'ils, qu'elles"}
local REFLEXIVOS_ANTEPUESTOS = {"me", "te", "se", "nous", "vous", "se"}
local REFLEXIVOS_ANTEPUESTOS_CONTRAIDOS = {"m'", "t'", "s'", "nous ", "vous ", "s'"}
local REFLEXIVOS_POSPUESTOS = {"-me", "-toi", "-se", "-nous", "-vous", "-se"}
local formas_no_personales = {
["inf"] = true,
["ger"] = true,
["part"] = true,
}
local formas_personales = {
["ind_pres"] = true,
["ind_imp"] = true,
["ind_perf"] = true,
["fut"] = true,
["subj_pres"] = true,
["subj_imp"] = true,
["cond"] = true,
["imper"] = true,
}
local formas_no_personales_compuestas = {
["inf_comp"] = true,
["ger_comp"] = true,
}
local formas_personales_compuestas = {
["ind_perf_comp"] = true,
["ind_pluperf"] = true,
["ind_anter"] = true,
["fut_comp"] = true,
["cond_comp"] = true,
["subj_perf"] = true,
["subj_pluperf"] = true,
}
local formas = merge(formas_no_personales, formas_personales)
local function obtener_pronombre(forma, impers)
local conj, p = match(forma, "^(.*)(%d)$")
if not p then
return nil
end
p = tonumber(p)
if impers then
if find(conj, "^subj") then
return IMPERSONALES_SUBJ[p]
end
return IMPERSONALES[p]
else
if find(conj, "^subj") then
return PRONOMBRES_SUBJ[p]
elseif find(conj, "^imper") then
return PRONOMBRES_IMP[p]
end
return PRONOMBRES[p]
end
end
-- NOTA: los siguientes verbos no forman paradigma aparte, ora porque solamente
-- presentan mutaciones fonéticas que no se escriben, ora porque pueden ser
-- representados como una combinación de paradigmas existentes:
--[[
fluorescer, escer$
pailler, iller$
rocouier, ouier$
abréyer, éyer$
planchéier, éier$
créer, éer$
simplifier, ier$
paranoïer, ïer$
tuer, uer$
argüer, üer$
--]]
local paradigmas_regulares1 = {
["er"] = {
{"modeler", {"eler$"}, { -- todos salvo appeler
alternar = "el",
}},
{"acheter", {"eter$"}, { -- todos salvo jeter
alternar = "et",
}},
{"beder", {"e"..C_SALVO_YX.."er$"}, {
alternar = "e"
}},
{"beder", {"e"..C_SALVO_LRYX.."[lr]er$"}, { -- [[sevrer]], pero no -ller, -rrer, -rler ([[perler]])
alternar = "e"
}},
{"espérer", {"é"..C_SALVO_Y.."*"..C_SALVO_CGY.."er$"}, {
alternar = "é"
}},
{"espérer", {"é[gq]uer$"}, { -- [[alléguer]], [[disséquer]]
alternar = "é",
}},
{"espérer", {"é[cgï]er$"}, { -- [[capéïer]], [[rapiécer]]
alternar = "é",
}},
{"aimer", {"cobayer$"}, { -- única excepción que no admite i
}},
{"payer", {"ayer$"}, { -- y o i
alternar = "ay",
}},
{"noyer", {"[ou]yer$"}, { -- solo i
alternar = "y",
}},
},
["ër"] = {
},
["ir"] = {
},
["ïr"] = {
},
["re"] = {
},
}
local paradigmas_regulares2 = {
["er"] = {
{"commencer", {"cer$"}, {
nexo = "c"
}},
{"changer", {"ger$"}, {
nexo = "g",
}},
{"aimer", {"er$"}, {
}},
},
["ër"] = {
{"arguër", {"uër$"}, {
nexo = "u",
}},
},
["ir"] = {
{"finir", {"ir$"}, {
}},
},
["ïr"] = {
{"amuïr", {"ïr$"}, {
}},
},
["re"] = {
{"vendre", {"re$"}, {
}},
},
}
local paradigmas_irregulares = {
["er"] = {
{"envoyer", {"envoyer$"}, {
nucleofut = {"enverr"},
}},
{"appeler", {"appeler$"}, {
alternar = "EL"
}},
{"jeter", {"jeter$"}, {
alternar = "ET"
}},
{"aller", {"aller$"}, {
sufijo_inf = "ir",
nucleopres1 = {"va"},
nucleopres2 = {"all"},
nucleoperf = {"all"},
nucleofut = {"ir"},
part = {"allé"},
nucleosubj1 = {"aill"},
nucleosubj2 = {"all"},
ind_pres = {nil, {"vas"}, {"va"}, nil, nil, {"vont"}},
imper = {nil, {"va"}},
ind_perf = {alt=true},
subj_imp = {alt=true}
}},
},
["ër"] = {
},
["ir"] = {
{"faillir", {"^faillir$"}, {
nucleopres1 = {"fau"},
nucleopres2 = {"faill"},
nucleopres3 = {"faill"},
nucleoperf = {"failli"},
nucleofut = {"faudr", "faillir"},
ind_pres = {{"faux"}, {"faux"}},
imper = {nil, {"faux"}}
}},
{"défaillir", {"faillir$"}, {
nucleo = "ill",
nucleopres1 = {"ill"},
nucleoperf = {"illi"},
nucleofut = {"illir"},
ind_pres = {alt=true},
imper = {alt=true}
}},
{"saillir", {"aillir$", "cueillir$"}, {
nucleo = "ill",
nucleopres1 = {"ill"},
nucleoperf = {"illi"},
nucleofut = {"illir", "iller"},
ind_pres = {alt=true},
imper = {alt=true}
}},
{"bouillir", {"ouillir$"}, {
nucleopres1 = {"ou"},
nucleopres2 = {"ouill"},
nucleopres3 = {"ouill"},
nucleoperf = {"ouilli"},
}},
{"dormir", {"dormir$"}, {
nucleopres1 = {"dor"},
nucleopres2 = {"dorm"},
nucleopres3 = {"dorm"},
nucleoperf = {"dormi"},
}},
{"dormir", {"partir$", "sortir$", "sentir$", "mentir$", "repentir$"}, {
nucleo = "t",
nucleopres1 = {""},
nucleopres2 = {"t"},
nucleopres3 = {"t"},
nucleoperf = {"ti"},
}},
{"dormir", {"servir$"}, {
nucleo = "v",
nucleopres1 = {""},
nucleopres2 = {"v"},
nucleopres3 = {"v"},
nucleoperf = {"vi"},
}},
{"vêtir", {"vêtir$"}, {
nucleopres1 = {"vêt"},
part = {"vêtu"}
}},
{"venir", {"enir$"}, {
nucleopres1 = {"ien"},
nucleopres2 = {"en"},
nucleopres3 = {"ienn"},
nucleoperf = {"in"},
nucleofut = {"iendr"},
part = {"enu"},
}},
{"férir", {"férir$"}, {
nucleo = false,
part = {"féru"}
}},
{"gésir", {"gésir$"}, {
nucleopres1 = {"gi"},
nucleopres2 = {"gis"},
nucleopres3 = {"gis"},
nucleoperf = {},
nucleofut = {},
nucleosubj1 = {},
nucleosubj2 = {}
}},
{"asseoir", {"asseoir$"}, {
nucleopres1 = {"assoi", "assied"},
nucleopres2 = {"assoy", "assey"},
nucleopres3 = {"assoi", "assey"},
nucleoperf = {"assi"},
nucleofut = {"assoir", "assiér"},
part = {"assis"},
impers = "36"
}},
{"surseoir", {"surseoir$"}, {
nucleopres1 = {"sursoi"},
nucleopres2 = {"sursoy"},
nucleopres3 = {"sursoi"},
nucleoperf = {"sursi"},
nucleofut = {"surseoir"},
part = {"sursis"},
impers = "36"
}},
{"seoir", {"seoir$", "soir$"}, { -- CUIDADO, -soir es una variante defectiva
nucleopres1 = {"sied"},
nucleopres2 = {"sey"},
nucleopres3 = {"sié"},
nucleoperf = {},
nucleofut = {"siér"},
impers = "36"
}},
{"échoir", {"^échoir$"}, {
nucleopres1 = {"échoi"},
nucleopres2 = {"échoy"},
nucleopres3 = {"échoi"},
nucleoperf = {"échu"},
nucleofut = {"échoir", "écherr"},
impers = "36"
}},
{"choir", {"choir$"}, {
nucleopres1 = {"choi"},
nucleopres2 = {"choy"},
nucleopres3 = {"choi"},
nucleoperf = {"chu"},
nucleofut = {"choir"},
ger = {"-"},
ind_imp = {{},{},{},{},{},{}},
subj_pres = {{},{},{},{},{},{}},
imper = {{},{},{},{},{},{}},
}},
{"prévaloir", {"prévaloir$"}, {
nucleopres1 = {"prévau"},
nucleopres2 = {"préval"},
nucleopres3 = {"préval"},
nucleoperf = {"prévalu"},
nucleofut = {"prévaudr"},
nucleosubj1 = {"préval"},
nucleosubj2 = {"préval"},
ind_pres = {{"prévaux"}, {"prévaux"}},
imper = {nil, {"prévaux"}}
}},
{"valoir", {"valoir$"}, {
nucleopres1 = {"vau"},
nucleopres2 = {"val"},
nucleopres3 = {"val"},
nucleoperf = {"valu"},
nucleofut = {"vaudr"},
nucleosubj1 = {"vaill"},
nucleosubj2 = {"val"},
ind_pres = {{"vaux"}, {"vaux"}},
imper = {nil, {"vaux"}}
}},
{"falloir", {"falloir$"}, {
nucleopres1 = {"fau"},
nucleopres2 = {"fall"},
nucleopres3 = {"fall"},
nucleoperf = {"fallu"},
nucleofut = {"faudr"},
nucleosubj1 = {"faill"},
impers = "3"
}},
{"vouloir", {"^vouloir$"}, {
nucleopres1 = {"veu"},
nucleopres2 = {"voul"},
nucleopres3 = {"veul"},
nucleoperf = {"voulu"},
nucleofut = {"voudr"},
nucleosubj1 = {"veuill"},
ind_pres = {{"veux"}, {"veux"}},
imper = {nil, {"veux", "veuille"}, nil, {"voulons", "veuillons"}, {"voulez", "veuillez"}}
}},
{"revouloir", {"ouloir$"}, {
nucleopres1 = {"eu"},
nucleopres2 = {"oul"},
nucleopres3 = {"eul"},
nucleoperf = {"oulu"},
nucleofut = {"oudr"},
nucleosubj1 = {"euill"},
ind_pres = {{"eux"}, {"eux"}},
imper = {nil, {"euille"}, nil, {"oulons"}, {"euillez"}}
}},
{"savoir", {"savoir$"}, {
nucleopres1 = {"sai"},
nucleopres2 = {"sav"},
nucleopres3 = {"sav"},
nucleoperf = {"su"},
nucleofut = {"saur"},
nucleosubj1 = {"sach"},
imper = {nil, {"sache"}, nil, {"sachons"}, {"sachez"}},
ger = {"sachant"}
}},
{"avoir", {"avoir$"}, {
nucleopres1 = {"a"},
nucleopres2 = {"av"},
nucleoperf = {"eu"},
nucleofut = {"aur"},
nucleosubj1 = {"ai"},
nucleosubj2 = {"ay"},
ger = {"ayant"},
ind_pres = {{"ai"}, {"as"}, {"a"}, nil, nil, {"ont"}},
subj_pres = {nil, nil, {"ait"}, {"ayons"}, {"ayez"}},
imper = {nil, {"aie"}, nil, {"ayons"}, {"ayez"}}
}},
--{"ramentevoir", {"ramentevoir$"}, {
--}},
{"recevoir", {"cevoir$"}, {
nucleopres1 = {"çoi"},
nucleopres2 = {"cev"},
nucleopres3 = {"çoiv"},
nucleoperf = {"çu"},
nucleofut = {"cevr"}
}},
{"devoir", {"^devoir$"}, {
nucleopres1 = {"doi"},
nucleopres2 = {"dev"},
nucleopres3 = {"doiv"},
nucleoperf = {"dû"},
}},
{"redevoir", {"devoir$"}, {
nucleopres1 = {"doi"},
nucleopres2 = {"dev"},
nucleopres3 = {"doiv"},
nucleoperf = {"du"},
}},
{"pleuvoir", {"pleuvoir$"}, {
nucleopres1 = {"pleu"},
nucleopres2 = {"pleuv"},
nucleopres3 = {"pleuv"},
nucleoperf = {"plu"},
nucleofut = {"pleuvr"},
}},
{"mouvoir", {"^mouvoir$"}, {
nucleopres1 = {"meu"},
nucleopres2 = {"mouv"},
nucleopres3 = {"meuv"},
nucleoperf = {"mu"},
part = {"mû"},
nucleofut = {"mouvr"}
}},
{"promouvoir", {"mouvoir$"}, {
nucleopres1 = {"meu"},
nucleopres2 = {"mouv"},
nucleopres3 = {"meuv"},
nucleoperf = {"mu"},
nucleofut = {"mouvr"}
}},
{"pourvoir", {"pourvoir$"}, {
nucleopres1 = {"pourvoi"},
nucleopres2 = {"pourvoy"},
nucleopres3 = {"pourvoi"},
nucleoperf = {"puorvu"},
}},
{"pouvoir", {"pouvoir$"}, {
nucleopres1 = {"peu"},
nucleopres2 = {"pouv"},
nucleopres3 = {"peuv"},
nucleoperf = {"pu"},
nucleofut = {"pourr"},
nucleosubj1 = {"puiss"},
ind_pres = {{"peux", "puis"}, {"peux"}},
imper = {{},{},{},{},{},{}},
}},
{"voir", {"voir$"}, {
nucleopres1 = {"voi"},
nucleopres2 = {"voy"},
nucleopres3 = {"voi"},
nucleoperf = {"vi"},
nucleofut = {"verr"},
part = {"vu"},
}},
{"quérir", {"quérir$"}, {
nucleopres1 = {"quier"},
nucleopres2 = {"quér"},
nucleopres3 = {"quièr"},
nucleoperf = {"qui"},
nucleofut = {"querr"},
part = {"quis"}
}},
{"courir", {"courir$"}, {
nucleopres1 = {"cour"},
nucleopres2 = {"cour"},
nucleopres3 = {"cour"},
nucleoperf = {"couru"},
nucleofut = {"courr"},
}},
{"mourir", {"mourir$"}, {
nucleopres1 = {"meur"},
nucleopres2 = {"mour"},
nucleopres3 = {"meur"},
nucleoperf = {"mouru"},
nucleofut = {"mourr"},
part = {"mort"}
}},
{"ouvrir", {"ouvrir$", "ffrir$"}, {
nucleo = "r",
nucleopres1 = {"r"},
nucleoperf = {"ri"},
part = {"ert"},
ind_pres = {alt=true},
imper = {alt=true}
}},
{"issir", {"^issir$"}, {
nucleopres1 = {"is"},
nucleopres2 = {"iss"},
nucleopres3 = {"iss"},
part = {"issu"},
impers = "36"
}},
{"fuir", {"fuir$"}, {
nucleopres1 = {"fui"},
nucleopres2 = {"fuy"},
nucleopres3 = {"fui"},
nucleoperf = {"fui"},
}},
},
["ïr"] = {
{"haïr", {"haïr$"}, {
nucleopres1 = {"-i"},
nucleopres2 = {"-ïss"}, -- necesito volver a poner los valores por defecto para que no propague nucleopres1
nucleopres3 = {"-ïss"},
nucleosubj1 = {"-ïss"},
nucleosubj2 = {"-ïss"},
}},
{"ouïr", {"ouïr$"}, {
nucleopres1 = {"ouï", "oi"},
nucleopres2 = {"ouïss", "oy"},
nucleopres3 = {"ouïss", "oi"},
nucleoperf = {"ouï"},
nucleofut = {"ouïr", "oir", "orr"}
}},
},
["re"] = {
{"vaincre", {"cre$"}, {
nucleo = "c",
nucleopres1 = {"c"},
nucleopres2 = {"qu"},
nucleopres3 = {"qu"},
nucleoperf = {"qui"},
part = {"cu"},
}},
{"prendre", {"prendre$"}, {
nucleopres1 = {"prend"},
nucleopres2 = {"pren"},
nucleopres3 = {"prenn"},
nucleoperf = {"pri"},
part = {"pris"},
}},
{"peindre", {"indre$"}, {
nucleopres1 = {"in"},
nucleopres2 = {"ign"},
nucleopres3 = {"ign"},
nucleoperf = {"igni"},
part = {"int"}
}},
{"coudre", {"coudre$"}, {
nucleopres1 = {"coud"},
nucleopres2 = {"cous"},
nucleopres3 = {"cous"},
nucleoperf = {"cousi"},
part = {"cousu"},
}},
{"moudre", {"moudre$"}, {
nucleopres1 = {"moud"},
nucleopres2 = {"moul"},
nucleopres3 = {"moul"},
nucleoperf = {"moulu"},
}},
{"résoudre", {"résoudre$"}, {
nucleopres1 = {"résou"},
nucleopres2 = {"résolv"},
nucleopres3 = {"résolv"},
nucleoperf = {"résolu"},
}},
{"absoudre", {"soudre$"}, {
nucleopres1 = {"sou"},
nucleopres2 = {"solv"},
nucleopres3 = {"solv"},
nucleoperf = {"solu"},
part = {"sous"}
}},
{"faire", {"faire$"}, {
nucleopres1 = {"fai"},
nucleopres2 = {"fais"},
nucleopres3 = {"fais"},
nucleoperf = {"fi"},
nucleofut = {"fer"},
part = {"fait"},
nucleosubj1 = {"fass"},
ind_pres = {nil, nil, nil, nil, {"faites"}, {"font"}},
imper = {nil, nil, nil, nil, {"faites"}}
}},
{"plaire", {"plaire$"}, {
nucleopres1 = {"plai"},
nucleopres2 = {"plais"},
nucleopres3 = {"plais"},
nucleoperf = {"plu"},
}},
{"distraire", {"raire$"}, {
nucleopres1 = {"rai"},
nucleopres2 = {"ray"},
nucleopres3 = {"rai"},
nucleoperf = {"ray"},
part = {"rait"},
ind_perf = {alt=true},
subj_imp = {alt=true}
}},
{"taire", {"taire$"}, {
nucleopres1 = {"tai"},
nucleopres2 = {"tais"},
nucleopres3 = {"tais"},
nucleoperf = {"tu"},
}},
{"circoncire", {"circoncire$"}, {
nucleopres1 = {"circonci"},
nucleopres2 = {"circoncis"},
nucleopres3 = {"circoncis"},
nucleoperf = {"circonci"},
part = {"circoncis"}
}},
{"dire", {"^dire$", "^redire$"}, {
nucleo = "di",
nucleopres1 = {"di"},
nucleopres2 = {"dis"},
nucleopres3 = {"dis"},
nucleoperf = {"di"},
part = {"dit"},
ind_pres = {nil, nil, nil, nil, {"dites"}},
imper = {nil, nil, nil, nil, {"dites"}},
}},
{"maudire", {"dire$"}, {
nucleopres1 = {"di"},
nucleopres2 = {"dis"},
nucleopres3 = {"dis"},
nucleoperf = {"di"},
part = {"dit"}
}},
{"suffire", {"suffire$"}, {
nucleopres1 = {"suffi"},
nucleopres2 = {"suffis"},
nucleopres3 = {"suffis"},
nucleoperf = {"suffi"},
}},
{"confire", {"confire$"}, {
nucleopres1 = {"confi"},
nucleopres2 = {"confis"},
nucleopres3 = {"confis"},
nucleoperf = {"confi"},
part = {"confit"}
}},
{"lire", {"lire$"}, {
nucleopres1 = {"li"},
nucleopres2 = {"lis"},
nucleopres3 = {"lis"},
nucleoperf = {"lu"},
}},
{"luire", {"luire$"}, {
nucleopres1 = {"lui"},
nucleopres2 = {"luis"},
nucleopres3 = {"luis"},
nucleoperf = {"lui", "luisi"},
part = {"lui"}
}},
{"boire", {"boire$"}, {
nucleopres1 = {"boi"},
nucleopres2 = {"buv"},
nucleopres3 = {"boiv"},
nucleoperf = {"bu"},
}},
{"croire", {"croire$"}, {
nucleopres1 = {"croi"},
nucleopres2 = {"croy"},
nucleopres3 = {"croi"},
nucleoperf = {"cru"},
}},
{"écrire", {"crire$"}, {
nucleopres1 = {"cri"},
nucleopres2 = {"criv"},
nucleopres3 = {"criv"},
nucleoperf = {"crivi"},
part = {"crit"}
}},
{"frire", {"frire$"}, {
nucleopres1 = {"fri"},
nucleopres2 = {"fri"},
nucleopres3 = {"fri"},
nucleoperf = {"fri"},
part = {"frit"},
ind_imp = {{},{},{},{},{},{}},
ind_perf = {{},{},{},{},{},{}},
fut = {{},{},{},{},{},{}},
cond = {{},{},{},{},{},{}},
subj_pres = {{},{},{},{},{},{}},
subj_imp = {{},{},{},{},{},{}},
imper = {{},{},{},{},{},{}},
impers = "sg"
}},
{"rire", {"rire$"}, {
nucleopres1 = {"ri"},
nucleopres2 = {"ri"},
nucleopres3 = {"ri"},
nucleoperf = {"ri"},
}},
{"bruire", {"bruire$"}, {
nucleopres1 = {"bruis"},
nucleopres2 = {"bruiss"},
nucleopres3 = {"bruiss"},
nucleoperf = {"brui"},
impers = "36"
}},
{"nuire", {"nuire$"}, {
nucleopres1 = {"nui"},
nucleopres2 = {"nuis"},
nucleopres3 = {"nuis"},
nucleoperf = {"nuisi"},
part = {"nui"}
}},
{"cuire", {"uire$"}, {
nucleopres1 = {"ui"},
nucleopres2 = {"uis"},
nucleopres3 = {"uis"},
nucleoperf = {"uisi"},
part = {"uit"}
}},
{"clore", {"clore$"}, {
nucleopres1 = {"clo"},
nucleopres2 = {"clos"},
nucleopres3 = {"clos"},
nucleoperf = {},
part = {"clos"}
}},
{"rompre", {"pre$"}, {
nucleopres1 = {"p"},
nucleopres2 = {"p"},
nucleopres3 = {"p"},
nucleoperf = {"pi"},
part = {"pu"}
}},
{"être", {"^être$"}, {
nucleopres1 = {"e"},
nucleopres2 = {"ét"},
nucleoperf = {"fu"},
nucleofut = {"ser"},
part = {"été"},
nucleosubj1 = {"soi"},
nucleosubj2 = {"soy"},
ind_pres = {{"suis"}, {"es"}, {"est"}, {"sommes"}, {"êtes"}, {"sont"}},
subj_pres = {{"sois"}, {"sois"}, {"soit"}, {"soyons"}, {"soyez"}},
imper = {nil, {"sois"}, nil, {"soyons"}, {"soyez"}}
}},
{"naitre", {"^na[iî]tre$", "rena[iî]tre$"}, { -- no connaitre, va en el paradigma de abajo
nucleo = "nait",
nucleopres1 = {"nai"},
nucleopres2 = {"naiss"},
nucleopres3 = {"naiss"},
nucleoperf = {"naqui"},
part = {"né"},
}},
{"paitre", {"a[iî]tre$"}, { -- tb. repaitre, etc
nucleopres1 = {"ai"},
nucleopres2 = {"aiss"},
nucleopres3 = {"aiss"},
nucleoperf = {"u"},
}},
{"croitre", {"o[iî]tre$"}, {
nucleopres1 = {"oi"},
nucleopres2 = {"oiss"},
nucleopres3 = {"oiss"},
nucleoperf = {"u"},
}},
{"battre", {"battre$"}, {
nucleopres1 = {"bat"},
nucleopres2 = {"batt"},
nucleopres3 = {"batt"},
nucleoperf = {"batti"},
part = {"battu"}
}},
{"mettre", {"mettre$"}, {
nucleopres1 = {"met"},
nucleopres2 = {"mett"},
nucleopres3 = {"mett"},
nucleoperf = {"mi"},
part = {"mis"}
}},
{"foutre", {"foutre$"}, {
nucleopres1 = {"fou"},
nucleopres2 = {"fout"},
nucleoperf = {"fouti"},
part = {"foutu"}
}},
{"inclure", {"inclure$", "transclure$", "occlure$"}, {
nucleo = "clu",
nucleopres1 = {"clu"},
nucleopres2 = {"clu"},
nucleopres3 = {"clu"},
nucleoperf = {"clu"},
part = {"clus"}
}},
{"conclure", {"clure$"}, {
nucleopres1 = {"clu"},
nucleopres2 = {"clu"},
nucleopres3 = {"clu"},
nucleoperf = {"clu"},
}},
{"ensuivre", {"ensuivre$"}, {
nucleopres1 = {"sui"},
nucleopres2 = {"suiv"},
nucleopres3 = {"suiv"},
nucleoperf = {"suivi"},
impers = "36"
}},
{"suivre", {"suivre$"}, {
nucleopres1 = {"sui"},
nucleopres2 = {"suiv"},
nucleopres3 = {"suiv"},
nucleoperf = {"suivi"},
}},
{"vivre", {"vivre$"}, {
nucleopres1 = {"vi"},
nucleopres2 = {"viv"},
nucleopres3 = {"viv"},
nucleoperf = {"vécu"},
}},
},
}
local function combinar_nexo_sufijo(nexo, sufijo, sufijo_inf)
if not nexo then
return sufijo
end
if sufijo_inf == "er" then
if find(sufijo, "^[aouâ]") then
if nexo == "c" then
return "~ç~"..sufijo
end
if nexo == "g" then
return "~ge~"..sufijo
end
end
elseif sufijo_inf == "ër" then
if find(sufijo, "^[aouâéí]") then
if nexo == "u" then
return "~ü~"..sufijo
end
end
if find(sufijo, "^[ei]") then
if nexo == "u" then
return nexo.."~"..sub(sufijo, 1, 1)..DIER.."~"..sub(sufijo, 2)
end
end
end
return nexo..sufijo
end
local function combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma, alternar)
if not nucleo or not nexosufijo then
return nil
end
if alternar and (forma == "fut" or forma == "cond" or find(nexosufijo, "^.?e[ns]?t?$")) then
if alternar == "ay" then
return nucleo..nexosufijo, (gsub(nucleo, "ay$", "a~i~"))..nexosufijo
end
if alternar == "el" then
return (gsub(nucleo, "el$", "~è~l"))..nexosufijo, (gsub(nucleo, "el$", "e~ll~"))..nexosufijo
end
if alternar == "et" then
return (gsub(nucleo, "et$", "~è~t"))..nexosufijo, (gsub(nucleo, "et$", "e~tt~"))..nexosufijo
end
if alternar == "EL" then
return (gsub(nucleo, "el$", "e#ll#"))..nexosufijo
end
if alternar == "ET" then
return (gsub(nucleo, "et$", "e#tt#"))..nexosufijo
end
if alternar == "y" then
return (gsub(nucleo, "y$", "~i~"))..nexosufijo
end
if alternar == "é" then
if forma == "fut" or forma == "cond" then
return (gsub(nucleo, "é(.-)$", "~è~%1"))..nexosufijo, nucleo..nexosufijo
else
return (gsub(nucleo, "é(.-)$", "~è~%1"))..nexosufijo
end
end
if alternar == "e" then
return (gsub(nucleo, "e(.-)$", "~è~%1"))..nexosufijo
end
end
if find(nucleo, "[tdc][~#]?$") and nexosufijo == "t" then
return nucleo
end
if not find(nucleo, "[aiu][~#]?$") and find(nexosufijo, "^"..CFLEX) then
return nucleo..sub(nexosufijo, 2)
end
if find(nucleo, "[aiu][~#]$") and find(nexosufijo, "^"..CFLEX) then
return (gsub(nucleo, "([aiu])([~#])$", "%1"..CFLEX.."%2"))..sub(nexosufijo, 2)
end
return nucleo..nexosufijo
end
local function combinar_prefijo_nucleonexosufijo(prefijo, nucleonexosufijo)
if not prefijo or not nucleonexosufijo then
return nil
end
return prefijo..nucleonexosufijo
end
local function agregar_forma(conjugado, conjinfo, forma)
conjinfo[forma] = conjinfo[forma] or {}
local sufijos_ = obtener_sufijos(conjinfo.sufijo_inf, conjinfo[forma].alt and forma.."_alt" or forma)
local nucleos
if not conjinfo[forma].nucleo then
if forma == "inf" then
conjugado[forma] = {conjinfo.v}
return
elseif forma == "ger" then
nucleos = conjinfo.nucleopres2
elseif forma == "part" then
nucleos = conjinfo.nucleoperf
elseif forma == "ind_pres" then
nucleos = {conjinfo.nucleopres1, conjinfo.nucleopres1, conjinfo.nucleopres1, conjinfo.nucleopres2, conjinfo.nucleopres2, conjinfo.nucleopres3}
elseif forma == "ind_imp" then
nucleos = {conjinfo.nucleopres2, conjinfo.nucleopres2, conjinfo.nucleopres2, conjinfo.nucleopres2, conjinfo.nucleopres2, conjinfo.nucleopres2}
elseif forma == "subj_pres" then
nucleos = {conjinfo.nucleosubj1, conjinfo.nucleosubj1, conjinfo.nucleosubj1, conjinfo.nucleosubj2, conjinfo.nucleosubj2, conjinfo.nucleosubj1}
elseif forma == "imper" then
nucleos = {{}, conjinfo.nucleopres1, {}, conjinfo.nucleopres2, conjinfo.nucleopres2, {}}
elseif forma == "fut" then
nucleos = {conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut}
elseif forma == "cond" then
nucleos = {conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut, conjinfo.nucleofut}
elseif forma == "ind_perf" then
nucleos = {conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf}
elseif forma == "subj_imp" then
nucleos = {conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf, conjinfo.nucleoperf}
else
local n
if conjinfo.nucleo_inf then
n = {conjinfo.nucleo_inf}
else
n = {}
end
nucleos = {n, n, n, n, n, n}
end
else
local ns = type(conjinfo[forma].nucleo) ~= "table" and {conjinfo[forma].nucleo} or conjinfo[forma].nucleo
for i,_ in ipairs(ns) do
ns[i] = "#"..ns[i].."#"
end
nucleos = {ns, ns, ns, ns, ns, ns}
end
local nexo = conjinfo[forma].nexo or conjinfo.nexo
local prefijo = conjinfo.prefijo
if formas_no_personales[forma] then
if conjinfo[forma][1] then
for _, fm in ipairs(conjinfo[forma]) do
insert_if_not(conjugado[forma], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local nexosufijo = combinar_nexo_sufijo(nexo, sufijos_[1], conjinfo.sufijo_inf)
for _,nucleo in ipairs(nucleos) do
local nxs1, nxs2 = combinar_nucleo_nexosufijo(nucleo, nexosufijo, forma, conjinfo.alternar)
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, nxs1))
insert_if_not(conjugado[forma], combinar_prefijo_nucleonexosufijo(prefijo, nxs2))
end
end
return
end
for i = JE, ILLS do
local p = tostr[i]
if conjinfo[forma][i] then
for _, fm in ipairs(conjinfo[forma][i]) do
insert_if_not(conjugado[forma..p], "#"..combinar_prefijo_nucleonexosufijo(prefijo, fm).."#")
end
else
local k = i
while sufijos_[k] do
local nexosufijo = combinar_nexo_sufijo(nexo, sufijos_[k], conjinfo.sufijo_inf)
for _, n in ipairs(nucleos[i]) do
local nxs1, nxs2 = combinar_nucleo_nexosufijo(n, nexosufijo, forma, conjinfo.alternar)
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, nxs1))
insert_if_not(conjugado[forma..p], combinar_prefijo_nucleonexosufijo(prefijo, nxs2))
end
k = k + 6
end
end
end
end
local function formatear_conjugacion(res, fmtinfo, forma)
local adv = fmtinfo.adv
local pron = fmtinfo.pron
local art = fmtinfo.art
local resto = fmtinfo.resto
local resto_pl = fmtinfo.resto_pl
local etre = fmtinfo.etre
local arr = res[forma]
local t = {}
local es_no_personal = formas_no_personales[forma]
local tiempo, i = match(forma, "^(.*)(%d)$")
local j
if not i then
tiempo = forma
i = 1
j = 3
else
i = tonumber(i)
j = i
end
local rest_ = i < NOUS and resto or resto_pl
local rest_pl_ = resto_pl
local vaux = (etre or pron == "se" or pron == "s'") and "etre" or "avoir"
for _, v in ipairs(arr) do
local hs = auxiliar[vaux][tiempo]
local rest = rest_
local rest_pl = rest_pl_
if hs then
if vaux == "etre" and i >= NOUS then
v = gsub(v, "("..LETRA..")([~#]?)$", "%1s%2")
end
rest = " "..v..rest
rest_pl = " "..v..rest_pl
v = auxiliar[vaux][tiempo][i]
end
if tiempo == "imper" then -- lo único pospuesto es el imperativo
local vpronart = v
if pron == "se" or pron == "s'" then
vpronart = vpronart..REFLEXIVOS_POSPUESTOS[j]
end
if art and art ~= "" then
vpronart = vpronart.."-"..art
end
insert(t, adv..((pron or art) and f(vpronart) or f_links(vpronart))..f_links(rest))
else -- antepuesto
local pronartv = v
if art and art ~= "" then
pronartv = find(pronartv, "^[~#]?"..V) and (gsub(art, "^l.*$", "l'"))..pronartv or art.." "..pronartv
end
if pron == "se" or pron == "s'" then
pronartv = find(pronartv, "^[~#]?"..V) and REFLEXIVOS_ANTEPUESTOS_CONTRAIDOS[j]..pronartv or REFLEXIVOS_ANTEPUESTOS[j].." "..pronartv
end
insert(t, adv..((pron or art) and f(pronartv) or f_links(pronartv))..f_links(rest))
if es_no_personal and rest_pl ~= rest then
insert(t, adv..((pron or art) and f(pronartv) or f_links(pronartv))..f_links(rest_pl))
end
end
end
res[forma] = t
return
end
function export.v(frame)
local title_ = mw.title.getCurrentTitle()
local tit = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
["nucleopres1"] = {lista = true},
["núcleopres1"] = {alias_de = "nucleopres1"},
["nucleopres2"] = {lista = true},
["núcleopres2"] = {alias_de = "nucleopres2"},
["nucleopres3"] = {lista = true},
["núcleopres3"] = {alias_de = "nucleopres3"},
["nucleosubj1"] = {lista = true},
["núcleosubj1"] = {alias_de = "nucleosubj1"},
["nucleosubj2"] = {lista = true},
["núcleosubj2"] = {alias_de = "nucleosubj2"},
["nucleoperf"] = {lista = true},
["núcleoperf"] = {alias_de = "nucleoperf"},
["nucleofut"] = {lista = true},
["núcleofut"] = {alias_de = "nucleofut"},
["paradigma"] = {lista = true},
["impersonal"] = {},
["impers"] = {alias_de = "impersonal"},
["plural"] = {},
["etre"] = {tipo = "bool"},
["être"] = {alias_de = "etre"},
["nota"] = {},
}
local conjugado = {}
for forma,_ in pairs(formas_no_personales) do
params[forma] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma] = {}
end
for forma,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
params[forma..s] = {tipo=parsear_arreglo, por_defecto={}}
conjugado[forma..s] = {}
if i == 1 then
params[forma] = {alias_de=forma..s}
end
end
end
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local adv, r1 = match(tit, "^([o]?[uUnN][ieo]n?"..ESPACIO..")(.*)$")
adv = adv or ""
r1 = r1 or tit
local pron, art, v, resto = match(r1, "^(se)"..ESPACIO.."(l[ae]?s?'?)"..ESPACIO.."("..LETRA.."*[eëiïr][re])( .-)$") -- obligo a que haya un espacio después: si o sí es el sufijo del verbo
if not v then
local pron, art, v, resto = match(r1, "^(s')(l[ae]?s?'?)"..ESPACIO.."("..LETRA.."*[eëiïr][re])( .-)$")
end
if not v then
pron, v, resto = match(r1, "^(se)"..ESPACIO.."("..LETRA.."*[eëiïr][re])( .-)$")
end
if not v then
pron, v, resto = match(r1, "^(s')("..LETRA.."*[eëiïr][re])( .-)$")
end
if not v then
art, v, resto = match(r1, "^(l[ae]?s?'?)"..ESPACIO.."("..LETRA.."*[eëiïr][re])( .-)$")
end
if not v then
pron, art, v = match(r1, "^(se)"..ESPACIO.."(l[ae]?s?'?)"..ESPACIO.."("..LETRA.."*[eëiïr][re])$") -- sin resto: si o sí tiene que ser el final
end
if not v then
pron, art, v = match(r1, "^(s')(l[ae]?s?'?)"..ESPACIO.."("..LETRA.."*[eëiïr][re])$") -- sin resto: si o sí tiene que ser el final
end
if not v then
pron, v = match(r1, "^(se)"..ESPACIO.."("..LETRA.."*[eëiïr][re])$")
end
if not v then
pron, v = match(r1, "^(s')("..LETRA.."*[eëiïr][re])$")
end
if not v then
art, v = match(r1, "^(l[ae]?s?'?)"..ESPACIO.."("..LETRA.."*[eëiïr][re])$")
end
if not v then
v = match(r1, LETRA.."*[eëiïr][re]$")
end
if not resto then
resto = ""
end
local resto_pl = args["plural"] and match(args["plural"], "^s?e?"..ESPACIO.."?l?[ae]?s?'?"..ESPACIO.."?"..LETRA.."*[eëiïr][re]( .-)$") or resto
assert(v and v ~= "", "Forma canónica no reconocida")
local sufijo_inf = match(v, "[eëiïr][re]$")
assert(sufijo_inf)
local paradigmas_reconocidos = {}
local es_irregular
for N = 1, max(1,
maxindex(args["paradigma"]),
maxindex(args["nucleopres1"]),
maxindex(args["nucleopres2"]),
maxindex(args["nucleopres3"]),
maxindex(args["nucleosubj1"]),
maxindex(args["nucleosubj2"]),
maxindex(args["nucleoperf"]),
maxindex(args["nucleofut"])) do
local conjinfo = {}
local encontrado1 = false
local encontrado2 = false
for _,p in ipairs(paradigmas_irregulares[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
conjinfo = deepcopy(p[3])
conjinfo.rxx = match(v, rx)
es_irregular = true
paradigmas_reconocidos[p[1]] = true
encontrado1 = true
break
end
end
if encontrado1 then
break
end
end
encontrado1 = false
for _,p in ipairs(paradigmas_regulares1[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
if size(p[3]) == 0 then
paradigmas_reconocidos[p[1]] = true
end
for k, v in pairs(p[3]) do
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
encontrado1 = true
break
end
end
if encontrado1 then
break
end
end
for _,p in ipairs(paradigmas_regulares2[sufijo_inf]) do
for _,rx in ipairs(p[2]) do
if args["paradigma"][N] == p[1] or find(v, rx) then
if size(p[3]) == 0 and not encontrado1 then
paradigmas_reconocidos[p[1]] = true
end
for k, v in pairs(p[3]) do
if not conjinfo[k] then -- no puede sobreescribir la información del paradigma irregular
conjinfo[k] = v
paradigmas_reconocidos[p[1]] = true
end
end
encontrado2 = true
break
end
end
if encontrado2 then
break
end
end
assert(encontrado2, "paradigma no reconocido")
conjinfo.nucleo_inf = conjinfo.nucleo
conjinfo.nexo_inf = conjinfo.nexo or ""
conjinfo.sufijo_inf = conjinfo.sufijo_inf or sufijo_inf
if conjinfo.nucleo_inf == nil then -- puede ser false
if conjinfo.rxx then
conjinfo.nucleo_inf = sub(conjinfo.rxx, 1, len(conjinfo.rxx) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
else
conjinfo.nucleo_inf = sub(v, 1, len(v) - len(conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
end
if type(conjinfo.nucleo_inf) == "string" then
if not conjinfo.prefijo then
conjinfo.prefijo = sub(v, 1, len(v) - len(conjinfo.nucleo_inf..conjinfo.nexo_inf..conjinfo.sufijo_inf)) -- no busco regex porque pueden haberse cambiado
end
else
conjinfo.prefijo = ""
end
local sobreescrito = {}
local function parsear_nucleo(n, pd)
if conjinfo.nucleo_inf == false or conjinfo[n] == false then
conjinfo[n] = {}
return
end
local por_defecto
if pd and sobreescrito[pd] then
por_defecto = deepcopy(conjinfo[pd])
else
por_defecto = nucleos[conjinfo.sufijo_inf][n] and deepcopy(nucleos[conjinfo.sufijo_inf][n]) or {conjinfo.nucleo_inf}
end
for i, nucl in ipairs(por_defecto) do
if sub(nucl, 1, 1) == "-" then
nucl = conjinfo.nucleo_inf..sub(nucl, 2)
end
por_defecto[i] = nucl
end
if not conjinfo[n] then
if args[n][N] then
conjinfo[n] = {args[n][N]}
else
conjinfo[n] = por_defecto
end
end
for i, nucl in ipairs(conjinfo[n]) do
if sub(nucl, 1, 1) == "-" then
nucl = conjinfo.nucleo_inf..sub(nucl, 2)
end
if find(nucl, "#") then
sobreescrito[n] = true
end
if nucl ~= por_defecto[1] and not find(nucl, "#") then -- si por_defecto traía más núcleos, lo considero irregular
nucl = "#"..nucl.."#"
sobreescrito[n] = true
end
conjinfo[n][i] = nucl
end
end
parsear_nucleo("nucleopres1")
parsear_nucleo("nucleopres2", "nucleopres1")
parsear_nucleo("nucleopres3", "nucleopres2")
parsear_nucleo("nucleosubj1", "nucleopres3")
parsear_nucleo("nucleosubj2", "nucleopres2")
parsear_nucleo("nucleoperf")
parsear_nucleo("nucleofut")
if not conjinfo.part and sufijo_inf == "re" then
local pp = sobreescrito["nucleoperf"] and deepcopy(conjinfo.nucleoperf) or {conjinfo.nucleo_inf}
for i,p in ipairs(pp) do
p = gsub(p, "[~#]", "")
p = gsub(p, "u?$", "u", 1) -- para que no inserte dos úes
pp[i] = p
end
conjinfo.part = pp
end
conjinfo.v = v
args["impersonal"] = args["impersonal"] or conjinfo.impers
for forma,_ in pairs(formas) do
agregar_forma(conjugado, conjinfo, forma)
end
end
local resultante = sobreescribir_formas(conjugado, args)
local defectivo = comprobar_defectivo(resultante, {"^imper"}, tostr)
local part_no_adj = {}
for _,e in ipairs(conjugado.part) do
if (find(e, 'PART') or not find(e, 'ADJ')) and not find(e, "†") then
insert(part_no_adj, gsub1(e, '%b{}', ''))
end
end
local fmtinfo = {adv=adv, pron=pron, art=art, resto=resto, resto_pl=resto_pl, impers=args["impersonal"], etre=args["etre"]}
for form,_ in pairs(formas_no_personales) do
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_no_personales_compuestas) do
resultante[form] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form)
end
for form,_ in pairs(formas_personales) do
for i,s in ipairs(tostr) do
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
for form,_ in pairs(formas_personales_compuestas) do
for i,s in ipairs(tostr) do
resultante[form..s] = part_no_adj
formatear_conjugacion(resultante, fmtinfo, form..s)
end
end
local impers = args["impersonal"]
resultante = formatear_formas(resultante, function (x)
return obtener_pronombre(x, impers)
end)
local cs, cs1, cs2, fila_pronombres_ind, fila_pronombres_subj, fila_pronombres_cond, fila_pronombres_imper, mostrar_imper
if impers == "3" then
fila_pronombres_ind = {"", "il", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "il", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "qu'il", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(il)", color=COLOR_IMPER, header=true, class="pc"}
cs = 2
elseif impers == "36" then
fila_pronombres_ind = {"", "il, elle", "ils, elles", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "il, elle", "ils, elles", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "qu'il, qu'elle", "qu'ils, qu'elles", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "(il, elle)", "(ils, elles)", color=COLOR_IMPER, header=true, class="pc"}
cs = 3
else
fila_pronombres_ind = {"", "je/j'", "tu", "il, elle, on", "nous", "vous", "ils/elles", color=COLOR_IND, header=true, class="pc"}
fila_pronombres_cond = {"", "je/j'", "tu", "il, elle, on", "nous", "vous", "ils/elles", color=COLOR_COND, header=true, class="pc"}
fila_pronombres_subj = {"", "que je/j'", "que tu", "qu'il, qu'elle, qu'on", "que nous", "que vous", "qu'ils, qu'elles", color=COLOR_SUBJ, header=true, class="pc"}
fila_pronombres_imper = {"", "―", "(tu)", "―", "(nous)", "(vous)", "―", color=COLOR_IMPER, header=true, class="pc"}
cs = 7
mostrar_imper = true
end
cs1 = math.floor(cs / 2)
cs2 = cs - cs1
local t = {}
t[1] = {{"Formas no personales (verboides)", colspan=cs}, color=COLOR_H, header=true}
if impers == "3" then
resultante.inf[1] = resultante.inf[1]..", "..resultante.inf_comp[1]
resultante.ger[1] = resultante.ger[1]..", "..resultante.ger_comp[1]
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
else
resultante.inf.colspan = cs1-1
resultante.ger.colspan = cs1-1
resultante.part.colspan = cs1-1
resultante.inf_comp.colspan = cs2
resultante.ger_comp.colspan = cs2
t[2] = {{"Infinitivo", header=true, color=COLOR_NP}, resultante.inf, resultante.inf_comp}
t[3] = {{"Gerundio", header=true, color=COLOR_NP}, resultante.ger, resultante.ger_comp}
t[4] = {{"Participio", header=true, color=COLOR_NP}, resultante.part}
end
local function ic(tiempo)
if impers == "3" then
return resultante[tiempo.."3"]
elseif impers == "36" then
return resultante[tiempo.."3"], resultante[tiempo.."6"]
end
return resultante[tiempo.."1"], resultante[tiempo.."2"], resultante[tiempo.."3"], resultante[tiempo.."4"], resultante[tiempo.."5"], resultante[tiempo.."6"]
end
t[5] = {{"Formas personales", colspan=cs}, color=COLOR_H, header=true}
t[6] = {{"Modo indicativo", colspan=cs}, color=COLOR_IND, header=true}
t[7] = fila_pronombres_ind
t[8] = {{"Presente", color=COLOR_IND, header=true}, ic("ind_pres")}
t[9] = {{"Pretérito imperfecto", color=COLOR_IND, header=true}, ic("ind_imp")}
t[10] = {{"Pretérito perfecto", color=COLOR_IND, header=true}, ic("ind_perf")}
t[11] = {{"Pretérito pluscuamperfecto", color=COLOR_IND, header=true}, ic("ind_pluperf")}
t[12] = {{"Pretérito perfecto compuesto", color=COLOR_IND, header=true}, ic("ind_perf_comp")}
t[13] = {{"Futuro", color=COLOR_IND, header=true}, ic("fut")}
t[14] = {{"Futuro compuesto", color=COLOR_IND, header=true}, ic("fut_comp")}
t[15] = {{f("Pretérito anterior{†}"), color=COLOR_IND, header=true}, ic("ind_anter")}
t[16] = {{"Modo condicional", colspan=cs}, color=COLOR_COND, header=true}
t[17] = fila_pronombres_cond
t[18] = {{"Condicional simple", color=COLOR_COND, header=true}, ic("cond")}
t[19] = {{"Condicional compuesto", color=COLOR_COND, header=true}, ic("cond_comp")}
t[20] = {{"Modo subjuntivo", colspan=cs}, color=COLOR_SUBJ, header=true}
t[21] = fila_pronombres_subj
t[22] = {{"Presente", color=COLOR_SUBJ, header=true}, ic("subj_pres")}
t[23] = {{"Pretérito imperfecto", color=COLOR_SUBJ, header=true}, ic("subj_imp")}
t[24] = {{"Pretérito perfecto", color=COLOR_SUBJ, header=true}, ic("subj_perf")}
t[25] = {{"Pretérito pluscuamperfecto", color=COLOR_SUBJ, header=true}, ic("subj_pluperf")}
t[26] = {{"Modo imperativo", colspan=cs}, color=COLOR_IMPER, header=true}
t[27] = fila_pronombres_imper
if mostrar_imper then
t[28] = {{"Presente", color=COLOR_IMPER, header=true}, ic("imper")}
else
t[28] = {{"Como verbo "..(impers == "3" and "impersonal" or "terciopersonal")..", ''"..tit.."'' CARECE de imperativo", color=COLOR_IMPER, header=true, colspan=cs}}
end
t[29] = {{f("Leyenda: † arcaico, x no normativo, PART se usa más como participio, ADJ se usa más como adjetivo, ~■~ cambio ortográfico, #■# irregularidad"), colspan=cs}}
args["nota"] = args["nota"] or ""
if args["impersonal"] == "utc3" then
args["nota"] = args["nota"].." NOTA: se usa también como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "umc3" then
args["nota"] = args["nota"].." NOTA: se usa más como impersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular."
end
if args["impersonal"] == "utc36" then
args["nota"] = args["nota"].." NOTA: se usa también como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
if args["impersonal"] == "umc36" then
args["nota"] = args["nota"].." NOTA: se usa más como terciopersonal, en cuyo caso solo son válidas las conjugaciones de la tercera persona singular y plural."
end
t[30] = {{args["nota"] and args["nota"] or "", colspan=cs}}
local paradigmas_t = {}
local cats = {}
if es_irregular then
insert(cats, "FR:Verbos irregulares")
paradigmas_reconocidos["aimer"] = nil
paradigmas_reconocidos["arguër"] = nil
paradigmas_reconocidos["finir"] = nil
paradigmas_reconocidos["haïr"] = nil
paradigmas_reconocidos["vendre"] = nil
else
insert(cats, "FR:Verbos regulares")
end
for p, _ in pairs(paradigmas_reconocidos) do
insert(paradigmas_t, p)
insert(cats, "FR:Verbos del paradigma "..p)
end
impers = impers or ""
if impers == "3" or find(impers, "^u[tm]c3$") then
insert(cats, "FR:Verbos impersonales")
end
if impers == "36" or find(impers, "^u[tm]c36$") then
insert(cats, "FR:Verbos terciopersonales")
end
if defectivo then
insert(cats, "FR:Verbos defectivos")
end
if sufijo_inf == "er" or sufijo_inf == "ër" then
insert(cats, "FR:Verbos de la primera conjugación")
elseif sufijo_inf == "ir" or sufijo_inf == "ïr" then
insert(cats, "FR:Verbos de la segunda conjugación")
else
insert(cats, "FR:Verbos de la tercera conjugación")
end
return renderizar_tabla(
frame,
"'''Conjugación de ''"..tit.."'''''  paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")",
t,
ns == 0 and cats or {})
end
return export
eozglpgtgudzk3da6p3zeajnj5a1el8
Plantilla:fr.sust/doc
10
1056545
6117332
5843112
2026-06-06T17:17:53Z
TMCbot
164594
.
6117332
wikitext
text/x-wiki
{{subpágina documentación de plantilla}}
<!-- POR FAVOR, AÑADE LAS CATEGORÍAS AL FINAL DE ESTA PÁGINA. -->
<!-- Si te dispones a documentar una plantilla de mantenimiento, por favor considera adoptar el formato de [[Wikipedia:Documentación de plantillas de mantenimiento]]-->
== Uso ==
Esta es la nueva plantilla para flexionar '''sustantivos''' del francés. Reemplaza a todas las anteriores que se usaron.
TLDR: Generalmente, o bien no es necesario especificar nada, o bien es necesario invocarla con {{epc|fr.sust|mf}} en el primer parámetro si el sustantivo es masculino y femenino. Para la plantilla {{ep|fr.adj}}, este parámetro se activa por defecto para que genere ambas formas, mientras que el resto funciona igual a esta plantilla.
Los sustantivos se flexionan según el siguiente criterio:
{| class="wikitable"
! termina en !! plural !! femenino (si aplica) !! femenino plural (si aplica)
|-
| -ieur || -ieurs || -ieure || -ieures
|-
| -teur || -teurs || -trice || -trices
|-
| -ain || -ains || -aine || -aines
|-
| -eau || -eaux || -elle || -elles
|-
| -eux || -eux || -euse || -euses
|-
| -eur || -eurs || -euse || -euses
|-
| -oeu || -oeux || -oeue || -oeues
|-
| -al || -aux || -ale || -ales
|-
| -an || -ans || -ane || -anes
|-
| -el || -els || -elle || -elles
|-
| -en || -ens || -enne || -ennes
|-
| -er || -ers || -ère || -ères
|-
| -et || -ets || -ette || -ettes
|-
| -gu || -gus || -güe || -gües
|-
| -if || -ifs || -ive || -ives
|-
| -on || -ons || -onne || -onnes
|-
| -au, -eu, -œu || -%0x || -%0e || -%0es
|-
| -f || -fs || -ve || -ves
|-
| -p || -ps || -ve || -ves
|-
| -c || -cs || -que || -ques
|-
| -x, -s, -z || -%0 || -%0e || -%0es
|-
| -e || -es || inv || inv
|-
| resto || + s || + e || + es
|}
Los sustantivos que NO se ajusten a estas reglas deberán ser tratados como irregulares, especificando toda la flexión manualmente. '''PRESTE ATENCIÓN''' Muchas irregularidades están asociadas a la duplicación o no duplicación de las consonantes finales.
=== Otros casos ===
:* '''Sustantivos masculinos y femeninos''': Invóquese con el valor <code>mf</code> en el primer parámetro
:* '''Sustantivos y adjetivos invariantes, o solo en singular o plural''': En estos casos debe usarse el primer parámetro:
::* con {{epc|fr.sust|n}} o {{epc|fr.sust|ng}} (no género) se especifica "mf" pero se prohíbe explícitamente flexionar en género, muy útil en adjetivos excepcionales que terminan en -o o a veces en -e pero que no flexionan a -a.
::* con {{epc|fr.sust|inv}}, la palabra es invariante tanto en género como en número.
::* con {{epc|fr.sust|s}} o con {{epc|fr.sust|p}}, la palabra existe solo en singular o solo en plural.
::* con {{epc|fr.sust|irreg}}, la palabra flexiona de forma irregular (ver Sustantivos y adjetivos con femeninos o plurales irregulares).
:* '''Comparativos y superlativos''': Se puede especificar cada uno de los comparativos y superlativos con los parámetros de lista {{parámetro|comparativo}} y {{parámetro|superlativo}}. Ver ejemplo en [[bueno]].
:* '''Sustantivos y adjetivos con femeninos o plurales irregulares''': Las palabras que no se ajustan a las reglas deberán especificarse manualmente con los parámetros de lista {{parámetro|p}} (plural), {{parámetro|f}} (femenino), {{parámetro|fp}} (femenino plural), habiéndose invocado con el valor "irreg" en el primer parámetro. Por defecto, el segundo, tercer y cuarto parámetro posicional de la plantilla están asociados con {{parámetro|p1}}, {{parámetro|f1}}, {{parámetro|fp1}}. Ver ejemplos en [[líder]] o [[actor]].
:* '''Notas al pie''': Se puede agregar una nota al pie con el parámetro {{parámetro|nota}}.
=== Parámetros ===
{| class="wikitable"
|+Parámetros
!Parámetro
!Función
!Tipo
!Valores posibles
|-
|{{parámetro|1}}
|Tipo de flexión en el sustantivo o adjetivo.
|Lista de valores
|ninguno (por defecto), mf (masculino y femenino), ng (sin marca de género), inv (invariante), s (singularia tantum), p (pluralia tantum), irreg (sufijo completamente irregular)
|-
|{{parámetro|2}}
|Alias para {{parámetro|p1}}
|
|
|-
|{{parámetro|3}}
|Alias para {{parámetro|f1}}
|
|
|-
|{{parámetro|4}}
|Alias para {{parámetro|fp1}}
|
|
|-
|{{parámetro|p}} ({{parámetro|p2}}, {{parámetro|p3}}, etc.)
|Plurales (masculinos) irregulares
|Libre
|especificar el plural
|-
|{{parámetro|f}} ({{parámetro|f2}}, {{parámetro|f3}}, etc.)
|Femeninos irregulares
|Libre
|especificar el femenino
|-
|{{parámetro|fp}} ({{parámetro|fp2}}, {{parámetro|fp3}}, etc.)
|Femeninos plurales irregulares
|Libre
|especificar el femenino en plural
|-
|{{parámetro|comp}} ({{parámetro|comp2}}, {{parámetro|comp3}}, etc.)
|Comparativo
|Libre
|especificar el comparativo
|-
|{{parámetro|sup}} ({{parámetro|sup2}}, {{parámetro|sup3}}, etc.)
|Superlativo
|Libre
|especificar el superlativo
|-
|{{parámetro|cop}}
|Si la estructura es copulativa; '''obligatorio especificarlo en las locuciones que tienen plural, si no lo tiene o es invariante especificarlo con el primer parámetro posicional'''. '''PRESTE ATENCIÓN''' Debido a la ambigüedad del uso del guion que existe en el francés, si una entrada tiene guion se procederá de la siguiente manera: si se especifica este mismo parámetro, ya sea verdadero o falso, se considera que el guion separa dos palabras, y se tratan como dos palabras distintas (locución). Si no se especifica nada, se considera que el guion separa un prefijo o una palabra compuesta, pero la plantilla la interpretará como una única palabra flexionando solo el final.
|booleano
|n (no), s (sí)
|-
|{{parámetro|nota}}
|Nota
|Libre
|especificar una nota al pie
|}
=== Categorías relacionadas ===
* [[:Categoría:FR:Plantillas de flexión]]
=== Véase también ===
* {{ep|fr.adj}}
* {{ep|fr.v}}
== Referencias ==
<references />
<includeonly><!--
++++ POR FAVOR, AÑADE LAS CATEGORÍAS DEBAJO DE ESTA LÍNEA, DENTRO DE LAS ETIQUETAS INCLUDEONLY, GRACIAS. -->
[[Categoría:FR:Plantillas de flexión]]
</includeonly>
6ld9zdst1rn0fnlf5ecyhp68v1vywxy
Plantilla:pt.sust/doc
10
1056547
6117336
5843108
2026-06-06T17:17:57Z
TMCbot
164594
.
6117336
wikitext
text/x-wiki
{{subpágina documentación de plantilla}}
<!-- POR FAVOR, AÑADE LAS CATEGORÍAS AL FINAL DE ESTA PÁGINA. -->
<!-- Si te dispones a documentar una plantilla de mantenimiento, por favor considera adoptar el formato de [[Wikipedia:Documentación de plantillas de mantenimiento]]-->
== Uso ==
Esta es la nueva plantilla para flexionar '''sustantivos''' del portugués. Reemplaza a todas las anteriores que se usaron.
TLDR: Generalmente, o bien no es necesario especificar nada, o bien es necesario invocarla con {{epc|pt.sust|mf}} en el primer parámetro si el sustantivo es masculino y femenino. Para la plantilla {{ep|pt.adj}}, este parámetro se activa por defecto para que genere ambas formas, mientras que el resto funciona igual a esta plantilla.
Los sustantivos se flexionan según el siguiente criterio, respetando la precedencia de las filas:
{| class="wikitable"
! termina en !! plural !! femenino (si aplica) !! femenino plural (si aplica)
|-
| -ão || -ões || -ona || -onas
|-
| -el (agudo) || -éis || ||
|-
| -il (agudo) || -is || ||
|-
| -el, -il (no agudo) || -eis || ||
|-
| -ol (agudo) || -óis || -ola || -olas
|-
| -ol (no agudo) || -ois || ||
|-
| -l || is || ||
|-
| -m || -ns || ||
|-
| -or || -ores || -ora || -oras
|-
| -r, -z || -es || ||
|-
| -eu || -eus || -eia || -eias
|-
| -u || -us || -ua || -uas
|-
| -o || -os || -a || -as
|-
| -VOCAL || +s || ||
|-
| -us, -is (agudo, después de consonante) || -es || -a || -as
|-
| -us, -is (no agudo o agudo después de vocal) || || ||
|-
| -s, -x || || ||
|-
| -ch || -ches || ||
|-
| -n || -nes || -na || -nas
|-
| -CONSONANTE || + s || ||
|}
Los sustantivos que NO se ajusten a estas reglas deberán ser tratados como irregulares, especificando toda la flexión manualmente. '''PRESTE ATENCIÓN''' Muchas irregularidades se dan con el sufijo -ão.
=== Otros casos ===
:* '''Sustantivos masculinos y femeninos''': Invóquese con el valor <code>mf</code> en el primer parámetro
:* '''Sustantivos y adjetivos invariantes, o solo en singular o plural''': En estos casos debe usarse el primer parámetro:
::* con {{epc|pt.sust|n}} o {{epc|pt.sust|ng}} (no género) se especifica "mf" pero se prohíbe explícitamente flexionar en género, muy útil en adjetivos excepcionales que terminan en -o o a veces en -e pero que no flexionan a -a.
::* con {{epc|pt.sust|inv}}, la palabra es invariante tanto en género como en número.
::* con {{epc|pt.sust|s}} o con {{epc|pt.sust|p}}, la palabra existe solo en singular o solo en plural.
::* con {{epc|pt.sust|irreg}}, la palabra flexiona de forma irregular (ver Sustantivos y adjetivos con femeninos o plurales irregulares).
:* '''Comparativos y superlativos''': Se puede especificar cada uno de los comparativos y superlativos con los parámetros de lista {{parámetro|comparativo}} y {{parámetro|superlativo}}. Ver ejemplo en [[bueno]].
:* '''Sustantivos y adjetivos con femeninos o plurales irregulares''': Las palabras que no se ajustan a las reglas deberán especificarse manualmente con los parámetros de lista {{parámetro|p}} (plural), {{parámetro|f}} (femenino), {{parámetro|fp}} (femenino plural), habiéndose invocado con el valor "irreg" en el primer parámetro. Por defecto, el segundo, tercer y cuarto parámetro posicional de la plantilla están asociados con {{parámetro|p1}}, {{parámetro|f1}}, {{parámetro|fp1}}. Ver ejemplos en [[líder]] o [[actor]].
:* '''Notas al pie''': Se puede agregar una nota al pie con el parámetro {{parámetro|nota}}.
=== Parámetros ===
{| class="wikitable"
|+Parámetros
!Parámetro
!Función
!Tipo
!Valores posibles
|-
|{{parámetro|1}}
|Tipo de flexión en el sustantivo o adjetivo.
|Lista de valores
|ninguno (por defecto), mf (masculino y femenino), ng (sin marca de género), inv (invariante), s (singularia tantum), p (pluralia tantum), irreg (sufijo completamente irregular)
|-
|{{parámetro|2}}
|Alias para {{parámetro|p1}}
|
|
|-
|{{parámetro|3}}
|Alias para {{parámetro|f1}}
|
|
|-
|{{parámetro|4}}
|Alias para {{parámetro|fp1}}
|
|
|-
|{{parámetro|p}} ({{parámetro|p2}}, {{parámetro|p3}}, etc.)
|Plurales (masculinos) irregulares
|Libre
|especificar el plural
|-
|{{parámetro|f}} ({{parámetro|f2}}, {{parámetro|f3}}, etc.)
|Femeninos irregulares
|Libre
|especificar el femenino
|-
|{{parámetro|fp}} ({{parámetro|fp2}}, {{parámetro|fp3}}, etc.)
|Femeninos plurales irregulares
|Libre
|especificar el femenino en plural
|-
|{{parámetro|comp}} ({{parámetro|comp2}}, {{parámetro|comp3}}, etc.)
|Comparativo
|Libre
|especificar el comparativo
|-
|{{parámetro|sup}} ({{parámetro|sup2}}, {{parámetro|sup3}}, etc.)
|Superlativo
|Libre
|especificar el superlativo
|-
|{{parámetro|cop}}
|Si la estructura es copulativa; '''obligatorio especificarlo en las locuciones que tienen plural, si no lo tiene o es invariante especificarlo con el primer parámetro posicional'''. '''PRESTE ATENCIÓN''' Debido a la ambigüedad del uso del guion que existe en el portugués, si una entrada tiene guion se procederá de la siguiente manera: si se especifica este mismo parámetro, ya sea verdadero o falso, se considera que el guion separa dos palabras, y se tratan como dos palabras distintas (locución). Si no se especifica nada, se considera que el guion separa un prefijo o una palabra compuesta, pero la plantilla la interpretará como una única palabra flexionando solo el final.
|booleano
|n (no), s (sí)
|-
|{{parámetro|nota}}
|Nota
|Libre
|especificar una nota al pie
|}
=== Categorías relacionadas ===
* [[:Categoría:PT:Plantillas de flexión]]
=== Véase también ===
* {{ep|pt.adj}}
* {{ep|pt.v}}
== Referencias ==
<references />
<includeonly><!--
++++ POR FAVOR, AÑADE LAS CATEGORÍAS DEBAJO DE ESTA LÍNEA, DENTRO DE LAS ETIQUETAS INCLUDEONLY, GRACIAS. -->
[[Categoría:PT:Plantillas de flexión]]
</includeonly>
mkh95nxovlq8ryqezebdxiel1eob0r8
Plantilla:it.sust/doc
10
1056607
6117334
5843396
2026-06-06T17:17:55Z
TMCbot
164594
.
6117334
wikitext
text/x-wiki
{{subpágina documentación de plantilla}}
<!-- POR FAVOR, AÑADE LAS CATEGORÍAS AL FINAL DE ESTA PÁGINA. -->
<!-- Si te dispones a documentar una plantilla de mantenimiento, por favor considera adoptar el formato de [[Wikipedia:Documentación de plantillas de mantenimiento]]-->
== Uso ==
Esta es la nueva plantilla para flexionar '''sustantivos''' del italiano. Reemplaza a todas las anteriores que se usaron.
TLDR: '''Obligatorio especificar el género del sustantivo en el primer parámetro'''. Puede ser masculino (m), femenino (f) o masculino y femenino (mf). Obviamente que las otras opciones (ng, inv, s, p, irreg) también son aceptables y dan suficiente información para construir la flexión "automáticamente". Para la plantilla {{ep|it.adj}}, se activa por defecto "mf" para que genere ambas formas, mientras que el resto funciona igual a esta plantilla. '''Se recomienda indicar la sílaba tónica con el parámetro <nowiki>|ayuda</nowiki> de lo contrario se asume que la palabra es llana'''.
Los sustantivos se flexionan según el siguiente criterio, respetando la precedencia de las filas:
{| class="wikitable"
! masculino !! plural !! femenino !! femenino plural
|-
| -ista || -isti || -ista || -iste
|-
| -ìo || -ii || -ia || -ie
|-
| -io || -i || -ia || -ie
|-
| -fugo || -fughi || -fuga || -fughe
|-
| -fago || -fagi || -faga || -fage
|-
| -ologo || -ologi || -ologa || -ologhe
|-
| -logo || -loghi || -loga || -loghe
|-
| -iaco || -iaci || -iaca || -iache
|-
| -ico || -ici || -ica || -iche
|-
| -co, -go (llana) || -chi, -ghi || -ca, -ga || -che, -ghe
|-
| -co, -go (esdrújula) || -ci, -gi || -ca, -ga || -che, -ghe
|-
| -ca, -ga || -chi, -ghi || -ca, -ga || -che, -ghe
|-
| -cìa, -gìa || -cie, -gie || -cia, -gia || -cie, -gie
|-
| -<VOCAL>cia, -<VOCAL>gia || -ci, -gi || -<VOCAL>cia, -<VOCAL>gia || -cie, -gie
|-
| -<CONSONANTE>cia, -<CONSONANTE>gia || -ci, -gi || -<CONSONANTE>cia, -<CONSONANTE>gia || -ce, -ge
|-
| -tore || -tori || -trice || -trici
|-
| -o || -i || -a || -e
|-
| -o || -i || -o || -e
|-
| -a || -i || -a || -e
|-
| -one || -oni || -ona || -one
|-
| -e || -i || -e || -i
|-
| resto || invariante || resto || invariante
|}
Los sustantivos que NO se ajusten a estas reglas deberán ser tratados como irregulares, especificando toda la flexión manualmente. '''PRESTE ATENCIÓN''' Muchas irregularidades están asociadas a la adición o eliminación de la h final, y está contemplado el parámetro <nowiki>|h</nowiki> como atajo. (ver [[amico]])
=== Otros casos ===
:* '''Sustantivos masculinos y femeninos''': Invóquese con el valor <code>mf</code> en el primer parámetro
:* '''Sustantivos y adjetivos invariantes, o solo en singular o plural''': En estos casos debe usarse el primer parámetro:
::* con {{epc|it.sust|n}} o {{epc|it.sust|ng}} (no género) se especifica "mf" pero se prohíbe explícitamente flexionar en género, muy útil en adjetivos con forma idéntica en femenino y masculino.
::* con {{epc|it.sust|inv}}, la palabra es invariante tanto en género como en número.
::* con {{epc|it.sust|s}} o con {{epc|it.sust|p}}, la palabra existe solo en singular o solo en plural.
::* con {{epc|it.sust|irreg}}, la palabra flexiona de forma irregular (ver Sustantivos y adjetivos con femeninos o plurales irregulares).
:* '''Comparativos y superlativos''': Se puede especificar cada uno de los comparativos y superlativos con los parámetros de lista {{parámetro|comparativo}} y {{parámetro|superlativo}}. Ver ejemplo en [[bueno]].
:* '''Sustantivos y adjetivos con femeninos o plurales irregulares''': Las palabras que no se ajustan a las reglas deberán especificarse manualmente con los parámetros de lista {{parámetro|p}} (plural), {{parámetro|f}} (femenino), {{parámetro|fp}} (femenino plural), habiéndose invocado con el valor "irreg" en el primer parámetro. Por defecto, el segundo, tercer y cuarto parámetro posicional de la plantilla están asociados con {{parámetro|p1}}, {{parámetro|f1}}, {{parámetro|fp1}}. Ver ejemplos en [[líder]] o [[actor]].
:* '''Notas al pie''': Se puede agregar una nota al pie con el parámetro {{parámetro|nota}}.
=== Parámetros ===
{| class="wikitable"
|+Parámetros
!Parámetro
!Función
!Tipo
!Valores posibles
|-
|{{parámetro|1}}
|Tipo de flexión en el sustantivo o adjetivo.
|Lista de valores
|m (masculino), f (femenino), mf (masculino y femenino), ng (sin marca de género), inv (invariante), s (singularia tantum), p (pluralia tantum), irreg (sufijo completamente irregular)
|-
|{{parámetro|2}}
|Alias para {{parámetro|p1}}
|
|
|-
|{{parámetro|3}}
|Alias para {{parámetro|f1}}
|
|
|-
|{{parámetro|4}}
|Alias para {{parámetro|fp1}}
|
|
|-
|{{parámetro|ayuda}}
|Grafía de la palabra con tildes.
|Libre
|Indica cuál es la sílaba tónica o si tiene diptongos o hiatos. Si no se especifica se asume acentuación llana.
|-
|{{parámetro|h}}
|Si se usan los plurales con h. Sirve para desactivar los plurales con h (especificando "falso"), es un atajo para no tener que escribir todas las flexiones manualmente.
|booleano
|n (no), s (sí, por defecto)
|-
|{{parámetro|p}} ({{parámetro|p2}}, {{parámetro|p3}}, etc.)
|Plurales (masculinos) irregulares
|Libre
|especificar el plural
|-
|{{parámetro|f}} ({{parámetro|f2}}, {{parámetro|f3}}, etc.)
|Femeninos irregulares
|Libre
|especificar el femenino
|-
|{{parámetro|fp}} ({{parámetro|fp2}}, {{parámetro|fp3}}, etc.)
|Femeninos plurales irregulares
|Libre
|especificar el femenino en plural
|-
|{{parámetro|comp}} ({{parámetro|comp2}}, {{parámetro|comp3}}, etc.)
|Comparativo
|Libre
|especificar el comparativo
|-
|{{parámetro|sup}} ({{parámetro|sup2}}, {{parámetro|sup3}}, etc.)
|Superlativo
|Libre
|especificar el superlativo
|-
|{{parámetro|cop}}
|Si la estructura es copulativa; '''obligatorio especificarlo en las locuciones que tienen plural, si no lo tiene o es invariante especificarlo con el primer parámetro posicional'''.
|booleano
|n (no), s (sí)
|-
|{{parámetro|nota}}
|Nota
|Libre
|especificar una nota al pie
|}
=== Categorías relacionadas ===
* [[:Categoría:IT:Plantillas de flexión]]
=== Véase también ===
* {{ep|it.adj}}
* {{ep|it.v}}
== Referencias ==
<references />
<includeonly><!--
++++ POR FAVOR, AÑADE LAS CATEGORÍAS DEBAJO DE ESTA LÍNEA, DENTRO DE LAS ETIQUETAS INCLUDEONLY, GRACIAS. -->
[[Categoría:IT:Plantillas de flexión]]
</includeonly>
36g8bnjuwxt5cu8bieoswia99uymnqv
Plantilla:ca.sust/doc
10
1056610
6117329
5843382
2026-06-06T17:17:50Z
TMCbot
164594
.
6117329
wikitext
text/x-wiki
{{subpágina documentación de plantilla}}
<!-- POR FAVOR, AÑADE LAS CATEGORÍAS AL FINAL DE ESTA PÁGINA. -->
<!-- Si te dispones a documentar una plantilla de mantenimiento, por favor considera adoptar el formato de [[Wikipedia:Documentación de plantillas de mantenimiento]]-->
{{metaplantilla de avisos|tipo=desarrollo|Documentación incompleta. Contactar a [[Usuario discusión:Tmagc]] si se necesita mayor información}}
== Uso ==
Esta es la nueva plantilla para flexionar '''sustantivos''' del catalán. Reemplaza a todas las anteriores que se usaron.
TLDR: '''Obligatorio especificar el género del sustantivo en el primer parámetro'''. Puede ser masculino (m), femenino (f) o masculino y femenino (mf). Obviamente que las otras opciones (ng, inv, s, p, irreg) también son aceptables y dan suficiente información para construir la flexión "regular". Para la plantilla {{ep|ca.adj}}, se activa por defecto "mf" para que genere ambas formas, mientras que el resto funciona igual a esta plantilla.
Los sustantivos se flexionan según el siguiente criterio, respetando la precedencia de las filas:
(tabla por construir)
Los sustantivos que NO se ajusten a estas reglas deberán ser tratados como irregulares, especificando toda la flexión manualmente. '''PRESTE ATENCIÓN''' Muchas irregularidades están asociadas a:
* La eliminación o inserción de la doble s final en los plurales. Actualmente la plantilla solo duplica la s en palabras terminadas en -[aàéíoò]s, de lo contrario no la duplica.
* Palabras cuyo femenino se adiciona una -a. En general se detecta cuándo debe hacerse, pero hay ciertas palabras como las terminadas en -il, -ç o -nt que se consideran invariantes en cuanto al género y si tienen femenino con -a deben ser tratadas como irregulares y ser especificado el femenino manualmente junto con las demás formas.
=== Otros casos ===
:* '''Sustantivos masculinos y femeninos''': Invóquese con el valor <code>mf</code> en el primer parámetro
:* '''Sustantivos y adjetivos invariantes, o solo en singular o plural''': En estos casos debe usarse el primer parámetro:
::* con {{epc|ca.sust|n}} o {{epc|ca.sust|ng}} (no género) se especifica "mf" pero se prohíbe explícitamente flexionar en género, muy útil en adjetivos con forma idéntica en femenino y masculino.
::* con {{epc|ca.sust|inv}}, la palabra es invariante tanto en género como en número.
::* con {{epc|ca.sust|s}} o con {{epc|ca.sust|p}}, la palabra existe solo en singular o solo en plural.
::* con {{epc|ca.sust|irreg}}, la palabra flexiona de forma irregular (ver Sustantivos y adjetivos con femeninos o plurales irregulares).
:* '''Comparativos y superlativos''': Se puede especificar cada uno de los comparativos y superlativos con los parámetros de lista {{parámetro|comparativo}} y {{parámetro|superlativo}}. Ver ejemplo en [[bueno]].
:* '''Sustantivos y adjetivos con femeninos o plurales irregulares''': Las palabras que no se ajustan a las reglas deberán especificarse manualmente con los parámetros de lista {{parámetro|p}} (plural), {{parámetro|f}} (femenino), {{parámetro|fp}} (femenino plural), habiéndose invocado con el valor "irreg" en el primer parámetro. Por defecto, el segundo, tercer y cuarto parámetro posicional de la plantilla están asociados con {{parámetro|p1}}, {{parámetro|f1}}, {{parámetro|fp1}}. Ver ejemplos en [[líder]] o [[actor]].
:* '''Notas al pie''': Se puede agregar una nota al pie con el parámetro {{parámetro|nota}}.
=== Parámetros ===
{| class="wikitable"
|+Parámetros
!Parámetro
!Función
!Tipo
!Valores posibles
|-
|{{parámetro|1}}
|Tipo de flexión en el sustantivo o adjetivo.
|Lista de valores
|m (masculino), f (femenino), mf (masculino y femenino), ng (sin marca de género), inv (invariante), s (singularia tantum), p (pluralia tantum), irreg (sufijo completamente irregular)
|-
|{{parámetro|2}}
|Alias para {{parámetro|p1}}
|
|
|-
|{{parámetro|3}}
|Alias para {{parámetro|f1}}
|
|
|-
|{{parámetro|4}}
|Alias para {{parámetro|fp1}}
|
|
|-
|{{parámetro|ayuda}}
|Grafía de la palabra con tildes.
|Libre
|Indica cuál es la sílaba tónica o si tiene diptongos o hiatos. Si no se especifica se asume acentuación llana.
|-
|{{parámetro|s}} ({{parámetro|forzars}}, {{parámetro|noes}})
|Prohibir el plural con -es
|booleano
|n (no, por defecto), s (sí)
|-
|{{parámetro|p}} ({{parámetro|p2}}, {{parámetro|p3}}, etc.)
|Plurales (masculinos) irregulares
|Libre
|especificar el plural
|-
|{{parámetro|f}} ({{parámetro|f2}}, {{parámetro|f3}}, etc.)
|Femeninos irregulares
|Libre
|especificar el femenino
|-
|{{parámetro|fp}} ({{parámetro|fp2}}, {{parámetro|fp3}}, etc.)
|Femeninos plurales irregulares
|Libre
|especificar el femenino en plural
|-
|{{parámetro|comp}} ({{parámetro|comp2}}, {{parámetro|comp3}}, etc.)
|Comparativo
|Libre
|especificar el comparativo
|-
|{{parámetro|sup}} ({{parámetro|sup2}}, {{parámetro|sup3}}, etc.)
|Superlativo
|Libre
|especificar el superlativo
|-
|{{parámetro|cop}}
|Si la estructura es copulativa; '''obligatorio especificarlo en las locuciones que tienen plural, si no lo tiene o es invariante especificarlo con el primer parámetro posicional'''. '''PRESTE ATENCIÓN''' Debido a la ambigüedad del uso del guion que existe en el catalán, si una entrada tiene guion se procederá de la siguiente manera: si se especifica este mismo parámetro, ya sea verdadero o falso, se considera que el guion separa dos palabras, y se tratan como dos palabras distintas (locución). Si no se especifica nada, se considera que el guion separa un prefijo o una palabra compuesta, pero la plantilla la interpretará como una única palabra flexionando solo el final.
|booleano
|n (no), s (sí)
|-
|{{parámetro|nota}}
|Nota
|Libre
|especificar una nota al pie
|}
=== Categorías relacionadas ===
* [[:Categoría:CA:Plantillas de flexión]]
=== Véase también ===
* {{ep|ca.adj}}
* {{ep|ca.v}}
== Referencias ==
<references />
<includeonly><!--
++++ POR FAVOR, AÑADE LAS CATEGORÍAS DEBAJO DE ESTA LÍNEA, DENTRO DE LAS ETIQUETAS INCLUDEONLY, GRACIAS. -->
[[Categoría:CA:Plantillas de flexión]]
</includeonly>
muzu76oai5xnz3g9jbkm8nsbhww01ni
Categoría:FR:Adjetivos invariantes en género
14
1057416
6117324
5857028
2026-06-06T17:09:30Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:FR:Adjetivos sin género definido]] a [[Categoría:FR:Adjetivos invariantes en género]] sin dejar una redirección: obsoleta
5857028
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Categoría:PT:Adjetivos invariantes en género
14
1057757
6117325
5858535
2026-06-06T17:09:36Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:PT:Adjetivos sin género definido]] a [[Categoría:PT:Adjetivos invariantes en género]] sin dejar una redirección: obsoleta
5858535
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Categoría:GL:Adjetivos invariantes en género
14
1057758
6117321
5858537
2026-06-06T17:09:12Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:GL:Adjetivos sin género definido]] a [[Categoría:GL:Adjetivos invariantes en género]] sin dejar una redirección: obsoleta
5858537
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Categoría:CA:Adjetivos invariantes en género
14
1057964
6117322
5859320
2026-06-06T17:09:18Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:CA:Adjetivos sin género definido]] a [[Categoría:CA:Adjetivos invariantes en género]] sin dejar una redirección: obsoleta
5859320
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Categoría:ES:Sustantivos invariantes en género
14
1059329
6117326
5868563
2026-06-06T17:09:42Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:ES:Sustantivos sin género definido]] a [[Categoría:ES:Sustantivos invariantes en género]] sin dejar una redirección: obsoleta
5868563
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Categoría:FR:Sustantivos invariantes en género
14
1059331
6117323
5868565
2026-06-06T17:09:24Z
TMCbot
164594
TMCbot trasladó la página [[Categoría:FR:Sustantivos sin género definido]] a [[Categoría:FR:Sustantivos invariantes en género]] sin dejar una redirección: obsoleta
5868565
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Módulo:flex/lfn
828
1061294
6117315
6076999
2026-06-06T16:46:07Z
TMCbot
164594
.
6117315
Scribunto
text/plain
-- Flexión para la LINGUA FRANCA NOVA
-- Autor: Tmagc
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local len = m_str.len
local sub = m_str.sub
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local vocal_no_tilde = "aeiouüAEIOUÜ"
local vocal_tilde = "áéíóúÁÉÍÓÚ"
local vocal = vocal_no_tilde..vocal_tilde
local cons = "bcdfghjklmnñpqrstvwxyzBCDFGHJKLMNÑPQRSTVWXYZ"
local espacios = "%-‐%s"
local guion = "%-"
local VOCAL = "["..vocal.."]"
local CONS = "["..cons.."]"
local ESPACIO = "["..espacios.."]"
local LETRA = "[^"..espacios.."]"
function export.flexionar_palabra(p, g)
local mf = g == "mf"
local r, v = match(p, "^(.*)("..VOCAL..")$")
if v then
return {s={r.."~"..v.."~"}, p={r.."~"..v.."s~"}}
end
r, v = match(p, "^(.*)("..CONS..")$")
if v then
return {s={r.."~"..v.."~"}, p={r.."~"..v.."es~"}}
end
error("No se pudo determinar la flexión de la palabra")
end
function export.flexion_sust_adj(palabras, g, copulativa)
local a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
if b then
if copulativa == nil then
error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"")
end
local flex1 = export.flexionar_palabra(a, g)
local flex2 = copulativa and export.flexionar_palabra(b, g) or {s={b}, p={}}
flex1.p = flex1.p[1] and flex1.p or flex1.s
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.p, flex.s) then
flex.p = {}
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto = match(palabras, "^("..guion.."?"..LETRA.."+)(.-)$")
local flex = export.flexionar_palabra(p, g)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
end
local cop -- = modo == "irreg" and false or args["cop"] falla...
if modo == "irreg" then
cop = false
else
cop = args["cop"]
end
local flex_ = export.flexion_sust_adj(title, modo, cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." irregulares")
elseif modo == "mf" then
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." regulares")
elseif find(title, LETRA..ESPACIO..LETRA) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.s[1]),
enc,
args["n"],
{{"plural", flex.p}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
["alt"] = {},
["s"] = {lista = true},
["p"] = {lista = true},
["plural"] = {alias_de = "p"},
["n"] = {},
["nota"] = {alias_de = "n"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
return formatear_sust_adj(frame, title, ns, args, find(title, LETRA..ESPACIO..LETRA) and "LFN:Locuciones sustantivas" or "LFN:Sustantivos")
end
return export
bv3h8pfemwhyc440yue817dkbfu5n0q
Módulo:flex/oc
828
1061596
6117316
6077001
2026-06-06T16:46:10Z
TMCbot
164594
.
6117316
Scribunto
text/plain
-- Flexión del occitano
-- Basado en la implementación de ca.wikt [[ca:Module:oc-lema]]
local export = {}
local unpack = unpack or table.unpack
local insert = table.insert
local concat = table.concat
local m_table = require("Módulo:tabla")
local maxindex = m_table.maxIndex
local deepcopy = m_table.deepCopy
local deepequals = m_table.deepEquals
local insert_if_not = m_table.insertIfNot
local merge = m_table.merge
local size = m_table.size
local m_str = require("Módulo:string")
local find = m_str.find
local gsub = m_str.gsub
local gsub1 = m_str.gsub1
local gsubb = m_str.gsubb
local match = m_str.match
local sub = m_str.sub
local len = m_str.len
local m_flex = require("Módulo:flex")
local f = m_flex.f
local f_links = m_flex.f_links
local parsear_arreglo = m_flex.parsear_arreglo
local combinar_copulativa = m_flex.combinar_copulativa
local sobreescribir_formas = m_flex.sobreescribir_formas
local formatear_formas = m_flex.formatear_formas
local comprobar_defectivo = m_flex.comprobar_defectivo
local renderizar_encabezado = m_flex.renderizar_encabezado
local unaccented_vowel = "aeiouïüAEIOUÏÜ"
local accented_vowel = "àèéíòóúÀÈÉÍÒÓÚ"
local vowel = unaccented_vowel .. accented_vowel
local cons = "bcdfghjklmnpqrstvwxyzçBCDFGHJKLMNPQRSTVWXYZÇ·"
local V = "[" .. vowel .. "]"
local AV = "[" .. accented_vowel .. "]"
local NAV = "[^" .. accented_vowel .. "]"
local UAV = "[" .. unaccented_vowel .. "]"
local C = "[" .. cons .. "]"
-- local LETRA = "[" .. vowel .. cons .. "]"
local espacios = "%s"
local espacios_o_guiones = "%-‐%s"
local ESPACIO = "["..espacios.."]"
local ESPACIO_O_GUION = "["..espacios_o_guiones.."]"
local LETRA = "[^"..espacios.."]"
local quitar_tilde =
{
["á"] = "a",
["é"] = "e",
["í"] = "i",
["ó"] = "o",
["ú"] = "u",
["à"] = "a",
["è"] = "e",
["ì"] = "i",
["ò"] = "o",
["ù"] = "u",
["a"] = "a",
["e"] = "e",
["i"] = "i",
["o"] = "o",
["u"] = "u",
["Á"] = "A",
["É"] = "E",
["Í"] = "I",
["Ó"] = "O",
["Ú"] = "U",
["À"] = "A",
["È"] = "E",
["Ì"] = "I",
["Ò"] = "O",
["Ù"] = "U",
["A"] = "A",
["E"] = "E",
["I"] = "I",
["O"] = "O",
["U"] = "U",
}
local tildar = {
["a"] = "à",
["e"] = "è",
["i"] = "í",
["o"] = "ò",
["u"] = "ú",
["ï"] = "í",
["A"] = "À",
["E"] = "È",
["I"] = "Í",
["O"] = "Ò",
["U"] = "Ú",
["Ï"] = "Í",
}
local function es_locucion(tit, cop)
return find(tit, LETRA..ESPACIO_O_GUION..LETRA) or (cop ~= nil and find(tit, LETRA..ESPACIO_O_GUION..LETRA))
end
local function try(p, rx, repl)
local p2, sust = gsubb(p, rx, "~%0~")
if sust then
if not repl then
return {p2, nil}
end
local a = gsub(p, rx, repl)
return {p2, a}
end
return nil
end
-- Forma plural aranesa
local function forma_plural_ar(sing, pos, forzar_s)
local plural = try(sing, "ca$", "~ques~")
or try(sing, "ça$", "~ces~")
or try(sing, "ga$", "~gues~")
or try(sing, "gua$", "~gües~")
or try(sing, "ja$", "~ges~")
or try(sing, "a$", "~es~")
or try(sing, "([ao])ís$", "~%1ïsi~")
or try(sing, "([àèò])s$", function (a) return "~"..quitar_tilde[a].."ssi~" end)
or try(sing, "([éíóú])s$", function (a) return "~"..quitar_tilde[a].."si~" end)
if pos == "adj-m" then
plural = try(sing, "[^aàeèéiíoòóuú][^aàeèéiíoòóuú]e$", "~%0s~")
or try(sing, "e$", "~i~")
or try(sing, "i$", "~%0s~")
or try(sing, "([aàeéèiíoóòuú])th$", "~%1ri~")
or try(sing, "([aàeéèiíoóòuú])t$", "~%1di~")
if plural then
return plural
end
end
if pos == "nom-m" or pos == "adj-m" then
plural = try(sing, "s$", "~%0i~")
or try(sing, "tz$", "~%0i~")
or try(sing, "ish$", "~%0i~")
or try(sing, "s[^aàeèéiíoòóuú]$", "~%0i~")
else
plural = try(sing, "s$", "~%0es~")
or try(sing, "tz$", "~%0es~")
or try(sing, "ish$", "~%0es~")
or try(sing, "s[^aàeèéiíoòóuú]$", "~%0es~")
end
plural = try(sing, "ç$", "~ci~")
or try(sing, "c$", "~qui~")
or try(sing, "[^i]$", "~%0i~")
or try(sing, "[^s]$", "~%0s~")
if not plural then
error("no se pudo determinar la flexión de la palabra")
end
return plural
end
-- Forma plural general
local function forma_plural_general(sing, pos, forzar_s)
local plural = try(sing, "([ao])ís$", "~%1ïses~")
or try(sing, "([àèò])s$", function (a) return "~"..quitar_tilde[a].."sses~" end)
or try(sing, "([éíóú])s$", function (a) return "~"..quitar_tilde[a].."ses~" end)
or try(sing, "[aàeéèiíoóòuú][^aàeéèiíoóòuú]+[aeiou]s$", nil)
or try(sing, "ç$", "~ces~")
or try(sing, "sc$", "~sques~")
or try(sing, "[^aàeéèiíoóòuú]g$", "~%0s~")
or try(sing, "tz$", "~ses~")
or try(sing, "[sx]t$", "~%0es~")
or try(sing, "[cs]h$", "~%0es~")
or try(sing, "sp$", "~%0es~")
or try(sing, "[fgsxz]$", "~%0es~")
or try(sing, "[^s]$", "~%0s~")
if not plural then
error("no se pudo determinar la flexión de la palabra")
end
return plural
end
local function forma_plural(word, pos, forzar_s)
local flex1 = forma_plural_general(word, pos, forzar_s)
local flex2 = forma_plural_ar(word, pos, forzar_s)
local flex = {m={flex1[1]},p={flex1[2]},f={},fp={}}
if flex2[2] and flex1[2] and gsub1(flex1[2], "[~#]", "") ~= gsub1(flex2[2], "[~#]", "") then
insert(flex.p, flex2[2])
end
return flex
end
local function forma_femenina(masc)
local fem
if find(masc, "a$") then
fem = masc
elseif find(masc, "[aàeéèoóòuú]c$") then
fem = gsub(masc, "c$", "ga")
elseif find(masc, "e$") then
fem = gsub(masc, "ce$", "ça")
fem = gsub(fem, "ge$", "ja")
fem = gsub(fem, "güe$", "gua")
fem = gsub(fem, "e$", "a")
elseif find(masc, "[aàeéèiíoóòuú]g$") then
fem = gsub(masc, "g$", "ja")
elseif find(masc, "th$") then
fem = gsub(masc, "th$", "ra")
elseif find(masc, "i$") then
fem = gsub(masc, "a([^aeiou][^aeiou]?)i$", "à%1ia")
fem = gsub(fem, "i([^aeiou])i$", "í%1ia")
fem = gsub(fem, "i$", "ia")
elseif find(masc, "o$") then
fem = gsub(masc, "o$", "a")
elseif find(masc, "p$") then
fem = gsub(masc, "p$", "ba")
elseif find(masc, "[àéèíóòú]s$") then
fem = gsub(masc, "às$", "asa")
fem = gsub(fem, "és$", "esa")
fem = gsub(fem, "ès$", "essa")
fem = gsub(fem, "([ao])ís$", "%1ïsa")
fem = gsub(fem, "ís$", "isa")
fem = gsub(fem, "òs$", "ossa")
fem = gsub(fem, "ós$", "osa")
fem = gsub(fem, "ús$", "usa")
elseif find(masc, "[aàeéèiíoóòuú]t$") then
fem = gsub(masc, "t$", "da")
elseif find(masc, "u$") then
fem = gsub(masc, "([aeio])u$", "%1va")
fem = gsub(fem, "i(%l)u$", "í%1ua")
fem = gsub(fem, "u$", "ua")
else
fem = masc .. "a"
end
return fem
end
local function flexionar_palabra(p, modo, s)
local pos, g = match(modo, "^(.*)%-(.*)$")
if g ~= "mf" then
return forma_plural(p, pos.."-"..g, s)
end
local flex = forma_plural(p, pos.."-m", s)
local fem = forma_femenina(p)
local flex_f = forma_plural(fem, pos.."-f", s)
if not deepequals(flex, flex_f) then
flex.f = flex_f.m
flex.fp = flex_f.p
end
return flex
end
local function flexion_sust_adj(palabras, modo, forzar_s, copulativa)
local a, separador, b
if copulativa == true or copulativa == false then
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO_O_GUION..")("..LETRA.."+)$")
else
a, separador, b = match(palabras, "^("..LETRA.."+)("..ESPACIO..")("..LETRA.."+)$")
end
if b then
if copulativa == nil then
error("Especifique si la estructura es copulativa o no usando el parámetro booleano \"cop\"")
end
local flex1 = flexionar_palabra(a, modo, forzar_s)
local flex2 = copulativa and flexionar_palabra(b, modo, forzar_s) or {m={b}, p={}, f={}, fp={}}
flex1.p = flex1.p[1] and flex1.p or flex1.m
flex1.f = flex1.f[1] and flex1.f or flex1.m
flex1.fp = flex1.fp[1] and flex1.fp or flex1.p
flex2.p = flex2.p[1] and flex2.p or flex2.m
flex2.f = flex2.f[1] and flex2.f or flex2.m
flex2.fp = flex2.fp[1] and flex2.fp or flex2.p
local flex = combinar_copulativa(flex1, flex2, separador)
if deepequals(flex.fp, flex.p) and deepequals(flex.f, flex.m) then
flex.f = {}
flex.fp = {}
if deepequals(flex.p, flex.m) then
flex.p = {}
end
end
return flex
elseif copulativa == true then
error("Solo se admiten estructuras copulativas de exactamente dos palabras")
end
-- sino, flexiono solo la primera palabra
local p, resto
if copulativa == false then
p, resto = match(palabras, "^(%-?[^"..espacios_o_guiones.."]+)(.-)$")
else
p, resto = match(palabras, "^("..LETRA.."+)(.-)$")
end
local flex = flexionar_palabra(p, modo, forzar_s)
for _,arr in pairs(flex) do
for i,e in ipairs(arr) do
arr[i] = e..resto
end
end
return flex
end
local function formatear_sust_adj(frame, title, ns, args, cat_pref)
local modo = args[1]
local cats = {}
local enc
if modo then
if find(modo, "^inv") then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif sub(modo, 1, 1) == "s" then
enc = "singularia tantum"
insert(cats, cat_pref.." solo en singular")
elseif sub(modo, 1, 1) == "p" then
enc = "pluralia tantum"
insert(cats, cat_pref.." solo en plural")
end
if enc then
return renderizar_encabezado(
frame,
args["alt"] or title,
enc,
args["n"],
{},
ns == 0 and cats or {}
)
end
end
local cop -- = modo == "irreg" and false or args["cop"] falla...
if modo == "irreg" then
cop = false
else
cop = args["cop"]
end
local flex_ = flexion_sust_adj(title, args.es_adjetivo and "adj-mf" or "nom-"..modo, args["s"], cop)
local flex, irr = sobreescribir_formas(flex_, args, true)
if not flex.p[1] and not flex.f[1] and not flex.fp[1] then
enc = "invariante"
insert(cats, cat_pref.." invariantes")
elseif irr then
enc = f("#irregular#")
insert(cats, cat_pref.." irregulares")
elseif modo and sub(modo, 1, 1) == "n" then
flex.f = {}
flex.fp = {}
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." irregulares")
elseif (not flex.f[1] and not flex.fp[1] and modo == "mf") then
enc = "invariante en género"
insert(cats, cat_pref.." invariantes en género")
--insert(cats, cat_pref.." regulares")
elseif es_locucion(title, args["cop"]) then
if args["cop"] then
enc = "copulativa"
insert(cats, cat_pref.." copulativas")
else
enc = "no copulativa"
insert(cats, cat_pref.." no copulativas")
end
else
insert(cats, cat_pref.." regulares")
end
return renderizar_encabezado(
frame,
args["alt"] or f(flex.m[1]),
enc,
args["n"],
{{"plural", flex.p},
{"femenino", flex.f},
{"femenino plural", flex.fp},
{"comparativo", args["comp"]},
{"superlativo", args["sup"]}},
ns == 0 and cats or {}
)
end
function export.sust(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
local valido = {
["m"] = true,
["f"] = true,
["mf"] = true,
["n"] = true,
["ng"] = true,
["inv"] = true,
["s"] = true,
["p"] = true,
["irreg"] = true
}
assert(valido[args[1]], "Especifique el género del sustantivo en el primer parámetro: m, f, mf, ng, inv, s, p, irreg")
return formatear_sust_adj(frame, title, ns, args, es_locucion(title, args["cop"]) and "OC:Locuciones sustantivas" or "OC:Sustantivos")
end
function export.adj(frame)
local title_ = mw.title.getCurrentTitle()
local title = title_.fullText
local ns = title_.namespace
if ns ~= 0 then
return "Use esta plantilla en el espacio principal."
end
local params = {
[1] = {},
[2] = {alias_de="p"},
[3] = {alias_de="f"},
[4] = {alias_de="fp"},
["alt"] = {},
["s"] = {tipo = "bool"},
["forzars"] = {alias_de = "s"},
["noes"] = {alias_de = "s"},
["es"] = {tipo = "bool"},
["forzares"] = {alias_de = "es"},
["nos"] = {alias_de = "es"},
["m"] = {lista = true},
["p"] = {lista = true},
["mp"] = {alias_de = "p"},
["plural"] = {alias_de = "p"},
["masculinoplural"] = {alias_de = "p"},
["f"] = {lista = true},
["femenino"] = {alias_de = "f"},
["fp"] = {lista = true},
["femeninoplural"] = {alias_de = "fp"},
["n"] = {},
["nota"] = {alias_de = "n"},
["comp"] = {lista = true},
["comparativo"] = {alias_de = "comp"},
["sup"] = {lista = true},
["superlativo"] = {alias_de = "sup"},
["cop"] = {tipo = "bool"},
["copulativa"] = {alias_de = "cop"},
}
local parent_frame = frame:getParent()
local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
args[1] = args[1] or "mf"
args.es_adjetivo = true
return formatear_sust_adj(frame, title, ns, args, es_locucion(title, args["cop"]) and "OC:Locuciones adjetivas" or "OC:Adjetivos")
end
return export
cl122i3bslds30j0m4fkqe9lw8rm6ww
Plantilla:an.sust/doc
10
1062707
6117327
6092267
2026-06-06T17:17:47Z
TMCbot
164594
.
6117327
wikitext
text/x-wiki
{{subpágina documentación de plantilla}}
<!-- POR FAVOR, AÑADE LAS CATEGORÍAS AL FINAL DE ESTA PÁGINA. -->
<!-- Si te dispones a documentar una plantilla de mantenimiento, por favor considera adoptar el formato de [[Wikipedia:Documentación de plantillas de mantenimiento]]-->
== Uso ==
Esta es la nueva plantilla para flexionar '''sustantivos''' del aragonés. Reemplaza a todas las anteriores que se usaron.
TLDR: Generalmente, o bien no es necesario especificar nada, o bien es necesario invocarla con {{epc|an.sust|mf}} en el primer parámetro si el sustantivo es masculino y femenino. Para la plantilla {{ep|an.adj}}, este parámetro se activa por defecto para que genere ambas formas, mientras que el resto funciona igual a esta plantilla.
Los sustantivos se flexionan según el siguiente criterio:
{| class="wikitable"
! termina en !! plural !! femenino (si aplica) !! femenino plural (si aplica)
|-
| -o || -os || -a || -as
|-
| -ce || -ces || -za || -zas
|-
| -eu || -eus || -eua || -euas
|-
| -au || -aus || -ada || -adas
|-
| -íu || -íus || -ida || -idas
|-
| vocal || +s || ||
|-
| vocal + -t, -d || vocal + -z || ||
|-
| -or || -ors || -ora || -oras
|-
| -er || -ers || -era || -eras
|-
| -ol || -ols || -ola || -olas
|-
| vocal + -z || -ces || ||
|-
| vocal + -c || -ques || ||
|-
| hiato ascendente + -n/-s || +s || +a || +as
|-
| vocal + -n (aguda/monosílaba) || -s || -a || -as
|-
| vocal + -s (aguda/monosílaba) || -es || -a || -as
|-
| vocal + -n (llana) || -s || ||
|-
| vocal + -x (aguda/monosílaba) || -es || ||
|-
| vocal + -n/-s/-x || inv. || ||
|-
| consonante + -y || -is || ||
|-
| -ch || +es || ||
|-
| doble consonante (una es s/z) || inv || ||
|-
| doble consonante || +s || ||
|-
| vocal + consonante || +s || ||
|}
Los sustantivos que NO se ajusten a estas reglas deberán ser tratados como irregulares, especificando toda la flexión manualmente. '''PRESTE ATENCIÓN''' Muchas irregularidades están asociadas a la duplicación o no duplicación de las consonantes finales.
=== Otros casos ===
:* '''Sustantivos masculinos y femeninos''': Invóquese con el valor <code>mf</code> en el primer parámetro
:* '''Sustantivos y adjetivos invariantes, o solo en singular o plural''': En estos casos debe usarse el primer parámetro:
::* con {{epc|an.sust|n}} o {{epc|an.sust|ng}} (no género) se especifica "mf" pero se prohíbe explícitamente flexionar en género, muy útil en adjetivos excepcionales que terminan en -o o a veces en -e pero que no flexionan a -a.
::* con {{epc|an.sust|inv}}, la palabra es invariante tanto en género como en número.
::* con {{epc|an.sust|s}} o con {{epc|an.sust|p}}, la palabra existe solo en singular o solo en plural.
::* con {{epc|an.sust|irreg}}, la palabra flexiona de forma irregular (ver Sustantivos y adjetivos con femeninos o plurales irregulares).
:* '''Comparativos y superlativos''': Se puede especificar cada uno de los comparativos y superlativos con los parámetros de lista {{parámetro|comparativo}} y {{parámetro|superlativo}}. Ver ejemplo en [[bueno]].
:* '''Sustantivos y adjetivos con femeninos o plurales irregulares''': Las palabras que no se ajustan a las reglas deberán especificarse manualmente con los parámetros de lista {{parámetro|p}} (plural), {{parámetro|f}} (femenino), {{parámetro|fp}} (femenino plural), habiéndose invocado con el valor "irreg" en el primer parámetro. Por defecto, el segundo, tercer y cuarto parámetro posicional de la plantilla están asociados con {{parámetro|p1}}, {{parámetro|f1}}, {{parámetro|fp1}}. Ver ejemplos en [[líder]] o [[actor]].
:* '''Notas al pie''': Se puede agregar una nota al pie con el parámetro {{parámetro|nota}}.
=== Parámetros ===
{| class="wikitable"
|+Parámetros
!Parámetro
!Función
!Tipo
!Valores posibles
|-
|{{parámetro|1}}
|Tipo de flexión en el sustantivo o adjetivo.
|Lista de valores
|ninguno (por defecto), mf (masculino y femenino), ng (sin marca de género), inv (invariante), s (singularia tantum), p (pluralia tantum), irreg (sufijo completamente irregular)
|-
|{{parámetro|2}}
|Alias para {{parámetro|p1}}
|
|
|-
|{{parámetro|3}}
|Alias para {{parámetro|f1}}
|
|
|-
|{{parámetro|4}}
|Alias para {{parámetro|fp1}}
|
|
|-
|{{parámetro|p}} ({{parámetro|p2}}, {{parámetro|p3}}, etc.)
|Plurales (masculinos) irregulares
|Libre
|especificar el plural
|-
|{{parámetro|f}} ({{parámetro|f2}}, {{parámetro|f3}}, etc.)
|Femeninos irregulares
|Libre
|especificar el femenino
|-
|{{parámetro|fp}} ({{parámetro|fp2}}, {{parámetro|fp3}}, etc.)
|Femeninos plurales irregulares
|Libre
|especificar el femenino en plural
|-
|{{parámetro|comp}} ({{parámetro|comp2}}, {{parámetro|comp3}}, etc.)
|Comparativo
|Libre
|especificar el comparativo
|-
|{{parámetro|sup}} ({{parámetro|sup2}}, {{parámetro|sup3}}, etc.)
|Superlativo
|Libre
|especificar el superlativo
|-
|{{parámetro|cop}}
|Si la estructura es copulativa; obligatorio especificarlo en las locuciones que tienen plural, si no lo tiene o es invariante especificarlo con el primer parámetro.
|booleano
|n (no), s (sí)
|-
|{{parámetro|nota}}
|Nota
|Libre
|especificar una nota al pie
|}
<includeonly><!--
++++ POR FAVOR, AÑADE LAS CATEGORÍAS DEBAJO DE ESTA LÍNEA, DENTRO DE LAS ETIQUETAS INCLUDEONLY, GRACIAS. -->
[[Categoría:AN:Plantillas de flexión]]
</includeonly>
knbocakp5r9o1dqtrwuqcv6hzg1v4go
Plantilla:ast.sust/doc
10
1062710
6117328
6092708
2026-06-06T17:17:48Z
TMCbot
164594
.
6117328
wikitext
text/x-wiki
{{subpágina documentación de plantilla}}
<!-- POR FAVOR, AÑADE LAS CATEGORÍAS AL FINAL DE ESTA PÁGINA. -->
<!-- Si te dispones a documentar una plantilla de mantenimiento, por favor considera adoptar el formato de [[Wikipedia:Documentación de plantillas de mantenimiento]]-->
== Uso ==
Esta es la nueva plantilla para flexionar '''sustantivos''' del aragonés. Reemplaza a todas las anteriores que se usaron.
TLDR: Generalmente, o bien no es necesario especificar nada, o bien es necesario invocarla con {{epc|ast.sust|mf}} en el primer parámetro si el sustantivo es masculino y femenino. Para la plantilla {{ep|ast.adj}}, este parámetro se activa por defecto para que genere ambas formas, mientras que el resto funciona igual a esta plantilla.
Los sustantivos se flexionan según el siguiente criterio:
{| class="wikitable"
! termina en !! plural !! femenino !! femenino plural !! neutro
|-
| -és (aguda/monosílaba) || -eses || -esa || -eses || -és, -eso
|-
| vocal + s || +es || +a || +es || +o
|-
| -ón (aguda/monosílaba) || -ones || -ona || -ones || -ón, -ono
|-
| -án, -én (aguda/monosílaba) || +es || +a || +es || +o
|-
| -au, -áu (aguda/monosílaba) || -aos || -ada || aes || ao
|-
| -ou, -óu (aguda/monosílaba) || -oos || -oda || oes || oo
|-
| -éu || -eos || -eda || -ees || -eo
|-
| -íu || -íos || -ida || -íes || -ío
|-
| -izu || -izos || -iza || -ices || -izo
|-
| -o, -u || -os || -a || -es || o
|-
| -a || -es || || ||
|-
| vocal || -s || || ||
|-
| -ol, -or || +es || +a || +as || inv.
|-
| vocal + l/r/x/z || +es || || ||
|-
| consonante + -y || -is || || ||
|-
| -ch || +es || || ||
|-
| doble consonante (una es s/z) || inv || || ||
|-
| doble consonante || +s || || ||
|-
| vocal + consonante || +s || || ||
|}
Los sustantivos que NO se ajusten a estas reglas deberán ser tratados como irregulares, especificando toda la flexión manualmente. '''PRESTE ATENCIÓN''' Muchas irregularidades están asociadas a la duplicación o no duplicación de las consonantes finales.
=== Otros casos ===
:* '''Sustantivos masculinos y femeninos''': Invóquese con el valor <code>mf</code> en el primer parámetro
:* '''Sustantivos y adjetivos invariantes, o solo en singular o plural''': En estos casos debe usarse el primer parámetro:
::* con {{epc|ast.sust|n}} o {{epc|ast.sust|ng}} (no género) se especifica "mf" pero se prohíbe explícitamente flexionar en género, muy útil en adjetivos excepcionales que terminan en -o o a veces en -e pero que no flexionan a -a.
::* con {{epc|ast.sust|inv}}, la palabra es invariante tanto en género como en número.
::* con {{epc|ast.sust|s}} o con {{epc|ast.sust|p}}, la palabra existe solo en singular o solo en plural.
::* con {{epc|ast.sust|irreg}}, la palabra flexiona de forma irregular (ver Sustantivos y adjetivos con femeninos o plurales irregulares).
:* '''Comparativos y superlativos''': Se puede especificar cada uno de los comparativos y superlativos con los parámetros de lista {{parámetro|comparativo}} y {{parámetro|superlativo}}. Ver ejemplo en [[bueno]].
:* '''Sustantivos y adjetivos con femeninos o plurales irregulares''': Las palabras que no se ajustan a las reglas deberán especificarse manualmente con los parámetros de lista {{parámetro|p}} (plural), {{parámetro|f}} (femenino), {{parámetro|fp}} (femenino plural), habiéndose invocado con el valor "irreg" en el primer parámetro. Por defecto, el segundo, tercer y cuarto parámetro posicional de la plantilla están asociados con {{parámetro|p1}}, {{parámetro|f1}}, {{parámetro|fp1}}. Ver ejemplos en [[líder]] o [[actor]].
:* '''Notas al pie''': Se puede agregar una nota al pie con el parámetro {{parámetro|nota}}.
=== Parámetros ===
{| class="wikitable"
|+Parámetros
!Parámetro
!Función
!Tipo
!Valores posibles
|-
|{{parámetro|1}}
|Tipo de flexión en el sustantivo o adjetivo.
|Lista de valores
|ninguno (por defecto), mf (masculino y femenino), ng (sin marca de género), inv (invariante), s (singularia tantum), p (pluralia tantum), irreg (sufijo completamente irregular)
|-
|{{parámetro|2}}
|Alias para {{parámetro|p1}}
|
|
|-
|{{parámetro|3}}
|Alias para {{parámetro|f1}}
|
|
|-
|{{parámetro|4}}
|Alias para {{parámetro|fp1}}
|
|
|-
|{{parámetro|p}} ({{parámetro|p2}}, {{parámetro|p3}}, etc.)
|Plurales (masculinos) irregulares
|Libre
|especificar el plural
|-
|{{parámetro|f}} ({{parámetro|f2}}, {{parámetro|f3}}, etc.)
|Femeninos irregulares
|Libre
|especificar el femenino
|-
|{{parámetro|fp}} ({{parámetro|fp2}}, {{parámetro|fp3}}, etc.)
|Femeninos plurales irregulares
|Libre
|especificar el femenino en plural
|-
|{{parámetro|comp}} ({{parámetro|comp2}}, {{parámetro|comp3}}, etc.)
|Comparativo
|Libre
|especificar el comparativo
|-
|{{parámetro|sup}} ({{parámetro|sup2}}, {{parámetro|sup3}}, etc.)
|Superlativo
|Libre
|especificar el superlativo
|-
|{{parámetro|cop}}
|Si la estructura es copulativa; obligatorio especificarlo en las locuciones que tienen plural, si no lo tiene o es invariante especificarlo con el primer parámetro.
|booleano
|n (no), s (sí)
|-
|{{parámetro|nota}}
|Nota
|Libre
|especificar una nota al pie
|}
<includeonly><!--
++++ POR FAVOR, AÑADE LAS CATEGORÍAS DEBAJO DE ESTA LÍNEA, DENTRO DE LAS ETIQUETAS INCLUDEONLY, GRACIAS. -->
[[Categoría:AST:Plantillas de flexión]]
</includeonly>
6uifct4em5flgouiztonunpl7x8r63r
Plantilla:gl.sust/doc
10
1062721
6117333
6092733
2026-06-06T17:17:54Z
TMCbot
164594
.
6117333
wikitext
text/x-wiki
{{subpágina documentación de plantilla}}
<!-- POR FAVOR, AÑADE LAS CATEGORÍAS AL FINAL DE ESTA PÁGINA. -->
<!-- Si te dispones a documentar una plantilla de mantenimiento, por favor considera adoptar el formato de [[Wikipedia:Documentación de plantillas de mantenimiento]]-->
== Uso ==
Esta es la nueva plantilla para flexionar '''sustantivos''' del gallego. Reemplaza a todas las anteriores que se usaron.
TLDR: Generalmente, o bien no es necesario especificar nada, o bien es necesario invocarla con {{epc|gl.sust|mf}} en el primer parámetro si el sustantivo es masculino y femenino. Para la plantilla {{ep|gl.adj}}, este parámetro se activa por defecto para que genere ambas formas, mientras que el resto funciona igual a esta plantilla.
Los sustantivos se flexionan según el siguiente criterio, respetando la precedencia de las filas:
{| class="wikitable"
! termina en !! plural !! femenino (si aplica) !! femenino plural (si aplica)
|-
| diptongo final con -s || +es || ||
|-
| -abel, -ibel || -abeis, -ibeis || ||
|-
| -ol (aguda) || -ois || -ola || -olas
|-
| -or (aguda) || -ores || -ora || -oras
|-
| -il (aguda) || -ís || ||
|-
| -ol (no agudo) || -ois || ||
|-
| -l (aguda) || -is || ||
|-
| -r (aguda) || -res || ||
|-
| -or || -ores || -ora || -oras
|-
| -u (monosílaba) || -us || -úa || -úas
|-
| -o || -os || -a || -as
|-
| vocal || +s || ||
|-
| l (llana/esdrújula) || +es || ||
|-
| l (llana/esdrújula) || +es || ||
|-
| s (monosílaba) || +es || ||
|-
| -án (aguda/monosílaba) || -áns || -á || -ás
|-
| -ín (aguda/monosílaba) || -íns || -ina || -inas
|-
| -ón (aguda/monosílaba) || -óns || -ona || -onas
|-
| -ún (aguda/monosílaba) || -úns || -úa || -úas
|-
| -s (aguda) || -ses || -sa || -sas
|-
| -VOCAL || +s || ||
|-
| -us, -is (agudo, después de consonante) || -es || -a || -as
|-
| -us, -is (no agudo o agudo después de vocal) || || ||
|-
| -s, -x || inv. || ||
|-
| -z || -ces || ||
|-
| -n || -nes || -na || -nas
|-
| -consonante (otros casos) || +s || ||
|}
Los sustantivos que NO se ajusten a estas reglas deberán ser tratados como irregulares, especificando toda la flexión manualmente. '''PRESTE ATENCIÓN''' Muchas irregularidades se dan con el sufijo -ão.
=== Otros casos ===
:* '''Sustantivos masculinos y femeninos''': Invóquese con el valor <code>mf</code> en el primer parámetro
:* '''Sustantivos y adjetivos invariantes, o solo en singular o plural''': En estos casos debe usarse el primer parámetro:
::* con {{epc|gl.sust|n}} o {{epc|gl.sust|ng}} (no género) se especifica "mf" pero se prohíbe explícitamente flexionar en género, muy útil en adjetivos excepcionales que terminan en -o o a veces en -e pero que no flexionan a -a.
::* con {{epc|gl.sust|inv}}, la palabra es invariante tanto en género como en número.
::* con {{epc|gl.sust|s}} o con {{epc|gl.sust|p}}, la palabra existe solo en singular o solo en plural.
::* con {{epc|gl.sust|irreg}}, la palabra flexiona de forma irregular (ver Sustantivos y adjetivos con femeninos o plurales irregulares).
:* '''Comparativos y superlativos''': Se puede especificar cada uno de los comparativos y superlativos con los parámetros de lista {{parámetro|comparativo}} y {{parámetro|superlativo}}. Ver ejemplo en [[bueno]].
:* '''Sustantivos y adjetivos con femeninos o plurales irregulares''': Las palabras que no se ajustan a las reglas deberán especificarse manualmente con los parámetros de lista {{parámetro|p}} (plural), {{parámetro|f}} (femenino), {{parámetro|fp}} (femenino plural), habiéndose invocado con el valor "irreg" en el primer parámetro. Por defecto, el segundo, tercer y cuarto parámetro posicional de la plantilla están asociados con {{parámetro|p1}}, {{parámetro|f1}}, {{parámetro|fp1}}. Ver ejemplos en [[líder]] o [[actor]].
:* '''Notas al pie''': Se puede agregar una nota al pie con el parámetro {{parámetro|nota}}.
=== Parámetros ===
{| class="wikitable"
|+Parámetros
!Parámetro
!Función
!Tipo
!Valores posibles
|-
|{{parámetro|1}}
|Tipo de flexión en el sustantivo o adjetivo.
|Lista de valores
|ninguno (por defecto), mf (masculino y femenino), ng (sin marca de género), inv (invariante), s (singularia tantum), p (pluralia tantum), irreg (sufijo completamente irregular)
|-
|{{parámetro|2}}
|Alias para {{parámetro|p1}}
|
|
|-
|{{parámetro|3}}
|Alias para {{parámetro|f1}}
|
|
|-
|{{parámetro|4}}
|Alias para {{parámetro|fp1}}
|
|
|-
|{{parámetro|p}} ({{parámetro|p2}}, {{parámetro|p3}}, etc.)
|Plurales (masculinos) irregulares
|Libre
|especificar el plural
|-
|{{parámetro|f}} ({{parámetro|f2}}, {{parámetro|f3}}, etc.)
|Femeninos irregulares
|Libre
|especificar el femenino
|-
|{{parámetro|fp}} ({{parámetro|fp2}}, {{parámetro|fp3}}, etc.)
|Femeninos plurales irregulares
|Libre
|especificar el femenino en plural
|-
|{{parámetro|comp}} ({{parámetro|comp2}}, {{parámetro|comp3}}, etc.)
|Comparativo
|Libre
|especificar el comparativo
|-
|{{parámetro|sup}} ({{parámetro|sup2}}, {{parámetro|sup3}}, etc.)
|Superlativo
|Libre
|especificar el superlativo
|-
|{{parámetro|cop}}
|Si la estructura es copulativa; '''obligatorio especificarlo en las locuciones que tienen plural, si no lo tiene o es invariante especificarlo con el primer parámetro posicional'''.
|booleano
|n (no), s (sí)
|-
|{{parámetro|nota}}
|Nota
|Libre
|especificar una nota al pie
|}
== Referencias ==
<references />
<includeonly><!--
++++ POR FAVOR, AÑADE LAS CATEGORÍAS DEBAJO DE ESTA LÍNEA, DENTRO DE LAS ETIQUETAS INCLUDEONLY, GRACIAS. -->
[[Categoría:GL:Plantillas de flexión]]
</includeonly>
e20gl5zilrl466bb8wednfpmajdbm9w
Plantilla:ext.sust/doc
10
1062754
6117331
6092829
2026-06-06T17:17:52Z
TMCbot
164594
.
6117331
wikitext
text/x-wiki
{{subpágina documentación de plantilla}}
<!-- POR FAVOR, AÑADE LAS CATEGORÍAS AL FINAL DE ESTA PÁGINA. -->
<!-- Si te dispones a documentar una plantilla de mantenimiento, por favor considera adoptar el formato de [[Wikipedia:Documentación de plantillas de mantenimiento]]-->
== Uso ==
Esta es la nueva plantilla para flexionar '''sustantivos''' del extremeño. Reemplaza a todas las anteriores que se usaron.
TLDR: Generalmente, o bien no es necesario especificar nada, o bien es necesario invocarla con {{epc|ext.sust|mf}} en el primer parámetro si el sustantivo es masculino y femenino. Para la plantilla {{ep|ext.adj}}, este parámetro se activa por defecto para que genere ambas formas, mientras que el resto funciona igual a esta plantilla.
Los sustantivos se flexionan según el siguiente criterio:
{| class="wikitable"
! termina en !! plural !! femenino (si aplica) !! femenino plural (si aplica)
|-
| -o || -os || -a || -as
|-
| -u || -us || -a || -as
|-
| -tá, -dá || +ais || ||
|-
| -tú || +uis || ||
|-
| vocal || s || ||
|-
| -ol, -or || -oris || -ora || -oras
|-
| vocal || +s || ||
|-
| vocal + -t, -d || vocal + -z || ||
|-
| vocal +-n/-s (aguda/monosilaba) || +is || +a || +as
|-
| -n, -s, x (llanas/esdrújulas) || inv. || ||
|-
| -l, -r, -d, -j, -z || +is || ||
|-
| consonante + -y || -is || ||
|-
| -ch || +es || ||
|-
| doble consonante (una es s/z) || inv || ||
|-
| doble consonante || +s || ||
|-
| vocal + consonante || +s || ||
|}
Los sustantivos que NO se ajusten a estas reglas deberán ser tratados como irregulares, especificando toda la flexión manualmente. '''PRESTE ATENCIÓN''' Muchas irregularidades están asociadas a la duplicación o no duplicación de las consonantes finales.
=== Otros casos ===
:* '''Sustantivos masculinos y femeninos''': Invóquese con el valor <code>mf</code> en el primer parámetro
:* '''Sustantivos y adjetivos invariantes, o solo en singular o plural''': En estos casos debe usarse el primer parámetro:
::* con {{epc|ext.sust|n}} o {{epc|ext.sust|ng}} (no género) se especifica "mf" pero se prohíbe explícitamente flexionar en género, muy útil en adjetivos excepcionales que terminan en -o o a veces en -e pero que no flexionan a -a.
::* con {{epc|ext.sust|inv}}, la palabra es invariante tanto en género como en número.
::* con {{epc|ext.sust|s}} o con {{epc|ext.sust|p}}, la palabra existe solo en singular o solo en plural.
::* con {{epc|ext.sust|irreg}}, la palabra flexiona de forma irregular (ver Sustantivos y adjetivos con femeninos o plurales irregulares).
:* '''Comparativos y superlativos''': Se puede especificar cada uno de los comparativos y superlativos con los parámetros de lista {{parámetro|comparativo}} y {{parámetro|superlativo}}. Ver ejemplo en [[bueno]].
:* '''Sustantivos y adjetivos con femeninos o plurales irregulares''': Las palabras que no se ajustan a las reglas deberán especificarse manualmente con los parámetros de lista {{parámetro|p}} (plural), {{parámetro|f}} (femenino), {{parámetro|fp}} (femenino plural), habiéndose invocado con el valor "irreg" en el primer parámetro. Por defecto, el segundo, tercer y cuarto parámetro posicional de la plantilla están asociados con {{parámetro|p1}}, {{parámetro|f1}}, {{parámetro|fp1}}. Ver ejemplos en [[líder]] o [[actor]].
:* '''Notas al pie''': Se puede agregar una nota al pie con el parámetro {{parámetro|nota}}.
=== Parámetros ===
{| class="wikitable"
|+Parámetros
!Parámetro
!Función
!Tipo
!Valores posibles
|-
|{{parámetro|1}}
|Tipo de flexión en el sustantivo o adjetivo.
|Lista de valores
|ninguno (por defecto), mf (masculino y femenino), ng (sin marca de género), inv (invariante), s (singularia tantum), p (pluralia tantum), irreg (sufijo completamente irregular)
|-
|{{parámetro|2}}
|Alias para {{parámetro|p1}}
|
|
|-
|{{parámetro|3}}
|Alias para {{parámetro|f1}}
|
|
|-
|{{parámetro|4}}
|Alias para {{parámetro|fp1}}
|
|
|-
|{{parámetro|p}} ({{parámetro|p2}}, {{parámetro|p3}}, etc.)
|Plurales (masculinos) irregulares
|Libre
|especificar el plural
|-
|{{parámetro|f}} ({{parámetro|f2}}, {{parámetro|f3}}, etc.)
|Femeninos irregulares
|Libre
|especificar el femenino
|-
|{{parámetro|fp}} ({{parámetro|fp2}}, {{parámetro|fp3}}, etc.)
|Femeninos plurales irregulares
|Libre
|especificar el femenino en plural
|-
|{{parámetro|comp}} ({{parámetro|comp2}}, {{parámetro|comp3}}, etc.)
|Comparativo
|Libre
|especificar el comparativo
|-
|{{parámetro|sup}} ({{parámetro|sup2}}, {{parámetro|sup3}}, etc.)
|Superlativo
|Libre
|especificar el superlativo
|-
|{{parámetro|cop}}
|Si la estructura es copulativa; obligatorio especificarlo en las locuciones que tienen plural, si no lo tiene o es invariante especificarlo con el primer parámetro.
|booleano
|n (no), s (sí)
|-
|{{parámetro|nota}}
|Nota
|Libre
|especificar una nota al pie
|}
<includeonly><!--
++++ POR FAVOR, AÑADE LAS CATEGORÍAS DEBAJO DE ESTA LÍNEA, DENTRO DE LAS ETIQUETAS INCLUDEONLY, GRACIAS. -->
[[Categoría:EXT:Plantillas de flexión]]
</includeonly>
pxxhn2hty70fh2675uy0c93kzadwk49
Plantilla:oc.sust/doc
10
1062770
6117335
6092857
2026-06-06T17:17:56Z
TMCbot
164594
.
6117335
wikitext
text/x-wiki
{{subpágina documentación de plantilla}}
<!-- POR FAVOR, AÑADE LAS CATEGORÍAS AL FINAL DE ESTA PÁGINA. -->
<!-- Si te dispones a documentar una plantilla de mantenimiento, por favor considera adoptar el formato de [[Wikipedia:Documentación de plantillas de mantenimiento]]-->
{{metaplantilla de avisos|tipo=desarrollo|Documentación incompleta. Contactar a [[Usuario discusión:Tmagc]] si se necesita mayor información}}
== Uso ==
Esta es la nueva plantilla para flexionar '''sustantivos''' del occitano. Reemplaza a todas las anteriores que se usaron.
TLDR: '''Obligatorio especificar el género del sustantivo en el primer parámetro'''. Puede ser masculino (m), femenino (f) o masculino y femenino (mf). Obviamente que las otras opciones (ng, inv, s, p, irreg) también son aceptables y dan suficiente información para construir la flexión "regular". Para la plantilla {{ep|oc.adj}}, se activa por defecto "mf" para que genere ambas formas, mientras que el resto funciona igual a esta plantilla.
Los sustantivos se flexionan según el siguiente criterio, respetando la precedencia de las filas:
(tabla por construir)
Los sustantivos que NO se ajusten a estas reglas deberán ser tratados como irregulares, especificando toda la flexión manualmente. '''PRESTE ATENCIÓN''' Muchas irregularidades están asociadas a:
* El no cambio de -t final a -d. Por ejemplo: [[petit]] -> [[petita]] (en lugar del esperado *petida).
* La duplicación de la s final: [[abís]] -> [[abisses]].
=== Otros casos ===
:* '''Sustantivos masculinos y femeninos''': Invóquese con el valor <code>mf</code> en el primer parámetro
:* '''Sustantivos y adjetivos invariantes, o solo en singular o plural''': En estos casos debe usarse el primer parámetro:
::* con {{epc|oc.sust|n}} o {{epc|oc.sust|ng}} (no género) se especifica "mf" pero se prohíbe explícitamente flexionar en género, muy útil en adjetivos con forma idéntica en femenino y masculino.
::* con {{epc|oc.sust|inv}}, la palabra es invariante tanto en género como en número.
::* con {{epc|oc.sust|s}} o con {{epc|oc.sust|p}}, la palabra existe solo en singular o solo en plural.
::* con {{epc|oc.sust|irreg}}, la palabra flexiona de forma irregular (ver Sustantivos y adjetivos con femeninos o plurales irregulares).
:* '''Comparativos y superlativos''': Se puede especificar cada uno de los comparativos y superlativos con los parámetros de lista {{parámetro|comparativo}} y {{parámetro|superlativo}}. Ver ejemplo en [[bueno]].
:* '''Sustantivos y adjetivos con femeninos o plurales irregulares''': Las palabras que no se ajustan a las reglas deberán especificarse manualmente con los parámetros de lista {{parámetro|p}} (plural), {{parámetro|f}} (femenino), {{parámetro|fp}} (femenino plural), habiéndose invocado con el valor "irreg" en el primer parámetro. Por defecto, el segundo, tercer y cuarto parámetro posicional de la plantilla están asociados con {{parámetro|p1}}, {{parámetro|f1}}, {{parámetro|fp1}}. Ver ejemplos en [[líder]] o [[actor]].
:* '''Notas al pie''': Se puede agregar una nota al pie con el parámetro {{parámetro|nota}}.
=== Parámetros ===
{| class="wikitable"
|+Parámetros
!Parámetro
!Función
!Tipo
!Valores posibles
|-
|{{parámetro|1}}
|Tipo de flexión en el sustantivo o adjetivo.
|Lista de valores
|m (masculino), f (femenino), mf (masculino y femenino), ng (sin marca de género), inv (invariante), s (singularia tantum), p (pluralia tantum), irreg (sufijo completamente irregular)
|-
|{{parámetro|2}}
|Alias para {{parámetro|p1}}
|
|
|-
|{{parámetro|3}}
|Alias para {{parámetro|f1}}
|
|
|-
|{{parámetro|4}}
|Alias para {{parámetro|fp1}}
|
|
|-
|{{parámetro|ayuda}}
|Grafía de la palabra con tildes.
|Libre
|Indica cuál es la sílaba tónica o si tiene diptongos o hiatos. Si no se especifica se asume acentuación llana.
|-
|{{parámetro|s}} ({{parámetro|forzars}}, {{parámetro|noes}})
|Prohibir el plural con -es
|booleano
|n (no, por defecto), s (sí)
|-
|{{parámetro|p}} ({{parámetro|p2}}, {{parámetro|p3}}, etc.)
|Plurales (masculinos) irregulares
|Libre
|especificar el plural
|-
|{{parámetro|f}} ({{parámetro|f2}}, {{parámetro|f3}}, etc.)
|Femeninos irregulares
|Libre
|especificar el femenino
|-
|{{parámetro|fp}} ({{parámetro|fp2}}, {{parámetro|fp3}}, etc.)
|Femeninos plurales irregulares
|Libre
|especificar el femenino en plural
|-
|{{parámetro|comp}} ({{parámetro|comp2}}, {{parámetro|comp3}}, etc.)
|Comparativo
|Libre
|especificar el comparativo
|-
|{{parámetro|sup}} ({{parámetro|sup2}}, {{parámetro|sup3}}, etc.)
|Superlativo
|Libre
|especificar el superlativo
|-
|{{parámetro|cop}}
|Si la estructura es copulativa; '''obligatorio especificarlo en las locuciones que tienen plural, si no lo tiene o es invariante especificarlo con el primer parámetro posicional'''.
|booleano
|n (no), s (sí)
|-
|{{parámetro|nota}}
|Nota
|Libre
|especificar una nota al pie
|}
<includeonly><!--
++++ POR FAVOR, AÑADE LAS CATEGORÍAS DEBAJO DE ESTA LÍNEA, DENTRO DE LAS ETIQUETAS INCLUDEONLY, GRACIAS. -->
[[Categoría:OC:Plantillas de flexión]]
</includeonly>
5eien27immscg892ekzt6r88boai1kg
Usuario discusión:Alex4660
3
1064180
6117339
6117298
2026-06-06T19:08:12Z
Alex4660
182950
/* */ Respuesta
6117339
wikitext
text/x-wiki
<div style="padding:10px; font-size:101%; background:var(--background-color-success-subtle); color:var(--color-base); border: 1px dotted var(--border-color-notice);" >
Hola, Alex4660. Te damos la [[Wikcionario:Bienvenido, nuevo visitante|bienvenida a ''Wikcionario'']]. <small style="padding-left:150px">[[Wikcionario:Embajada|If you don't speak Spanish, please visit our Embassy]]</small>
Gracias por participar en el proyecto. Puedes encontrar algunas guías útiles aquí:
:<small>▶</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio.
:<small>▶</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''.
:<small>▶</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción;
:<small>▶</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles.
Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}.
{|
| Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(~~~~)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.png|right|Para firmar usa el botón indicado|link=]]
|}
Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable.<br />
Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div>
:saludos cordiales , nose porque
: se ha bajado mi información no encuentro el motivo [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 02:49 6 jun 2026 (UTC)
::Es contenido generado con LLM, aparte de que no tiene fuentes. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:06 6 jun 2026 (UTC)
:::estimado las fuentes se citan acá mismo , conadi inscribio el apellido a merced , no es originario de la etnia mapuche , alrededor del año 2012 fue registrado en conadi, pero el apellido originalmente es incierto aunque en francia se tienen los primeros registros https://es.geneanet.org/apellidos/GUILMAI , hay funtes confiables , el publicar esta informacion perjudica a quienes les interese su etimología. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 04:11 6 jun 2026 (UTC)
::::Hola, @[[Usuario:Alex4660|Alex4660]]. No has rebatido la acusación de que el contenido ha sido generado artificialmente. Si se vuelve a repetir, serás expulsado del proyecto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 07:51 6 jun 2026 (UTC)
:::::el contenido fue redactado por mí a partir de la información que he recopilado. Utilicé herramientas de corrección ortográfica y redacción para mejorar el texto, pero la investigación y la selección de las fuentes son de mi autoría.
:::::Si existen problemas concretos de verificabilidad, formato o calidad de las referencias, agradecería que se me indicaran para corregirlos. Mi intención es aportar información verificable y adecuadamente referenciada sobre la etimología y los registros documentados del apellido, vuelvo a reiterar que no me parece adecuado mantener informacion que es incompleta solo trato de hacer lo que es correcto. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:08 6 jun 2026 (UTC)
== Ediciones vandálicas ==
<templatestyles src="metaplantilla de avisos/styles.css" /><table style="{{#if:s|border:2px solid #{{#switch:advertencia|protección=bba|serio=b22222|borrar=b22222|borrado=b22222|rechazado=b22222|contenido=f28500|advertencia=f28500|estilo=f4c430|fusionar=9932cc|aviso=1e90ff|desarrollo=228b22|aceptado=228b22|#default=000000}};padding:0.5em; margin:0.5em auto;|}}" class="plainlinks ambox {{#switch:advertencia
| protección = ambox-protection
| serio = ambox-serious
| borrar = ambox-serious
| borrado = ambox-serious
| rechazado = ambox-serious
| contenido = ambox-content
| advertencia = ambox-content
| estilo = ambox-style
| fusionar = ambox-merge
| aviso = ambox-notice
| desarrollo = ambox-growth
| aceptado = ambox-growth
| #default = ambox-notice
}}">
<tr>
<td class="ambox-image">
{{#ifeq:{{{imagen}}}|ninguna
| <!-- no hay celda con imagen; celda vacía necesaria para que la celda de texto tenga anchura 100% -->
| <div style="width:52px;"> {{#switch:advertencia
| protección = [[Imagen:OOjs UI icon lock.svg|40px|class=skin-invert-image]]
| serio = [[Imagen:OOjs UI icon error-destructive.svg|40px]]
| borrar = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| borrado = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| rechazado = [[Imagen:OOjs UI icon close-ltr-darkred.svg|40px]]
| contenido = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| advertencia = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| estilo = [[Imagen:OOjs UI icon broom.svg|40px]]
| fusionar = [[Imagen:Merge-short arrows.svg]]
| aviso = [[Imagen:OOjs UI icon information-progressive.svg|40px]]
| desarrollo = [[Imagen:OOjs UI icon puzzle-ltr-green.svg|40px]]
| aceptado = [[Imagen:OOjs UI icon check-green.svg|40px]]
| vacío = [[Imagen:No image.svg]]
| #default = [[Archivo:OOjs UI icon information-progressive.svg|40px]]
}}</div>
}}</td>
<td class="ambox-text">Por favor, detente. Si continúas vandalizando páginas{{ #if: | como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td>
{{#if:|
<td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td>
}}
</tr>
</table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC)
87u38pvfjzvx8q6eb9wq8t0rd2fg53c
6117355
6117339
2026-06-06T19:44:28Z
Alex4660
182950
/* */ Respuesta
6117355
wikitext
text/x-wiki
<div style="padding:10px; font-size:101%; background:var(--background-color-success-subtle); color:var(--color-base); border: 1px dotted var(--border-color-notice);" >
Hola, Alex4660. Te damos la [[Wikcionario:Bienvenido, nuevo visitante|bienvenida a ''Wikcionario'']]. <small style="padding-left:150px">[[Wikcionario:Embajada|If you don't speak Spanish, please visit our Embassy]]</small>
Gracias por participar en el proyecto. Puedes encontrar algunas guías útiles aquí:
:<small>▶</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio.
:<small>▶</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''.
:<small>▶</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción;
:<small>▶</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles.
Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}.
{|
| Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(~~~~)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.png|right|Para firmar usa el botón indicado|link=]]
|}
Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable.<br />
Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div>
:saludos cordiales , nose porque
: se ha bajado mi información no encuentro el motivo [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 02:49 6 jun 2026 (UTC)
::Es contenido generado con LLM, aparte de que no tiene fuentes. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:06 6 jun 2026 (UTC)
:::estimado las fuentes se citan acá mismo , conadi inscribio el apellido a merced , no es originario de la etnia mapuche , alrededor del año 2012 fue registrado en conadi, pero el apellido originalmente es incierto aunque en francia se tienen los primeros registros https://es.geneanet.org/apellidos/GUILMAI , hay funtes confiables , el publicar esta informacion perjudica a quienes les interese su etimología. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 04:11 6 jun 2026 (UTC)
::::Hola, @[[Usuario:Alex4660|Alex4660]]. No has rebatido la acusación de que el contenido ha sido generado artificialmente. Si se vuelve a repetir, serás expulsado del proyecto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 07:51 6 jun 2026 (UTC)
:::::el contenido fue redactado por mí a partir de la información que he recopilado. Utilicé herramientas de corrección ortográfica y redacción para mejorar el texto, pero la investigación y la selección de las fuentes son de mi autoría.
:::::Si existen problemas concretos de verificabilidad, formato o calidad de las referencias, agradecería que se me indicaran para corregirlos. Mi intención es aportar información verificable y adecuadamente referenciada sobre la etimología y los registros documentados del apellido, vuelvo a reiterar que no me parece adecuado mantener informacion que es incompleta solo trato de hacer lo que es correcto. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:08 6 jun 2026 (UTC)
:::::He actualizado la sección de etimología añadiendo una fuente documental directa (un registro de 1795 alojado en FamilySearch). Creo que este dato aporta mayor verificabilidad y neutralidad a la entrada. Un saludo. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:44 6 jun 2026 (UTC)
== Ediciones vandálicas ==
<templatestyles src="metaplantilla de avisos/styles.css" /><table style="{{#if:s|border:2px solid #{{#switch:advertencia|protección=bba|serio=b22222|borrar=b22222|borrado=b22222|rechazado=b22222|contenido=f28500|advertencia=f28500|estilo=f4c430|fusionar=9932cc|aviso=1e90ff|desarrollo=228b22|aceptado=228b22|#default=000000}};padding:0.5em; margin:0.5em auto;|}}" class="plainlinks ambox {{#switch:advertencia
| protección = ambox-protection
| serio = ambox-serious
| borrar = ambox-serious
| borrado = ambox-serious
| rechazado = ambox-serious
| contenido = ambox-content
| advertencia = ambox-content
| estilo = ambox-style
| fusionar = ambox-merge
| aviso = ambox-notice
| desarrollo = ambox-growth
| aceptado = ambox-growth
| #default = ambox-notice
}}">
<tr>
<td class="ambox-image">
{{#ifeq:{{{imagen}}}|ninguna
| <!-- no hay celda con imagen; celda vacía necesaria para que la celda de texto tenga anchura 100% -->
| <div style="width:52px;"> {{#switch:advertencia
| protección = [[Imagen:OOjs UI icon lock.svg|40px|class=skin-invert-image]]
| serio = [[Imagen:OOjs UI icon error-destructive.svg|40px]]
| borrar = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| borrado = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| rechazado = [[Imagen:OOjs UI icon close-ltr-darkred.svg|40px]]
| contenido = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| advertencia = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| estilo = [[Imagen:OOjs UI icon broom.svg|40px]]
| fusionar = [[Imagen:Merge-short arrows.svg]]
| aviso = [[Imagen:OOjs UI icon information-progressive.svg|40px]]
| desarrollo = [[Imagen:OOjs UI icon puzzle-ltr-green.svg|40px]]
| aceptado = [[Imagen:OOjs UI icon check-green.svg|40px]]
| vacío = [[Imagen:No image.svg]]
| #default = [[Archivo:OOjs UI icon information-progressive.svg|40px]]
}}</div>
}}</td>
<td class="ambox-text">Por favor, detente. Si continúas vandalizando páginas{{ #if: | como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td>
{{#if:|
<td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td>
}}
</tr>
</table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC)
8npbd32om0i6lca7ahqlq5akyz95a9v
6117358
6117355
2026-06-06T19:46:41Z
Peter Bowman
34685
/* */ Respuesta
6117358
wikitext
text/x-wiki
<div style="padding:10px; font-size:101%; background:var(--background-color-success-subtle); color:var(--color-base); border: 1px dotted var(--border-color-notice);" >
Hola, Alex4660. Te damos la [[Wikcionario:Bienvenido, nuevo visitante|bienvenida a ''Wikcionario'']]. <small style="padding-left:150px">[[Wikcionario:Embajada|If you don't speak Spanish, please visit our Embassy]]</small>
Gracias por participar en el proyecto. Puedes encontrar algunas guías útiles aquí:
:<small>▶</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio.
:<small>▶</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''.
:<small>▶</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción;
:<small>▶</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles.
Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}.
{|
| Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(~~~~)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.png|right|Para firmar usa el botón indicado|link=]]
|}
Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable.<br />
Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div>
:saludos cordiales , nose porque
: se ha bajado mi información no encuentro el motivo [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 02:49 6 jun 2026 (UTC)
::Es contenido generado con LLM, aparte de que no tiene fuentes. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:06 6 jun 2026 (UTC)
:::estimado las fuentes se citan acá mismo , conadi inscribio el apellido a merced , no es originario de la etnia mapuche , alrededor del año 2012 fue registrado en conadi, pero el apellido originalmente es incierto aunque en francia se tienen los primeros registros https://es.geneanet.org/apellidos/GUILMAI , hay funtes confiables , el publicar esta informacion perjudica a quienes les interese su etimología. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 04:11 6 jun 2026 (UTC)
::::Hola, @[[Usuario:Alex4660|Alex4660]]. No has rebatido la acusación de que el contenido ha sido generado artificialmente. Si se vuelve a repetir, serás expulsado del proyecto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 07:51 6 jun 2026 (UTC)
:::::el contenido fue redactado por mí a partir de la información que he recopilado. Utilicé herramientas de corrección ortográfica y redacción para mejorar el texto, pero la investigación y la selección de las fuentes son de mi autoría.
:::::Si existen problemas concretos de verificabilidad, formato o calidad de las referencias, agradecería que se me indicaran para corregirlos. Mi intención es aportar información verificable y adecuadamente referenciada sobre la etimología y los registros documentados del apellido, vuelvo a reiterar que no me parece adecuado mantener informacion que es incompleta solo trato de hacer lo que es correcto. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:08 6 jun 2026 (UTC)
::::::Hola, @[[Usuario:Alex4660|Alex4660]]. De acuerdo, gracias por aclarar lo de la IA. Con respecto a la etimología, no está permitido practicar la [[w:WP:IO#¿Qué es investigación original?|investigación original]]. Las fuentes que has encontrado podrían ser válidas para atestiguar la existencia del apellido <u>francés</u> Guilmai en <u>Francia</u>, pero necesitamos una fuente que hable explícitamente del apellido <u>español</u> Guilmai; parto del desconocimiento de si son el mismo o no, y la información que aportaste no es concluyente. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:46 6 jun 2026 (UTC)
:::::He actualizado la sección de etimología añadiendo una fuente documental directa (un registro de 1795 alojado en FamilySearch). Creo que este dato aporta mayor verificabilidad y neutralidad a la entrada. Un saludo. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:44 6 jun 2026 (UTC)
== Ediciones vandálicas ==
<templatestyles src="metaplantilla de avisos/styles.css" /><table style="{{#if:s|border:2px solid #{{#switch:advertencia|protección=bba|serio=b22222|borrar=b22222|borrado=b22222|rechazado=b22222|contenido=f28500|advertencia=f28500|estilo=f4c430|fusionar=9932cc|aviso=1e90ff|desarrollo=228b22|aceptado=228b22|#default=000000}};padding:0.5em; margin:0.5em auto;|}}" class="plainlinks ambox {{#switch:advertencia
| protección = ambox-protection
| serio = ambox-serious
| borrar = ambox-serious
| borrado = ambox-serious
| rechazado = ambox-serious
| contenido = ambox-content
| advertencia = ambox-content
| estilo = ambox-style
| fusionar = ambox-merge
| aviso = ambox-notice
| desarrollo = ambox-growth
| aceptado = ambox-growth
| #default = ambox-notice
}}">
<tr>
<td class="ambox-image">
{{#ifeq:{{{imagen}}}|ninguna
| <!-- no hay celda con imagen; celda vacía necesaria para que la celda de texto tenga anchura 100% -->
| <div style="width:52px;"> {{#switch:advertencia
| protección = [[Imagen:OOjs UI icon lock.svg|40px|class=skin-invert-image]]
| serio = [[Imagen:OOjs UI icon error-destructive.svg|40px]]
| borrar = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| borrado = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| rechazado = [[Imagen:OOjs UI icon close-ltr-darkred.svg|40px]]
| contenido = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| advertencia = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| estilo = [[Imagen:OOjs UI icon broom.svg|40px]]
| fusionar = [[Imagen:Merge-short arrows.svg]]
| aviso = [[Imagen:OOjs UI icon information-progressive.svg|40px]]
| desarrollo = [[Imagen:OOjs UI icon puzzle-ltr-green.svg|40px]]
| aceptado = [[Imagen:OOjs UI icon check-green.svg|40px]]
| vacío = [[Imagen:No image.svg]]
| #default = [[Archivo:OOjs UI icon information-progressive.svg|40px]]
}}</div>
}}</td>
<td class="ambox-text">Por favor, detente. Si continúas vandalizando páginas{{ #if: | como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td>
{{#if:|
<td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td>
}}
</tr>
</table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC)
e4sf89gmx45ce6vyziyg38pig59ou0a
6117361
6117358
2026-06-06T19:49:48Z
Peter Bowman
34685
/* */ Respuesta
6117361
wikitext
text/x-wiki
<div style="padding:10px; font-size:101%; background:var(--background-color-success-subtle); color:var(--color-base); border: 1px dotted var(--border-color-notice);" >
Hola, Alex4660. Te damos la [[Wikcionario:Bienvenido, nuevo visitante|bienvenida a ''Wikcionario'']]. <small style="padding-left:150px">[[Wikcionario:Embajada|If you don't speak Spanish, please visit our Embassy]]</small>
Gracias por participar en el proyecto. Puedes encontrar algunas guías útiles aquí:
:<small>▶</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio.
:<small>▶</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''.
:<small>▶</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción;
:<small>▶</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles.
Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}.
{|
| Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(~~~~)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.png|right|Para firmar usa el botón indicado|link=]]
|}
Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable.<br />
Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div>
:saludos cordiales , nose porque
: se ha bajado mi información no encuentro el motivo [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 02:49 6 jun 2026 (UTC)
::Es contenido generado con LLM, aparte de que no tiene fuentes. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:06 6 jun 2026 (UTC)
:::estimado las fuentes se citan acá mismo , conadi inscribio el apellido a merced , no es originario de la etnia mapuche , alrededor del año 2012 fue registrado en conadi, pero el apellido originalmente es incierto aunque en francia se tienen los primeros registros https://es.geneanet.org/apellidos/GUILMAI , hay funtes confiables , el publicar esta informacion perjudica a quienes les interese su etimología. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 04:11 6 jun 2026 (UTC)
::::Hola, @[[Usuario:Alex4660|Alex4660]]. No has rebatido la acusación de que el contenido ha sido generado artificialmente. Si se vuelve a repetir, serás expulsado del proyecto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 07:51 6 jun 2026 (UTC)
:::::el contenido fue redactado por mí a partir de la información que he recopilado. Utilicé herramientas de corrección ortográfica y redacción para mejorar el texto, pero la investigación y la selección de las fuentes son de mi autoría.
:::::Si existen problemas concretos de verificabilidad, formato o calidad de las referencias, agradecería que se me indicaran para corregirlos. Mi intención es aportar información verificable y adecuadamente referenciada sobre la etimología y los registros documentados del apellido, vuelvo a reiterar que no me parece adecuado mantener informacion que es incompleta solo trato de hacer lo que es correcto. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:08 6 jun 2026 (UTC)
::::::Hola, @[[Usuario:Alex4660|Alex4660]]. De acuerdo, gracias por aclarar lo de la IA. Con respecto a la etimología, no está permitido practicar la [[w:WP:IO#¿Qué es investigación original?|investigación original]]. Las fuentes que has encontrado podrían ser válidas para atestiguar la existencia del apellido <u>francés</u> Guilmai en <u>Francia</u>, pero necesitamos una fuente que hable explícitamente del apellido <u>español</u> Guilmai; parto del desconocimiento de si son el mismo o no, y la información que aportaste no es concluyente. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:46 6 jun 2026 (UTC)
:::::He actualizado la sección de etimología añadiendo una fuente documental directa (un registro de 1795 alojado en FamilySearch). Creo que este dato aporta mayor verificabilidad y neutralidad a la entrada. Un saludo. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:44 6 jun 2026 (UTC)
::::::Estaba redactando mi mensaje mientras tú escribías este. Como decía, lo único que demuestras es que existía un Guilmai en Francia, pero no que es el mismo Guilmai. La edición incluye además errores de formato. Voy a devolverla al estado anterior, y te animo a crear la sección francesa (debajo de la española), arriba tienes enlaces sobre cómo hacerlo. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:49 6 jun 2026 (UTC)
== Ediciones vandálicas ==
<templatestyles src="metaplantilla de avisos/styles.css" /><table style="{{#if:s|border:2px solid #{{#switch:advertencia|protección=bba|serio=b22222|borrar=b22222|borrado=b22222|rechazado=b22222|contenido=f28500|advertencia=f28500|estilo=f4c430|fusionar=9932cc|aviso=1e90ff|desarrollo=228b22|aceptado=228b22|#default=000000}};padding:0.5em; margin:0.5em auto;|}}" class="plainlinks ambox {{#switch:advertencia
| protección = ambox-protection
| serio = ambox-serious
| borrar = ambox-serious
| borrado = ambox-serious
| rechazado = ambox-serious
| contenido = ambox-content
| advertencia = ambox-content
| estilo = ambox-style
| fusionar = ambox-merge
| aviso = ambox-notice
| desarrollo = ambox-growth
| aceptado = ambox-growth
| #default = ambox-notice
}}">
<tr>
<td class="ambox-image">
{{#ifeq:{{{imagen}}}|ninguna
| <!-- no hay celda con imagen; celda vacía necesaria para que la celda de texto tenga anchura 100% -->
| <div style="width:52px;"> {{#switch:advertencia
| protección = [[Imagen:OOjs UI icon lock.svg|40px|class=skin-invert-image]]
| serio = [[Imagen:OOjs UI icon error-destructive.svg|40px]]
| borrar = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| borrado = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| rechazado = [[Imagen:OOjs UI icon close-ltr-darkred.svg|40px]]
| contenido = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| advertencia = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| estilo = [[Imagen:OOjs UI icon broom.svg|40px]]
| fusionar = [[Imagen:Merge-short arrows.svg]]
| aviso = [[Imagen:OOjs UI icon information-progressive.svg|40px]]
| desarrollo = [[Imagen:OOjs UI icon puzzle-ltr-green.svg|40px]]
| aceptado = [[Imagen:OOjs UI icon check-green.svg|40px]]
| vacío = [[Imagen:No image.svg]]
| #default = [[Archivo:OOjs UI icon information-progressive.svg|40px]]
}}</div>
}}</td>
<td class="ambox-text">Por favor, detente. Si continúas vandalizando páginas{{ #if: | como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td>
{{#if:|
<td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td>
}}
</tr>
</table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC)
mjgatevcl0kr5j4ry5itnegotemfktk
6117362
6117361
2026-06-06T19:50:16Z
Peter Bowman
34685
sección
6117362
wikitext
text/x-wiki
<div style="padding:10px; font-size:101%; background:var(--background-color-success-subtle); color:var(--color-base); border: 1px dotted var(--border-color-notice);" >
Hola, Alex4660. Te damos la [[Wikcionario:Bienvenido, nuevo visitante|bienvenida a ''Wikcionario'']]. <small style="padding-left:150px">[[Wikcionario:Embajada|If you don't speak Spanish, please visit our Embassy]]</small>
Gracias por participar en el proyecto. Puedes encontrar algunas guías útiles aquí:
:<small>▶</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio.
:<small>▶</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''.
:<small>▶</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción;
:<small>▶</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles.
Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}.
{|
| Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(~~~~)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.png|right|Para firmar usa el botón indicado|link=]]
|}
Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable.<br />
Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div>
== [[Guilmai]] ==
:saludos cordiales , nose porque
: se ha bajado mi información no encuentro el motivo [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 02:49 6 jun 2026 (UTC)
::Es contenido generado con LLM, aparte de que no tiene fuentes. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:06 6 jun 2026 (UTC)
:::estimado las fuentes se citan acá mismo , conadi inscribio el apellido a merced , no es originario de la etnia mapuche , alrededor del año 2012 fue registrado en conadi, pero el apellido originalmente es incierto aunque en francia se tienen los primeros registros https://es.geneanet.org/apellidos/GUILMAI , hay funtes confiables , el publicar esta informacion perjudica a quienes les interese su etimología. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 04:11 6 jun 2026 (UTC)
::::Hola, @[[Usuario:Alex4660|Alex4660]]. No has rebatido la acusación de que el contenido ha sido generado artificialmente. Si se vuelve a repetir, serás expulsado del proyecto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 07:51 6 jun 2026 (UTC)
:::::el contenido fue redactado por mí a partir de la información que he recopilado. Utilicé herramientas de corrección ortográfica y redacción para mejorar el texto, pero la investigación y la selección de las fuentes son de mi autoría.
:::::Si existen problemas concretos de verificabilidad, formato o calidad de las referencias, agradecería que se me indicaran para corregirlos. Mi intención es aportar información verificable y adecuadamente referenciada sobre la etimología y los registros documentados del apellido, vuelvo a reiterar que no me parece adecuado mantener informacion que es incompleta solo trato de hacer lo que es correcto. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:08 6 jun 2026 (UTC)
::::::Hola, @[[Usuario:Alex4660|Alex4660]]. De acuerdo, gracias por aclarar lo de la IA. Con respecto a la etimología, no está permitido practicar la [[w:WP:IO#¿Qué es investigación original?|investigación original]]. Las fuentes que has encontrado podrían ser válidas para atestiguar la existencia del apellido <u>francés</u> Guilmai en <u>Francia</u>, pero necesitamos una fuente que hable explícitamente del apellido <u>español</u> Guilmai; parto del desconocimiento de si son el mismo o no, y la información que aportaste no es concluyente. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:46 6 jun 2026 (UTC)
:::::He actualizado la sección de etimología añadiendo una fuente documental directa (un registro de 1795 alojado en FamilySearch). Creo que este dato aporta mayor verificabilidad y neutralidad a la entrada. Un saludo. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:44 6 jun 2026 (UTC)
::::::Estaba redactando mi mensaje mientras tú escribías este. Como decía, lo único que demuestras es que existía un Guilmai en Francia, pero no que es el mismo Guilmai. La edición incluye además errores de formato. Voy a devolverla al estado anterior, y te animo a crear la sección francesa (debajo de la española), arriba tienes enlaces sobre cómo hacerlo. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:49 6 jun 2026 (UTC)
== Ediciones vandálicas ==
<templatestyles src="metaplantilla de avisos/styles.css" /><table style="{{#if:s|border:2px solid #{{#switch:advertencia|protección=bba|serio=b22222|borrar=b22222|borrado=b22222|rechazado=b22222|contenido=f28500|advertencia=f28500|estilo=f4c430|fusionar=9932cc|aviso=1e90ff|desarrollo=228b22|aceptado=228b22|#default=000000}};padding:0.5em; margin:0.5em auto;|}}" class="plainlinks ambox {{#switch:advertencia
| protección = ambox-protection
| serio = ambox-serious
| borrar = ambox-serious
| borrado = ambox-serious
| rechazado = ambox-serious
| contenido = ambox-content
| advertencia = ambox-content
| estilo = ambox-style
| fusionar = ambox-merge
| aviso = ambox-notice
| desarrollo = ambox-growth
| aceptado = ambox-growth
| #default = ambox-notice
}}">
<tr>
<td class="ambox-image">
{{#ifeq:{{{imagen}}}|ninguna
| <!-- no hay celda con imagen; celda vacía necesaria para que la celda de texto tenga anchura 100% -->
| <div style="width:52px;"> {{#switch:advertencia
| protección = [[Imagen:OOjs UI icon lock.svg|40px|class=skin-invert-image]]
| serio = [[Imagen:OOjs UI icon error-destructive.svg|40px]]
| borrar = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| borrado = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| rechazado = [[Imagen:OOjs UI icon close-ltr-darkred.svg|40px]]
| contenido = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| advertencia = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| estilo = [[Imagen:OOjs UI icon broom.svg|40px]]
| fusionar = [[Imagen:Merge-short arrows.svg]]
| aviso = [[Imagen:OOjs UI icon information-progressive.svg|40px]]
| desarrollo = [[Imagen:OOjs UI icon puzzle-ltr-green.svg|40px]]
| aceptado = [[Imagen:OOjs UI icon check-green.svg|40px]]
| vacío = [[Imagen:No image.svg]]
| #default = [[Archivo:OOjs UI icon information-progressive.svg|40px]]
}}</div>
}}</td>
<td class="ambox-text">Por favor, detente. Si continúas vandalizando páginas{{ #if: | como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td>
{{#if:|
<td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td>
}}
</tr>
</table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC)
17fjjo317kes31asflmjckvpuepwl15
6117390
6117362
2026-06-06T23:10:04Z
Alex4660
182950
/* Guilmai */ Respuesta
6117390
wikitext
text/x-wiki
<div style="padding:10px; font-size:101%; background:var(--background-color-success-subtle); color:var(--color-base); border: 1px dotted var(--border-color-notice);" >
Hola, Alex4660. Te damos la [[Wikcionario:Bienvenido, nuevo visitante|bienvenida a ''Wikcionario'']]. <small style="padding-left:150px">[[Wikcionario:Embajada|If you don't speak Spanish, please visit our Embassy]]</small>
Gracias por participar en el proyecto. Puedes encontrar algunas guías útiles aquí:
:<small>▶</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio.
:<small>▶</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''.
:<small>▶</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones;
:<small>▶</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción;
:<small>▶</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles.
Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}.
{|
| Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(~~~~)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.png|right|Para firmar usa el botón indicado|link=]]
|}
Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable.<br />
Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div>
== [[Guilmai]] ==
:saludos cordiales , nose porque
: se ha bajado mi información no encuentro el motivo [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 02:49 6 jun 2026 (UTC)
::Es contenido generado con LLM, aparte de que no tiene fuentes. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:06 6 jun 2026 (UTC)
:::estimado las fuentes se citan acá mismo , conadi inscribio el apellido a merced , no es originario de la etnia mapuche , alrededor del año 2012 fue registrado en conadi, pero el apellido originalmente es incierto aunque en francia se tienen los primeros registros https://es.geneanet.org/apellidos/GUILMAI , hay funtes confiables , el publicar esta informacion perjudica a quienes les interese su etimología. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 04:11 6 jun 2026 (UTC)
::::Hola, @[[Usuario:Alex4660|Alex4660]]. No has rebatido la acusación de que el contenido ha sido generado artificialmente. Si se vuelve a repetir, serás expulsado del proyecto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 07:51 6 jun 2026 (UTC)
:::::el contenido fue redactado por mí a partir de la información que he recopilado. Utilicé herramientas de corrección ortográfica y redacción para mejorar el texto, pero la investigación y la selección de las fuentes son de mi autoría.
:::::Si existen problemas concretos de verificabilidad, formato o calidad de las referencias, agradecería que se me indicaran para corregirlos. Mi intención es aportar información verificable y adecuadamente referenciada sobre la etimología y los registros documentados del apellido, vuelvo a reiterar que no me parece adecuado mantener informacion que es incompleta solo trato de hacer lo que es correcto. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:08 6 jun 2026 (UTC)
::::::Hola, @[[Usuario:Alex4660|Alex4660]]. De acuerdo, gracias por aclarar lo de la IA. Con respecto a la etimología, no está permitido practicar la [[w:WP:IO#¿Qué es investigación original?|investigación original]]. Las fuentes que has encontrado podrían ser válidas para atestiguar la existencia del apellido <u>francés</u> Guilmai en <u>Francia</u>, pero necesitamos una fuente que hable explícitamente del apellido <u>español</u> Guilmai; parto del desconocimiento de si son el mismo o no, y la información que aportaste no es concluyente. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:46 6 jun 2026 (UTC)
:::::He actualizado la sección de etimología añadiendo una fuente documental directa (un registro de 1795 alojado en FamilySearch). Creo que este dato aporta mayor verificabilidad y neutralidad a la entrada. Un saludo. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:44 6 jun 2026 (UTC)
::::::Estaba redactando mi mensaje mientras tú escribías este. Como decía, lo único que demuestras es que existía un Guilmai en Francia, pero no que es el mismo Guilmai. La edición incluye además errores de formato. Voy a devolverla al estado anterior, y te animo a crear la sección francesa (debajo de la española), arriba tienes enlaces sobre cómo hacerlo. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:49 6 jun 2026 (UTC)
:::::::Entiendo perfectamente el punto sobre la investigación original y la síntesis de fuentes; tienes razón en que no puedo hacer una conexión directa. Recién estoy aprendiendo a usar las reglas internas de la web y la verdad es que me sorprende el nivel de detalle, rigor y rapidez de tu respuesta. Agradezco mucho que te tomaras el tiempo de orientarme. Siguiendo tu consejo, voy a crear la sección en francés para documentar los registros históricos de Europa de forma independiente. Me gustaría mucho seguir aprendiendo y colaborando en el proyecto en lo que se pueda. ¡Un saludo! [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 23:10 6 jun 2026 (UTC)
== Ediciones vandálicas ==
<templatestyles src="metaplantilla de avisos/styles.css" /><table style="{{#if:s|border:2px solid #{{#switch:advertencia|protección=bba|serio=b22222|borrar=b22222|borrado=b22222|rechazado=b22222|contenido=f28500|advertencia=f28500|estilo=f4c430|fusionar=9932cc|aviso=1e90ff|desarrollo=228b22|aceptado=228b22|#default=000000}};padding:0.5em; margin:0.5em auto;|}}" class="plainlinks ambox {{#switch:advertencia
| protección = ambox-protection
| serio = ambox-serious
| borrar = ambox-serious
| borrado = ambox-serious
| rechazado = ambox-serious
| contenido = ambox-content
| advertencia = ambox-content
| estilo = ambox-style
| fusionar = ambox-merge
| aviso = ambox-notice
| desarrollo = ambox-growth
| aceptado = ambox-growth
| #default = ambox-notice
}}">
<tr>
<td class="ambox-image">
{{#ifeq:{{{imagen}}}|ninguna
| <!-- no hay celda con imagen; celda vacía necesaria para que la celda de texto tenga anchura 100% -->
| <div style="width:52px;"> {{#switch:advertencia
| protección = [[Imagen:OOjs UI icon lock.svg|40px|class=skin-invert-image]]
| serio = [[Imagen:OOjs UI icon error-destructive.svg|40px]]
| borrar = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| borrado = [[Imagen:OOUI icon-like to delete 2.svg|40px]]
| rechazado = [[Imagen:OOjs UI icon close-ltr-darkred.svg|40px]]
| contenido = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| advertencia = [[Imagen:OOjs UI icon alert-warning.svg|40px]]
| estilo = [[Imagen:OOjs UI icon broom.svg|40px]]
| fusionar = [[Imagen:Merge-short arrows.svg]]
| aviso = [[Imagen:OOjs UI icon information-progressive.svg|40px]]
| desarrollo = [[Imagen:OOjs UI icon puzzle-ltr-green.svg|40px]]
| aceptado = [[Imagen:OOjs UI icon check-green.svg|40px]]
| vacío = [[Imagen:No image.svg]]
| #default = [[Archivo:OOjs UI icon information-progressive.svg|40px]]
}}</div>
}}</td>
<td class="ambox-text">Por favor, detente. Si continúas vandalizando páginas{{ #if: | como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td>
{{#if:|
<td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td>
}}
</tr>
</table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC)
20ona2ui53w0i6xqq26bj0uyh6c3o4v
ojinata
0
1064185
6117340
2026-06-06T19:22:43Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag}} === {{verbo|yag}} === ;1: {{plm|apagarse}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117340
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{verbo|yag}} ===
;1: {{plm|apagarse}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
lat6wneelzl2icwgwfw27tdg9w2xme2
saxána
0
1064186
6117342
2026-06-06T19:25:50Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag|sufijo|söx|-na}} === {{verbo|yag}} === ;1: {{plm|enfermar}}, [[enfermarse]]. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117342
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag|sufijo|söx|-na}}
=== {{verbo|yag}} ===
;1: {{plm|enfermar}}, [[enfermarse]]. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
ssy39we8ufkgwqty8eypn1zw5u6jph4
talafunáta
0
1064187
6117344
2026-06-06T19:30:02Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag}} === {{verbo|yag}} === ;1: {{plm|olvidar}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117344
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{verbo|yag}} ===
;1: {{plm|olvidar}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
6rjfefta7ijb0a3qmbbdkx29md7tjcq
uštáka
0
1064188
6117354
2026-06-06T19:43:51Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag}} === {{verbo|yag}} === ;1: {{plm|poner}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117354
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{verbo|yag}} ===
;1: {{plm|poner}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
rc7sp6y4z14mepn31mijm3nkyxfap6s
wéitana
0
1064189
6117356
2026-06-06T19:45:26Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag|en|wait}} === {{verbo|yag}} === ;1: {{plm|esperar}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117356
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag|en|wait}}
=== {{verbo|yag}} ===
;1: {{plm|esperar}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
97ybmsmqhb1k3tlg1tu5y3g2wj5uozz
werhi
0
1064190
6117357
2026-06-06T19:46:17Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag}} === {{verbo|yag}} === ;1: {{plm|caminar}} en el agua. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117357
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{verbo|yag}} ===
;1: {{plm|caminar}} en el agua. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
6fslsqzyk0s97pagvjfa0fr3cld4l9k
jakéa
0
1064191
6117359
2026-06-06T19:48:40Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag}} === {{verbo|yag}} === ;1: {{plm|decir}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117359
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{verbo|yag}} ===
;1: {{plm|decir}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
q9s4vz4ht4qjoddm5ldreiq20e5729q
jamanána
0
1064192
6117360
2026-06-06T19:49:33Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag}} === {{verbo|yag}} === ;1: {{plm|sanar}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117360
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{verbo|yag}} ===
;1: {{plm|sanar}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
8hy6e8erl33qjf5dx6tj82zo1pddad8
jamansína
0
1064193
6117363
2026-06-06T19:50:23Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag}} === {{verbo|yag}} === ;1: {{plm|vivir}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117363
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{verbo|yag}} ===
;1: {{plm|vivir}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
gb15py1axsvs04va13z0d9r38q4rkvv
jankina
0
1064194
6117365
2026-06-06T19:51:16Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag}} === {{verbo|yag}} === ;1: {{plm|creer}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117365
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{verbo|yag}} ===
;1: {{plm|creer}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
fa4855co45sckyvegojl8l4gxhb8k8t
makajola
0
1064195
6117367
2026-06-06T19:56:56Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag}} === {{sustantivo|yag}} === ;1: {{plm|recién nacido}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117367
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{sustantivo|yag}} ===
;1: {{plm|recién nacido}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
qm9fou50fdh4e6r16h0o4gjb8tuln1o
wanána
0
1064196
6117369
2026-06-06T19:58:24Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag}} === {{sustantivo|yag}} === ;1: {{plm|novio}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117369
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{sustantivo|yag}} ===
;1: {{plm|novio}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
lh7gep4ppraia6yvfzqp5jnfrwlcevg
šupun
0
1064197
6117370
2026-06-06T19:59:32Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag}} === {{sustantivo|yag}} === ;1: {{plm|soltero}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117370
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{sustantivo|yag}} ===
;1: {{plm|soltero}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
mqilv1ptbgnbb0gutcrqtwrr5j2oss1
šupunkipa
0
1064198
6117371
2026-06-06T20:00:06Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag|compuesto|šupun|kípa}} === {{sustantivo|yag}} === ;1: {{plm|soltera}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117371
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag|compuesto|šupun|kípa}}
=== {{sustantivo|yag}} ===
;1: {{plm|soltera}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
4k34umrqkscifm4kj73poeu3ufs19ng
waša
0
1064199
6117378
2026-06-06T22:15:48Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag}} === {{sustantivo|yag}} === ;1: {{plm|huérfano}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117378
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{sustantivo|yag}} ===
;1: {{plm|huérfano}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
f6dnj0hpx7mnp0mvkau45quz4gsd9zz
alatakaki
0
1064200
6117379
2026-06-06T22:17:27Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag}} === {{sustantivo|yag}} === ;1: {{plm|viuda}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117379
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{sustantivo|yag}} ===
;1: {{plm|viuda}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
dihj5muxtsdlvx57v88o2b8zq7nbwgr
6117380
6117379
2026-06-06T22:19:34Z
Egaina
73660
/* Sustantivo */
6117380
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{sustantivo|yag}} ===
;1: {{plm|viudo}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
c7wnz56es4h05v7qe3sg5wrdvimzq4h
6117382
6117380
2026-06-06T22:30:51Z
Egaina
73660
/* Sustantivo */
6117382
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{sustantivo|yag}} ===
;1: {{plm|viudo}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
;2: {{plm|dicho}} de [[aves]] cuya pareja está incubando.<ref>{{Bridges1933|p=50}}</ref>
== Referencias y notas ==
<references />
kbsgkacyjiiaozq0znhcflhqs52oh15
alatakakipa
0
1064201
6117381
2026-06-06T22:27:24Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag|compuesto|alatakaki|kípa}} === {{sustantivo|yag}} === ;1: {{plm|viuda}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117381
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag|compuesto|alatakaki|kípa}}
=== {{sustantivo|yag}} ===
;1: {{plm|viuda}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
6enly3mmmf8nt30bsj5bb5wq31zlejs
péak
0
1064202
6117384
2026-06-06T22:35:13Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag}} === {{sustantivo|yag}} === ;1: {{plm|marisco}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117384
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{sustantivo|yag}} ===
;1: {{plm|marisco}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
pttcorwn99i4zjbw69tk72jakj9tp57
chachis
0
1064203
6117387
2026-06-06T22:39:08Z
Egaina
73660
Página creada con «== {{lengua|yag}} == {{pron-graf|leng=yag}} === Etimología === {{etimología|leng=yag}} === {{sustantivo|yag}} === ;1: {{plm|reunión}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref> == Referencias y notas == <references />»
6117387
wikitext
text/x-wiki
== {{lengua|yag}} ==
{{pron-graf|leng=yag}}
=== Etimología ===
{{etimología|leng=yag}}
=== {{sustantivo|yag}} ===
;1: {{plm|reunión}}. <ref>{{referencia|c=libro|a=Zárraga, Cristina; Vogel, Oliver|t=Yapimata hau'usi kuta|año=2023}}</ref>
== Referencias y notas ==
<references />
7i7yq4fsh0or9p6hwui2qin737kd0i2
aire comprimido
0
1064205
6117395
2026-06-07T00:40:33Z
Tmagc
158167
Página creada con «{{desambiguación|}} == {{lengua|es}} == {{pron-graf}} === Etimología === {{etimología}}. ==== {{sustantivo masculino|es}} ==== {{es.sust|cop=s}} ;1 {{csem|armas}}: {{plm|arma de aire comprimido}}. ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <references />»
6117395
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
==== {{sustantivo masculino|es}} ====
{{es.sust|cop=s}}
;1 {{csem|armas}}: {{plm|arma de aire comprimido}}.
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
irwihe33x8xyfg6mcggis576jbwa1o9
6117396
6117395
2026-06-07T00:40:54Z
Tmagc
158167
6117396
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
==== {{locución sustantiva|es|masculina}} ====
{{es.sust|cop=s}}
;1 {{csem|armas}}: {{plm|arma de aire comprimido}}.
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
0586h5evagc8369buw15p8t92lqkb5v
arma de aire comprimido
0
1064206
6117397
2026-06-07T00:44:17Z
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: {{plm|arma de fuego}} que dispara proyectiles ([[balín|balines]]) a partir de la presión del aire, por contraposición a aquellas que emplean pólvora. Generalmente son no letales y con poco o nulo poder de penetración. ==== Traducciones ==== {{trad-arriba}} {{trad-abajo}} == Referencias y notas == <re…»
6117397
wikitext
text/x-wiki
{{desambiguación|}}
== {{lengua|es}} ==
{{pron-graf}}
=== Etimología ===
{{etimología}}.
==== {{locución|es|sustantiva|femenina}} ====
{{es.sust|cop=n}}
;1: {{plm|arma de fuego}} que dispara proyectiles ([[balín|balines]]) a partir de la presión del aire, por contraposición a aquellas que emplean pólvora. Generalmente son no letales y con poco o nulo poder de penetración.
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
mjtvudcl7jh5ohzc661buae7sqlse3u
6117398
6117397
2026-06-07T00:44:52Z
Tmagc
158167
6117398
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|armas}}: {{plm|arma de fuego}} que dispara proyectiles ([[balín|balines]]) a partir de la presión del aire, por contraposición a aquellas que emplean pólvora. Generalmente son no letales y con poco o nulo poder de penetración.
==== Traducciones ====
{{trad-arriba}}
{{trad-abajo}}
== Referencias y notas ==
<references />
kjrjxq8u6ddzf9fo5lc1jzwepqssxyr
jalot
0
1064207
6117403
2026-06-07T05:28:33Z
Apisite
115465
Página creada con «== {{lengua|vo}} == {{pron-graf|leng=vo}} === Etimología === {{etimología|leng=vo}}. === {{sustantivo|vo}} === ;1: {{plm|chalote}}. ==== Declinación ==== {{vo.sust}} == Referencias y notas == <references />»
6117403
wikitext
text/x-wiki
== {{lengua|vo}} ==
{{pron-graf|leng=vo}}
=== Etimología ===
{{etimología|leng=vo}}.
=== {{sustantivo|vo}} ===
;1: {{plm|chalote}}.
==== Declinación ====
{{vo.sust}}
== Referencias y notas ==
<references />
mtk9kkh1takeyolxgyhv16mc6yrqd9o