1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
// Copyright (c) 1998, 1999 Matthias Clasen
// See the file copying.txt for copying permission.
#ifndef LangObj_INCLUDED
#define LangObj_INCLUDED 1
#include "config.h"
#include "ELObj.h"
#ifdef DSSSL_NAMESPACE
namespace DSSSL_NAMESPACE {
#endif
class LanguageObj : public ELObj {
public:
virtual Char toUpper(const Char) const = 0;
virtual Char toLower(const Char) const = 0;
virtual bool areEquivalent(const StringC &, const StringC &, const Char) const = 0;
virtual bool isLess(const StringC &, const StringC &) const = 0;
virtual bool isLessOrEqual(const StringC &, const StringC &) const = 0;
};
#ifdef SP_HAVE_LOCALE
class RefLangObj : public LanguageObj {
public:
static bool supportedLanguage(const StringC &, const StringC &);
RefLangObj(const StringC &, const StringC &);
~RefLangObj();
void *operator new(size_t, Collector &c) {
return c.allocateObject(1);
}
LanguageObj *asLanguage();
Char toUpper(const Char) const;
Char toLower(const Char) const;
bool areEquivalent(const StringC &, const StringC &, const Char) const;
bool isLess(const StringC &, const StringC &) const;
bool isLessOrEqual(const StringC &, const StringC &) const;
private:
static char *localeName(const StringC &, const StringC &);
char *oldLocale_;
char *newLocale_;
};
#endif /* SP_HAVE_LOCALE */
class LangBuildData;
class LangData;
class LangObj : public LanguageObj {
public:
struct LevelSort {
unsigned int forward :1;
unsigned int backward :1;
unsigned int position :1;
};
LangObj();
~LangObj();
void *operator new(size_t, Collector &c) {
return c.allocateObject(1);
}
LanguageObj *asLanguage();
unsigned levels() const;
Char toUpper(const Char) const;
Char toLower(const Char) const;
bool areEquivalent(const StringC &, const StringC &, const Char) const;
bool isLess(const StringC &, const StringC &) const;
bool isLessOrEqual(const StringC &, const StringC &) const;
private:
void addMultiCollatingElement(const StringC &, const StringC &);
void addCollatingSymbol(const StringC &);
void addLevel(const LevelSort &);
void addDefaultPos();
bool addCollatingPos(const StringC &);
bool addLevelWeight(const Char, const StringC &);
void addToupper(const Char, const Char);
void addTolower(const Char, const Char);
bool compile();
int compare(const StringC &, const StringC &, const Char) const;
StringC asCollatingElts(const StringC &) const;
StringC atLevel(const StringC &, const Char) const;
LangBuildData *buildData_;
LangData *data_;
friend class SchemeParser;
};
#ifdef DSSSL_NAMESPACE
}
#endif
#endif /* not LangObj_INCLUDED */
|