|
ICU 73.2
73.2
|
00001 // © 2016 and later: Unicode, Inc. and others. 00002 // License & terms of use: http://www.unicode.org/copyright.html 00003 /* 00004 ******************************************************************************* 00005 * Copyright (C) 2007-2014, International Business Machines Corporation and 00006 * others. All Rights Reserved. 00007 ******************************************************************************* 00008 * 00009 00010 * File PLURFMT.H 00011 ******************************************************************************** 00012 */ 00013 00014 #ifndef PLURFMT 00015 #define PLURFMT 00016 00017 #include "unicode/utypes.h" 00018 00019 #if U_SHOW_CPLUSPLUS_API 00020 00026 #if !UCONFIG_NO_FORMATTING 00027 00028 #include "unicode/messagepattern.h" 00029 #include "unicode/numfmt.h" 00030 #include "unicode/plurrule.h" 00031 00032 U_NAMESPACE_BEGIN 00033 00034 class Hashtable; 00035 class NFRule; 00036 00148 class U_I18N_API PluralFormat : public Format { 00149 public: 00150 00159 PluralFormat(UErrorCode& status); 00160 00170 PluralFormat(const Locale& locale, UErrorCode& status); 00171 00181 PluralFormat(const PluralRules& rules, UErrorCode& status); 00182 00199 PluralFormat(const Locale& locale, const PluralRules& rules, UErrorCode& status); 00200 00211 PluralFormat(const Locale& locale, UPluralType type, UErrorCode& status); 00212 00223 PluralFormat(const UnicodeString& pattern, UErrorCode& status); 00224 00239 PluralFormat(const Locale& locale, const UnicodeString& pattern, UErrorCode& status); 00240 00252 PluralFormat(const PluralRules& rules, 00253 const UnicodeString& pattern, 00254 UErrorCode& status); 00255 00270 PluralFormat(const Locale& locale, 00271 const PluralRules& rules, 00272 const UnicodeString& pattern, 00273 UErrorCode& status); 00274 00288 PluralFormat(const Locale& locale, 00289 UPluralType type, 00290 const UnicodeString& pattern, 00291 UErrorCode& status); 00292 00297 PluralFormat(const PluralFormat& other); 00298 00303 virtual ~PluralFormat(); 00304 00317 void applyPattern(const UnicodeString& pattern, UErrorCode& status); 00318 00319 00320 using Format::format; 00321 00334 UnicodeString format(int32_t number, UErrorCode& status) const; 00335 00348 UnicodeString format(double number, UErrorCode& status) const; 00349 00366 UnicodeString& format(int32_t number, 00367 UnicodeString& appendTo, 00368 FieldPosition& pos, 00369 UErrorCode& status) const; 00370 00387 UnicodeString& format(double number, 00388 UnicodeString& appendTo, 00389 FieldPosition& pos, 00390 UErrorCode& status) const; 00391 00392 #ifndef U_HIDE_DEPRECATED_API 00393 00408 void setLocale(const Locale& locale, UErrorCode& status); 00409 #endif /* U_HIDE_DEPRECATED_API */ 00410 00420 void setNumberFormat(const NumberFormat* format, UErrorCode& status); 00421 00428 PluralFormat& operator=(const PluralFormat& other); 00429 00437 virtual bool operator==(const Format& other) const override; 00438 00446 virtual bool operator!=(const Format& other) const; 00447 00453 virtual PluralFormat* clone() const override; 00454 00469 UnicodeString& format(const Formattable& obj, 00470 UnicodeString& appendTo, 00471 FieldPosition& pos, 00472 UErrorCode& status) const override; 00473 00482 UnicodeString& toPattern(UnicodeString& appendTo); 00483 00506 virtual void parseObject(const UnicodeString& source, 00507 Formattable& result, 00508 ParsePosition& parse_pos) const override; 00509 00516 static UClassID U_EXPORT2 getStaticClassID(void); 00517 00523 virtual UClassID getDynamicClassID() const override; 00524 00525 private: 00529 class U_I18N_API PluralSelector : public UMemory { 00530 public: 00531 virtual ~PluralSelector(); 00541 virtual UnicodeString select(void *context, double number, UErrorCode& ec) const = 0; 00542 }; 00543 00544 class U_I18N_API PluralSelectorAdapter : public PluralSelector { 00545 public: 00546 PluralSelectorAdapter() : pluralRules(nullptr) { 00547 } 00548 00549 virtual ~PluralSelectorAdapter(); 00550 00551 virtual UnicodeString select(void *context, double number, UErrorCode& /*ec*/) const override; 00552 00553 void reset(); 00554 00555 PluralRules* pluralRules; 00556 }; 00557 00558 Locale locale; 00559 MessagePattern msgPattern; 00560 NumberFormat* numberFormat; 00561 double offset; 00562 PluralSelectorAdapter pluralRulesWrapper; 00563 00564 PluralFormat() = delete; // default constructor not implemented 00565 void init(const PluralRules* rules, UPluralType type, UErrorCode& status); 00570 void copyObjects(const PluralFormat& other); 00571 00572 UnicodeString& format(const Formattable& numberObject, double number, 00573 UnicodeString& appendTo, 00574 FieldPosition& pos, 00575 UErrorCode& status) const; 00576 00588 static int32_t findSubMessage( 00589 const MessagePattern& pattern, int32_t partIndex, 00590 const PluralSelector& selector, void *context, double number, UErrorCode& ec); 00591 00592 void parseType(const UnicodeString& source, const NFRule *rbnfLenientScanner, 00593 Formattable& result, FieldPosition& pos) const; 00594 00595 friend class MessageFormat; 00596 friend class NFRule; 00597 }; 00598 00599 U_NAMESPACE_END 00600 00601 #endif /* #if !UCONFIG_NO_FORMATTING */ 00602 00603 #endif /* U_SHOW_CPLUSPLUS_API */ 00604 00605 #endif // _PLURFMT 00606 //eof
1.7.6.1