File indexing completed on 2024-04-21 03:48:19

0001 /*
0002  * SPDX-FileCopyrightText: 1999-2001 Ewald Arnold <kvoctrain@ewald-arnold.de>
0003  * SPDX-FileCopyrightText: 2004, 2005, 2007 Peter Hedlund <peter.hedlund@kdemail.net>
0004  * SPDX-FileCopyrightText: 2007-2008 Frederik Gladhorn <frederik.gladhorn@kdemail.net>
0005  * SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 
0008 #include "keduvocarticle.h"
0009 
0010 #include <QMap>
0011 
0012 class KEduVocArticle::Private
0013 {
0014 public:
0015     QMap<KEduVocWordFlags, QString> m_articles;
0016 };
0017 
0018 KEduVocArticle::KEduVocArticle()
0019     : d(new Private)
0020 {
0021 }
0022 
0023 KEduVocArticle::KEduVocArticle(const KEduVocArticle &other)
0024     : d(new Private)
0025 {
0026     d->m_articles = other.d->m_articles;
0027 }
0028 
0029 KEduVocArticle &KEduVocArticle::operator=(const KEduVocArticle &other)
0030 {
0031     d->m_articles = other.d->m_articles;
0032     return *this;
0033 }
0034 
0035 KEduVocArticle::KEduVocArticle(const QString &fem_def,
0036                                const QString &fem_indef,
0037                                const QString &mal_def,
0038                                const QString &mal_indef,
0039                                const QString &neu_def,
0040                                const QString &neu_indef)
0041     : d(new Private)
0042 {
0043     setArticle(mal_def, KEduVocWordFlag::Singular | KEduVocWordFlag::Definite | KEduVocWordFlag::Masculine);
0044     setArticle(fem_def, KEduVocWordFlag::Singular | KEduVocWordFlag::Definite | KEduVocWordFlag::Feminine);
0045     setArticle(neu_def, KEduVocWordFlag::Singular | KEduVocWordFlag::Definite | KEduVocWordFlag::Neuter);
0046 
0047     setArticle(mal_indef, KEduVocWordFlag::Singular | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Masculine);
0048     setArticle(fem_indef, KEduVocWordFlag::Singular | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Feminine);
0049     setArticle(neu_indef, KEduVocWordFlag::Singular | KEduVocWordFlag::Indefinite | KEduVocWordFlag::Neuter);
0050 }
0051 
0052 KEduVocArticle::~KEduVocArticle()
0053 {
0054     delete d;
0055 }
0056 
0057 QString KEduVocArticle::article(KEduVocWordFlags flags)
0058 {
0059     return d->m_articles.value(flags & (KEduVocWordFlag::genders | KEduVocWordFlag::numbers | KEduVocWordFlag::Definite | KEduVocWordFlag::Indefinite));
0060 }
0061 
0062 void KEduVocArticle::setArticle(const QString &article, KEduVocWordFlags flags)
0063 {
0064     d->m_articles[flags & (KEduVocWordFlag::genders | KEduVocWordFlag::numbers | KEduVocWordFlag::Definite | KEduVocWordFlag::Indefinite)] = article;
0065 }
0066 
0067 bool KEduVocArticle::isArticle(const QString &article) const
0068 {
0069     return d->m_articles.values().contains(article);
0070 }
0071 
0072 bool KEduVocArticle::isEmpty()
0073 {
0074     // we don't count empty strings as articles
0075     foreach (const QString &s, d->m_articles) {
0076         if (!s.isEmpty())
0077             return false;
0078     }
0079     return true;
0080 }