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