void KEduVocDocumentValidatorTest::testConjugations() { KEduVocConjugation conjugation; conjugation.setConjugation(KEduVocText("first-singular"), KEduVocWordFlag::First | KEduVocWordFlag::Singular); QCOMPARE(conjugation.conjugation(KEduVocWordFlag::First | KEduVocWordFlag::Singular).text(), QString("first-singular")); QDomDocument doc = QDomDocument("test doc"); QDomElement root = doc.createElement( "kvtml" ); doc.appendChild(root); conjugation.toKVTML2(root, "tense"); qDebug() << root.text(); KEduVocConjugation *con2 = KEduVocConjugation::fromKVTML2(root); QCOMPARE(conjugation.conjugation(KEduVocWordFlag::First | KEduVocWordFlag::Singular).text(), con2->conjugation(KEduVocWordFlag::First | KEduVocWordFlag::Singular).text()); delete con2; }
KEduVocConjugation* KEduVocConjugation::fromKVTML2(QDomElement & parent) { // sanity check if (parent.isNull()) { return 0; } QMap<int, KEduVocWordFlag::Flags> numbers; numbers[0] = KEduVocWordFlag::Singular; numbers[1] = KEduVocWordFlag::Dual; numbers[2] = KEduVocWordFlag::Plural; QMap<int, KEduVocWordFlag::Flags> persons; persons[0] = KEduVocWordFlag::First; persons[1] = KEduVocWordFlag::Second; persons[2] = (KEduVocWordFlag::Flags)((int)KEduVocWordFlag::Third | (int)KEduVocWordFlag::Masculine); persons[3] = (KEduVocWordFlag::Flags)((int)KEduVocWordFlag::Third | (int)KEduVocWordFlag::Feminine); persons[4] = (KEduVocWordFlag::Flags)((int)KEduVocWordFlag::Third | (int)KEduVocWordFlag::Neuter); KEduVocConjugation* conjugation = new KEduVocConjugation; for ( int num = 0; num <= 2; num++ ) { QDomElement numberElement = parent.firstChildElement( KVTML_GRAMMATICAL_NUMBER[num] ); if (numberElement.hasChildNodes()) { for (int person = 0; person < 5; person++) { QDomElement personElement = numberElement.firstChildElement( KVTML_GRAMMATICAL_PERSON[person] ); if (!personElement.isNull()) { KEduVocText text; text.fromKVTML2(personElement); if (text.text().isEmpty()) { // compatibility for kde 4.0. There the text was directly below the person, not enabling grades per conjugation form. text.setText(personElement.text()); } conjugation->setConjugation(text, persons[person] | numbers[num]); } } } } return conjugation; }