ICU 57.1  57.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
scientificnumberformatter.h
Go to the documentation of this file.
1 /*
2 **********************************************************************
3 * Copyright (c) 2014-2016, International Business Machines
4 * Corporation and others. All Rights Reserved.
5 **********************************************************************
6 */
7 #ifndef SCINUMBERFORMATTER_H
8 #define SCINUMBERFORMATTER_H
9 
10 #include "unicode/utypes.h"
11 
12 #if !UCONFIG_NO_FORMATTING
13 
14 
15 #include "unicode/unistr.h"
16 
23 
24 class FieldPositionIterator;
25 class DecimalFormatStaticSets;
26 class DecimalFormatSymbols;
27 class DecimalFormat;
28 class Formattable;
29 
50 public:
51 
62  static ScientificNumberFormatter *createSuperscriptInstance(
63  DecimalFormat *fmtToAdopt, UErrorCode &status);
64 
74  static ScientificNumberFormatter *createSuperscriptInstance(
75  const Locale &locale, UErrorCode &status);
76 
77 
90  static ScientificNumberFormatter *createMarkupInstance(
91  DecimalFormat *fmtToAdopt,
92  const UnicodeString &beginMarkup,
93  const UnicodeString &endMarkup,
94  UErrorCode &status);
95 
107  static ScientificNumberFormatter *createMarkupInstance(
108  const Locale &locale,
109  const UnicodeString &beginMarkup,
110  const UnicodeString &endMarkup,
111  UErrorCode &status);
112 
113 
119  return new ScientificNumberFormatter(*this);
120  }
121 
126  virtual ~ScientificNumberFormatter();
127 
138  UnicodeString &format(
139  const Formattable &number,
140  UnicodeString &appendTo,
141  UErrorCode &status) const;
142  private:
143  class U_I18N_API Style : public UObject {
144  public:
145  virtual Style *clone() const = 0;
146  protected:
147  virtual UnicodeString &format(
148  const UnicodeString &original,
150  const UnicodeString &preExponent,
151  const DecimalFormatStaticSets &decimalFormatSets,
152  UnicodeString &appendTo,
153  UErrorCode &status) const = 0;
154  private:
155  friend class ScientificNumberFormatter;
156  };
157 
158  class U_I18N_API SuperscriptStyle : public Style {
159  public:
160  virtual Style *clone() const;
161  protected:
162  virtual UnicodeString &format(
163  const UnicodeString &original,
164  FieldPositionIterator &fpi,
165  const UnicodeString &preExponent,
166  const DecimalFormatStaticSets &decimalFormatSets,
167  UnicodeString &appendTo,
168  UErrorCode &status) const;
169  };
170 
171  class U_I18N_API MarkupStyle : public Style {
172  public:
173  MarkupStyle(
174  const UnicodeString &beginMarkup,
175  const UnicodeString &endMarkup)
176  : Style(),
177  fBeginMarkup(beginMarkup),
178  fEndMarkup(endMarkup) { }
179  virtual Style *clone() const;
180  protected:
181  virtual UnicodeString &format(
182  const UnicodeString &original,
183  FieldPositionIterator &fpi,
184  const UnicodeString &preExponent,
185  const DecimalFormatStaticSets &decimalFormatSets,
186  UnicodeString &appendTo,
187  UErrorCode &status) const;
188  private:
189  UnicodeString fBeginMarkup;
190  UnicodeString fEndMarkup;
191  };
192 
193  ScientificNumberFormatter(
194  DecimalFormat *fmtToAdopt,
195  Style *styleToAdopt,
196  UErrorCode &status);
197 
198  ScientificNumberFormatter(const ScientificNumberFormatter &other);
199  ScientificNumberFormatter &operator=(const ScientificNumberFormatter &);
200 
201  static void getPreExponent(
202  const DecimalFormatSymbols &dfs, UnicodeString &preExponent);
203 
204  static ScientificNumberFormatter *createInstance(
205  DecimalFormat *fmtToAdopt,
206  Style *styleToAdopt,
207  UErrorCode &status);
208 
209  UnicodeString fPreExponent;
210  DecimalFormat *fDecimalFormat;
211  Style *fStyle;
212  const DecimalFormatStaticSets *fStaticSets;
213 
214 };
215 
217 
218 
219 #endif /* !UCONFIG_NO_FORMATTING */
220 #endif