OLD | NEW |
1 /* | 1 /* |
2 ********************************************************************** | 2 ********************************************************************** |
3 * Copyright (c) 2004-2014, International Business Machines | 3 * Copyright (c) 2004-2015, International Business Machines |
4 * Corporation and others. All Rights Reserved. | 4 * Corporation and others. All Rights Reserved. |
5 ********************************************************************** | 5 ********************************************************************** |
6 * Author: Alan Liu | 6 * Author: Alan Liu |
7 * Created: April 20, 2004 | 7 * Created: April 20, 2004 |
8 * Since: ICU 3.0 | 8 * Since: ICU 3.0 |
9 ********************************************************************** | 9 ********************************************************************** |
10 */ | 10 */ |
11 #ifndef MEASUREFORMAT_H | 11 #ifndef MEASUREFORMAT_H |
12 #define MEASUREFORMAT_H | 12 #define MEASUREFORMAT_H |
13 | 13 |
14 #include "unicode/utypes.h" | 14 #include "unicode/utypes.h" |
15 | 15 |
16 #if !UCONFIG_NO_FORMATTING | 16 #if !UCONFIG_NO_FORMATTING |
17 | 17 |
18 #include "unicode/format.h" | 18 #include "unicode/format.h" |
19 #include "unicode/udat.h" | 19 #include "unicode/udat.h" |
20 | 20 |
21 /** | 21 /** |
22 * \file | 22 * \file |
23 * \brief C++ API: Formatter for measure objects. | 23 * \brief C++ API: Formatter for measure objects. |
24 */ | 24 */ |
25 | 25 |
26 /** | 26 /** |
27 * Constants for various widths. | 27 * Constants for various widths. |
28 * There are 4 widths: Wide, Short, Narrow, Numeric. | 28 * There are 4 widths: Wide, Short, Narrow, Numeric. |
29 * For example, for English, when formatting "3 hours" | 29 * For example, for English, when formatting "3 hours" |
30 * Wide is "3 hours"; short is "3 hrs"; narrow is "3h"; | 30 * Wide is "3 hours"; short is "3 hrs"; narrow is "3h"; |
31 * formatting "3 hours 17 minutes" as numeric give "3:17" | 31 * formatting "3 hours 17 minutes" as numeric give "3:17" |
32 * @draft ICU 53 | 32 * @stable ICU 53 |
33 */ | 33 */ |
34 enum UMeasureFormatWidth { | 34 enum UMeasureFormatWidth { |
35 | 35 |
36 #ifndef U_HIDE_DRAFT_API | |
37 // Wide, short, and narrow must be first and in this order. | 36 // Wide, short, and narrow must be first and in this order. |
38 /** | 37 /** |
39 * Spell out measure units. | 38 * Spell out measure units. |
40 * @draft ICU 53 | 39 * @stable ICU 53 |
41 */ | 40 */ |
42 UMEASFMT_WIDTH_WIDE, | 41 UMEASFMT_WIDTH_WIDE, |
43 | 42 |
44 /** | 43 /** |
45 * Abbreviate measure units. | 44 * Abbreviate measure units. |
46 * @draft ICU 53 | 45 * @stable ICU 53 |
47 */ | 46 */ |
48 UMEASFMT_WIDTH_SHORT, | 47 UMEASFMT_WIDTH_SHORT, |
49 | 48 |
50 /** | 49 /** |
51 * Use symbols for measure units when possible. | 50 * Use symbols for measure units when possible. |
52 * @draft ICU 53 | 51 * @stable ICU 53 |
53 */ | 52 */ |
54 UMEASFMT_WIDTH_NARROW, | 53 UMEASFMT_WIDTH_NARROW, |
55 | 54 |
56 /** | 55 /** |
57 * Completely omit measure units when possible. For example, format | 56 * Completely omit measure units when possible. For example, format |
58 * '5 hours, 37 minutes' as '5:37' | 57 * '5 hours, 37 minutes' as '5:37' |
59 * @draft ICU 53 | 58 * @stable ICU 53 |
60 */ | 59 */ |
61 UMEASFMT_WIDTH_NUMERIC, | 60 UMEASFMT_WIDTH_NUMERIC, |
62 #endif /* U_HIDE_DRAFT_API */ | |
63 | 61 |
64 /** | 62 /** |
65 * Count of values in this enum. | 63 * Count of values in this enum. |
66 * @draft ICU 53 | 64 * @stable ICU 53 |
67 */ | 65 */ |
68 UMEASFMT_WIDTH_COUNT = 4 | 66 UMEASFMT_WIDTH_COUNT = 4 |
69 }; | 67 }; |
70 /** @draft ICU 53 */ | 68 /** @stable ICU 53 */ |
71 typedef enum UMeasureFormatWidth UMeasureFormatWidth; | 69 typedef enum UMeasureFormatWidth UMeasureFormatWidth; |
72 | 70 |
73 U_NAMESPACE_BEGIN | 71 U_NAMESPACE_BEGIN |
74 | 72 |
75 class Measure; | 73 class Measure; |
76 class MeasureUnit; | 74 class MeasureUnit; |
77 class NumberFormat; | 75 class NumberFormat; |
78 class PluralRules; | 76 class PluralRules; |
79 class MeasureFormatCacheData; | 77 class MeasureFormatCacheData; |
80 class SharedNumberFormat; | 78 class SharedNumberFormat; |
81 class SharedPluralRules; | 79 class SharedPluralRules; |
82 class QuantityFormatter; | 80 class QuantityFormatter; |
83 class SimplePatternFormatter; | 81 class SimplePatternFormatter; |
84 class ListFormatter; | 82 class ListFormatter; |
85 class DateFormat; | 83 class DateFormat; |
86 | 84 |
87 /** | 85 /** |
88 * | 86 * |
89 * A formatter for measure objects. | 87 * A formatter for measure objects. |
90 * | 88 * |
91 * @see Format | 89 * @see Format |
92 * @author Alan Liu | 90 * @author Alan Liu |
93 * @stable ICU 3.0 | 91 * @stable ICU 3.0 |
94 */ | 92 */ |
95 class U_I18N_API MeasureFormat : public Format { | 93 class U_I18N_API MeasureFormat : public Format { |
96 public: | 94 public: |
97 using Format::parseObject; | 95 using Format::parseObject; |
98 using Format::format; | 96 using Format::format; |
99 | 97 |
100 #ifndef U_HIDE_DRAFT_API | |
101 /** | 98 /** |
102 * Constructor. | 99 * Constructor. |
103 * @draft ICU 53 | 100 * @stable ICU 53 |
104 */ | 101 */ |
105 MeasureFormat( | 102 MeasureFormat( |
106 const Locale &locale, UMeasureFormatWidth width, UErrorCode &status)
; | 103 const Locale &locale, UMeasureFormatWidth width, UErrorCode &status)
; |
107 | 104 |
108 /** | 105 /** |
109 * Constructor. | 106 * Constructor. |
110 * @draft ICU 53 | 107 * @stable ICU 53 |
111 */ | 108 */ |
112 MeasureFormat( | 109 MeasureFormat( |
113 const Locale &locale, | 110 const Locale &locale, |
114 UMeasureFormatWidth width, | 111 UMeasureFormatWidth width, |
115 NumberFormat *nfToAdopt, | 112 NumberFormat *nfToAdopt, |
116 UErrorCode &status); | 113 UErrorCode &status); |
117 #endif /* U_HIDE_DRAFT_API */ | |
118 | 114 |
119 /** | 115 /** |
120 * Copy constructor. | 116 * Copy constructor. |
121 * @draft ICU 53 | 117 * @stable ICU 3.0 |
122 */ | 118 */ |
123 MeasureFormat(const MeasureFormat &other); | 119 MeasureFormat(const MeasureFormat &other); |
124 | 120 |
125 /** | 121 /** |
126 * Assignment operator. | 122 * Assignment operator. |
127 * @draft ICU 53 | 123 * @stable ICU 3.0 |
128 */ | 124 */ |
129 MeasureFormat &operator=(const MeasureFormat &rhs); | 125 MeasureFormat &operator=(const MeasureFormat &rhs); |
130 | 126 |
131 /** | 127 /** |
132 * Destructor. | 128 * Destructor. |
133 * @stable ICU 3.0 | 129 * @stable ICU 3.0 |
134 */ | 130 */ |
135 virtual ~MeasureFormat(); | 131 virtual ~MeasureFormat(); |
136 | 132 |
137 /** | 133 /** |
138 * Return true if given Format objects are semantically equal. | 134 * Return true if given Format objects are semantically equal. |
139 * @draft ICU 53 | 135 * @stable ICU 53 |
140 */ | 136 */ |
141 virtual UBool operator==(const Format &other) const; | 137 virtual UBool operator==(const Format &other) const; |
142 | 138 |
143 /** | 139 /** |
144 * Clones this object polymorphically. | 140 * Clones this object polymorphically. |
145 * @draft ICU 53 | 141 * @stable ICU 53 |
146 */ | 142 */ |
147 virtual Format *clone() const; | 143 virtual Format *clone() const; |
148 | 144 |
149 /** | 145 /** |
150 * Formats object to produce a string. | 146 * Formats object to produce a string. |
151 * @draft ICU 53 | 147 * @stable ICU 53 |
152 */ | 148 */ |
153 virtual UnicodeString &format( | 149 virtual UnicodeString &format( |
154 const Formattable &obj, | 150 const Formattable &obj, |
155 UnicodeString &appendTo, | 151 UnicodeString &appendTo, |
156 FieldPosition &pos, | 152 FieldPosition &pos, |
157 UErrorCode &status) const; | 153 UErrorCode &status) const; |
158 | 154 |
159 /** | 155 /** |
160 * Parse a string to produce an object. This implementation sets | 156 * Parse a string to produce an object. This implementation sets |
161 * status to U_UNSUPPORTED_ERROR. | 157 * status to U_UNSUPPORTED_ERROR. |
162 * | 158 * |
163 * @draft ICU 53 | 159 * @draft ICU 53 |
164 */ | 160 */ |
165 virtual void parseObject( | 161 virtual void parseObject( |
166 const UnicodeString &source, | 162 const UnicodeString &source, |
167 Formattable &reslt, | 163 Formattable &reslt, |
168 ParsePosition &pos) const; | 164 ParsePosition &pos) const; |
169 | 165 |
170 #ifndef U_HIDE_DRAFT_API | |
171 /** | 166 /** |
172 * Formats measure objects to produce a string. An example of such a | 167 * Formats measure objects to produce a string. An example of such a |
173 * formatted string is 3 meters, 3.5 centimeters. Measure objects appear | 168 * formatted string is 3 meters, 3.5 centimeters. Measure objects appear |
174 * in the formatted string in the same order they appear in the "measures" | 169 * in the formatted string in the same order they appear in the "measures" |
175 * array. The NumberFormat of this object is used only to format the amount | 170 * array. The NumberFormat of this object is used only to format the amount |
176 * of the very last measure. The other amounts are formatted with zero | 171 * of the very last measure. The other amounts are formatted with zero |
177 * decimal places while rounding toward zero. | 172 * decimal places while rounding toward zero. |
178 * @param measures array of measure objects. | 173 * @param measures array of measure objects. |
179 * @param measureCount the number of measure objects. | 174 * @param measureCount the number of measure objects. |
180 * @param appendTo formatted string appended here. | 175 * @param appendTo formatted string appended here. |
181 * @param pos the field position. | 176 * @param pos the field position. |
182 * @param status the error. | 177 * @param status the error. |
183 * @return appendTo reference | 178 * @return appendTo reference |
184 * | 179 * |
185 * @draft ICU 53 | 180 * @stable ICU 53 |
186 */ | 181 */ |
187 UnicodeString &formatMeasures( | 182 UnicodeString &formatMeasures( |
188 const Measure *measures, | 183 const Measure *measures, |
189 int32_t measureCount, | 184 int32_t measureCount, |
190 UnicodeString &appendTo, | 185 UnicodeString &appendTo, |
191 FieldPosition &pos, | 186 FieldPosition &pos, |
192 UErrorCode &status) const; | 187 UErrorCode &status) const; |
193 #endif /* U_HIDE_DRAFT_API */ | |
194 | 188 |
195 #ifndef U_HIDE_INTERNAL_API | 189 #ifndef U_HIDE_DRAFT_API |
196 /** | 190 /** |
197 * Works like formatMeasures but adds a per unit. An example of such a | 191 * Formats a single measure per unit. An example of such a |
198 * formatted string is 3 meters, 3.5 centimeters per second. | 192 * formatted string is 3.5 meters per second. |
199 * @param measures array of measure objects. | 193 * @param measure The measure object. In above example, 3.5 meters. |
200 * @param measureCount the number of measure objects. | 194 * @param perUnit The per unit. In above example, it is |
201 * @param perUnit The per unit. In the example formatted string, | 195 * *MeasureUnit::createSecond(status). |
202 * it is *MeasureUnit::createSecond(status). | |
203 * @param appendTo formatted string appended here. | 196 * @param appendTo formatted string appended here. |
204 * @param pos the field position. | 197 * @param pos the field position. |
205 * @param status the error. | 198 * @param status the error. |
206 * @return appendTo reference | 199 * @return appendTo reference |
207 * | 200 * |
208 * @internal Technology preview | 201 * @draft ICU 55 |
209 */ | 202 */ |
210 UnicodeString &formatMeasuresPer( | 203 UnicodeString &formatMeasurePerUnit( |
211 const Measure *measures, | 204 const Measure &measure, |
212 int32_t measureCount, | |
213 const MeasureUnit &perUnit, | 205 const MeasureUnit &perUnit, |
214 UnicodeString &appendTo, | 206 UnicodeString &appendTo, |
215 FieldPosition &pos, | 207 FieldPosition &pos, |
216 UErrorCode &status) const; | 208 UErrorCode &status) const; |
217 #endif /* U_HIDE_INTERNAL_API */ | 209 |
| 210 #endif /* U_HIDE_DRAFT_API */ |
218 | 211 |
219 /** | 212 /** |
220 * Return a formatter for CurrencyAmount objects in the given | 213 * Return a formatter for CurrencyAmount objects in the given |
221 * locale. | 214 * locale. |
222 * @param locale desired locale | 215 * @param locale desired locale |
223 * @param ec input-output error code | 216 * @param ec input-output error code |
224 * @return a formatter object, or NULL upon error | 217 * @return a formatter object, or NULL upon error |
225 * @stable ICU 3.0 | 218 * @stable ICU 3.0 |
226 */ | 219 */ |
227 static MeasureFormat* U_EXPORT2 createCurrencyFormat(const Locale& locale, | 220 static MeasureFormat* U_EXPORT2 createCurrencyFormat(const Locale& locale, |
(...skipping 10 matching lines...) Expand all Loading... |
238 | 231 |
239 /** | 232 /** |
240 * Return the class ID for this class. This is useful only for comparing to | 233 * Return the class ID for this class. This is useful only for comparing to |
241 * a return value from getDynamicClassID(). For example: | 234 * a return value from getDynamicClassID(). For example: |
242 * <pre> | 235 * <pre> |
243 * . Base* polymorphic_pointer = createPolymorphicObject(); | 236 * . Base* polymorphic_pointer = createPolymorphicObject(); |
244 * . if (polymorphic_pointer->getDynamicClassID() == | 237 * . if (polymorphic_pointer->getDynamicClassID() == |
245 * . erived::getStaticClassID()) ... | 238 * . erived::getStaticClassID()) ... |
246 * </pre> | 239 * </pre> |
247 * @return The class ID for all objects of this class. | 240 * @return The class ID for all objects of this class. |
248 * @draft ICU 53 | 241 * @stable ICU 53 |
249 */ | 242 */ |
250 static UClassID U_EXPORT2 getStaticClassID(void); | 243 static UClassID U_EXPORT2 getStaticClassID(void); |
251 | 244 |
252 /** | 245 /** |
253 * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This | 246 * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This |
254 * method is to implement a simple version of RTTI, since not all C++ | 247 * method is to implement a simple version of RTTI, since not all C++ |
255 * compilers support genuine RTTI. Polymorphic operator==() and clone() | 248 * compilers support genuine RTTI. Polymorphic operator==() and clone() |
256 * methods call this method. | 249 * methods call this method. |
257 * | 250 * |
258 * @return The class ID for this object. All objects of a | 251 * @return The class ID for this object. All objects of a |
259 * given class have the same class ID. Objects of | 252 * given class have the same class ID. Objects of |
260 * other classes have different class IDs. | 253 * other classes have different class IDs. |
261 * @draft ICU 53 | 254 * @stable ICU 53 |
262 */ | 255 */ |
263 virtual UClassID getDynamicClassID(void) const; | 256 virtual UClassID getDynamicClassID(void) const; |
264 | 257 |
265 protected: | 258 protected: |
266 /** | 259 /** |
267 * Default constructor. | 260 * Default constructor. |
268 * @stable ICU 3.0 | 261 * @stable ICU 3.0 |
269 */ | 262 */ |
270 MeasureFormat(); | 263 MeasureFormat(); |
271 | 264 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
340 UErrorCode &status) const; | 333 UErrorCode &status) const; |
341 | 334 |
342 const SimplePatternFormatter *getPerUnitFormatter( | 335 const SimplePatternFormatter *getPerUnitFormatter( |
343 int32_t index, | 336 int32_t index, |
344 int32_t widthIndex) const; | 337 int32_t widthIndex) const; |
345 | 338 |
346 const SimplePatternFormatter *getPerFormatter( | 339 const SimplePatternFormatter *getPerFormatter( |
347 int32_t widthIndex, | 340 int32_t widthIndex, |
348 UErrorCode &status) const; | 341 UErrorCode &status) const; |
349 | 342 |
350 int32_t withPerUnit( | 343 int32_t withPerUnitAndAppend( |
351 const UnicodeString &formatted, | 344 const UnicodeString &formatted, |
352 const MeasureUnit &perUnit, | 345 const MeasureUnit &perUnit, |
353 UnicodeString &appendTo, | 346 UnicodeString &appendTo, |
354 UErrorCode &status) const; | 347 UErrorCode &status) const; |
355 | 348 |
356 UnicodeString &formatMeasure( | 349 UnicodeString &formatMeasure( |
357 const Measure &measure, | 350 const Measure &measure, |
358 const NumberFormat &nf, | 351 const NumberFormat &nf, |
359 UnicodeString &appendTo, | 352 UnicodeString &appendTo, |
360 FieldPosition &pos, | 353 FieldPosition &pos, |
(...skipping 19 matching lines...) Expand all Loading... |
380 UDateFormatField smallestField, | 373 UDateFormatField smallestField, |
381 const Formattable &smallestAmount, | 374 const Formattable &smallestAmount, |
382 UnicodeString &appendTo, | 375 UnicodeString &appendTo, |
383 UErrorCode &status) const; | 376 UErrorCode &status) const; |
384 }; | 377 }; |
385 | 378 |
386 U_NAMESPACE_END | 379 U_NAMESPACE_END |
387 | 380 |
388 #endif // #if !UCONFIG_NO_FORMATTING | 381 #endif // #if !UCONFIG_NO_FORMATTING |
389 #endif // #ifndef MEASUREFORMAT_H | 382 #endif // #ifndef MEASUREFORMAT_H |
OLD | NEW |