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 FixedDecimal;
00042 class VisibleDigitsWithExponent;
00043 class RuleChain;
00044 class PluralRuleParser;
00045 class PluralKeywordEnumeration;
00046 class AndConstraint;
00047 class SharedPluralRules;
00048
00192 class U_I18N_API PluralRules : public UObject {
00193 public:
00194
00202 PluralRules(UErrorCode& status);
00203
00208 PluralRules(const PluralRules& other);
00209
00214 virtual ~PluralRules();
00215
00220 PluralRules* clone() const;
00221
00226 PluralRules& operator=(const PluralRules&);
00227
00238 static PluralRules* U_EXPORT2 createRules(const UnicodeString& description,
00239 UErrorCode& status);
00240
00249 static PluralRules* U_EXPORT2 createDefaultRules(UErrorCode& status);
00250
00267 static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UErrorCode& status);
00268
00285 static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UPluralType type, UErrorCode& status);
00286
00287 #ifndef U_HIDE_INTERNAL_API
00288
00293 static StringEnumeration* U_EXPORT2 getAvailableLocales(UErrorCode &status);
00294
00301 static UBool hasOverride(const Locale &locale);
00302
00308 static PluralRules* U_EXPORT2 internalForLocale(const Locale& locale, UPluralType type, UErrorCode& status);
00309
00317 static const SharedPluralRules* U_EXPORT2 createSharedInstance(
00318 const Locale& locale, UPluralType type, UErrorCode& status);
00319
00320
00321 #endif
00322
00332 UnicodeString select(int32_t number) const;
00333
00343 UnicodeString select(double number) const;
00344
00345 #ifndef U_HIDE_INTERNAL_API
00346
00349 UnicodeString select(const FixedDecimal &number) const;
00353 UnicodeString select(const VisibleDigitsWithExponent &number) const;
00354 #endif
00355
00366 StringEnumeration* getKeywords(UErrorCode& status) const;
00367
00368 #ifndef U_HIDE_DEPRECATED_API
00369
00379 double getUniqueKeywordValue(const UnicodeString& keyword);
00380
00401 int32_t getAllKeywordValues(const UnicodeString &keyword,
00402 double *dest, int32_t destCapacity,
00403 UErrorCode& status);
00404 #endif
00405
00424 int32_t getSamples(const UnicodeString &keyword,
00425 double *dest, int32_t destCapacity,
00426 UErrorCode& status);
00427
00437 UBool isKeyword(const UnicodeString& keyword) const;
00438
00439
00446 UnicodeString getKeywordOther() const;
00447
00448 #ifndef U_HIDE_INTERNAL_API
00449
00453 UnicodeString getRules() const;
00454 #endif
00455
00464 virtual UBool operator==(const PluralRules& other) const;
00465
00474 UBool operator!=(const PluralRules& other) const {return !operator==(other);}
00475
00476
00483 static UClassID U_EXPORT2 getStaticClassID(void);
00484
00490 virtual UClassID getDynamicClassID() const;
00491
00492
00493 private:
00494 RuleChain *mRules;
00495
00496 PluralRules();
00497 void parseDescription(const UnicodeString& ruleData, UErrorCode &status);
00498 int32_t getNumberValue(const UnicodeString& token) const;
00499 UnicodeString getRuleFromResource(const Locale& locale, UPluralType type, UErrorCode& status);
00500 RuleChain *rulesForKeyword(const UnicodeString &keyword) const;
00501
00502 friend class PluralRuleParser;
00503 };
00504
00505 U_NAMESPACE_END
00506
00507 #endif
00508
00509 #endif // _PLURRULE
00510