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