Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/unicode/measfmt.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) 2004-2016, International Business Machines | |
6 * Corporation and others. All Rights Reserved. | |
7 ********************************************************************** | |
8 * Author: Alan Liu | |
9 * Created: April 20, 2004 | |
10 * Since: ICU 3.0 | |
11 ********************************************************************** | |
12 */ | |
13 #ifndef MEASUREFORMAT_H | |
14 #define MEASUREFORMAT_H | |
15 | |
16 #include "unicode/utypes.h" | |
17 | |
18 #if U_SHOW_CPLUSPLUS_API | |
19 | |
20 #if !UCONFIG_NO_FORMATTING | |
21 | |
22 #include "unicode/format.h" | |
23 #include "unicode/udat.h" | |
24 | |
25 /** | |
26 * \file | |
27 * \brief C++ API: Compatibility APIs for measure formatting. | |
28 */ | |
29 | |
30 /** | |
31 * Constants for various widths. | |
32 * There are 4 widths: Wide, Short, Narrow, Numeric. | |
33 * For example, for English, when formatting "3 hours" | |
34 * Wide is "3 hours"; short is "3 hrs"; narrow is "3h"; | |
35 * formatting "3 hours 17 minutes" as numeric give "3:17" | |
36 * @stable ICU 53 | |
37 */ | |
38 enum UMeasureFormatWidth { | |
39 | |
40 // Wide, short, and narrow must be first and in this order. | |
41 /** | |
42 * Spell out measure units. | |
43 * @stable ICU 53 | |
44 */ | |
45 UMEASFMT_WIDTH_WIDE, | |
46 | |
47 /** | |
48 * Abbreviate measure units. | |
49 * @stable ICU 53 | |
50 */ | |
51 UMEASFMT_WIDTH_SHORT, | |
52 | |
53 /** | |
54 * Use symbols for measure units when possible. | |
55 * @stable ICU 53 | |
56 */ | |
57 UMEASFMT_WIDTH_NARROW, | |
58 | |
59 /** | |
60 * Completely omit measure units when possible. For example, format | |
61 * '5 hours, 37 minutes' as '5:37' | |
62 * @stable ICU 53 | |
63 */ | |
64 UMEASFMT_WIDTH_NUMERIC, | |
65 | |
66 #ifndef U_HIDE_DEPRECATED_API | |
67 /** | |
68 * One more than the highest normal UMeasureFormatWidth value. | |
69 * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. | |
70 */ | |
71 UMEASFMT_WIDTH_COUNT = 4 | |
72 #endif // U_HIDE_DEPRECATED_API | |
73 }; | |
74 /** @stable ICU 53 */ | |
75 typedef enum UMeasureFormatWidth UMeasureFormatWidth; | |
76 | |
77 U_NAMESPACE_BEGIN | |
78 | |
79 class Measure; | |
80 class MeasureUnit; | |
81 class NumberFormat; | |
82 class PluralRules; | |
83 class MeasureFormatCacheData; | |
84 class SharedNumberFormat; | |
85 class SharedPluralRules; | |
86 class QuantityFormatter; | |
87 class SimpleFormatter; | |
88 class ListFormatter; | |
89 class DateFormat; | |
90 | |
91 /** | |
92 * <p><strong>IMPORTANT:</strong> New users are strongly encouraged to see if | |
93 * numberformatter.h fits their use case. Although not deprecated, this header | |
94 * is provided for backwards compatibility only. | |
95 * | |
96 * @see Format | |
97 * @author Alan Liu | |
98 * @stable ICU 3.0 | |
99 */ | |
100 class U_I18N_API MeasureFormat : public Format { | |
101 public: | |
102 using Format::parseObject; | |
103 using Format::format; | |
104 | |
105 /** | |
106 * Constructor. | |
107 * <p> | |
108 * <strong>NOTE:</strong> New users are strongly encouraged to use | |
109 * {@link icu::number::NumberFormatter} instead of NumberFormat. | |
110 * @stable ICU 53 | |
111 */ | |
112 MeasureFormat( | |
113 const Locale &locale, UMeasureFormatWidth width, UErrorCode &status); | |
114 | |
115 /** | |
116 * Constructor. | |
117 * <p> | |
118 * <strong>NOTE:</strong> New users are strongly encouraged to use | |
119 * {@link icu::number::NumberFormatter} instead of NumberFormat. | |
120 * @stable ICU 53 | |
121 */ | |
122 MeasureFormat( | |
123 const Locale &locale, | |
124 UMeasureFormatWidth width, | |
125 NumberFormat *nfToAdopt, | |
126 UErrorCode &status); | |
127 | |
128 /** | |
129 * Copy constructor. | |
130 * @stable ICU 3.0 | |
131 */ | |
132 MeasureFormat(const MeasureFormat &other); | |
133 | |
134 /** | |
135 * Assignment operator. | |
136 * @stable ICU 3.0 | |
137 */ | |
138 MeasureFormat &operator=(const MeasureFormat &rhs); | |
139 | |
140 /** | |
141 * Destructor. | |
142 * @stable ICU 3.0 | |
143 */ | |
144 virtual ~MeasureFormat(); | |
145 | |
146 /** | |
147 * Return true if given Format objects are semantically equal. | |
148 * @stable ICU 53 | |
149 */ | |
150 virtual UBool operator==(const Format &other) const; | |
151 | |
152 /** | |
153 * Clones this object polymorphically. | |
154 * @stable ICU 53 | |
155 */ | |
156 virtual MeasureFormat *clone() const; | |
157 | |
158 /** | |
159 * Formats object to produce a string. | |
160 * @stable ICU 53 | |
161 */ | |
162 virtual UnicodeString &format( | |
163 const Formattable &obj, | |
164 UnicodeString &appendTo, | |
165 FieldPosition &pos, | |
166 UErrorCode &status) const; | |
167 | |
168 #ifndef U_FORCE_HIDE_DRAFT_API | |
169 /** | |
170 * Parse a string to produce an object. This implementation sets | |
171 * status to U_UNSUPPORTED_ERROR. | |
172 * | |
173 * @draft ICU 53 | |
174 */ | |
175 virtual void parseObject( | |
176 const UnicodeString &source, | |
177 Formattable &reslt, | |
178 ParsePosition &pos) const; | |
179 #endif // U_FORCE_HIDE_DRAFT_API | |
180 | |
181 /** | |
182 * Formats measure objects to produce a string. An example of such a | |
183 * formatted string is 3 meters, 3.5 centimeters. Measure objects appear | |
184 * in the formatted string in the same order they appear in the "measures" | |
185 * array. The NumberFormat of this object is used only to format the amount | |
186 * of the very last measure. The other amounts are formatted with zero | |
187 * decimal places while rounding toward zero. | |
188 * @param measures array of measure objects. | |
189 * @param measureCount the number of measure objects. | |
190 * @param appendTo formatted string appended here. | |
191 * @param pos the field position. | |
192 * @param status the error. | |
193 * @return appendTo reference | |
194 * | |
195 * @stable ICU 53 | |
196 */ | |
197 UnicodeString &formatMeasures( | |
198 const Measure *measures, | |
199 int32_t measureCount, | |
200 UnicodeString &appendTo, | |
201 FieldPosition &pos, | |
202 UErrorCode &status) const; | |
203 | |
204 /** | |
205 * Formats a single measure per unit. An example of such a | |
206 * formatted string is 3.5 meters per second. | |
207 * @param measure The measure object. In above example, 3.5 meters. | |
208 * @param perUnit The per unit. In above example, it is | |
209 * `*%MeasureUnit::createSecond(status)`. | |
210 * @param appendTo formatted string appended here. | |
211 * @param pos the field position. | |
212 * @param status the error. | |
213 * @return appendTo reference | |
214 * | |
215 * @stable ICU 55 | |
216 */ | |
217 UnicodeString &formatMeasurePerUnit( | |
218 const Measure &measure, | |
219 const MeasureUnit &perUnit, | |
220 UnicodeString &appendTo, | |
221 FieldPosition &pos, | |
222 UErrorCode &status) const; | |
223 | |
224 /** | |
225 * Gets the display name of the specified {@link MeasureUnit} corresponding to the current | |
226 * locale and format width. | |
227 * @param unit The unit for which to get a display name. | |
228 * @param status the error. | |
229 * @return The display name in the locale and width specified in | |
230 * the MeasureFormat constructor, or null if there is no display name available | |
231 * for the specified unit. | |
232 * | |
233 * @stable ICU 58 | |
234 */ | |
235 UnicodeString getUnitDisplayName(const MeasureUnit& unit, UErrorCode &status) const; | |
236 | |
237 | |
238 /** | |
239 * Return a formatter for CurrencyAmount objects in the given | |
240 * locale. | |
241 * <p> | |
242 * <strong>NOTE:</strong> New users are strongly encouraged to use | |
243 * {@link icu::number::NumberFormatter} instead of NumberFormat. | |
244 * @param locale desired locale | |
245 * @param ec input-output error code | |
246 * @return a formatter object, or NULL upon error | |
247 * @stable ICU 3.0 | |
248 */ | |
249 static MeasureFormat* U_EXPORT2 createCurrencyFormat(const Locale& locale, | |
250 UErrorCode& ec); | |
251 | |
252 /** | |
253 * Return a formatter for CurrencyAmount objects in the default | |
254 * locale. | |
255 * <p> | |
256 * <strong>NOTE:</strong> New users are strongly encouraged to use | |
257 * {@link icu::number::NumberFormatter} instead of NumberFormat. | |
258 * @param ec input-output error code | |
259 * @return a formatter object, or NULL upon error | |
260 * @stable ICU 3.0 | |
261 */ | |
262 static MeasureFormat* U_EXPORT2 createCurrencyFormat(UErrorCode& ec); | |
263 | |
264 /** | |
265 * Return the class ID for this class. This is useful only for comparing to | |
266 * a return value from getDynamicClassID(). For example: | |
267 * <pre> | |
268 * . Base* polymorphic_pointer = createPolymorphicObject(); | |
269 * . if (polymorphic_pointer->getDynamicClassID() == | |
270 * . erived::getStaticClassID()) ... | |
271 * </pre> | |
272 * @return The class ID for all objects of this class. | |
273 * @stable ICU 53 | |
274 */ | |
275 static UClassID U_EXPORT2 getStaticClassID(void); | |
276 | |
277 /** | |
278 * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This | |
279 * method is to implement a simple version of RTTI, since not all C++ | |
280 * compilers support genuine RTTI. Polymorphic operator==() and clone() | |
281 * methods call this method. | |
282 * | |
283 * @return The class ID for this object. All objects of a | |
284 * given class have the same class ID. Objects of | |
285 * other classes have different class IDs. | |
286 * @stable ICU 53 | |
287 */ | |
288 virtual UClassID getDynamicClassID(void) const; | |
289 | |
290 protected: | |
291 /** | |
292 * Default constructor. | |
293 * @stable ICU 3.0 | |
294 */ | |
295 MeasureFormat(); | |
296 | |
297 #ifndef U_HIDE_INTERNAL_API | |
298 | |
299 /** | |
300 * ICU use only. | |
301 * Initialize or change MeasureFormat class from subclass. | |
302 * @internal. | |
303 */ | |
304 void initMeasureFormat( | |
305 const Locale &locale, | |
306 UMeasureFormatWidth width, | |
307 NumberFormat *nfToAdopt, | |
308 UErrorCode &status); | |
309 /** | |
310 * ICU use only. | |
311 * Allows subclass to change locale. Note that this method also changes | |
312 * the NumberFormat object. Returns TRUE if locale changed; FALSE if no | |
313 * change was made. | |
314 * @internal. | |
315 */ | |
316 UBool setMeasureFormatLocale(const Locale &locale, UErrorCode &status); | |
317 | |
318 /** | |
319 * ICU use only. | |
320 * Let subclass change NumberFormat. | |
321 * @internal. | |
322 */ | |
323 void adoptNumberFormat(NumberFormat *nfToAdopt, UErrorCode &status); | |
324 | |
325 /** | |
326 * ICU use only. | |
327 * @internal. | |
328 */ | |
329 const NumberFormat &getNumberFormatInternal() const; | |
330 | |
331 /** | |
332 * ICU use only. | |
333 * Always returns the short form currency formatter. | |
334 * @internal. | |
335 */ | |
336 const NumberFormat& getCurrencyFormatInternal() const; | |
337 | |
338 /** | |
339 * ICU use only. | |
340 * @internal. | |
341 */ | |
342 const PluralRules &getPluralRules() const; | |
343 | |
344 /** | |
345 * ICU use only. | |
346 * @internal. | |
347 */ | |
348 Locale getLocale(UErrorCode &status) const; | |
349 | |
350 /** | |
351 * ICU use only. | |
352 * @internal. | |
353 */ | |
354 const char *getLocaleID(UErrorCode &status) const; | |
355 | |
356 #endif /* U_HIDE_INTERNAL_API */ | |
357 | |
358 private: | |
359 const MeasureFormatCacheData *cache; | |
360 const SharedNumberFormat *numberFormat; | |
361 const SharedPluralRules *pluralRules; | |
362 UMeasureFormatWidth fWidth; | |
363 | |
364 // Declared outside of MeasureFormatSharedData because ListFormatter | |
365 // objects are relatively cheap to copy; therefore, they don't need to be | |
366 // shared across instances. | |
367 ListFormatter *listFormatter; | |
368 | |
369 UnicodeString &formatMeasure( | |
370 const Measure &measure, | |
371 const NumberFormat &nf, | |
372 UnicodeString &appendTo, | |
373 FieldPosition &pos, | |
374 UErrorCode &status) const; | |
375 | |
376 UnicodeString &formatMeasuresSlowTrack( | |
377 const Measure *measures, | |
378 int32_t measureCount, | |
379 UnicodeString& appendTo, | |
380 FieldPosition& pos, | |
381 UErrorCode& status) const; | |
382 | |
383 UnicodeString &formatNumeric( | |
384 const Formattable *hms, // always length 3: [0] is hour; [1] is | |
385 // minute; [2] is second. | |
386 int32_t bitMap, // 1=hour set, 2=minute set, 4=second set | |
387 UnicodeString &appendTo, | |
388 UErrorCode &status) const; | |
389 }; | |
390 | |
391 U_NAMESPACE_END | |
392 | |
393 #endif // #if !UCONFIG_NO_FORMATTING | |
394 | |
395 #endif /* U_SHOW_CPLUSPLUS_API */ | |
396 | |
397 #endif // #ifndef MEASUREFORMAT_H |