ICU-11779 Introduce static versions of DTPNG getSkeleton and getBaseSkeleton

X-SVN-Rev: 37771
This commit is contained in:
Travis Keep 2015-08-13 22:09:13 +00:00
parent d3bb77fac4
commit 6ed4b6178a
6 changed files with 71 additions and 25 deletions

View File

@ -636,7 +636,8 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
#endif #endif
// fSkeleton is already set by createDateIntervalInstance() // fSkeleton is already set by createDateIntervalInstance()
// or by createInstance(UnicodeString skeleton, .... ) // or by createInstance(UnicodeString skeleton, .... )
fSkeleton = fDtpng->getSkeleton(fullPattern, status); fSkeleton = DateTimePatternGenerator::staticGetSkeleton(
fullPattern, status);
if ( U_FAILURE(status) ) { if ( U_FAILURE(status) ) {
return; return;
} }

View File

@ -1,6 +1,6 @@
/* /*
******************************************************************************* *******************************************************************************
* Copyright (C) 2007-2014, International Business Machines Corporation and * Copyright (C) 2007-2015, International Business Machines Corporation and
* others. All Rights Reserved. * others. All Rights Reserved.
******************************************************************************* *******************************************************************************
* *
@ -441,16 +441,23 @@ DateTimePatternGenerator::initData(const Locale& locale, UErrorCode &status) {
} // DateTimePatternGenerator::initData } // DateTimePatternGenerator::initData
UnicodeString UnicodeString
DateTimePatternGenerator::getSkeleton(const UnicodeString& pattern, UErrorCode& DateTimePatternGenerator::staticGetSkeleton(
/*status*/) { const UnicodeString& pattern, UErrorCode& /*status*/) {
dtMatcher->set(pattern, fp); FormatParser fp;
return dtMatcher->getSkeletonPtr()->getSkeleton(); DateTimeMatcher matcher;
PtnSkeleton localSkeleton;
matcher.set(pattern, &fp, localSkeleton);
return localSkeleton.getSkeleton();
} }
UnicodeString UnicodeString
DateTimePatternGenerator::getBaseSkeleton(const UnicodeString& pattern, UErrorCode& /*status*/) { DateTimePatternGenerator::staticGetBaseSkeleton(
dtMatcher->set(pattern, fp); const UnicodeString& pattern, UErrorCode& /*status*/) {
return dtMatcher->getSkeletonPtr()->getBaseSkeleton(); FormatParser fp;
DateTimeMatcher matcher;
PtnSkeleton localSkeleton;
matcher.set(pattern, &fp, localSkeleton);
return localSkeleton.getBaseSkeleton();
} }
void void
@ -1884,7 +1891,7 @@ FormatParser::getCanonicalIndex(const UnicodeString& s, UBool strict) {
} }
UBool UBool
FormatParser::isQuoteLiteral(const UnicodeString& s) const { FormatParser::isQuoteLiteral(const UnicodeString& s) {
return (UBool)(s.charAt(0)==SINGLE_QUOTE); return (UBool)(s.charAt(0)==SINGLE_QUOTE);
} }

View File

