|
ICU 73.2
73.2
|
00001 // © 2016 and later: Unicode, Inc. and others. 00002 // License & terms of use: http://www.unicode.org/copyright.html 00003 /* 00004 ******************************************************************************* 00005 * Copyright (C) 2007-2016, International Business Machines Corporation and 00006 * others. All Rights Reserved. 00007 ******************************************************************************* 00008 * 00009 * File DTPTNGEN.H 00010 * 00011 ******************************************************************************* 00012 */ 00013 00014 #ifndef __DTPTNGEN_H__ 00015 #define __DTPTNGEN_H__ 00016 00017 #include "unicode/utypes.h" 00018 00019 #if U_SHOW_CPLUSPLUS_API 00020 00021 #include "unicode/datefmt.h" 00022 #include "unicode/locid.h" 00023 #include "unicode/udat.h" 00024 #include "unicode/udatpg.h" 00025 #include "unicode/unistr.h" 00026 00027 U_NAMESPACE_BEGIN 00028 00035 class CharString; 00036 class Hashtable; 00037 class FormatParser; 00038 class DateTimeMatcher; 00039 class DistanceInfo; 00040 class PatternMap; 00041 class PtnSkeleton; 00042 class SharedDateTimePatternGenerator; 00043 00058 class U_I18N_API DateTimePatternGenerator : public UObject { 00059 public: 00066 static DateTimePatternGenerator* U_EXPORT2 createInstance(UErrorCode& status); 00067 00075 static DateTimePatternGenerator* U_EXPORT2 createInstance(const Locale& uLocale, UErrorCode& status); 00076 00077 #ifndef U_HIDE_INTERNAL_API 00078 00084 static DateTimePatternGenerator* U_EXPORT2 createInstanceNoStdPat(const Locale& uLocale, UErrorCode& status); 00085 00086 #endif /* U_HIDE_INTERNAL_API */ 00087 00094 static DateTimePatternGenerator* U_EXPORT2 createEmptyInstance(UErrorCode& status); 00095 00100 virtual ~DateTimePatternGenerator(); 00101 00107 DateTimePatternGenerator* clone() const; 00108 00116 bool operator==(const DateTimePatternGenerator& other) const; 00117 00125 bool operator!=(const DateTimePatternGenerator& other) const; 00126 00137 static UnicodeString staticGetSkeleton(const UnicodeString& pattern, UErrorCode& status); 00138 00151 UnicodeString getSkeleton(const UnicodeString& pattern, UErrorCode& status); /* { 00152 The function is commented out because it is a stable API calling a draft API. 00153 After staticGetSkeleton becomes stable, staticGetSkeleton can be used and 00154 these comments and the definition of getSkeleton in dtptngen.cpp should be removed. 00155 return staticGetSkeleton(pattern, status); 00156 }*/ 00157 00171 static UnicodeString staticGetBaseSkeleton(const UnicodeString& pattern, UErrorCode& status); 00172 00188 UnicodeString getBaseSkeleton(const UnicodeString& pattern, UErrorCode& status); /* { 00189 The function is commented out because it is a stable API calling a draft API. 00190 After staticGetBaseSkeleton becomes stable, staticGetBaseSkeleton can be used and 00191 these comments and the definition of getBaseSkeleton in dtptngen.cpp should be removed. 00192 return staticGetBaseSkeleton(pattern, status); 00193 }*/ 00194 00220 UDateTimePatternConflict addPattern(const UnicodeString& pattern, 00221 UBool override, 00222 UnicodeString& conflictingPattern, 00223 UErrorCode& status); 00224 00243 void setAppendItemFormat(UDateTimePatternField field, const UnicodeString& value); 00244 00253 const UnicodeString& getAppendItemFormat(UDateTimePatternField field) const; 00254 00266 void setAppendItemName(UDateTimePatternField field, const UnicodeString& value); 00267 00278 const UnicodeString& getAppendItemName(UDateTimePatternField field) const; 00279 00289 UnicodeString getFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width) const; 00290 00317 void setDateTimeFormat(const UnicodeString& dateTimeFormat); 00318 00330 const UnicodeString& getDateTimeFormat() const; 00331 00332 #if !UCONFIG_NO_FORMATTING 00333 00355 void setDateTimeFormat(UDateFormatStyle style, const UnicodeString& dateTimeFormat, 00356 UErrorCode& status); 00357 00375 const UnicodeString& getDateTimeFormat(UDateFormatStyle style, 00376 UErrorCode& status) const; 00377 #endif /* #if !UCONFIG_NO_FORMATTING */ 00378 00397 UnicodeString getBestPattern(const UnicodeString& skeleton, UErrorCode& status); 00398 00399 00419 UnicodeString getBestPattern(const UnicodeString& skeleton, 00420 UDateTimePatternMatchOptions options, 00421 UErrorCode& status); 00422 00423 00445 UnicodeString replaceFieldTypes(const UnicodeString& pattern, 00446 const UnicodeString& skeleton, 00447 UErrorCode& status); 00448 00471 UnicodeString replaceFieldTypes(const UnicodeString& pattern, 00472 const UnicodeString& skeleton, 00473 UDateTimePatternMatchOptions options, 00474 UErrorCode& status); 00475 00487 StringEnumeration* getSkeletons(UErrorCode& status) const; 00488 00495 const UnicodeString& getPatternForSkeleton(const UnicodeString& skeleton) const; 00496 00506 StringEnumeration* getBaseSkeletons(UErrorCode& status) const; 00507 00508 #ifndef U_HIDE_INTERNAL_API 00509 00521 StringEnumeration* getRedundants(UErrorCode& status); 00522 #endif /* U_HIDE_INTERNAL_API */ 00523 00535 void setDecimal(const UnicodeString& decimal); 00536 00542 const UnicodeString& getDecimal() const; 00543 00544 #if !UCONFIG_NO_FORMATTING 00545 00558 UDateFormatHourCycle getDefaultHourCycle(UErrorCode& status) const; 00559 00560 #endif /* #if !UCONFIG_NO_FORMATTING */ 00561 00567 virtual UClassID getDynamicClassID() const override; 00568 00574 static UClassID U_EXPORT2 getStaticClassID(void); 00575 00576 private: 00580 DateTimePatternGenerator(UErrorCode & status); 00581 00585 DateTimePatternGenerator(const Locale& locale, UErrorCode & status, UBool skipStdPatterns = false); 00586 00591 DateTimePatternGenerator(const DateTimePatternGenerator& other); 00592 00597 DateTimePatternGenerator& operator=(const DateTimePatternGenerator& other); 00598 00599 static const int32_t UDATPG_WIDTH_COUNT = UDATPG_NARROW + 1; 00600 00601 Locale pLocale; // pattern locale 00602 FormatParser *fp; 00603 DateTimeMatcher* dtMatcher; 00604 DistanceInfo *distanceInfo; 00605 PatternMap *patternMap; 00606 UnicodeString appendItemFormats[UDATPG_FIELD_COUNT]; 00607 UnicodeString fieldDisplayNames[UDATPG_FIELD_COUNT][UDATPG_WIDTH_COUNT]; 00608 UnicodeString dateTimeFormat[4]; 00609 UnicodeString decimal; 00610 DateTimeMatcher *skipMatcher; 00611 Hashtable *fAvailableFormatKeyHash; 00612 UnicodeString emptyString; 00613 char16_t fDefaultHourFormatChar; 00614 00615 int32_t fAllowedHourFormats[7]; // Actually an array of AllowedHourFormat enum type, ending with UNKNOWN. 00616 00617 // Internal error code used for recording/reporting errors that occur during methods that do not 00618 // have a UErrorCode parameter. For example: the Copy Constructor, or the ::clone() method. 00619 // When this is set to an error the object is in an invalid state. 00620 UErrorCode internalErrorCode; 00621 00622 /* internal flags masks for adjustFieldTypes etc. */ 00623 enum { 00624 kDTPGNoFlags = 0, 00625 kDTPGFixFractionalSeconds = 1, 00626 kDTPGSkeletonUsesCapJ = 2 00627 // with #13183, no longer need flags for b, B 00628 }; 00629 00630 void initData(const Locale &locale, UErrorCode &status, UBool skipStdPatterns = false); 00631 void addCanonicalItems(UErrorCode &status); 00632 void addICUPatterns(const Locale& locale, UErrorCode& status); 00633 void hackTimes(const UnicodeString& hackPattern, UErrorCode& status); 00634 void getCalendarTypeToUse(const Locale& locale, CharString& destination, UErrorCode& err); 00635 void consumeShortTimePattern(const UnicodeString& shortTimePattern, UErrorCode& status); 00636 void addCLDRData(const Locale& locale, UErrorCode& status); 00637 UDateTimePatternConflict addPatternWithSkeleton(const UnicodeString& pattern, const UnicodeString * skeletonToUse, UBool override, UnicodeString& conflictingPattern, UErrorCode& status); 00638 void initHashtable(UErrorCode& status); 00639 void setDateTimeFromCalendar(const Locale& locale, UErrorCode& status); 00640 void setDecimalSymbols(const Locale& locale, UErrorCode& status); 00641 UDateTimePatternField getAppendFormatNumber(const char* field) const; 00642 // Note for the next 3: UDateTimePGDisplayWidth is now stable ICU 61 00643 UDateTimePatternField getFieldAndWidthIndices(const char* key, UDateTimePGDisplayWidth* widthP) const; 00644 void setFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width, const UnicodeString& value); 00645 UnicodeString& getMutableFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width); 00646 void getAppendName(UDateTimePatternField field, UnicodeString& value); 00647 UnicodeString mapSkeletonMetacharacters(const UnicodeString& patternForm, int32_t* flags, UErrorCode& status); 00648 const UnicodeString* getBestRaw(DateTimeMatcher& source, int32_t includeMask, DistanceInfo* missingFields, UErrorCode& status, const PtnSkeleton** specifiedSkeletonPtr = 0); 00649 UnicodeString adjustFieldTypes(const UnicodeString& pattern, const PtnSkeleton* specifiedSkeleton, int32_t flags, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS); 00650 UnicodeString getBestAppending(int32_t missingFields, int32_t flags, UErrorCode& status, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS); 00651 int32_t getTopBitNumber(int32_t foundMask) const; 00652 void setAvailableFormat(const UnicodeString &key, UErrorCode& status); 00653 UBool isAvailableFormatSet(const UnicodeString &key) const; 00654 void copyHashtable(Hashtable *other, UErrorCode &status); 00655 UBool isCanonicalItem(const UnicodeString& item) const; 00656 static void U_CALLCONV loadAllowedHourFormatsData(UErrorCode &status); 00657 void getAllowedHourFormats(const Locale &locale, UErrorCode &status); 00658 00659 struct U_HIDDEN AppendItemFormatsSink; 00660 struct U_HIDDEN AppendItemNamesSink; 00661 struct U_HIDDEN AvailableFormatsSink; 00662 } ;// end class DateTimePatternGenerator 00663 00664 U_NAMESPACE_END 00665 00666 #endif /* U_SHOW_CPLUSPLUS_API */ 00667 00668 #endif
1.7.6.1