ICU 73.2  73.2
dtfmtsym.h
Go to the documentation of this file.
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