Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/unicode/ureldatefmt.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) 2016, International Business Machines | |
6 * Corporation and others. All Rights Reserved. | |
7 ***************************************************************************************** | |
8 */ | |
9 | |
10 #ifndef URELDATEFMT_H | |
11 #define URELDATEFMT_H | |
12 | |
13 #include "unicode/utypes.h" | |
14 | |
15 #if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION | |
16 | |
17 #include "unicode/unum.h" | |
18 #include "unicode/udisplaycontext.h" | |
19 #include "unicode/localpointer.h" | |
20 #include "unicode/uformattedvalue.h" | |
21 | |
22 /** | |
23 * \file | |
24 * \brief C API: URelativeDateTimeFormatter, relative date formatting of unit + numeric offset. | |
25 * | |
26 * Provides simple formatting of relative dates, in two ways | |
27 * <ul> | |
28 * <li>relative dates with a quantity e.g "in 5 days"</li> | |
29 * <li>relative dates without a quantity e.g "next Tuesday"</li> | |
30 * </ul> | |
31 * <p> | |
32 * This does not provide compound formatting for multiple units, | |
33 * other than the ability to combine a time string with a relative date, | |
34 * as in "next Tuesday at 3:45 PM". It also does not provide support | |
35 * for determining which unit to use, such as deciding between "in 7 days" | |
36 * and "in 1 week". | |
37 * | |
38 * @stable ICU 57 | |
39 */ | |
40 | |
41 /** | |
42 * The formatting style | |
43 * @stable ICU 54 | |
44 */ | |
45 typedef enum UDateRelativeDateTimeFormatterStyle { | |
46 /** | |
47 * Everything spelled out. | |
48 * @stable ICU 54 | |
49 */ | |
50 UDAT_STYLE_LONG, | |
51 | |
52 /** | |
53 * Abbreviations used when possible. | |
54 * @stable ICU 54 | |
55 */ | |
56 UDAT_STYLE_SHORT, | |
57 | |
58 /** | |
59 * Use the shortest possible form. | |
60 * @stable ICU 54 | |
61 */ | |
62 UDAT_STYLE_NARROW, | |
63 | |
64 #ifndef U_HIDE_DEPRECATED_API | |
65 /** | |
66 * One more than the highest normal UDateRelativeDateTimeFormatterStyle value. | |
67 * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. | |
68 */ | |
69 UDAT_STYLE_COUNT | |
70 #endif /* U_HIDE_DEPRECATED_API */ | |
71 } UDateRelativeDateTimeFormatterStyle; | |
72 | |
73 /** | |
74 * Represents the unit for formatting a relative date. e.g "in 5 days" | |
75 * or "next year" | |
76 * @stable ICU 57 | |
77 */ | |
78 typedef enum URelativeDateTimeUnit { | |
79 /** | |
80 * Specifies that relative unit is year, e.g. "last year", | |
81 * "in 5 years". | |
82 * @stable ICU 57 | |
83 */ | |
84 UDAT_REL_UNIT_YEAR, | |
85 /** | |
86 * Specifies that relative unit is quarter, e.g. "last quarter", | |
87 * "in 5 quarters". | |
88 * @stable ICU 57 | |
89 */ | |
90 UDAT_REL_UNIT_QUARTER, | |
91 /** | |
92 * Specifies that relative unit is month, e.g. "last month", | |
93 * "in 5 months". | |
94 * @stable ICU 57 | |
95 */ | |
96 UDAT_REL_UNIT_MONTH, | |
97 /** | |
98 * Specifies that relative unit is week, e.g. "last week", | |
99 * "in 5 weeks". | |
100 * @stable ICU 57 | |
101 */ | |
102 UDAT_REL_UNIT_WEEK, | |
103 /** | |
104 * Specifies that relative unit is day, e.g. "yesterday", | |
105 * "in 5 days". | |
106 * @stable ICU 57 | |
107 */ | |
108 UDAT_REL_UNIT_DAY, | |
109 /** | |
110 * Specifies that relative unit is hour, e.g. "1 hour ago", | |
111 * "in 5 hours". | |
112 * @stable ICU 57 | |
113 */ | |
114 UDAT_REL_UNIT_HOUR, | |
115 /** | |
116 * Specifies that relative unit is minute, e.g. "1 minute ago", | |
117 * "in 5 minutes". | |
118 * @stable ICU 57 | |
119 */ | |
120 UDAT_REL_UNIT_MINUTE, | |
121 /** | |
122 * Specifies that relative unit is second, e.g. "1 second ago", | |
123 * "in 5 seconds". | |
124 * @stable ICU 57 | |
125 */ | |
126 UDAT_REL_UNIT_SECOND, | |
127 /** | |
128 * Specifies that relative unit is Sunday, e.g. "last Sunday", | |
129 * "this Sunday", "next Sunday", "in 5 Sundays". | |
130 * @stable ICU 57 | |
131 */ | |
132 UDAT_REL_UNIT_SUNDAY, | |
133 /** | |
134 * Specifies that relative unit is Monday, e.g. "last Monday", | |
135 * "this Monday", "next Monday", "in 5 Mondays". | |
136 * @stable ICU 57 | |
137 */ | |
138 UDAT_REL_UNIT_MONDAY, | |
139 /** | |
140 * Specifies that relative unit is Tuesday, e.g. "last Tuesday", | |
141 * "this Tuesday", "next Tuesday", "in 5 Tuesdays". | |
142 * @stable ICU 57 | |
143 */ | |
144 UDAT_REL_UNIT_TUESDAY, | |
145 /** | |
146 * Specifies that relative unit is Wednesday, e.g. "last Wednesday", | |
147 * "this Wednesday", "next Wednesday", "in 5 Wednesdays". | |
148 * @stable ICU 57 | |
149 */ | |
150 UDAT_REL_UNIT_WEDNESDAY, | |
151 /** | |
152 * Specifies that relative unit is Thursday, e.g. "last Thursday", | |
153 * "this Thursday", "next Thursday", "in 5 Thursdays". | |
154 * @stable ICU 57 | |
155 */ | |
156 UDAT_REL_UNIT_THURSDAY, | |
157 /** | |
158 * Specifies that relative unit is Friday, e.g. "last Friday", | |
159 * "this Friday", "next Friday", "in 5 Fridays". | |
160 * @stable ICU 57 | |
161 */ | |
162 UDAT_REL_UNIT_FRIDAY, | |
163 /** | |
164 * Specifies that relative unit is Saturday, e.g. "last Saturday", | |
165 * "this Saturday", "next Saturday", "in 5 Saturdays". | |
166 * @stable ICU 57 | |
167 */ | |
168 UDAT_REL_UNIT_SATURDAY, | |
169 #ifndef U_HIDE_DEPRECATED_API | |
170 /** | |
171 * One more than the highest normal URelativeDateTimeUnit value. | |
172 * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. | |
173 */ | |
174 UDAT_REL_UNIT_COUNT | |
175 #endif /* U_HIDE_DEPRECATED_API */ | |
176 } URelativeDateTimeUnit; | |
177 | |
178 /** | |
179 * FieldPosition and UFieldPosition selectors for format fields | |
180 * defined by RelativeDateTimeFormatter. | |
181 * @stable ICU 64 | |
182 */ | |
183 typedef enum URelativeDateTimeFormatterField { | |
184 /** | |
185 * Represents a literal text string, like "tomorrow" or "days ago". | |
186 * @stable ICU 64 | |
187 */ | |
188 UDAT_REL_LITERAL_FIELD, | |
189 /** | |
190 * Represents a number quantity, like "3" in "3 days ago". | |
191 * @stable ICU 64 | |
192 */ | |
193 UDAT_REL_NUMERIC_FIELD, | |
194 } URelativeDateTimeFormatterField; | |
195 | |
196 | |
197 /** | |
198 * Opaque URelativeDateTimeFormatter object for use in C programs. | |
199 * @stable ICU 57 | |
200 */ | |
201 struct URelativeDateTimeFormatter; | |
202 typedef struct URelativeDateTimeFormatter URelativeDateTimeFormatter; /**< C typedef for struct URelativeDateTimeFormatter. @stable ICU 57 */ | |
203 | |
204 | |
205 /** | |
206 * Open a new URelativeDateTimeFormatter object for a given locale using the | |
207 * specified width and capitalizationContext, along with a number formatter | |
208 * (if desired) to override the default formatter that would be used for | |
209 * display of numeric field offsets. The default formatter typically rounds | |
210 * toward 0 and has a minimum of 0 fraction digits and a maximum of 3 | |
211 * fraction digits (i.e. it will show as many decimal places as necessary | |
212 * up to 3, without showing trailing 0s). | |
213 * | |
214 * @param locale | |
215 * The locale | |
216 * @param nfToAdopt | |
217 * A number formatter to set for this URelativeDateTimeFormatter | |
218 * object (instead of the default decimal formatter). Ownership of | |
219 * this UNumberFormat object will pass to the URelativeDateTimeFormatter | |
220 * object (the URelativeDateTimeFormatter adopts the UNumberFormat), | |
221 * which becomes responsible for closing it. If the caller wishes to | |
222 * retain ownership of the UNumberFormat object, the caller must clone | |
223 * it (with unum_clone) and pass the clone to ureldatefmt_open. May be | |
224 * NULL to use the default decimal formatter. | |
225 * @param width | |
226 * The width - wide, short, narrow, etc. | |
227 * @param capitalizationContext | |
228 * A value from UDisplayContext that pertains to capitalization, e.g. | |
229 * UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE. | |
230 * @param status | |
231 * A pointer to a UErrorCode to receive any errors. | |
232 * @return | |
233 * A pointer to a URelativeDateTimeFormatter object for the specified locale, | |
234 * or NULL if an error occurred. | |
235 * @stable ICU 57 | |
236 */ | |
237 U_STABLE URelativeDateTimeFormatter* U_EXPORT2 | |
238 ureldatefmt_open( const char* locale, | |
239 UNumberFormat* nfToAdopt, | |
240 UDateRelativeDateTimeFormatterStyle width, | |
241 UDisplayContext capitalizationContext, | |
242 UErrorCode* status ); | |
243 | |
244 /** | |
245 * Close a URelativeDateTimeFormatter object. Once closed it may no longer be used. | |
246 * @param reldatefmt | |
247 * The URelativeDateTimeFormatter object to close. | |
248 * @stable ICU 57 | |
249 */ | |
250 U_STABLE void U_EXPORT2 | |
251 ureldatefmt_close(URelativeDateTimeFormatter *reldatefmt); | |
252 | |
253 struct UFormattedRelativeDateTime; | |
254 /** | |
255 * Opaque struct to contain the results of a URelativeDateTimeFormatter operation. | |
256 * @stable ICU 64 | |
257 */ | |
258 typedef struct UFormattedRelativeDateTime UFormattedRelativeDateTime; | |
259 | |
260 /** | |
261 * Creates an object to hold the result of a URelativeDateTimeFormatter | |
262 * operation. The object can be used repeatedly; it is cleared whenever | |
263 * passed to a format function. | |
264 * | |
265 * @param ec Set if an error occurs. | |
266 * @return A pointer needing ownership. | |
267 * @stable ICU 64 | |
268 */ | |
269 U_STABLE UFormattedRelativeDateTime* U_EXPORT2 | |
270 ureldatefmt_openResult(UErrorCode* ec); | |
271 | |
272 /** | |
273 * Returns a representation of a UFormattedRelativeDateTime as a UFormattedValue, | |
274 * which can be subsequently passed to any API requiring that type. | |
275 * | |
276 * The returned object is owned by the UFormattedRelativeDateTime and is valid | |
277 * only as long as the UFormattedRelativeDateTime is present and unchanged in memory. | |
278 * | |
279 * You can think of this method as a cast between types. | |
280 * | |
281 * @param ufrdt The object containing the formatted string. | |
282 * @param ec Set if an error occurs. | |
283 * @return A UFormattedValue owned by the input object. | |
284 * @stable ICU 64 | |
285 */ | |
286 U_STABLE const UFormattedValue* U_EXPORT2 | |
287 ureldatefmt_resultAsValue(const UFormattedRelativeDateTime* ufrdt, UErrorCode* ec); | |
288 | |
289 /** | |
290 * Releases the UFormattedRelativeDateTime created by ureldatefmt_openResult. | |
291 * | |
292 * @param ufrdt The object to release. | |
293 * @stable ICU 64 | |
294 */ | |
295 U_STABLE void U_EXPORT2 | |
296 ureldatefmt_closeResult(UFormattedRelativeDateTime* ufrdt); | |
297 | |
298 | |
299 #if U_SHOW_CPLUSPLUS_API | |
300 | |
301 U_NAMESPACE_BEGIN | |
302 | |
303 /** | |
304 * \class LocalURelativeDateTimeFormatterPointer | |
305 * "Smart pointer" class, closes a URelativeDateTimeFormatter via ureldatefmt_close(). | |
306 * For most methods see the LocalPointerBase base class. | |
307 * | |
308 * @see LocalPointerBase | |
309 * @see LocalPointer | |
310 * @stable ICU 57 | |
311 */ | |
312 U_DEFINE_LOCAL_OPEN_POINTER(LocalURelativeDateTimeFormatterPointer, URelativeDateTimeFormatter, ureldatefmt_close); | |
313 | |
314 /** | |
315 * \class LocalUFormattedRelativeDateTimePointer | |
316 * "Smart pointer" class, closes a UFormattedRelativeDateTime via ureldatefmt_closeResult(). | |
317 * For most methods see the LocalPointerBase base class. | |
318 * | |
319 * @see LocalPointerBase | |
320 * @see LocalPointer | |
321 * @stable ICU 64 | |
322 */ | |
323 U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattedRelativeDateTimePointer, UFormattedRelativeDateTime, ureldatefmt_closeResult); | |
324 | |
325 U_NAMESPACE_END | |
326 | |
327 #endif | |
328 | |
329 /** | |
330 * Format a combination of URelativeDateTimeUnit and numeric | |
331 * offset using a numeric style, e.g. "1 week ago", "in 1 week", | |
332 * "5 weeks ago", "in 5 weeks". | |
333 * | |
334 * @param reldatefmt | |
335 * The URelativeDateTimeFormatter object specifying the | |
336 * format conventions. | |
337 * @param offset | |
338 * The signed offset for the specified unit. This will | |
339 * be formatted according to this object's UNumberFormat | |
340 * object. | |
341 * @param unit | |
342 * The unit to use when formatting the relative | |
343 * date, e.g. UDAT_REL_UNIT_WEEK, UDAT_REL_UNIT_FRIDAY. | |
344 * @param result | |
345 * A pointer to a buffer to receive the formatted result. | |
346 * @param resultCapacity | |
347 * The maximum size of result. | |
348 * @param status | |
349 * A pointer to a UErrorCode to receive any errors. In | |
350 * case of error status, the contents of result are | |
351 * undefined. | |
352 * @return | |
353 * The length of the formatted result; may be greater | |
354 * than resultCapacity, in which case an error is returned. | |
355 * @stable ICU 57 | |
356 */ | |
357 U_STABLE int32_t U_EXPORT2 | |
358 ureldatefmt_formatNumeric( const URelativeDateTimeFormatter* reldatefmt, | |
359 double offset, | |
360 URelativeDateTimeUnit unit, | |
361 UChar* result, | |
362 int32_t resultCapacity, | |
363 UErrorCode* status); | |
364 | |
365 /** | |
366 * Format a combination of URelativeDateTimeUnit and numeric | |
367 * offset using a numeric style, e.g. "1 week ago", "in 1 week", | |
368 * "5 weeks ago", "in 5 weeks". | |
369 * | |
370 * @param reldatefmt | |
371 * The URelativeDateTimeFormatter object specifying the | |
372 * format conventions. | |
373 * @param offset | |
374 * The signed offset for the specified unit. This will | |
375 * be formatted according to this object's UNumberFormat | |
376 * object. | |
377 * @param unit | |
378 * The unit to use when formatting the relative | |
379 * date, e.g. UDAT_REL_UNIT_WEEK, UDAT_REL_UNIT_FRIDAY. | |
380 * @param result | |
381 * A pointer to a UFormattedRelativeDateTime to populate. | |
382 * @param status | |
383 * A pointer to a UErrorCode to receive any errors. In | |
384 * case of error status, the contents of result are | |
385 * undefined. | |
386 * @stable ICU 64 | |
387 */ | |
388 U_STABLE void U_EXPORT2 | |
389 ureldatefmt_formatNumericToResult( | |
390 const URelativeDateTimeFormatter* reldatefmt, | |
391 double offset, | |
392 URelativeDateTimeUnit unit, | |
393 UFormattedRelativeDateTime* result, | |
394 UErrorCode* status); | |
395 | |
396 /** | |
397 * Format a combination of URelativeDateTimeUnit and numeric offset | |
398 * using a text style if possible, e.g. "last week", "this week", | |
399 * "next week", "yesterday", "tomorrow". Falls back to numeric | |
400 * style if no appropriate text term is available for the specified | |
401 * offset in the object's locale. | |
402 * | |
403 * @param reldatefmt | |
404 * The URelativeDateTimeFormatter object specifying the | |
405 * format conventions. | |
406 * @param offset | |
407 * The signed offset for the specified unit. | |
408 * @param unit | |
409 * The unit to use when formatting the relative | |
410 * date, e.g. UDAT_REL_UNIT_WEEK, UDAT_REL_UNIT_FRIDAY. | |
411 * @param result | |
412 * A pointer to a buffer to receive the formatted result. | |
413 * @param resultCapacity | |
414 * The maximum size of result. | |
415 * @param status | |
416 * A pointer to a UErrorCode to receive any errors. In | |
417 * case of error status, the contents of result are | |
418 * undefined. | |
419 * @return | |
420 * The length of the formatted result; may be greater | |
421 * than resultCapacity, in which case an error is returned. | |
422 * @stable ICU 57 | |
423 */ | |
424 U_STABLE int32_t U_EXPORT2 | |
425 ureldatefmt_format( const URelativeDateTimeFormatter* reldatefmt, | |
426 double offset, | |
427 URelativeDateTimeUnit unit, | |
428 UChar* result, | |
429 int32_t resultCapacity, | |
430 UErrorCode* status); | |
431 | |
432 /** | |
433 * Format a combination of URelativeDateTimeUnit and numeric offset | |
434 * using a text style if possible, e.g. "last week", "this week", | |
435 * "next week", "yesterday", "tomorrow". Falls back to numeric | |
436 * style if no appropriate text term is available for the specified | |
437 * offset in the object's locale. | |
438 * | |
439 * This method populates a UFormattedRelativeDateTime, which exposes more | |
440 * information than the string populated by format(). | |
441 * | |
442 * @param reldatefmt | |
443 * The URelativeDateTimeFormatter object specifying the | |
444 * format conventions. | |
445 * @param offset | |
446 * The signed offset for the specified unit. | |
447 * @param unit | |
448 * The unit to use when formatting the relative | |
449 * date, e.g. UDAT_REL_UNIT_WEEK, UDAT_REL_UNIT_FRIDAY. | |
450 * @param result | |
451 * A pointer to a UFormattedRelativeDateTime to populate. | |
452 * @param status | |
453 * A pointer to a UErrorCode to receive any errors. In | |
454 * case of error status, the contents of result are | |
455 * undefined. | |
456 * @stable ICU 64 | |
457 */ | |
458 U_STABLE void U_EXPORT2 | |
459 ureldatefmt_formatToResult( | |
460 const URelativeDateTimeFormatter* reldatefmt, | |
461 double offset, | |
462 URelativeDateTimeUnit unit, | |
463 UFormattedRelativeDateTime* result, | |
464 UErrorCode* status); | |
465 | |
466 /** | |
467 * Combines a relative date string and a time string in this object's | |
468 * locale. This is done with the same date-time separator used for the | |
469 * default calendar in this locale to produce a result such as | |
470 * "yesterday at 3:45 PM". | |
471 * | |
472 * @param reldatefmt | |
473 * The URelativeDateTimeFormatter object specifying the format conventions. | |
474 * @param relativeDateString | |
475 * The relative date string. | |
476 * @param relativeDateStringLen | |
477 * The length of relativeDateString; may be -1 if relativeDateString | |
478 * is zero-terminated. | |
479 * @param timeString | |
480 * The time string. | |
481 * @param timeStringLen | |
482 * The length of timeString; may be -1 if timeString is zero-terminated. | |
483 * @param result | |
484 * A pointer to a buffer to receive the formatted result. | |
485 * @param resultCapacity | |
486 * The maximum size of result. | |
487 * @param status | |
488 * A pointer to a UErrorCode to receive any errors. In case of error status, | |
489 * the contents of result are undefined. | |
490 * @return | |
491 * The length of the formatted result; may be greater than resultCapacity, | |
492 * in which case an error is returned. | |
493 * @stable ICU 57 | |
494 */ | |
495 U_STABLE int32_t U_EXPORT2 | |
496 ureldatefmt_combineDateAndTime( const URelativeDateTimeFormatter* reldatefmt, | |
497 const UChar * relativeDateString, | |
498 int32_t relativeDateStringLen, | |
499 const UChar * timeString, | |
500 int32_t timeStringLen, | |
501 UChar* result, | |
502 int32_t resultCapacity, | |
503 UErrorCode* status ); | |
504 | |
505 #endif /* !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION */ | |
506 | |
507 #endif |