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/udat.h"
00029 #include "unicode/ures.h"
00030
00036 U_NAMESPACE_BEGIN
00037
00038
00039 class SimpleDateFormat;
00040 class Hashtable;
00041
00079 class U_I18N_API DateFormatSymbols : public UObject {
00080 public:
00094 DateFormatSymbols(UErrorCode& status);
00095
00106 DateFormatSymbols(const Locale& locale,
00107 UErrorCode& status);
00108
00109 #ifndef U_HIDE_INTERNAL_API
00110
00126 DateFormatSymbols(const char *type, UErrorCode& status);
00127
00141 DateFormatSymbols(const Locale& locale,
00142 const char *type,
00143 UErrorCode& status);
00144 #endif
00145
00150 DateFormatSymbols(const DateFormatSymbols&);
00151
00156 DateFormatSymbols& operator=(const DateFormatSymbols&);
00157
00163 virtual ~DateFormatSymbols();
00164
00172 UBool operator==(const DateFormatSymbols& other) const;
00173
00181 UBool operator!=(const DateFormatSymbols& other) const { return !operator==(other); }
00182
00190 const UnicodeString* getEras(int32_t& count) const;
00191
00198 void setEras(const UnicodeString* eras, int32_t count);
00199
00207 const UnicodeString* getEraNames(int32_t& count) const;
00208
00215 void setEraNames(const UnicodeString* eraNames, int32_t count);
00216
00224 const UnicodeString* getNarrowEras(int32_t& count) const;
00225
00232 void setNarrowEras(const UnicodeString* narrowEras, int32_t count);
00233
00240 const UnicodeString* getMonths(int32_t& count) const;
00241
00249 void setMonths(const UnicodeString* months, int32_t count);
00250
00258 const UnicodeString* getShortMonths(int32_t& count) const;
00259
00266 void setShortMonths(const UnicodeString* shortMonths, int32_t count);
00267
00272 enum DtContextType {
00273 FORMAT,
00274 STANDALONE,
00275 DT_CONTEXT_COUNT
00276 };
00277
00282 enum DtWidthType {
00283 ABBREVIATED,
00284 WIDE,
00285 NARROW,
00286 DT_WIDTH_COUNT
00287 };
00288
00297 const UnicodeString* getMonths(int32_t& count, DtContextType context, DtWidthType width) const;
00298
00308 void setMonths(const UnicodeString* months, int32_t count, DtContextType context, DtWidthType width);
00309
00316 const UnicodeString* getWeekdays(int32_t& count) const;
00317
00318
00325 void setWeekdays(const UnicodeString* weekdays, int32_t count);
00326
00333 const UnicodeString* getShortWeekdays(int32_t& count) const;
00334
00341 void setShortWeekdays(const UnicodeString* shortWeekdays, int32_t count);
00342
00351 const UnicodeString* getWeekdays(int32_t& count, DtContextType context, DtWidthType width) const;
00352
00361 void setWeekdays(const UnicodeString* weekdays, int32_t count, DtContextType context, DtWidthType width);
00362
00372 const UnicodeString* getQuarters(int32_t& count, DtContextType context, DtWidthType width) const;
00373
00384 void setQuarters(const UnicodeString* quarters, int32_t count, DtContextType context, DtWidthType width);
00385
00392 const UnicodeString* getAmPmStrings(int32_t& count) const;
00393
00400 void setAmPmStrings(const UnicodeString* ampms, int32_t count);
00401
00402 #ifndef U_HIDE_INTERNAL_API
00403
00411 enum EMonthPatternType
00412 {
00413 kLeapMonthPatternFormatWide,
00414 kLeapMonthPatternFormatAbbrev,
00415 kLeapMonthPatternFormatNarrow,
00416 kLeapMonthPatternStandaloneWide,
00417 kLeapMonthPatternStandaloneAbbrev,
00418 kLeapMonthPatternStandaloneNarrow,
00419 kLeapMonthPatternNumeric,
00420 kMonthPatternsCount
00421 };
00422
00435 const UnicodeString* getLeapMonthPatterns(int32_t& count) const;
00436
00437 #endif
00438
00439 #ifndef U_HIDE_DEPRECATED_API
00440
00447 const UnicodeString** getZoneStrings(int32_t& rowCount, int32_t& columnCount) const;
00448 #endif
00449
00461 void setZoneStrings(const UnicodeString* const* strings, int32_t rowCount, int32_t columnCount);
00462
00468 static const UChar * U_EXPORT2 getPatternUChars(void);
00469
00480 UnicodeString& getLocalPatternChars(UnicodeString& result) const;
00481
00488 void setLocalPatternChars(const UnicodeString& newLocalPatternChars);
00489
00495 Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
00496
00497 #ifndef U_HIDE_INTERNAL_API
00498
00502 enum ECapitalizationContextUsageType
00503 {
00504 kCapContextUsageOther,
00505 kCapContextUsageMonthFormat,
00506 kCapContextUsageMonthStandalone,
00507 kCapContextUsageMonthNarrow,
00508 kCapContextUsageDayFormat,
00509 kCapContextUsageDayStandalone,
00510 kCapContextUsageDayNarrow,
00511 kCapContextUsageEraWide,
00512 kCapContextUsageEraAbbrev,
00513 kCapContextUsageEraNarrow,
00514 kCapContextUsageZoneLong,
00515 kCapContextUsageZoneShort,
00516 kCapContextUsageMetazoneLong,
00517 kCapContextUsageMetazoneShort,
00518 kCapContextUsageTypeCount
00519 };
00520 #endif
00521
00527 virtual UClassID getDynamicClassID() const;
00528
00534 static UClassID U_EXPORT2 getStaticClassID();
00535
00536 private:
00537
00538 friend class SimpleDateFormat;
00539 friend class DateFormatSymbolsSingleSetter;
00540
00544 UnicodeString* fEras;
00545 int32_t fErasCount;
00546
00550 UnicodeString* fEraNames;
00551 int32_t fEraNamesCount;
00552
00556 UnicodeString* fNarrowEras;
00557 int32_t fNarrowErasCount;
00558
00562 UnicodeString* fMonths;
00563 int32_t fMonthsCount;
00564
00568 UnicodeString* fShortMonths;
00569 int32_t fShortMonthsCount;
00570
00574 UnicodeString* fNarrowMonths;
00575 int32_t fNarrowMonthsCount;
00576
00580 UnicodeString* fStandaloneMonths;
00581 int32_t fStandaloneMonthsCount;
00582
00586 UnicodeString* fStandaloneShortMonths;
00587 int32_t fStandaloneShortMonthsCount;
00588
00592 UnicodeString* fStandaloneNarrowMonths;
00593 int32_t fStandaloneNarrowMonthsCount;
00594
00598 UnicodeString* fWeekdays;
00599 int32_t fWeekdaysCount;
00600
00604 UnicodeString* fShortWeekdays;
00605 int32_t fShortWeekdaysCount;
00606
00610 UnicodeString* fNarrowWeekdays;
00611 int32_t fNarrowWeekdaysCount;
00612
00616 UnicodeString* fStandaloneWeekdays;
00617 int32_t fStandaloneWeekdaysCount;
00618
00622 UnicodeString* fStandaloneShortWeekdays;
00623 int32_t fStandaloneShortWeekdaysCount;
00624
00628 UnicodeString* fStandaloneNarrowWeekdays;
00629 int32_t fStandaloneNarrowWeekdaysCount;
00630
00634 UnicodeString* fAmPms;
00635 int32_t fAmPmsCount;
00636
00640 UnicodeString *fQuarters;
00641 int32_t fQuartersCount;
00642
00646 UnicodeString *fShortQuarters;
00647 int32_t fShortQuartersCount;
00648
00652 UnicodeString *fStandaloneQuarters;
00653 int32_t fStandaloneQuartersCount;
00654
00658 UnicodeString *fStandaloneShortQuarters;
00659 int32_t fStandaloneShortQuartersCount;
00660
00664 UnicodeString *fLeapMonthPatterns;
00665 int32_t fLeapMonthPatternsCount;
00666
00670 UnicodeString* fShortYearNames;
00671 int32_t fShortYearNamesCount;
00672
00710 UnicodeString **fZoneStrings;
00711 UnicodeString **fLocaleZoneStrings;
00712 int32_t fZoneStringsRowCount;
00713 int32_t fZoneStringsColCount;
00714
00715 Locale fZSFLocale;
00716
00720 UnicodeString fLocalPatternChars;
00721
00722 #ifndef U_HIDE_INTERNAL_API
00723
00728 UBool fCapitalization[kCapContextUsageTypeCount][2];
00729 #endif
00730
00731
00732 private:
00736 char validLocale[ULOC_FULLNAME_CAPACITY];
00737 char actualLocale[ULOC_FULLNAME_CAPACITY];
00738
00739 DateFormatSymbols();
00740
00750 void initializeData(const Locale& locale, const char *type, UErrorCode& status, UBool useLastResortData = FALSE);
00751
00760 static void assignArray(UnicodeString*& dstArray,
00761 int32_t& dstCount,
00762 const UnicodeString* srcArray,
00763 int32_t srcCount);
00764
00775 static UBool arrayCompare(const UnicodeString* array1,
00776 const UnicodeString* array2,
00777 int32_t count);
00778
00784 void createZoneStrings(const UnicodeString *const * otherStrings);
00785
00789 void dispose(void);
00790
00795 void copyData(const DateFormatSymbols& other);
00796
00800 void initZoneStringsArray(void);
00801
00805 void disposeZoneStrings(void);
00806
00811 static UDateFormatField U_EXPORT2 getPatternCharIndex(UChar c);
00812
00816 static UBool U_EXPORT2 isNumericField(UDateFormatField f, int32_t count);
00817
00821 static UBool U_EXPORT2 isNumericPatternChar(UChar c, int32_t count);
00822 };
00823
00824 U_NAMESPACE_END
00825
00826 #endif
00827
00828 #endif // _DTFMTSYM
00829