00001
00002
00003
00004
00005
00006
00007 #ifndef SCINUMBERFORMATTER_H
00008 #define SCINUMBERFORMATTER_H
00009
00010 #include "unicode/utypes.h"
00011
00012 #if !UCONFIG_NO_FORMATTING
00013
00014
00015 #include "unicode/unistr.h"
00016
00022 U_NAMESPACE_BEGIN
00023
00024 class FieldPositionIterator;
00025 class DecimalFormatStaticSets;
00026 class DecimalFormatSymbols;
00027 class DecimalFormat;
00028 class Formattable;
00029
00049 class U_I18N_API ScientificNumberFormatter : public UObject {
00050 public:
00051
00062 static ScientificNumberFormatter *createSuperscriptInstance(
00063 DecimalFormat *fmtToAdopt, UErrorCode &status);
00064
00074 static ScientificNumberFormatter *createSuperscriptInstance(
00075 const Locale &locale, UErrorCode &status);
00076
00077
00090 static ScientificNumberFormatter *createMarkupInstance(
00091 DecimalFormat *fmtToAdopt,
00092 const UnicodeString &beginMarkup,
00093 const UnicodeString &endMarkup,
00094 UErrorCode &status);
00095
00107 static ScientificNumberFormatter *createMarkupInstance(
00108 const Locale &locale,
00109 const UnicodeString &beginMarkup,
00110 const UnicodeString &endMarkup,
00111 UErrorCode &status);
00112
00113
00118 ScientificNumberFormatter *clone() const {
00119 return new ScientificNumberFormatter(*this);
00120 }
00121
00126 virtual ~ScientificNumberFormatter();
00127
00138 UnicodeString &format(
00139 const Formattable &number,
00140 UnicodeString &appendTo,
00141 UErrorCode &status) const;
00142 private:
00143 class U_I18N_API Style : public UObject {
00144 public:
00145 virtual Style *clone() const = 0;
00146 protected:
00147 virtual UnicodeString &format(
00148 const UnicodeString &original,
00149 FieldPositionIterator &fpi,
00150 const UnicodeString &preExponent,
00151 const DecimalFormatStaticSets &decimalFormatSets,
00152 UnicodeString &appendTo,
00153 UErrorCode &status) const = 0;
00154 private:
00155 friend class ScientificNumberFormatter;
00156 };
00157
00158 class U_I18N_API SuperscriptStyle : public Style {
00159 public:
00160 virtual Style *clone() const;
00161 protected:
00162 virtual UnicodeString &format(
00163 const UnicodeString &original,
00164 FieldPositionIterator &fpi,
00165 const UnicodeString &preExponent,
00166 const DecimalFormatStaticSets &decimalFormatSets,
00167 UnicodeString &appendTo,
00168 UErrorCode &status) const;
00169 };
00170
00171 class U_I18N_API MarkupStyle : public Style {
00172 public:
00173 MarkupStyle(
00174 const UnicodeString &beginMarkup,
00175 const UnicodeString &endMarkup)
00176 : Style(),
00177 fBeginMarkup(beginMarkup),
00178 fEndMarkup(endMarkup) { }
00179 virtual Style *clone() const;
00180 protected:
00181 virtual UnicodeString &format(
00182 const UnicodeString &original,
00183 FieldPositionIterator &fpi,
00184 const UnicodeString &preExponent,
00185 const DecimalFormatStaticSets &decimalFormatSets,
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 const DecimalFormatStaticSets *fStaticSets;
00213
00214 };
00215
00216 U_NAMESPACE_END
00217
00218
00219 #endif
00220 #endif