00001
00002
00003
00004
00005
00006
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;
00163 protected:
00164 virtual UnicodeString &format(
00165 const UnicodeString &original,
00166 FieldPositionIterator &fpi,
00167 const UnicodeString &preExponent,
00168 UnicodeString &appendTo,
00169 UErrorCode &status) const;
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;
00181 protected:
00182 virtual UnicodeString &format(
00183 const UnicodeString &original,
00184 FieldPositionIterator &fpi,
00185 const UnicodeString &preExponent,
00186 UnicodeString &appendTo,
00187 UErrorCode &status) const;
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 &);
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
00219
00220 #endif
00221
00222 #endif