You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeedu/kanagram/src/grammarmanager.h

216 lines
6.2 KiB

/***************************************************************************
manage grammer parts (articles, conjugation)
-----------------------------------------------------------------------
begin : Sat Nov 27 09:50:53 MET 1999
copyright : (C) 1999-2001 Ewald Arnold
(C) 2001 The KDE-EDU team
email : kvoctrain@ewald-arnold.de
-----------------------------------------------------------------------
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef grammarmanager_included
#define grammarmanager_included
#include <qstring.h>
#include <vector>
using namespace std;
#define CONJ_SIMPLE_PRESENT "PrSi" // I live at home what you frequently do
#define CONJ_PRESENT_PROGR "PrPr" // I am working what you currently are doing
#define CONJ_PRESENT_PERFECT "PrPe" // I have cleaned tell, #that# something has happened
#define CONJ_SIMPLE_PAST "PaSi" // the train left 2 min ago when did it happen
#define CONJ_PAST_PROGR "PaPr" // it was raining what happen at a given time in the past
#define CONJ_PAST_PARTICIPLE "PaPa" // I cleaned tell, #that# it happened
#define CONJ_FUTURE "FuSi"
#define CONJ_PREFIX "--" // definition of prefixes (I, you, ..)
#define UL_USER_TENSE "#" // designates number of user tense
class Article
{
public:
Article() {}
Article (
const QString &fem_def, const QString &fem_indef,
const QString &mal_def, const QString &mal_indef,
const QString &nat_def, const QString &nat_indef
);
void setFemale (const QString &def, const QString &indef);
void setMale (const QString &def, const QString &indef);
void setNatural (const QString &def, const QString &indef);
void female (QString &def, QString &indef) const;
void male (QString &def, QString &indef) const;
void natural (QString &def, QString &indef) const;
protected:
QString fem_def, fem_indef,
mal_def, mal_indef,
nat_def, nat_indef;
};
class Comparison
{
public:
Comparison() {}
Comparison (
const QString &l1,
const QString &l2,
const QString &l3
);
void setL1 (const QString &s) { ls1 = s; }
void setL2 (const QString &s) { ls2 = s; }
void setL3 (const QString &s) { ls3 = s; }
QString l1 () const { return ls1; }
QString l2 () const { return ls2; }
QString l3 () const { return ls3; }
bool isEmpty() const;
void clear();
protected:
QString ls1, ls2, ls3;
};
class TenseRelation
{
public:
TenseRelation (const QString & _short, const QString & _long)
: shortId (_short), longId(_long) {}
inline QString shortStr() const { return shortId; }
inline QString longStr() const { return longId; }
protected:
QString shortId, longId;
};
class Conjugation
{
public:
Conjugation () {}
int numEntries() const;
static vector<TenseRelation> getRelation ();
static void setTenseNames (vector<QString> names);
static QString getName (const QString &abbrev);
static QString getName (int index);
static QString getAbbrev (const QString &name);
static QString getAbbrev (int index);
static int numInternalNames();
static int numTenses();
QString getType (int index);
void setType (int index, const QString & type);
void cleanUp();
bool isEmpty (int idx);
QString pers1Singular(const QString &type) const;
QString pers2Singular(const QString &type) const;
bool pers3SingularCommon(const QString &type) const;
QString pers3FemaleSingular(const QString &type) const;
QString pers3MaleSingular(const QString &type) const;
QString pers3NaturalSingular(const QString &type) const;
QString pers1Plural(const QString &type) const;
QString pers2Plural(const QString &type) const;
bool pers3PluralCommon(const QString &type) const;
QString pers3FemalePlural(const QString &type) const;
QString pers3MalePlural(const QString &type) const;
QString pers3NaturalPlural(const QString &type) const;
void setPers1Singular(const QString &type, const QString &str);
void setPers2Singular(const QString &type, const QString &str);
void setPers3SingularCommon(const QString &type, bool f);
void setPers3FemaleSingular(const QString &type, const QString &str);
void setPers3MaleSingular(const QString &type, const QString &str);
void setPers3NaturalSingular(const QString &type, const QString &str);
void setPers1Plural(const QString &type, const QString &str);
void setPers2Plural(const QString &type, const QString &str);
void setPers3PluralCommon(const QString &type, bool f);
void setPers3FemalePlural(const QString &type, const QString &str);
void setPers3MalePlural(const QString &type, const QString &str);
void setPers3NaturalPlural(const QString &type, const QString &str);
private:
struct conjug_t {
conjug_t() {
p3common = false;
s3common = false;
}
QString type;
bool p3common,
s3common;
QString pers1_sing,
pers2_sing,
pers3_m_sing,
pers3_f_sing,
pers3_n_sing,
pers1_plur,
pers2_plur,
pers3_m_plur,
pers3_f_plur,
pers3_n_plur;
};
struct conjug_name_t {
const char *abbrev;
const char *name;
};
protected:
vector<conjug_t> conjugations;
static conjug_name_t names [];
static vector<QString> userTenses;
};
#endif // grammarmanager_included