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
00276 #ifndef U_HIDE_DRAFT_API
00277
00286 UnicodeString getFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width) const;
00287 #endif // U_HIDE_DRAFT_API
00288
00310 void setDateTimeFormat(const UnicodeString& dateTimeFormat);
00311
00317 const UnicodeString& getDateTimeFormat() const;
00318
00337 UnicodeString getBestPattern(const UnicodeString& skeleton, UErrorCode& status);
00338
00339
00359 UnicodeString getBestPattern(const UnicodeString& skeleton,
00360 UDateTimePatternMatchOptions options,
00361 UErrorCode& status);
00362
00363
00385 UnicodeString replaceFieldTypes(const UnicodeString& pattern,
00386 const UnicodeString& skeleton,
00387 UErrorCode& status);
00388
00411 UnicodeString replaceFieldTypes(const UnicodeString& pattern,
00412 const UnicodeString& skeleton,
00413 UDateTimePatternMatchOptions options,
00414 UErrorCode& status);
00415
00427 StringEnumeration* getSkeletons(UErrorCode& status) const;
00428
00435 const UnicodeString& getPatternForSkeleton(const UnicodeString& skeleton) const;
00436
00446 StringEnumeration* getBaseSkeletons(UErrorCode& status) const;
00447
00448 #ifndef U_HIDE_INTERNAL_API
00449
00461 StringEnumeration* getRedundants(UErrorCode& status);
00462 #endif
00463
00475 void setDecimal(const UnicodeString& decimal);
00476
00482 const UnicodeString& getDecimal() const;
00483
00489 virtual UClassID getDynamicClassID() const;
00490
00496 static UClassID U_EXPORT2 getStaticClassID(void);
00497
00498 private:
00502 DateTimePatternGenerator(UErrorCode & status);
00503
00507 DateTimePatternGenerator(const Locale& locale, UErrorCode & status);
00508
00513 DateTimePatternGenerator(const DateTimePatternGenerator& other);
00514
00519 DateTimePatternGenerator& operator=(const DateTimePatternGenerator& other);
00520
00521
00522
00523
00524 Locale pLocale;
00525 FormatParser *fp;
00526 DateTimeMatcher* dtMatcher;
00527 DistanceInfo *distanceInfo;
00528 PatternMap *patternMap;
00529 UnicodeString appendItemFormats[UDATPG_FIELD_COUNT];
00530
00531 UnicodeString fieldDisplayNames[UDATPG_FIELD_COUNT][3];
00532 UnicodeString dateTimeFormat;
00533 UnicodeString decimal;
00534 DateTimeMatcher *skipMatcher;
00535 Hashtable *fAvailableFormatKeyHash;
00536 UnicodeString emptyString;
00537 char16_t fDefaultHourFormatChar;
00538
00539 int32_t fAllowedHourFormats[7];
00540
00541
00542
00543
00544 UErrorCode internalErrorCode;
00545
00546
00547 enum {
00548 kDTPGNoFlags = 0,
00549 kDTPGFixFractionalSeconds = 1,
00550 kDTPGSkeletonUsesCapJ = 2
00551
00552 };
00553
00554 void initData(const Locale &locale, UErrorCode &status);
00555 void addCanonicalItems(UErrorCode &status);
00556 void addICUPatterns(const Locale& locale, UErrorCode& status);
00557 void hackTimes(const UnicodeString& hackPattern, UErrorCode& status);
00558 void getCalendarTypeToUse(const Locale& locale, CharString& destination, UErrorCode& err);
00559 void consumeShortTimePattern(const UnicodeString& shortTimePattern, UErrorCode& status);
00560 void addCLDRData(const Locale& locale, UErrorCode& status);
00561 UDateTimePatternConflict addPatternWithSkeleton(const UnicodeString& pattern, const UnicodeString * skeletonToUse, UBool override, UnicodeString& conflictingPattern, UErrorCode& status);
00562 void initHashtable(UErrorCode& status);
00563 void setDateTimeFromCalendar(const Locale& locale, UErrorCode& status);
00564 void setDecimalSymbols(const Locale& locale, UErrorCode& status);
00565 UDateTimePatternField getAppendFormatNumber(const char* field) const;
00566 #ifndef U_HIDE_DRAFT_API
00567 UDateTimePatternField getFieldAndWidthIndices(const char* key, UDateTimePGDisplayWidth* widthP) const;
00568 void setFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width, const UnicodeString& value);
00569 UnicodeString& getMutableFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width);
00570 #endif // U_HIDE_DRAFT_API
00571 void getAppendName(UDateTimePatternField field, UnicodeString& value);
00572 UnicodeString mapSkeletonMetacharacters(const UnicodeString& patternForm, int32_t* flags, UErrorCode& status);
00573 const UnicodeString* getBestRaw(DateTimeMatcher& source, int32_t includeMask, DistanceInfo* missingFields, UErrorCode& status, const PtnSkeleton** specifiedSkeletonPtr = 0);
00574 UnicodeString adjustFieldTypes(const UnicodeString& pattern, const PtnSkeleton* specifiedSkeleton, int32_t flags, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS);
00575 UnicodeString getBestAppending(int32_t missingFields, int32_t flags, UErrorCode& status, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS);
00576 int32_t getTopBitNumber(int32_t foundMask) const;
00577 void setAvailableFormat(const UnicodeString &key, UErrorCode& status);
00578 UBool isAvailableFormatSet(const UnicodeString &key) const;
00579 void copyHashtable(Hashtable *other, UErrorCode &status);
00580 UBool isCanonicalItem(const UnicodeString& item) const;
00581 static void U_CALLCONV loadAllowedHourFormatsData(UErrorCode &status);
00582 void getAllowedHourFormats(const Locale &locale, UErrorCode &status);
00583
00584 struct AppendItemFormatsSink;
00585 struct AppendItemNamesSink;
00586 struct AvailableFormatsSink;
00587 } ;
00588
00589 U_NAMESPACE_END
00590
00591 #endif