00001
00002
00003
00004
00005
00006
00007
00008
00009
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
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
00153
00154
00155
00156
00157
00171 static UnicodeString staticGetBaseSkeleton(const UnicodeString& pattern, UErrorCode& status);
00172
00188 UnicodeString getBaseSkeleton(const UnicodeString& pattern, UErrorCode& status);
00189
00190
00191
00192
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
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
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
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;
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];
00616
00617
00618
00619
00620 UErrorCode internalErrorCode;
00621
00622
00623 enum {
00624 kDTPGNoFlags = 0,
00625 kDTPGFixFractionalSeconds = 1,
00626 kDTPGSkeletonUsesCapJ = 2
00627
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
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 } ;
00663
00664 U_NAMESPACE_END
00665
00666 #endif
00667
00668 #endif