]> Git trees. - libqmvoc.git/commitdiff
Articles are now saved, as are plural personal pronouns.
authorDavid Capel <wot.narg@gmail.com>
Fri, 15 Aug 2008 12:24:51 +0000 (12:24 +0000)
committerDavid Capel <wot.narg@gmail.com>
Fri, 15 Aug 2008 12:24:51 +0000 (12:24 +0000)
The personal pronouns were victim of my KEduVocWordFlag change, but the articles were victim of an API mixup: KEduVocIdentifier.articles() returned by value,
and kvtml2reader was modifying the return value. Returning by reference solves the problem.

Additionally I added some code to hopefully catch the null-d-pointer bug in KEduVocWordType.

svn path=/trunk/KDE/kdeedu/libkdeedu/; revision=847463

keduvocdocument/keduvocarticle.cpp
keduvocdocument/keduvocidentifier.cpp
keduvocdocument/keduvocidentifier.h
keduvocdocument/keduvockvtml2reader.cpp
keduvocdocument/keduvockvtml2writer.cpp
keduvocdocument/keduvocpersonalpronoun.cpp
keduvocdocument/keduvoctranslation.cpp
keduvocdocument/keduvocwordtype.cpp

index 747d9a31e3f7b4d4092543beb2ae9c0f5b4976a7..1f13d018077a092dd9d75cb003afa81b3c159362 100644 (file)
@@ -63,12 +63,12 @@ KEduVocArticle::~KEduVocArticle()
 
 QString KEduVocArticle::article(const KEduVocWordFlags& flags)
 {
-    return d->m_articles.value(flags);
+    return d->m_articles.value(flags & (KEduVocWordFlag::genders | KEduVocWordFlag::numbers | KEduVocWordFlag::Definite | KEduVocWordFlag::Indefinite));
 }
 
 void KEduVocArticle::setArticle(const QString & article, const KEduVocWordFlags& flags)
 {
-    d->m_articles[flags] = article;
+    d->m_articles[flags & (KEduVocWordFlag::genders | KEduVocWordFlag::numbers | KEduVocWordFlag::Definite | KEduVocWordFlag::Indefinite)] = article;
 }
 
 
@@ -79,7 +79,13 @@ bool KEduVocArticle::isArticle(const QString & article) const
 
 bool KEduVocArticle::isEmpty()
 {
-    return d->m_articles.isEmpty();
+    // we don't count empty strings as articles
+    foreach(QString s, d->m_articles.values())
+    {
+        if (!s.isEmpty())
+            return false;
+    }
+    return true;
 }
 
 
index 8b8e32663c88edf58c9e0776d12288703056b44e..f6dea7b095f9b5b572b5493984833581eefc9e66 100644 (file)
@@ -103,12 +103,12 @@ void KEduVocIdentifier::setArticle( const KEduVocArticle& articles )
     d->m_articles = articles;
 }
 
-KEduVocArticle KEduVocIdentifier::article() const
+KEduVocArticle& KEduVocIdentifier::article() const
 {
     return d->m_articles;
 }
 
-KEduVocPersonalPronoun KEduVocIdentifier::personalPronouns() const
+KEduVocPersonalPronoun& KEduVocIdentifier::personalPronouns() const
 {
     return d->m_personalPronouns;
 }
index 2062288233ffe5a9b75fb6c414defd6fc0cc5321..d3bc90c4a88a0465ab52f60d976c6f8321350b15 100644 (file)
@@ -79,7 +79,7 @@ public:
      * Articles (a, the in English, el, la,... in Spanish)
      * @returns articles
      */
-    KEduVocArticle article() const;
+    KEduVocArticle& article() const;
 
     /**
      * Sets the articles for this identifier
@@ -91,7 +91,7 @@ public:
      * Get the personal pronouns for this identifier
      * @returns a KEduVocPersonalPronoun containing the personal pronouns
      */
