// 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 QString &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; }
Model* ModelManager::load(const std::string& filename) { // already loaded? if ( isLoaded(filename) ) { increaseUsage(filename); return get(filename); } Model* m = NULL; std::string ending = getEnding(filename); std::transform (ending.begin(), ending.end(), ending.begin(), tolower ); if (readers_.find(ending) != readers_.end()) { LINFO("Found matching reader: " << readers_[ending]->getName()); // try every path std::string completeFilename; std::list<std::string>::iterator iter = pathList_.begin(); while ( iter != pathList_.end() && !m ) { completeFilename = (!(*iter).empty() ? *iter + '/' : "") + filename; // check if responsable reader is able to load filename m = readers_[ending]->loadModel( completeFilename ); iter++; } // try just the filename without path if (!m) { m = readers_[ending]->loadModel( filename ); } } if (m){ reg(m, filename); } if (!m){ LDEBUG( "Model file not found: " + filename ); } return m; }
// does the changes for group verbs // The verbs are divided in several groups: // 0 -> regular // 1 -> irregular // 2 -> <e -> ie> // 3 -> <o -> ue> // 4 -> <u -> ue> // 5 -> <e -> i> // 6 -> <c -> qu> // 7 -> <g -> gu> // 8 -> <z -> c> // 9 -> <gu -> gü> // 10 -> <c -> z> // 11 -> <g -> j> // 12 -> <gu -> g> // 13 -> <qu -> c> // 14 -> <accent like 'enviar'> // 15 -> <accent like 'continuar'> // 16 -> <missing i> // bool verbSpanish::groupVerb(QString &s, int time/*=-1*/, int person/*=-1*/) { bool good = true; int pos; switch (group) { case 2: // <e -> 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: // <o -> 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: // <u -> 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: // <e -> 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)) { QString 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))) { QString 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; // qWarning("Imperativo for group verbs isn't ready."); }; break; case 6: // <c -> 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: // <g -> 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: // <z -> 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: // <gu -> 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: // <c -> 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: // <g -> 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: // <gu -> 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: // <qu -> 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: // <accent like 'enviar'> // Ä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: // <accent like 'continuar'> // Ä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: // <missing i> // Ä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; }
// 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; }