|
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) 1997-2015, International Business Machines Corporation and others. 00006 * All Rights Reserved. 00007 ******************************************************************************* 00008 */ 00009 00010 #ifndef RBNF_H 00011 #define RBNF_H 00012 00013 #include "unicode/utypes.h" 00014 00015 #if U_SHOW_CPLUSPLUS_API 00016 00029 #if UCONFIG_NO_FORMATTING 00030 #define U_HAVE_RBNF 0 00031 #else 00032 #define U_HAVE_RBNF 1 00033 00034 #include "unicode/dcfmtsym.h" 00035 #include "unicode/fmtable.h" 00036 #include "unicode/locid.h" 00037 #include "unicode/numfmt.h" 00038 #include "unicode/unistr.h" 00039 #include "unicode/strenum.h" 00040 #include "unicode/brkiter.h" 00041 #include "unicode/upluralrules.h" 00042 00043 U_NAMESPACE_BEGIN 00044 00045 class NFRule; 00046 class NFRuleSet; 00047 class LocalizationInfo; 00048 class PluralFormat; 00049 class RuleBasedCollator; 00050 00056 enum URBNFRuleSetTag { 00061 URBNF_SPELLOUT, 00066 URBNF_ORDINAL, 00071 URBNF_DURATION, 00078 URBNF_NUMBERING_SYSTEM, 00079 #ifndef U_HIDE_DEPRECATED_API 00080 00084 URBNF_COUNT 00085 #endif // U_HIDE_DEPRECATED_API 00086 }; 00087 00580 class U_I18N_API RuleBasedNumberFormat : public NumberFormat { 00581 public: 00582 00583 //----------------------------------------------------------------------- 00584 // constructors 00585 //----------------------------------------------------------------------- 00586 00597 RuleBasedNumberFormat(const UnicodeString& rules, UParseError& perror, UErrorCode& status); 00598 00622 RuleBasedNumberFormat(const UnicodeString& rules, const UnicodeString& localizations, 00623 UParseError& perror, UErrorCode& status); 00624 00640 RuleBasedNumberFormat(const UnicodeString& rules, const Locale& locale, 00641 UParseError& perror, UErrorCode& status); 00642 00669 RuleBasedNumberFormat(const UnicodeString& rules, const UnicodeString& localizations, 00670 const Locale& locale, UParseError& perror, UErrorCode& status); 00671 00690 RuleBasedNumberFormat(URBNFRuleSetTag tag, const Locale& locale, UErrorCode& status); 00691 00692 //----------------------------------------------------------------------- 00693 // boilerplate 00694 //----------------------------------------------------------------------- 00695 00701 RuleBasedNumberFormat(const RuleBasedNumberFormat& rhs); 00702 00708 RuleBasedNumberFormat& operator=(const RuleBasedNumberFormat& rhs); 00709 00714 virtual ~RuleBasedNumberFormat(); 00715 00722 virtual RuleBasedNumberFormat* clone() const override; 00723 00731 virtual bool operator==(const Format& other) const override; 00732 00733 //----------------------------------------------------------------------- 00734 // public API functions 00735 //----------------------------------------------------------------------- 00736 00742 virtual UnicodeString getRules() const; 00743 00749 virtual int32_t getNumberOfRuleSetNames() const; 00750 00758 virtual UnicodeString getRuleSetName(int32_t index) const; 00759 00765 virtual int32_t getNumberOfRuleSetDisplayNameLocales(void) const; 00766 00775 virtual Locale getRuleSetDisplayNameLocale(int32_t index, UErrorCode& status) const; 00776 00790 virtual UnicodeString getRuleSetDisplayName(int32_t index, 00791 const Locale& locale = Locale::getDefault()); 00792 00801 virtual UnicodeString getRuleSetDisplayName(const UnicodeString& ruleSetName, 00802 const Locale& locale = Locale::getDefault()); 00803 00804 00805 using NumberFormat::format; 00806 00815 virtual UnicodeString& format(int32_t number, 00816 UnicodeString& toAppendTo, 00817 FieldPosition& pos) const override; 00818 00827 virtual UnicodeString& format(int64_t number, 00828 UnicodeString& toAppendTo, 00829 FieldPosition& pos) const override; 00838 virtual UnicodeString& format(double number, 00839 UnicodeString& toAppendTo, 00840 FieldPosition& pos) const override; 00841 00853 virtual UnicodeString& format(int32_t number, 00854 const UnicodeString& ruleSetName, 00855 UnicodeString& toAppendTo, 00856 FieldPosition& pos, 00857 UErrorCode& status) const; 00869 virtual UnicodeString& format(int64_t number, 00870 const UnicodeString& ruleSetName, 00871 UnicodeString& toAppendTo, 00872 FieldPosition& pos, 00873 UErrorCode& status) const; 00885 virtual UnicodeString& format(double number, 00886 const UnicodeString& ruleSetName, 00887 UnicodeString& toAppendTo, 00888 FieldPosition& pos, 00889 UErrorCode& status) const; 00890 00891 protected: 00909 virtual UnicodeString& format(const number::impl::DecimalQuantity &number, 00910 UnicodeString& appendTo, 00911 FieldPosition& pos, 00912 UErrorCode& status) const override; 00913 public: 00914 00915 using NumberFormat::parse; 00916 00931 virtual void parse(const UnicodeString& text, 00932 Formattable& result, 00933 ParsePosition& parsePosition) const override; 00934 00935 #if !UCONFIG_NO_COLLATION 00936 00970 virtual void setLenient(UBool enabled) override; 00971 00979 virtual inline UBool isLenient(void) const override; 00980 00981 #endif 00982 00991 virtual void setDefaultRuleSet(const UnicodeString& ruleSetName, UErrorCode& status); 00992 00999 virtual UnicodeString getDefaultRuleSetName() const; 01000 01011 virtual void setContext(UDisplayContext value, UErrorCode& status) override; 01012 01018 virtual ERoundingMode getRoundingMode(void) const override; 01019 01025 virtual void setRoundingMode(ERoundingMode roundingMode) override; 01026 01027 public: 01033 static UClassID U_EXPORT2 getStaticClassID(void); 01034 01040 virtual UClassID getDynamicClassID(void) const override; 01041 01050 virtual void adoptDecimalFormatSymbols(DecimalFormatSymbols* symbolsToAdopt); 01051 01061 virtual void setDecimalFormatSymbols(const DecimalFormatSymbols& symbols); 01062 01063 private: 01064 RuleBasedNumberFormat() = delete; // default constructor not implemented 01065 01066 // this will ref the localizations if they are not nullptr 01067 // caller must deref to get adoption 01068 RuleBasedNumberFormat(const UnicodeString& description, LocalizationInfo* localizations, 01069 const Locale& locale, UParseError& perror, UErrorCode& status); 01070 01071 void init(const UnicodeString& rules, LocalizationInfo* localizations, UParseError& perror, UErrorCode& status); 01072 void initCapitalizationContextInfo(const Locale& thelocale); 01073 void dispose(); 01074 void stripWhitespace(UnicodeString& src); 01075 void initDefaultRuleSet(); 01076 NFRuleSet* findRuleSet(const UnicodeString& name, UErrorCode& status) const; 01077 01078 /* friend access */ 01079 friend class NFSubstitution; 01080 friend class NFRule; 01081 friend class NFRuleSet; 01082 friend class FractionalPartSubstitution; 01083 01084 inline NFRuleSet * getDefaultRuleSet() const; 01085 const RuleBasedCollator * getCollator() const; 01086 DecimalFormatSymbols * initializeDecimalFormatSymbols(UErrorCode &status); 01087 const DecimalFormatSymbols * getDecimalFormatSymbols() const; 01088 NFRule * initializeDefaultInfinityRule(UErrorCode &status); 01089 const NFRule * getDefaultInfinityRule() const; 01090 NFRule * initializeDefaultNaNRule(UErrorCode &status); 01091 const NFRule * getDefaultNaNRule() const; 01092 PluralFormat *createPluralFormat(UPluralType pluralType, const UnicodeString &pattern, UErrorCode& status) const; 01093 UnicodeString& adjustForCapitalizationContext(int32_t startPos, UnicodeString& currentResult, UErrorCode& status) const; 01094 UnicodeString& format(int64_t number, NFRuleSet *ruleSet, UnicodeString& toAppendTo, UErrorCode& status) const; 01095 void format(double number, NFRuleSet& rs, UnicodeString& toAppendTo, UErrorCode& status) const; 01096 01097 private: 01098 NFRuleSet **fRuleSets; 01099 UnicodeString* ruleSetDescriptions; 01100 int32_t numRuleSets; 01101 NFRuleSet *defaultRuleSet; 01102 Locale locale; 01103 RuleBasedCollator* collator; 01104 DecimalFormatSymbols* decimalFormatSymbols; 01105 NFRule *defaultInfinityRule; 01106 NFRule *defaultNaNRule; 01107 ERoundingMode fRoundingMode; 01108 UBool lenient; 01109 UnicodeString* lenientParseRules; 01110 LocalizationInfo* localizations; 01111 UnicodeString originalDescription; 01112 UBool capitalizationInfoSet; 01113 UBool capitalizationForUIListMenu; 01114 UBool capitalizationForStandAlone; 01115 BreakIterator* capitalizationBrkIter; 01116 }; 01117 01118 // --------------- 01119 01120 #if !UCONFIG_NO_COLLATION 01121 01122 inline UBool 01123 RuleBasedNumberFormat::isLenient(void) const { 01124 return lenient; 01125 } 01126 01127 #endif 01128 01129 inline NFRuleSet* 01130 RuleBasedNumberFormat::getDefaultRuleSet() const { 01131 return defaultRuleSet; 01132 } 01133 01134 U_NAMESPACE_END 01135 01136 /* U_HAVE_RBNF */ 01137 #endif 01138 01139 #endif /* U_SHOW_CPLUSPLUS_API */ 01140 01141 /* RBNF_H */ 01142 #endif
1.7.6.1