Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/unicode/uformattedvalue.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 // © 2018 and later: Unicode, Inc. and others. | |
2 // License & terms of use: http://www.unicode.org/copyright.html | |
3 | |
4 #ifndef __UFORMATTEDVALUE_H__ | |
5 #define __UFORMATTEDVALUE_H__ | |
6 | |
7 #include "unicode/utypes.h" | |
8 | |
9 #if !UCONFIG_NO_FORMATTING | |
10 | |
11 #include "unicode/ufieldpositer.h" | |
12 | |
13 /** | |
14 * \file | |
15 * \brief C API: Abstract operations for localized strings. | |
16 * | |
17 * This file contains declarations for classes that deal with formatted strings. A number | |
18 * of APIs throughout ICU use these classes for expressing their localized output. | |
19 */ | |
20 | |
21 | |
22 /** | |
23 * All possible field categories in ICU. Every entry in this enum corresponds | |
24 * to another enum that exists in ICU. | |
25 * | |
26 * In the APIs that take a UFieldCategory, an int32_t type is used. Field | |
27 * categories having any of the top four bits turned on are reserved as | |
28 * private-use for external APIs implementing FormattedValue. This means that | |
29 * categories 2^28 and higher or below zero (with the highest bit turned on) | |
30 * are private-use and will not be used by ICU in the future. | |
31 * | |
32 * @stable ICU 64 | |
33 */ | |
34 typedef enum UFieldCategory { | |
35 /** | |
36 * For an undefined field category. | |
37 * | |
38 * @stable ICU 64 | |
39 */ | |
40 UFIELD_CATEGORY_UNDEFINED = 0, | |
41 | |
42 /** | |
43 * For fields in UDateFormatField (udat.h), from ICU 3.0. | |
44 * | |
45 * @stable ICU 64 | |
46 */ | |
47 UFIELD_CATEGORY_DATE, | |
48 | |
49 /** | |
50 * For fields in UNumberFormatFields (unum.h), from ICU 49. | |
51 * | |
52 * @stable ICU 64 | |
53 */ | |
54 UFIELD_CATEGORY_NUMBER, | |
55 | |
56 /** | |
57 * For fields in UListFormatterField (ulistformatter.h), from ICU 63. | |
58 * | |
59 * @stable ICU 64 | |
60 */ | |
61 UFIELD_CATEGORY_LIST, | |
62 | |
63 /** | |
64 * For fields in URelativeDateTimeFormatterField (ureldatefmt.h), from ICU 64. | |
65 * | |
66 * @stable ICU 64 | |
67 */ | |
68 UFIELD_CATEGORY_RELATIVE_DATETIME, | |
69 | |
70 /** | |
71 * Reserved for possible future fields in UDateIntervalFormatField. | |
72 * | |
73 * @internal | |
74 */ | |
75 UFIELD_CATEGORY_DATE_INTERVAL, | |
76 | |
77 #ifndef U_HIDE_INTERNAL_API | |
78 /** @internal */ | |
79 UFIELD_CATEGORY_COUNT, | |
80 #endif /* U_HIDE_INTERNAL_API */ | |
81 | |
82 /** | |
83 * Category for spans in a list. | |
84 * | |
85 * @stable ICU 64 | |
86 */ | |
87 UFIELD_CATEGORY_LIST_SPAN = 0x1000 + UFIELD_CATEGORY_LIST, | |
88 | |
89 /** | |
90 * Category for spans in a date interval. | |
91 * | |
92 * @stable ICU 64 | |
93 */ | |
94 UFIELD_CATEGORY_DATE_INTERVAL_SPAN = 0x1000 + UFIELD_CATEGORY_DATE_INTERVAL, | |
95 | |
96 } UFieldCategory; | |
97 | |
98 | |
99 struct UConstrainedFieldPosition; | |
100 /** | |
101 * Represents a span of a string containing a given field. | |
102 * | |
103 * This struct differs from UFieldPosition in the following ways: | |
104 * | |
105 * 1. It has information on the field category. | |
106 * 2. It allows you to set constraints to use when iterating over field positions. | |
107 * 3. It is used for the newer FormattedValue APIs. | |
108 * | |
109 * @stable ICU 64 | |
110 */ | |
111 typedef struct UConstrainedFieldPosition UConstrainedFieldPosition; | |
112 | |
113 | |
114 /** | |
115 * Creates a new UConstrainedFieldPosition. | |
116 * | |
117 * By default, the UConstrainedFieldPosition has no iteration constraints. | |
118 * | |
119 * @param ec Set if an error occurs. | |
120 * @return The new object, or NULL if an error occurs. | |
121 * @stable ICU 64 | |
122 */ | |
123 U_STABLE UConstrainedFieldPosition* U_EXPORT2 | |
124 ucfpos_open(UErrorCode* ec); | |
125 | |
126 | |
127 /** | |
128 * Resets a UConstrainedFieldPosition to its initial state, as if it were newly created. | |
129 * | |
130 * Removes any constraints that may have been set on the instance. | |
131 * | |
132 * @param ucfpos The instance of UConstrainedFieldPosition. | |
133 * @param ec Set if an error occurs. | |
134 * @stable ICU 64 | |
135 */ | |
136 U_STABLE void U_EXPORT2 | |
137 ucfpos_reset( | |
138 UConstrainedFieldPosition* ucfpos, | |
139 UErrorCode* ec); | |
140 | |
141 | |
142 /** | |
143 * Destroys a UConstrainedFieldPosition and releases its memory. | |
144 * | |
145 * @param ucfpos The instance of UConstrainedFieldPosition. | |
146 * @stable ICU 64 | |
147 */ | |
148 U_STABLE void U_EXPORT2 | |
149 ucfpos_close(UConstrainedFieldPosition* ucfpos); | |
150 | |
151 | |
152 /** | |
153 * Sets a constraint on the field category. | |
154 * | |
155 * When this instance of UConstrainedFieldPosition is passed to ufmtval_nextPosition, | |
156 * positions are skipped unless they have the given category. | |
157 * | |
158 * Any previously set constraints are cleared. | |
159 * | |
160 * For example, to loop over only the number-related fields: | |
161 * | |
162 * UConstrainedFieldPosition* ucfpos = ucfpos_open(ec); | |
163 * ucfpos_constrainCategory(ucfpos, UFIELDCATEGORY_NUMBER_FORMAT, ec); | |
164 * while (ufmtval_nextPosition(ufmtval, ucfpos, ec)) { | |
165 * // handle the number-related field position | |
166 * } | |
167 * ucfpos_close(ucfpos); | |
168 * | |
169 * Changing the constraint while in the middle of iterating over a FormattedValue | |
170 * does not generally have well-defined behavior. | |
171 * | |
172 * @param ucfpos The instance of UConstrainedFieldPosition. | |
173 * @param category The field category to fix when iterating. | |
174 * @param ec Set if an error occurs. | |
175 * @stable ICU 64 | |
176 */ | |
177 U_STABLE void U_EXPORT2 | |
178 ucfpos_constrainCategory( | |
179 UConstrainedFieldPosition* ucfpos, | |
180 int32_t category, | |
181 UErrorCode* ec); | |
182 | |
183 | |
184 /** | |
185 * Sets a constraint on the category and field. | |
186 * | |
187 * When this instance of UConstrainedFieldPosition is passed to ufmtval_nextPosition, | |
188 * positions are skipped unless they have the given category and field. | |
189 * | |
190 * Any previously set constraints are cleared. | |
191 * | |
192 * For example, to loop over all grouping separators: | |
193 * | |
194 * UConstrainedFieldPosition* ucfpos = ucfpos_open(ec); | |
195 * ucfpos_constrainField(ucfpos, UFIELDCATEGORY_NUMBER_FORMAT, UNUM_GROUPING_SEPARATOR_FIELD, ec); | |
196 * while (ufmtval_nextPosition(ufmtval, ucfpos, ec)) { | |
197 * // handle the grouping separator position | |
198 * } | |
199 * ucfpos_close(ucfpos); | |
200 * | |
201 * Changing the constraint while in the middle of iterating over a FormattedValue | |
202 * does not generally have well-defined behavior. | |
203 * | |
204 * @param ucfpos The instance of UConstrainedFieldPosition. | |
205 * @param category The field category to fix when iterating. | |
206 * @param field The field to fix when iterating. | |
207 * @param ec Set if an error occurs. | |
208 * @stable ICU 64 | |
209 */ | |
210 U_STABLE void U_EXPORT2 | |
211 ucfpos_constrainField( | |
212 UConstrainedFieldPosition* ucfpos, | |
213 int32_t category, | |
214 int32_t field, | |
215 UErrorCode* ec); | |
216 | |
217 | |
218 /** | |
219 * Gets the field category for the current position. | |
220 * | |
221 * If a category or field constraint was set, this function returns the constrained | |
222 * category. Otherwise, the return value is well-defined only after | |
223 * ufmtval_nextPosition returns TRUE. | |
224 * | |
225 * @param ucfpos The instance of UConstrainedFieldPosition. | |
226 * @param ec Set if an error occurs. | |
227 * @return The field category saved in the instance. | |
228 * @stable ICU 64 | |
229 */ | |
230 U_STABLE int32_t U_EXPORT2 | |
231 ucfpos_getCategory( | |
232 const UConstrainedFieldPosition* ucfpos, | |
233 UErrorCode* ec); | |
234 | |
235 | |
236 /** | |
237 * Gets the field for the current position. | |
238 * | |
239 * If a field constraint was set, this function returns the constrained | |
240 * field. Otherwise, the return value is well-defined only after | |
241 * ufmtval_nextPosition returns TRUE. | |
242 * | |
243 * @param ucfpos The instance of UConstrainedFieldPosition. | |
244 * @param ec Set if an error occurs. | |
245 * @return The field saved in the instance. | |
246 * @stable ICU 64 | |
247 */ | |
248 U_STABLE int32_t U_EXPORT2 | |
249 ucfpos_getField( | |
250 const UConstrainedFieldPosition* ucfpos, | |
251 UErrorCode* ec); | |
252 | |
253 | |
254 /** | |
255 * Gets the INCLUSIVE start and EXCLUSIVE end index stored for the current position. | |
256 * | |
257 * The output values are well-defined only after ufmtval_nextPosition returns TRUE. | |
258 * | |
259 * @param ucfpos The instance of UConstrainedFieldPosition. | |
260 * @param pStart Set to the start index saved in the instance. Ignored if nullptr. | |
261 * @param pLimit Set to the end index saved in the instance. Ignored if nullptr. | |
262 * @param ec Set if an error occurs. | |
263 * @stable ICU 64 | |
264 */ | |
265 U_STABLE void U_EXPORT2 | |
266 ucfpos_getIndexes( | |
267 const UConstrainedFieldPosition* ucfpos, | |
268 int32_t* pStart, | |
269 int32_t* pLimit, | |
270 UErrorCode* ec); | |
271 | |
272 | |
273 /** | |
274 * Gets an int64 that FormattedValue implementations may use for storage. | |
275 * | |
276 * The initial value is zero. | |
277 * | |
278 * Users of FormattedValue should not need to call this method. | |
279 * | |
280 * @param ucfpos The instance of UConstrainedFieldPosition. | |
281 * @param ec Set if an error occurs. | |
282 * @return The current iteration context from ucfpos_setInt64IterationContext. | |
283 * @stable ICU 64 | |
284 */ | |
285 U_STABLE int64_t U_EXPORT2 | |
286 ucfpos_getInt64IterationContext( | |
287 const UConstrainedFieldPosition* ucfpos, | |
288 UErrorCode* ec); | |
289 | |
290 | |
291 /** | |
292 * Sets an int64 that FormattedValue implementations may use for storage. | |
293 * | |
294 * Intended to be used by FormattedValue implementations. | |
295 * | |
296 * @param ucfpos The instance of UConstrainedFieldPosition. | |
297 * @param context The new iteration context. | |
298 * @param ec Set if an error occurs. | |
299 * @stable ICU 64 | |
300 */ | |
301 U_STABLE void U_EXPORT2 | |
302 ucfpos_setInt64IterationContext( | |
303 UConstrainedFieldPosition* ucfpos, | |
304 int64_t context, | |
305 UErrorCode* ec); | |
306 | |
307 | |
308 /** | |
309 * Determines whether a given field should be included given the | |
310 * constraints. | |
311 * | |
312 * Intended to be used by FormattedValue implementations. | |
313 * | |
314 * @param ucfpos The instance of UConstrainedFieldPosition. | |
315 * @param category The category to test. | |
316 * @param field The field to test. | |
317 * @param ec Set if an error occurs. | |
318 * @stable ICU 64 | |
319 */ | |
320 U_STABLE UBool U_EXPORT2 | |
321 ucfpos_matchesField( | |
322 const UConstrainedFieldPosition* ucfpos, | |
323 int32_t category, | |
324 int32_t field, | |
325 UErrorCode* ec); | |
326 | |
327 | |
328 /** | |
329 * Sets new values for the primary public getters. | |
330 * | |
331 * Intended to be used by FormattedValue implementations. | |
332 * | |
333 * It is up to the implementation to ensure that the user-requested | |
334 * constraints are satisfied. This method does not check! | |
335 * | |
336 * @param ucfpos The instance of UConstrainedFieldPosition. | |
337 * @param category The new field category. | |
338 * @param field The new field. | |
339 * @param start The new inclusive start index. | |
340 * @param limit The new exclusive end index. | |
341 * @param ec Set if an error occurs. | |
342 * @stable ICU 64 | |
343 */ | |
344 U_STABLE void U_EXPORT2 | |
345 ucfpos_setState( | |
346 UConstrainedFieldPosition* ucfpos, | |
347 int32_t category, | |
348 int32_t field, | |
349 int32_t start, | |
350 int32_t limit, | |
351 UErrorCode* ec); | |
352 | |
353 | |
354 struct UFormattedValue; | |
355 /** | |
356 * An abstract formatted value: a string with associated field attributes. | |
357 * Many formatters format to types compatible with UFormattedValue. | |
358 * | |
359 * @stable ICU 64 | |
360 */ | |
361 typedef struct UFormattedValue UFormattedValue; | |
362 | |
363 | |
364 /** | |
365 * Returns a pointer to the formatted string. The pointer is owned by the UFormattedValue. The | |
366 * return value is valid only as long as the UFormattedValue is present and unchanged in memory. | |
367 * | |
368 * The return value is NUL-terminated but could contain internal NULs. | |
369 * | |
370 * @param ufmtval | |
371 * The object containing the formatted string and attributes. | |
372 * @param pLength Output variable for the length of the string. Ignored if NULL. | |
373 * @param ec Set if an error occurs. | |
374 * @return A NUL-terminated char16 string owned by the UFormattedValue. | |
375 * @stable ICU 64 | |
376 */ | |
377 U_STABLE const UChar* U_EXPORT2 | |
378 ufmtval_getString( | |
379 const UFormattedValue* ufmtval, | |
380 int32_t* pLength, | |
381 UErrorCode* ec); | |
382 | |
383 | |
384 /** | |
385 * Iterates over field positions in the UFormattedValue. This lets you determine the position | |
386 * of specific types of substrings, like a month or a decimal separator. | |
387 * | |
388 * To loop over all field positions: | |
389 * | |
390 * UConstrainedFieldPosition* ucfpos = ucfpos_open(ec); | |
391 * while (ufmtval_nextPosition(ufmtval, ucfpos, ec)) { | |
392 * // handle the field position; get information from ucfpos | |
393 * } | |
394 * ucfpos_close(ucfpos); | |
395 * | |
396 * @param ufmtval | |
397 * The object containing the formatted string and attributes. | |
398 * @param ucfpos | |
399 * The object used for iteration state; can provide constraints to iterate over only | |
400 * one specific category or field; | |
401 * see ucfpos_constrainCategory | |
402 * and ucfpos_constrainField. | |
403 * @param ec Set if an error occurs. | |
404 * @return TRUE if another position was found; FALSE otherwise. | |
405 * @stable ICU 64 | |
406 */ | |
407 U_STABLE UBool U_EXPORT2 | |
408 ufmtval_nextPosition( | |
409 const UFormattedValue* ufmtval, | |
410 UConstrainedFieldPosition* ucfpos, | |
411 UErrorCode* ec); | |
412 | |
413 | |
414 #if U_SHOW_CPLUSPLUS_API | |
415 U_NAMESPACE_BEGIN | |
416 | |
417 /** | |
418 * \class LocalUConstrainedFieldPositionPointer | |
419 * "Smart pointer" class; closes a UConstrainedFieldPosition via ucfpos_close(). | |
420 * For most methods see the LocalPointerBase base class. | |
421 * | |
422 * Usage: | |
423 * | |
424 * LocalUConstrainedFieldPositionPointer ucfpos(ucfpos_open(ec)); | |
425 * // no need to explicitly call ucfpos_close() | |
426 * | |
427 * @stable ICU 64 | |
428 */ | |
429 U_DEFINE_LOCAL_OPEN_POINTER(LocalUConstrainedFieldPositionPointer, | |
430 UConstrainedFieldPosition, | |
431 ucfpos_close); | |
432 | |
433 U_NAMESPACE_END | |
434 #endif // U_SHOW_CPLUSPLUS_API | |
435 | |
436 | |
437 #endif /* #if !UCONFIG_NO_FORMATTING */ | |
438 #endif // __UFORMATTEDVALUE_H__ |