@ -1,6 +1,6 @@
/* /*
******************************************************************************* *******************************************************************************
* Copyright (C) 2007-2014, International Business Machines Corporation and * Copyright (C) 2007-2015, International Business Machines Corporation and
* others. All Rights Reserved. * * others. All Rights Reserved. *
******************************************************************************* *******************************************************************************
* *
@ -145,12 +145,11 @@ public:
FormatParser(); FormatParser();
virtual ~FormatParser(); virtual ~FormatParser();
void set(const UnicodeString& patternString); void set(const UnicodeString& patternString);
UBool isQuoteLiteral(const UnicodeString& s) const;
void getQuoteLiteral(UnicodeString& quote, int32_t *itemIndex); void getQuoteLiteral(UnicodeString& quote, int32_t *itemIndex);
int32_t getCanonicalIndex(const UnicodeString& s) { return getCanonicalIndex(s, TRUE); }
int32_t getCanonicalIndex(const UnicodeString& s, UBool strict);
UBool isPatternSeparator(UnicodeString& field); UBool isPatternSeparator(UnicodeString& field);
void setFilter(UErrorCode &status); static UBool isQuoteLiteral(const UnicodeString& s);
static int32_t getCanonicalIndex(const UnicodeString& s) { return getCanonicalIndex(s, TRUE); }
static int32_t getCanonicalIndex(const UnicodeString& s, UBool strict);
private: private:
typedef enum TokenStatus { typedef enum TokenStatus {

View File

@ -1,7 +1,7 @@
/* /*
******************************************************************************* *******************************************************************************
* *
* Copyright (C) 2009-2012, International Business Machines * Copyright (C) 2009-2015, International Business Machines
* Corporation and others. All Rights Reserved. * Corporation and others. All Rights Reserved.
* *
******************************************************************************* *******************************************************************************
@ -82,7 +82,7 @@ udatpg_getBestPatternWithOptions(UDateTimePatternGenerator *dtpg,
} }
U_CAPI int32_t U_EXPORT2 U_CAPI int32_t U_EXPORT2
udatpg_getSkeleton(UDateTimePatternGenerator *dtpg, udatpg_getSkeleton(UDateTimePatternGenerator * /* dtpg */,
const UChar *pattern, int32_t length, const UChar *pattern, int32_t length,
UChar *skeleton, int32_t capacity, UChar *skeleton, int32_t capacity,
UErrorCode *pErrorCode) { UErrorCode *pErrorCode) {
@ -94,12 +94,13 @@ udatpg_getSkeleton(UDateTimePatternGenerator *dtpg,
return 0; return 0;
} }
UnicodeString patternString((UBool)(length<0), pattern, length); UnicodeString patternString((UBool)(length<0), pattern, length);
UnicodeString result=((DateTimePatternGenerator *)dtpg)->getSkeleton(patternString, *pErrorCode); UnicodeString result=DateTimePatternGenerator::staticGetSkeleton(
patternString, *pErrorCode);
return result.extract(skeleton, capacity, *pErrorCode); return result.extract(skeleton, capacity, *pErrorCode);
} }
U_CAPI int32_t U_EXPORT2 U_CAPI int32_t U_EXPORT2
udatpg_getBaseSkeleton(UDateTimePatternGenerator *dtpg, udatpg_getBaseSkeleton(UDateTimePatternGenerator * /* dtpg */,
const UChar *pattern, int32_t length, const UChar *pattern, int32_t length,
UChar *skeleton, int32_t capacity, UChar *skeleton, int32_t capacity,
UErrorCode *pErrorCode) { UErrorCode *pErrorCode) {
@ -111,7 +112,8 @@ udatpg_getBaseSkeleton(UDateTimePatternGenerator *dtpg,
return 0; return 0;
} }
UnicodeString patternString((UBool)(length<0), pattern, length); UnicodeString patternString((UBool)(length<0), pattern, length);
UnicodeString result=((DateTimePatternGenerator *)dtpg)->getBaseSkeleton(patternString, *pErrorCode); UnicodeString result=DateTimePatternGenerator::staticGetBaseSkeleton(
patternString, *pErrorCode);
return result.extract(skeleton, capacity, *pErrorCode); return result.extract(skeleton, capacity, *pErrorCode);
} }

View File

