| 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
|
|
|
|
|