Index: icu46/source/i18n/plurrule_impl.h |
=================================================================== |
--- icu46/source/i18n/plurrule_impl.h (revision 0) |
+++ icu46/source/i18n/plurrule_impl.h (revision 0) |
@@ -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 |
Property changes on: icu46/source/i18n/plurrule_impl.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |