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