00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef PLURRULE
00017 #define PLURRULE
00018
00019 #include "unicode/utypes.h"
00020
00026 #if !UCONFIG_NO_FORMATTING
00027
00028 #include "unicode/format.h"
00029 #include "unicode/upluralrules.h"
00030
00036 #define UPLRULES_NO_UNIQUE_VALUE ((double)-0.00123456777)
00037
00038 U_NAMESPACE_BEGIN
00039
00040 class Hashtable;
00041 class RuleChain;
00042 class RuleParser;
00043 class PluralKeywordEnumeration;
00044
00127 class U_I18N_API PluralRules : public UObject {
00128 public:
00129
00137 PluralRules(UErrorCode& status);
00138
00143 PluralRules(const PluralRules& other);
00144
00149 virtual ~PluralRules();
00150
00155 PluralRules* clone() const;
00156
00161 PluralRules& operator=(const PluralRules&);
00162
00173 static PluralRules* U_EXPORT2 createRules(const UnicodeString& description,
00174 UErrorCode& status);
00175
00184 static PluralRules* U_EXPORT2 createDefaultRules(UErrorCode& status);
00185
00202 static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UErrorCode& status);
00203
00220 static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UPluralType type, UErrorCode& status);
00221
00231 UnicodeString select(int32_t number) const;
00232
00242 UnicodeString select(double number) const;
00243
00254 StringEnumeration* getKeywords(UErrorCode& status) const;
00255
00266 double getUniqueKeywordValue(const UnicodeString& keyword);
00267
00286 int32_t getAllKeywordValues(const UnicodeString &keyword,
00287 double *dest, int32_t destCapacity,
00288 UErrorCode& status);
00289
00308 int32_t getSamples(const UnicodeString &keyword,
00309 double *dest, int32_t destCapacity,
00310 UErrorCode& status);
00311
00321 UBool isKeyword(const UnicodeString& keyword) const;
00322
00323
00330 UnicodeString getKeywordOther() const;
00331
00340 virtual UBool operator==(const PluralRules& other) const;
00341
00350 UBool operator!=(const PluralRules& other) const {return !operator==(other);}
00351
00352
00359 static UClassID U_EXPORT2 getStaticClassID(void);
00360
00366 virtual UClassID getDynamicClassID() const;
00367
00368
00369 private:
00370 RuleChain *mRules;
00371 RuleParser *mParser;
00372 double *mSamples;
00373 int32_t *mSampleInfo;
00374 int32_t mSampleInfoCount;
00375
00376 PluralRules();
00377 int32_t getRepeatLimit() const;
00378 void parseDescription(UnicodeString& ruleData, RuleChain& rules, UErrorCode &status);
00379 void getNextLocale(const UnicodeString& localeData, int32_t* curIndex, UnicodeString& localeName);
00380 void addRules(RuleChain& rules);
00381 int32_t getNumberValue(const UnicodeString& token) const;
00382 UnicodeString getRuleFromResource(const Locale& locale, UPluralType type, UErrorCode& status);
00383
00384 static const int32_t MAX_SAMPLES = 3;
00385
00386 int32_t getSamplesInternal(const UnicodeString &keyword, double *dest,
00387 int32_t destCapacity, UBool includeUnlimited,
00388 UErrorCode& status);
00389 int32_t getKeywordIndex(const UnicodeString& keyword,
00390 UErrorCode& status) const;
00391 void initSamples(UErrorCode& status);
00392
00393 };
00394
00395 U_NAMESPACE_END
00396
00397 #endif
00398
00399 #endif // _PLURRULE
00400