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 272