|
1 /* |
|
2 ******************************************************************************* |
|
3 * |
|
4 * Copyright (C) 2009-2012, 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_CAPI UDateTimePatternGenerator * U_EXPORT2 |
|
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_CAPI UDateTimePatternGenerator * U_EXPORT2 |
|
39 udatpg_openEmpty(UErrorCode *pErrorCode) { |
|
40 return (UDateTimePatternGenerator *)DateTimePatternGenerator::createEmptyInstance(*pErrorCode); |
|
41 } |
|
42 |
|
43 U_CAPI void U_EXPORT2 |
|
44 udatpg_close(UDateTimePatternGenerator *dtpg) { |
|
45 delete (DateTimePatternGenerator *)dtpg; |
|
46 } |
|
47 |
|
48 U_CAPI UDateTimePatternGenerator * U_EXPORT2 |
|
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_CAPI int32_t U_EXPORT2 |
|
57 udatpg_getBestPattern(UDateTimePatternGenerator *dtpg, |
|
58 const UChar *skeleton, int32_t length, |
|
59 UChar *bestPattern, int32_t capacity, |
|
60 UErrorCode *pErrorCode) { |
|
61 return udatpg_getBestPatternWithOptions(dtpg, skeleton, length, |
|
62 UDATPG_MATCH_NO_OPTIONS, |
|
63 bestPattern, capacity, pErrorCode); |
|
64 } |
|
65 |
|
66 U_CAPI int32_t U_EXPORT2 |
|
67 udatpg_getBestPatternWithOptions(UDateTimePatternGenerator *dtpg, |
|
68 const UChar *skeleton, int32_t length, |
|
69 UDateTimePatternMatchOptions options, |
|
70 UChar *bestPattern, int32_t capacity, |
|
71 UErrorCode *pErrorCode) { |
|
72 if(U_FAILURE(*pErrorCode)) { |
|
73 return 0; |
|
74 } |
|
75 if(skeleton==NULL && length!=0) { |
|
76 *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; |
|
77 return 0; |
|
78 } |
|
79 UnicodeString skeletonString((UBool)(length<0), skeleton, length); |
|
80 UnicodeString result=((DateTimePatternGenerator *)dtpg)->getBestPattern(skeletonString, options, *pErrorCode); |
|
81 return result.extract(bestPattern, capacity, *pErrorCode); |
|
82 } |
|
83 |
|
84 U_CAPI int32_t U_EXPORT2 |
|
85 udatpg_getSkeleton(UDateTimePatternGenerator *dtpg, |
|
86 const UChar *pattern, int32_t length, |
|
87 UChar *skeleton, int32_t capacity, |
|
88 UErrorCode *pErrorCode) { |
|
89 if(U_FAILURE(*pErrorCode)) { |
|
90 return 0; |
|
91 } |
|
92 if(pattern==NULL && length!=0) { |
|
93 *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; |
|
94 return 0; |
|
95 } |
|
96 UnicodeString patternString((UBool)(length<0), pattern, length); |
|
97 UnicodeString result=((DateTimePatternGenerator *)dtpg)->getSkeleton(patternString, *pErrorCode); |
|
98 return result.extract(skeleton, capacity, *pErrorCode); |
|
99 } |
|
100 |
|
101 U_CAPI int32_t U_EXPORT2 |
|
102 udatpg_getBaseSkeleton(UDateTimePatternGenerator *dtpg, |
|
103 const UChar *pattern, int32_t length, |
|
104 UChar *skeleton, int32_t capacity, |
|
105 UErrorCode *pErrorCode) { |
|
106 if(U_FAILURE(*pErrorCode)) { |
|
107 return 0; |
|
108 } |
|
109 if(pattern==NULL && length!=0) { |
|
110 *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; |
|
111 return 0; |
|
112 } |
|
113 UnicodeString patternString((UBool)(length<0), pattern, length); |
|
114 UnicodeString result=((DateTimePatternGenerator *)dtpg)->getBaseSkeleton(patternString, *pErrorCode); |
|
115 return result.extract(skeleton, capacity, *pErrorCode); |
|
116 } |
|
117 |
|
118 U_CAPI UDateTimePatternConflict U_EXPORT2 |
|
119 udatpg_addPattern(UDateTimePatternGenerator *dtpg, |
|
120 const UChar *pattern, int32_t patternLength, |
|
121 UBool override, |
|
122 UChar *conflictingPattern, int32_t capacity, int32_t *pLength, |
|
123 UErrorCode *pErrorCode) { |
|
124 if(U_FAILURE(*pErrorCode)) { |
|
125 return UDATPG_NO_CONFLICT; |
|
126 } |
|
127 if(pattern==NULL && patternLength!=0) { |
|
128 *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; |
|
129 return UDATPG_NO_CONFLICT; |
|
130 } |
|
131 UnicodeString patternString((UBool)(patternLength<0), pattern, patternLength); |
|
132 UnicodeString conflictingPatternString; |
|
133 UDateTimePatternConflict result=((DateTimePatternGenerator *)dtpg)-> |
|
134 addPattern(patternString, override, conflictingPatternString, *pErrorCode); |
|
135 int32_t length=conflictingPatternString.extract(conflictingPattern, capacity, *pErrorCode); |
|
136 if(pLength!=NULL) { |
|
137 *pLength=length; |
|
138 } |
|
139 return result; |
|
140 } |
|
141 |
|
142 U_CAPI void U_EXPORT2 |
|
143 udatpg_setAppendItemFormat(UDateTimePatternGenerator *dtpg, |
|
144 UDateTimePatternField field, |
|
145 const UChar *value, int32_t length) { |
|
146 UnicodeString valueString((UBool)(length<0), value, length); |
|
147 ((DateTimePatternGenerator *)dtpg)->setAppendItemFormat(field, valueString); |
|
148 } |
|
149 |
|
150 U_CAPI const UChar * U_EXPORT2 |
|
151 udatpg_getAppendItemFormat(const UDateTimePatternGenerator *dtpg, |
|
152 UDateTimePatternField field, |
|
153 int32_t *pLength) { |
|
154 const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getAppendItemFormat(field); |
|
155 if(pLength!=NULL) { |
|
156 *pLength=result.length(); |
|
157 } |
|
158 return result.getBuffer(); |
|
159 } |
|
160 |
|
161 U_CAPI void U_EXPORT2 |
|
162 udatpg_setAppendItemName(UDateTimePatternGenerator *dtpg, |
|
163 UDateTimePatternField field, |
|
164 const UChar *value, int32_t length) { |
|
165 UnicodeString valueString((UBool)(length<0), value, length); |
|
166 ((DateTimePatternGenerator *)dtpg)->setAppendItemName(field, valueString); |
|
167 } |
|
168 |
|
169 U_CAPI const UChar * U_EXPORT2 |
|
170 udatpg_getAppendItemName(const UDateTimePatternGenerator *dtpg, |
|
171 UDateTimePatternField field, |
|
172 int32_t *pLength) { |
|
173 const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getAppendItemName(field); |
|
174 if(pLength!=NULL) { |
|
175 *pLength=result.length(); |
|
176 } |
|
177 return result.getBuffer(); |
|
178 } |
|
179 |
|
180 U_CAPI void U_EXPORT2 |
|
181 udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg, |
|
182 const UChar *dtFormat, int32_t length) { |
|
183 UnicodeString dtFormatString((UBool)(length<0), dtFormat, length); |
|
184 ((DateTimePatternGenerator *)dtpg)->setDateTimeFormat(dtFormatString); |
|
185 } |
|
186 |
|
187 U_CAPI const UChar * U_EXPORT2 |
|
188 udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg, |
|
189 int32_t *pLength) { |
|
190 const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getDateTimeFormat(); |
|
191 if(pLength!=NULL) { |
|
192 *pLength=result.length(); |
|
193 } |
|
194 return result.getBuffer(); |
|
195 } |
|
196 |
|
197 U_CAPI void U_EXPORT2 |
|
198 udatpg_setDecimal(UDateTimePatternGenerator *dtpg, |
|
199 const UChar *decimal, int32_t length) { |
|
200 UnicodeString decimalString((UBool)(length<0), decimal, length); |
|
201 ((DateTimePatternGenerator *)dtpg)->setDecimal(decimalString); |
|
202 } |
|
203 |
|
204 U_CAPI const UChar * U_EXPORT2 |
|
205 udatpg_getDecimal(const UDateTimePatternGenerator *dtpg, |
|
206 int32_t *pLength) { |
|
207 const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getDecimal(); |
|
208 if(pLength!=NULL) { |
|
209 *pLength=result.length(); |
|
210 } |
|
211 return result.getBuffer(); |
|
212 } |
|
213 |
|
214 U_CAPI int32_t U_EXPORT2 |
|
215 udatpg_replaceFieldTypes(UDateTimePatternGenerator *dtpg, |
|
216 const UChar *pattern, int32_t patternLength, |
|
217 const UChar *skeleton, int32_t skeletonLength, |
|
218 UChar *dest, int32_t destCapacity, |
|
219 UErrorCode *pErrorCode) { |
|
220 return udatpg_replaceFieldTypesWithOptions(dtpg, pattern, patternLength, skeleton, skeletonLength, |
|
221 UDATPG_MATCH_NO_OPTIONS, |
|
222 dest, destCapacity, pErrorCode); |
|
223 } |
|
224 |
|
225 U_CAPI int32_t U_EXPORT2 |
|
226 udatpg_replaceFieldTypesWithOptions(UDateTimePatternGenerator *dtpg, |
|
227 const UChar *pattern, int32_t patternLength, |
|
228 const UChar *skeleton, int32_t skeletonLength, |
|
229 UDateTimePatternMatchOptions options, |
|
230 UChar *dest, int32_t destCapacity, |
|
231 UErrorCode *pErrorCode) { |
|
232 if(U_FAILURE(*pErrorCode)) { |
|
233 return 0; |
|
234 } |
|
235 if((pattern==NULL && patternLength!=0) || (skeleton==NULL && skeletonLength!=0)) { |
|
236 *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; |
|
237 return 0; |
|
238 } |
|
239 UnicodeString patternString((UBool)(patternLength<0), pattern, patternLength); |
|
240 UnicodeString skeletonString((UBool)(skeletonLength<0), skeleton, skeletonLength); |
|
241 UnicodeString result=((DateTimePatternGenerator *)dtpg)->replaceFieldTypes(patternString, skeletonString, options, *pErrorCode); |
|
242 return result.extract(dest, destCapacity, *pErrorCode); |
|
243 } |
|
244 |
|
245 U_CAPI UEnumeration * U_EXPORT2 |
|
246 udatpg_openSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode) { |
|
247 return uenum_openFromStringEnumeration( |
|
248 ((DateTimePatternGenerator *)dtpg)->getSkeletons(*pErrorCode), |
|
249 pErrorCode); |
|
250 } |
|
251 |
|
252 U_CAPI UEnumeration * U_EXPORT2 |
|
253 udatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode) { |
|
254 return uenum_openFromStringEnumeration( |
|
255 ((DateTimePatternGenerator *)dtpg)->getBaseSkeletons(*pErrorCode), |
|
256 pErrorCode); |
|
257 } |
|
258 |
|
259 U_CAPI const UChar * U_EXPORT2 |
|
260 udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg, |
|
261 const UChar *skeleton, int32_t skeletonLength, |
|
262 int32_t *pLength) { |
|
263 UnicodeString skeletonString((UBool)(skeletonLength<0), skeleton, skeletonLength); |
|
264 const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getPatternForSkeleton(skeletonString); |
|
265 if(pLength!=NULL) { |
|
266 *pLength=result.length(); |
|
267 } |
|
268 return result.getBuffer(); |
|
269 } |
|
270 |
|
271 #endif |