• 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
keduvocdeclension.cpp
Go to the documentation of this file.
1 /***************************************************************************
2 
3  C++ Implementation: keduvocdeclension
4 
5  -----------------------------------------------------------------------
6 
7  begin : Do Sep 20 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 "keduvocdeclension.h"
25 
26 #include "kvtml2defs.h"
27 #include "keduvockvtml2writer.h"
28 #include <QtXml/QDomDocument>
29 
30 #include <QtCore/QMap>
31 
32 class KEduVocDeclension::Private
33 {
34 public:
35  QMap<KEduVocWordFlags, KEduVocText> m_declensions;
36 };
37 
38 KEduVocDeclension::KEduVocDeclension()
39  :d (new Private)
40 {
41 }
42 
43 KEduVocDeclension::KEduVocDeclension(const KEduVocDeclension & other)
44  :d (new Private)
45 {
46  d->m_declensions = other.d->m_declensions;
47 }
48 
49 KEduVocDeclension & KEduVocDeclension::operator =(const KEduVocDeclension & other)
50 {
51  d->m_declensions = other.d->m_declensions;
52  return *this;
53 }
54 
55 KEduVocDeclension::~KEduVocDeclension()
56 {
57  delete d;
58 }
59 
60 KEduVocText& KEduVocDeclension::declension(KEduVocWordFlags flags)
61 {
62  return d->m_declensions[flags];
63 }
64 
65 void KEduVocDeclension::setDeclension(const KEduVocText & declension, KEduVocWordFlags flags)
66 {
67  d->m_declensions[flags] = declension;
68 }
69 
70 bool KEduVocDeclension::isEmpty()
71 {
72  return d->m_declensions.isEmpty();
73 }
74 
75 void KEduVocDeclension::toKVTML2(QDomElement & parent)
76 {
77  if (isEmpty()) {
78  return;
79  }
80  QDomDocument domDoc = parent.ownerDocument();
81  QDomElement declensionElement = domDoc.createElement( KVTML_DECLENSION );
82 
83  QMap<int, KEduVocWordFlags> genders;
84  genders[0] = KEduVocWordFlag::Masculine;
85  genders[1] = KEduVocWordFlag::Feminine;
86  genders[2] = KEduVocWordFlag::Neuter;
87 
88  QMap<int, KEduVocWordFlags> numbers;
89  numbers[0] = KEduVocWordFlag::Singular;
90  numbers[1] = KEduVocWordFlag::Dual;
91  numbers[2] = KEduVocWordFlag::Plural;
92 
93  QMap<int, KEduVocWordFlags> cases;
94  cases[0] = KEduVocWordFlag::Nominative;
95  cases[1] = KEduVocWordFlag::Genitive;
96  cases[2] = KEduVocWordFlag::Dative;
97  cases[3] = KEduVocWordFlag::Accusative;
98  cases[4] = KEduVocWordFlag::Ablative;
99  cases[5] = KEduVocWordFlag::Locative;
100  cases[6] = KEduVocWordFlag::Vocative;
101 
102 
103  for ( int gen = 0; gen <= 2; ++gen)
104  {
105  QDomElement genderElement = domDoc.createElement( KVTML_GRAMMATICAL_GENDER[gen] );
106  for ( int num = 0; num <= 2; ++num) {
107  QDomElement numberElement = domDoc.createElement( KVTML_GRAMMATICAL_NUMBER[num] );
108  for ( int dcase = 0; dcase <= 6; ++dcase ) {
109  QDomElement caseElement = domDoc.createElement( KVTML_DECLENSION_CASE[dcase] );
110  declension(genders[gen] | numbers[num] | cases[dcase]).toKVTML2(caseElement);
111 
112  if (caseElement.hasChildNodes()) {
113  numberElement.appendChild(caseElement);
114  }
115  }
116  if (numberElement.hasChildNodes()) {
117  genderElement.appendChild(numberElement);
118  }
119  }
120  if (genderElement.hasChildNodes()) {
121  declensionElement.appendChild(genderElement);
122  }
123  }
124  if (declensionElement.hasChildNodes()) {
125  parent.appendChild(declensionElement);
126  }
127 }
128 
129 KEduVocDeclension* KEduVocDeclension::fromKVTML2(QDomElement & parent)
130 {
131  QDomElement declensionElement = parent.firstChildElement( KVTML_DECLENSION );
132  // we don't create empty objects, if necessary, create later on demand.
133  if (declensionElement.isNull()) {
134  return 0;
135  }
136 
137 
138  QMap<int, KEduVocWordFlags> genders;
139  genders[0] = KEduVocWordFlag::Masculine;
140  genders[1] = KEduVocWordFlag::Feminine;
141  genders[2] = KEduVocWordFlag::Neuter;
142 
143  QMap<int, KEduVocWordFlags> numbers;
144  numbers[0] = KEduVocWordFlag::Singular;
145  numbers[1] = KEduVocWordFlag::Dual;
146  numbers[2] = KEduVocWordFlag::Plural;
147 
148  QMap<int, KEduVocWordFlags> cases;
149  cases[0] = KEduVocWordFlag::Nominative;
150  cases[1] = KEduVocWordFlag::Genitive;
151  cases[2] = KEduVocWordFlag::Dative;
152  cases[3] = KEduVocWordFlag::Accusative;
153  cases[4] = KEduVocWordFlag::Ablative;
154  cases[5] = KEduVocWordFlag::Locative;
155  cases[6] = KEduVocWordFlag::Vocative;
156 
157 
158  KEduVocDeclension* declension = new KEduVocDeclension;
159 
160  for ( int gen = 0; gen <= 2; ++gen ) {
161  QDomElement genderElement = declensionElement.firstChildElement( KVTML_GRAMMATICAL_GENDER[gen] );
162  if (!genderElement.isNull())
163  {
164  for ( int num = 0; num <= 2; ++num ) {
165  QDomElement numberElement = genderElement.firstChildElement( KVTML_GRAMMATICAL_NUMBER[num] );
166  if (!numberElement.isNull()) {
167  for ( int dcase = 0; dcase <= 6; ++dcase) {
168  QDomElement caseElement = numberElement.firstChildElement( KVTML_DECLENSION_CASE[dcase] );
169  if (!caseElement.isNull()) {
170  KEduVocText text;
171  text.fromKVTML2(caseElement);
172  declension->setDeclension(text, genders[gen] | numbers[num] | cases[dcase]);
173  }
174  }
175  }
176  }
177  }
178  }
179  return declension;
180 }
181 
182 
183 
KEduVocDeclension::KEduVocDeclension
KEduVocDeclension()
The constructor without arguments.
Definition: keduvocdeclension.cpp:38
keduvocdeclension.h
KVTML_GRAMMATICAL_NUMBER
static const QString KVTML_GRAMMATICAL_NUMBER[]
Definition: kvtml2defs.h:60
KEduVocDeclension
A declension contains all forms that a NOUN possibly can have.
Definition: keduvocdeclension.h:36
KEduVocWordFlag::Singular
Definition: keduvocwordflags.h:33
KEduVocWordFlag::Masculine
Definition: keduvocwordflags.h:28
KVTML_DECLENSION_CASE
static const QString KVTML_DECLENSION_CASE[]
Definition: kvtml2defs.h:50
KEduVocDeclension::operator=
KEduVocDeclension & operator=(const KEduVocDeclension &other)
equality operator
Definition: keduvocdeclension.cpp:49
KEduVocWordFlag::Accusative
Definition: keduvocwordflags.h:55
KEduVocDeclension::~KEduVocDeclension
~KEduVocDeclension()
Definition: keduvocdeclension.cpp:55
KEduVocDeclension::isEmpty
bool isEmpty()
Definition: keduvocdeclension.cpp:70
KEduVocWordFlag::Vocative
Definition: keduvocwordflags.h:58
KEduVocDeclension::fromKVTML2
static KEduVocDeclension * fromKVTML2(QDomElement &parent)
Reads a declension from xml, returns 0 if it is empty.
Definition: keduvocdeclension.cpp:129
KEduVocWordFlag::Dative
Definition: keduvocwordflags.h:54
KEduVocDeclension::toKVTML2
void toKVTML2(QDomElement &parent)
Create xml for this declension.
Definition: keduvocdeclension.cpp:75
KEduVocText
A text in vocabulary documents.
Definition: keduvoctext.h:59
keduvockvtml2writer.h
KVTML_DECLENSION
#define KVTML_DECLENSION
Definition: kvtml2defs.h:48
KEduVocDeclension::setDeclension
void setDeclension(const KEduVocText &declension, KEduVocWordFlags flags)
Set a declension.
Definition: keduvocdeclension.cpp:65
KEduVocWordFlag::Plural
Definition: keduvocwordflags.h:35
KEduVocText::fromKVTML2
void fromKVTML2(QDomElement &parent)
Definition: keduvoctext.cpp:205
KEduVocWordFlag::Ablative
Definition: keduvocwordflags.h:56
KVTML_GRAMMATICAL_GENDER
static const QString KVTML_GRAMMATICAL_GENDER[]
Definition: kvtml2defs.h:66
KEduVocWordFlag::Locative
Definition: keduvocwordflags.h:57
KEduVocWordFlag::Genitive
Definition: keduvocwordflags.h:53
kvtml2defs.h
KEduVocWordFlag::Neuter
Definition: keduvocwordflags.h:30
KEduVocDeclension::declension
KEduVocText & declension(KEduVocWordFlags flags)
The grammatical number, there is singular and plural for english, some languages have dual for exactl...
Definition: keduvocdeclension.cpp:60
KEduVocWordFlag::Feminine
Definition: keduvocwordflags.h:29
KEduVocWordFlag::Nominative
Definition: keduvocwordflags.h:52
KEduVocWordFlag::Dual
Definition: keduvocwordflags.h:34
KEduVocText::toKVTML2
void toKVTML2(QDomElement &parent)
Definition: keduvoctext.cpp:175
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