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
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
00080 virtual ~DateTimePatternGenerator();
00081
00087 DateTimePatternGenerator* clone() const;
00088
00096 UBool operator==(const DateTimePatternGenerator& other) const;
00097
00105 UBool operator!=(const DateTimePatternGenerator& other) const;
00106
00117 UnicodeString getSkeleton(const UnicodeString& pattern, UErrorCode& status);
00118
00132 UnicodeString getBaseSkeleton(const UnicodeString& pattern, UErrorCode& status);
00133
00154 UDateTimePatternConflict addPattern(const UnicodeString& pattern,
00155 UBool override,
00156 UnicodeString& conflictingPattern,
00157 UErrorCode& status);
00158
00177 void setAppendItemFormat(UDateTimePatternField field, const UnicodeString& value);
00178
00187 const UnicodeString& getAppendItemFormat(UDateTimePatternField field) const;
00188
00200 void setAppendItemName(UDateTimePatternField field, const UnicodeString& value);
00201
00210 const UnicodeString& getAppendItemName(UDateTimePatternField field) const;
00211
00231 void setDateTimeFormat(const UnicodeString& dateTimeFormat);
00232
00238 const UnicodeString& getDateTimeFormat() const;
00239
00253 UnicodeString getBestPattern(const UnicodeString& skeleton, UErrorCode& status);
00254
00255
00275 UnicodeString getBestPattern(const UnicodeString& skeleton,
00276 UDateTimePatternMatchOptions options,
00277 UErrorCode& status);
00278
00279
00296 UnicodeString replaceFieldTypes(const UnicodeString& pattern,
00297 const UnicodeString& skeleton,
00298 UErrorCode& status);
00299
00322 UnicodeString replaceFieldTypes(const UnicodeString& pattern,
00323 const UnicodeString& skeleton,
00324 UDateTimePatternMatchOptions options,
00325 UErrorCode& status);
00326
00338 StringEnumeration* getSkeletons(UErrorCode& status) const;
00339
00346 const UnicodeString& getPatternForSkeleton(const UnicodeString& skeleton) const;
00347
00357 StringEnumeration* getBaseSkeletons(UErrorCode& status) const;
00358
00359 #ifndef U_HIDE_INTERNAL_API
00360
00372 StringEnumeration* getRedundants(UErrorCode& status);
00373 #endif
00374
00386 void setDecimal(const UnicodeString& decimal);
00387
00393 const UnicodeString& getDecimal() const;
00394
00400 virtual UClassID getDynamicClassID() const;
00401
00407 static UClassID U_EXPORT2 getStaticClassID(void);
00408
00409 private:
00414 DateTimePatternGenerator(UErrorCode & status);
00415
00420 DateTimePatternGenerator(const Locale& locale, UErrorCode & status);
00421
00427 DateTimePatternGenerator(const DateTimePatternGenerator& other);
00428
00434 DateTimePatternGenerator& operator=(const DateTimePatternGenerator& other);
00435
00436 Locale pLocale;
00437 FormatParser *fp;
00438 DateTimeMatcher* dtMatcher;
00439 DistanceInfo *distanceInfo;
00440 PatternMap *patternMap;
00441 UnicodeString appendItemFormats[UDATPG_FIELD_COUNT];
00442 UnicodeString appendItemNames[UDATPG_FIELD_COUNT];
00443 UnicodeString dateTimeFormat;
00444 UnicodeString decimal;
00445 DateTimeMatcher *skipMatcher;
00446 Hashtable *fAvailableFormatKeyHash;
00447 UnicodeString hackPattern;
00448 UnicodeString emptyString;
00449 UChar fDefaultHourFormatChar;
00450
00451 void initData(const Locale &locale, UErrorCode &status);
00452 void addCanonicalItems();
00453 void addICUPatterns(const Locale& locale, UErrorCode& status);
00454 void hackTimes(const UnicodeString& hackPattern, UErrorCode& status);
00455 void addCLDRData(const Locale& locale, UErrorCode& status);
00456 UDateTimePatternConflict addPatternWithSkeleton(const UnicodeString& pattern, const UnicodeString * skeletonToUse, UBool override, UnicodeString& conflictingPattern, UErrorCode& status);
00457 void initHashtable(UErrorCode& status);
00458 void setDateTimeFromCalendar(const Locale& locale, UErrorCode& status);
00459 void setDecimalSymbols(const Locale& locale, UErrorCode& status);
00460 UDateTimePatternField getAppendFormatNumber(const char* field) const;
00461 UDateTimePatternField getAppendNameNumber(const char* field) const;
00462 void getAppendName(UDateTimePatternField field, UnicodeString& value);
00463 int32_t getCanonicalIndex(const UnicodeString& field);
00464 const UnicodeString* getBestRaw(DateTimeMatcher& source, int32_t includeMask, DistanceInfo* missingFields, const PtnSkeleton** specifiedSkeletonPtr = 0);
00465 UnicodeString adjustFieldTypes(const UnicodeString& pattern, const PtnSkeleton* specifiedSkeleton, UBool fixFractionalSeconds, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS);
00466 UnicodeString getBestAppending(int32_t missingFields, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS);
00467 int32_t getTopBitNumber(int32_t foundMask);
00468 void setAvailableFormat(const UnicodeString &key, UErrorCode& status);
00469 UBool isAvailableFormatSet(const UnicodeString &key) const;
00470 void copyHashtable(Hashtable *other, UErrorCode &status);
00471 UBool isCanonicalItem(const UnicodeString& item) const;
00472 } ;
00473
00474 U_NAMESPACE_END
00475
00476 #endif