1 /*
2 *******************************************************************************
3 *
4 * Copyright (C) 2009, International Business Machines
5 * Corporation and others. All Rights Reserved.
6 *
7 *******************************************************************************
8 * file name: udatpg.cpp
9 * encoding: US-ASCII
10 * tab size: 8 (not used)
11 * indentation:4
12 *
13 * created on: 2007jul30
14 * created by: Markus W. Scherer
15 */
16
17 #include "unicode/utypes.h"
18
19 #if !UCONFIG_NO_FORMATTING
20
21 #include "unicode/udatpg.h"
22 #include "unicode/uenum.h"
23 #include "unicode/strenum.h"
24 #include "unicode/dtptngen.h"
25 #include "ustrenum.h"
26
27 U_NAMESPACE_USE
28
29 U_DRAFT UDateTimePatternGenerator * U_EXPORT2
udatpg_open(const char * locale,UErrorCode * pErrorCode)30 udatpg_open(const char *locale, UErrorCode *pErrorCode) {
31 if(locale==NULL) {
32 return (UDateTimePatternGenerator *)DateTimePatternGenerator::createInstance(*pErrorCode);
33 } else {
34 return (UDateTimePatternGenerator *)DateTimePatternGenerator::createInstance(Locale(locale), *pErrorCode);
35 }
36 }
37
38 U_DRAFT UDateTimePatternGenerator * U_EXPORT2
udatpg_openEmpty(UErrorCode * pErrorCode)39 udatpg_openEmpty(UErrorCode *pErrorCode) {
40 return (UDateTimePatternGenerator *)DateTimePatternGenerator::createEmptyInstance(*pErrorCode);
41 }
42
43 U_DRAFT void U_EXPORT2
udatpg_close(UDateTimePatternGenerator * dtpg)44 udatpg_close(UDateTimePatternGenerator *dtpg) {
45 delete (DateTimePatternGenerator *)dtpg;
46 }
47
48 U_DRAFT UDateTimePatternGenerator * U_EXPORT2
udatpg_clone(const UDateTimePatternGenerator * dtpg,UErrorCode * pErrorCode)49 udatpg_clone(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode) {
50 if(U_FAILURE(*pErrorCode)) {
51 return NULL;
52 }
53 return (UDateTimePatternGenerator *)(((const DateTimePatternGenerator *)dtpg)->clone());
54 }
55
56 U_DRAFT int32_t U_EXPORT2
udatpg_getBestPattern(UDateTimePatternGenerator * dtpg,const UChar * skeleton,int32_t length,UChar * bestPattern,int32_t capacity,UErrorCode * pErrorCode)57 udatpg_getBestPattern(UDateTimePatternGenerator *dtpg,
58 const UChar *skeleton, int32_t length,
59 UChar *bestPattern, int32_t capacity,
60 UErrorCode *pErrorCode) {
61 if(U_FAILURE(*pErrorCode)) {
62 return 0;
63 }
64 if(skeleton==NULL && length!=0) {
65 *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
66 return 0;
67 }
68 UnicodeString skeletonString((UBool)(length<0), skeleton, length);
69 UnicodeString result=((DateTimePatternGenerator *)dtpg)->getBestPattern(skeletonString, *pErrorCode);
70 return result.extract(bestPattern, capacity, *pErrorCode);
71 }
72
73 U_DRAFT int32_t U_EXPORT2
udatpg_getSkeleton(UDateTimePatternGenerator * dtpg,const UChar * pattern,int32_t length,UChar * skeleton,int32_t capacity,UErrorCode * pErrorCode)74 udatpg_getSkeleton(UDateTimePatternGenerator *dtpg,
75 const UChar *pattern, int32_t length,
76 UChar *skeleton, int32_t capacity,
77 UErrorCode *pErrorCode) {
78 if(U_FAILURE(*pErrorCode)) {
79 return 0;
80 }
81 if(pattern==NULL && length!=0) {
82 *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
83 return 0;
84 }
85 UnicodeString patternString((UBool)(length<0), pattern, length);
86 UnicodeString result=((DateTimePatternGenerator *)dtpg)->getSkeleton(patternString, *pErrorCode);
87 return result.extract(skeleton, capacity, *pErrorCode);
88 }
89
90 U_DRAFT int32_t U_EXPORT2
udatpg_getBaseSkeleton(UDateTimePatternGenerator * dtpg,const UChar * pattern,int32_t length,UChar * skeleton,int32_t capacity,UErrorCode * pErrorCode)91 udatpg_getBaseSkeleton(UDateTimePatternGenerator *dtpg,
92 const UChar *pattern, int32_t length,
93 UChar *skeleton, int32_t capacity,
94 UErrorCode *pErrorCode) {
95 if(U_FAILURE(*pErrorCode)) {
96 return 0;
97 }
98 if(pattern==NULL && length!=0) {
99 *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
100 return 0;
101 }
102 UnicodeString patternString((UBool)(length<0), pattern, length);
103 UnicodeString result=((DateTimePatternGenerator *)dtpg)->getBaseSkeleton(patternString, *pErrorCode);
104 return result.extract(skeleton, capacity, *pErrorCode);
105 }
106
107 U_DRAFT UDateTimePatternConflict U_EXPORT2
udatpg_addPattern(UDateTimePatternGenerator * dtpg,const UChar * pattern,int32_t patternLength,UBool override,UChar * conflictingPattern,int32_t capacity,int32_t * pLength,UErrorCode * pErrorCode)108 udatpg_addPattern(UDateTimePatternGenerator *dtpg,
109 const UChar *pattern, int32_t patternLength,
110 UBool override,
111 UChar *conflictingPattern, int32_t capacity, int32_t *pLength,
112 UErrorCode *pErrorCode) {
113 if(U_FAILURE(*pErrorCode)) {
114 return UDATPG_NO_CONFLICT;
115 }
116 if(pattern==NULL && patternLength!=0) {
117 *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
118 return UDATPG_NO_CONFLICT;
119 }
120 UnicodeString patternString((UBool)(patternLength<0), pattern, patternLength);
121 UnicodeString conflictingPatternString;
122 UDateTimePatternConflict result=((DateTimePatternGenerator *)dtpg)->
123 addPattern(patternString, override, conflictingPatternString, *pErrorCode);
124 int32_t length=conflictingPatternString.extract(conflictingPattern, capacity, *pErrorCode);
125 if(pLength!=NULL) {
126 *pLength=length;
127 }
128 return result;
129 }
130
131 U_DRAFT void U_EXPORT2
udatpg_setAppendItemFormat(UDateTimePatternGenerator * dtpg,UDateTimePatternField field,const UChar * value,int32_t length)132 udatpg_setAppendItemFormat(UDateTimePatternGenerator *dtpg,
133 UDateTimePatternField field,
134 const UChar *value, int32_t length) {
135 UnicodeString valueString((UBool)(length<0), value, length);
136 ((DateTimePatternGenerator *)dtpg)->setAppendItemFormat(field, valueString);
137 }
138
139 U_DRAFT const UChar * U_EXPORT2
udatpg_getAppendItemFormat(const UDateTimePatternGenerator * dtpg,UDateTimePatternField field,int32_t * pLength)140 udatpg_getAppendItemFormat(const UDateTimePatternGenerator *dtpg,
141 UDateTimePatternField field,
142 int32_t *pLength) {
143 const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getAppendItemFormat(field);
144 if(pLength!=NULL) {
145 *pLength=result.length();
146 }
147 return result.getBuffer();
148 }
149
150 U_DRAFT void U_EXPORT2
udatpg_setAppendItemName(UDateTimePatternGenerator * dtpg,UDateTimePatternField field,const UChar * value,int32_t length)151 udatpg_setAppendItemName(UDateTimePatternGenerator *dtpg,
152 UDateTimePatternField field,
153 const UChar *value, int32_t length) {
154 UnicodeString valueString((UBool)(length<0), value, length);
155 ((DateTimePatternGenerator *)dtpg)->setAppendItemName(field, valueString);
156 }
157
158 U_DRAFT const UChar * U_EXPORT2
udatpg_getAppendItemName(const UDateTimePatternGenerator * dtpg,UDateTimePatternField field,int32_t * pLength)159 udatpg_getAppendItemName(const UDateTimePatternGenerator *dtpg,
160 UDateTimePatternField field,
161 int32_t *pLength) {
162 const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getAppendItemName(field);
163 if(pLength!=NULL) {
164 *pLength=result.length();
165 }
166 return result.getBuffer();
167 }
168
169 U_DRAFT void U_EXPORT2
udatpg_setDateTimeFormat(const UDateTimePatternGenerator * dtpg,const UChar * dtFormat,int32_t length)170 udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg,
171 const UChar *dtFormat, int32_t length) {
172 UnicodeString dtFormatString((UBool)(length<0), dtFormat, length);
173 ((DateTimePatternGenerator *)dtpg)->setDateTimeFormat(dtFormatString);
174 }
175
176 U_DRAFT const UChar * U_EXPORT2
udatpg_getDateTimeFormat(const UDateTimePatternGenerator * dtpg,int32_t * pLength)177 udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg,
178 int32_t *pLength) {
179 const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getDateTimeFormat();
180 if(pLength!=NULL) {
181 *pLength=result.length();
182 }
183 return result.getBuffer();
184 }
185
186 U_DRAFT void U_EXPORT2
udatpg_setDecimal(UDateTimePatternGenerator * dtpg,const UChar * decimal,int32_t length)187 udatpg_setDecimal(UDateTimePatternGenerator *dtpg,
188 const UChar *decimal, int32_t length) {
189 UnicodeString decimalString((UBool)(length<0), decimal, length);
190 ((DateTimePatternGenerator *)dtpg)->setDecimal(decimalString);
191 }
192
193 U_DRAFT const UChar * U_EXPORT2
udatpg_getDecimal(const UDateTimePatternGenerator * dtpg,int32_t * pLength)194 udatpg_getDecimal(const UDateTimePatternGenerator *dtpg,
195 int32_t *pLength) {
196 const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getDecimal();
197 if(pLength!=NULL) {
198 *pLength=result.length();
199 }
200 return result.getBuffer();
201 }
202
203 U_DRAFT int32_t U_EXPORT2
udatpg_replaceFieldTypes(UDateTimePatternGenerator * dtpg,const UChar * pattern,int32_t patternLength,const UChar * skeleton,int32_t skeletonLength,UChar * dest,int32_t destCapacity,UErrorCode * pErrorCode)204 udatpg_replaceFieldTypes(UDateTimePatternGenerator *dtpg,
205 const UChar *pattern, int32_t patternLength,
206 const UChar *skeleton, int32_t skeletonLength,
207 UChar *dest, int32_t destCapacity,
208 UErrorCode *pErrorCode) {
209 if(U_FAILURE(*pErrorCode)) {
210 return 0;
211 }
212 if((pattern==NULL && patternLength!=0) || (skeleton==NULL && skeletonLength!=0)) {
213 *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
214 return 0;
215 }
216 UnicodeString patternString((UBool)(patternLength<0), pattern, patternLength);
217 UnicodeString skeletonString((UBool)(skeletonLength<0), skeleton, skeletonLength);
218 UnicodeString result=((DateTimePatternGenerator *)dtpg)->replaceFieldTypes(patternString, skeletonString, *pErrorCode);
219 return result.extract(dest, destCapacity, *pErrorCode);
220 }
221
222 U_DRAFT UEnumeration * U_EXPORT2
udatpg_openSkeletons(const UDateTimePatternGenerator * dtpg,UErrorCode * pErrorCode)223 udatpg_openSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode) {
224 return uenum_openFromStringEnumeration(
225 ((DateTimePatternGenerator *)dtpg)->getSkeletons(*pErrorCode),
226 pErrorCode);
227 }
228
229 U_DRAFT UEnumeration * U_EXPORT2
udatpg_openBaseSkeletons(const UDateTimePatternGenerator * dtpg,UErrorCode * pErrorCode)230 udatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode) {
231 return uenum_openFromStringEnumeration(
232 ((DateTimePatternGenerator *)dtpg)->getBaseSkeletons(*pErrorCode),
233 pErrorCode);
234 }
235
236 U_DRAFT const UChar * U_EXPORT2
udatpg_getPatternForSkeleton(const UDateTimePatternGenerator * dtpg,const UChar * skeleton,int32_t skeletonLength,int32_t * pLength)237 udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg,
238 const UChar *skeleton, int32_t skeletonLength,
239 int32_t *pLength) {
240 UnicodeString skeletonString((UBool)(skeletonLength<0), skeleton, skeletonLength);
241 const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getPatternForSkeleton(skeletonString);
242 if(pLength!=NULL) {
243 *pLength=result.length();
244 }
245 return result.getBuffer();
246 }
247
248 #endif
249