00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef DTFMTSYM_H
00019 #define DTFMTSYM_H
00020
00021 #include "unicode/utypes.h"
00022
00023 #if !UCONFIG_NO_FORMATTING
00024
00025 #include "unicode/calendar.h"
00026 #include "unicode/uobject.h"
00027 #include "unicode/locid.h"
00028 #include "unicode/ures.h"
00029
00035 U_NAMESPACE_BEGIN
00036
00037
00038 class SimpleDateFormat;
00039 class Hashtable;
00040
00078 class U_I18N_API DateFormatSymbols : public UObject {
00079 public:
00093 DateFormatSymbols(UErrorCode& status);
00094
00105 DateFormatSymbols(const Locale& locale,
00106 UErrorCode& status);
00107
00124 DateFormatSymbols(const char *type, UErrorCode& status);
00125
00139 DateFormatSymbols(const Locale& locale,
00140 const char *type,
00141 UErrorCode& status);
00142
00147 DateFormatSymbols(const DateFormatSymbols&);
00148
00153 DateFormatSymbols& operator=(const DateFormatSymbols&);
00154
00160 virtual ~DateFormatSymbols();
00161
00169 UBool operator==(const DateFormatSymbols& other) const;
00170
00178 UBool operator!=(const DateFormatSymbols& other) const { return !operator==(other); }
00179
00187 const UnicodeString* getEras(int32_t& count) const;
00188
00195 void setEras(const UnicodeString* eras, int32_t count);
00196
00204 const UnicodeString* getEraNames(int32_t& count) const;
00205
00212 void setEraNames(const UnicodeString* eraNames, int32_t count);
00213
00220 const UnicodeString* getMonths(int32_t& count) const;
00221
00229 void setMonths(const UnicodeString* months, int32_t count);
00230
00238 const UnicodeString* getShortMonths(int32_t& count) const;
00239
00246 void setShortMonths(const UnicodeString* shortMonths, int32_t count);
00247
00252 enum DtContextType {
00253 FORMAT,
00254 STANDALONE,
00255 DT_CONTEXT_COUNT
00256 };
00257
00262 enum DtWidthType {
00263 ABBREVIATED,
00264 WIDE,
00265 NARROW,
00266 DT_WIDTH_COUNT
00267 };
00268
00277 const UnicodeString* getMonths(int32_t& count, DtContextType context, DtWidthType width) const;
00278
00288 void setMonths(const UnicodeString* months, int32_t count, DtContextType context, DtWidthType width);
00289
00296 const UnicodeString* getWeekdays(int32_t& count) const;
00297
00298
00305 void setWeekdays(const UnicodeString* weekdays, int32_t count);
00306
00313 const UnicodeString* getShortWeekdays(int32_t& count) const;
00314
00321 void setShortWeekdays(const UnicodeString* shortWeekdays, int32_t count);
00322
00331 const UnicodeString* getWeekdays(int32_t& count, DtContextType context, DtWidthType width) const;
00332
00341 void setWeekdays(const UnicodeString* weekdays, int32_t count, DtContextType context, DtWidthType width);
00342
00352 const UnicodeString* getQuarters(int32_t& count, DtContextType context, DtWidthType width) const;
00353
00364 void setQuarters(const UnicodeString* quarters, int32_t count, DtContextType context, DtWidthType width);
00365
00372 const UnicodeString* getAmPmStrings(int32_t& count) const;
00373
00380 void setAmPmStrings(const UnicodeString* ampms, int32_t count);
00381
00389 const UnicodeString** getZoneStrings(int32_t& rowCount, int32_t& columnCount) const;
00390
00398 void setZoneStrings(const UnicodeString* const* strings, int32_t rowCount, int32_t columnCount);
00399
00405 static const UChar * U_EXPORT2 getPatternUChars(void);
00406
00417 UnicodeString& getLocalPatternChars(UnicodeString& result) const;
00418
00425 void setLocalPatternChars(const UnicodeString& newLocalPatternChars);
00426
00432 Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
00433
00439 virtual UClassID getDynamicClassID() const;
00440
00446 static UClassID U_EXPORT2 getStaticClassID();
00447
00452 enum TimeZoneTranslationType {
00453 TIMEZONE_SHORT_GENERIC,
00454 TIMEZONE_SHORT_STANDARD,
00455 TIMEZONE_SHORT_DAYLIGHT,
00456 TIMEZONE_LONG_GENERIC,
00457 TIMEZONE_LONG_STANDARD,
00458 TIMEZONE_LONG_DAYLIGHT,
00459 TIMEZONE_EXEMPLAR_CITY,
00460 TIMEZONE_COUNT
00461 };
00462
00471 virtual StringEnumeration* createZoneStringIDs(UErrorCode &status);
00472
00484 UnicodeString& getZoneString(const UnicodeString &ID, const TimeZoneTranslationType type, UnicodeString &result, UErrorCode &status);
00485
00498 UnicodeString& getMetazoneString(const UnicodeString &ID, const TimeZoneTranslationType type, Calendar &cal, UnicodeString &result, UErrorCode &status);
00499
00509 void setZoneString(const UnicodeString &ID, const TimeZoneTranslationType type, const UnicodeString &value, UErrorCode &status);
00510
00511 private:
00512
00513 friend class SimpleDateFormat;
00514 friend class DateFormatSymbolsSingleSetter;
00515
00519 UnicodeString* fEras;
00520 int32_t fErasCount;
00521
00525 UnicodeString* fEraNames;
00526 int32_t fEraNamesCount;
00527
00531 UnicodeString* fMonths;
00532 int32_t fMonthsCount;
00533
00537 UnicodeString* fShortMonths;
00538 int32_t fShortMonthsCount;
00539
00543 UnicodeString* fNarrowMonths;
00544 int32_t fNarrowMonthsCount;
00545
00549 UnicodeString* fStandaloneMonths;
00550 int32_t fStandaloneMonthsCount;
00551
00555 UnicodeString* fStandaloneShortMonths;
00556 int32_t fStandaloneShortMonthsCount;
00557
00561 UnicodeString* fStandaloneNarrowMonths;
00562 int32_t fStandaloneNarrowMonthsCount;
00563
00567 UnicodeString* fWeekdays;
00568 int32_t fWeekdaysCount;
00569
00573 UnicodeString* fShortWeekdays;
00574 int32_t fShortWeekdaysCount;
00575
00579 UnicodeString* fNarrowWeekdays;
00580 int32_t fNarrowWeekdaysCount;
00581
00585 UnicodeString* fStandaloneWeekdays;
00586 int32_t fStandaloneWeekdaysCount;
00587
00591 UnicodeString* fStandaloneShortWeekdays;
00592 int32_t fStandaloneShortWeekdaysCount;
00593
00597 UnicodeString* fStandaloneNarrowWeekdays;
00598 int32_t fStandaloneNarrowWeekdaysCount;
00599
00603 UnicodeString* fAmPms;
00604 int32_t fAmPmsCount;
00605
00609 UnicodeString *fQuarters;
00610 int32_t fQuartersCount;
00611
00615 UnicodeString *fShortQuarters;
00616 int32_t fShortQuartersCount;
00617
00621 UnicodeString *fStandaloneQuarters;
00622 int32_t fStandaloneQuartersCount;
00623
00627 UnicodeString *fStandaloneShortQuarters;
00628 int32_t fStandaloneShortQuartersCount;
00629
00633 UnicodeString** fZoneStrings;
00634 int32_t fZoneStringsRowCount;
00635 int32_t fZoneStringsColCount;
00636 StringEnumeration* fZoneIDEnumeration;
00637 Hashtable* fZoneStringsHash;
00638 UResourceBundle* fResourceBundle;
00639 const char* fCountry;
00640
00644 UnicodeString fLocalPatternChars;
00645
00646 private:
00650 char validLocale[ULOC_FULLNAME_CAPACITY];
00651 char actualLocale[ULOC_FULLNAME_CAPACITY];
00652
00653 DateFormatSymbols();
00654
00664 void initializeData(const Locale&, const char *type, UErrorCode& status, UBool useLastResortData = FALSE);
00665
00674 static void assignArray(UnicodeString*& dstArray,
00675 int32_t& dstCount,
00676 const UnicodeString* srcArray,
00677 int32_t srcCount);
00678
00689 static UBool arrayCompare(const UnicodeString* array1,
00690 const UnicodeString* array2,
00691 int32_t count);
00692
00698 void createZoneStrings(const UnicodeString *const * otherStrings);
00699
00710 int32_t getZoneIndex(const UnicodeString& ID) const;
00711
00712
00713 int32_t _getZoneIndex(const UnicodeString& id) const;
00714
00718 void dispose(void);
00719
00724 void copyData(const DateFormatSymbols& other);
00725
00729 void disposeZoneStrings(void);
00730
00734 void initZoneStrings(UErrorCode &status);
00739 void initZoneStrings(const UnicodeString** strings, int32_t rowCount, int32_t collumnCount, UErrorCode& status);
00743 void initZoneStringsArray(UErrorCode& status);
00747 Hashtable* createZoneStringsHash(const Hashtable* otherHash);
00748
00757 UnicodeString& getZoneID(const UnicodeString& zid, UnicodeString& result, UErrorCode& status);
00758
00770 void getZoneType(const UnicodeString& zid, const UnicodeString& text, int32_t start, TimeZoneTranslationType& type, UnicodeString& value, UErrorCode& status);
00771
00784 void findZoneIDTypeValue(UnicodeString& zid, const UnicodeString& text, int32_t start, TimeZoneTranslationType& type, UnicodeString& value, UErrorCode& status);
00785
00786 UnicodeString resolveParsedMetazone(const UnicodeString& zid);
00787 };
00788
00789 U_NAMESPACE_END
00790
00791 #endif
00792
00793 #endif // _DTFMTSYM
00794