diff options
Diffstat (limited to 'intl/icu/source/i18n/udatpg.cpp')
-rw-r--r-- | intl/icu/source/i18n/udatpg.cpp | 299 |
1 files changed, 299 insertions, 0 deletions
diff --git a/intl/icu/source/i18n/udatpg.cpp b/intl/icu/source/i18n/udatpg.cpp new file mode 100644 index 0000000000..332636a938 --- /dev/null +++ b/intl/icu/source/i18n/udatpg.cpp @@ -0,0 +1,299 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +******************************************************************************* +* +* Copyright (C) 2009-2015, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: udatpg.cpp +* encoding: UTF-8 +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2007jul30 +* created by: Markus W. Scherer +*/ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/udatpg.h" +#include "unicode/uenum.h" +#include "unicode/strenum.h" +#include "unicode/dtptngen.h" +#include "ustrenum.h" + +U_NAMESPACE_USE + +U_CAPI UDateTimePatternGenerator * U_EXPORT2 +udatpg_open(const char *locale, UErrorCode *pErrorCode) { + if(locale==NULL) { + return (UDateTimePatternGenerator *)DateTimePatternGenerator::createInstance(*pErrorCode); + } else { + return (UDateTimePatternGenerator *)DateTimePatternGenerator::createInstance(Locale(locale), *pErrorCode); + } +} + +U_CAPI UDateTimePatternGenerator * U_EXPORT2 +udatpg_openEmpty(UErrorCode *pErrorCode) { + return (UDateTimePatternGenerator *)DateTimePatternGenerator::createEmptyInstance(*pErrorCode); +} + +U_CAPI void U_EXPORT2 +udatpg_close(UDateTimePatternGenerator *dtpg) { + delete (DateTimePatternGenerator *)dtpg; +} + +U_CAPI UDateTimePatternGenerator * U_EXPORT2 +udatpg_clone(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode) { + if(U_FAILURE(*pErrorCode)) { + return NULL; + } + return (UDateTimePatternGenerator *)(((const DateTimePatternGenerator *)dtpg)->clone()); +} + +U_CAPI int32_t U_EXPORT2 +udatpg_getBestPattern(UDateTimePatternGenerator *dtpg, + const UChar *skeleton, int32_t length, + UChar *bestPattern, int32_t capacity, + UErrorCode *pErrorCode) { + return udatpg_getBestPatternWithOptions(dtpg, skeleton, length, + UDATPG_MATCH_NO_OPTIONS, + bestPattern, capacity, pErrorCode); +} + +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) { + if(U_FAILURE(*pErrorCode)) { + return 0; + } + if(skeleton==NULL && length!=0) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + UnicodeString skeletonString((UBool)(length<0), skeleton, length); + UnicodeString result=((DateTimePatternGenerator *)dtpg)->getBestPattern(skeletonString, options, *pErrorCode); + return result.extract(bestPattern, capacity, *pErrorCode); +} + +U_CAPI int32_t U_EXPORT2 +udatpg_getSkeleton(UDateTimePatternGenerator * /* dtpg */, + const UChar *pattern, int32_t length, + UChar *skeleton, int32_t capacity, + UErrorCode *pErrorCode) { + if(U_FAILURE(*pErrorCode)) { + return 0; + } + if(pattern==NULL && length!=0) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + UnicodeString patternString((UBool)(length<0), pattern, length); + UnicodeString result=DateTimePatternGenerator::staticGetSkeleton( + patternString, *pErrorCode); + return result.extract(skeleton, capacity, *pErrorCode); +} + +U_CAPI int32_t U_EXPORT2 +udatpg_getBaseSkeleton(UDateTimePatternGenerator * /* dtpg */, + const UChar *pattern, int32_t length, + UChar *skeleton, int32_t capacity, + UErrorCode *pErrorCode) { + if(U_FAILURE(*pErrorCode)) { + return 0; + } + if(pattern==NULL && length!=0) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + UnicodeString patternString((UBool)(length<0), pattern, length); + UnicodeString result=DateTimePatternGenerator::staticGetBaseSkeleton( + patternString, *pErrorCode); + return result.extract(skeleton, capacity, *pErrorCode); +} + +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) { + if(U_FAILURE(*pErrorCode)) { + return UDATPG_NO_CONFLICT; + } + if(pattern==NULL && patternLength!=0) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return UDATPG_NO_CONFLICT; + } + UnicodeString patternString((UBool)(patternLength<0), pattern, patternLength); + UnicodeString conflictingPatternString; + UDateTimePatternConflict result=((DateTimePatternGenerator *)dtpg)-> + addPattern(patternString, override, conflictingPatternString, *pErrorCode); + int32_t length=conflictingPatternString.extract(conflictingPattern, capacity, *pErrorCode); + if(pLength!=NULL) { + *pLength=length; + } + return result; +} + +U_CAPI void U_EXPORT2 +udatpg_setAppendItemFormat(UDateTimePatternGenerator *dtpg, + UDateTimePatternField field, + const UChar *value, int32_t length) { + UnicodeString valueString((UBool)(length<0), value, length); + ((DateTimePatternGenerator *)dtpg)->setAppendItemFormat(field, valueString); +} + +U_CAPI const UChar * U_EXPORT2 +udatpg_getAppendItemFormat(const UDateTimePatternGenerator *dtpg, + UDateTimePatternField field, + int32_t *pLength) { + const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getAppendItemFormat(field); + if(pLength!=NULL) { + *pLength=result.length(); + } + return result.getBuffer(); +} + +U_CAPI void U_EXPORT2 +udatpg_setAppendItemName(UDateTimePatternGenerator *dtpg, + UDateTimePatternField field, + const UChar *value, int32_t length) { + UnicodeString valueString((UBool)(length<0), value, length); + ((DateTimePatternGenerator *)dtpg)->setAppendItemName(field, valueString); +} + +U_CAPI const UChar * U_EXPORT2 +udatpg_getAppendItemName(const UDateTimePatternGenerator *dtpg, + UDateTimePatternField field, + int32_t *pLength) { + const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getAppendItemName(field); + if(pLength!=NULL) { + *pLength=result.length(); + } + return result.getBuffer(); +} + +U_CAPI int32_t U_EXPORT2 +udatpg_getFieldDisplayName(const UDateTimePatternGenerator *dtpg, + UDateTimePatternField field, + UDateTimePGDisplayWidth width, + UChar *fieldName, int32_t capacity, + UErrorCode *pErrorCode) { + if (U_FAILURE(*pErrorCode)) + return -1; + if (fieldName == NULL ? capacity != 0 : capacity < 0) { + *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; + return -1; + } + UnicodeString result = ((const DateTimePatternGenerator *)dtpg)->getFieldDisplayName(field,width); + if (fieldName == NULL) { + return result.length(); + } + return result.extract(fieldName, capacity, *pErrorCode); +} + +U_CAPI void U_EXPORT2 +udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg, + const UChar *dtFormat, int32_t length) { + UnicodeString dtFormatString((UBool)(length<0), dtFormat, length); + ((DateTimePatternGenerator *)dtpg)->setDateTimeFormat(dtFormatString); +} + +U_CAPI const UChar * U_EXPORT2 +udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg, + int32_t *pLength) { + const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getDateTimeFormat(); + if(pLength!=NULL) { + *pLength=result.length(); + } + return result.getBuffer(); +} + +U_CAPI void U_EXPORT2 +udatpg_setDecimal(UDateTimePatternGenerator *dtpg, + const UChar *decimal, int32_t length) { + UnicodeString decimalString((UBool)(length<0), decimal, length); + ((DateTimePatternGenerator *)dtpg)->setDecimal(decimalString); +} + +U_CAPI const UChar * U_EXPORT2 +udatpg_getDecimal(const UDateTimePatternGenerator *dtpg, + int32_t *pLength) { + const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getDecimal(); + if(pLength!=NULL) { + *pLength=result.length(); + } + return result.getBuffer(); +} + +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) { + return udatpg_replaceFieldTypesWithOptions(dtpg, pattern, patternLength, skeleton, skeletonLength, + UDATPG_MATCH_NO_OPTIONS, + dest, destCapacity, pErrorCode); +} + +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) { + if(U_FAILURE(*pErrorCode)) { + return 0; + } + if((pattern==NULL && patternLength!=0) || (skeleton==NULL && skeletonLength!=0)) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + UnicodeString patternString((UBool)(patternLength<0), pattern, patternLength); + UnicodeString skeletonString((UBool)(skeletonLength<0), skeleton, skeletonLength); + UnicodeString result=((DateTimePatternGenerator *)dtpg)->replaceFieldTypes(patternString, skeletonString, options, *pErrorCode); + return result.extract(dest, destCapacity, *pErrorCode); +} + +U_CAPI UEnumeration * U_EXPORT2 +udatpg_openSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode) { + return uenum_openFromStringEnumeration( + ((DateTimePatternGenerator *)dtpg)->getSkeletons(*pErrorCode), + pErrorCode); +} + +U_CAPI UEnumeration * U_EXPORT2 +udatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode) { + return uenum_openFromStringEnumeration( + ((DateTimePatternGenerator *)dtpg)->getBaseSkeletons(*pErrorCode), + pErrorCode); +} + +U_CAPI const UChar * U_EXPORT2 +udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg, + const UChar *skeleton, int32_t skeletonLength, + int32_t *pLength) { + UnicodeString skeletonString((UBool)(skeletonLength<0), skeleton, skeletonLength); + const UnicodeString &result=((const DateTimePatternGenerator *)dtpg)->getPatternForSkeleton(skeletonString); + if(pLength!=NULL) { + *pLength=result.length(); + } + return result.getBuffer(); +} + +U_CAPI UDateFormatHourCycle U_EXPORT2 +udatpg_getDefaultHourCycle(const UDateTimePatternGenerator *dtpg, UErrorCode* pErrorCode) { + return ((const DateTimePatternGenerator *)dtpg)->getDefaultHourCycle(*pErrorCode); +} + +#endif |