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
00272 const UnicodeString& getAppendItemName(UDateTimePatternField field) const;
00273
00295 void setDateTimeFormat(const UnicodeString& dateTimeFormat);
00296
00302 const UnicodeString& getDateTimeFormat() const;
00303
00322 UnicodeString getBestPattern(const UnicodeString& skeleton, UErrorCode& status);
00323
00324
00344 UnicodeString getBestPattern(const UnicodeString& skeleton,
00345 UDateTimePatternMatchOptions options,
00346 UErrorCode& status);
00347
00348
00370 UnicodeString replaceFieldTypes(const UnicodeString& pattern,
00371 const UnicodeString& skeleton,
00372 UErrorCode& status);
00373
00396 UnicodeString replaceFieldTypes(const UnicodeString& pattern,
00397 const UnicodeString& skeleton,
00398 UDateTimePatternMatchOptions options,
00399 UErrorCode& status);
00400
00412 StringEnumeration* getSkeletons(UErrorCode& status) const;
00413
00420 const UnicodeString& getPatternForSkeleton(const UnicodeString& skeleton) const;
00421
00431 StringEnumeration* getBaseSkeletons(UErrorCode& status) const;
00432
00433 #ifndef U_HIDE_INTERNAL_API
00434
00446 StringEnumeration* getRedundants(UErrorCode& status);
00447 #endif
00448
00460 void setDecimal(const UnicodeString& decimal);
00461
00467 const UnicodeString& getDecimal() const;
00468
00474 virtual UClassID getDynamicClassID() const;
00475
00481 static UClassID U_EXPORT2 getStaticClassID(void);
00482
00483 private:
00488 DateTimePatternGenerator(UErrorCode & status);
00489
00494 DateTimePatternGenerator(const Locale& locale, UErrorCode & status);
00495
00501 DateTimePatternGenerator(const DateTimePatternGenerator& other);
00502
00508 DateTimePatternGenerator& operator=(const DateTimePatternGenerator& other);
00509
00510 Locale pLocale;
00511 FormatParser *fp;
00512 DateTimeMatcher* dtMatcher;
00513 DistanceInfo *distanceInfo;
00514 PatternMap *patternMap;
00515 UnicodeString appendItemFormats[UDATPG_FIELD_COUNT];
00516 UnicodeString appendItemNames[UDATPG_FIELD_COUNT];
00517 UnicodeString dateTimeFormat;
00518 UnicodeString decimal;
00519 DateTimeMatcher *skipMatcher;
00520 Hashtable *fAvailableFormatKeyHash;
00521 UnicodeString emptyString;
00522 char16_t fDefaultHourFormatChar;
00523
00524 int32_t fAllowedHourFormats[7];
00525
00526
00527 enum {
00528 kDTPGNoFlags = 0,
00529 kDTPGFixFractionalSeconds = 1,
00530 kDTPGSkeletonUsesCapJ = 2
00531
00532 };
00533
00534 void initData(const Locale &locale, UErrorCode &status);
00535 void addCanonicalItems(UErrorCode &status);
00536 void addICUPatterns(const Locale& locale, UErrorCode& status);
00537 void hackTimes(const UnicodeString& hackPattern, UErrorCode& status);
00538 void getCalendarTypeToUse(const Locale& locale, CharString& destination, UErrorCode& err);
00539 void consumeShortTimePattern(const UnicodeString& shortTimePattern, UErrorCode& status);
00540 void addCLDRData(const Locale& locale, UErrorCode& status);
00541 UDateTimePatternConflict addPatternWithSkeleton(const UnicodeString& pattern, const UnicodeString * skeletonToUse, UBool override, UnicodeString& conflictingPattern, UErrorCode& status);
00542 void initHashtable(UErrorCode& status);
00543 void setDateTimeFromCalendar(const Locale& locale, UErrorCode& status);
00544 void setDecimalSymbols(const Locale& locale, UErrorCode& status);
00545 UDateTimePatternField getAppendFormatNumber(const char* field) const;
00546 UDateTimePatternField getAppendNameNumber(const char* field) const;
00547 UnicodeString& getMutableAppendItemName(UDateTimePatternField field);
00548 void getAppendName(UDateTimePatternField field, UnicodeString& value);
00549 UnicodeString mapSkeletonMetacharacters(const UnicodeString& patternForm, int32_t* flags, UErrorCode& status);
00550 int32_t getCanonicalIndex(const UnicodeString& field);
00551 const UnicodeString* getBestRaw(DateTimeMatcher& source, int32_t includeMask, DistanceInfo* missingFields, const PtnSkeleton** specifiedSkeletonPtr = 0);
00552 UnicodeString adjustFieldTypes(const UnicodeString& pattern, const PtnSkeleton* specifiedSkeleton, int32_t flags, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS);
00553 UnicodeString getBestAppending(int32_t missingFields, int32_t flags, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS);
00554 int32_t getTopBitNumber(int32_t foundMask);
00555 void setAvailableFormat(const UnicodeString &key, UErrorCode& status);
00556 UBool isAvailableFormatSet(const UnicodeString &key) const;
00557 void copyHashtable(Hashtable *other, UErrorCode &status);
00558 UBool isCanonicalItem(const UnicodeString& item) const;
00559 static void U_CALLCONV loadAllowedHourFormatsData(UErrorCode &status);
00560 void getAllowedHourFormats(const Locale &locale, UErrorCode &status);
00561
00562 struct AppendItemFormatsSink;
00563 struct AppendItemNamesSink;
00564 struct AvailableFormatsSink;
00565 } ;
00566
00567 U_NAMESPACE_END
00568
00569 #endif