00001 /* 00002 ******************************************************************************* 00003 * Copyright (C) 2008, International Business Machines Corporation and 00004 * others. All Rights Reserved. 00005 ******************************************************************************* 00006 * 00007 * 00008 * File PLURRULE.H 00009 * 00010 * Modification History:* 00011 * Date Name Description 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 00030 U_NAMESPACE_BEGIN 00031 00032 class Hashtable; 00033 class RuleChain; 00034 class RuleParser; 00035 00102 class U_I18N_API PluralRules : public UObject { 00103 public: 00104 00112 PluralRules(UErrorCode& status); 00113 00118 PluralRules(const PluralRules& other); 00119 00124 virtual ~PluralRules(); 00125 00130 PluralRules* clone() const; 00131 00136 PluralRules& operator=(const PluralRules&); 00137 00148 static PluralRules* U_EXPORT2 createRules(const UnicodeString& description, 00149 UErrorCode& status); 00150 00159 static PluralRules* U_EXPORT2 createDefaultRules(UErrorCode& status); 00160 00176 static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UErrorCode& status); 00177 00187 UnicodeString select(int32_t number) const; 00188 00198 UnicodeString select(double number) const; 00199 00210 StringEnumeration* getKeywords(UErrorCode& status) const; 00211 00221 UBool isKeyword(const UnicodeString& keyword) const; 00222 00223 00231 UnicodeString getKeywordOther() const; 00232 00241 virtual UBool operator==(const PluralRules& other) const; 00242 00251 UBool operator!=(const PluralRules& other) const {return !operator==(other);} 00252 00253 00260 static UClassID U_EXPORT2 getStaticClassID(void); 00261 00267 virtual UClassID getDynamicClassID() const; 00268 00269 00270 private: 00271 Hashtable *fLocaleStringsHash; 00272 UnicodeString mLocaleName; 00273 RuleChain *mRules; 00274 RuleParser *mParser; 00275 00276 PluralRules(); // default constructor not implemented 00277 int32_t getRepeatLimit() const; 00278 void parseDescription(UnicodeString& ruleData, RuleChain& rules, UErrorCode &status); 00279 void getNextLocale(const UnicodeString& localeData, int32_t* curIndex, UnicodeString& localeName); 00280 void addRules(RuleChain& rules); 00281 int32_t getNumberValue(const UnicodeString& token) const; 00282 UnicodeString getRuleFromResource(const Locale& locale, UErrorCode& status); 00283 00284 }; 00285 00286 U_NAMESPACE_END 00287 00288 #endif /* #if !UCONFIG_NO_FORMATTING */ 00289 00290 #endif // _PLURRULE 00291 //eof