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
00091 static DateTimePatternGenerator* U_EXPORT2 internalMakeInstance(const Locale& uLocale, UErrorCode& status);
00092
00093 #endif
00094
00101 static DateTimePatternGenerator* U_EXPORT2 createEmptyInstance(UErrorCode& status);
00102
00107 virtual ~DateTimePatternGenerator();
00108
00114 DateTimePatternGenerator* clone() const;
00115
00123 bool operator==(const DateTimePatternGenerator& other) const;
00124
00132 bool operator!=(const DateTimePatternGenerator& other) const;
00133
00144 static UnicodeString staticGetSkeleton(const UnicodeString& pattern, UErrorCode& status);
00145
00158 UnicodeString getSkeleton(const UnicodeString& pattern, UErrorCode& status);
00159
00160
00161
00162
00163
00164
00178 static UnicodeString staticGetBaseSkeleton(const UnicodeString& pattern, UErrorCode& status);
00179
00195 UnicodeString getBaseSkeleton(const UnicodeString& pattern, UErrorCode& status);
00196
00197
00198
00199
00200
00201
00227 UDateTimePatternConflict addPattern(const UnicodeString& pattern,
00228 UBool override,
00229 UnicodeString& conflictingPattern,
00230 UErrorCode& status);
00231
00250 void setAppendItemFormat(UDateTimePatternField field, const UnicodeString& value);
00251
00260 const UnicodeString& getAppendItemFormat(UDateTimePatternField field) const;
00261
00273 void setAppendItemName(UDateTimePatternField field, const UnicodeString& value);
00274
00285 const UnicodeString& getAppendItemName(UDateTimePatternField field) const;
00286
00296 UnicodeString getFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width) const;
00297
00324 void setDateTimeFormat(const UnicodeString& dateTimeFormat);
00325
00337 const UnicodeString& getDateTimeFormat() const;
00338
00339 #if !UCONFIG_NO_FORMATTING
00340 #ifndef U_HIDE_DRAFT_API
00341
00363 void setDateTimeFormat(UDateFormatStyle style, const UnicodeString& dateTimeFormat,
00364 UErrorCode& status);
00365
00383 const UnicodeString& getDateTimeFormat(UDateFormatStyle style,
00384 UErrorCode& status) const;
00385 #endif
00386 #endif
00387
00406 UnicodeString getBestPattern(const UnicodeString& skeleton, UErrorCode& status);
00407
00408
00428 UnicodeString getBestPattern(const UnicodeString& skeleton,
00429 UDateTimePatternMatchOptions options,
00430 UErrorCode& status);
00431
00432
00454 UnicodeString replaceFieldTypes(const UnicodeString& pattern,
00455 const UnicodeString& skeleton,
00456 UErrorCode& status);
00457
00480 UnicodeString replaceFieldTypes(const UnicodeString& pattern,
00481 const UnicodeString& skeleton,
00482 UDateTimePatternMatchOptions options,
00483 UErrorCode& status);
00484
00496 StringEnumeration* getSkeletons(UErrorCode& status) const;
00497
00504 const UnicodeString& getPatternForSkeleton(const UnicodeString& skeleton) const;
00505
00515 StringEnumeration* getBaseSkeletons(UErrorCode& status) const;
00516
00517 #ifndef U_HIDE_INTERNAL_API
00518
00530 StringEnumeration* getRedundants(UErrorCode& status);
00531 #endif
00532
00544 void setDecimal(const UnicodeString& decimal);
00545
00551 const UnicodeString& getDecimal() const;
00552
00553 #if !UCONFIG_NO_FORMATTING
00554
00567 UDateFormatHourCycle getDefaultHourCycle(UErrorCode& status) const;
00568
00569 #endif
00570
00576 virtual UClassID getDynamicClassID() const override;
00577
00583 static UClassID U_EXPORT2 getStaticClassID(void);
00584
00585 private:
00589 DateTimePatternGenerator(UErrorCode & status);
00590
00594 DateTimePatternGenerator(const Locale& locale, UErrorCode & status, UBool skipStdPatterns = false);
00595
00600 DateTimePatternGenerator(const DateTimePatternGenerator& other);
00601
00606 DateTimePatternGenerator& operator=(const DateTimePatternGenerator& other);
00607
00608 static const int32_t UDATPG_WIDTH_COUNT = UDATPG_NARROW + 1;
00609
00610 Locale pLocale;
00611 FormatParser *fp;
00612 DateTimeMatcher* dtMatcher;
00613 DistanceInfo *distanceInfo;
00614 PatternMap *patternMap;
00615 UnicodeString appendItemFormats[UDATPG_FIELD_COUNT];
00616 UnicodeString fieldDisplayNames[UDATPG_FIELD_COUNT][UDATPG_WIDTH_COUNT];
00617 UnicodeString dateTimeFormat[4];
00618 UnicodeString decimal;
00619 DateTimeMatcher *skipMatcher;
00620 Hashtable *fAvailableFormatKeyHash;
00621 UnicodeString emptyString;
00622 char16_t fDefaultHourFormatChar;
00623
00624 int32_t fAllowedHourFormats[7];
00625
00626
00627
00628
00629 UErrorCode internalErrorCode;
00630
00631
00632 enum {
00633 kDTPGNoFlags = 0,
00634 kDTPGFixFractionalSeconds = 1,
00635 kDTPGSkeletonUsesCapJ = 2
00636
00637 };
00638
00639 void initData(const Locale &locale, UErrorCode &status, UBool skipStdPatterns = false);
00640 void addCanonicalItems(UErrorCode &status);
00641 void addICUPatterns(const Locale& locale, UErrorCode& status);
00642 void hackTimes(const UnicodeString& hackPattern, UErrorCode& status);
00643 void getCalendarTypeToUse(const Locale& locale, CharString& destination, UErrorCode& err);
00644 void consumeShortTimePattern(const UnicodeString& shortTimePattern, UErrorCode& status);
00645 void addCLDRData(const Locale& locale, UErrorCode& status);
00646 UDateTimePatternConflict addPatternWithSkeleton(const UnicodeString& pattern, const UnicodeString * skeletonToUse, UBool override, UnicodeString& conflictingPattern, UErrorCode& status);
00647 void initHashtable(UErrorCode& status);
00648 void setDateTimeFromCalendar(const Locale& locale, UErrorCode& status);
00649 void setDecimalSymbols(const Locale& locale, UErrorCode& status);
00650 UDateTimePatternField getAppendFormatNumber(const char* field) const;
00651
00652 UDateTimePatternField getFieldAndWidthIndices(const char* key, UDateTimePGDisplayWidth* widthP) const;
00653 void setFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width, const UnicodeString& value);
00654 UnicodeString& getMutableFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width);
00655 void getAppendName(UDateTimePatternField field, UnicodeString& value);
00656 UnicodeString mapSkeletonMetacharacters(const UnicodeString& patternForm, int32_t* flags, UErrorCode& status);
00657 const UnicodeString* getBestRaw(DateTimeMatcher& source, int32_t includeMask, DistanceInfo* missingFields, UErrorCode& status, const PtnSkeleton** specifiedSkeletonPtr = 0);
00658 UnicodeString adjustFieldTypes(const UnicodeString& pattern, const PtnSkeleton* specifiedSkeleton, int32_t flags, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS);
00659 UnicodeString getBestAppending(int32_t missingFields, int32_t flags, UErrorCode& status, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS);
00660 int32_t getTopBitNumber(int32_t foundMask) const;
00661 void setAvailableFormat(const UnicodeString &key, UErrorCode& status);
00662 UBool isAvailableFormatSet(const UnicodeString &key) const;
00663 void copyHashtable(Hashtable *other, UErrorCode &status);
00664 UBool isCanonicalItem(const UnicodeString& item) const;
00665 static void U_CALLCONV loadAllowedHourFormatsData(UErrorCode &status);
00666 void getAllowedHourFormats(const Locale &locale, UErrorCode &status);
00667
00668 struct AppendItemFormatsSink;
00669 struct AppendItemNamesSink;
00670 struct AvailableFormatsSink;
00671 } ;
00672
00673 U_NAMESPACE_END
00674
00675 #endif
00676
00677 #endif