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 U_SHOW_CPLUSPLUS_API
00026
00027 #if !UCONFIG_NO_FORMATTING
00028
00029 #include "unicode/calendar.h"
00030 #include "unicode/strenum.h"
00031 #include "unicode/uobject.h"
00032 #include "unicode/locid.h"
00033 #include "unicode/udat.h"
00034 #include "unicode/ures.h"
00035
00041 U_NAMESPACE_BEGIN
00042
00043
00044 class SimpleDateFormat;
00045 class Hashtable;
00046
00084 class U_I18N_API DateFormatSymbols U_FINAL : public UObject {
00085 public:
00099 DateFormatSymbols(UErrorCode& status);
00100
00111 DateFormatSymbols(const Locale& locale,
00112 UErrorCode& status);
00113
00114 #ifndef U_HIDE_INTERNAL_API
00115
00131 DateFormatSymbols(const char *type, UErrorCode& status);
00132
00146 DateFormatSymbols(const Locale& locale,
00147 const char *type,
00148 UErrorCode& status);
00149 #endif
00150
00155 DateFormatSymbols(const DateFormatSymbols&);
00156
00161 DateFormatSymbols& operator=(const DateFormatSymbols&);
00162
00168 virtual ~DateFormatSymbols();
00169
00177 bool operator==(const DateFormatSymbols& other) const;
00178
00186 bool operator!=(const DateFormatSymbols& other) const { return !operator==(other); }
00187
00195 const UnicodeString* getEras(int32_t& count) const;
00196
00203 void setEras(const UnicodeString* eras, int32_t count);
00204
00212 const UnicodeString* getEraNames(int32_t& count) const;
00213
00220 void setEraNames(const UnicodeString* eraNames, int32_t count);
00221
00229 const UnicodeString* getNarrowEras(int32_t& count) const;
00230
00237 void setNarrowEras(const UnicodeString* narrowEras, int32_t count);
00238
00245 const UnicodeString* getMonths(int32_t& count) const;
00246
00254 void setMonths(const UnicodeString* months, int32_t count);
00255
00263 const UnicodeString* getShortMonths(int32_t& count) const;
00264
00271 void setShortMonths(const UnicodeString* shortMonths, int32_t count);
00272
00277 enum DtContextType {
00278 FORMAT,
00279 STANDALONE,
00280 #ifndef U_HIDE_DEPRECATED_API
00281
00285 DT_CONTEXT_COUNT
00286 #endif // U_HIDE_DEPRECATED_API
00287 };
00288
00293 enum DtWidthType {
00294 ABBREVIATED,
00295 WIDE,
00296 NARROW,
00301 SHORT,
00302 #ifndef U_HIDE_DEPRECATED_API
00303
00307 DT_WIDTH_COUNT = 4
00308 #endif // U_HIDE_DEPRECATED_API
00309 };
00310
00319 const UnicodeString* getMonths(int32_t& count, DtContextType context, DtWidthType width) const;
00320
00330 void setMonths(const UnicodeString* months, int32_t count, DtContextType context, DtWidthType width);
00331
00338 const UnicodeString* getWeekdays(int32_t& count) const;
00339
00340
00347 void setWeekdays(const UnicodeString* weekdays, int32_t count);
00348
00356 const UnicodeString* getShortWeekdays(int32_t& count) const;
00357
00365 void setShortWeekdays(const UnicodeString* abbrevWeekdays, int32_t count);
00366
00375 const UnicodeString* getWeekdays(int32_t& count, DtContextType context, DtWidthType width) const;
00376
00385 void setWeekdays(const UnicodeString* weekdays, int32_t count, DtContextType context, DtWidthType width);
00386
00395 const UnicodeString* getQuarters(int32_t& count, DtContextType context, DtWidthType width) const;
00396
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 override;
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
00780 UnicodeString *fNarrowQuarters;
00781 int32_t fNarrowQuartersCount;
00782
00786 UnicodeString *fStandaloneQuarters;
00787 int32_t fStandaloneQuartersCount;
00788
00792 UnicodeString *fStandaloneShortQuarters;
00793 int32_t fStandaloneShortQuartersCount;
00794
00799 UnicodeString *fStandaloneNarrowQuarters;
00800 int32_t fStandaloneNarrowQuartersCount;
00801
00805 UnicodeString *fLeapMonthPatterns;
00806 int32_t fLeapMonthPatternsCount;
00807
00813 UnicodeString *fShortYearNames;
00814 int32_t fShortYearNamesCount;
00815
00821 UnicodeString *fShortZodiacNames;
00822 int32_t fShortZodiacNamesCount;
00823
00861 UnicodeString **fZoneStrings;
00862 UnicodeString **fLocaleZoneStrings;
00863 int32_t fZoneStringsRowCount;
00864 int32_t fZoneStringsColCount;
00865
00866 Locale fZSFLocale;
00867
00871 UnicodeString fLocalPatternChars;
00872
00878 UBool fCapitalization[kCapContextUsageTypeCount][2];
00879
00883 UnicodeString *fAbbreviatedDayPeriods;
00884 int32_t fAbbreviatedDayPeriodsCount;
00885
00889 UnicodeString *fWideDayPeriods;
00890 int32_t fWideDayPeriodsCount;
00891
00895 UnicodeString *fNarrowDayPeriods;
00896 int32_t fNarrowDayPeriodsCount;
00897
00901 UnicodeString *fStandaloneAbbreviatedDayPeriods;
00902 int32_t fStandaloneAbbreviatedDayPeriodsCount;
00903
00907 UnicodeString *fStandaloneWideDayPeriods;
00908 int32_t fStandaloneWideDayPeriodsCount;
00909
00913 UnicodeString *fStandaloneNarrowDayPeriods;
00914 int32_t fStandaloneNarrowDayPeriodsCount;
00915
00916 private:
00920 char validLocale[ULOC_FULLNAME_CAPACITY];
00921 char actualLocale[ULOC_FULLNAME_CAPACITY];
00922
00923 DateFormatSymbols();
00924
00934 void initializeData(const Locale& locale, const char *type,
00935 UErrorCode& status, UBool useLastResortData = false);
00936
00945 static void assignArray(UnicodeString*& dstArray,
00946 int32_t& dstCount,
00947 const UnicodeString* srcArray,
00948 int32_t srcCount);
00949
00960 static UBool arrayCompare(const UnicodeString* array1,
00961 const UnicodeString* array2,
00962 int32_t count);
00963
00969 void createZoneStrings(const UnicodeString *const * otherStrings);
00970
00974 void dispose(void);
00975
00980 void copyData(const DateFormatSymbols& other);
00981
00985 void initZoneStringsArray(void);
00986
00990 void disposeZoneStrings(void);
00991
00996 static UDateFormatField U_EXPORT2 getPatternCharIndex(char16_t c);
00997
01001 static UBool U_EXPORT2 isNumericField(UDateFormatField f, int32_t count);
01002
01006 static UBool U_EXPORT2 isNumericPatternChar(char16_t c, int32_t count);
01007 public:
01008 #ifndef U_HIDE_INTERNAL_API
01009
01020 static DateFormatSymbols * U_EXPORT2 createForLocale(
01021 const Locale &locale, UErrorCode &status);
01022 #endif
01023 };
01024
01025 U_NAMESPACE_END
01026
01027 #endif
01028
01029 #endif
01030
01031 #endif // _DTFMTSYM
01032