00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __DTPTNGEN_H__
00013 #define __DTPTNGEN_H__
00014
00015 #include "unicode/utypes.h"
00016 #include "unicode/format.h"
00017 #include "unicode/datefmt.h"
00018 #include "unicode/calendar.h"
00019 #include "unicode/ustring.h"
00020 #include "unicode/locid.h"
00021 #include "unicode/udat.h"
00022 #include "unicode/udatpg.h"
00023 #include "unicode/uniset.h"
00024
00025 U_NAMESPACE_BEGIN
00026
00027 class DateFormatSymbols;
00028 class DateFormat;
00029 class Hashtable;
00030 class FormatParser;
00031 class DateTimeMatcher;
00032 class DistanceInfo;
00033 class PatternMap;
00034
00049 class U_I18N_API DateTimePatternGenerator : public UObject {
00050 public:
00057 static DateTimePatternGenerator* U_EXPORT2 createInstance(UErrorCode& status);
00058
00066 static DateTimePatternGenerator* U_EXPORT2 createInstance(const Locale& uLocale, UErrorCode& status);
00067
00074 static DateTimePatternGenerator* U_EXPORT2 createEmptyInstance(UErrorCode& status);
00075
00079 virtual ~DateTimePatternGenerator();
00080
00086 DateTimePatternGenerator* clone() const;
00087
00095 UBool operator==(const DateTimePatternGenerator& other) const;
00096
00107 UnicodeString getSkeleton(const UnicodeString& pattern, UErrorCode& status);
00108
00122 UnicodeString getBaseSkeleton(const UnicodeString& pattern, UErrorCode& status);
00123
00144 UDateTimePatternConflict addPattern(const UnicodeString& pattern,
00145 UBool override,
00146 UnicodeString& conflictingPattern,
00147 UErrorCode& status);
00148
00167 void setAppendItemFormat(UDateTimePatternField field, const UnicodeString& value);
00168
00177 const UnicodeString& getAppendItemFormat(UDateTimePatternField field) const;
00178
00190 void setAppendItemName(UDateTimePatternField field, const UnicodeString& value);
00191
00200 const UnicodeString& getAppendItemName(UDateTimePatternField field) const;
00201
00221 void setDateTimeFormat(const UnicodeString& dateTimeFormat);
00222
00228 const UnicodeString& getDateTimeFormat() const;
00229
00243 UnicodeString getBestPattern(const UnicodeString& skeleton, UErrorCode& status);
00244
00245
00262 UnicodeString replaceFieldTypes(const UnicodeString& pattern,
00263 const UnicodeString& skeleton,
00264 UErrorCode& status);
00265
00277 StringEnumeration* getSkeletons(UErrorCode& status) const;
00278
00285 const UnicodeString& getPatternForSkeleton(const UnicodeString& skeleton) const;
00286
00296 StringEnumeration* getBaseSkeletons(UErrorCode& status) const;
00297
00310 StringEnumeration* getRedundants(UErrorCode& status);
00311
00323 void setDecimal(const UnicodeString& decimal);
00324
00330 const UnicodeString& getDecimal() const;
00331
00337 virtual UClassID getDynamicClassID() const;
00338
00344 static UClassID U_EXPORT2 getStaticClassID(void);
00345
00346 private:
00351 DateTimePatternGenerator(UErrorCode & status);
00352
00357 DateTimePatternGenerator(const Locale& locale, UErrorCode & status);
00358
00364 DateTimePatternGenerator(const DateTimePatternGenerator& other);
00365
00371 DateTimePatternGenerator& operator=(const DateTimePatternGenerator& other);
00372
00373 Locale pLocale;
00374 FormatParser *fp;
00375 DateTimeMatcher* dtMatcher;
00376 DistanceInfo *distanceInfo;
00377 PatternMap *patternMap;
00378 UnicodeString appendItemFormats[UDATPG_FIELD_COUNT];
00379 UnicodeString appendItemNames[UDATPG_FIELD_COUNT];
00380 UnicodeString dateTimeFormat;
00381 UnicodeString decimal;
00382 DateTimeMatcher *skipMatcher;
00383 Hashtable *fAvailableFormatKeyHash;
00384 UnicodeString hackPattern;
00385 UErrorCode fStatus;
00386 UnicodeString emptyString;
00387
00388 void initData(const Locale &locale);
00389 void addCanonicalItems();
00390 void addICUPatterns(const Locale& locale);
00391 void hackTimes(UnicodeString& hackPattern, UErrorCode& status);
00392 void addCLDRData(const Locale& locale);
00393 void initHashtable(UErrorCode& status);
00394 void setDateTimeFromCalendar(const Locale& locale);
00395 void setDecimalSymbols(const Locale& locale, UErrorCode& status);
00396 UDateTimePatternField getAppendFormatNumber(const char* field);
00397 UDateTimePatternField getAppendNameNumber(const char* field);
00398 void getAppendName(UDateTimePatternField field, UnicodeString& value);
00399 int32_t getCanonicalIndex(const UnicodeString& field);
00400 const UnicodeString* getBestRaw(DateTimeMatcher& source, int32_t includeMask, DistanceInfo* missingFields);
00401 UnicodeString adjustFieldTypes(const UnicodeString& pattern, UBool fixFractionalSeconds);
00402 UnicodeString getBestAppending(const int32_t missingFields);
00403 int32_t getTopBitNumber(int32_t foundMask);
00404 void setAvailableFormat(const UnicodeString &key, UErrorCode& status);
00405 UBool isAvailableFormatSet(const UnicodeString &key);
00406 void copyHashtable(Hashtable *other);
00407 UBool isCanonicalItem(const UnicodeString& item);
00408 UErrorCode getStatus() { return fStatus; } ;
00409 } ;
00410
00411 U_NAMESPACE_END
00412
00413 #endif