string CUtil::convertUnicode(string code) { string stem = getStem(code); wchar_t c = strtol(stem.c_str(), NULL, 16); UnicodeString unistr = UnicodeString(c); string converted; unistr.toUTF8String(converted); return converted; }
void AotMorphology::appendWordForms( const std::string & token, boost::ptr_vector<WordForm> & forms ) { std::string tokenCopy = token; std::vector<CFormInfo> aotForms; lemmatizer->CreateParadigmCollection(false, tokenCopy, is_russian_upper( (BYTE)token[0] ), true, aotForms); for ( uint i = 0; i < aotForms.size(); ++ i) { const CFormInfo & f = aotForms[i]; std::string srcAncode = f.GetSrcAncode(); const char * gramCodes = srcAncode.c_str(); uint attributeSetCount = srcAncode.length() / 2; uint64 * attributeSets = new uint64[ attributeSetCount ]; for ( uint i = 0; i < attributeSetCount; ++i ) attributeSets[i] = getAttributes( gramCodes + 2*i ); forms.push_back( new WordForm( getSpeechPart( gramCodes ), f.GetWordForm( 0 ), getStem( f ), attributeSets, attributeSetCount ) ); } }
// 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; }
// bildet die Formen des Indefinido // dazu wird an den Verbstamm die entsprechende Endung angehängt bool verbSpanish::conjugateIndefinido() { QString s = getStem(); return conjugateTime(indefinido, s); }
// bildet die Formen des Imperfecto // dazu wird an den Verbstamm die entsprechende Endung angehängt bool verbSpanish::conjugateImperfecto() { QString s = getStem(); return conjugateTime(imperfecto, s); }
// bildet die Formen des Präsens // dazu wird an den Verbstamm die entsprechende Endung angehängt bool verbSpanish::conjugatePresente() { QString s = getStem(); return conjugateTime(presente, s); }