00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef PLURRULE
00019 #define PLURRULE
00020
00021 #include "unicode/utypes.h"
00022
00028 #if !UCONFIG_NO_FORMATTING
00029
00030 #include "unicode/format.h"
00031 #include "unicode/upluralrules.h"
00032 #ifndef U_HIDE_INTERNAL_API
00033 #include "unicode/numfmt.h"
00034 #endif
00035
00041 #define UPLRULES_NO_UNIQUE_VALUE ((double)-0.00123456777)
00042
00043 U_NAMESPACE_BEGIN
00044
00045 class Hashtable;
00046 class IFixedDecimal;
00047 class RuleChain;
00048 class PluralRuleParser;
00049 class PluralKeywordEnumeration;
00050 class AndConstraint;
00051 class SharedPluralRules;
00052
00194 class U_I18N_API PluralRules : public UObject {
00195 public:
00196
00204 PluralRules(UErrorCode& status);
00205
00210 PluralRules(const PluralRules& other);
00211
00216 virtual ~PluralRules();
00217
00222 PluralRules* clone() const;
00223
00228 PluralRules& operator=(const PluralRules&);
00229
00240 static PluralRules* U_EXPORT2 createRules(const UnicodeString& description,
00241 UErrorCode& status);
00242
00251 static PluralRules* U_EXPORT2 createDefaultRules(UErrorCode& status);
00252
00269 static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UErrorCode& status);
00270
00287 static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UPluralType type, UErrorCode& status);
00288
00289 #ifndef U_HIDE_INTERNAL_API
00290
00295 static StringEnumeration* U_EXPORT2 getAvailableLocales(UErrorCode &status);
00296
00303 static UBool hasOverride(const Locale &locale);
00304
00310 static PluralRules* U_EXPORT2 internalForLocale(const Locale& locale, UPluralType type, UErrorCode& status);
00311
00319 static const SharedPluralRules* U_EXPORT2 createSharedInstance(
00320 const Locale& locale, UPluralType type, UErrorCode& status);
00321
00322
00323 #endif
00324
00334 UnicodeString select(int32_t number) const;
00335
00345 UnicodeString select(double number) const;
00346
00347 #ifndef U_HIDE_INTERNAL_API
00348
00351 UnicodeString select(const IFixedDecimal &number) const;
00352 #endif
00353
00364 StringEnumeration* getKeywords(UErrorCode& status) const;
00365
00366 #ifndef U_HIDE_DEPRECATED_API
00367
00377 double getUniqueKeywordValue(const UnicodeString& keyword);
00378
00399 int32_t getAllKeywordValues(const UnicodeString &keyword,
00400 double *dest, int32_t destCapacity,
00401 UErrorCode& status);
00402 #endif
00403
00422 int32_t getSamples(const UnicodeString &keyword,
00423 double *dest, int32_t destCapacity,
00424 UErrorCode& status);
00425
00435 UBool isKeyword(const UnicodeString& keyword) const;
00436
00437
00444 UnicodeString getKeywordOther() const;
00445
00446 #ifndef U_HIDE_INTERNAL_API
00447
00451 UnicodeString getRules() const;
00452 #endif
00453
00462 virtual UBool operator==(const PluralRules& other) const;
00463
00472 UBool operator!=(const PluralRules& other) const {return !operator==(other);}
00473
00474
00481 static UClassID U_EXPORT2 getStaticClassID(void);
00482
00488 virtual UClassID getDynamicClassID() const;
00489
00490
00491 private:
00492 RuleChain *mRules;
00493
00494 PluralRules();
00495 void parseDescription(const UnicodeString& ruleData, UErrorCode &status);
00496 int32_t getNumberValue(const UnicodeString& token) const;
00497 UnicodeString getRuleFromResource(const Locale& locale, UPluralType type, UErrorCode& status);
00498 RuleChain *rulesForKeyword(const UnicodeString &keyword) const;
00499
00504 UErrorCode mInternalStatus;
00505
00506 friend class PluralRuleParser;
00507 };
00508
00509 U_NAMESPACE_END
00510
00511 #endif
00512
00513 #endif // _PLURRULE
00514