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

libkdeedu/keduvocdocument

keduvocdeclension.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002 
00003     C++ Implementation: keduvocdeclension
00004 
00005     -----------------------------------------------------------------------
00006 
00007     begin         : Do Sep 20 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 "keduvocdeclension.h"
00025 
00026 #include "kvtml2defs.h"
00027 #include "keduvockvtml2writer.h"
00028 #include <QtXml/QDomDocument>
00029 
00030 #include <QtCore/QMap>
00031 
00032 class KEduVocDeclension::Private
00033 {
00034 public:
00035     QMap<KEduVocWordFlags, KEduVocText> m_declensions;
00036 };
00037 
00038 KEduVocDeclension::KEduVocDeclension()
00039     :d (new Private)
00040 {
00041 }
00042 
00043 KEduVocDeclension::KEduVocDeclension(const KEduVocDeclension & other)
00044     :d (new Private)
00045 {
00046     d->m_declensions = other.d->m_declensions;
00047 }
00048 
00049 KEduVocDeclension & KEduVocDeclension::operator =(const KEduVocDeclension & other)
00050 {
00051     d->m_declensions = other.d->m_declensions;
00052     return *this;
00053 }
00054 
00055 KEduVocDeclension::~KEduVocDeclension()
00056 {
00057     delete d;
00058 }
00059 
00060 KEduVocText& KEduVocDeclension::declension(KEduVocWordFlags flags)
00061 {
00062     return d->m_declensions[flags];
00063 }
00064 
00065 void KEduVocDeclension::setDeclension(const KEduVocText & declension, KEduVocWordFlags flags)
00066 {
00067     d->m_declensions[flags] = declension;
00068 }
00069 
00070 bool KEduVocDeclension::isEmpty()
00071 {
00072     return d->m_declensions.isEmpty();
00073 }
00074 
00075 void KEduVocDeclension::toKVTML2(QDomElement & parent)
00076 {
00077     if (isEmpty()) {
00078         return;
00079     }
00080     QDomDocument domDoc = parent.ownerDocument();
00081     QDomElement declensionElement = domDoc.createElement( KVTML_DECLENSION );
00082 
00083     QMap<int, KEduVocWordFlags> numbers;
00084     numbers[0] = KEduVocWordFlag::Singular;
00085     numbers[1] = KEduVocWordFlag::Dual;
00086     numbers[2] = KEduVocWordFlag::Plural;
00087 
00088     QMap<int, KEduVocWordFlags> cases;
00089     cases[0] = KEduVocWordFlag::Nominative;
00090     cases[1] = KEduVocWordFlag::Genitive;
00091     cases[2] = KEduVocWordFlag::Dative;
00092     cases[3] = KEduVocWordFlag::Accusative;
00093     cases[4] = KEduVocWordFlag::Ablative;
00094     cases[5] = KEduVocWordFlag::Locative;
00095     cases[6] = KEduVocWordFlag::Vocative;
00096 
00097 
00098 
00099     for ( int num = 0; num <= 2; ++num) {
00100         QDomElement numberElement = domDoc.createElement( KVTML_GRAMMATICAL_NUMBER[num] );
00101         for ( int dcase = 0; dcase <= 6; ++dcase ) {
00102             QDomElement caseElement = domDoc.createElement( KVTML_DECLENSION_CASE[dcase] );
00103             declension(numbers[num] | cases[dcase]).toKVTML2(caseElement);
00104 
00105             if (caseElement.hasChildNodes()) {
00106                 numberElement.appendChild(caseElement);
00107             }
00108         }
00109         if (numberElement.hasChildNodes()) {
00110             declensionElement.appendChild(numberElement);
00111         }
00112     }
00113     if (declensionElement.hasChildNodes()) {
00114         parent.appendChild(declensionElement);
00115     }
00116 }
00117 
00118 KEduVocDeclension* KEduVocDeclension::fromKVTML2(QDomElement & parent)
00119 {
00120     QDomElement declensionElement = parent.firstChildElement( KVTML_DECLENSION );
00121     // we don't create empty objects, if necessary, create later on demand.
00122     if (declensionElement.isNull()) {
00123         return 0;
00124     }
00125 
00126 
00127     QMap<int, KEduVocWordFlags> numbers;
00128     numbers[0] = KEduVocWordFlag::Singular;
00129     numbers[1] = KEduVocWordFlag::Dual;
00130     numbers[2] = KEduVocWordFlag::Plural;
00131 
00132     QMap<int, KEduVocWordFlags> cases;
00133     cases[0] = KEduVocWordFlag::Nominative;
00134     cases[1] = KEduVocWordFlag::Genitive;
00135     cases[2] = KEduVocWordFlag::Dative;
00136     cases[3] = KEduVocWordFlag::Accusative;
00137     cases[4] = KEduVocWordFlag::Ablative;
00138     cases[5] = KEduVocWordFlag::Locative;
00139     cases[6] = KEduVocWordFlag::Vocative;
00140 
00141     KEduVocDeclension* declension = new KEduVocDeclension;
00142 
00143     for ( int num = 0; num <= 2; ++num ) {
00144         QDomElement numberElement = declensionElement.firstChildElement( KVTML_GRAMMATICAL_NUMBER[num] );
00145         if (!numberElement.isNull()) {
00146             for ( int dcase = 0; dcase <= 6; ++dcase) {
00147                 QDomElement caseElement = numberElement.firstChildElement( KVTML_DECLENSION_CASE[dcase] );
00148                 if (!caseElement.isNull()) {
00149                     KEduVocText text;
00150                     text.fromKVTML2(caseElement);
00151                     declension->setDeclension(text, numbers[num] | cases[dcase]);
00152                 }
00153             }
00154         }
00155     }
00156     return declension;
00157 }
00158 
00159 
00160 

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