Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(196)

Side by Side Diff: source/i18n/unicode/scientificnumberformatter.h

Issue 1621843002: ICU 56 update step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@561
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/i18n/unicode/scientificformathelper.h ('k') | source/i18n/unicode/smpdtfmt.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 **********************************************************************
3 * Copyright (c) 2014, 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 #ifndef U_HIDE_DRAFT_API
15
16 #include "unicode/unistr.h"
17
18 /**
19 * \file
20 * \brief C++ API: Formats in scientific notation.
21 */
22
23 U_NAMESPACE_BEGIN
24
25 class FieldPositionIterator;
26 class DecimalFormatStaticSets;
27 class DecimalFormatSymbols;
28 class DecimalFormat;
29 class Formattable;
30
31 /**
32 * A formatter that formats numbers in user-friendly scientific notation.
33 *
34 * Sample code:
35 * <pre>
36 * UErrorCode status = U_ZERO_ERROR;
37 * LocalPointer<ScientificNumberFormatter> fmt(
38 * ScientificNumberFormatter::createMarkupInstance(
39 * "en", "<sup>", "</sup>", status));
40 * if (U_FAILURE(status)) {
41 * return;
42 * }
43 * UnicodeString appendTo;
44 * // appendTo = "1.23456x10<sup>-78</sup>"
45 * fmt->format(1.23456e-78, appendTo, status);
46 * </pre>
47 *
48 * @draft ICU 55
49 */
50 class U_I18N_API ScientificNumberFormatter : public UObject {
51 public:
52
53 /**
54 * Creates a ScientificNumberFormatter instance that uses
55 * superscript characters for exponents.
56 * @param fmtToAdopt The DecimalFormat which must be configured for
57 * scientific notation.
58 * @param status error returned here.
59 * @return The new ScientificNumberFormatter instance.
60 *
61 * @draft ICU 55
62 */
63 static ScientificNumberFormatter *createSuperscriptInstance(
64 DecimalFormat *fmtToAdopt, UErrorCode &status);
65
66 /**
67 * Creates a ScientificNumberFormatter instance that uses
68 * superscript characters for exponents for this locale.
69 * @param locale The locale
70 * @param status error returned here.
71 * @return The ScientificNumberFormatter instance.
72 *
73 * @draft ICU 55
74 */
75 static ScientificNumberFormatter *createSuperscriptInstance(
76 const Locale &locale, UErrorCode &status);
77
78
79 /**
80 * Creates a ScientificNumberFormatter instance that uses
81 * markup for exponents.
82 * @param fmtToAdopt The DecimalFormat which must be configured for
83 * scientific notation.
84 * @param beginMarkup the markup to start superscript.
85 * @param endMarkup the markup to end superscript.
86 * @param status error returned here.
87 * @return The new ScientificNumberFormatter instance.
88 *
89 * @draft ICU 55
90 */
91 static ScientificNumberFormatter *createMarkupInstance(
92 DecimalFormat *fmtToAdopt,
93 const UnicodeString &beginMarkup,
94 const UnicodeString &endMarkup,
95 UErrorCode &status);
96
97 /**
98 * Creates a ScientificNumberFormatter instance that uses
99 * markup for exponents for this locale.
100 * @param locale The locale
101 * @param beginMarkup the markup to start superscript.
102 * @param endMarkup the markup to end superscript.
103 * @param status error returned here.
104 * @return The ScientificNumberFormatter instance.
105 *
106 * @draft ICU 55
107 */
108 static ScientificNumberFormatter *createMarkupInstance(
109 const Locale &locale,
110 const UnicodeString &beginMarkup,
111 const UnicodeString &endMarkup,
112 UErrorCode &status);
113
114
115 /**
116 * Returns a copy of this object. Caller must free returned copy.
117 * @draft ICU 55
118 */
119 ScientificNumberFormatter *clone() const {
120 return new ScientificNumberFormatter(*this);
121 }
122
123 /**
124 * Destructor.
125 * @draft ICU 55
126 */
127 virtual ~ScientificNumberFormatter();
128
129 /**
130 * Formats a number into user friendly scientific notation.
131 *
132 * @param number the number to format.
133 * @param appendTo formatted string appended here.
134 * @param status any error returned here.
135 * @return appendTo
136 *
137 * @draft ICU 55
138 */
139 UnicodeString &format(
140 const Formattable &number,
141 UnicodeString &appendTo,
142 UErrorCode &status) const;
143 private:
144 class U_I18N_API Style : public UObject {
145 public:
146 virtual Style *clone() const = 0;
147 protected:
148 virtual UnicodeString &format(
149 const UnicodeString &original,
150 FieldPositionIterator &fpi,
151 const UnicodeString &preExponent,
152 const DecimalFormatStaticSets &decimalFormatSets,
153 UnicodeString &appendTo,
154 UErrorCode &status) const = 0;
155 private:
156 friend class ScientificNumberFormatter;
157 };
158
159 class U_I18N_API SuperscriptStyle : public Style {
160 public:
161 virtual Style *clone() const;
162 protected:
163 virtual UnicodeString &format(
164 const UnicodeString &original,
165 FieldPositionIterator &fpi,
166 const UnicodeString &preExponent,
167 const DecimalFormatStaticSets &decimalFormatSets,
168 UnicodeString &appendTo,
169 UErrorCode &status) const;
170 };
171
172 class U_I18N_API MarkupStyle : public Style {
173 public:
174 MarkupStyle(
175 const UnicodeString &beginMarkup,
176 const UnicodeString &endMarkup)
177 : Style(),
178 fBeginMarkup(beginMarkup),
179 fEndMarkup(endMarkup) { }
180 virtual Style *clone() const;
181 protected:
182 virtual UnicodeString &format(
183 const UnicodeString &original,
184 FieldPositionIterator &fpi,
185 const UnicodeString &preExponent,
186 const DecimalFormatStaticSets &decimalFormatSets,
187 UnicodeString &appendTo,
188 UErrorCode &status) const;
189 private:
190 UnicodeString fBeginMarkup;
191 UnicodeString fEndMarkup;
192 };
193
194 ScientificNumberFormatter(
195 DecimalFormat *fmtToAdopt,
196 Style *styleToAdopt,
197 UErrorCode &status);
198
199 ScientificNumberFormatter(const ScientificNumberFormatter &other);
200 ScientificNumberFormatter &operator=(const ScientificNumberFormatter &);
201
202 static void getPreExponent(
203 const DecimalFormatSymbols &dfs, UnicodeString &preExponent);
204
205 static ScientificNumberFormatter *createInstance(
206 DecimalFormat *fmtToAdopt,
207 Style *styleToAdopt,
208 UErrorCode &status);
209
210 UnicodeString fPreExponent;
211 DecimalFormat *fDecimalFormat;
212 Style *fStyle;
213 const DecimalFormatStaticSets *fStaticSets;
214
215 };
216
217 U_NAMESPACE_END
218
219 #endif /* U_HIDE_DRAFT_API */
220
221 #endif /* !UCONFIG_NO_FORMATTING */
222 #endif
OLDNEW
« no previous file with comments | « source/i18n/unicode/scientificformathelper.h ('k') | source/i18n/unicode/smpdtfmt.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698