@ -124,9 +124,25 @@ public:
* @param status Output param set to success/failure code on exit, * @param status Output param set to success/failure code on exit,
* which must not indicate a failure before the function call. * which must not indicate a failure before the function call.
* @return skeleton such as "MMMdd" * @return skeleton such as "MMMdd"
* @draft ICU 56
*/
static UnicodeString staticGetSkeleton(const UnicodeString& pattern, UErrorCode& status);
/**
* Utility to return a unique skeleton from a given pattern. For example,
* both "MMM-dd" and "dd/MMM" produce the skeleton "MMMdd".
* getSkeleton() works exactly like staticGetSkeleton().
* Use staticGetSkeleton() instead of getSkeleton().
*
* @param pattern Input pattern, such as "dd/MMM"
* @param status Output param set to success/failure code on exit,
* which must not indicate a failure before the function call.
* @return skeleton such as "MMMdd"
* @stable ICU 3.8 * @stable ICU 3.8
*/ */
UnicodeString getSkeleton(const UnicodeString& pattern, UErrorCode& status); UnicodeString getSkeleton(const UnicodeString& pattern, UErrorCode& status) {
return staticGetSkeleton(pattern, status);
}
/** /**
* Utility to return a unique base skeleton from a given pattern. This is * Utility to return a unique base skeleton from a given pattern. This is
@ -138,10 +154,29 @@ public:
* @param pattern Input pattern, such as "dd/MMM" * @param pattern Input pattern, such as "dd/MMM"
* @param status Output param set to success/failure code on exit, * @param status Output param set to success/failure code on exit,
* which must not indicate a failure before the function call. * which must not indicate a failure before the function call.
* @return base skeleton, such as "Md" * @return base skeleton, such as "MMMd"
* @draft ICU 56
*/
static UnicodeString staticGetBaseSkeleton(const UnicodeString& pattern, UErrorCode& status);
/**
* Utility to return a unique base skeleton from a given pattern. This is
* the same as the skeleton, except that differences in length are minimized
* so as to only preserve the difference between string and numeric form. So
* for example, both "MMM-dd" and "d/MMM" produce the skeleton "MMMd"
* (notice the single d).
* getBaseSkeleton() works exactly like staticGetBaseSkeleton().
* Use staticGetBaseSkeleton() instead of getBaseSkeleton().
*
* @param pattern Input pattern, such as "dd/MMM"
* @param status Output param set to success/failure code on exit,
* which must not indicate a failure before the function call.
* @return base skeleton, such as "MMMd"
* @stable ICU 3.8 * @stable ICU 3.8
*/ */
UnicodeString getBaseSkeleton(const UnicodeString& pattern, UErrorCode& status); UnicodeString getBaseSkeleton(const UnicodeString& pattern, UErrorCode& status) {
return staticGetBaseSkeleton(pattern, status);
}
/** /**
* Adds a pattern to the generator. If the pattern has the same skeleton as * Adds a pattern to the generator. If the pattern has the same skeleton as

View File

@ -260,6 +260,7 @@ udatpg_getBestPatternWithOptions(UDateTimePatternGenerator *dtpg,
* but this function cannot be used concurrently on a single generator object. * but this function cannot be used concurrently on a single generator object.
* *
* @param dtpg a pointer to UDateTimePatternGenerator. * @param dtpg a pointer to UDateTimePatternGenerator.
* This parameter is no longer used. Callers may pass NULL.
* @param pattern input pattern, such as "dd/MMM". * @param pattern input pattern, such as "dd/MMM".
* @param length the length of pattern. * @param length the length of pattern.
* @param skeleton such as "MMMdd" * @param skeleton such as "MMMdd"
@ -270,7 +271,7 @@ udatpg_getBestPatternWithOptions(UDateTimePatternGenerator *dtpg,
* @stable ICU 3.8 * @stable ICU 3.8
*/ */
U_STABLE int32_t U_EXPORT2 U_STABLE int32_t U_EXPORT2
udatpg_getSkeleton(UDateTimePatternGenerator *dtpg, udatpg_getSkeleton(UDateTimePatternGenerator *unusedDtpg,
const UChar *pattern, int32_t length, const UChar *pattern, int32_t length,
UChar *skeleton, int32_t capacity, UChar *skeleton, int32_t capacity,
UErrorCode *pErrorCode); UErrorCode *pErrorCode);
@ -289,6 +290,7 @@ udatpg_getSkeleton(UDateTimePatternGenerator *dtpg,
* but this function cannot be used concurrently on a single generator object. * but this function cannot be used concurrently on a single generator object.
* *
* @param dtpg a pointer to UDateTimePatternGenerator. * @param dtpg a pointer to UDateTimePatternGenerator.
* This parameter is no longer used. Callers may pass NULL.
* @param pattern input pattern, such as "dd/MMM". * @param pattern input pattern, such as "dd/MMM".
* @param length the length of pattern. * @param length the length of pattern.
* @param baseSkeleton such as "Md" * @param baseSkeleton such as "Md"
@ -299,7 +301,7 @@ udatpg_getSkeleton(UDateTimePatternGenerator *dtpg,
* @stable ICU 3.8 * @stable ICU 3.8
*/ */
U_STABLE int32_t U_EXPORT2 U_STABLE int32_t U_EXPORT2
udatpg_getBaseSkeleton(UDateTimePatternGenerator *dtpg, udatpg_getBaseSkeleton(UDateTimePatternGenerator *unusedDtpg,
const UChar *pattern, int32_t length, const UChar *pattern, int32_t length,
UChar *baseSkeleton, int32_t capacity, UChar *baseSkeleton, int32_t capacity,
UErrorCode *pErrorCode); UErrorCode *pErrorCode);