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 class ZoneStringFormat;
00041 class SafeZoneStringFormatPtr;
00042
00080 class U_I18N_API DateFormatSymbols : public UObject {
00081 public:
00095 DateFormatSymbols(UErrorCode& status);
00096
00107 DateFormatSymbols(const Locale& locale,
00108 UErrorCode& status);
00109
00126 DateFormatSymbols(const char *type, UErrorCode& status);
00127
00141 DateFormatSymbols(const Locale& locale,
00142 const char *type,
00143 UErrorCode& status);
00144
00149 DateFormatSymbols(const DateFormatSymbols&);
00150
00155 DateFormatSymbols& operator=(const DateFormatSymbols&);
00156
00162 virtual ~DateFormatSymbols();
00163
00171 UBool operator==(const DateFormatSymbols& other) const;
00172
00180 UBool operator!=(const DateFormatSymbols& other) const { return !operator==(other); }
00181
00189 const UnicodeString* getEras(int32_t& count) const;
00190
00197 void setEras(const UnicodeString* eras, int32_t count);
00198
00206 const UnicodeString* getEraNames(int32_t& count) const;
00207
00214 void setEraNames(const UnicodeString* eraNames, int32_t count);
00215
00223 const UnicodeString* getNarrowEras(int32_t& count) const;
00224
00231 void setNarrowEras(const UnicodeString* narrowEras, int32_t count);
00232
00239 const UnicodeString* getMonths(int32_t& count) const;
00240
00248 void setMonths(const UnicodeString* months, int32_t count);
00249
00257 const UnicodeString* getShortMonths(int32_t& count) const;
00258
00265 void setShortMonths(const UnicodeString* shortMonths, int32_t count);
00266
00271 enum DtContextType {
00272 FORMAT,
00273 STANDALONE,
00274 DT_CONTEXT_COUNT
00275 };
00276
00281 enum DtWidthType {
00282 ABBREVIATED,
00283 WIDE,
00284 NARROW,
00285 DT_WIDTH_COUNT
00286 };
00287
00296 const UnicodeString* getMonths(int32_t& count, DtContextType context, DtWidthType width) const;
00297
00307 void setMonths(const UnicodeString* months, int32_t count, DtContextType context, DtWidthType width);
00308
00315 const UnicodeString* getWeekdays(int32_t& count) const;
00316
00317
00324 void setWeekdays(const UnicodeString* weekdays, int32_t count);
00325
00332 const UnicodeString* getShortWeekdays(int32_t& count) const;
00333
00340 void setShortWeekdays(const UnicodeString* shortWeekdays, int32_t count);
00341
00350 const UnicodeString* getWeekdays(int32_t& count, DtContextType context, DtWidthType width) const;
00351
00360 void setWeekdays(const UnicodeString* weekdays, int32_t count, DtContextType context, DtWidthType width);
00361
00371 const UnicodeString* getQuarters(int32_t& count, DtContextType context, DtWidthType width) const;
00372
00383 void setQuarters(const UnicodeString* quarters, int32_t count, DtContextType context, DtWidthType width);
00384
00391 const UnicodeString* getAmPmStrings(int32_t& count) const;
00392
00399 void setAmPmStrings(const UnicodeString* ampms, int32_t count);
00400
00408 const UnicodeString** getZoneStrings(int32_t& rowCount, int32_t& columnCount) const;
00409
00417 void setZoneStrings(const UnicodeString* const* strings, int32_t rowCount, int32_t columnCount);
00418
00424 static const UChar * U_EXPORT2 getPatternUChars(void);
00425
00436 UnicodeString& getLocalPatternChars(UnicodeString& result) const;
00437
00444 void setLocalPatternChars(const UnicodeString& newLocalPatternChars);
00445
00451 Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
00452
00458 virtual UClassID getDynamicClassID() const;
00459
00465 static UClassID U_EXPORT2 getStaticClassID();
00466
00467 private:
00468
00469 friend class SimpleDateFormat;
00470 friend class DateFormatSymbolsSingleSetter;
00471
00475 UnicodeString* fEras;
00476 int32_t fErasCount;
00477
00481 UnicodeString* fEraNames;
00482 int32_t fEraNamesCount;
00483
00487 UnicodeString* fNarrowEras;
00488 int32_t fNarrowErasCount;
00489
00493 UnicodeString* fMonths;
00494 int32_t fMonthsCount;
00495
00499 UnicodeString* fShortMonths;
00500 int32_t fShortMonthsCount;
00501
00505 UnicodeString* fNarrowMonths;
00506 int32_t fNarrowMonthsCount;
00507
00511 UnicodeString* fStandaloneMonths;
00512 int32_t fStandaloneMonthsCount;
00513
00517 UnicodeString* fStandaloneShortMonths;
00518 int32_t fStandaloneShortMonthsCount;
00519
00523 UnicodeString* fStandaloneNarrowMonths;
00524 int32_t fStandaloneNarrowMonthsCount;
00525
00529 UnicodeString* fWeekdays;
00530 int32_t fWeekdaysCount;
00531
00535 UnicodeString* fShortWeekdays;
00536 int32_t fShortWeekdaysCount;
00537
00541 UnicodeString* fNarrowWeekdays;
00542 int32_t fNarrowWeekdaysCount;
00543
00547 UnicodeString* fStandaloneWeekdays;
00548 int32_t fStandaloneWeekdaysCount;
00549
00553 UnicodeString* fStandaloneShortWeekdays;
00554 int32_t fStandaloneShortWeekdaysCount;
00555
00559 UnicodeString* fStandaloneNarrowWeekdays;
00560 int32_t fStandaloneNarrowWeekdaysCount;
00561
00565 UnicodeString* fAmPms;
00566 int32_t fAmPmsCount;
00567
00571 UnicodeString *fQuarters;
00572 int32_t fQuartersCount;
00573
00577 UnicodeString *fShortQuarters;
00578 int32_t fShortQuartersCount;
00579
00583 UnicodeString *fStandaloneQuarters;
00584 int32_t fStandaloneQuartersCount;
00585
00589 UnicodeString *fStandaloneShortQuarters;
00590 int32_t fStandaloneShortQuartersCount;
00591
00629 UnicodeString **fZoneStrings;
00630 UnicodeString **fLocaleZoneStrings;
00631 int32_t fZoneStringsRowCount;
00632 int32_t fZoneStringsColCount;
00633
00634 const ZoneStringFormat *fZoneStringFormat;
00635 ZoneStringFormat *fZSFLocal;
00636 SafeZoneStringFormatPtr *fZSFCachePtr;
00637 Locale fZSFLocale;
00638
00642 UnicodeString fGmtFormat;
00643
00647 UnicodeString *fGmtHourFormats;
00648 int32_t fGmtHourFormatsCount;
00649
00650 enum GMTHourType {
00651 GMT_NEGATIVE_HMS = 0,
00652 GMT_NEGATIVE_HM,
00653 GMT_POSITIVE_HMS,
00654 GMT_POSITIVE_HM,
00655 GMT_HOUR_COUNT
00656 };
00657
00661 UnicodeString fLocalPatternChars;
00662
00663 private:
00667 char validLocale[ULOC_FULLNAME_CAPACITY];
00668 char actualLocale[ULOC_FULLNAME_CAPACITY];
00669
00670 DateFormatSymbols();
00671
00681 void initializeData(const Locale&, const char *type, UErrorCode& status, UBool useLastResortData = FALSE);
00682
00691 static void assignArray(UnicodeString*& dstArray,
00692 int32_t& dstCount,
00693 const UnicodeString* srcArray,
00694 int32_t srcCount);
00695
00706 static UBool arrayCompare(const UnicodeString* array1,
00707 const UnicodeString* array2,
00708 int32_t count);
00709
00715 void createZoneStrings(const UnicodeString *const * otherStrings);
00716
00720 void dispose(void);
00721
00726 void copyData(const DateFormatSymbols& other);
00727
00728
00732 const ZoneStringFormat* getZoneStringFormat(void) const;
00733
00737 void initZoneStringFormat(void);
00738
00742 void initZoneStringsArray(void);
00743
00747 void disposeZoneStrings(void);
00748 };
00749
00750 U_NAMESPACE_END
00751
00752 #endif
00753
00754 #endif // _DTFMTSYM
00755