|
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) 2014-2016, International Business Machines 00006 * Corporation and others. All Rights Reserved. 00007 ********************************************************************** 00008 */ 00009 #ifndef SCINUMBERFORMATTER_H 00010 #define SCINUMBERFORMATTER_H 00011 00012 #include "unicode/utypes.h" 00013 00014 #if U_SHOW_CPLUSPLUS_API 00015 00016 #if !UCONFIG_NO_FORMATTING 00017 00018 00019 #include "unicode/unistr.h" 00020 00026 U_NAMESPACE_BEGIN 00027 00028 class FieldPositionIterator; 00029 class DecimalFormatSymbols; 00030 class DecimalFormat; 00031 class Formattable; 00032 00052 class U_I18N_API ScientificNumberFormatter : public UObject { 00053 public: 00054 00065 static ScientificNumberFormatter *createSuperscriptInstance( 00066 DecimalFormat *fmtToAdopt, UErrorCode &status); 00067 00077 static ScientificNumberFormatter *createSuperscriptInstance( 00078 const Locale &locale, UErrorCode &status); 00079 00080 00093 static ScientificNumberFormatter *createMarkupInstance( 00094 DecimalFormat *fmtToAdopt, 00095 const UnicodeString &beginMarkup, 00096 const UnicodeString &endMarkup, 00097 UErrorCode &status); 00098 00110 static ScientificNumberFormatter *createMarkupInstance( 00111 const Locale &locale, 00112 const UnicodeString &beginMarkup, 00113 const UnicodeString &endMarkup, 00114 UErrorCode &status); 00115 00116 00121 ScientificNumberFormatter *clone() const { 00122 return new ScientificNumberFormatter(*this); 00123 } 00124 00129 virtual ~ScientificNumberFormatter(); 00130 00141 UnicodeString &format( 00142 const Formattable &number, 00143 UnicodeString &appendTo, 00144 UErrorCode &status) const; 00145 private: 00146 class U_I18N_API Style : public UObject { 00147 public: 00148 virtual Style *clone() const = 0; 00149 protected: 00150 virtual UnicodeString &format( 00151 const UnicodeString &original, 00152 FieldPositionIterator &fpi, 00153 const UnicodeString &preExponent, 00154 UnicodeString &appendTo, 00155 UErrorCode &status) const = 0; 00156 private: 00157 friend class ScientificNumberFormatter; 00158 }; 00159 00160 class U_I18N_API SuperscriptStyle : public Style { 00161 public: 00162 virtual SuperscriptStyle *clone() const override; 00163 protected: 00164 virtual UnicodeString &format( 00165 const UnicodeString &original, 00166 FieldPositionIterator &fpi, 00167 const UnicodeString &preExponent, 00168 UnicodeString &appendTo, 00169 UErrorCode &status) const override; 00170 }; 00171 00172 class U_I18N_API MarkupStyle : public Style { 00173 public: 00174 MarkupStyle( 00175 const UnicodeString &beginMarkup, 00176 const UnicodeString &endMarkup) 00177 : Style(), 00178 fBeginMarkup(beginMarkup), 00179 fEndMarkup(endMarkup) { } 00180 virtual MarkupStyle *clone() const override; 00181 protected: 00182 virtual UnicodeString &format( 00183 const UnicodeString &original, 00184 FieldPositionIterator &fpi, 00185 const UnicodeString &preExponent, 00186 UnicodeString &appendTo, 00187 UErrorCode &status) const override; 00188 private: 00189 UnicodeString fBeginMarkup; 00190 UnicodeString fEndMarkup; 00191 }; 00192 00193 ScientificNumberFormatter( 00194 DecimalFormat *fmtToAdopt, 00195 Style *styleToAdopt, 00196 UErrorCode &status); 00197 00198 ScientificNumberFormatter(const ScientificNumberFormatter &other); 00199 ScientificNumberFormatter &operator=(const ScientificNumberFormatter &) = delete; 00200 00201 static void getPreExponent( 00202 const DecimalFormatSymbols &dfs, UnicodeString &preExponent); 00203 00204 static ScientificNumberFormatter *createInstance( 00205 DecimalFormat *fmtToAdopt, 00206 Style *styleToAdopt, 00207 UErrorCode &status); 00208 00209 UnicodeString fPreExponent; 00210 DecimalFormat *fDecimalFormat; 00211 Style *fStyle; 00212 00213 }; 00214 00215 U_NAMESPACE_END 00216 00217 00218 #endif /* !UCONFIG_NO_FORMATTING */ 00219 00220 #endif /* U_SHOW_CPLUSPLUS_API */ 00221 00222 #endif
1.7.6.1