diff options
Diffstat (limited to 'Build/source/libs/icu/icu-4.6/i18n/plurrule_impl.h')
-rw-r--r-- | Build/source/libs/icu/icu-4.6/i18n/plurrule_impl.h | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/Build/source/libs/icu/icu-4.6/i18n/plurrule_impl.h b/Build/source/libs/icu/icu-4.6/i18n/plurrule_impl.h new file mode 100644 index 00000000000..82f79ca9f2f --- /dev/null +++ b/Build/source/libs/icu/icu-4.6/i18n/plurrule_impl.h @@ -0,0 +1,221 @@ +/* +******************************************************************************* +* Copyright (C) 2007-2008, International Business Machines Corporation and +* others. All Rights Reserved. +******************************************************************************* +* +* File PLURRULE_IMPL.H +* +******************************************************************************* +*/ + + +#ifndef PLURRULE_IMPLE +#define PLURRULE_IMPLE + +/** + * \file + * \brief C++ API: Defines rules for mapping positive long values onto a small set of keywords. + */ + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/format.h" +#include "unicode/locid.h" +#include "unicode/parseerr.h" +#include "unicode/utypes.h" +#include "uvector.h" +#include "hash.h" + +U_NAMESPACE_BEGIN + +#define DOT ((UChar)0x002E) +#define SINGLE_QUOTE ((UChar)0x0027) +#define SLASH ((UChar)0x002F) +#define BACKSLASH ((UChar)0x005C) +#define SPACE ((UChar)0x0020) +#define QUOTATION_MARK ((UChar)0x0022) +#define NUMBER_SIGN ((UChar)0x0023) +#define ASTERISK ((UChar)0x002A) +#define COMMA ((UChar)0x002C) +#define HYPHEN ((UChar)0x002D) +#define U_ZERO ((UChar)0x0030) +#define U_ONE ((UChar)0x0031) +#define U_TWO ((UChar)0x0032) +#define U_THREE ((UChar)0x0033) +#define U_FOUR ((UChar)0x0034) +#define U_FIVE ((UChar)0x0035) +#define U_SIX ((UChar)0x0036) +#define U_SEVEN ((UChar)0x0037) +#define U_EIGHT ((UChar)0x0038) +#define U_NINE ((UChar)0x0039) +#define COLON ((UChar)0x003A) +#define SEMI_COLON ((UChar)0x003B) +#define CAP_A ((UChar)0x0041) +#define CAP_B ((UChar)0x0042) +#define CAP_R ((UChar)0x0052) +#define CAP_Z ((UChar)0x005A) +#define LOWLINE ((UChar)0x005F) +#define LEFTBRACE ((UChar)0x007B) +#define RIGHTBRACE ((UChar)0x007D) + +#define LOW_A ((UChar)0x0061) +#define LOW_B ((UChar)0x0062) +#define LOW_C ((UChar)0x0063) +#define LOW_D ((UChar)0x0064) +#define LOW_E ((UChar)0x0065) +#define LOW_F ((UChar)0x0066) +#define LOW_G ((UChar)0x0067) +#define LOW_H ((UChar)0x0068) +#define LOW_I ((UChar)0x0069) +#define LOW_J ((UChar)0x006a) +#define LOW_K ((UChar)0x006B) +#define LOW_L ((UChar)0x006C) +#define LOW_M ((UChar)0x006D) +#define LOW_N ((UChar)0x006E) +#define LOW_O ((UChar)0x006F) +#define LOW_P ((UChar)0x0070) +#define LOW_Q ((UChar)0x0071) +#define LOW_R ((UChar)0x0072) +#define LOW_S ((UChar)0x0073) +#define LOW_T ((UChar)0x0074) +#define LOW_U ((UChar)0x0075) +#define LOW_V ((UChar)0x0076) +#define LOW_W ((UChar)0x0077) +#define LOW_Y ((UChar)0x0079) +#define LOW_Z ((UChar)0x007A) + + +#define PLURAL_RANGE_HIGH 0x7fffffff; + + +class UnicodeSet; + +typedef enum PluralKey { + pZero, + pOne, + pTwo, + pFew, + pMany, + pOther, + pLast +}PluralKey; + +typedef enum tokenType { + none, + tLetter, + tNumber, + tComma, + tSemiColon, + tSpace, + tColon, + tDot, + tKeyword, + tZero, + tOne, + tTwo, + tFew, + tMany, + tOther, + tAnd, + tOr, + tMod, + tNot, + tIn, + tWithin, + tNotIn, + tVariableN, + tIs, + tLeftBrace, + tRightBrace +}tokenType; + +class RuleParser : public UMemory { +public: + RuleParser(); + virtual ~RuleParser(); + void getNextToken(const UnicodeString& ruleData, int32_t *ruleIndex, UnicodeString& token, + tokenType& type, UErrorCode &status); + void checkSyntax(tokenType prevType, tokenType curType, UErrorCode &status); +private: + UnicodeSet *idStartFilter; + UnicodeSet *idContinueFilter; + + void getKeyType(const UnicodeString& token, tokenType& type, UErrorCode &status); + UBool inRange(UChar ch, tokenType& type); + UBool isValidKeyword(const UnicodeString& token); +}; + +class AndConstraint : public UMemory { +public: + typedef enum RuleOp { + NONE, + MOD + } RuleOp; + RuleOp op; + int32_t opNum; + int32_t rangeLow; + int32_t rangeHigh; + UBool notIn; + UBool integerOnly; + AndConstraint *next; + + AndConstraint(); + AndConstraint(const AndConstraint& other); + virtual ~AndConstraint(); + AndConstraint* add(); + UBool isFulfilled(double number); + int32_t updateRepeatLimit(int32_t maxLimit); +}; + +class OrConstraint : public UMemory { +public: + AndConstraint *childNode; + OrConstraint *next; + OrConstraint(); + + OrConstraint(const OrConstraint& other); + virtual ~OrConstraint(); + AndConstraint* add(); + UBool isFulfilled(double number); +}; + +class RuleChain : public UMemory { +public: + OrConstraint *ruleHeader; + UnicodeString keyword; + RuleChain(); + RuleChain(const RuleChain& other); + RuleChain *next; + + virtual ~RuleChain(); + UnicodeString select(double number) const; + void dumpRules(UnicodeString& result); + int32_t getRepeatLimit(); + UErrorCode getKeywords(int32_t maxArraySize, UnicodeString *keywords, int32_t& arraySize) const; + UBool isKeyword(const UnicodeString& keyword) const; + void setRepeatLimit(); +private: + int32_t repeatLimit; +}; + +class PluralKeywordEnumeration : public StringEnumeration { +public: + PluralKeywordEnumeration(RuleChain *header, UErrorCode& status); + virtual ~PluralKeywordEnumeration(); + static UClassID U_EXPORT2 getStaticClassID(void); + virtual UClassID getDynamicClassID(void) const; + virtual const UnicodeString* snext(UErrorCode& status); + virtual void reset(UErrorCode& status); + virtual int32_t count(UErrorCode& status) const; +private: + int32_t pos; + UVector fKeywordNames; +}; + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif // _PLURRULE_IMPL +//eof |