1/*
2*******************************************************************************
3*
4*   Copyright (C) 2007-2010, 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 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 */
45typedef 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 */
53typedef 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 */
97typedef 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    /** @internal ICU 4.4 */
103    UDATPG_MATCH_MINUTE_FIELD_LENGTH = 1 << UDATPG_MINUTE_FIELD,
104    /** @internal ICU 4.4 */
105    UDATPG_MATCH_SECOND_FIELD_LENGTH = 1 << UDATPG_SECOND_FIELD,
106    /** @stable ICU 4.4 */
107    UDATPG_MATCH_ALL_FIELDS_LENGTH = (1 << UDATPG_FIELD_COUNT) - 1
108} UDateTimePatternMatchOptions;
109
110/**
111 * Status return values from udatpg_addPattern().
112 * @stable ICU 3.8
113 */
114typedef enum UDateTimePatternConflict {
115    /** @stable ICU 3.8 */
116    UDATPG_NO_CONFLICT,
117    /** @stable ICU 3.8 */
118    UDATPG_BASE_CONFLICT,
119    /** @stable ICU 3.8 */
120    UDATPG_CONFLICT,
121    /** @stable ICU 3.8 */
122    UDATPG_CONFLICT_COUNT
123} UDateTimePatternConflict;
124
125/**
126  * Open a generator according to a given locale.
127  * @param locale
128  * @param pErrorCode a pointer to the UErrorCode which must not indicate a
129  *                   failure before the function call.
130  * @return a pointer to UDateTimePatternGenerator.
131  * @stable ICU 3.8
132  */
133U_STABLE UDateTimePatternGenerator * U_EXPORT2
134udatpg_open(const char *locale, UErrorCode *pErrorCode);
135
136/**
137  * Open an empty generator, to be constructed with udatpg_addPattern(...) etc.
138  * @param pErrorCode a pointer to the UErrorCode which must not indicate a
139  *                   failure before the function call.
140  * @return a pointer to UDateTimePatternGenerator.
141  * @stable ICU 3.8
142  */
143U_STABLE UDateTimePatternGenerator * U_EXPORT2
144udatpg_openEmpty(UErrorCode *pErrorCode);
145
146/**
147  * Close a generator.
148  * @param dtpg a pointer to UDateTimePatternGenerator.
149  * @stable ICU 3.8
150  */
151U_STABLE void U_EXPORT2
152udatpg_close(UDateTimePatternGenerator *dtpg);
153
154#if U_SHOW_CPLUSPLUS_API
155
156U_NAMESPACE_BEGIN
157
158/**
159 * \class LocalUDateTimePatternGeneratorPointer
160 * "Smart pointer" class, closes a UDateTimePatternGenerator via udatpg_close().
161 * For most methods see the LocalPointerBase base class.
162 *
163 * @see LocalPointerBase
164 * @see LocalPointer
165 * @stable ICU 4.4
166 */
167U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateTimePatternGeneratorPointer, UDateTimePatternGenerator, udatpg_close);
168
169U_NAMESPACE_END
170
171#endif
172
173/**
174  * Create a copy pf a generator.
175  * @param dtpg a pointer to UDateTimePatternGenerator to be copied.
176  * @param pErrorCode a pointer to the UErrorCode which must not indicate a
177  *                   failure before the function call.
178  * @return a pointer to a new UDateTimePatternGenerator.
179  * @stable ICU 3.8
180 */
181U_STABLE UDateTimePatternGenerator * U_EXPORT2
182udatpg_clone(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode);
183
184/**
185 * Get the best pattern matching the input skeleton. It is guaranteed to
186 * have all of the fields in the skeleton.
187 *
188 * Note that this function uses a non-const UDateTimePatternGenerator:
189 * It uses a stateful pattern parser which is set up for each generator object,
190 * rather than creating one for each function call.
191 * Consecutive calls to this function do not affect each other,
192 * but this function cannot be used concurrently on a single generator object.
193 *
194 * @param dtpg a pointer to UDateTimePatternGenerator.
195 * @param skeleton
196 *            The skeleton is a pattern containing only the variable fields.
197 *            For example, "MMMdd" and "mmhh" are skeletons.
198 * @param length the length of skeleton
199 * @param bestPattern
200 *            The best pattern found from the given skeleton.
201 * @param capacity the capacity of bestPattern.
202 * @param pErrorCode a pointer to the UErrorCode which must not indicate a
203 *                   failure before the function call.
204 * @return the length of bestPattern.
205 * @stable ICU 3.8
206 */
207U_STABLE int32_t U_EXPORT2
208udatpg_getBestPattern(UDateTimePatternGenerator *dtpg,
209                      const UChar *skeleton, int32_t length,
210                      UChar *bestPattern, int32_t capacity,
211                      UErrorCode *pErrorCode);
212
213/**
214 * Get the best pattern matching the input skeleton. It is guaranteed to
215 * have all of the fields in the skeleton.
216 *
217 * Note that this function uses a non-const UDateTimePatternGenerator:
218 * It uses a stateful pattern parser which is set up for each generator object,
219 * rather than creating one for each function call.
220 * Consecutive calls to this function do not affect each other,
221 * but this function cannot be used concurrently on a single generator object.
222 *
223 * @param dtpg a pointer to UDateTimePatternGenerator.
224 * @param skeleton
225 *            The skeleton is a pattern containing only the variable fields.
226 *            For example, "MMMdd" and "mmhh" are skeletons.
227 * @param length the length of skeleton
228 * @param options
229 *            Options for forcing the length of specified fields in the
230 *            returned pattern to match those in the skeleton (when this
231 *            would not happen otherwise). For default behavior, use
232 *            UDATPG_MATCH_NO_OPTIONS.
233 * @param bestPattern
234 *            The best pattern found from the given skeleton.
235 * @param capacity
236 *            the capacity of bestPattern.
237 * @param pErrorCode
238 *            a pointer to the UErrorCode which must not indicate a
239 *            failure before the function call.
240 * @return the length of bestPattern.
241 * @stable ICU 4.4
242 */
243U_STABLE int32_t U_EXPORT2
244udatpg_getBestPatternWithOptions(UDateTimePatternGenerator *dtpg,
245                                 const UChar *skeleton, int32_t length,
246                                 UDateTimePatternMatchOptions options,
247                                 UChar *bestPattern, int32_t capacity,
248                                 UErrorCode *pErrorCode);
249
250/**
251  * Get a unique skeleton from a given pattern. For example,
252  * both "MMM-dd" and "dd/MMM" produce the skeleton "MMMdd".
253  *
254  * Note that this function uses a non-const UDateTimePatternGenerator:
255  * It uses a stateful pattern parser which is set up for each generator object,
256  * rather than creating one for each function call.
257  * Consecutive calls to this function do not affect each other,
258  * but this function cannot be used concurrently on a single generator object.
259  *
260  * @param dtpg     a pointer to UDateTimePatternGenerator.
261  * @param pattern  input pattern, such as "dd/MMM".
262  * @param length   the length of pattern.
263  * @param skeleton such as "MMMdd"
264  * @param capacity the capacity of skeleton.
265  * @param pErrorCode a pointer to the UErrorCode which must not indicate a
266  *                  failure before the function call.
267  * @return the length of skeleton.
268  * @stable ICU 3.8
269  */
270U_STABLE int32_t U_EXPORT2
271udatpg_getSkeleton(UDateTimePatternGenerator *dtpg,
272                   const UChar *pattern, int32_t length,
273                   UChar *skeleton, int32_t capacity,
274                   UErrorCode *pErrorCode);
275
276/**
277 * Get a unique base skeleton from a given pattern. This is the same
278 * as the skeleton, except that differences in length are minimized so
279 * as to only preserve the difference between string and numeric form. So
280 * for example, both "MMM-dd" and "d/MMM" produce the skeleton "MMMd"
281 * (notice the single d).
282 *
283 * Note that this function uses a non-const UDateTimePatternGenerator:
284 * It uses a stateful pattern parser which is set up for each generator object,
285 * rather than creating one for each function call.
286 * Consecutive calls to this function do not affect each other,
287 * but this function cannot be used concurrently on a single generator object.
288 *
289 * @param dtpg     a pointer to UDateTimePatternGenerator.
290 * @param pattern  input pattern, such as "dd/MMM".
291 * @param length   the length of pattern.
292 * @param baseSkeleton such as "Md"
293 * @param capacity the capacity of base skeleton.
294 * @param pErrorCode a pointer to the UErrorCode which must not indicate a
295 *                  failure before the function call.
296 * @return the length of baseSkeleton.
297 * @stable ICU 3.8
298 */
299U_STABLE int32_t U_EXPORT2
300udatpg_getBaseSkeleton(UDateTimePatternGenerator *dtpg,
301                       const UChar *pattern, int32_t length,
302                       UChar *baseSkeleton, int32_t capacity,
303                       UErrorCode *pErrorCode);
304
305/**
306 * Adds a pattern to the generator. If the pattern has the same skeleton as
307 * an existing pattern, and the override parameter is set, then the previous
308 * value is overriden. Otherwise, the previous value is retained. In either
309 * case, the conflicting status is set and previous vale is stored in
310 * conflicting pattern.
311 * <p>
312 * Note that single-field patterns (like "MMM") are automatically added, and
313 * don't need to be added explicitly!
314 *
315 * @param dtpg     a pointer to UDateTimePatternGenerator.
316 * @param pattern  input pattern, such as "dd/MMM"
317 * @param patternLength the length of pattern.
318 * @param override  When existing values are to be overridden use true,
319 *                  otherwise use false.
320 * @param conflictingPattern  Previous pattern with the same skeleton.
321 * @param capacity the capacity of conflictingPattern.
322 * @param pLength a pointer to the length of conflictingPattern.
323 * @param pErrorCode a pointer to the UErrorCode which must not indicate a
324 *                  failure before the function call.
325 * @return conflicting status. The value could be UDATPG_NO_CONFLICT,
326 *                  UDATPG_BASE_CONFLICT or UDATPG_CONFLICT.
327 * @stable ICU 3.8
328 */
329U_STABLE UDateTimePatternConflict U_EXPORT2
330udatpg_addPattern(UDateTimePatternGenerator *dtpg,
331                  const UChar *pattern, int32_t patternLength,
332                  UBool override,
333                  UChar *conflictingPattern, int32_t capacity, int32_t *pLength,
334                  UErrorCode *pErrorCode);
335
336/**
337  * An AppendItem format is a pattern used to append a field if there is no
338  * good match. For example, suppose that the input skeleton is "GyyyyMMMd",
339  * and there is no matching pattern internally, but there is a pattern
340  * matching "yyyyMMMd", say "d-MM-yyyy". Then that pattern is used, plus the
341  * G. The way these two are conjoined is by using the AppendItemFormat for G
342  * (era). So if that value is, say "{0}, {1}" then the final resulting
343  * pattern is "d-MM-yyyy, G".
344  * <p>
345  * There are actually three available variables: {0} is the pattern so far,
346  * {1} is the element we are adding, and {2} is the name of the element.
347  * <p>
348  * This reflects the way that the CLDR data is organized.
349  *
350  * @param dtpg   a pointer to UDateTimePatternGenerator.
351  * @param field  UDateTimePatternField, such as UDATPG_ERA_FIELD
352  * @param value  pattern, such as "{0}, {1}"
353  * @param length the length of value.
354  * @stable ICU 3.8
355  */
356U_STABLE void U_EXPORT2
357udatpg_setAppendItemFormat(UDateTimePatternGenerator *dtpg,
358                           UDateTimePatternField field,
359                           const UChar *value, int32_t length);
360
361/**
362 * Getter corresponding to setAppendItemFormat. Values below 0 or at or
363 * above UDATPG_FIELD_COUNT are illegal arguments.
364 *
365 * @param dtpg   A pointer to UDateTimePatternGenerator.
366 * @param field  UDateTimePatternField, such as UDATPG_ERA_FIELD
367 * @param pLength A pointer that will receive the length of appendItemFormat.
368 * @return appendItemFormat for field.
369 * @stable ICU 3.8
370 */
371U_STABLE const UChar * U_EXPORT2
372udatpg_getAppendItemFormat(const UDateTimePatternGenerator *dtpg,
373                           UDateTimePatternField field,
374                           int32_t *pLength);
375
376/**
377   * Set the name of field, eg "era" in English for ERA. These are only
378   * used if the corresponding AppendItemFormat is used, and if it contains a
379   * {2} variable.
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
385   * @param value  name for the field.
386   * @param length the length of value.
387   * @stable ICU 3.8
388   */
389U_STABLE void U_EXPORT2
390udatpg_setAppendItemName(UDateTimePatternGenerator *dtpg,
391                         UDateTimePatternField field,
392                         const UChar *value, int32_t length);
393
394/**
395 * Getter corresponding to setAppendItemNames. Values below 0 or at or above
396 * 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 the name for field.
401 * @return name for field
402 * @stable ICU 3.8
403 */
404U_STABLE const UChar * U_EXPORT2
405udatpg_getAppendItemName(const UDateTimePatternGenerator *dtpg,
406                         UDateTimePatternField field,
407                         int32_t *pLength);
408
409/**
410 * The date time format is a message format pattern used to compose date and
411 * time patterns. The default value is "{0} {1}", where {0} will be replaced
412 * by the date pattern and {1} will be replaced by the time pattern.
413 * <p>
414 * This is used when the input skeleton contains both date and time fields,
415 * but there is not a close match among the added patterns. For example,
416 * suppose that this object was created by adding "dd-MMM" and "hh:mm", and
417 * its datetimeFormat is the default "{0} {1}". Then if the input skeleton
418 * is "MMMdhmm", there is not an exact match, so the input skeleton is
419 * broken up into two components "MMMd" and "hmm". There are close matches
420 * for those two skeletons, so the result is put together with this pattern,
421 * resulting in "d-MMM h:mm".
422 *
423 * @param dtpg a pointer to UDateTimePatternGenerator.
424 * @param dtFormat
425 *            message format pattern, here {0} will be replaced by the date
426 *            pattern and {1} will be replaced by the time pattern.
427 * @param length the length of dtFormat.
428 * @stable ICU 3.8
429 */
430U_STABLE void U_EXPORT2
431udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg,
432                         const UChar *dtFormat, int32_t length);
433
434/**
435 * Getter corresponding to setDateTimeFormat.
436 * @param dtpg   a pointer to UDateTimePatternGenerator.
437 * @param pLength A pointer that will receive the length of the format
438 * @return dateTimeFormat.
439 * @stable ICU 3.8
440 */
441U_STABLE const UChar * U_EXPORT2
442udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg,
443                         int32_t *pLength);
444
445/**
446 * The decimal value is used in formatting fractions of seconds. If the
447 * skeleton contains fractional seconds, then this is used with the
448 * fractional seconds. For example, suppose that the input pattern is
449 * "hhmmssSSSS", and the best matching pattern internally is "H:mm:ss", and
450 * the decimal string is ",". Then the resulting pattern is modified to be
451 * "H:mm:ss,SSSS"
452 *
453 * @param dtpg a pointer to UDateTimePatternGenerator.
454 * @param decimal
455 * @param length the length of decimal.
456 * @stable ICU 3.8
457 */
458U_STABLE void U_EXPORT2
459udatpg_setDecimal(UDateTimePatternGenerator *dtpg,
460                  const UChar *decimal, int32_t length);
461
462/**
463 * Getter corresponding to setDecimal.
464 *
465 * @param dtpg a pointer to UDateTimePatternGenerator.
466 * @param pLength A pointer that will receive the length of the decimal string.
467 * @return corresponding to the decimal point.
468 * @stable ICU 3.8
469 */
470U_STABLE const UChar * U_EXPORT2
471udatpg_getDecimal(const UDateTimePatternGenerator *dtpg,
472                  int32_t *pLength);
473
474/**
475 * Adjusts the field types (width and subtype) of a pattern to match what is
476 * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a
477 * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be
478 * "dd-MMMM hh:mm". This is used internally to get the best match for the
479 * input skeleton, but can also be used externally.
480 *
481 * Note that this function uses a non-const UDateTimePatternGenerator:
482 * It uses a stateful pattern parser which is set up for each generator object,
483 * rather than creating one for each function call.
484 * Consecutive calls to this function do not affect each other,
485 * but this function cannot be used concurrently on a single generator object.
486 *
487 * @param dtpg a pointer to UDateTimePatternGenerator.
488 * @param pattern Input pattern
489 * @param patternLength the length of input pattern.
490 * @param skeleton
491 * @param skeletonLength the length of input skeleton.
492 * @param dest  pattern adjusted to match the skeleton fields widths and subtypes.
493 * @param destCapacity the capacity of dest.
494 * @param pErrorCode a pointer to the UErrorCode which must not indicate a
495 *                  failure before the function call.
496 * @return the length of dest.
497 * @stable ICU 3.8
498 */
499U_STABLE int32_t U_EXPORT2
500udatpg_replaceFieldTypes(UDateTimePatternGenerator *dtpg,
501                         const UChar *pattern, int32_t patternLength,
502                         const UChar *skeleton, int32_t skeletonLength,
503                         UChar *dest, int32_t destCapacity,
504                         UErrorCode *pErrorCode);
505
506/**
507 * Adjusts the field types (width and subtype) of a pattern to match what is
508 * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a
509 * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be
510 * "dd-MMMM hh:mm". This is used internally to get the best match for the
511 * input skeleton, but can also be used externally.
512 *
513 * Note that this function uses a non-const UDateTimePatternGenerator:
514 * It uses a stateful pattern parser which is set up for each generator object,
515 * rather than creating one for each function call.
516 * Consecutive calls to this function do not affect each other,
517 * but this function cannot be used concurrently on a single generator object.
518 *
519 * @param dtpg a pointer to UDateTimePatternGenerator.
520 * @param pattern Input pattern
521 * @param patternLength the length of input pattern.
522 * @param skeleton
523 * @param skeletonLength the length of input skeleton.
524 * @param options
525 *            Options controlling whether the length of specified fields in the
526 *            pattern are adjusted to match those in the skeleton (when this
527 *            would not happen otherwise). For default behavior, use
528 *            UDATPG_MATCH_NO_OPTIONS.
529 * @param dest  pattern adjusted to match the skeleton fields widths and subtypes.
530 * @param destCapacity the capacity of dest.
531 * @param pErrorCode a pointer to the UErrorCode which must not indicate a
532 *                  failure before the function call.
533 * @return the length of dest.
534 * @stable ICU 4.4
535 */
536U_STABLE int32_t U_EXPORT2
537udatpg_replaceFieldTypesWithOptions(UDateTimePatternGenerator *dtpg,
538                                    const UChar *pattern, int32_t patternLength,
539                                    const UChar *skeleton, int32_t skeletonLength,
540                                    UDateTimePatternMatchOptions options,
541                                    UChar *dest, int32_t destCapacity,
542                                    UErrorCode *pErrorCode);
543
544/**
545 * Return a UEnumeration list of all the skeletons in canonical form.
546 * Call udatpg_getPatternForSkeleton() to get the corresponding pattern.
547 *
548 * @param dtpg a pointer to UDateTimePatternGenerator.
549 * @param pErrorCode a pointer to the UErrorCode which must not indicate a
550 *                  failure before the function call
551 * @return a UEnumeration list of all the skeletons
552 *         The caller must close the object.
553 * @stable ICU 3.8
554 */
555U_STABLE UEnumeration * U_EXPORT2
556udatpg_openSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode);
557
558/**
559 * Return a UEnumeration list of all the base skeletons in canonical form.
560 *
561 * @param dtpg a pointer to UDateTimePatternGenerator.
562 * @param pErrorCode a pointer to the UErrorCode which must not indicate a
563 *             failure before the function call.
564 * @return a UEnumeration list of all the base skeletons
565 *             The caller must close the object.
566 * @stable ICU 3.8
567 */
568U_STABLE UEnumeration * U_EXPORT2
569udatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode);
570
571/**
572 * Get the pattern corresponding to a given skeleton.
573 *
574 * @param dtpg a pointer to UDateTimePatternGenerator.
575 * @param skeleton
576 * @param skeletonLength pointer to the length of skeleton.
577 * @param pLength pointer to the length of return pattern.
578 * @return pattern corresponding to a given skeleton.
579 * @stable ICU 3.8
580 */
581U_STABLE const UChar * U_EXPORT2
582udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg,
583                             const UChar *skeleton, int32_t skeletonLength,
584                             int32_t *pLength);
585
586#endif
587