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 UBool operator==(const DateFormatSymbols& other) const;
00178
00186 UBool 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
00396 const UnicodeString* getQuarters(int32_t& count, DtContextType context, DtWidthType width) const;
00397
00408 void setQuarters(const UnicodeString* quarters, int32_t count, DtContextType context, DtWidthType width);
00409
00416 const UnicodeString* getAmPmStrings(int32_t& count) const;
00417
00424 void setAmPmStrings(const UnicodeString* ampms, int32_t count);
00425
00426 #ifndef U_HIDE_INTERNAL_API
00427
00432 static const char16_t DEFAULT_TIME_SEPARATOR = 0x003a;
00433
00438 static const char16_t ALTERNATE_TIME_SEPARATOR = 0x002e;
00439
00446 UnicodeString& getTimeSeparatorString(UnicodeString& result) const;
00447
00453 void setTimeSeparatorString(const UnicodeString& newTimeSeparator);
00454 #endif
00455
00466 const UnicodeString* getYearNames(int32_t& count,
00467 DtContextType context, DtWidthType width) const;
00468
00478 void setYearNames(const UnicodeString* yearNames, int32_t count,
00479 DtContextType context, DtWidthType width);
00480
00491 const UnicodeString* getZodiacNames(int32_t& count,
00492 DtContextType context, DtWidthType width) const;
00493
00503 void setZodiacNames(const UnicodeString* zodiacNames, int32_t count,
00504 DtContextType context, DtWidthType width);
00505
00506 #ifndef U_HIDE_INTERNAL_API
00507
00515 enum EMonthPatternType
00516 {
00517 kLeapMonthPatternFormatWide,
00518 kLeapMonthPatternFormatAbbrev,
00519 kLeapMonthPatternFormatNarrow,
00520 kLeapMonthPatternStandaloneWide,
00521 kLeapMonthPatternStandaloneAbbrev,
00522 kLeapMonthPatternStandaloneNarrow,
00523 kLeapMonthPatternNumeric,
00524 kMonthPatternsCount
00525 };
00526
00539 const UnicodeString* getLeapMonthPatterns(int32_t& count) const;
00540
00541 #endif
00542
00543 #ifndef U_HIDE_DEPRECATED_API
00544
00551 const UnicodeString** getZoneStrings(int32_t& rowCount, int32_t& columnCount) const;
00552 #endif
00553
00565 void setZoneStrings(const UnicodeString* const* strings, int32_t rowCount, int32_t columnCount);
00566
00572 static const char16_t * U_EXPORT2 getPatternUChars(void);
00573
00584 UnicodeString& getLocalPatternChars(UnicodeString& result) const;
00585
00592 void setLocalPatternChars(const UnicodeString& newLocalPatternChars);
00593
00599 Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
00600
00601
00602
00607 enum ECapitalizationContextUsageType
00608 {
00609 #ifndef U_HIDE_INTERNAL_API
00610 kCapContextUsageOther = 0,
00611 kCapContextUsageMonthFormat,
00612 kCapContextUsageMonthStandalone,
00613 kCapContextUsageMonthNarrow,
00614 kCapContextUsageDayFormat,
00615 kCapContextUsageDayStandalone,
00616 kCapContextUsageDayNarrow,
00617 kCapContextUsageEraWide,
00618 kCapContextUsageEraAbbrev,
00619 kCapContextUsageEraNarrow,
00620 kCapContextUsageZoneLong,
00621 kCapContextUsageZoneShort,
00622 kCapContextUsageMetazoneLong,
00623 kCapContextUsageMetazoneShort,
00624 #endif
00625 kCapContextUsageTypeCount = 14
00626 };
00627
00633 virtual UClassID getDynamicClassID() const;
00634
00640 static UClassID U_EXPORT2 getStaticClassID();
00641
00642 private:
00643
00644 friend class SimpleDateFormat;
00645 friend class DateFormatSymbolsSingleSetter;
00646
00650 UnicodeString* fEras;
00651 int32_t fErasCount;
00652
00656 UnicodeString* fEraNames;
00657 int32_t fEraNamesCount;
00658
00662 UnicodeString* fNarrowEras;
00663 int32_t fNarrowErasCount;
00664
00668 UnicodeString* fMonths;
00669 int32_t fMonthsCount;
00670
00674 UnicodeString* fShortMonths;
00675 int32_t fShortMonthsCount;
00676
00680 UnicodeString* fNarrowMonths;
00681 int32_t fNarrowMonthsCount;
00682
00686 UnicodeString* fStandaloneMonths;
00687 int32_t fStandaloneMonthsCount;
00688
00692 UnicodeString* fStandaloneShortMonths;
00693 int32_t fStandaloneShortMonthsCount;
00694
00698 UnicodeString* fStandaloneNarrowMonths;
00699 int32_t fStandaloneNarrowMonthsCount;
00700
00704 UnicodeString* fWeekdays;
00705 int32_t fWeekdaysCount;
00706
00710 UnicodeString* fShortWeekdays;
00711 int32_t fShortWeekdaysCount;
00712
00716 UnicodeString* fShorterWeekdays;
00717 int32_t fShorterWeekdaysCount;
00718
00722 UnicodeString* fNarrowWeekdays;
00723 int32_t fNarrowWeekdaysCount;
00724
00728 UnicodeString* fStandaloneWeekdays;
00729 int32_t fStandaloneWeekdaysCount;
00730
00734 UnicodeString* fStandaloneShortWeekdays;
00735 int32_t fStandaloneShortWeekdaysCount;
00736
00740 UnicodeString* fStandaloneShorterWeekdays;
00741 int32_t fStandaloneShorterWeekdaysCount;
00742
00746 UnicodeString* fStandaloneNarrowWeekdays;
00747 int32_t fStandaloneNarrowWeekdaysCount;
00748
00752 UnicodeString* fAmPms;
00753 int32_t fAmPmsCount;
00754
00758 UnicodeString* fNarrowAmPms;
00759 int32_t fNarrowAmPmsCount;
00760
00764 UnicodeString fTimeSeparator;
00765
00769 UnicodeString *fQuarters;
00770 int32_t fQuartersCount;
00771
00775 UnicodeString *fShortQuarters;
00776 int32_t fShortQuartersCount;
00777
00781 UnicodeString *fStandaloneQuarters;
00782 int32_t fStandaloneQuartersCount;
00783
00787 UnicodeString *fStandaloneShortQuarters;
00788 int32_t fStandaloneShortQuartersCount;
00789
00793 UnicodeString *fLeapMonthPatterns;
00794 int32_t fLeapMonthPatternsCount;
00795
00801 UnicodeString *fShortYearNames;
00802 int32_t fShortYearNamesCount;
00803
00809 UnicodeString *fShortZodiacNames;
00810 int32_t fShortZodiacNamesCount;
00811
00849 UnicodeString **fZoneStrings;
00850 UnicodeString **fLocaleZoneStrings;
00851 int32_t fZoneStringsRowCount;
00852 int32_t fZoneStringsColCount;
00853
00854 Locale fZSFLocale;
00855
00859 UnicodeString fLocalPatternChars;
00860
00866 UBool fCapitalization[kCapContextUsageTypeCount][2];
00867
00871 UnicodeString *fAbbreviatedDayPeriods;
00872 int32_t fAbbreviatedDayPeriodsCount;
00873
00877 UnicodeString *fWideDayPeriods;
00878 int32_t fWideDayPeriodsCount;
00879
00883 UnicodeString *fNarrowDayPeriods;
00884 int32_t fNarrowDayPeriodsCount;
00885
00889 UnicodeString *fStandaloneAbbreviatedDayPeriods;
00890 int32_t fStandaloneAbbreviatedDayPeriodsCount;
00891
00895 UnicodeString *fStandaloneWideDayPeriods;
00896 int32_t fStandaloneWideDayPeriodsCount;
00897
00901 UnicodeString *fStandaloneNarrowDayPeriods;
00902 int32_t fStandaloneNarrowDayPeriodsCount;
00903
00904 private:
00908 char validLocale[ULOC_FULLNAME_CAPACITY];
00909 char actualLocale[ULOC_FULLNAME_CAPACITY];
00910
00911 DateFormatSymbols();
00912
00922 void initializeData(const Locale& locale, const char *type, UErrorCode& status, UBool useLastResortData = FALSE);
00923
00932 static void assignArray(UnicodeString*& dstArray,
00933 int32_t& dstCount,
00934 const UnicodeString* srcArray,
00935 int32_t srcCount);
00936
00947 static UBool arrayCompare(const UnicodeString* array1,
00948 const UnicodeString* array2,
00949 int32_t count);
00950
00956 void createZoneStrings(const UnicodeString *const * otherStrings);
00957
00961 void dispose(void);
00962
00967 void copyData(const DateFormatSymbols& other);
00968
00972 void initZoneStringsArray(void);
00973
00977 void disposeZoneStrings(void);
00978
00983 static UDateFormatField U_EXPORT2 getPatternCharIndex(char16_t c);
00984
00988 static UBool U_EXPORT2 isNumericField(UDateFormatField f, int32_t count);
00989
00993 static UBool U_EXPORT2 isNumericPatternChar(char16_t c, int32_t count);
00994 public:
00995 #ifndef U_HIDE_INTERNAL_API
00996
01007 static DateFormatSymbols * U_EXPORT2 createForLocale(
01008 const Locale &locale, UErrorCode &status);
01009 #endif
01010 };
01011
01012 U_NAMESPACE_END
01013
01014 #endif
01015
01016 #endif
01017
01018 #endif // _DTFMTSYM
01019