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

0001 /*
0002  * SPDX-FileCopyrightText: 2007 Frederik Gladhorn <frederik.gladhorn@kdemail.net>
0003  * SPDX-License-Identifier: GPL-2.0-or-later
0004  */
0005 #include "keduvocpersonalpronoun.h"
0006 #include "keduvoccommon_p.h"
0007 
0008 #include <QMap>
0009 
0010 class KEduVocPersonalPronoun::Private
0011 {
0012 public:
0013     Private();
0014 
0015     bool m_maleFemaleDifferent;
0016     bool m_neutralExists;
0017     bool m_dualExists;
0018     QMap<KEduVocWordFlags, QString> m_personalpronouns;
0019 };
0020 
0021 KEduVocPersonalPronoun::Private::Private()
0022 {
0023     m_maleFemaleDifferent = false;
0024     m_neutralExists = false;
0025     m_dualExists = false;
0026 }
0027 
0028 KEduVocPersonalPronoun::KEduVocPersonalPronoun()
0029     : d(new Private)
0030 {
0031 }
0032 
0033 KEduVocPersonalPronoun::KEduVocPersonalPronoun(const KEduVocPersonalPronoun &other)
0034     : d(new Private)
0035 {
0036     d->m_maleFemaleDifferent = other.d->m_maleFemaleDifferent;
0037     d->m_neutralExists = other.d->m_neutralExists;
0038     d->m_personalpronouns = other.d->m_personalpronouns;
0039     d->m_dualExists = other.d->m_dualExists;
0040 }
0041 
0042 KEduVocPersonalPronoun::~KEduVocPersonalPronoun()
0043 {
0044     delete d;
0045 }
0046 
0047 KEduVocPersonalPronoun &KEduVocPersonalPronoun::operator=(const KEduVocPersonalPronoun &other)
0048 {
0049     d->m_maleFemaleDifferent = other.d->m_maleFemaleDifferent;
0050     d->m_neutralExists = other.d->m_neutralExists;
0051     d->m_personalpronouns = other.d->m_personalpronouns;
0052     d->m_dualExists = other.d->m_dualExists;
0053     return *this;
0054 }
0055 
0056 bool KEduVocPersonalPronoun::operator==(const KEduVocPersonalPronoun &other) const
0057 {
0058     return d->m_personalpronouns == other.d->m_personalpronouns && d->m_maleFemaleDifferent == other.d->m_maleFemaleDifferent
0059         && d->m_neutralExists == other.d->m_neutralExists && d->m_dualExists == other.d->m_dualExists;
0060 }
0061 
0062 QString KEduVocPersonalPronoun::personalPronoun(KEduVocWordFlags flags) const
0063 {
0064     QString p = d->m_personalpronouns.value(flags & (KEduVocWordFlag::persons | KEduVocWordFlag::numbers | KEduVocWordFlag::genders));
0065     if (p.isEmpty() && !(flags & KEduVocWordFlag::genders) && d->m_maleFemaleDifferent && d->m_neutralExists) {
0066         // initial flag lookup failed, adding neuter gender flag
0067         flags |= KEduVocWordFlag::Neuter;
0068         p = d->m_personalpronouns.value(flags & (KEduVocWordFlag::persons | KEduVocWordFlag::numbers | KEduVocWordFlag::genders));
0069     }
0070     return p;
0071 }
0072 
0073 void KEduVocPersonalPronoun::setPersonalPronoun(const QString &personalpronoun, KEduVocWordFlags flags)
0074 {
0075     d->m_personalpronouns[flags & (KEduVocWordFlag::persons | KEduVocWordFlag::numbers | KEduVocWordFlag::genders)] = personalpronoun;
0076 }
0077 
0078 bool KEduVocPersonalPronoun::maleFemaleDifferent() const
0079 {
0080     return d->m_maleFemaleDifferent;
0081 }
0082 
0083 void KEduVocPersonalPronoun::setMaleFemaleDifferent(bool different)
0084 {
0085     d->m_maleFemaleDifferent = different;
0086 }
0087 
0088 bool KEduVocPersonalPronoun::neutralExists() const
0089 {
0090     return d->m_neutralExists;
0091 }
0092 
0093 void KEduVocPersonalPronoun::setNeutralExists(bool exists)
0094 {
0095     d->m_neutralExists = exists;
0096 }
0097 
0098 bool KEduVocPersonalPronoun::dualExists() const
0099 {
0100     return d->m_dualExists;
0101 }
0102 
0103 void KEduVocPersonalPronoun::setDualExists(bool exists)
0104 {
0105     d->m_dualExists = exists;
0106 }