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