ICU 73.2  73.2
dtptngen.h
Go to the documentation of this file.
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