1 /***************************************************************************
2 verbspanish.cpp - description
4 begin : Sun Dec 23 2001
5 copyright : (C) 2001 by Arnold Kraschinski
6 email : arnold.k67@gmx.de
7 ***************************************************************************/
9 /***************************************************************************
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
16 ***************************************************************************/
18 #include "verbspanish.h"
20 // include files for Qt
22 // application specific includes
24 endingsArray
verbSpanish::verbEndings
= { { {"o", "as", "a", "amos", "áis", "an"}, /* presente */
25 {"o", "es", "e", "emos", "éis", "en"},
26 {"o", "es", "e", "imos", "ís", "en"}},
27 { {"aba", "abas", "aba", "ábamos", "abais", "aban"}, /*imperfecto */
28 {"ía", "ías", "ía", "íamos", "íais", "ían"},
29 {"ía", "ías", "ía", "íamos", "íais", "ían"}},
30 { {"é", "aste", "ó", "amos", "asteis", "aron"}, /* indefinido */
31 {"í", "iste", "ió", "imos", "isteis", "ieron"},
32 {"í", "iste", "ió", "imos", "isteis", "ieron"}},
33 { {"é", "ás", "á", "emos", "éis", "án"}, /* futuro */
34 {"é", "ás", "á", "emos", "éis", "án"},
35 {"é", "ás", "á", "emos", "éis", "án"}},
36 { {"ía", "ías", "ía", "íamos", "íais", "ían"}, /* condicional */
37 {"ía", "ías", "ía", "íamos", "íais", "ían"},
38 {"ía", "ías", "ía", "íamos", "íais", "ían"}},
39 { {"e", "es", "e", "emos", "éis", "en"}, /* subjuntivo presente */
40 {"a", "as", "a", "amos", "áis", "an"},
41 {"a", "as", "a", "amos", "áis", "an"}},
42 { {"-", "-", "-", "-", "-", "-"}, /* subjuntivo pasado */
43 {"-", "-", "-", "-", "-", "-"},
44 {"-", "-", "-", "-", "-", "-"}},
45 { {"%", "%", "%", "%", "%", "%"}, /* subjuntivo futuro */
46 {"%", "%", "%", "%", "%", "%"},
47 {"%", "%", "%", "%", "%", "%"}},
48 { {"+", "+", "+", "+", "+", "+"}, /* imperativo */
49 {"+", "+", "+", "+", "+", "+"},
50 {"+", "+", "+", "+", "+", "+"}}
53 QString
verbSpanish::refPron
[PERSONEN
] = {"me", "te", "se", "nos", "os", "se"};
54 QString
verbSpanish::estar
[MAX_TIEMPOS
][PERSONEN
] =
55 { {"estoy", "estás", "está", "estamos", "estáis", "están"},
56 {"estaba", "estabas", "estaba", "estábamos", "estabais", "estaban"},
57 {"estuve", "estuviste", "estuvo", "estuvimos", "estuvisteis", "estuvieron"},
58 {"estaré", "estarás", "estará", "estaremos", "estaréis", "estarán"},
59 {"estaría", "estaría", "estaría", "estaríamos", "estarías", "estarían"},
60 {"esté", "estés", "esté", "estemos", "estéis", "estén"},
61 {"estuviera o estuviese", "estuvieras o stuvieses", "estuviera o estuviese",
62 "estuviéramos o estuviésemos", "estuvierais o estuvieseis", "estuvieran o estuviesen"},
63 {"estuviere", "estuvieres", "estuviere", "estuviéremos", "estuviereis", "estuvieren"},
64 {"", "está", "esté", "estemos", "estad", "estén"}
67 QString
verbSpanish::haber
[MAX_TIEMPOS
][PERSONEN
] =
68 { {"he", "has", "ha", "hemos", "habéis", "han"},
69 {"había", "habías", "había", "habíamos", "habíais", "habían"},
70 {"hube", "hubiste", "hubo", "hubimos", "hubisteis", "hubieron"},
71 {"habré", "habrás", "habrá", "habremos", "habréis", "habrán"},
72 {"habría", "habrías", "habría", "habríamos", "habríais", "habrían"},
73 {"haya", "hayas", "haya", "hayamos", "hayáis", "hayan"},
74 {"hubiera o hubiese", "hubieras o hubieses", "hubiera o hubiese",
75 "hubiéramos o hubiésemos", "hubierais o hubieseis", "hubieran o hubiesen"},
76 {"hubiere", "hubieres", "hubiere", "hubiéremos", "hubiereis", "hubieren"},
77 {"", "he", "haya", "hayamos", "habed", "hayan"}
80 QString
verbSpanish::timeNames
[MAX_TIEMPOS
*MAX_SUBTYPES
] =
81 {"presente", "imperfecto", "indefinido", "futuro", "condicional",
82 "subjuntivo presente", "subjuntivo pasado", "subjuntivo futuro", "imperativo",
83 "presente progresivo", "imperfecto progresivo", "indefinido progresivo", "futuro progresivo", "condicional progresivo",
84 "subjuntivo presente progresivo", "subjuntivo pasado progresivo", "subjuntivo futuro progresivo", "error:form doesn't exist",
85 "presente perfecto", "imperfecto perfecto", "error:form doesn't exist", "futuro perfecto", "condicional perfecto",
86 "subjuntivo presente perfecto", "subjuntivo pasado perfecto", "subjuntivo futuro perfecto", "error:form doesn't exist",
89 QString
verbSpanish::groupNames
[MAX_GRUPPEN
] =
90 {"regular", "irregular", "e > ie", "o > ue", "u > ue", "e > i",
91 "c > qu", "g > gu", "z > c", "gu > gü", "c > z", "g > j",
92 "gu > g", "qu > c", "accent like 'enviar'",
93 "accent like 'continuar'", "missing i"};
96 int verbSpanish::maxTiempos
= MAX_TIEMPOS
;
97 int verbSpanish::maxSubtypes
= MAX_SUBTYPES
;
98 int verbSpanish::persons
= PERSONEN
;
99 int verbSpanish::maxForms
= MAX_TIEMPOS
* MAX_SUBTYPES
;
102 verbSpanish::verbSpanish()
113 for (z
= presente
; z
<= imperativo
; z
++)
115 for (p
= yo
; p
<= ellos
; p
++)
122 verbSpanish::verbSpanish(const verbSpanish
& v
)
127 if (IRREGULAR
!= group
)
135 for (z
= presente
; z
<= imperativo
; z
++)
136 for (p
= yo
; p
<= ellos
; p
++)
142 partizip
= v
.partizip
;
144 conjugated
= v
.conjugated
;
147 for (z
= presente
; z
<= imperativo
; z
++)
148 for (p
= yo
; p
<= ellos
; p
++)
149 forms
[z
][p
] = v
.forms
[z
][p
];
153 verbSpanish::~verbSpanish()
155 // momentan hat die Klasse gar keine dynamisch erstellten
156 // Elemente, insofern ist auch der Destruktor recht arbeitslos
159 verbSpanish
& verbSpanish::operator= (const verbSpanish
& v
)
162 return *this; // Selbstzuweisung abfangen
167 if (group
!= IRREGULAR
)
174 for (z
= presente
; z
<= imperativo
; z
++)
175 for (p
= yo
; p
<= ellos
; p
++)
181 partizip
= v
.partizip
;
182 conjugated
= v
.conjugated
;
185 for (z
= presente
; z
<= imperativo
; z
++)
186 for (p
= yo
; p
<= ellos
; p
++)
187 forms
[z
][p
] = v
.forms
[z
][p
];
192 // Der Vergleichsoperator prüft, ob zwei verb-Objekte das gleiche Verb meinen. Dazu
193 // werden die spanische und die fremdsprachliche Form geprüft.
194 bool verbSpanish::operator== (const verbSpanish
& v
) const
196 return ((spanish
== v
.spanish
) && vergleich(foreign
, v
.foreign
));
199 // prüft ob der QString mit der spanischen Form übereinstimmt.
200 bool verbSpanish::operator== (const QString
& s
) const
202 return (spanish
== s
);
205 // prüft die alphabetische Reihenfolge zweier Verben, dabei werden die spanischen Verben als
206 // Vergleichskriterium verwendet.
207 bool verbSpanish::operator< (const verbSpanish
& v
) const
209 return (spanish
< v
.spanish
) || ((spanish
== v
.spanish
) && (foreign
< v
.foreign
));
213 // Vergleicht die beiden Verbobjekte komplett, mit allen Formen und Feldern.
214 bool verbSpanish::allEqual(verbSpanish v
)
216 bool result
= ((spanish
== v
.spanish
) && (foreign
== v
.foreign
) && (group
== v
.group
));
217 if (result
&& (IRREGULAR
== group
))
223 result
= ((delAutoForm(gerund
) == delAutoForm(v
.gerund
)) && (delAutoForm(partizip
) == delAutoForm(v
.partizip
)));
228 for (z
= presente
; z
<= imperativo
; z
++)
229 for (p
= yo
; p
<= ellos
; p
++)
230 if (delAutoForm(forms
[z
][p
]) != delAutoForm(v
.forms
[z
][p
]))
237 // prüft, ob alle Stringfelder des Objektes leere Strings sind.
238 bool verbSpanish::isEmpty() const
240 bool result
= (spanish
.isEmpty() && foreign
.isEmpty());
241 if (result
&& (IRREGULAR
== group
))
243 result
= (gerund
.isEmpty() && partizip
.isEmpty());
248 for (z
= presente
; z
<= imperativo
; z
++)
249 for (p
= yo
; p
<= ellos
; p
++)
250 if (!forms
[z
][p
].isEmpty())
257 // Gibt den Verbstamm zurück. Dazu werden die letzten beiden Zeichen abgetrennt,
258 // handelt es sich um ein reflexives Verb, dann sind es vier Zeichen.
259 // Hier werden auch die Stammveränderungen der Gruppenverben durchgeführt.
260 QString
verbSpanish::getStem() const
266 s
.truncate(s
.length()-ab
);
270 // gibt das Verb in der nicht spanischen Sprache zurück
271 QString
verbSpanish::getForeign() const
276 // Setzt die nicht-spanische Bedeutung des Verbes. Dabei werden alle führenden und
277 // folgenden whitespaces gelöscht und alle im string enthaltenen whitespaces zu einem
278 // Leerzeichen umgewandelt.
279 // Die Funktion hat den Nebeneffekt, dass auch der String aus dem aufrufenden Program-
280 // code umgewandelt wird.
281 // Es wird nicht geprüft, ob der string keine Leerzeichen mehr enthält, denn das
282 // dürfte eigentlich nicht vorkommen.
283 void verbSpanish::setForeign(const QString
&s
)
285 foreign
= s
.simplifyWhiteSpace();
288 // gibt das Verb auf spanisch zurück
289 QString
verbSpanish::getSpanish() const
294 // Setzt die spanische Bedeutung des Verbes.
295 // Siehe auch die Bemerkungen zur Arbeitsweise der Funktionbei der setForeign Funktion.
296 void verbSpanish::setSpanish(const QString
&s
)
298 spanish
= s
.simplifyWhiteSpace();
301 // gibt die Gerundform des Verbes zurück. Dabei gilt: Alle Gruppenverben haben einen
302 // regelmäßigen Gerund. Nur die irregulären Verben haben eventuell auch eine andere Gerundform
303 QString
verbSpanish::getGerund()
307 return delAutoForm(gerund
);
310 // setzt die Gerundform des Verbes
311 // Siehe auch die Bemerkungen zur Arbeitsweise der Funktionbei der setForeign Funktion.
312 void verbSpanish::setGerund(const QString
&s
)
314 gerund
= s
.simplifyWhiteSpace();
317 // gibt die Partizipform der Verbes zurück.Dabei gilt: Alle Gruppenverben haben ein
318 // regelmäßiges Partizip. Nur die irregulären Verben haben eventuell auch eine andere Partizipform
319 QString
verbSpanish::getPartizip()
323 return delAutoForm(partizip
);
326 // setzt die Partizipform der Verbes
327 // Siehe auch die Bemerkungen zur Arbeitsweise der Funktionbei der setForeign Funktion.
328 void verbSpanish::setPartizip(const QString
&s
)
330 partizip
= s
.simplifyWhiteSpace();
333 // gibt die Endung des Verbes zurück.
334 endings
verbSpanish::getEnding(bool& good
)
336 if (spanish
.isEmpty())
342 endung
= spanish
.mid(spanish
.length()-4, 2);
346 endung
= spanish
.right(2);
353 if ((endung
== "ir")||(endung
== "ír"))
365 // qWarning("The class verb couldn't find the ending of the verb " + spanish + ".");
370 // gibt zurück, ob das Verb reflexiv ist. Dazu werden die letzten beiden Zeichen
371 // untersucht. Sind diese beiden 'se', dann ist es ein reflexives Verb.
372 bool verbSpanish::isReflexiv() const
374 return (spanish
.right(2) == "se");
377 // gibt das Reflexivpronomen zurück, das zu der angegebenen Person gehört.
378 QString
verbSpanish::getRefPron(int i
)
383 // prüft, ob es ein unregelmäßiges Verb ist
384 bool verbSpanish::isGroupVerb()
386 return (IRREGULAR
!= group
);
389 // setzen, ob ein Verb regelmäßig oder unregelmäßig ist
390 void verbSpanish::setGroup(const int g
)
395 // Gibt die angeforderte Verbform des Verbes zurück, die durch die Zeit t,
396 // die Person p und den Untertyp typ angegeben wird. Mit dieser Funktion können auch
397 // die zusammengesetzten Zeitforms erfragt werden.
398 // parts[0] = ref. Pron. part[1] = Hilfsverb parts[2] = verb
399 bool verbSpanish::getForm(int t
, int p
, int typ
, QString parts
[])
405 good
= conjugateAll();
406 // sich um das Reflexivpronomen kümmern
409 parts
[0] = getRefPron(p
);
413 // die anderen Teile der Form sammeln
416 // die normale Zeitenbildung: kein Hilfsverb, Zeitform
419 parts
[2] = forms
[t
][p
];
421 // die Verlaufsform der Zeitenbildung
423 parts
[1] = estar
[t
][p
];
426 // die Perfektform der Zeitenbildung
428 parts
[1] = haber
[t
][p
];
434 // Das '#' bei den automatisch erstellten Formen löschen.
435 parts
[2] = delAutoForm(parts
[2]);
440 // Eine überladene Funktion, die einen String zurückgibt.
441 QString
verbSpanish::getForm(int t
, int p
)
444 if (getForm(t
, p
, normal
, st
))
449 // setzt die angegebene Verbform mit int als Parameter
450 // Siehe auch die Bemerkungen zur Arbeitsweise der Funktion bei der setForeign Funktion.
451 void verbSpanish::setForm(int t
, int p
, QString s
)
453 forms
[t
][p
] = s
.simplifyWhiteSpace();
456 // bildet die Formen, d.h. hängt die Endungen an den unveränderlichen
458 // Die Form muss bisher ein leerer String sein.
459 bool verbSpanish::conjugateTime(const int t
, const QString
&s
)
462 for (int i
= yo
; i
<=ellos
; i
++)
464 if (forms
[t
][i
].isEmpty())
466 forms
[t
][i
] = s
+ verbEndings
[t
][getEnding(good
)][i
]+'#';
467 if (group
> IRREGULAR
)
468 good
= groupVerb(forms
[t
][i
], t
, i
);
474 // bildet die Formen des Präsens
475 // dazu wird an den Verbstamm die entsprechende Endung angehängt
476 bool verbSpanish::conjugatePresente()
478 QString s
= getStem();
479 return conjugateTime(presente
, s
);
482 // bildet die Formen des Imperfecto
483 // dazu wird an den Verbstamm die entsprechende Endung angehängt
484 bool verbSpanish::conjugateImperfecto()
486 QString s
= getStem();
487 return conjugateTime(imperfecto
, s
);
490 // bildet die Formen des Indefinido
491 // dazu wird an den Verbstamm die entsprechende Endung angehängt
492 bool verbSpanish::conjugateIndefinido()
494 QString s
= getStem();
495 return conjugateTime(indefinido
, s
);
498 // bildet die Formen des Futuro
499 // dazu wird die entsprechende Endung an den Infinitiv angehängt. Bei den reflexiven
500 // Verben muss das 'se' abgetrennt werden.
501 bool verbSpanish::conjugateFuturo()
503 QString s
= getSpanish();
505 s
= s
.left(s
.length()-2);
506 return conjugateTime(futuro
, s
);
509 // bildet die Formen des Conditional
510 // diese Formen werden ebenfalls vom Infinitiv des Verbes abgeleitet
511 bool verbSpanish::conjugateCondicional()
513 QString s
= getSpanish();
515 s
= s
.left(s
.length()-2);
516 return conjugateTime(condicional
, s
);
519 // IM ctor der Optionen-Klasse und beim Lesen der Optionen werden die nicht
520 // fertigen Zeiten abegewählt. NIcht vergessen!
521 bool verbSpanish::conjugateSubPresente()
523 // qWarning("Not yet implemented.");
527 bool verbSpanish::conjugateSubPasado()
529 // qWarning("Not yet implemented.");
533 bool verbSpanish::conjugateImperativo()
535 // qWarning("Not yet implemented.");
539 // konjugiert alle Zeitenformen
540 bool verbSpanish::conjugateAll()
543 good
= good
&& conjugatePresente();
544 good
= good
&& conjugateImperfecto();
545 good
= good
&& conjugateIndefinido();
546 good
= good
&& conjugateFuturo();
547 good
= good
&& conjugateCondicional();
548 good
= good
&& conjugateSubPresente();
549 good
= good
&& conjugateSubPasado();
550 good
= good
&& conjugateImperativo();
551 if (partizip
.isEmpty())
553 partizip
= getStem();
554 switch (getEnding(good
))
567 if (gerund
.isEmpty())
570 switch (getEnding(good
))
577 // Bei den Verben der Gruppe 16 fällt das i weg.
578 if (getGroup() == 16)
582 // Bei Verben der Gruppe 5 ändert sich der Stamm für den Gerund
585 int pos
= gerund
.findRev("e");
588 gerund
.replace(pos
, 1, "i");
603 // Stringvergleich, bei dem es nur auf ähnlich Bestandteile ankommt.
604 // Bestandteile sind durch Komma getrennt.
605 bool verbSpanish::vergleich(const QString
& s1
, const QString
& s2
) const
609 int r
=s1
.find(",", l
);
610 while ((l
<s1
.length()) && (false==gleich
))
614 if (s2
.find(s1
.mid(l
, r
-l
).simplifyWhiteSpace(), 0) != -1)
627 // returns true if the form is automatic generated and has a '#' on the right end.
628 bool verbSpanish::isAutoForm(QString
& s
) const
630 if ("#" == s
.right(1))
635 // löscht das '#' einer automatisch generierten Form
636 QString
verbSpanish::delAutoForm(QString s
) const
639 s
= s
.left(s
.length()-1);
643 // does the changes for group verbs
644 // The verbs are divided in several groups:
659 // 14 -> <accent like 'enviar'>
660 // 15 -> <accent like 'continuar'>
663 bool verbSpanish::groupVerb(QString
&s
, int time
/*=-1*/, int person
/*=-1*/)
670 // betrifft den Presente und den Subjuntivo Presente und einige Imperativformen
671 // dabei jeweils die Personen 1-3 im Singular und die 3. Person Plural.
672 // Subjuntivo Presente wird hier nicht bearbeitet, weil der von der ersten Person
673 // Singular abgeleitet wird und die sollte schon richtig sein.
674 if ((presente
== time
) || (imperativo
== time
))
676 if ((nosotros
!= person
) && (vosotros
!= person
))
678 pos
= s
.findRev("e");
680 s
.replace(pos
, 1, "ie");
685 // betrifft den Presente und den Subjuntivo Presente und einige Imperativformen
686 // dabei jeweils die Personen 1-3 im Singular und die 3. Person Plural.
687 // Subjuntivo Presente wird hier nicht bearbeitet, weil der von der ersten Person
688 // Singular abgeleitet wird und die sollte schon richtig sein.
689 if ((presente
== time
) || (imperativo
== time
))
691 if ((nosotros
!= person
) && (vosotros
!= person
))
693 pos
= s
.findRev("o", -3);
695 s
.replace(pos
, 1, "ue");
700 // betrifft den Presente und den Subjuntivo Presente und einige Imperativformen
701 // dabei jeweils die Personen 1-3 im Singular und die 3. Person Plural.
702 // Subjuntivo Presente wird hier nicht bearbeitet, weil der von der ersten Person
703 // Singular abgeleitet wird und die sollte schon richtig sein.
704 if ((presente
== time
) || (imperativo
== time
))
706 if ((nosotros
!= person
) && (vosotros
!= person
))
708 pos
= s
.findRev("u");
710 s
.replace(pos
, 1, "ue");
715 // Betrifft Präsens (1.-3. Pers Singular und 3. Person Plural)
716 // die Gerundform, die wird allerdings nicht hier behandelt, sondern in conjugateAll()
717 // indefinido 3. Person Sg und Pl.
718 // alle subjuntivo Formen und den imperativo
719 if ((presente
== time
) && (person
!= nosotros
) && (person
!= vosotros
))
721 QString st
= getStem();
722 pos
= st
.findRev("e");
725 st
.replace(pos
, 1, "i");
726 s
= st
+ verbEndings
[time
][getEnding(good
)][person
];
730 if ((indefinido
== time
) && ((el
== person
)||(ellos
== person
)))
732 QString st
= getStem();
733 pos
= st
.findRev("e");
736 st
.replace(pos
, 1, "i");
737 s
= st
+ verbEndings
[time
][getEnding(good
)][person
];
741 if (imperativo
== time
)
744 // qWarning("Imperativo for group verbs isn't ready.");
747 case 6: // <c -> qu> (vor e wird c zu qu)
748 pos
= s
.findRev("ce");
750 s
.replace(pos
, 2, "que");
753 pos
= s
.findRev("cé");
755 s
.replace(pos
, 2, "qué");
758 case 7: // <g -> gu> (vor e wird g zu gu)
759 pos
= s
.findRev("ge");
761 s
.replace(pos
, 2, "gue");
764 pos
= s
.findRev("gé");
766 s
.replace(pos
, 2, "gué");
769 case 8: // <z -> c> (vor e wird z zu c)
770 pos
= s
.findRev("ze");
772 s
.replace(pos
, 2, "ce");
775 pos
= s
.findRev("zé");
777 s
.replace(pos
, 2, "cé");
780 case 9: // <gu -> gü> (vor e wird gu zu gü)
781 pos
= s
.findRev("gue");
783 s
.replace(pos
, 3, "güe");
786 pos
= s
.findRev("gué");
788 s
.replace(pos
, 3, "güé");
791 case 10: // <c -> z> (vor o und a wird c zu z)
792 pos
= s
.findRev("co");
794 s
.replace(pos
, 2, "zo");
797 pos
= s
.findRev("ca");
799 s
.replace(pos
, 2, "za");
802 case 11: // <g -> j> (vor o und a wird g zu j)
803 pos
= s
.findRev("ga");
805 s
.replace(pos
, 2, "ja");
808 pos
= s
.findRev("go");
810 s
.replace(pos
, 2, "jo");
813 case 12: // <gu -> g> (vor o und a wird gu zu g)
814 pos
= s
.findRev("guo");
816 s
.replace(pos
, 3, "go");
819 pos
= s
.findRev("gua");
821 s
.replace(pos
, 3, "ga");
824 case 13: // <qu -> c> (vor o und a wird qu zu c)
825 pos
= s
.findRev("quo");
827 s
.replace(pos
, 3, "co");
830 pos
= s
.findRev("qua");
832 s
.replace(pos
, 3, "ca");
835 case 14: // <accent like 'enviar'>
836 // Änderungen betreffen die Präsensformen außer nosotros und vosotros. Außerdem den
837 // Subjuntivo presente, der von der 1.Person singular abgeleitet wird und daher hier nicht
838 // behandelt werden muss. Des Weiteren sind einige Imperativformen betroffen.
839 if (presente
== time
)
844 s
= s
.left(s
.length()-3) + "ío#";
847 s
= s
.left(s
.length()-4) + "ías#";
850 s
= s
.left(s
.length()-3) + "ía#";
853 s
= s
.left(s
.length()-4) + "ían#";
860 if (imperativo
== time
)
865 s
= s
.left(s
.length()-3) + "ía#";
868 s
= s
.left(s
.length()-3) + "íe#";
871 s
= s
.left(s
.length()-4) + "íen#";
878 case 15: // <accent like 'continuar'>
879 // Änderungen betreffen die Präsensformen außer nosotros und vosotros. Außerdem den
880 // Subjuntivo presente, der von der 1.Person singular abgeleitet wird und daher hier nicht
881 // behandelt werden muss. Des Weiteren sind einige Imperativformen betroffen.
882 if (presente
== time
)
887 s
= s
.left(s
.length()-3) + "úo#";
890 s
= s
.left(s
.length()-4) + "úas#";
893 s
= s
.left(s
.length()-3) + "úa#";
896 s
= s
.left(s
.length()-4) + "úan#";
903 if (imperativo
== time
)
908 s
= s
.left(s
.length()-3) + "úa#";
911 s
= s
.left(s
.length()-3) + "úe#";
914 s
= s
.left(s
.length()-4) + "úen#";
921 case 16: // <missing i>
922 // Änderungen betreffen die Gerund-Form, den Indefinido in der 3. Person Singular
923 // und Plural und den Subjuntivo Pasado. Hier wird der Subjuntivo nicht bearbeitet,
924 // weil er von der 3. Person des Indefinido abgeleitet wird. Diese Form sollte bereits
925 // geändert sein. Ebenso wird der Gerund in der ConjugateAll()-Funktion behandelt.
926 if ("ió#" == s
.right(3))
928 s
= s
.left(s
.length()-3) + "ó#";
931 if ("ieron#" == s
.right(6))
933 s
= s
.left(s
.length()-6) + "eron#";