-    KEduVocPersonalPronoun personalPronouns() const;
+    KEduVocPersonalPronoun& personalPronouns() const;
 
     /**
      * Sets personal pronouns
index 66d70047c5254a20253cd66d76156d383bb11e8a..a16b7b772be83eb457b69d4ecb148d41c6b1ad13 100644 (file)
@@ -491,7 +491,6 @@ bool KEduVocKvtml2Reader::readArticle( QDomElement &articleElement, int identifi
     defs[0] = KEduVocWordFlag::Definite;
     defs[1] = KEduVocWordFlag::Indefinite;
 
-
     for ( int num = 0; num <= 2; ++num) {
         QDomElement numberElement = articleElement.firstChildElement( KVTML_GRAMMATICAL_NUMBER[num] );
         if (!numberElement.isNull()) {
index 2d75044cb66d4d13161e25a6b7a55436d98bac6c..c8ddfcdf42aa3950a07c38215f17a2ae20b91847 100644 (file)
@@ -639,7 +639,7 @@ bool KEduVocKvtml2Writer::writePersonalPronoun(QDomElement & pronounElement, con
 
 
     // the actual pronouns
-    for ( int num = 0; num <= 2; num++ ) {
+    for ( int num = 0; num < 3; num++ ) {
         QDomElement numberElement = m_domDoc.createElement( KVTML_GRAMMATICAL_NUMBER[num] );
         for ( int person = 0; person < 5; person++ ) {
             QString pronounString = pronoun.personalPronoun(numbers[num] | persons[person]);
index 3ab354ed65a80c0699924662516e6fbdb5646d88..8135120d440b3944076c6d2703bed8f2ed2a3fba 100644 (file)
@@ -77,12 +77,12 @@ bool KEduVocPersonalPronoun::operator ==(const KEduVocPersonalPronoun& other) co
 
 QString KEduVocPersonalPronoun::personalPronoun(KEduVocWordFlags flags) const
 {
-        return d->m_personalpronouns.value(flags & (KEduVocWordFlag::persons | KEduVocWordFlag::numbers));
+        return d->m_personalpronouns.value(flags & (KEduVocWordFlag::persons | KEduVocWordFlag::numbers| KEduVocWordFlag::genders));
 }
 
 void KEduVocPersonalPronoun::setPersonalPronoun(const QString & personalpronoun, KEduVocWordFlags flags)
 {
-        d->m_personalpronouns[flags & (KEduVocWordFlag::persons | KEduVocWordFlag::numbers)] = personalpronoun;
+        d->m_personalpronouns[flags & (KEduVocWordFlag::persons | KEduVocWordFlag::numbers| KEduVocWordFlag::genders)] = personalpronoun;
 }
 
 
index 86959bdc2d4a5acf1c6181d85bfd7f8db6cc4c11..1aaf884e6522630c35cf05061a0a26c51ac75fab 100644 (file)
@@ -24,6 +24,7 @@
 #include "keduvockvtml2writer.h"
 #include <KDebug>
 #include <QtCore/QMap>
+#include <assert.h>
 
 class KEduVocTranslation::KEduVocTranslationPrivate
 {
@@ -91,12 +92,19 @@ KEduVocTranslation::KEduVocTranslationPrivate::~ KEduVocTranslationPrivate()
 }
 
 KEduVocTranslation::KEduVocTranslation(KEduVocExpression* entry) : d( new KEduVocTranslationPrivate(entry) )
-{}
+{
+
+    assert(d);
+
+}
 
 
 KEduVocTranslation::KEduVocTranslation(KEduVocExpression* entry, const QString &translation ) : d( new KEduVocTranslationPrivate(entry) )
 {
     setText(translation.simplified());
+
+    assert(d);
+
 }
 
 KEduVocTranslation::KEduVocTranslation( const KEduVocTranslation &other )
@@ -125,6 +133,9 @@ KEduVocTranslation::KEduVocTranslation( const KEduVocTranslation &other )
     if (other.d->m_declension) {
         d->m_declension = new KEduVocDeclension(*other.d->m_declension);
     }
+
+ assert(d);
+
 }
 
 KEduVocTranslation::~KEduVocTranslation()
@@ -186,6 +197,9 @@ KEduVocTranslation & KEduVocTranslation::operator = ( const KEduVocTranslation &
     if (translation.d->m_declension) {
         d->m_declension = new KEduVocDeclension(*translation.d->m_declension);
     }
+
+    assert(d);
+
     return *this;
 }
 
@@ -345,7 +359,10 @@ void KEduVocTranslation::setImageUrl(const KUrl &url)
 
 KEduVocWordType * KEduVocTranslation::wordType() const
 {
-    return d->m_wordType;
+    if (d)
+        return d->m_wordType;
+    else
+        return 0;
 }
 
 void KEduVocTranslation::setWordType(KEduVocWordType * wordType)
index 65b06386c3f30a66d5be896bf0b5c44e56fc4710..e5e32a8c0402eb9f3e10f35cd9ead78b0c818ba4 100644 (file)
@@ -91,6 +91,7 @@ void KEduVocWordType::removeTranslation(KEduVocTranslation* translation)
         }
     }
 
+    // TODO translation(i)'s d pointer can be null. How should we fix this?
     // remove from cache
     bool found = false;
     foreach(int i, translation->entry()->translationIndices()) {