164339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// Copyright (C) 2016 and later: Unicode, Inc. and others.
264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html
3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*******************************************************************************
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
6c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert*   Copyright (C) 2009-2015, International Business Machines
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Corporation and others.  All Rights Reserved.
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*******************************************************************************
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   file name:  udatpg.cpp
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   encoding:   US-ASCII
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   tab size:   8 (not used)
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   indentation:4
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   created on: 2007jul30
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   created by: Markus W. Scherer
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h"
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/udatpg.h"
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uenum.h"
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/strenum.h"
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dtptngen.h"
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ustrenum.h"
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_USE
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3154dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI UDateTimePatternGenerator * U_EXPORT2
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_open(const char *locale, UErrorCode *pErrorCode) {
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(locale==NULL) {
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return (UDateTimePatternGenerator *)DateTimePatternGenerator::createInstance(*pErrorCode);
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return (UDateTimePatternGenerator *)DateTimePatternGenerator::createInstance(Locale(locale), *pErrorCode);
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
4054dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI UDateTimePatternGenerator * U_EXPORT2
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_openEmpty(UErrorCode *pErrorCode) {
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return (UDateTimePatternGenerator *)DateTimePatternGenerator::createEmptyInstance(*pErrorCode);
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
4554dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI void U_EXPORT2
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_close(UDateTimePatternGenerator *dtpg) {
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete (DateTimePatternGenerator *)dtpg;
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
5054dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI UDateTimePatternGenerator * U_EXPORT2
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_clone(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode) {
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(*pErrorCode)) {
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return NULL;
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return (UDateTimePatternGenerator *)(((const DateTimePatternGenerator *)dtpg)->clone());
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
5854dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI int32_t U_EXPORT2
59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_getBestPattern(UDateTimePatternGenerator *dtpg,
60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      const UChar *skeleton, int32_t length,
61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      UChar *bestPattern, int32_t capacity,
62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      UErrorCode *pErrorCode) {
6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return udatpg_getBestPatternWithOptions(dtpg, skeleton, length,
6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                            UDATPG_MATCH_NO_OPTIONS,
6550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                            bestPattern, capacity, pErrorCode);
6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
6750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6854dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI int32_t U_EXPORT2
6950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoudatpg_getBestPatternWithOptions(UDateTimePatternGenerator *dtpg,
7050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                 const UChar *skeleton, int32_t length,
7150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                 UDateTimePatternMatchOptions options,
7250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                 UChar *bestPattern, int32_t capacity,
7350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                 UErrorCode *pErrorCode) {
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(*pErrorCode)) {
75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return 0;
76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(skeleton==NULL && length!=0) {
78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return 0;
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString skeletonString((UBool)(length<0), skeleton, length);
8250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result=((DateTimePatternGenerator *)dtpg)->getBestPattern(skeletonString, options, *pErrorCode);
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return result.extract(bestPattern, capacity, *pErrorCode);
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
8654dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI int32_t U_EXPORT2
87c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertudatpg_getSkeleton(UDateTimePatternGenerator * /* dtpg */,
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   const UChar *pattern, int32_t length,
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   UChar *skeleton, int32_t capacity,
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   UErrorCode *pErrorCode) {
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(*pErrorCode)) {
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return 0;
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(pattern==NULL && length!=0) {
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return 0;
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString patternString((UBool)(length<0), pattern, length);
99c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert    UnicodeString result=DateTimePatternGenerator::staticGetSkeleton(
100c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert            patternString, *pErrorCode);
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return result.extract(skeleton, capacity, *pErrorCode);
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
10454dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI int32_t U_EXPORT2
105c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertudatpg_getBaseSkeleton(UDateTimePatternGenerator * /* dtpg */,
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                       const UChar *pattern, int32_t length,
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                       UChar *skeleton, int32_t capacity,
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                       UErrorCode *pErrorCode) {
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(*pErrorCode)) {
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return 0;
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(pattern==NULL && length!=0) {
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return 0;
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString patternString((UBool)(length<0), pattern, length);
117c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert    UnicodeString result=DateTimePatternGenerator::staticGetBaseSkeleton(
118c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert            patternString, *pErrorCode);
119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return result.extract(skeleton, capacity, *pErrorCode);
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
12254dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI UDateTimePatternConflict U_EXPORT2
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_addPattern(UDateTimePatternGenerator *dtpg,
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  const UChar *pattern, int32_t patternLength,
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  UBool override,
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  UChar *conflictingPattern, int32_t capacity, int32_t *pLength,
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  UErrorCode *pErrorCode) {
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(*pErrorCode)) {
129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return UDATPG_NO_CONFLICT;
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(pattern==NULL && patternLength!=0) {
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return UDATPG_NO_CONFLICT;
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString patternString((UBool)(patternLength<0), pattern, patternLength);
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString conflictingPatternString;
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDateTimePatternConflict result=((DateTimePatternGenerator *)dtpg)->
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            addPattern(patternString, override, conflictingPatternString, *pErrorCode);
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t length=conflictingPatternString.extract(conflictingPattern, capacity, *pErrorCode);
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(pLength!=NULL) {
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        *pLength=length;
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return result;
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
14654dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI void U_EXPORT2
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_setAppendItemFormat(UDateTimePatternGenerator *dtpg,
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                           UDateTimePatternField field,
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                           const UChar *value, int32_t length) {
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString valueString((UBool)(length<0), value, length);
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((DateTimePatternGenerator *)dtpg)->setAppendItemFormat(field, valueString);
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
15454dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI const UChar * U_EXPORT2
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_getAppendItemFormat(const UDateTimePatternGenerator *dtpg,
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                           UDateTimePatternField field,
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                           int32_t *pLength) {
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getAppendItemFormat(field);
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(pLength!=NULL) {
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        *pLength=result.length();
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return result.getBuffer();
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
16554dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI void U_EXPORT2
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_setAppendItemName(UDateTimePatternGenerator *dtpg,
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         UDateTimePatternField field,
168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         const UChar *value, int32_t length) {
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString valueString((UBool)(length<0), value, length);
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((DateTimePatternGenerator *)dtpg)->setAppendItemName(field, valueString);
171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
17354dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI const UChar * U_EXPORT2
174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_getAppendItemName(const UDateTimePatternGenerator *dtpg,
175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         UDateTimePatternField field,
176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         int32_t *pLength) {
177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getAppendItemName(field);
178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(pLength!=NULL) {
179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        *pLength=result.length();
180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return result.getBuffer();
182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
18454dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI void U_EXPORT2
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg,
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         const UChar *dtFormat, int32_t length) {
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString dtFormatString((UBool)(length<0), dtFormat, length);
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((DateTimePatternGenerator *)dtpg)->setDateTimeFormat(dtFormatString);
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
19154dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI const UChar * U_EXPORT2
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg,
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         int32_t *pLength) {
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getDateTimeFormat();
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(pLength!=NULL) {
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        *pLength=result.length();
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return result.getBuffer();
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
20154dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI void U_EXPORT2
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_setDecimal(UDateTimePatternGenerator *dtpg,
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  const UChar *decimal, int32_t length) {
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString decimalString((UBool)(length<0), decimal, length);
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((DateTimePatternGenerator *)dtpg)->setDecimal(decimalString);
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
20854dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI const UChar * U_EXPORT2
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_getDecimal(const UDateTimePatternGenerator *dtpg,
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  int32_t *pLength) {
211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getDecimal();
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(pLength!=NULL) {
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        *pLength=result.length();
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return result.getBuffer();
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
21854dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI int32_t U_EXPORT2
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_replaceFieldTypes(UDateTimePatternGenerator *dtpg,
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         const UChar *pattern, int32_t patternLength,
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         const UChar *skeleton, int32_t skeletonLength,
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         UChar *dest, int32_t destCapacity,
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         UErrorCode *pErrorCode) {
22450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return udatpg_replaceFieldTypesWithOptions(dtpg, pattern, patternLength, skeleton, skeletonLength,
22550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                               UDATPG_MATCH_NO_OPTIONS,
22650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                               dest, destCapacity, pErrorCode);
22750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
22850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
22954dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI int32_t U_EXPORT2
23050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoudatpg_replaceFieldTypesWithOptions(UDateTimePatternGenerator *dtpg,
23150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                    const UChar *pattern, int32_t patternLength,
23250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                    const UChar *skeleton, int32_t skeletonLength,
23350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                    UDateTimePatternMatchOptions options,
23450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                    UChar *dest, int32_t destCapacity,
23550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                    UErrorCode *pErrorCode) {
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(*pErrorCode)) {
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return 0;
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if((pattern==NULL && patternLength!=0) || (skeleton==NULL && skeletonLength!=0)) {
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return 0;
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString patternString((UBool)(patternLength<0), pattern, patternLength);
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString skeletonString((UBool)(skeletonLength<0), skeleton, skeletonLength);
24550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result=((DateTimePatternGenerator *)dtpg)->replaceFieldTypes(patternString, skeletonString, options, *pErrorCode);
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return result.extract(dest, destCapacity, *pErrorCode);
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
24954dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI UEnumeration * U_EXPORT2
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_openSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode) {
251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    return uenum_openFromStringEnumeration(
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ((DateTimePatternGenerator *)dtpg)->getSkeletons(*pErrorCode),
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                pErrorCode);
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
25654dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI UEnumeration * U_EXPORT2
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode) {
258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    return uenum_openFromStringEnumeration(
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ((DateTimePatternGenerator *)dtpg)->getBaseSkeletons(*pErrorCode),
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                pErrorCode);
261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
26354dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI const UChar * U_EXPORT2
264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruudatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg,
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             const UChar *skeleton, int32_t skeletonLength,
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             int32_t *pLength) {
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString skeletonString((UBool)(skeletonLength<0), skeleton, skeletonLength);
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getPatternForSkeleton(skeletonString);
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(pLength!=NULL) {
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        *pLength=result.length();
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return result.getBuffer();
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
276