summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu/icu-4.6/i18n/plurrule_impl.h
diff options
context:
space:
mode:
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.h221
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