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 !UCONFIG_NO_FORMATTING
00015
00016
00017 #include "unicode/unistr.h"
00018
00024 U_NAMESPACE_BEGIN
00025
00026 class FieldPositionIterator;
00027 class DecimalFormatStaticSets;
00028 class DecimalFormatSymbols;
00029 class DecimalFormat;
00030 class Formattable;
00031
00051 class U_I18N_API ScientificNumberFormatter : public UObject {
00052 public:
00053
00064 static ScientificNumberFormatter *createSuperscriptInstance(
00065 DecimalFormat *fmtToAdopt, UErrorCode &status);
00066
00076 static ScientificNumberFormatter *createSuperscriptInstance(
00077 const Locale &locale, UErrorCode &status);
00078
00079
00092 static ScientificNumberFormatter *createMarkupInstance(
00093 DecimalFormat *fmtToAdopt,
00094 const UnicodeString &beginMarkup,
00095 const UnicodeString &endMarkup,
00096 UErrorCode &status);
00097
00109 static ScientificNumberFormatter *createMarkupInstance(
00110 const Locale &locale,
00111 const UnicodeString &beginMarkup,
00112 const UnicodeString &endMarkup,
00113 UErrorCode &status);
00114
00115
00120 ScientificNumberFormatter *clone() const {
00121 return new ScientificNumberFormatter(*this);
00122 }
00123
00128 virtual ~ScientificNumberFormatter();
00129
00140 UnicodeString &format(
00141 const Formattable &number,
00142 UnicodeString &appendTo,
00143 UErrorCode &status) const;
00144 private:
00145 class U_I18N_API Style : public UObject {
00146 public:
00147 virtual Style *clone() const = 0;
00148 protected:
00149 virtual UnicodeString &format(
00150 const UnicodeString &original,
00151 FieldPositionIterator &fpi,
00152 const UnicodeString &preExponent,
00153 const DecimalFormatStaticSets &decimalFormatSets,
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 Style *clone() const;
00163 protected:
00164 virtual UnicodeString &format(
00165 const UnicodeString &original,
00166 FieldPositionIterator &fpi,
00167 const UnicodeString &preExponent,
00168 const DecimalFormatStaticSets &decimalFormatSets,
00169 UnicodeString &appendTo,
00170 UErrorCode &status) const;
00171 };
00172
00173 class U_I18N_API MarkupStyle : public Style {
00174 public:
00175 MarkupStyle(
00176 const UnicodeString &beginMarkup,
00177 const UnicodeString &endMarkup)
00178 : Style(),
00179 fBeginMarkup(beginMarkup),
00180 fEndMarkup(endMarkup) { }
00181 virtual Style *clone() const;
00182 protected:
00183 virtual UnicodeString &format(
00184 const UnicodeString &original,
00185 FieldPositionIterator &fpi,
00186 const UnicodeString &preExponent,
00187 const DecimalFormatStaticSets &decimalFormatSets,
00188 UnicodeString &appendTo,
00189 UErrorCode &status) const;
00190 private:
00191 UnicodeString fBeginMarkup;
00192 UnicodeString fEndMarkup;
00193 };
00194
00195 ScientificNumberFormatter(
00196 DecimalFormat *fmtToAdopt,
00197 Style *styleToAdopt,
00198 UErrorCode &status);
00199
00200 ScientificNumberFormatter(const ScientificNumberFormatter &other);
00201 ScientificNumberFormatter &operator=(const ScientificNumberFormatter &);
00202
00203 static void getPreExponent(
00204 const DecimalFormatSymbols &dfs, UnicodeString &preExponent);
00205
00206 static ScientificNumberFormatter *createInstance(
00207 DecimalFormat *fmtToAdopt,
00208 Style *styleToAdopt,
00209 UErrorCode &status);
00210
00211 UnicodeString fPreExponent;
00212 DecimalFormat *fDecimalFormat;
00213 Style *fStyle;
00214 const DecimalFormatStaticSets *fStaticSets;
00215
00216 };
00217
00218 U_NAMESPACE_END
00219
00220
00221 #endif
00222 #endif