• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • kdeedu
  • Sitemap
  • Contact Us
 

libkdeedu/keduvocdocument

keduvocconjugation.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002 
00003     C++ Implementation: keduvocconjugation
00004 
00005     -----------------------------------------------------------------------
00006 
00007     begin         : Di Aug 28 2007
00008 
00009     copyright     : (C) 2007 Frederik Gladhorn <frederik.gladhorn@kdemail.net>
00010 
00011     -----------------------------------------------------------------------
00012 
00013  ***************************************************************************/
00014 
00015 /***************************************************************************
00016  *                                                                         *
00017  *   This program is free software; you can redistribute it and/or modify  *
00018  *   it under the terms of the GNU General Public License as published by  *
00019  *   the Free Software Foundation; either version 2 of the License, or     *
00020  *   (at your option) any later version.                                   *
00021  *                                                                         *
00022  ***************************************************************************/
00023 
00024 #include "keduvocconjugation.h"
00025 #include "keduvoccommon_p.h"
00026 #include "kvtml2defs.h"
00027 
00028 #include <KLocalizedString>
00029 #include <KDebug>
00030 #include <QtXml/QDomDocument>
00031 
00032 class KEduVocConjugation::Private
00033 {
00034 public:
00035     QMap<KEduVocWordFlags, KEduVocText> m_conjugations;
00036 };
00037 
00038 
00039 KEduVocConjugation::KEduVocConjugation()
00040         : d( new Private )
00041 {}
00042 
00043 
00044 KEduVocConjugation::KEduVocConjugation( const KEduVocConjugation& other )
00045         : d( new Private )
00046 {
00047     d->m_conjugations = other.d->m_conjugations;
00048 }
00049 
00050 
00051 KEduVocConjugation::~KEduVocConjugation()
00052 {
00053     delete d;
00054 }
00055 
00056 KEduVocConjugation& KEduVocConjugation::operator = ( const KEduVocConjugation& other )
00057 {
00058     d->m_conjugations = other.d->m_conjugations;
00059     return *this;
00060 }
00061 
00062 bool KEduVocConjugation::operator ==(const KEduVocConjugation& other) const
00063 {
00064     return d->m_conjugations == other.d->m_conjugations;
00065 }
00066 
00067 
00068 
00069 KEduVocText& KEduVocConjugation::conjugation(KEduVocWordFlags flags) const
00070 {
00071         return d->m_conjugations[flags & (KEduVocWordFlag::persons | KEduVocWordFlag::numbers | KEduVocWordFlag::genders)];
00072 }
00073 
00074 void KEduVocConjugation::setConjugation(const KEduVocText& conjugation, KEduVocWordFlags flags)
00075 {
00076     d->m_conjugations[flags & (KEduVocWordFlag::persons | KEduVocWordFlag::numbers | KEduVocWordFlag::genders)] = conjugation;
00077 }
00078 
00079 bool KEduVocConjugation::isEmpty()
00080 {
00081     return d->m_conjugations.count() == 0;
00082 }
00083 
00084 QList< KEduVocWordFlags > KEduVocConjugation::keys()
00085 {
00086     return d->m_conjugations.keys();
00087 }
00088 
00089 
00090 
00091 void KEduVocConjugation::toKVTML2(QDomElement & parent, const QString &tense)
00092 {
00093     if (isEmpty()) {
00094         return;
00095     }
00096 
00097     QMap<int, KEduVocWordFlag::Flags> numbers;
00098     numbers[0] = KEduVocWordFlag::Singular;
00099     numbers[1] = KEduVocWordFlag::Dual;
00100     numbers[2] = KEduVocWordFlag::Plural;
00101     QMap<int, KEduVocWordFlag::Flags> persons;
00102     persons[0] = KEduVocWordFlag::First;
00103     persons[1] = KEduVocWordFlag::Second;
00104     persons[2] = (KEduVocWordFlag::Flags)((int)KEduVocWordFlag::Third | (int)KEduVocWordFlag::Masculine);
00105     persons[3] = (KEduVocWordFlag::Flags)((int)KEduVocWordFlag::Third | (int)KEduVocWordFlag::Feminine);
00106     persons[4] = (KEduVocWordFlag::Flags)((int)KEduVocWordFlag::Third | (int)KEduVocWordFlag::Neuter);
00107 
00108     // write the tense tag
00109     QDomDocument domDoc = parent.ownerDocument();
00110     QDomElement tenseElement = domDoc.createElement( KVTML_TENSE );
00111     tenseElement.appendChild( domDoc.createTextNode(tense) );
00112     parent.appendChild(tenseElement);
00113 
00114     for ( int num = 0; num <= 2; ++num) {
00115         QDomElement numberElement = domDoc.createElement( KVTML_GRAMMATICAL_NUMBER[num] );
00116         for ( int person = 0; person < 5; ++person) {
00117             if (!conjugation(numbers[num] | persons[person]).isEmpty()) {
00118                 QDomElement personElement = domDoc.createElement( KVTML_GRAMMATICAL_PERSON[person] );
00119                 numberElement.appendChild(personElement);
00120                 conjugation(persons[person] | numbers[num]).toKVTML2(personElement);
00121             }
00122         }
00123         if (numberElement.hasChildNodes()) {
00124             parent.appendChild( numberElement );
00125         }
00126     }
00127 }
00128 
00129 /*
00130 
00131         QString first = conjugation.conjugation(
00132                 KEduVocConjugation::First, num );
00133         QString second = conjugation.conjugation(
00134                 KEduVocConjugation::Second, num );
00135         QString third_male = conjugation.conjugation(
00136                 KEduVocConjugation::ThirdMale, num );
00137         QString third_female = conjugation.conjugation(
00138                 KEduVocConjugation::ThirdFemale, num );
00139         QString third_neutral = conjugation.conjugation(
00140                 KEduVocConjugation::ThirdNeutralCommon, num );
00141 
00142         if ( !first.isEmpty() || !second.isEmpty() || !third_female.isEmpty() ||
00143               !third_male.isEmpty() || !third_neutral.isEmpty() ) {
00144             QDomElement number;
00145             switch (num) {
00146                 case KEduVocConjugation::Singular:
00147                     number = m_domDoc.createElement( KVTML_SINGULAR );
00148                     break;
00149                 case KEduVocConjugation::Dual:
00150                     number = m_domDoc.createElement( KVTML_DUAL );
00151                     break;
00152                 case KEduVocConjugation::Plural:
00153                     number = m_domDoc.createElement( KVTML_PLURAL );
00154                     break;
00155             }
00156 
00157             number.appendChild( newTextElement( KVTML_1STPERSON, first ) );
00158             number.appendChild( newTextElement( KVTML_2NDPERSON, second ) );
00159             number.appendChild( newTextElement( KVTML_THIRD_MALE, third_male ) );
00160             number.appendChild( newTextElement( KVTML_THIRD_FEMALE, third_female ) );
00161             number.appendChild( newTextElement( KVTML_THIRD_NEUTRAL_COMMON, third_neutral ) );
00162 
00163             conjugationElement.appendChild( number );
00164               }
00165     }*/
00166 
00167 
00168     /*
00169     for ( KEduVocWordFlag::DeclensionNumber num = KEduVocWordFlag::Singular; num <= KEduVocWordFlag::Plural; num = KEduVocWordFlag::DeclensionNumber(num +1) ) {
00170         QDomElement numberElement = domDoc.createElement( KVTML_GRAMMATICAL_NUMBER[num] );
00171         for ( KEduVocWordFlag::DeclensionCase dcase = KEduVocWordFlag::Nominative; dcase < KEduVocWordFlag::DeclensionCaseMAX; dcase = KEduVocWordFlag::DeclensionCase(dcase +1) ) {
00172             QDomElement caseElement = domDoc.createElement( KVTML_DECLENSION_CASE[dcase] );
00173             declension(num, dcase).toKVTML2(caseElement);
00174 
00175             if (caseElement.hasChildNodes()) {
00176                 numberElement.appendChild(caseElement);
00177             }
00178         }
00179         if (numberElement.hasChildNodes()) {
00180             declensionElement.appendChild(numberElement);
00181         }
00182     }
00183 
00184     */
00185 
00186 
00187 
00188 KEduVocConjugation* KEduVocConjugation::fromKVTML2(QDomElement & parent)
00189 {
00190     // sanity check
00191     if (parent.isNull()) {
00192         return 0;
00193     }
00194 
00195     QMap<int, KEduVocWordFlag::Flags> numbers;
00196     numbers[0] = KEduVocWordFlag::Singular;
00197     numbers[1] = KEduVocWordFlag::Dual;
00198     numbers[2] = KEduVocWordFlag::Plural;
00199     QMap<int, KEduVocWordFlag::Flags> persons;
00200     persons[0] = KEduVocWordFlag::First;
00201     persons[1] = KEduVocWordFlag::Second;
00202     persons[2] = (KEduVocWordFlag::Flags)((int)KEduVocWordFlag::Third | (int)KEduVocWordFlag::Masculine);
00203     persons[3] = (KEduVocWordFlag::Flags)((int)KEduVocWordFlag::Third | (int)KEduVocWordFlag::Feminine);
00204     persons[4] = (KEduVocWordFlag::Flags)((int)KEduVocWordFlag::Third | (int)KEduVocWordFlag::Neuter);
00205 
00206 
00207     KEduVocConjugation* conjugation = new KEduVocConjugation;
00208 
00209     for ( int num = 0; num <= 2; num++ ) {
00210         QDomElement numberElement = parent.firstChildElement( KVTML_GRAMMATICAL_NUMBER[num] );
00211 
00212         if (numberElement.hasChildNodes()) {
00213             for (int person = 0; person < 5; person++) {
00214                 QDomElement personElement = numberElement.firstChildElement( KVTML_GRAMMATICAL_PERSON[person] );
00215                 if (!personElement.isNull()) {
00216                     KEduVocText text;
00217                     text.fromKVTML2(personElement);
00218                     if (text.text().isEmpty()) {
00219                         // compatibility for kde 4.0. There the text was directly below the person, not enabling grades per conjugation form.
00220                         text.setText(personElement.text());
00221                     }
00222                     conjugation->setConjugation(text, persons[person] | numbers[num]);
00223                 }
00224             }
00225         }
00226     }
00227     return conjugation;
00228 }
00229 
00230 

libkdeedu/keduvocdocument

Skip menu "libkdeedu/keduvocdocument"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

kdeedu

Skip menu "kdeedu"
  • kalzium
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  •   docs
  •   src
  • parley
  •   stepcore
Generated for kdeedu by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal