From 8528fcbfdc711d097fa3b27ef3c8974e6a96f5fb Mon Sep 17 00:00:00 2001 From: Jan Gerrit Marker Date: Thu, 1 Dec 2011 22:03:41 +0100 Subject: [PATCH] Declensions can now be gender specific. This changes the KVTML file format a little bit although this should not matter as declensions could not be used with parley. REVIEW: 103325 --- keduvocdocument/keduvocdeclension.cpp | 61 ++++++++++++++++++--------- 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/keduvocdocument/keduvocdeclension.cpp b/keduvocdocument/keduvocdeclension.cpp index 327c3ed..ebc5f59 100644 --- a/keduvocdocument/keduvocdeclension.cpp +++ b/keduvocdocument/keduvocdeclension.cpp @@ -80,6 +80,11 @@ void KEduVocDeclension::toKVTML2(QDomElement & parent) QDomDocument domDoc = parent.ownerDocument(); QDomElement declensionElement = domDoc.createElement( KVTML_DECLENSION ); + QMap genders; + genders[0] = KEduVocWordFlag::Masculine; + genders[1] = KEduVocWordFlag::Feminine; + genders[2] = KEduVocWordFlag::Neuter; + QMap numbers; numbers[0] = KEduVocWordFlag::Singular; numbers[1] = KEduVocWordFlag::Dual; @@ -95,19 +100,25 @@ void KEduVocDeclension::toKVTML2(QDomElement & parent) cases[6] = KEduVocWordFlag::Vocative; + for ( int gen = 0; gen <= 2; ++gen) + { + QDomElement genderElement = domDoc.createElement( KVTML_GRAMMATICAL_GENDER[gen] ); + for ( int num = 0; num <= 2; ++num) { + QDomElement numberElement = domDoc.createElement( KVTML_GRAMMATICAL_NUMBER[num] ); + for ( int dcase = 0; dcase <= 6; ++dcase ) { + QDomElement caseElement = domDoc.createElement( KVTML_DECLENSION_CASE[dcase] ); + declension(genders[gen] | numbers[num] | cases[dcase]).toKVTML2(caseElement); - for ( int num = 0; num <= 2; ++num) { - QDomElement numberElement = domDoc.createElement( KVTML_GRAMMATICAL_NUMBER[num] ); - for ( int dcase = 0; dcase <= 6; ++dcase ) { - QDomElement caseElement = domDoc.createElement( KVTML_DECLENSION_CASE[dcase] ); - declension(numbers[num] | cases[dcase]).toKVTML2(caseElement); - - if (caseElement.hasChildNodes()) { - numberElement.appendChild(caseElement); + if (caseElement.hasChildNodes()) { + numberElement.appendChild(caseElement); + } + } + if (numberElement.hasChildNodes()) { + genderElement.appendChild(numberElement); } } - if (numberElement.hasChildNodes()) { - declensionElement.appendChild(numberElement); + if (genderElement.hasChildNodes()) { + declensionElement.appendChild(genderElement); } } if (declensionElement.hasChildNodes()) { @@ -124,6 +135,11 @@ KEduVocDeclension* KEduVocDeclension::fromKVTML2(QDomElement & parent) } + QMap genders; + genders[0] = KEduVocWordFlag::Masculine; + genders[1] = KEduVocWordFlag::Feminine; + genders[2] = KEduVocWordFlag::Neuter; + QMap numbers; numbers[0] = KEduVocWordFlag::Singular; numbers[1] = KEduVocWordFlag::Dual; @@ -138,17 +154,24 @@ KEduVocDeclension* KEduVocDeclension::fromKVTML2(QDomElement & parent) cases[5] = KEduVocWordFlag::Locative; cases[6] = KEduVocWordFlag::Vocative; + KEduVocDeclension* declension = new KEduVocDeclension; - for ( int num = 0; num <= 2; ++num ) { - QDomElement numberElement = declensionElement.firstChildElement( KVTML_GRAMMATICAL_NUMBER[num] ); - if (!numberElement.isNull()) { - for ( int dcase = 0; dcase <= 6; ++dcase) { - QDomElement caseElement = numberElement.firstChildElement( KVTML_DECLENSION_CASE[dcase] ); - if (!caseElement.isNull()) { - KEduVocText text; - text.fromKVTML2(caseElement); - declension->setDeclension(text, numbers[num] | cases[dcase]); + for ( int gen = 0; gen <= 2; ++gen ) { + QDomElement genderElement = declensionElement.firstChildElement( KVTML_GRAMMATICAL_GENDER[gen] ); + if (!genderElement.isNull()) + { + for ( int num = 0; num <= 2; ++num ) { + QDomElement numberElement = genderElement.firstChildElement( KVTML_GRAMMATICAL_NUMBER[num] ); + if (!numberElement.isNull()) { + for ( int dcase = 0; dcase <= 6; ++dcase) { + QDomElement caseElement = numberElement.firstChildElement( KVTML_DECLENSION_CASE[dcase] ); + if (!caseElement.isNull()) { + KEduVocText text; + text.fromKVTML2(caseElement); + declension->setDeclension(text, genders[gen] | numbers[num] | cases[dcase]); + } + } } } } -- 2.47.3