Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/unicode/scientificnumberformatter.h @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 69:33d812a61356 |
---|---|
1 // © 2016 and later: Unicode, Inc. and others. | |
2 // License & terms of use: http://www.unicode.org/copyright.html | |
3 /* | |
4 ********************************************************************** | |
5 * Copyright (c) 2014-2016, International Business Machines | |
6 * Corporation and others. All Rights Reserved. | |
7 ********************************************************************** | |
8 */ | |
9 #ifndef SCINUMBERFORMATTER_H | |
10 #define SCINUMBERFORMATTER_H | |
11 | |
12 #include "unicode/utypes.h" | |
13 | |
14 #if U_SHOW_CPLUSPLUS_API | |
15 | |
16 #if !UCONFIG_NO_FORMATTING | |
17 | |
18 | |
19 #include "unicode/unistr.h" | |
20 | |
21 /** | |
22 * \file | |
23 * \brief C++ API: Formats in scientific notation. | |
24 */ | |
25 | |
26 U_NAMESPACE_BEGIN | |
27 | |
28 class FieldPositionIterator; | |
29 class DecimalFormatSymbols; | |
30 class DecimalFormat; | |
31 class Formattable; | |
32 | |
33 /** | |
34 * A formatter that formats numbers in user-friendly scientific notation. | |
35 * | |
36 * Sample code: | |
37 * <pre> | |
38 * UErrorCode status = U_ZERO_ERROR; | |
39 * LocalPointer<ScientificNumberFormatter> fmt( | |
40 * ScientificNumberFormatter::createMarkupInstance( | |
41 * "en", "<sup>", "</sup>", status)); | |
42 * if (U_FAILURE(status)) { | |
43 * return; | |
44 * } | |
45 * UnicodeString appendTo; | |
46 * // appendTo = "1.23456x10<sup>-78</sup>" | |
47 * fmt->format(1.23456e-78, appendTo, status); | |
48 * </pre> | |
49 * | |
50 * @stable ICU 55 | |
51 */ | |
52 class U_I18N_API ScientificNumberFormatter : public UObject { | |
53 public: | |
54 | |
55 /** | |
56 * Creates a ScientificNumberFormatter instance that uses | |
57 * superscript characters for exponents. | |
58 * @param fmtToAdopt The DecimalFormat which must be configured for | |
59 * scientific notation. | |
60 * @param status error returned here. | |
61 * @return The new ScientificNumberFormatter instance. | |
62 * | |
63 * @stable ICU 55 | |
64 */ | |
65 static ScientificNumberFormatter *createSuperscriptInstance( | |
66 DecimalFormat *fmtToAdopt, UErrorCode &status); | |
67 | |
68 /** | |
69 * Creates a ScientificNumberFormatter instance that uses | |
70 * superscript characters for exponents for this locale. | |
71 * @param locale The locale | |
72 * @param status error returned here. | |
73 * @return The ScientificNumberFormatter instance. | |
74 * | |
75 * @stable ICU 55 | |
76 */ | |
77 static ScientificNumberFormatter *createSuperscriptInstance( | |
78 const Locale &locale, UErrorCode &status); | |
79 | |
80 | |
81 /** | |
82 * Creates a ScientificNumberFormatter instance that uses | |
83 * markup for exponents. | |
84 * @param fmtToAdopt The DecimalFormat which must be configured for | |
85 * scientific notation. | |
86 * @param beginMarkup the markup to start superscript. | |
87 * @param endMarkup the markup to end superscript. | |
88 * @param status error returned here. | |
89 * @return The new ScientificNumberFormatter instance. | |
90 * | |
91 * @stable ICU 55 | |
92 */ | |
93 static ScientificNumberFormatter *createMarkupInstance( | |
94 DecimalFormat *fmtToAdopt, | |
95 const UnicodeString &beginMarkup, | |
96 const UnicodeString &endMarkup, | |
97 UErrorCode &status); | |
98 | |
99 /** | |
100 * Creates a ScientificNumberFormatter instance that uses | |
101 * markup for exponents for this locale. | |
102 * @param locale The locale | |
103 * @param beginMarkup the markup to start superscript. | |
104 * @param endMarkup the markup to end superscript. | |
105 * @param status error returned here. | |
106 * @return The ScientificNumberFormatter instance. | |
107 * | |
108 * @stable ICU 55 | |
109 */ | |
110 static ScientificNumberFormatter *createMarkupInstance( | |
111 const Locale &locale, | |
112 const UnicodeString &beginMarkup, | |
113 const UnicodeString &endMarkup, | |
114 UErrorCode &status); | |
115 | |
116 | |
117 /** | |
118 * Returns a copy of this object. Caller must free returned copy. | |
119 * @stable ICU 55 | |
120 */ | |
121 ScientificNumberFormatter *clone() const { | |
122 return new ScientificNumberFormatter(*this); | |
123 } | |
124 | |
125 /** | |
126 * Destructor. | |
127 * @stable ICU 55 | |
128 */ | |
129 virtual ~ScientificNumberFormatter(); | |
130 | |
131 /** | |
132 * Formats a number into user friendly scientific notation. | |
133 * | |
134 * @param number the number to format. | |
135 * @param appendTo formatted string appended here. | |
136 * @param status any error returned here. | |
137 * @return appendTo | |
138 * | |
139 * @stable ICU 55 | |
140 */ | |
141 UnicodeString &format( | |
142 const Formattable &number, | |
143 UnicodeString &appendTo, | |
144 UErrorCode &status) const; | |
145 private: | |
146 class U_I18N_API Style : public UObject { | |
147 public: | |
148 virtual Style *clone() const = 0; | |
149 protected: | |
150 virtual UnicodeString &format( | |
151 const UnicodeString &original, | |
152 FieldPositionIterator &fpi, | |
153 const UnicodeString &preExponent, | |
154 UnicodeString &appendTo, | |
155 UErrorCode &status) const = 0; | |
156 private: | |
157 friend class ScientificNumberFormatter; | |
158 }; | |
159 | |
160 class U_I18N_API SuperscriptStyle : public Style { | |
161 public: | |
162 virtual SuperscriptStyle *clone() const; | |
163 protected: | |
164 virtual UnicodeString &format( | |
165 const UnicodeString &original, | |
166 FieldPositionIterator &fpi, | |
167 const UnicodeString &preExponent, | |
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 MarkupStyle *clone() const; | |
181 protected: | |
182 virtual UnicodeString &format( | |
183 const UnicodeString &original, | |
184 FieldPositionIterator &fpi, | |
185 const UnicodeString &preExponent, | |
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 | |
213 }; | |
214 | |
215 U_NAMESPACE_END | |
216 | |
217 | |
218 #endif /* !UCONFIG_NO_FORMATTING */ | |
219 | |
220 #endif /* U_SHOW_CPLUSPLUS_API */ | |
221 | |
222 #endif |