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 DecimalFormatSymbols;
00028 class DecimalFormat;
00029 class Formattable;
00030
00050 class U_I18N_API ScientificNumberFormatter : public UObject {
00051 public:
00052
00063 static ScientificNumberFormatter *createSuperscriptInstance(
00064 DecimalFormat *fmtToAdopt, UErrorCode &status);
00065
00075 static ScientificNumberFormatter *createSuperscriptInstance(
00076 const Locale &locale, UErrorCode &status);
00077
00078
00091 static ScientificNumberFormatter *createMarkupInstance(
00092 DecimalFormat *fmtToAdopt,
00093 const UnicodeString &beginMarkup,
00094 const UnicodeString &endMarkup,
00095 UErrorCode &status);
00096
00108 static ScientificNumberFormatter *createMarkupInstance(
00109 const Locale &locale,
00110 const UnicodeString &beginMarkup,
00111 const UnicodeString &endMarkup,
00112 UErrorCode &status);
00113
00114
00119 ScientificNumberFormatter *clone() const {
00120 return new ScientificNumberFormatter(*this);
00121 }
00122
00127 virtual ~ScientificNumberFormatter();
00128
00139 UnicodeString &format(
00140 const Formattable &number,
00141 UnicodeString &appendTo,
00142 UErrorCode &status) const;
00143 private:
00144 class U_I18N_API Style : public UObject {
00145 public:
00146 virtual Style *clone() const = 0;
00147 protected:
00148 virtual UnicodeString &format(
00149 const UnicodeString &original,
00150 FieldPositionIterator &fpi,
00151 const UnicodeString &preExponent,
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 UnicodeString &appendTo,
00167 UErrorCode &status) const;
00168 };
00169
00170 class U_I18N_API MarkupStyle : public Style {
00171 public:
00172 MarkupStyle(
00173 const UnicodeString &beginMarkup,
00174 const UnicodeString &endMarkup)
00175 : Style(),
00176 fBeginMarkup(beginMarkup),
00177 fEndMarkup(endMarkup) { }
00178 virtual Style *clone() const;
00179 protected:
00180 virtual UnicodeString &format(
00181 const UnicodeString &original,
00182 FieldPositionIterator &fpi,
00183 const UnicodeString &preExponent,
00184 UnicodeString &appendTo,
00185 UErrorCode &status) const;
00186 private:
00187 UnicodeString fBeginMarkup;
00188 UnicodeString fEndMarkup;
00189 };
00190
00191 ScientificNumberFormatter(
00192 DecimalFormat *fmtToAdopt,
00193 Style *styleToAdopt,
00194 UErrorCode &status);
00195
00196 ScientificNumberFormatter(const ScientificNumberFormatter &other);
00197 ScientificNumberFormatter &operator=(const ScientificNumberFormatter &);
00198
00199 static void getPreExponent(
00200 const DecimalFormatSymbols &dfs, UnicodeString &preExponent);
00201
00202 static ScientificNumberFormatter *createInstance(
00203 DecimalFormat *fmtToAdopt,
00204 Style *styleToAdopt,
00205 UErrorCode &status);
00206
00207 UnicodeString fPreExponent;
00208 DecimalFormat *fDecimalFormat;
00209 Style *fStyle;
00210
00211 };
00212
00213 U_NAMESPACE_END
00214
00215
00216 #endif
00217 #endif