ICU 57.1  57.1
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,
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,
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 
194  DecimalFormat *fmtToAdopt,
195  Style *styleToAdopt,
196  UErrorCode &status);
197 
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
This class represents the set of symbols needed by DecimalFormat to format numbers.
Definition: dcfmtsym.h:84
DecimalFormat is a concrete subclass of NumberFormat that formats decimal numbers.
Definition: decimfmt.h:667
C++ API: Unicode String.
ScientificNumberFormatter * clone() const
Returns a copy of this object.
A formatter that formats numbers in user-friendly scientific notation.
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:358
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:129
FieldPositionIterator returns the field ids and their start/limit positions generated by a call to Fo...
Definition: fpositer.h:53
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:130
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers...
Definition: utypes.h:476
Basic definitions for ICU, for both C and C++ APIs.
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:293
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition: fmtable.h:66
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:221
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:185