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.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, ns == 0 and cats or {}) end return export 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.."'''''&emsp;&emsp;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.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, ns == 0 and cats or {}) end return export 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.."'''''&emsp;&emsp;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.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, ns == 0 and cats or {}) end return export 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.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, ns == 0 and cats or {}) end return export 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.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, ns == 0 and cats or {}) end return export 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.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, ns == 0 and cats or {}) end return export 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.."'''''&emsp;&emsp;paradigma"..(#paradigmas_t > 1 and "s" or "")..": "..concat(paradigmas_t, ", ").." ("..(es_irregular and "irregular" or "regular")..")", t, ns == 0 and cats or {}) end return export 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>&#x25B6;</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio. :<small>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}. {| | Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(&#126;&#126;&#126;&#126;)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.png|right|Para firmar usa el botón indicado|link=]] |} Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable.<br /> Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div> :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: |&nbsp;como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td> {{#if:| <td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td> }} </tr> </table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC) 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>&#x25B6;</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio. :<small>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}. {| | Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(&#126;&#126;&#126;&#126;)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.png|right|Para firmar usa el botón indicado|link=]] |} Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable.<br /> Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div> :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: |&nbsp;como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td> {{#if:| <td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td> }} </tr> </table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC) 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>&#x25B6;</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio. :<small>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}. {| | Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(&#126;&#126;&#126;&#126;)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.png|right|Para firmar usa el botón indicado|link=]] |} Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable.<br /> Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div> :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: |&nbsp;como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td> {{#if:| <td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td> }} </tr> </table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC) 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>&#x25B6;</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio. :<small>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}. {| | Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(&#126;&#126;&#126;&#126;)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.png|right|Para firmar usa el botón indicado|link=]] |} Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable.<br /> Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div> :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: |&nbsp;como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td> {{#if:| <td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td> }} </tr> </table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC) 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>&#x25B6;</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio. :<small>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}. {| | Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(&#126;&#126;&#126;&#126;)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.png|right|Para firmar usa el botón indicado|link=]] |} Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable.<br /> Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div> == [[Guilmai]] == :saludos cordiales , nose porque : se ha bajado mi información no encuentro el motivo [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 02:49 6 jun 2026 (UTC) ::Es contenido generado con LLM, aparte de que no tiene fuentes. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:06 6 jun 2026 (UTC) :::estimado las fuentes se citan acá mismo , conadi inscribio el apellido a merced , no es originario de la etnia mapuche , alrededor del año 2012 fue registrado en conadi, pero el apellido originalmente es incierto aunque en francia se tienen los primeros registros https://es.geneanet.org/apellidos/GUILMAI , hay funtes confiables , el publicar esta informacion perjudica a quienes les interese su etimología. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 04:11 6 jun 2026 (UTC) ::::Hola, @[[Usuario:Alex4660|Alex4660]]. No has rebatido la acusación de que el contenido ha sido generado artificialmente. Si se vuelve a repetir, serás expulsado del proyecto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 07:51 6 jun 2026 (UTC) :::::el contenido fue redactado por mí a partir de la información que he recopilado. Utilicé herramientas de corrección ortográfica y redacción para mejorar el texto, pero la investigación y la selección de las fuentes son de mi autoría. :::::Si existen problemas concretos de verificabilidad, formato o calidad de las referencias, agradecería que se me indicaran para corregirlos. Mi intención es aportar información verificable y adecuadamente referenciada sobre la etimología y los registros documentados del apellido, vuelvo a reiterar que no me parece adecuado mantener informacion que es incompleta solo trato de hacer lo que es correcto. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:08 6 jun 2026 (UTC) ::::::Hola, @[[Usuario:Alex4660|Alex4660]]. De acuerdo, gracias por aclarar lo de la IA. Con respecto a la etimología, no está permitido practicar la [[w:WP:IO#¿Qué es investigación original?|investigación original]]. Las fuentes que has encontrado podrían ser válidas para atestiguar la existencia del apellido <u>francés</u> Guilmai en <u>Francia</u>, pero necesitamos una fuente que hable explícitamente del apellido <u>español</u> Guilmai; parto del desconocimiento de si son el mismo o no, y la información que aportaste no es concluyente. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:46 6 jun 2026 (UTC) :::::He actualizado la sección de etimología añadiendo una fuente documental directa (un registro de 1795 alojado en FamilySearch). Creo que este dato aporta mayor verificabilidad y neutralidad a la entrada. Un saludo. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:44 6 jun 2026 (UTC) ::::::Estaba redactando mi mensaje mientras tú escribías este. Como decía, lo único que demuestras es que existía un Guilmai en Francia, pero no que es el mismo Guilmai. La edición incluye además errores de formato. Voy a devolverla al estado anterior, y te animo a crear la sección francesa (debajo de la española), arriba tienes enlaces sobre cómo hacerlo. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:49 6 jun 2026 (UTC) == Ediciones vandálicas == <templatestyles src="metaplantilla de avisos/styles.css" /><table style="{{#if:s|border:2px solid #{{#switch:advertencia|protección=bba|serio=b22222|borrar=b22222|borrado=b22222|rechazado=b22222|contenido=f28500|advertencia=f28500|estilo=f4c430|fusionar=9932cc|aviso=1e90ff|desarrollo=228b22|aceptado=228b22|#default=000000}};padding:0.5em; margin:0.5em auto;|}}" class="plainlinks ambox {{#switch:advertencia | protección = ambox-protection | serio = ambox-serious | borrar = ambox-serious | borrado = ambox-serious | rechazado = ambox-serious | contenido = ambox-content | advertencia = ambox-content | estilo = ambox-style | fusionar = ambox-merge | aviso = ambox-notice | desarrollo = ambox-growth | aceptado = ambox-growth | #default = ambox-notice }}"> <tr> <td class="ambox-image"> {{#ifeq:{{{imagen}}}|ninguna | <!-- no hay celda con imagen; celda vacía necesaria para que la celda de texto tenga anchura 100% --> | <div style="width:52px;"> {{#switch:advertencia | protección = [[Imagen:OOjs UI icon lock.svg|40px|class=skin-invert-image]] | serio = [[Imagen:OOjs UI icon error-destructive.svg|40px]] | borrar = [[Imagen:OOUI icon-like to delete 2.svg|40px]] | borrado = [[Imagen:OOUI icon-like to delete 2.svg|40px]] | rechazado = [[Imagen:OOjs UI icon close-ltr-darkred.svg|40px]] | contenido = [[Imagen:OOjs UI icon alert-warning.svg|40px]] | advertencia = [[Imagen:OOjs UI icon alert-warning.svg|40px]] | estilo = [[Imagen:OOjs UI icon broom.svg|40px]] | fusionar = [[Imagen:Merge-short arrows.svg]] | aviso = [[Imagen:OOjs UI icon information-progressive.svg|40px]] | desarrollo = [[Imagen:OOjs UI icon puzzle-ltr-green.svg|40px]] | aceptado = [[Imagen:OOjs UI icon check-green.svg|40px]] | vacío = [[Imagen:No image.svg]] | #default = [[Archivo:OOjs UI icon information-progressive.svg|40px]] }}</div> }}</td> <td class="ambox-text">Por favor, detente. Si continúas vandalizando páginas{{ #if: |&nbsp;como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td> {{#if:| <td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td> }} </tr> </table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC) 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>&#x25B6;</small> El '''[[Ayuda:Tutorial|tutorial del Wikcionario]]''' te ofrece una introducción básica sobre la manera de editar con el lenguaje "wiki"; si ya has editado en ''Wikipedia'', mira '''[[Ayuda:Para editores de Wikipedia|para editores de Wikipedia]]''' en cambio. :<small>&#x25B6;</small> La '''[[Wikcionario:Ayuda|página de ayuda]]''' explica la filosofía básica del proyecto, cómo explorarlo y cómo colaborar; hay muchos otros recursos en el '''[[Ayuda:Mapa de ayuda|Mapa de ayuda]]'''. :<small>&#x25B6;</small> Las '''[[Ayuda:Cómo se edita una página|instrucciones para editar una página]]''' explican cómo hacer ediciones; :<small>&#x25B6;</small> La '''[[Wikcionario:Guía de estilo|guía de estilo]]''' es esencial para orientar la redacción; :<small>&#x25B6;</small> Recuerda también que casi siempre las entradas se crean con [[minúscula]]s. Mira '''[[Wikcionario:Convenciones para nombrar entradas|cómo nombrar entradas]]''' para más detalles. Si quieres saber algo más, puedes dirigirte a la comunidad en el '''[[Wikcionario:Café|Café]]'''. No temas preguntar, estamos aquí para ayudarte. Puedes también conectarte con otros editores en el '''{{IRC|wiktionary-es|canal IRC}}''' o en el {{IRC|wikimedia-ayuda|canal de ayuda}}. {| | Esta es tu página de discusión, donde otros wikcionaristas pueden contactarte. Debes responder a un mensaje de otro usuario en '''su''' página de discusión, porque así le saldrá el aviso de «mensajes nuevos» y podrá enterarse de tu respuesta. No olvides '''[[Ayuda:Cómo se edita una página#Firmar un comentario|firmar tu mensaje]]''' con cuatro tildes <nowiki>(&#126;&#126;&#126;&#126;)</nowiki>, con la combinación de teclas {{tecla|Alt Gr|4}}, o usando el botón correspondiente que hay en la parte superior de la caja de edición. || [[Archivo:Signature button.png|right|Para firmar usa el botón indicado|link=]] |} Esperamos que pases buenos momentos por aquí y que la colaboración te resulte agradable.<br /> Saludos muy cordiales, [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC).</div> == [[Guilmai]] == :saludos cordiales , nose porque : se ha bajado mi información no encuentro el motivo [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 02:49 6 jun 2026 (UTC) ::Es contenido generado con LLM, aparte de que no tiene fuentes. [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 04:06 6 jun 2026 (UTC) :::estimado las fuentes se citan acá mismo , conadi inscribio el apellido a merced , no es originario de la etnia mapuche , alrededor del año 2012 fue registrado en conadi, pero el apellido originalmente es incierto aunque en francia se tienen los primeros registros https://es.geneanet.org/apellidos/GUILMAI , hay funtes confiables , el publicar esta informacion perjudica a quienes les interese su etimología. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 04:11 6 jun 2026 (UTC) ::::Hola, @[[Usuario:Alex4660|Alex4660]]. No has rebatido la acusación de que el contenido ha sido generado artificialmente. Si se vuelve a repetir, serás expulsado del proyecto. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 07:51 6 jun 2026 (UTC) :::::el contenido fue redactado por mí a partir de la información que he recopilado. Utilicé herramientas de corrección ortográfica y redacción para mejorar el texto, pero la investigación y la selección de las fuentes son de mi autoría. :::::Si existen problemas concretos de verificabilidad, formato o calidad de las referencias, agradecería que se me indicaran para corregirlos. Mi intención es aportar información verificable y adecuadamente referenciada sobre la etimología y los registros documentados del apellido, vuelvo a reiterar que no me parece adecuado mantener informacion que es incompleta solo trato de hacer lo que es correcto. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:08 6 jun 2026 (UTC) ::::::Hola, @[[Usuario:Alex4660|Alex4660]]. De acuerdo, gracias por aclarar lo de la IA. Con respecto a la etimología, no está permitido practicar la [[w:WP:IO#¿Qué es investigación original?|investigación original]]. Las fuentes que has encontrado podrían ser válidas para atestiguar la existencia del apellido <u>francés</u> Guilmai en <u>Francia</u>, pero necesitamos una fuente que hable explícitamente del apellido <u>español</u> Guilmai; parto del desconocimiento de si son el mismo o no, y la información que aportaste no es concluyente. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:46 6 jun 2026 (UTC) :::::He actualizado la sección de etimología añadiendo una fuente documental directa (un registro de 1795 alojado en FamilySearch). Creo que este dato aporta mayor verificabilidad y neutralidad a la entrada. Un saludo. [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 19:44 6 jun 2026 (UTC) ::::::Estaba redactando mi mensaje mientras tú escribías este. Como decía, lo único que demuestras es que existía un Guilmai en Francia, pero no que es el mismo Guilmai. La edición incluye además errores de formato. Voy a devolverla al estado anterior, y te animo a crear la sección francesa (debajo de la española), arriba tienes enlaces sobre cómo hacerlo. Un saludo, [[Usuario:Peter Bowman|Peter Bowman]] ([[Usuario discusión:Peter Bowman|discusión]]) 19:49 6 jun 2026 (UTC) :::::::Entiendo perfectamente el punto sobre la investigación original y la síntesis de fuentes; tienes razón en que no puedo hacer una conexión directa. Recién estoy aprendiendo a usar las reglas internas de la web y la verdad es que me sorprende el nivel de detalle, rigor y rapidez de tu respuesta. Agradezco mucho que te tomaras el tiempo de orientarme. Siguiendo tu consejo, voy a crear la sección en francés para documentar los registros históricos de Europa de forma independiente. Me gustaría mucho seguir aprendiendo y colaborando en el proyecto en lo que se pueda. ¡Un saludo! [[Usuario:Alex4660|Alex4660]] ([[Usuario discusión:Alex4660|discusión]]) 23:10 6 jun 2026 (UTC) == Ediciones vandálicas == <templatestyles src="metaplantilla de avisos/styles.css" /><table style="{{#if:s|border:2px solid #{{#switch:advertencia|protección=bba|serio=b22222|borrar=b22222|borrado=b22222|rechazado=b22222|contenido=f28500|advertencia=f28500|estilo=f4c430|fusionar=9932cc|aviso=1e90ff|desarrollo=228b22|aceptado=228b22|#default=000000}};padding:0.5em; margin:0.5em auto;|}}" class="plainlinks ambox {{#switch:advertencia | protección = ambox-protection | serio = ambox-serious | borrar = ambox-serious | borrado = ambox-serious | rechazado = ambox-serious | contenido = ambox-content | advertencia = ambox-content | estilo = ambox-style | fusionar = ambox-merge | aviso = ambox-notice | desarrollo = ambox-growth | aceptado = ambox-growth | #default = ambox-notice }}"> <tr> <td class="ambox-image"> {{#ifeq:{{{imagen}}}|ninguna | <!-- no hay celda con imagen; celda vacía necesaria para que la celda de texto tenga anchura 100% --> | <div style="width:52px;"> {{#switch:advertencia | protección = [[Imagen:OOjs UI icon lock.svg|40px|class=skin-invert-image]] | serio = [[Imagen:OOjs UI icon error-destructive.svg|40px]] | borrar = [[Imagen:OOUI icon-like to delete 2.svg|40px]] | borrado = [[Imagen:OOUI icon-like to delete 2.svg|40px]] | rechazado = [[Imagen:OOjs UI icon close-ltr-darkred.svg|40px]] | contenido = [[Imagen:OOjs UI icon alert-warning.svg|40px]] | advertencia = [[Imagen:OOjs UI icon alert-warning.svg|40px]] | estilo = [[Imagen:OOjs UI icon broom.svg|40px]] | fusionar = [[Imagen:Merge-short arrows.svg]] | aviso = [[Imagen:OOjs UI icon information-progressive.svg|40px]] | desarrollo = [[Imagen:OOjs UI icon puzzle-ltr-green.svg|40px]] | aceptado = [[Imagen:OOjs UI icon check-green.svg|40px]] | vacío = [[Imagen:No image.svg]] | #default = [[Archivo:OOjs UI icon information-progressive.svg|40px]] }}</div> }}</td> <td class="ambox-text">Por favor, detente. Si continúas vandalizando páginas{{ #if: |&nbsp;como lo hiciste en [[{{{1}}}]] | }}, un [[Wikcionario:Administradores|administrador]] bloqueará tu cuenta y no podrás continuar editando en Wikcionario.</td> {{#if:| <td class="ambox-imageright"><div style="width:52px"> {{{imagen derecha}}} </div></td> }} </tr> </table> [[Usuario:Tmagc|Tmagc]] ([[Usuario discusión:Tmagc|discusión]]) 01:07 6 jun 2026 (UTC) 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