1 // © 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html 3 /* 4 ******************************************************************************* 5 * 6 * Copyright (C) 2007-2015, International Business Machines 7 * Corporation and others. All Rights Reserved. 8 * 9 ******************************************************************************* 10 * file name: udatpg.h 11 * encoding: UTF-8 12 * tab size: 8 (not used) 13 * indentation:4 14 * 15 * created on: 2007jul30 16 * created by: Markus W. Scherer 17 */ 18 19 #ifndef __UDATPG_H__ 20 #define __UDATPG_H__ 21 22 #include "unicode/utypes.h" 23 #include "unicode/udat.h" 24 #include "unicode/uenum.h" 25 #include "unicode/localpointer.h" 26 27 /** 28 * \file 29 * \brief C API: Wrapper for icu::DateTimePatternGenerator (unicode/dtptngen.h). 30 * 31 * UDateTimePatternGenerator provides flexible generation of date format patterns, 32 * like "yy-MM-dd". The user can build up the generator by adding successive 33 * patterns. Once that is done, a query can be made using a "skeleton", which is 34 * a pattern which just includes the desired fields and lengths. The generator 35 * will return the "best fit" pattern corresponding to that skeleton. 36 * <p>The main method people will use is udatpg_getBestPattern, since normally 37 * UDateTimePatternGenerator is pre-built with data from a particular locale. 38 * However, generators can be built directly from other data as well. 39 * <p><i>Issue: may be useful to also have a function that returns the list of 40 * fields in a pattern, in order, since we have that internally. 41 * That would be useful for getting the UI order of field elements.</i> 42 */ 43 44 /** 45 * Opaque type for a date/time pattern generator object. 46 * @stable ICU 3.8 47 */ 48 typedef void *UDateTimePatternGenerator; 49 50 /** 51 * Field number constants for udatpg_getAppendItemFormats() and similar functions. 52 * These constants are separate from UDateFormatField despite semantic overlap 53 * because some fields are merged for the date/time pattern generator. 54 * @stable ICU 3.8 55 */ 56 typedef enum UDateTimePatternField { 57 /** @stable ICU 3.8 */ 58 UDATPG_ERA_FIELD, 59 /** @stable ICU 3.8 */ 60 UDATPG_YEAR_FIELD, 61 /** @stable ICU 3.8 */ 62 UDATPG_QUARTER_FIELD, 63 /** @stable ICU 3.8 */ 64 UDATPG_MONTH_FIELD, 65 /** @stable ICU 3.8 */ 66 UDATPG_WEEK_OF_YEAR_FIELD, 67 /** @stable ICU 3.8 */ 68 UDATPG_WEEK_OF_MONTH_FIELD, 69 /** @stable ICU 3.8 */ 70 UDATPG_WEEKDAY_FIELD, 71 /** @stable ICU 3.8 */ 72 UDATPG_DAY_OF_YEAR_FIELD, 73 /** @stable ICU 3.8 */ 74 UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, 75 /** @stable ICU 3.8 */ 76 UDATPG_DAY_FIELD, 77 /** @stable ICU 3.8 */ 78 UDATPG_DAYPERIOD_FIELD, 79 /** @stable ICU 3.8 */ 80 UDATPG_HOUR_FIELD, 81 /** @stable ICU 3.8 */ 82 UDATPG_MINUTE_FIELD, 83 /** @stable ICU 3.8 */ 84 UDATPG_SECOND_FIELD, 85 /** @stable ICU 3.8 */ 86 UDATPG_FRACTIONAL_SECOND_FIELD, 87 /** @stable ICU 3.8 */ 88 UDATPG_ZONE_FIELD, 89 90 /* Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API, 91 * it is needed for layout of DateTimePatternGenerator object. */ 92 #ifndef U_FORCE_HIDE_DEPRECATED_API 93 /** 94 * One more than the highest normal UDateTimePatternField value. 95 * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. 96 */ 97 UDATPG_FIELD_COUNT 98 #endif // U_FORCE_HIDE_DEPRECATED_API 99 } UDateTimePatternField; 100 101 /** 102 * Field display name width constants for udatpg_getFieldDisplayName(). 103 * @stable ICU 61 104 */ 105 typedef enum UDateTimePGDisplayWidth { 106 /** @stable ICU 61 */ 107 UDATPG_WIDE, 108 /** @stable ICU 61 */ 109 UDATPG_ABBREVIATED, 110 /** @stable ICU 61 */ 111 UDATPG_NARROW 112 } UDateTimePGDisplayWidth; 113 114 /** 115 * Masks to control forcing the length of specified fields in the returned 116 * pattern to match those in the skeleton (when this would not happen 117 * otherwise). These may be combined to force the length of multiple fields. 118 * Used with udatpg_getBestPatternWithOptions, udatpg_replaceFieldTypesWithOptions. 119 * @stable ICU 4.4 120 */ 121 typedef enum UDateTimePatternMatchOptions { 122 /** @stable ICU 4.4 */ 123 UDATPG_MATCH_NO_OPTIONS = 0, 124 /** @stable ICU 4.4 */ 125 UDATPG_MATCH_HOUR_FIELD_LENGTH = 1 << UDATPG_HOUR_FIELD, 126 #ifndef U_HIDE_INTERNAL_API 127 /** @internal ICU 4.4 */ 128 UDATPG_MATCH_MINUTE_FIELD_LENGTH = 1 << UDATPG_MINUTE_FIELD, 129 /** @internal ICU 4.4 */ 130 UDATPG_MATCH_SECOND_FIELD_LENGTH = 1 << UDATPG_SECOND_FIELD, 131 #endif /* U_HIDE_INTERNAL_API */ 132 /** @stable ICU 4.4 */ 133 UDATPG_MATCH_ALL_FIELDS_LENGTH = (1 << UDATPG_FIELD_COUNT) - 1 134 } UDateTimePatternMatchOptions; 135 136 /** 137 * Status return values from udatpg_addPattern(). 138 * @stable ICU 3.8 139 */ 140 typedef enum UDateTimePatternConflict { 141 /** @stable ICU 3.8 */ 142 UDATPG_NO_CONFLICT, 143 /** @stable ICU 3.8 */ 144 UDATPG_BASE_CONFLICT, 145 /** @stable ICU 3.8 */ 146 UDATPG_CONFLICT, 147 #ifndef U_HIDE_DEPRECATED_API 148 /** 149 * One more than the highest normal UDateTimePatternConflict value. 150 * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. 151 */ 152 UDATPG_CONFLICT_COUNT 153 #endif // U_HIDE_DEPRECATED_API 154 } UDateTimePatternConflict; 155 156 /** 157 * Open a generator according to a given locale. 158 * @param locale 159 * @param pErrorCode a pointer to the UErrorCode which must not indicate a 160 * failure before the function call. 161 * @return a pointer to UDateTimePatternGenerator. 162 * @stable ICU 3.8 163 */ 164 U_STABLE UDateTimePatternGenerator * U_EXPORT2 165 udatpg_open(const char *locale, UErrorCode *pErrorCode); 166 167 /** 168 * Open an empty generator, to be constructed with udatpg_addPattern(...) etc. 169 * @param pErrorCode a pointer to the UErrorCode which must not indicate a 170 * failure before the function call. 171 * @return a pointer to UDateTimePatternGenerator. 172 * @stable ICU 3.8 173 */ 174 U_STABLE UDateTimePatternGenerator * U_EXPORT2 175 udatpg_openEmpty(UErrorCode *pErrorCode); 176 177 /** 178 * Close a generator. 179 * @param dtpg a pointer to UDateTimePatternGenerator. 180 * @stable ICU 3.8 181 */ 182 U_STABLE void U_EXPORT2 183 udatpg_close(UDateTimePatternGenerator *dtpg); 184 185 #if U_SHOW_CPLUSPLUS_API 186 187 U_NAMESPACE_BEGIN 188 189 /** 190 * \class LocalUDateTimePatternGeneratorPointer 191 * "Smart pointer" class, closes a UDateTimePatternGenerator via udatpg_close(). 192 * For most methods see the LocalPointerBase base class. 193 * 194 * @see LocalPointerBase 195 * @see LocalPointer 196 * @stable ICU 4.4 197 */ 198 U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateTimePatternGeneratorPointer, UDateTimePatternGenerator, udatpg_close); 199 200 U_NAMESPACE_END 201 202 #endif 203 204 /** 205 * Create a copy pf a generator. 206 * @param dtpg a pointer to UDateTimePatternGenerator to be copied. 207 * @param pErrorCode a pointer to the UErrorCode which must not indicate a 208 * failure before the function call. 209 * @return a pointer to a new UDateTimePatternGenerator. 210 * @stable ICU 3.8 211 */ 212 U_STABLE UDateTimePatternGenerator * U_EXPORT2 213 udatpg_clone(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode); 214 215 /** 216 * Get the best pattern matching the input skeleton. It is guaranteed to 217 * have all of the fields in the skeleton. 218 * 219 * Note that this function uses a non-const UDateTimePatternGenerator: 220 * It uses a stateful pattern parser which is set up for each generator object, 221 * rather than creating one for each function call. 222 * Consecutive calls to this function do not affect each other, 223 * but this function cannot be used concurrently on a single generator object. 224 * 225 * @param dtpg a pointer to UDateTimePatternGenerator. 226 * @param skeleton 227 * The skeleton is a pattern containing only the variable fields. 228 * For example, "MMMdd" and "mmhh" are skeletons. 229 * @param length the length of skeleton 230 * @param bestPattern 231 * The best pattern found from the given skeleton. 232 * @param capacity the capacity of bestPattern. 233 * @param pErrorCode a pointer to the UErrorCode which must not indicate a 234 * failure before the function call. 235 * @return the length of bestPattern. 236 * @stable ICU 3.8 237 */ 238 U_STABLE int32_t U_EXPORT2 239 udatpg_getBestPattern(UDateTimePatternGenerator *dtpg, 240 const UChar *skeleton, int32_t length, 241 UChar *bestPattern, int32_t capacity, 242 UErrorCode *pErrorCode); 243 244 /** 245 * Get the best pattern matching the input skeleton. It is guaranteed to 246 * have all of the fields in the skeleton. 247 * 248 * Note that this function uses a non-const UDateTimePatternGenerator: 249 * It uses a stateful pattern parser which is set up for each generator object, 250 * rather than creating one for each function call. 251 * Consecutive calls to this function do not affect each other, 252 * but this function cannot be used concurrently on a single generator object. 253 * 254 * @param dtpg a pointer to UDateTimePatternGenerator. 255 * @param skeleton 256 * The skeleton is a pattern containing only the variable fields. 257 * For example, "MMMdd" and "mmhh" are skeletons. 258 * @param length the length of skeleton 259 * @param options 260 * Options for forcing the length of specified fields in the 261 * returned pattern to match those in the skeleton (when this 262 * would not happen otherwise). For default behavior, use 263 * UDATPG_MATCH_NO_OPTIONS. 264 * @param bestPattern 265 * The best pattern found from the given skeleton. 266 * @param capacity 267 * the capacity of bestPattern. 268 * @param pErrorCode 269 * a pointer to the UErrorCode which must not indicate a 270 * failure before the function call. 271 * @return the length of bestPattern. 272 * @stable ICU 4.4 273 */ 274 U_STABLE int32_t U_EXPORT2 275 udatpg_getBestPatternWithOptions(UDateTimePatternGenerator *dtpg, 276 const UChar *skeleton, int32_t length, 277 UDateTimePatternMatchOptions options, 278 UChar *bestPattern, int32_t capacity, 279 UErrorCode *pErrorCode); 280 281 /** 282 * Get a unique skeleton from a given pattern. For example, 283 * both "MMM-dd" and "dd/MMM" produce the skeleton "MMMdd". 284 * 285 * Note that this function uses a non-const UDateTimePatternGenerator: 286 * It uses a stateful pattern parser which is set up for each generator object, 287 * rather than creating one for each function call. 288 * Consecutive calls to this function do not affect each other, 289 * but this function cannot be used concurrently on a single generator object. 290 * 291 * @param unusedDtpg a pointer to UDateTimePatternGenerator. 292 * This parameter is no longer used. Callers may pass NULL. 293 * @param pattern input pattern, such as "dd/MMM". 294 * @param length the length of pattern. 295 * @param skeleton such as "MMMdd" 296 * @param capacity the capacity of skeleton. 297 * @param pErrorCode a pointer to the UErrorCode which must not indicate a 298 * failure before the function call. 299 * @return the length of skeleton. 300 * @stable ICU 3.8 301 */ 302 U_STABLE int32_t U_EXPORT2 303 udatpg_getSkeleton(UDateTimePatternGenerator *unusedDtpg, 304 const UChar *pattern, int32_t length, 305 UChar *skeleton, int32_t capacity, 306 UErrorCode *pErrorCode); 307 308 /** 309 * Get a unique base skeleton from a given pattern. This is the same 310 * as the skeleton, except that differences in length are minimized so 311 * as to only preserve the difference between string and numeric form. So 312 * for example, both "MMM-dd" and "d/MMM" produce the skeleton "MMMd" 313 * (notice the single d). 314 * 315 * Note that this function uses a non-const UDateTimePatternGenerator: 316 * It uses a stateful pattern parser which is set up for each generator object, 317 * rather than creating one for each function call. 318 * Consecutive calls to this function do not affect each other, 319 * but this function cannot be used concurrently on a single generator object. 320 * 321 * @param unusedDtpg a pointer to UDateTimePatternGenerator. 322 * This parameter is no longer used. Callers may pass NULL. 323 * @param pattern input pattern, such as "dd/MMM". 324 * @param length the length of pattern. 325 * @param baseSkeleton such as "Md" 326 * @param capacity the capacity of base skeleton. 327 * @param pErrorCode a pointer to the UErrorCode which must not indicate a 328 * failure before the function call. 329 * @return the length of baseSkeleton. 330 * @stable ICU 3.8 331 */ 332 U_STABLE int32_t U_EXPORT2 333 udatpg_getBaseSkeleton(UDateTimePatternGenerator *unusedDtpg, 334 const UChar *pattern, int32_t length, 335 UChar *baseSkeleton, int32_t capacity, 336 UErrorCode *pErrorCode); 337 338 /** 339 * Adds a pattern to the generator. If the pattern has the same skeleton as 340 * an existing pattern, and the override parameter is set, then the previous 341 * value is overriden. Otherwise, the previous value is retained. In either 342 * case, the conflicting status is set and previous vale is stored in 343 * conflicting pattern. 344 * <p> 345 * Note that single-field patterns (like "MMM") are automatically added, and 346 * don't need to be added explicitly! 347 * 348 * @param dtpg a pointer to UDateTimePatternGenerator. 349 * @param pattern input pattern, such as "dd/MMM" 350 * @param patternLength the length of pattern. 351 * @param override When existing values are to be overridden use true, 352 * otherwise use false. 353 * @param conflictingPattern Previous pattern with the same skeleton. 354 * @param capacity the capacity of conflictingPattern. 355 * @param pLength a pointer to the length of conflictingPattern. 356 * @param pErrorCode a pointer to the UErrorCode which must not indicate a 357 * failure before the function call. 358 * @return conflicting status. The value could be UDATPG_NO_CONFLICT, 359 * UDATPG_BASE_CONFLICT or UDATPG_CONFLICT. 360 * @stable ICU 3.8 361 */ 362 U_STABLE UDateTimePatternConflict U_EXPORT2 363 udatpg_addPattern(UDateTimePatternGenerator *dtpg, 364 const UChar *pattern, int32_t patternLength, 365 UBool override, 366 UChar *conflictingPattern, int32_t capacity, int32_t *pLength, 367 UErrorCode *pErrorCode); 368 369 /** 370 * An AppendItem format is a pattern used to append a field if there is no 371 * good match. For example, suppose that the input skeleton is "GyyyyMMMd", 372 * and there is no matching pattern internally, but there is a pattern 373 * matching "yyyyMMMd", say "d-MM-yyyy". Then that pattern is used, plus the 374 * G. The way these two are conjoined is by using the AppendItemFormat for G 375 * (era). So if that value is, say "{0}, {1}" then the final resulting 376 * pattern is "d-MM-yyyy, G". 377 * <p> 378 * There are actually three available variables: {0} is the pattern so far, 379 * {1} is the element we are adding, and {2} is the name of the element. 380 * <p> 381 * This reflects the way that the CLDR data is organized. 382 * 383 * @param dtpg a pointer to UDateTimePatternGenerator. 384 * @param field UDateTimePatternField, such as UDATPG_ERA_FIELD 385 * @param value pattern, such as "{0}, {1}" 386 * @param length the length of value. 387 * @stable ICU 3.8 388 */ 389 U_STABLE void U_EXPORT2 390 udatpg_setAppendItemFormat(UDateTimePatternGenerator *dtpg, 391 UDateTimePatternField field, 392 const UChar *value, int32_t length); 393 394 /** 395 * Getter corresponding to setAppendItemFormat. Values below 0 or at or 396 * above UDATPG_FIELD_COUNT are illegal arguments. 397 * 398 * @param dtpg A pointer to UDateTimePatternGenerator. 399 * @param field UDateTimePatternField, such as UDATPG_ERA_FIELD 400 * @param pLength A pointer that will receive the length of appendItemFormat. 401 * @return appendItemFormat for field. 402 * @stable ICU 3.8 403 */ 404 U_STABLE const UChar * U_EXPORT2 405 udatpg_getAppendItemFormat(const UDateTimePatternGenerator *dtpg, 406 UDateTimePatternField field, 407 int32_t *pLength); 408 409 /** 410 * Set the name of field, eg "era" in English for ERA. These are only 411 * used if the corresponding AppendItemFormat is used, and if it contains a 412 * {2} variable. 413 * <p> 414 * This reflects the way that the CLDR data is organized. 415 * 416 * @param dtpg a pointer to UDateTimePatternGenerator. 417 * @param field UDateTimePatternField 418 * @param value name for the field. 419 * @param length the length of value. 420 * @stable ICU 3.8 421 */ 422 U_STABLE void U_EXPORT2 423 udatpg_setAppendItemName(UDateTimePatternGenerator *dtpg, 424 UDateTimePatternField field, 425 const UChar *value, int32_t length); 426 427 /** 428 * Getter corresponding to setAppendItemNames. Values below 0 or at or above 429 * UDATPG_FIELD_COUNT are illegal arguments. Note: The more general function 430 * for getting date/time field display names is udatpg_getFieldDisplayName. 431 * 432 * @param dtpg a pointer to UDateTimePatternGenerator. 433 * @param field UDateTimePatternField, such as UDATPG_ERA_FIELD 434 * @param pLength A pointer that will receive the length of the name for field. 435 * @return name for field 436 * @see udatpg_getFieldDisplayName 437 * @stable ICU 3.8 438 */ 439 U_STABLE const UChar * U_EXPORT2 440 udatpg_getAppendItemName(const UDateTimePatternGenerator *dtpg, 441 UDateTimePatternField field, 442 int32_t *pLength); 443 444 /** 445 * The general interface to get a display name for a particular date/time field, 446 * in one of several possible display widths. 447 * 448 * @param dtpg 449 * A pointer to the UDateTimePatternGenerator object with the localized 450 * display names. 451 * @param field 452 * The desired UDateTimePatternField, such as UDATPG_ERA_FIELD. 453 * @param width 454 * The desired UDateTimePGDisplayWidth, such as UDATPG_ABBREVIATED. 455 * @param fieldName 456 * A pointer to a buffer to receive the NULL-terminated display name. If the name 457 * fits into fieldName but cannot be NULL-terminated (length == capacity) then 458 * the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the name doesn't 459 * fit into fieldName then the error code is set to U_BUFFER_OVERFLOW_ERROR. 460 * @param capacity 461 * The size of fieldName (in UChars). 462 * @param pErrorCode 463 * A pointer to a UErrorCode to receive any errors 464 * @return 465 * The full length of the name; if greater than capacity, fieldName contains a 466 * truncated result. 467 * @stable ICU 61 468 */ 469 U_STABLE int32_t U_EXPORT2 470 udatpg_getFieldDisplayName(const UDateTimePatternGenerator *dtpg, 471 UDateTimePatternField field, 472 UDateTimePGDisplayWidth width, 473 UChar *fieldName, int32_t capacity, 474 UErrorCode *pErrorCode); 475 476 /** 477 * The DateTimeFormat is a message format pattern used to compose date and 478 * time patterns. The default pattern in the root locale is "{1} {0}", where 479 * {1} will be replaced by the date pattern and {0} will be replaced by the 480 * time pattern; however, other locales may specify patterns such as 481 * "{1}, {0}" or "{1} 'at' {0}", etc. 482 * <p> 483 * This is used when the input skeleton contains both date and time fields, 484 * but there is not a close match among the added patterns. For example, 485 * suppose that this object was created by adding "dd-MMM" and "hh:mm", and 486 * its DateTimeFormat is the default "{1} {0}". Then if the input skeleton 487 * is "MMMdhmm", there is not an exact match, so the input skeleton is 488 * broken up into two components "MMMd" and "hmm". There are close matches 489 * for those two skeletons, so the result is put together with this pattern, 490 * resulting in "d-MMM h:mm". 491 * 492 * @param dtpg a pointer to UDateTimePatternGenerator. 493 * @param dtFormat 494 * message format pattern, here {1} will be replaced by the date 495 * pattern and {0} will be replaced by the time pattern. 496 * @param length the length of dtFormat. 497 * @stable ICU 3.8 498 */ 499 U_STABLE void U_EXPORT2 500 udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg, 501 const UChar *dtFormat, int32_t length); 502 503 /** 504 * Getter corresponding to setDateTimeFormat. 505 * @param dtpg a pointer to UDateTimePatternGenerator. 506 * @param pLength A pointer that will receive the length of the format 507 * @return dateTimeFormat. 508 * @stable ICU 3.8 509 */ 510 U_STABLE const UChar * U_EXPORT2 511 udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg, 512 int32_t *pLength); 513 514 /** 515 * The decimal value is used in formatting fractions of seconds. If the 516 * skeleton contains fractional seconds, then this is used with the 517 * fractional seconds. For example, suppose that the input pattern is 518 * "hhmmssSSSS", and the best matching pattern internally is "H:mm:ss", and 519 * the decimal string is ",". Then the resulting pattern is modified to be 520 * "H:mm:ss,SSSS" 521 * 522 * @param dtpg a pointer to UDateTimePatternGenerator. 523 * @param decimal 524 * @param length the length of decimal. 525 * @stable ICU 3.8 526 */ 527 U_STABLE void U_EXPORT2 528 udatpg_setDecimal(UDateTimePatternGenerator *dtpg, 529 const UChar *decimal, int32_t length); 530 531 /** 532 * Getter corresponding to setDecimal. 533 * 534 * @param dtpg a pointer to UDateTimePatternGenerator. 535 * @param pLength A pointer that will receive the length of the decimal string. 536 * @return corresponding to the decimal point. 537 * @stable ICU 3.8 538 */ 539 U_STABLE const UChar * U_EXPORT2 540 udatpg_getDecimal(const UDateTimePatternGenerator *dtpg, 541 int32_t *pLength); 542 543 /** 544 * Adjusts the field types (width and subtype) of a pattern to match what is 545 * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a 546 * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be 547 * "dd-MMMM hh:mm". This is used internally to get the best match for the 548 * input skeleton, but can also be used externally. 549 * 550 * Note that this function uses a non-const UDateTimePatternGenerator: 551 * It uses a stateful pattern parser which is set up for each generator object, 552 * rather than creating one for each function call. 553 * Consecutive calls to this function do not affect each other, 554 * but this function cannot be used concurrently on a single generator object. 555 * 556 * @param dtpg a pointer to UDateTimePatternGenerator. 557 * @param pattern Input pattern 558 * @param patternLength the length of input pattern. 559 * @param skeleton 560 * @param skeletonLength the length of input skeleton. 561 * @param dest pattern adjusted to match the skeleton fields widths and subtypes. 562 * @param destCapacity the capacity of dest. 563 * @param pErrorCode a pointer to the UErrorCode which must not indicate a 564 * failure before the function call. 565 * @return the length of dest. 566 * @stable ICU 3.8 567 */ 568 U_STABLE int32_t U_EXPORT2 569 udatpg_replaceFieldTypes(UDateTimePatternGenerator *dtpg, 570 const UChar *pattern, int32_t patternLength, 571 const UChar *skeleton, int32_t skeletonLength, 572 UChar *dest, int32_t destCapacity, 573 UErrorCode *pErrorCode); 574 575 /** 576 * Adjusts the field types (width and subtype) of a pattern to match what is 577 * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a 578 * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be 579 * "dd-MMMM hh:mm". This is used internally to get the best match for the 580 * input skeleton, but can also be used externally. 581 * 582 * Note that this function uses a non-const UDateTimePatternGenerator: 583 * It uses a stateful pattern parser which is set up for each generator object, 584 * rather than creating one for each function call. 585 * Consecutive calls to this function do not affect each other, 586 * but this function cannot be used concurrently on a single generator object. 587 * 588 * @param dtpg a pointer to UDateTimePatternGenerator. 589 * @param pattern Input pattern 590 * @param patternLength the length of input pattern. 591 * @param skeleton 592 * @param skeletonLength the length of input skeleton. 593 * @param options 594 * Options controlling whether the length of specified fields in the 595 * pattern are adjusted to match those in the skeleton (when this 596 * would not happen otherwise). For default behavior, use 597 * UDATPG_MATCH_NO_OPTIONS. 598 * @param dest pattern adjusted to match the skeleton fields widths and subtypes. 599 * @param destCapacity the capacity of dest. 600 * @param pErrorCode a pointer to the UErrorCode which must not indicate a 601 * failure before the function call. 602 * @return the length of dest. 603 * @stable ICU 4.4 604 */ 605 U_STABLE int32_t U_EXPORT2 606 udatpg_replaceFieldTypesWithOptions(UDateTimePatternGenerator *dtpg, 607 const UChar *pattern, int32_t patternLength, 608 const UChar *skeleton, int32_t skeletonLength, 609 UDateTimePatternMatchOptions options, 610 UChar *dest, int32_t destCapacity, 611 UErrorCode *pErrorCode); 612 613 /** 614 * Return a UEnumeration list of all the skeletons in canonical form. 615 * Call udatpg_getPatternForSkeleton() to get the corresponding pattern. 616 * 617 * @param dtpg a pointer to UDateTimePatternGenerator. 618 * @param pErrorCode a pointer to the UErrorCode which must not indicate a 619 * failure before the function call 620 * @return a UEnumeration list of all the skeletons 621 * The caller must close the object. 622 * @stable ICU 3.8 623 */ 624 U_STABLE UEnumeration * U_EXPORT2 625 udatpg_openSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode); 626 627 /** 628 * Return a UEnumeration list of all the base skeletons in canonical form. 629 * 630 * @param dtpg a pointer to UDateTimePatternGenerator. 631 * @param pErrorCode a pointer to the UErrorCode which must not indicate a 632 * failure before the function call. 633 * @return a UEnumeration list of all the base skeletons 634 * The caller must close the object. 635 * @stable ICU 3.8 636 */ 637 U_STABLE UEnumeration * U_EXPORT2 638 udatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode); 639 640 /** 641 * Get the pattern corresponding to a given skeleton. 642 * 643 * @param dtpg a pointer to UDateTimePatternGenerator. 644 * @param skeleton 645 * @param skeletonLength pointer to the length of skeleton. 646 * @param pLength pointer to the length of return pattern. 647 * @return pattern corresponding to a given skeleton. 648 * @stable ICU 3.8 649 */ 650 U_STABLE const UChar * U_EXPORT2 651 udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg, 652 const UChar *skeleton, int32_t skeletonLength, 653 int32_t *pLength); 654 655 #if !UCONFIG_NO_FORMATTING 656 657 #ifndef U_HIDE_DRAFT_API 658 /** 659 * Return the default hour cycle for a locale. Uses the locale that the 660 * UDateTimePatternGenerator was initially created with. 661 * 662 * Cannot be used on an empty UDateTimePatternGenerator instance. 663 * 664 * @param dtpg a pointer to UDateTimePatternGenerator. 665 * @param pErrorCode a pointer to the UErrorCode which must not indicate a 666 * failure before the function call. Set to U_UNSUPPORTED_ERROR 667 * if used on an empty instance. 668 * @return the default hour cycle. 669 * @draft ICU 67 670 */ 671 U_DRAFT UDateFormatHourCycle U_EXPORT2 672 udatpg_getDefaultHourCycle(const UDateTimePatternGenerator *dtpg, UErrorCode* pErrorCode); 673 #endif /* U_HIDE_DRAFT_API */ 674 675 #endif /* #if !UCONFIG_NO_FORMATTING */ 676 677 #endif 678