00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __DTPTNGEN_H__
00013 #define __DTPTNGEN_H__
00014
00015 #include "unicode/datefmt.h"
00016 #include "unicode/locid.h"
00017 #include "unicode/udat.h"
00018 #include "unicode/udatpg.h"
00019
00020 U_NAMESPACE_BEGIN
00021
00028 class Hashtable;
00029 class FormatParser;
00030 class DateTimeMatcher;
00031 class DistanceInfo;
00032 class PatternMap;
00033 class PtnSkeleton;
00034 class SharedDateTimePatternGenerator;
00035
00050 class U_I18N_API DateTimePatternGenerator : public UObject {
00051 public:
00058 static DateTimePatternGenerator* U_EXPORT2 createInstance(UErrorCode& status);
00059
00067 static DateTimePatternGenerator* U_EXPORT2 createInstance(const Locale& uLocale, UErrorCode& status);
00068
00069 #ifndef U_HIDE_INTERNAL_API
00070
00076 static DateTimePatternGenerator* U_EXPORT2 internalMakeInstance(const Locale& uLocale, UErrorCode& status);
00077
00078 #endif
00079
00086 static DateTimePatternGenerator* U_EXPORT2 createEmptyInstance(UErrorCode& status);
00087
00092 virtual ~DateTimePatternGenerator();
00093
00099 DateTimePatternGenerator* clone() const;
00100
00108 UBool operator==(const DateTimePatternGenerator& other) const;
00109
00117 UBool operator!=(const DateTimePatternGenerator& other) const;
00118
00119 #ifndef U_HIDE_DRAFT_API
00120
00130 static UnicodeString staticGetSkeleton(const UnicodeString& pattern, UErrorCode& status);
00131 #endif
00132
00145 UnicodeString getSkeleton(const UnicodeString& pattern, UErrorCode& status);
00146
00147
00148
00149
00150
00151
00152 #ifndef U_HIDE_DRAFT_API
00153
00166 static UnicodeString staticGetBaseSkeleton(const UnicodeString& pattern, UErrorCode& status);
00167 #endif
00168
00184 UnicodeString getBaseSkeleton(const UnicodeString& pattern, UErrorCode& status);
00185
00186
00187
00188
00189
00190
00216 UDateTimePatternConflict addPattern(const UnicodeString& pattern,
00217 UBool override,
00218 UnicodeString& conflictingPattern,
00219 UErrorCode& status);
00220
00239 void setAppendItemFormat(UDateTimePatternField field, const UnicodeString& value);
00240
00249 const UnicodeString& getAppendItemFormat(UDateTimePatternField field) const;
00250
00262 void setAppendItemName(UDateTimePatternField field, const UnicodeString& value);
00263
00272 const UnicodeString& getAppendItemName(UDateTimePatternField field) const;
00273
00295 void setDateTimeFormat(const UnicodeString& dateTimeFormat);
00296
00302 const UnicodeString& getDateTimeFormat() const;
00303
00322 UnicodeString getBestPattern(const UnicodeString& skeleton, UErrorCode& status);
00323
00324
00344 UnicodeString getBestPattern(const UnicodeString& skeleton,
00345 UDateTimePatternMatchOptions options,
00346 UErrorCode& status);
00347
00348
00370 UnicodeString replaceFieldTypes(const UnicodeString& pattern,
00371 const UnicodeString& skeleton,
00372 UErrorCode& status);
00373
00396 UnicodeString replaceFieldTypes(const UnicodeString& pattern,
00397 const UnicodeString& skeleton,
00398 UDateTimePatternMatchOptions options,
00399 UErrorCode& status);
00400
00412 StringEnumeration* getSkeletons(UErrorCode& status) const;
00413
00420 const UnicodeString& getPatternForSkeleton(const UnicodeString& skeleton) const;
00421
00431 StringEnumeration* getBaseSkeletons(UErrorCode& status) const;
00432
00433 #ifndef U_HIDE_INTERNAL_API
00434
00446 StringEnumeration* getRedundants(UErrorCode& status);
00447 #endif
00448
00460 void setDecimal(const UnicodeString& decimal);
00461
00467 const UnicodeString& getDecimal() const;
00468
00474 virtual UClassID getDynamicClassID() const;
00475
00481 static UClassID U_EXPORT2 getStaticClassID(void);
00482
00483 private:
00488 DateTimePatternGenerator(UErrorCode & status);
00489
00494 DateTimePatternGenerator(const Locale& locale, UErrorCode & status);
00495
00501 DateTimePatternGenerator(const DateTimePatternGenerator& other);
00502
00508 DateTimePatternGenerator& operator=(const DateTimePatternGenerator& other);
00509
00510 Locale pLocale;
00511 FormatParser *fp;
00512 DateTimeMatcher* dtMatcher;
00513 DistanceInfo *distanceInfo;
00514 PatternMap *patternMap;
00515 UnicodeString appendItemFormats[UDATPG_FIELD_COUNT];
00516 UnicodeString appendItemNames[UDATPG_FIELD_COUNT];
00517 UnicodeString dateTimeFormat;
00518 UnicodeString decimal;
00519 DateTimeMatcher *skipMatcher;
00520 Hashtable *fAvailableFormatKeyHash;
00521 UnicodeString hackPattern;
00522 UnicodeString emptyString;
00523 UChar fDefaultHourFormatChar;
00524
00525 int32_t fAllowedHourFormats[7];
00526
00527
00528 enum {
00529 kDTPGNoFlags = 0,
00530 kDTPGFixFractionalSeconds = 1,
00531 kDTPGSkeletonUsesCapJ = 2,
00532 kDTPGSkeletonUsesLowB = 3,
00533 kDTPGSkeletonUsesCapB = 4
00534 };
00535
00536 void initData(const Locale &locale, UErrorCode &status);
00537 void addCanonicalItems();
00538 void addICUPatterns(const Locale& locale, UErrorCode& status);
00539 void hackTimes(const UnicodeString& hackPattern, UErrorCode& status);
00540 void addCLDRData(const Locale& locale, UErrorCode& status);
00541 UDateTimePatternConflict addPatternWithSkeleton(const UnicodeString& pattern, const UnicodeString * skeletonToUse, UBool override, UnicodeString& conflictingPattern, UErrorCode& status);
00542 void initHashtable(UErrorCode& status);
00543 void setDateTimeFromCalendar(const Locale& locale, UErrorCode& status);
00544 void setDecimalSymbols(const Locale& locale, UErrorCode& status);
00545 UDateTimePatternField getAppendFormatNumber(const char* field) const;
00546 UDateTimePatternField getAppendNameNumber(const char* field) const;
00547 void getAppendName(UDateTimePatternField field, UnicodeString& value);
00548 int32_t getCanonicalIndex(const UnicodeString& field);
00549 const UnicodeString* getBestRaw(DateTimeMatcher& source, int32_t includeMask, DistanceInfo* missingFields, const PtnSkeleton** specifiedSkeletonPtr = 0);
00550 UnicodeString adjustFieldTypes(const UnicodeString& pattern, const PtnSkeleton* specifiedSkeleton, int32_t flags, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS);
00551 UnicodeString getBestAppending(int32_t missingFields, int32_t flags, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS);
00552 int32_t getTopBitNumber(int32_t foundMask);
00553 void setAvailableFormat(const UnicodeString &key, UErrorCode& status);
00554 UBool isAvailableFormatSet(const UnicodeString &key) const;
00555 void copyHashtable(Hashtable *other, UErrorCode &status);
00556 UBool isCanonicalItem(const UnicodeString& item) const;
00557 static void loadAllowedHourFormatsData(UErrorCode &status);
00558 void getAllowedHourFormats(const Locale &locale, UErrorCode &status);
00559 } ;
00560
00561 U_NAMESPACE_END
00562
00563 #endif