00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef __DTPTNGEN_H__
00015 #define __DTPTNGEN_H__
00016
00017 #include "unicode/datefmt.h"
00018 #include "unicode/locid.h"
00019 #include "unicode/udat.h"
00020 #include "unicode/udatpg.h"
00021 #include "unicode/unistr.h"
00022
00023 U_NAMESPACE_BEGIN
00024
00031 class CharString;
00032 class Hashtable;
00033 class FormatParser;
00034 class DateTimeMatcher;
00035 class DistanceInfo;
00036 class PatternMap;
00037 class PtnSkeleton;
00038 class SharedDateTimePatternGenerator;
00039
00054 class U_I18N_API DateTimePatternGenerator : public UObject {
00055 public:
00062 static DateTimePatternGenerator* U_EXPORT2 createInstance(UErrorCode& status);
00063
00071 static DateTimePatternGenerator* U_EXPORT2 createInstance(const Locale& uLocale, UErrorCode& status);
00072
00073 #ifndef U_HIDE_INTERNAL_API
00074
00080 static DateTimePatternGenerator* U_EXPORT2 internalMakeInstance(const Locale& uLocale, UErrorCode& status);
00081
00082 #endif
00083
00090 static DateTimePatternGenerator* U_EXPORT2 createEmptyInstance(UErrorCode& status);
00091
00096 virtual ~DateTimePatternGenerator();
00097
00103 DateTimePatternGenerator* clone() const;
00104
00112 UBool operator==(const DateTimePatternGenerator& other) const;
00113
00121 UBool operator!=(const DateTimePatternGenerator& other) const;
00122
00133 static UnicodeString staticGetSkeleton(const UnicodeString& pattern, UErrorCode& status);
00134
00147 UnicodeString getSkeleton(const UnicodeString& pattern, UErrorCode& status);
00148
00149
00150
00151
00152
00153
00167 static UnicodeString staticGetBaseSkeleton(const UnicodeString& pattern, UErrorCode& status);
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
00274 const UnicodeString& getAppendItemName(UDateTimePatternField field) const;
00275
00285 UnicodeString getFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width) const;
00286
00308 void setDateTimeFormat(const UnicodeString& dateTimeFormat);
00309
00315 const UnicodeString& getDateTimeFormat() const;
00316
00335 UnicodeString getBestPattern(const UnicodeString& skeleton, UErrorCode& status);
00336
00337
00357 UnicodeString getBestPattern(const UnicodeString& skeleton,
00358 UDateTimePatternMatchOptions options,
00359 UErrorCode& status);
00360
00361
00383 UnicodeString replaceFieldTypes(const UnicodeString& pattern,
00384 const UnicodeString& skeleton,
00385 UErrorCode& status);
00386
00409 UnicodeString replaceFieldTypes(const UnicodeString& pattern,
00410 const UnicodeString& skeleton,
00411 UDateTimePatternMatchOptions options,
00412 UErrorCode& status);
00413
00425 StringEnumeration* getSkeletons(UErrorCode& status) const;
00426
00433 const UnicodeString& getPatternForSkeleton(const UnicodeString& skeleton) const;
00434
00444 StringEnumeration* getBaseSkeletons(UErrorCode& status) const;
00445
00446 #ifndef U_HIDE_INTERNAL_API
00447
00459 StringEnumeration* getRedundants(UErrorCode& status);
00460 #endif
00461
00473 void setDecimal(const UnicodeString& decimal);
00474
00480 const UnicodeString& getDecimal() const;
00481
00487 virtual UClassID getDynamicClassID() const;
00488
00494 static UClassID U_EXPORT2 getStaticClassID(void);
00495
00496 private:
00500 DateTimePatternGenerator(UErrorCode & status);
00501
00505 DateTimePatternGenerator(const Locale& locale, UErrorCode & status);
00506
00511 DateTimePatternGenerator(const DateTimePatternGenerator& other);
00512
00517 DateTimePatternGenerator& operator=(const DateTimePatternGenerator& other);
00518
00519
00520
00521
00522 Locale pLocale;
00523 FormatParser *fp;
00524 DateTimeMatcher* dtMatcher;
00525 DistanceInfo *distanceInfo;
00526 PatternMap *patternMap;
00527 UnicodeString appendItemFormats[UDATPG_FIELD_COUNT];
00528
00529 UnicodeString fieldDisplayNames[UDATPG_FIELD_COUNT][3];
00530 UnicodeString dateTimeFormat;
00531 UnicodeString decimal;
00532 DateTimeMatcher *skipMatcher;
00533 Hashtable *fAvailableFormatKeyHash;
00534 UnicodeString emptyString;
00535 char16_t fDefaultHourFormatChar;
00536
00537 int32_t fAllowedHourFormats[7];
00538
00539
00540
00541
00542 UErrorCode internalErrorCode;
00543
00544
00545 enum {
00546 kDTPGNoFlags = 0,
00547 kDTPGFixFractionalSeconds = 1,
00548 kDTPGSkeletonUsesCapJ = 2
00549
00550 };
00551
00552 void initData(const Locale &locale, UErrorCode &status);
00553 void addCanonicalItems(UErrorCode &status);
00554 void addICUPatterns(const Locale& locale, UErrorCode& status);
00555 void hackTimes(const UnicodeString& hackPattern, UErrorCode& status);
00556 void getCalendarTypeToUse(const Locale& locale, CharString& destination, UErrorCode& err);
00557 void consumeShortTimePattern(const UnicodeString& shortTimePattern, UErrorCode& status);
00558 void addCLDRData(const Locale& locale, UErrorCode& status);
00559 UDateTimePatternConflict addPatternWithSkeleton(const UnicodeString& pattern, const UnicodeString * skeletonToUse, UBool override, UnicodeString& conflictingPattern, UErrorCode& status);
00560 void initHashtable(UErrorCode& status);
00561 void setDateTimeFromCalendar(const Locale& locale, UErrorCode& status);
00562 void setDecimalSymbols(const Locale& locale, UErrorCode& status);
00563 UDateTimePatternField getAppendFormatNumber(const char* field) const;
00564 #ifndef U_HIDE_DRAFT_API
00565
00566 UDateTimePatternField getFieldAndWidthIndices(const char* key, UDateTimePGDisplayWidth* widthP) const;
00567 void setFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width, const UnicodeString& value);
00568 UnicodeString& getMutableFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width);
00569 #endif // U_HIDE_DRAFT_API
00570 void getAppendName(UDateTimePatternField field, UnicodeString& value);
00571 UnicodeString mapSkeletonMetacharacters(const UnicodeString& patternForm, int32_t* flags, UErrorCode& status);
00572 const UnicodeString* getBestRaw(DateTimeMatcher& source, int32_t includeMask, DistanceInfo* missingFields, UErrorCode& status, const PtnSkeleton** specifiedSkeletonPtr = 0);
00573 UnicodeString adjustFieldTypes(const UnicodeString& pattern, const PtnSkeleton* specifiedSkeleton, int32_t flags, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS);
00574 UnicodeString getBestAppending(int32_t missingFields, int32_t flags, UErrorCode& status, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS);
00575 int32_t getTopBitNumber(int32_t foundMask) const;
00576 void setAvailableFormat(const UnicodeString &key, UErrorCode& status);
00577 UBool isAvailableFormatSet(const UnicodeString &key) const;
00578 void copyHashtable(Hashtable *other, UErrorCode &status);
00579 UBool isCanonicalItem(const UnicodeString& item) const;
00580 static void U_CALLCONV loadAllowedHourFormatsData(UErrorCode &status);
00581 void getAllowedHourFormats(const Locale &locale, UErrorCode &status);
00582
00583 struct AppendItemFormatsSink;
00584 struct AppendItemNamesSink;
00585 struct AvailableFormatsSink;
00586 } ;
00587
00588 U_NAMESPACE_END
00589
00590 #endif