00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef DTFMTSYM_H
00021 #define DTFMTSYM_H
00022
00023 #include "unicode/utypes.h"
00024
00025 #if !UCONFIG_NO_FORMATTING
00026
00027 #include "unicode/calendar.h"
00028 #include "unicode/strenum.h"
00029 #include "unicode/uobject.h"
00030 #include "unicode/locid.h"
00031 #include "unicode/udat.h"
00032 #include "unicode/ures.h"
00033
00039 U_NAMESPACE_BEGIN
00040
00041
00042 class SimpleDateFormat;
00043 class Hashtable;
00044
00082 class U_I18N_API DateFormatSymbols U_FINAL : public UObject {
00083 public:
00097 DateFormatSymbols(UErrorCode& status);
00098
00109 DateFormatSymbols(const Locale& locale,
00110 UErrorCode& status);
00111
00112 #ifndef U_HIDE_INTERNAL_API
00113
00129 DateFormatSymbols(const char *type, UErrorCode& status);
00130
00144 DateFormatSymbols(const Locale& locale,
00145 const char *type,
00146 UErrorCode& status);
00147 #endif
00148
00153 DateFormatSymbols(const DateFormatSymbols&);
00154
00159 DateFormatSymbols& operator=(const DateFormatSymbols&);
00160
00166 virtual ~DateFormatSymbols();
00167
00175 UBool operator==(const DateFormatSymbols& other) const;
00176
00184 UBool operator!=(const DateFormatSymbols& other) const { return !operator==(other); }
00185
00193 const UnicodeString* getEras(int32_t& count) const;
00194
00201 void setEras(const UnicodeString* eras, int32_t count);
00202
00210 const UnicodeString* getEraNames(int32_t& count) const;
00211
00218 void setEraNames(const UnicodeString* eraNames, int32_t count);
00219
00227 const UnicodeString* getNarrowEras(int32_t& count) const;
00228
00235 void setNarrowEras(const UnicodeString* narrowEras, int32_t count);
00236
00243 const UnicodeString* getMonths(int32_t& count) const;
00244
00252 void setMonths(const UnicodeString* months, int32_t count);
00253
00261 const UnicodeString* getShortMonths(int32_t& count) const;
00262
00269 void setShortMonths(const UnicodeString* shortMonths, int32_t count);
00270
00275 enum DtContextType {
00276 FORMAT,
00277 STANDALONE,
00278 #ifndef U_HIDE_DEPRECATED_API
00279
00283 DT_CONTEXT_COUNT
00284 #endif // U_HIDE_DEPRECATED_API
00285 };
00286
00291 enum DtWidthType {
00292 ABBREVIATED,
00293 WIDE,
00294 NARROW,
00299 SHORT,
00300 #ifndef U_HIDE_DEPRECATED_API
00301
00305 DT_WIDTH_COUNT = 4
00306 #endif // U_HIDE_DEPRECATED_API
00307 };
00308
00317 const UnicodeString* getMonths(int32_t& count, DtContextType context, DtWidthType width) const;
00318
00328 void setMonths(const UnicodeString* months, int32_t count, DtContextType context, DtWidthType width);
00329
00336 const UnicodeString* getWeekdays(int32_t& count) const;
00337
00338
00345 void setWeekdays(const UnicodeString* weekdays, int32_t count);
00346
00354 const UnicodeString* getShortWeekdays(int32_t& count) const;
00355
00363 void setShortWeekdays(const UnicodeString* abbrevWeekdays, int32_t count);
00364
00373 const UnicodeString* getWeekdays(int32_t& count, DtContextType context, DtWidthType width) const;
00374
00383 void setWeekdays(const UnicodeString* weekdays, int32_t count, DtContextType context, DtWidthType width);
00384
00394 const UnicodeString* getQuarters(int32_t& count, DtContextType context, DtWidthType width) const;
00395
00406 void setQuarters(const UnicodeString* quarters, int32_t count, DtContextType context, DtWidthType width);
00407
00414 const UnicodeString* getAmPmStrings(int32_t& count) const;
00415
00422 void setAmPmStrings(const UnicodeString* ampms, int32_t count);
00423
00424 #ifndef U_HIDE_INTERNAL_API
00425
00430 static const char16_t DEFAULT_TIME_SEPARATOR = 0x003a;
00431
00436 static const char16_t ALTERNATE_TIME_SEPARATOR = 0x002e;
00437
00444 UnicodeString& getTimeSeparatorString(UnicodeString& result) const;
00445
00451 void setTimeSeparatorString(const UnicodeString& newTimeSeparator);
00452 #endif
00453
00464 const UnicodeString* getYearNames(int32_t& count,
00465 DtContextType context, DtWidthType width) const;
00466
00476 void setYearNames(const UnicodeString* yearNames, int32_t count,
00477 DtContextType context, DtWidthType width);
00478
00489 const UnicodeString* getZodiacNames(int32_t& count,
00490 DtContextType context, DtWidthType width) const;
00491
00501 void setZodiacNames(const UnicodeString* zodiacNames, int32_t count,
00502 DtContextType context, DtWidthType width);
00503
00504 #ifndef U_HIDE_INTERNAL_API
00505
00513 enum EMonthPatternType
00514 {
00515 kLeapMonthPatternFormatWide,
00516 kLeapMonthPatternFormatAbbrev,
00517 kLeapMonthPatternFormatNarrow,
00518 kLeapMonthPatternStandaloneWide,
00519 kLeapMonthPatternStandaloneAbbrev,
00520 kLeapMonthPatternStandaloneNarrow,
00521 kLeapMonthPatternNumeric,
00522 kMonthPatternsCount
00523 };
00524
00537 const UnicodeString* getLeapMonthPatterns(int32_t& count) const;
00538
00539 #endif
00540
00541 #ifndef U_HIDE_DEPRECATED_API
00542
00549 const UnicodeString** getZoneStrings(int32_t& rowCount, int32_t& columnCount) const;
00550 #endif
00551
00563 void setZoneStrings(const UnicodeString* const* strings, int32_t rowCount, int32_t columnCount);
00564
00570 static const char16_t * U_EXPORT2 getPatternUChars(void);
00571
00582 UnicodeString& getLocalPatternChars(UnicodeString& result) const;
00583
00590 void setLocalPatternChars(const UnicodeString& newLocalPatternChars);
00591
00597 Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
00598
00599
00600
00605 enum ECapitalizationContextUsageType
00606 {
00607 #ifndef U_HIDE_INTERNAL_API
00608 kCapContextUsageOther = 0,
00609 kCapContextUsageMonthFormat,
00610 kCapContextUsageMonthStandalone,
00611 kCapContextUsageMonthNarrow,
00612 kCapContextUsageDayFormat,
00613 kCapContextUsageDayStandalone,
00614 kCapContextUsageDayNarrow,
00615 kCapContextUsageEraWide,
00616 kCapContextUsageEraAbbrev,
00617 kCapContextUsageEraNarrow,
00618 kCapContextUsageZoneLong,
00619 kCapContextUsageZoneShort,
00620 kCapContextUsageMetazoneLong,
00621 kCapContextUsageMetazoneShort,
00622 #endif
00623 kCapContextUsageTypeCount = 14
00624 };
00625
00631 virtual UClassID getDynamicClassID() const;
00632
00638 static UClassID U_EXPORT2 getStaticClassID();
00639
00640 private:
00641
00642 friend class SimpleDateFormat;
00643 friend class DateFormatSymbolsSingleSetter;
00644
00648 UnicodeString* fEras;
00649 int32_t fErasCount;
00650
00654 UnicodeString* fEraNames;
00655 int32_t fEraNamesCount;
00656
00660 UnicodeString* fNarrowEras;
00661 int32_t fNarrowErasCount;
00662
00666 UnicodeString* fMonths;
00667 int32_t fMonthsCount;
00668
00672 UnicodeString* fShortMonths;
00673 int32_t fShortMonthsCount;
00674
00678 UnicodeString* fNarrowMonths;
00679 int32_t fNarrowMonthsCount;
00680
00684 UnicodeString* fStandaloneMonths;
00685 int32_t fStandaloneMonthsCount;
00686
00690 UnicodeString* fStandaloneShortMonths;
00691 int32_t fStandaloneShortMonthsCount;
00692
00696 UnicodeString* fStandaloneNarrowMonths;
00697 int32_t fStandaloneNarrowMonthsCount;
00698
00702 UnicodeString* fWeekdays;
00703 int32_t fWeekdaysCount;
00704
00708 UnicodeString* fShortWeekdays;
00709 int32_t fShortWeekdaysCount;
00710
00714 UnicodeString* fShorterWeekdays;
00715 int32_t fShorterWeekdaysCount;
00716
00720 UnicodeString* fNarrowWeekdays;
00721 int32_t fNarrowWeekdaysCount;
00722
00726 UnicodeString* fStandaloneWeekdays;
00727 int32_t fStandaloneWeekdaysCount;
00728
00732 UnicodeString* fStandaloneShortWeekdays;
00733 int32_t fStandaloneShortWeekdaysCount;
00734
00738 UnicodeString* fStandaloneShorterWeekdays;
00739 int32_t fStandaloneShorterWeekdaysCount;
00740
00744 UnicodeString* fStandaloneNarrowWeekdays;
00745 int32_t fStandaloneNarrowWeekdaysCount;
00746
00750 UnicodeString* fAmPms;
00751 int32_t fAmPmsCount;
00752
00756 UnicodeString* fNarrowAmPms;
00757 int32_t fNarrowAmPmsCount;
00758
00762 UnicodeString fTimeSeparator;
00763
00767 UnicodeString *fQuarters;
00768 int32_t fQuartersCount;
00769
00773 UnicodeString *fShortQuarters;
00774 int32_t fShortQuartersCount;
00775
00779 UnicodeString *fStandaloneQuarters;
00780 int32_t fStandaloneQuartersCount;
00781
00785 UnicodeString *fStandaloneShortQuarters;
00786 int32_t fStandaloneShortQuartersCount;
00787
00791 UnicodeString *fLeapMonthPatterns;
00792 int32_t fLeapMonthPatternsCount;
00793
00799 UnicodeString *fShortYearNames;
00800 int32_t fShortYearNamesCount;
00801
00807 UnicodeString *fShortZodiacNames;
00808 int32_t fShortZodiacNamesCount;
00809
00847 UnicodeString **fZoneStrings;
00848 UnicodeString **fLocaleZoneStrings;
00849 int32_t fZoneStringsRowCount;
00850 int32_t fZoneStringsColCount;
00851
00852 Locale fZSFLocale;
00853
00857 UnicodeString fLocalPatternChars;
00858
00864 UBool fCapitalization[kCapContextUsageTypeCount][2];
00865
00869 UnicodeString *fAbbreviatedDayPeriods;
00870 int32_t fAbbreviatedDayPeriodsCount;
00871
00875 UnicodeString *fWideDayPeriods;
00876 int32_t fWideDayPeriodsCount;
00877
00881 UnicodeString *fNarrowDayPeriods;
00882 int32_t fNarrowDayPeriodsCount;
00883
00887 UnicodeString *fStandaloneAbbreviatedDayPeriods;
00888 int32_t fStandaloneAbbreviatedDayPeriodsCount;
00889
00893 UnicodeString *fStandaloneWideDayPeriods;
00894 int32_t fStandaloneWideDayPeriodsCount;
00895
00899 UnicodeString *fStandaloneNarrowDayPeriods;
00900 int32_t fStandaloneNarrowDayPeriodsCount;
00901
00902 private:
00906 char validLocale[ULOC_FULLNAME_CAPACITY];
00907 char actualLocale[ULOC_FULLNAME_CAPACITY];
00908
00909 DateFormatSymbols();
00910
00920 void initializeData(const Locale& locale, const char *type, UErrorCode& status, UBool useLastResortData = FALSE);
00921
00930 static void assignArray(UnicodeString*& dstArray,
00931 int32_t& dstCount,
00932 const UnicodeString* srcArray,
00933 int32_t srcCount);
00934
00945 static UBool arrayCompare(const UnicodeString* array1,
00946 const UnicodeString* array2,
00947 int32_t count);
00948
00954 void createZoneStrings(const UnicodeString *const * otherStrings);
00955
00959 void dispose(void);
00960
00965 void copyData(const DateFormatSymbols& other);
00966
00970 void initZoneStringsArray(void);
00971
00975 void disposeZoneStrings(void);
00976
00981 static UDateFormatField U_EXPORT2 getPatternCharIndex(char16_t c);
00982
00986 static UBool U_EXPORT2 isNumericField(UDateFormatField f, int32_t count);
00987
00991 static UBool U_EXPORT2 isNumericPatternChar(char16_t c, int32_t count);
00992 public:
00993 #ifndef U_HIDE_INTERNAL_API
00994
01005 static DateFormatSymbols * U_EXPORT2 createForLocale(
01006 const Locale &locale, UErrorCode &status);
01007 #endif
01008 };
01009
01010 U_NAMESPACE_END
01011
01012 #endif
01013
01014 #endif // _DTFMTSYM
01015