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

libkdeedu/keduvocdocument

  • sources
  • kde-4.12
  • kdeedu
  • libkdeedu
  • keduvocdocument
keduvocconjugation.cpp
Go to the documentation of this file.
1 /***************************************************************************
2 
3  C++ Implementation: keduvocconjugation
4 
5  -----------------------------------------------------------------------
6 
7  begin : Di Aug 28 2007
8 
9  copyright : (C) 2007 Frederik Gladhorn <frederik.gladhorn@kdemail.net>
10 
11  -----------------------------------------------------------------------
12 
13  ***************************************************************************/
14 
15 /***************************************************************************
16  * *
17  * This program is free software; you can redistribute it and/or modify *
18  * it under the terms of the GNU General Public License as published by *
19  * the Free Software Foundation; either version 2 of the License, or *
20  * (at your option) any later version. *
21  * *
22  ***************************************************************************/
23 
24 #include "keduvocconjugation.h"
25 #include "keduvoccommon_p.h"
26 #include "keduvoctext.h"
27 #include "kvtml2defs.h"
28 
29 #include <QtCore/QMap>
30 #include <QtXml/QDomDocument>
31 #include <kdebug.h>
32 
33 class KEduVocConjugation::Private
34 {
35 public:
36  QMap<KEduVocWordFlags, KEduVocText> m_conjugations;
37 };
38 
39 
40 KEduVocConjugation::KEduVocConjugation()
41  : d( new Private )
42 {}
43 
44 
45 KEduVocConjugation::KEduVocConjugation( const KEduVocConjugation& other )
46  : d( new Private )
47 {
48  d->m_conjugations = other.d->m_conjugations;
49 }
50 
51 
52 KEduVocConjugation::~KEduVocConjugation()
53 {
54  delete d;
55 }
56 
57 KEduVocConjugation& KEduVocConjugation::operator = ( const KEduVocConjugation& other )
58 {
59  d->m_conjugations = other.d->m_conjugations;
60  return *this;
61 }
62 
63 bool KEduVocConjugation::operator ==(const KEduVocConjugation& other) const
64 {
65  return d->m_conjugations == other.d->m_conjugations;
66 }
67 
68 
69 
70 KEduVocText& KEduVocConjugation::conjugation(KEduVocWordFlags flags) const
71 {
72  return d->m_conjugations[flags & (KEduVocWordFlag::persons | KEduVocWordFlag::numbers | KEduVocWordFlag::genders)];
73 }
74 
75 void KEduVocConjugation::setConjugation(const KEduVocText& conjugation, KEduVocWordFlags flags)
76 {
77  d->m_conjugations[flags & (KEduVocWordFlag::persons | KEduVocWordFlag::numbers | KEduVocWordFlag::genders)] = conjugation;
78 }
79 
80 bool KEduVocConjugation::isEmpty()
81 {
82  return d->m_conjugations.isEmpty();
83 }
84 
85 QList< KEduVocWordFlags > KEduVocConjugation::keys()
86 {
87  return d->m_conjugations.keys();
88 }
89 
90 void KEduVocConjugation::toKVTML2(QDomElement & parent, const QString &tense)
91 {
92  if (isEmpty()) {
93  return;
94  }
95 
96  QMap<int, KEduVocWordFlag::Flags> numbers;
97  numbers[0] = KEduVocWordFlag::Singular;
98  numbers[1] = KEduVocWordFlag::Dual;
99  numbers[2] = KEduVocWordFlag::Plural;
100  QMap<int, KEduVocWordFlag::Flags> persons;
101  persons[0] = KEduVocWordFlag::First;
102  persons[1] = KEduVocWordFlag::Second;
103  persons[2] = (KEduVocWordFlag::Flags)((int)KEduVocWordFlag::Third | (int)KEduVocWordFlag::Masculine);
104  persons[3] = (KEduVocWordFlag::Flags)((int)KEduVocWordFlag::Third | (int)KEduVocWordFlag::Feminine);
105  persons[4] = (KEduVocWordFlag::Flags)((int)KEduVocWordFlag::Third | (int)KEduVocWordFlag::Neuter);
106 
107  QDomDocument domDoc = parent.ownerDocument();
108 
109  // write the tense tag
110  if (!tense.isEmpty()) {
111  QDomElement tenseElement = domDoc.createElement( KVTML_TENSE );
112  tenseElement.appendChild( domDoc.createTextNode(tense) );
113  parent.appendChild(tenseElement);
114  } else {
115  kDebug() << "Saving conjugation with empty tense";
116  }
117 
118  for ( int num = 0; num <= 2; ++num) {
119  QDomElement numberElement = domDoc.createElement( KVTML_GRAMMATICAL_NUMBER[num] );
120  for ( int person = 0; person < 5; ++person) {
121  KEduVocWordFlags curFlags = numbers[num] | persons[person];
122 
123  if (keys().contains(curFlags) && !conjugation(curFlags).isEmpty()) {
124  QDomElement personElement = domDoc.createElement( KVTML_GRAMMATICAL_PERSON[person] );
125  numberElement.appendChild(personElement);
126  conjugation(curFlags).toKVTML2(personElement);
127  }
128  }
129  if (numberElement.hasChildNodes()) {
130  parent.appendChild( numberElement );
131  }
132  }
133 }
134 
135 /*
136 
137  QString first = conjugation.conjugation(
138  KEduVocConjugation::First, num );
139  QString second = conjugation.conjugation(
140  KEduVocConjugation::Second, num );
141  QString third_male = conjugation.conjugation(
142  KEduVocConjugation::ThirdMale, num );
143  QString third_female = conjugation.conjugation(
144  KEduVocConjugation::ThirdFemale, num );
145  QString third_neutral = conjugation.conjugation(
146  KEduVocConjugation::ThirdNeutralCommon, num );
147 
148  if ( !first.isEmpty() || !second.isEmpty() || !third_female.isEmpty() ||
149  !third_male.isEmpty() || !third_neutral.isEmpty() ) {
150  QDomElement number;
151  switch (num) {
152  case KEduVocConjugation::Singular:
153  number = m_domDoc.createElement( KVTML_SINGULAR );
154  break;
155  case KEduVocConjugation::Dual:
156  number = m_domDoc.createElement( KVTML_DUAL );
157  break;
158  case KEduVocConjugation::Plural:
159  number = m_domDoc.createElement( KVTML_PLURAL );
160  break;
161  }
162 
163  number.appendChild( newTextElement( KVTML_1STPERSON, first ) );
164  number.appendChild( newTextElement( KVTML_2NDPERSON, second ) );
165  number.appendChild( newTextElement( KVTML_THIRD_MALE, third_male ) );
166  number.appendChild( newTextElement( KVTML_THIRD_FEMALE, third_female ) );
167  number.appendChild( newTextElement( KVTML_THIRD_NEUTRAL_COMMON, third_neutral ) );
168 
169  conjugationElement.appendChild( number );
170  }
171  }*/
172 
173 
174  /*
175  for ( KEduVocWordFlag::DeclensionNumber num = KEduVocWordFlag::Singular; num <= KEduVocWordFlag::Plural; num = KEduVocWordFlag::DeclensionNumber(num +1) ) {
176  QDomElement numberElement = domDoc.createElement( KVTML_GRAMMATICAL_NUMBER[num] );
177  for ( KEduVocWordFlag::DeclensionCase dcase = KEduVocWordFlag::Nominative; dcase < KEduVocWordFlag::DeclensionCaseMAX; dcase = KEduVocWordFlag::DeclensionCase(dcase +1) ) {
178  QDomElement caseElement = domDoc.createElement( KVTML_DECLENSION_CASE[dcase] );
179  declension(num, dcase).toKVTML2(caseElement);
180 
181  if (caseElement.hasChildNodes()) {
182  numberElement.appendChild(caseElement);
183  }
184  }
185  if (numberElement.hasChildNodes()) {
186  declensionElement.appendChild(numberElement);
187  }
188  }
189 
190  */
191 
192 
193 
194 KEduVocConjugation* KEduVocConjugation::fromKVTML2(QDomElement & parent)
195 {
196  // sanity check
197  if (parent.isNull()) {
198  return 0;
199  }
200 
201  QMap<int, KEduVocWordFlag::Flags> numbers;
202  numbers[0] = KEduVocWordFlag::Singular;
203  numbers[1] = KEduVocWordFlag::Dual;
204  numbers[2] = KEduVocWordFlag::Plural;
205  QMap<int, KEduVocWordFlag::Flags> persons;
206  persons[0] = KEduVocWordFlag::First;
207  persons[1] = KEduVocWordFlag::Second;
208  persons[2] = (KEduVocWordFlag::Flags)((int)KEduVocWordFlag::Third | (int)KEduVocWordFlag::Masculine);
209  persons[3] = (KEduVocWordFlag::Flags)((int)KEduVocWordFlag::Third | (int)KEduVocWordFlag::Feminine);
210  persons[4] = (KEduVocWordFlag::Flags)((int)KEduVocWordFlag::Third | (int)KEduVocWordFlag::Neuter);
211 
212 
213  KEduVocConjugation* conjugation = new KEduVocConjugation;
214 
215  for ( int num = 0; num <= 2; num++ ) {
216  QDomElement numberElement = parent.firstChildElement( KVTML_GRAMMATICAL_NUMBER[num] );
217 
218  if (numberElement.hasChildNodes()) {
219  for (int person = 0; person < 5; person++) {
220  QDomElement personElement = numberElement.firstChildElement( KVTML_GRAMMATICAL_PERSON[person] );
221  if (!personElement.isNull()) {
222  KEduVocText text;
223  text.fromKVTML2(personElement);
224  if (text.text().isEmpty()) {
225  // compatibility for kde 4.0. There the text was directly below the person, not enabling grades per conjugation form.
226  text.setText(personElement.text());
227  }
228  conjugation->setConjugation(text, persons[person] | numbers[num]);
229  }
230  }
231  }
232  }
233  return conjugation;
234 }
235 
236 
keduvocconjugation.h
KVTML_GRAMMATICAL_NUMBER
static const QString KVTML_GRAMMATICAL_NUMBER[]
Definition: kvtml2defs.h:60
keduvoccommon_p.h
KEduVocWordFlag::Singular
Definition: keduvocwordflags.h:33
KEduVocWordFlag::Third
Definition: keduvocwordflags.h:49
KEduVocWordFlag::Masculine
Definition: keduvocwordflags.h:28
KEduVocWordFlag::First
Definition: keduvocwordflags.h:47
KEduVocConjugation
The conjugation of a verb.
Definition: keduvocconjugation.h:37
KEduVocConjugation::setConjugation
void setConjugation(const KEduVocText &conjugation, KEduVocWordFlags flags)
Updates or creates the conjugation object for the given word flags.
Definition: keduvocconjugation.cpp:75
KEduVocWordFlag::Flags
Flags
Definition: keduvocwordflags.h:22
KEduVocConjugation::operator==
bool operator==(const KEduVocConjugation &a) const
Definition: keduvocconjugation.cpp:63
keduvoctext.h
KEduVocWordFlag::persons
static const Flags persons
Definition: keduvocwordflags.h:71
KVTML_GRAMMATICAL_PERSON
static const QString KVTML_GRAMMATICAL_PERSON[]
Definition: kvtml2defs.h:72
KEduVocWordFlag::numbers
static const Flags numbers
Definition: keduvocwordflags.h:69
KEduVocConjugation::~KEduVocConjugation
~KEduVocConjugation()
Definition: keduvocconjugation.cpp:52
KEduVocText
A text in vocabulary documents.
Definition: keduvoctext.h:59
KEduVocConjugation::keys
QList< KEduVocWordFlags > keys()
Definition: keduvocconjugation.cpp:85
KEduVocWordFlag::Plural
Definition: keduvocwordflags.h:35
KEduVocText::fromKVTML2
void fromKVTML2(QDomElement &parent)
Definition: keduvoctext.cpp:205
KEduVocConjugation::KEduVocConjugation
KEduVocConjugation()
The constructor.
Definition: keduvocconjugation.cpp:40
KEduVocText::text
QString text() const
The translation as string (the word itself)
Definition: keduvoctext.cpp:55
kvtml2defs.h
KEduVocConjugation::conjugation
KEduVocText & conjugation(KEduVocWordFlags flags) const
Returns an existing conjugation object.
Definition: keduvocconjugation.cpp:70
KEduVocWordFlag::genders
static const Flags genders
Definition: keduvocwordflags.h:67
KEduVocConjugation::toKVTML2
void toKVTML2(QDomElement &parent, const QString &tense)
Create xml for this declension.
Definition: keduvocconjugation.cpp:90
KEduVocConjugation::fromKVTML2
static KEduVocConjugation * fromKVTML2(QDomElement &parent)
Reads a declension from xml, returns 0 if it is empty.
Definition: keduvocconjugation.cpp:194
KEduVocConjugation::isEmpty
bool isEmpty()
Definition: keduvocconjugation.cpp:80
KEduVocWordFlag::Neuter
Definition: keduvocwordflags.h:30
KEduVocText::setText
void setText(const QString &expr)
Sets the translation.
Definition: keduvoctext.cpp:60
KEduVocConjugation::operator=
KEduVocConjugation & operator=(const KEduVocConjugation &a)
Definition: keduvocconjugation.cpp:57
KEduVocWordFlag::Feminine
Definition: keduvocwordflags.h:29
KEduVocWordFlag::Second
Definition: keduvocwordflags.h:48
KEduVocWordFlag::Dual
Definition: keduvocwordflags.h:34
KEduVocText::toKVTML2
void toKVTML2(QDomElement &parent)
Definition: keduvoctext.cpp:175
KVTML_TENSE
#define KVTML_TENSE
Definition: kvtml2defs.h:118
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:37:21 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

libkdeedu/keduvocdocument

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

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal