|
ICU 73.2
73.2
|
00001 // © 2016 and later: Unicode, Inc. and others. 00002 // License & terms of use: http://www.unicode.org/copyright.html 00003 /* 00004 ******************************************************************************** 00005 * Copyright (C) 1997-2016, International Business Machines 00006 * Corporation and others. All Rights Reserved. 00007 ******************************************************************************** 00008 * 00009 * File DTFMTSYM.H 00010 * 00011 * Modification History: 00012 * 00013 * Date Name Description 00014 * 02/19/97 aliu Converted from java. 00015 * 07/21/98 stephen Added getZoneIndex() 00016 * Changed to match C++ conventions 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 /* forward declaration */ 00044 class SimpleDateFormat; 00045 class Hashtable; 00046 00084 class U_I18N_API DateFormatSymbols 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 /* U_HIDE_INTERNAL_API */ 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 /* U_HIDE_INTERNAL_API */ 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 /* U_HIDE_INTERNAL_API */ 00540 00541 #ifndef U_HIDE_DEPRECATED_API 00542 00549 const UnicodeString** getZoneStrings(int32_t& rowCount, int32_t& columnCount) const; 00550 #endif /* U_HIDE_DEPRECATED_API */ 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 /* The following type and kCapContextUsageTypeCount cannot be #ifndef U_HIDE_INTERNAL_API, 00600 they are needed for .h file declarations. */ 00605 enum ECapitalizationContextUsageType 00606 { 00607 #ifndef U_HIDE_INTERNAL_API 00608 kCapContextUsageOther = 0, 00609 kCapContextUsageMonthFormat, /* except narrow */ 00610 kCapContextUsageMonthStandalone, /* except narrow */ 00611 kCapContextUsageMonthNarrow, 00612 kCapContextUsageDayFormat, /* except narrow */ 00613 kCapContextUsageDayStandalone, /* except narrow */ 00614 kCapContextUsageDayNarrow, 00615 kCapContextUsageEraWide, 00616 kCapContextUsageEraAbbrev, 00617 kCapContextUsageEraNarrow, 00618 kCapContextUsageZoneLong, 00619 kCapContextUsageZoneShort, 00620 kCapContextUsageMetazoneLong, 00621 kCapContextUsageMetazoneShort, 00622 #endif /* U_HIDE_INTERNAL_API */ 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; // see udat.cpp 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; // Zone string array set by setZoneStrings 00862 UnicodeString **fLocaleZoneStrings; // Zone string array created by the locale 00863 int32_t fZoneStringsRowCount; 00864 int32_t fZoneStringsColCount; 00865 00866 Locale fZSFLocale; // Locale used for getting ZoneStringFormat 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() = delete; // default constructor not implemented 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 /* U_HIDE_INTERNAL_API */ 01023 }; 01024 01025 U_NAMESPACE_END 01026 01027 #endif /* #if !UCONFIG_NO_FORMATTING */ 01028 01029 #endif /* U_SHOW_CPLUSPLUS_API */ 01030 01031 #endif // _DTFMTSYM 01032 //eof
1.7.6.1