/*************************************************************************** verbspanish.cpp - description ------------------- begin : Sun Dec 23 2001 copyright : (C) 2001 by Arnold Kraschinski email : arnold.k67@gmx.de ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "verbspanish.h" // include files for TQt // application specific includes endingsArray verbSpanish::verbEndings = { { {"o", "as", "a", "amos", "áis", "an"}, /* presente */ {"o", "es", "e", "emos", "éis", "en"}, {"o", "es", "e", "imos", "ís", "en"}}, { {"aba", "abas", "aba", "ábamos", "abais", "aban"}, /*imperfecto */ {"ía", "ías", "ía", "íamos", "íais", "ían"}, {"ía", "ías", "ía", "íamos", "íais", "ían"}}, { {"é", "aste", "ó", "amos", "asteis", "aron"}, /* indefinido */ {"í", "iste", "ió", "imos", "isteis", "ieron"}, {"í", "iste", "ió", "imos", "isteis", "ieron"}}, { {"é", "ás", "á", "emos", "éis", "án"}, /* futuro */ {"é", "ás", "á", "emos", "éis", "án"}, {"é", "ás", "á", "emos", "éis", "án"}}, { {"ía", "ías", "ía", "íamos", "íais", "ían"}, /* condicional */ {"ía", "ías", "ía", "íamos", "íais", "ían"}, {"ía", "ías", "ía", "íamos", "íais", "ían"}}, { {"e", "es", "e", "emos", "éis", "en"}, /* subjuntivo presente */ {"a", "as", "a", "amos", "áis", "an"}, {"a", "as", "a", "amos", "áis", "an"}}, { {"-", "-", "-", "-", "-", "-"}, /* subjuntivo pasado */ {"-", "-", "-", "-", "-", "-"}, {"-", "-", "-", "-", "-", "-"}}, { {"%", "%", "%", "%", "%", "%"}, /* subjuntivo futuro */ {"%", "%", "%", "%", "%", "%"}, {"%", "%", "%", "%", "%", "%"}}, { {"+", "+", "+", "+", "+", "+"}, /* imperativo */ {"+", "+", "+", "+", "+", "+"}, {"+", "+", "+", "+", "+", "+"}} }; TQString verbSpanish::refPron[PERSONEN] = {"me", "te", "se", "nos", "os", "se"}; TQString verbSpanish::estar[MAX_TIEMPOS][PERSONEN] = { {"estoy", "estás", "está", "estamos", "estáis", "están"}, {"estaba", "estabas", "estaba", "estábamos", "estabais", "estaban"}, {"estuve", "estuviste", "estuvo", "estuvimos", "estuvisteis", "estuvieron"}, {"estaré", "estarás", "estará", "estaremos", "estaréis", "estarán"}, {"estaría", "estaría", "estaría", "estaríamos", "estarías", "estarían"}, {"esté", "estés", "esté", "estemos", "estéis", "estén"}, {"estuviera o estuviese", "estuvieras o stuvieses", "estuviera o estuviese", "estuviéramos o estuviésemos", "estuvierais o estuvieseis", "estuvieran o estuviesen"}, {"estuviere", "estuvieres", "estuviere", "estuviéremos", "estuviereis", "estuvieren"}, {"", "está", "esté", "estemos", "estad", "estén"} }; TQString verbSpanish::haber[MAX_TIEMPOS][PERSONEN] = { {"he", "has", "ha", "hemos", "habéis", "han"}, {"había", "habías", "había", "habíamos", "habíais", "habían"}, {"hube", "hubiste", "hubo", "hubimos", "hubisteis", "hubieron"}, {"habré", "habrás", "habrá", "habremos", "habréis", "habrán"}, {"habría", "habrías", "habría", "habríamos", "habríais", "habrían"}, {"haya", "hayas", "haya", "hayamos", "hayáis", "hayan"}, {"hubiera o hubiese", "hubieras o hubieses", "hubiera o hubiese", "hubiéramos o hubiésemos", "hubierais o hubieseis", "hubieran o hubiesen"}, {"hubiere", "hubieres", "hubiere", "hubiéremos", "hubiereis", "hubieren"}, {"", "he", "haya", "hayamos", "habed", "hayan"} }; TQString verbSpanish::timeNames[MAX_TIEMPOS*MAX_SUBTYPES] = {"presente", "imperfecto", "indefinido", "futuro", "condicional", "subjuntivo presente", "subjuntivo pasado", "subjuntivo futuro", "imperativo", "presente progresivo", "imperfecto progresivo", "indefinido progresivo", "futuro progresivo", "condicional progresivo", "subjuntivo presente progresivo", "subjuntivo pasado progresivo", "subjuntivo futuro progresivo", "error:form doesn't exist", "presente perfecto", "imperfecto perfecto", "error:form doesn't exist", "futuro perfecto", "condicional perfecto", "subjuntivo presente perfecto", "subjuntivo pasado perfecto", "subjuntivo futuro perfecto", "error:form doesn't exist", }; TQString verbSpanish::groupNames[MAX_GRUPPEN] = {"regular", "irregular", "e > ie", "o > ue", "u > ue", "e > i", "c > qu", "g > gu", "z > c", "gu > gü", "c > z", "g > j", "gu > g", "qu > c", "accent like 'enviar'", "accent like 'continuar'", "missing i"}; int verbSpanish::maxTiempos = MAX_TIEMPOS; int verbSpanish::maxSubtypes = MAX_SUBTYPES; int verbSpanish::persons = PERSONEN; int verbSpanish::maxForms = MAX_TIEMPOS * MAX_SUBTYPES; verbSpanish::verbSpanish() { foreign = ""; spanish = ""; gerund = ""; partizip = ""; group = REGULAR; conjugated = false; error = false; int z; int p; for (z = presente; z <= imperativo; z++) { for (p = yo; p <= ellos; p++) { forms[z][p] = ""; }; }; } verbSpanish::verbSpanish(const verbSpanish& v) { foreign = v.foreign; spanish = v.spanish; group = v.group; if (IRREGULAR != group) { gerund = ""; partizip = ""; conjugated = false; error = v.error; int z; int p; for (z = presente; z <= imperativo; z++) for (p = yo; p <= ellos; p++) forms[z][p] = ""; } else { gerund = v.gerund; partizip = v.partizip; error = v.error; conjugated = v.conjugated; int z; int p; for (z = presente; z <= imperativo; z++) for (p = yo; p <= ellos; p++) forms[z][p] = v.forms[z][p]; }; } verbSpanish::~verbSpanish() { // momentan hat die Klasse gar keine dynamisch erstellten // Elemente, insofern ist auch der Destruktor recht arbeitslos } verbSpanish& verbSpanish::operator= (const verbSpanish& v) { if (this == &v) return *this; // Selbstzuweisung abfangen foreign = v.foreign; spanish = v.spanish; group = v.group; error = v.error; if (group != IRREGULAR) { gerund = ""; partizip = ""; conjugated = false; int z; int p; for (z = presente; z <= imperativo; z++) for (p = yo; p <= ellos; p++) forms[z][p] = ""; } else { gerund = v.gerund; partizip = v.partizip; conjugated = v.conjugated; int z; int p; for (z = presente; z <= imperativo; z++) for (p = yo; p <= ellos; p++) forms[z][p] = v.forms[z][p]; }; return *this; } // Der Vergleichsoperator prüft, ob zwei verb-Objekte das gleiche Verb meinen. Dazu // werden die spanische und die fremdsprachliche Form geprüft. bool verbSpanish::operator== (const verbSpanish& v) const { return ((spanish == v.spanish) && vergleich(foreign, v.foreign)); } // prüft ob der TQString mit der spanischen Form übereinstimmt. bool verbSpanish::operator== (const TQString& s) const { return (spanish == s); } // prüft die alphabetische Reihenfolge zweier Verben, dabei werden die spanischen Verben als // Vergleichskriterium verwendet. bool verbSpanish::operator< (const verbSpanish& v) const { return (spanish < v.spanish) || ((spanish == v.spanish) && (foreign < v.foreign)); } // Vergleicht die beiden Verbobjekte komplett, mit allen Formen und Feldern. bool verbSpanish::allEqual(verbSpanish v) { bool result = ((spanish == v.spanish) && (foreign == v.foreign) && (group == v.group)); if (result && (IRREGULAR == group)) { if (!conjugated) conjugateAll(); if (v.conjugated) v.conjugateAll(); result = ((delAutoForm(gerund) == delAutoForm(v.gerund)) && (delAutoForm(partizip) == delAutoForm(v.partizip))); if (result) { int z; int p; for (z = presente; z <= imperativo; z++) for (p = yo; p <= ellos; p++) if (delAutoForm(forms[z][p]) != delAutoForm(v.forms[z][p])) result = false; }; }; return result; } // prüft, ob alle Stringfelder des Objektes leere Strings sind. bool verbSpanish::isEmpty() const { bool result = (spanish.isEmpty() && foreign.isEmpty()); if (result && (IRREGULAR == group)) { result = (gerund.isEmpty() && partizip.isEmpty()); if (result) { int z; int p; for (z = presente; z <= imperativo; z++) for (p = yo; p <= ellos; p++) if (!forms[z][p].isEmpty()) result = false; }; }; return result; } // Gibt den Verbstamm zurück. Dazu werden die letzten beiden Zeichen abgetrennt, // handelt es sich um ein reflexives Verb, dann sind es vier Zeichen. // Hier werden auch die Stammveränderungen der Gruppenverben durchgeführt. TQString verbSpanish::getStem() const { int ab = 2; if (isReflexiv()) ab += 2; TQString s = spanish; s.truncate(s.length()-ab); return s; } // gibt das Verb in der nicht spanischen Sprache zurück TQString verbSpanish::getForeign() const { return foreign; } // Setzt die nicht-spanische Bedeutung des Verbes. Dabei werden alle führenden und // folgenden whitespaces gelöscht und alle im string enthaltenen whitespaces zu einem // Leerzeichen umgewandelt. // Die Funktion hat den Nebeneffekt, dass auch der String aus dem aufrufenden Program- // code umgewandelt wird. // Es wird nicht geprüft, ob der string keine Leerzeichen mehr enthält, denn das // dürfte eigentlich nicht vorkommen. void verbSpanish::setForeign(const TQString &s) { foreign = s.simplifyWhiteSpace(); } // gibt das Verb auf spanisch zurück TQString verbSpanish::getSpanish() const { return spanish; } // Setzt die spanische Bedeutung des Verbes. // Siehe auch die Bemerkungen zur Arbeitsweise der Funktionbei der setForeign Funktion. void verbSpanish::setSpanish(const TQString &s) { spanish = s.simplifyWhiteSpace(); } // gibt die Gerundform des Verbes zurück. Dabei gilt: Alle Gruppenverben haben einen // regelmäßigen Gerund. Nur die irregulären Verben haben eventuell auch eine andere Gerundform TQString verbSpanish::getGerund() { if (!conjugated) conjugateAll(); return delAutoForm(gerund); } // setzt die Gerundform des Verbes // Siehe auch die Bemerkungen zur Arbeitsweise der Funktionbei der setForeign Funktion. void verbSpanish::setGerund(const TQString &s) { gerund = s.simplifyWhiteSpace(); } // gibt die Partizipform der Verbes zurück.Dabei gilt: Alle Gruppenverben haben ein // regelmäßiges Partizip. Nur die irregulären Verben haben eventuell auch eine andere Partizipform TQString verbSpanish::getPartizip() { if (!conjugated) conjugateAll(); return delAutoForm(partizip); } // setzt die Partizipform der Verbes // Siehe auch die Bemerkungen zur Arbeitsweise der Funktionbei der setForeign Funktion. void verbSpanish::setPartizip(const TQString &s) { partizip = s.simplifyWhiteSpace(); } // gibt die Endung des Verbes zurück. endings verbSpanish::getEnding(bool& good) { if (spanish.isEmpty()) return empty; endings en = empty; TQString endung = ""; if (isReflexiv()) { endung = spanish.mid(spanish.length()-4, 2); } else { endung = spanish.right(2); }; if (endung == "ar") { en = ar; } else if ((endung == "ir")||(endung == "ír")) { en = ir; } else if (endung == "er") { en = er; } else { good = false; // tqWarning("The class verb couldn't find the ending of the verb " + spanish + "."); }; return en; } // gibt zurück, ob das Verb reflexiv ist. Dazu werden die letzten beiden Zeichen // untersucht. Sind diese beiden 'se', dann ist es ein reflexives Verb. bool verbSpanish::isReflexiv() const { return (spanish.right(2) == "se"); } // gibt das Reflexivpronomen zurück, das zu der angegebenen Person gehört. TQString verbSpanish::getRefPron(int i) { return refPron[i]; } // prüft, ob es ein unregelmäßiges Verb ist bool verbSpanish::isGroupVerb() { return (IRREGULAR != group); } // setzen, ob ein Verb regelmäßig oder unregelmäßig ist void verbSpanish::setGroup(const int g) { group = g; } // Gibt die angeforderte Verbform des Verbes zurück, die durch die Zeit t, // die Person p und den Untertyp typ angegeben wird. Mit dieser Funktion können auch // die zusammengesetzten Zeitforms erfragt werden. // parts[0] = ref. Pron. part[1] = Hilfsverb parts[2] = verb bool verbSpanish::getForm(int t, int p, int typ, TQString parts[]) { bool good = !error; if (good) { if (!conjugated) good = conjugateAll(); // sich um das Reflexivpronomen kümmern if (isReflexiv()) { parts[0] = getRefPron(p); } else parts[0] = ""; // die anderen Teile der Form sammeln switch (typ) { // die normale Zeitenbildung: kein Hilfsverb, Zeitform case 0: parts[1] = ""; parts[2] = forms[t][p]; break; // die Verlaufsform der Zeitenbildung case 1: parts[1] = estar[t][p]; parts[2] = gerund; break; // die Perfektform der Zeitenbildung case 2: parts[1] = haber[t][p]; parts[2] = partizip; break; default: good = false; }; // Das '#' bei den automatisch erstellten Formen löschen. parts[2] = delAutoForm(parts[2]); }; return good; } // Eine überladene Funktion, die einen String zurückgibt. TQString verbSpanish::getForm(int t, int p) { TQString st[3]; if (getForm(t, p, normal, st)) return st[2]; return ""; } // setzt die angegebene Verbform mit int als Parameter // Siehe auch die Bemerkungen zur Arbeitsweise der Funktion bei der setForeign Funktion. void verbSpanish::setForm(int t, int p, TQString s) { forms[t][p] = s.simplifyWhiteSpace(); } // bildet die Formen, d.h. hängt die Endungen an den unveränderlichen // Teil an. // Die Form muss bisher ein leerer String sein. bool verbSpanish::conjugateTime(const int t, const TQString &s) { bool good = true; for (int i = yo; i <=ellos; i++) { if (forms[t][i].isEmpty()) { forms[t][i] = s + verbEndings[t][getEnding(good)][i]+'#'; if (group > IRREGULAR) good = groupVerb(forms[t][i], t, i); }; }; return good; } // bildet die Formen des Präsens // dazu wird an den Verbstamm die entsprechende Endung angehängt bool verbSpanish::conjugatePresente() { TQString s = getStem(); return conjugateTime(presente, s); } // bildet die Formen des Imperfecto // dazu wird an den Verbstamm die entsprechende Endung angehängt bool verbSpanish::conjugateImperfecto() { TQString s = getStem(); return conjugateTime(imperfecto, s); } // bildet die Formen des Indefinido // dazu wird an den Verbstamm die entsprechende Endung angehängt bool verbSpanish::conjugateIndefinido() { TQString s = getStem(); return conjugateTime(indefinido, s); } // bildet die Formen des Futuro // dazu wird die entsprechende Endung an den Infinitiv angehängt. Bei den reflexiven // Verben muss das 'se' abgetrennt werden. bool verbSpanish::conjugateFuturo() { TQString s = getSpanish(); if (isReflexiv()) s = s.left(s.length()-2); return conjugateTime(futuro, s); } // bildet die Formen des Conditional // diese Formen werden ebenfalls vom Infinitiv des Verbes abgeleitet bool verbSpanish::conjugateCondicional() { TQString s = getSpanish(); if (isReflexiv()) s = s.left(s.length()-2); return conjugateTime(condicional, s); } // IM ctor der Optionen-Klasse und beim Lesen der Optionen werden die nicht // fertigen Zeiten abegewählt. NIcht vergessen! bool verbSpanish::conjugateSubPresente() { // tqWarning("Not yet implemented."); return true; } bool verbSpanish::conjugateSubPasado() { // tqWarning("Not yet implemented."); return true; } bool verbSpanish::conjugateImperativo() { // tqWarning("Not yet implemented."); return true; } // konjugiert alle Zeitenformen bool verbSpanish::conjugateAll() { bool good = true; good = good && conjugatePresente(); good = good && conjugateImperfecto(); good = good && conjugateIndefinido(); good = good && conjugateFuturo(); good = good && conjugateCondicional(); good = good && conjugateSubPresente(); good = good && conjugateSubPasado(); good = good && conjugateImperativo(); if (partizip.isEmpty()) { partizip = getStem(); switch (getEnding(good)) { case ar: partizip += "ado#"; break; case er: case ir: partizip += "ido#"; break; default: good = false; }; }; if (gerund.isEmpty()) { gerund = getStem(); switch (getEnding(good)) { case ar: gerund += "ando#"; break; case er: case ir: // Bei den Verben der Gruppe 16 fällt das i weg. if (getGroup() == 16) gerund += "endo#"; else { // Bei Verben der Gruppe 5 ändert sich der Stamm für den Gerund if (getGroup() == 5) { int pos = gerund.findRev("e"); if (pos>=0) { gerund.replace(pos, 1, "i"); }; } gerund += "iendo#"; }; break; default: good = false; }; }; conjugated = true; error = !good; return good; } // Stringvergleich, bei dem es nur auf ähnlich Bestandteile ankommt. // Bestandteile sind durch Komma getrennt. bool verbSpanish::vergleich(const TQString& s1, const TQString& s2) const { bool gleich=false; unsigned int l=0; int r=s1.find(",", l); while ((l regular // 1 -> irregular // 2 -> ie> // 3 -> ue> // 4 -> ue> // 5 -> i> // 6 -> qu> // 7 -> gu> // 8 -> c> // 9 -> gü> // 10 -> z> // 11 -> j> // 12 -> g> // 13 -> c> // 14 -> // 15 -> // 16 -> // bool verbSpanish::groupVerb(TQString &s, int time/*=-1*/, int person/*=-1*/) { bool good = true; int pos; switch (group) { case 2: // ie> // betrifft den Presente und den Subjuntivo Presente und einige Imperativformen // dabei jeweils die Personen 1-3 im Singular und die 3. Person Plural. // Subjuntivo Presente wird hier nicht bearbeitet, weil der von der ersten Person // Singular abgeleitet wird und die sollte schon richtig sein. if ((presente == time) || (imperativo == time)) { if ((nosotros != person) && (vosotros != person)) { pos = s.findRev("e"); if (pos>=0) s.replace(pos, 1, "ie"); }; }; break; case 3: // ue> // betrifft den Presente und den Subjuntivo Presente und einige Imperativformen // dabei jeweils die Personen 1-3 im Singular und die 3. Person Plural. // Subjuntivo Presente wird hier nicht bearbeitet, weil der von der ersten Person // Singular abgeleitet wird und die sollte schon richtig sein. if ((presente == time) || (imperativo == time)) { if ((nosotros != person) && (vosotros != person)) { pos = s.findRev("o", -3); if (pos>=0) s.replace(pos, 1, "ue"); }; }; break; case 4: // ue> // betrifft den Presente und den Subjuntivo Presente und einige Imperativformen // dabei jeweils die Personen 1-3 im Singular und die 3. Person Plural. // Subjuntivo Presente wird hier nicht bearbeitet, weil der von der ersten Person // Singular abgeleitet wird und die sollte schon richtig sein. if ((presente == time) || (imperativo == time)) { if ((nosotros != person) && (vosotros != person)) { pos = s.findRev("u"); if (pos>=0) s.replace(pos, 1, "ue"); }; }; break; case 5: // i> // Betrifft Präsens (1.-3. Pers Singular und 3. Person Plural) // die Gerundform, die wird allerdings nicht hier behandelt, sondern in conjugateAll() // indefinido 3. Person Sg und Pl. // alle subjuntivo Formen und den imperativo if ((presente == time) && (person != nosotros) && (person != vosotros)) { TQString st = getStem(); pos = st.findRev("e"); if (pos>=0) { st.replace(pos, 1, "i"); s = st + verbEndings[time][getEnding(good)][person]; }; } else if ((indefinido == time) && ((el == person)||(ellos == person))) { TQString st = getStem(); pos = st.findRev("e"); if (pos>=0) { st.replace(pos, 1, "i"); s = st + verbEndings[time][getEnding(good)][person]; }; } else if (imperativo == time) { good = false; // tqWarning("Imperativo for group verbs isn't ready."); }; break; case 6: // qu> (vor e wird c zu qu) pos = s.findRev("ce"); if (pos>=0) s.replace(pos, 2, "que"); else { pos = s.findRev("cé"); if (pos>=0) s.replace(pos, 2, "qué"); } break; case 7: // gu> (vor e wird g zu gu) pos = s.findRev("ge"); if (pos>=0) s.replace(pos, 2, "gue"); else { pos = s.findRev("gé"); if (pos>=0) s.replace(pos, 2, "gué"); } break; case 8: // c> (vor e wird z zu c) pos = s.findRev("ze"); if (pos>=0) s.replace(pos, 2, "ce"); else { pos = s.findRev("zé"); if (pos>=0) s.replace(pos, 2, "cé"); } break; case 9: // gü> (vor e wird gu zu gü) pos = s.findRev("gue"); if (pos>=0) s.replace(pos, 3, "güe"); else { pos = s.findRev("gué"); if (pos>=0) s.replace(pos, 3, "güé"); } break; case 10: // z> (vor o und a wird c zu z) pos = s.findRev("co"); if (pos>=0) s.replace(pos, 2, "zo"); else { pos = s.findRev("ca"); if (pos>=0) s.replace(pos, 2, "za"); }; break; case 11: // j> (vor o und a wird g zu j) pos = s.findRev("ga"); if (pos>=0) s.replace(pos, 2, "ja"); else { pos = s.findRev("go"); if (pos>=0) s.replace(pos, 2, "jo"); }; break; case 12: // g> (vor o und a wird gu zu g) pos = s.findRev("guo"); if (pos>=0) s.replace(pos, 3, "go"); else { pos = s.findRev("gua"); if (pos>=0) s.replace(pos, 3, "ga"); }; break; case 13: // c> (vor o und a wird qu zu c) pos = s.findRev("quo"); if (pos>=0) s.replace(pos, 3, "co"); else { pos = s.findRev("qua"); if (pos>=0) s.replace(pos, 3, "ca"); }; break; case 14: // // Änderungen betreffen die Präsensformen außer nosotros und vosotros. Außerdem den // Subjuntivo presente, der von der 1.Person singular abgeleitet wird und daher hier nicht // behandelt werden muss. Des Weiteren sind einige Imperativformen betroffen. if (presente == time) { switch (person) { case yo: s = s.left(s.length()-3) + "ío#"; break; case tu: s = s.left(s.length()-4) + "ías#"; break; case el: s = s.left(s.length()-3) + "ía#"; break; case ellos: s = s.left(s.length()-4) + "ían#"; break; default: {}; }; } else if (imperativo == time) { switch (person) { case tu: s = s.left(s.length()-3) + "ía#"; break; case el: s = s.left(s.length()-3) + "íe#"; break; case ellos: s = s.left(s.length()-4) + "íen#"; break; default: {}; }; }; break; case 15: // // Änderungen betreffen die Präsensformen außer nosotros und vosotros. Außerdem den // Subjuntivo presente, der von der 1.Person singular abgeleitet wird und daher hier nicht // behandelt werden muss. Des Weiteren sind einige Imperativformen betroffen. if (presente == time) { switch (person) { case yo: s = s.left(s.length()-3) + "úo#"; break; case tu: s = s.left(s.length()-4) + "úas#"; break; case el: s = s.left(s.length()-3) + "úa#"; break; case ellos: s = s.left(s.length()-4) + "úan#"; break; default: {}; }; } else if (imperativo == time) { switch (person) { case tu: s = s.left(s.length()-3) + "úa#"; break; case el: s = s.left(s.length()-3) + "úe#"; break; case ellos: s = s.left(s.length()-4) + "úen#"; break; default: {}; }; }; break; case 16: // // Änderungen betreffen die Gerund-Form, den Indefinido in der 3. Person Singular // und Plural und den Subjuntivo Pasado. Hier wird der Subjuntivo nicht bearbeitet, // weil er von der 3. Person des Indefinido abgeleitet wird. Diese Form sollte bereits // geändert sein. Ebenso wird der Gerund in der ConjugateAll()-Funktion behandelt. if ("ió#" == s.right(3)) { s = s.left(s.length()-3) + "ó#"; } else if ("ieron#" == s.right(6)) { s = s.left(s.length()-6) + "eron#"; }; break; default: good = false; }; return good; }