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
00048 class U_I18N_API DateTimePatternGenerator : public UObject {
00049 public:
00056 static DateTimePatternGenerator* U_EXPORT2 createInstance(UErrorCode& status);
00057
00065 static DateTimePatternGenerator* U_EXPORT2 createInstance(const Locale& uLocale, UErrorCode& status);
00066
00073 static DateTimePatternGenerator* U_EXPORT2 createEmptyInstance(UErrorCode& status);
00074
00079 virtual ~DateTimePatternGenerator();
00080
00086 DateTimePatternGenerator* clone() const;
00087
00095 UBool operator==(const DateTimePatternGenerator& other) const;
00096
00104 UBool operator!=(const DateTimePatternGenerator& other) const;
00105
00116 UnicodeString getSkeleton(const UnicodeString& pattern, UErrorCode& status);
00117
00131 UnicodeString getBaseSkeleton(const UnicodeString& pattern, UErrorCode& status);
00132
00153 UDateTimePatternConflict addPattern(const UnicodeString& pattern,
00154 UBool override,
00155 UnicodeString& conflictingPattern,
00156 UErrorCode& status);
00157
00176 void setAppendItemFormat(UDateTimePatternField field, const UnicodeString& value);
00177
00186 const UnicodeString& getAppendItemFormat(UDateTimePatternField field) const;
00187
00199 void setAppendItemName(UDateTimePatternField field, const UnicodeString& value);
00200
00209 const UnicodeString& getAppendItemName(UDateTimePatternField field) const;
00210
00230 void setDateTimeFormat(const UnicodeString& dateTimeFormat);
00231
00237 const UnicodeString& getDateTimeFormat() const;
00238
00252 UnicodeString getBestPattern(const UnicodeString& skeleton, UErrorCode& status);
00253
00254
00271 UnicodeString replaceFieldTypes(const UnicodeString& pattern,
00272 const UnicodeString& skeleton,
00273 UErrorCode& status);
00274
00286 StringEnumeration* getSkeletons(UErrorCode& status) const;
00287
00294 const UnicodeString& getPatternForSkeleton(const UnicodeString& skeleton) const;
00295
00305 StringEnumeration* getBaseSkeletons(UErrorCode& status) const;
00306
00319 StringEnumeration* getRedundants(UErrorCode& status);
00320
00332 void setDecimal(const UnicodeString& decimal);
00333
00339 const UnicodeString& getDecimal() const;
00340
00346 virtual UClassID getDynamicClassID() const;
00347
00353 static UClassID U_EXPORT2 getStaticClassID(void);
00354
00355 private:
00360 DateTimePatternGenerator(UErrorCode & status);
00361
00366 DateTimePatternGenerator(const Locale& locale, UErrorCode & status);
00367
00373 DateTimePatternGenerator(const DateTimePatternGenerator& other);
00374
00380 DateTimePatternGenerator& operator=(const DateTimePatternGenerator& other);
00381
00382 Locale pLocale;
00383 FormatParser *fp;
00384 DateTimeMatcher* dtMatcher;
00385 DistanceInfo *distanceInfo;
00386 PatternMap *patternMap;
00387 UnicodeString appendItemFormats[UDATPG_FIELD_COUNT];
00388 UnicodeString appendItemNames[UDATPG_FIELD_COUNT];
00389 UnicodeString dateTimeFormat;
00390 UnicodeString decimal;
00391 DateTimeMatcher *skipMatcher;
00392 Hashtable *fAvailableFormatKeyHash;
00393 UnicodeString hackPattern;
00394 UnicodeString emptyString;
00395 UBool chineseMonthHack;
00396
00397 void initData(const Locale &locale, UErrorCode &status);
00398 void addCanonicalItems();
00399 void addICUPatterns(const Locale& locale, UErrorCode& status);
00400 void hackTimes(const UnicodeString& hackPattern, UErrorCode& status);
00401 void addCLDRData(const Locale& locale);
00402 void initHashtable(UErrorCode& status);
00403 void setDateTimeFromCalendar(const Locale& locale, UErrorCode& status);
00404 void setDecimalSymbols(const Locale& locale, UErrorCode& status);
00405 UnicodeString getCJKPattern(const UnicodeString& patternForm);
00406 UDateTimePatternField getAppendFormatNumber(const char* field) const;
00407 UDateTimePatternField getAppendNameNumber(const char* field) const;
00408 void getAppendName(UDateTimePatternField field, UnicodeString& value);
00409 int32_t getCanonicalIndex(const UnicodeString& field);
00410 const UnicodeString* getBestRaw(DateTimeMatcher& source, int32_t includeMask, DistanceInfo* missingFields);
00411 UnicodeString adjustFieldTypes(const UnicodeString& pattern, UBool fixFractionalSeconds);
00412 UnicodeString getBestAppending(int32_t missingFields);
00413 int32_t getTopBitNumber(int32_t foundMask);
00414 void setAvailableFormat(const UnicodeString &key, UErrorCode& status);
00415 UBool isAvailableFormatSet(const UnicodeString &key) const;
00416 void copyHashtable(Hashtable *other, UErrorCode &status);
00417 UBool isCanonicalItem(const UnicodeString& item) const;
00418 } ;
00419
00420 U_NAMESPACE_END
00421
00422 #endif