00001 /* 00002 ******************************************************************************* 00003 * Copyright (C) 2008-2010, 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 00110 class U_I18N_API PluralRules : public UObject { 00111 public: 00112 00120 PluralRules(UErrorCode& status); 00121 00126 PluralRules(const PluralRules& other); 00127 00132 virtual ~PluralRules(); 00133 00138 PluralRules* clone() const; 00139 00144 PluralRules& operator=(const PluralRules&); 00145 00156 static PluralRules* U_EXPORT2 createRules(const UnicodeString& description, 00157 UErrorCode& status); 00158 00167 static PluralRules* U_EXPORT2 createDefaultRules(UErrorCode& status); 00168 00184 static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UErrorCode& status); 00185 00195 UnicodeString select(int32_t number) const; 00196 00206 UnicodeString select(double number) const; 00207 00218 StringEnumeration* getKeywords(UErrorCode& status) const; 00219 00229 UBool isKeyword(const UnicodeString& keyword) const; 00230 00231 00239 UnicodeString getKeywordOther() const; 00240 00249 virtual UBool operator==(const PluralRules& other) const; 00250 00259 UBool operator!=(const PluralRules& other) const {return !operator==(other);} 00260 00261 00268 static UClassID U_EXPORT2 getStaticClassID(void); 00269 00275 virtual UClassID getDynamicClassID() const; 00276 00277 00278 private: 00279 Hashtable *fLocaleStringsHash; 00280 UnicodeString mLocaleName; 00281 RuleChain *mRules; 00282 RuleParser *mParser; 00283 00284 PluralRules(); // default constructor not implemented 00285 int32_t getRepeatLimit() const; 00286 void parseDescription(UnicodeString& ruleData, RuleChain& rules, UErrorCode &status); 00287 void getNextLocale(const UnicodeString& localeData, int32_t* curIndex, UnicodeString& localeName); 00288 void addRules(RuleChain& rules); 00289 int32_t getNumberValue(const UnicodeString& token) const; 00290 UnicodeString getRuleFromResource(const Locale& locale, UErrorCode& status); 00291 00292 }; 00293 00294 U_NAMESPACE_END 00295 00296 #endif /* #if !UCONFIG_NO_FORMATTING */ 00297 00298 #endif // _PLURRULE 00299 //eof