00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef DTFMTSYM_H
00019 #define DTFMTSYM_H
00020
00021 #include "unicode/utypes.h"
00022
00023 #if !UCONFIG_NO_FORMATTING
00024
00025 #include "unicode/calendar.h"
00026 #include "unicode/uobject.h"
00027 #include "unicode/locid.h"
00028 #include "unicode/udat.h"
00029 #include "unicode/ures.h"
00030
00036 U_NAMESPACE_BEGIN
00037
00038
00039 class SimpleDateFormat;
00040 class Hashtable;
00041
00079 class U_I18N_API DateFormatSymbols U_FINAL : public UObject {
00080 public:
00094 DateFormatSymbols(UErrorCode& status);
00095
00106 DateFormatSymbols(const Locale& locale,
00107 UErrorCode& status);
00108
00109 #ifndef U_HIDE_INTERNAL_API
00110
00126 DateFormatSymbols(const char *type, UErrorCode& status);
00127
00141 DateFormatSymbols(const Locale& locale,
00142 const char *type,
00143 UErrorCode& status);
00144 #endif
00145
00150 DateFormatSymbols(const DateFormatSymbols&);
00151
00156 DateFormatSymbols& operator=(const DateFormatSymbols&);
00157
00163 virtual ~DateFormatSymbols();
00164
00172 UBool operator==(const DateFormatSymbols& other) const;
00173
00181 UBool operator!=(const DateFormatSymbols& other) const { return !operator==(other); }
00182
00190 const UnicodeString* getEras(int32_t& count) const;
00191
00198 void setEras(const UnicodeString* eras, int32_t count);
00199
00207 const UnicodeString* getEraNames(int32_t& count) const;
00208
00215 void setEraNames(const UnicodeString* eraNames, int32_t count);
00216
00224 const UnicodeString* getNarrowEras(int32_t& count) const;
00225
00232 void setNarrowEras(const UnicodeString* narrowEras, int32_t count);
00233
00240 const UnicodeString* getMonths(int32_t& count) const;
00241
00249 void setMonths(const UnicodeString* months, int32_t count);
00250
00258 const UnicodeString* getShortMonths(int32_t& count) const;
00259
00266 void setShortMonths(const UnicodeString* shortMonths, int32_t count);
00267
00272 enum DtContextType {
00273 FORMAT,
00274 STANDALONE,
00275 DT_CONTEXT_COUNT
00276 };
00277
00282 enum DtWidthType {
00283 ABBREVIATED,
00284 WIDE,
00285 NARROW,
00290 SHORT,
00293 DT_WIDTH_COUNT = 4
00294 };
00295
00304 const UnicodeString* getMonths(int32_t& count, DtContextType context, DtWidthType width) const;
00305
00315 void setMonths(const UnicodeString* months, int32_t count, DtContextType context, DtWidthType width);
00316
00323 const UnicodeString* getWeekdays(int32_t& count) const;
00324
00325
00332 void setWeekdays(const UnicodeString* weekdays, int32_t count);
00333
00341 const UnicodeString* getShortWeekdays(int32_t& count) const;
00342
00350 void setShortWeekdays(const UnicodeString* abbrevWeekdays, int32_t count);
00351
00360 const UnicodeString* getWeekdays(int32_t& count, DtContextType context, DtWidthType width) const;
00361
00370 void setWeekdays(const UnicodeString* weekdays, int32_t count, DtContextType context, DtWidthType width);
00371
00381 const UnicodeString* getQuarters(int32_t& count, DtContextType context, DtWidthType width) const;
00382
00393 void setQuarters(const UnicodeString* quarters, int32_t count, DtContextType context, DtWidthType width);
00394
00401 const UnicodeString* getAmPmStrings(int32_t& count) const;
00402
00409 void setAmPmStrings(const UnicodeString* ampms, int32_t count);
00410
00411 #ifndef U_HIDE_INTERNAL_API
00412
00417 static const UChar DEFAULT_TIME_SEPARATOR = 0x003a;
00418
00423 static const UChar ALTERNATE_TIME_SEPARATOR = 0x002e;
00424
00431 UnicodeString& getTimeSeparatorString(UnicodeString& result) const;
00432
00438 void setTimeSeparatorString(const UnicodeString& newTimeSeparator);
00439 #endif
00440
00451 const UnicodeString* getYearNames(int32_t& count,
00452 DtContextType context, DtWidthType width) const;
00453
00463 void setYearNames(const UnicodeString* yearNames, int32_t count,
00464 DtContextType context, DtWidthType width);
00465
00476 const UnicodeString* getZodiacNames(int32_t& count,
00477 DtContextType context, DtWidthType width) const;
00478
00488 void setZodiacNames(const UnicodeString* zodiacNames, int32_t count,
00489 DtContextType context, DtWidthType width);
00490
00491 #ifndef U_HIDE_INTERNAL_API
00492
00500 enum EMonthPatternType
00501 {
00502 kLeapMonthPatternFormatWide,
00503 kLeapMonthPatternFormatAbbrev,
00504 kLeapMonthPatternFormatNarrow,
00505 kLeapMonthPatternStandaloneWide,
00506 kLeapMonthPatternStandaloneAbbrev,
00507 kLeapMonthPatternStandaloneNarrow,
00508 kLeapMonthPatternNumeric,
00509 kMonthPatternsCount
00510 };
00511
00524 const UnicodeString* getLeapMonthPatterns(int32_t& count) const;
00525
00526 #endif
00527
00528 #ifndef U_HIDE_DEPRECATED_API
00529
00536 const UnicodeString** getZoneStrings(int32_t& rowCount, int32_t& columnCount) const;
00537 #endif
00538
00550 void setZoneStrings(const UnicodeString* const* strings, int32_t rowCount, int32_t columnCount);
00551
00557 static const UChar * U_EXPORT2 getPatternUChars(void);
00558
00569 UnicodeString& getLocalPatternChars(UnicodeString& result) const;
00570
00577 void setLocalPatternChars(const UnicodeString& newLocalPatternChars);
00578
00584 Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
00585
00586
00587
00592 enum ECapitalizationContextUsageType
00593 {
00594 #ifndef U_HIDE_INTERNAL_API
00595 kCapContextUsageOther = 0,
00596 kCapContextUsageMonthFormat,
00597 kCapContextUsageMonthStandalone,
00598 kCapContextUsageMonthNarrow,
00599 kCapContextUsageDayFormat,
00600 kCapContextUsageDayStandalone,
00601 kCapContextUsageDayNarrow,
00602 kCapContextUsageEraWide,
00603 kCapContextUsageEraAbbrev,
00604 kCapContextUsageEraNarrow,
00605 kCapContextUsageZoneLong,
00606 kCapContextUsageZoneShort,
00607 kCapContextUsageMetazoneLong,
00608 kCapContextUsageMetazoneShort,
00609 #endif
00610 kCapContextUsageTypeCount = 14
00611 };
00612
00618 virtual UClassID getDynamicClassID() const;
00619
00625 static UClassID U_EXPORT2 getStaticClassID();
00626
00627 private:
00628
00629 friend class SimpleDateFormat;
00630 friend class DateFormatSymbolsSingleSetter;
00631
00635 UnicodeString* fEras;
00636 int32_t fErasCount;
00637
00641 UnicodeString* fEraNames;
00642 int32_t fEraNamesCount;
00643
00647 UnicodeString* fNarrowEras;
00648 int32_t fNarrowErasCount;
00649
00653 UnicodeString* fMonths;
00654 int32_t fMonthsCount;
00655
00659 UnicodeString* fShortMonths;
00660 int32_t fShortMonthsCount;
00661
00665 UnicodeString* fNarrowMonths;
00666 int32_t fNarrowMonthsCount;
00667
00671 UnicodeString* fStandaloneMonths;
00672 int32_t fStandaloneMonthsCount;
00673
00677 UnicodeString* fStandaloneShortMonths;
00678 int32_t fStandaloneShortMonthsCount;
00679
00683 UnicodeString* fStandaloneNarrowMonths;
00684 int32_t fStandaloneNarrowMonthsCount;
00685
00689 UnicodeString* fWeekdays;
00690 int32_t fWeekdaysCount;
00691
00695 UnicodeString* fShortWeekdays;
00696 int32_t fShortWeekdaysCount;
00697
00701 UnicodeString* fShorterWeekdays;
00702 int32_t fShorterWeekdaysCount;
00703
00707 UnicodeString* fNarrowWeekdays;
00708 int32_t fNarrowWeekdaysCount;
00709
00713 UnicodeString* fStandaloneWeekdays;
00714 int32_t fStandaloneWeekdaysCount;
00715
00719 UnicodeString* fStandaloneShortWeekdays;
00720 int32_t fStandaloneShortWeekdaysCount;
00721
00725 UnicodeString* fStandaloneShorterWeekdays;
00726 int32_t fStandaloneShorterWeekdaysCount;
00727
00731 UnicodeString* fStandaloneNarrowWeekdays;
00732 int32_t fStandaloneNarrowWeekdaysCount;
00733
00737 UnicodeString* fAmPms;
00738 int32_t fAmPmsCount;
00739
00743 UnicodeString* fNarrowAmPms;
00744 int32_t fNarrowAmPmsCount;
00745
00749 UnicodeString fTimeSeparator;
00750
00754 UnicodeString *fQuarters;
00755 int32_t fQuartersCount;
00756
00760 UnicodeString *fShortQuarters;
00761 int32_t fShortQuartersCount;
00762
00766 UnicodeString *fStandaloneQuarters;
00767 int32_t fStandaloneQuartersCount;
00768
00772 UnicodeString *fStandaloneShortQuarters;
00773 int32_t fStandaloneShortQuartersCount;
00774
00778 UnicodeString *fLeapMonthPatterns;
00779 int32_t fLeapMonthPatternsCount;
00780
00786 UnicodeString *fShortYearNames;
00787 int32_t fShortYearNamesCount;
00788
00794 UnicodeString *fShortZodiacNames;
00795 int32_t fShortZodiacNamesCount;
00796
00834 UnicodeString **fZoneStrings;
00835 UnicodeString **fLocaleZoneStrings;
00836 int32_t fZoneStringsRowCount;
00837 int32_t fZoneStringsColCount;
00838
00839 Locale fZSFLocale;
00840
00844 UnicodeString fLocalPatternChars;
00845
00851 UBool fCapitalization[kCapContextUsageTypeCount][2];
00852
00856 UnicodeString *fAbbreviatedDayPeriods;
00857 int32_t fAbbreviatedDayPeriodsCount;
00858
00862 UnicodeString *fWideDayPeriods;
00863 int32_t fWideDayPeriodsCount;
00864
00868 UnicodeString *fNarrowDayPeriods;
00869 int32_t fNarrowDayPeriodsCount;
00870
00874 UnicodeString *fStandaloneAbbreviatedDayPeriods;
00875 int32_t fStandaloneAbbreviatedDayPeriodsCount;
00876
00880 UnicodeString *fStandaloneWideDayPeriods;
00881 int32_t fStandaloneWideDayPeriodsCount;
00882
00886 UnicodeString *fStandaloneNarrowDayPeriods;
00887 int32_t fStandaloneNarrowDayPeriodsCount;
00888
00889 private:
00893 char validLocale[ULOC_FULLNAME_CAPACITY];
00894 char actualLocale[ULOC_FULLNAME_CAPACITY];
00895
00896 DateFormatSymbols();
00897
00907 void initializeData(const Locale& locale, const char *type, UErrorCode& status, UBool useLastResortData = FALSE);
00908
00917 static void assignArray(UnicodeString*& dstArray,
00918 int32_t& dstCount,
00919 const UnicodeString* srcArray,
00920 int32_t srcCount);
00921
00932 static UBool arrayCompare(const UnicodeString* array1,
00933 const UnicodeString* array2,
00934 int32_t count);
00935
00941 void createZoneStrings(const UnicodeString *const * otherStrings);
00942
00946 void dispose(void);
00947
00952 void copyData(const DateFormatSymbols& other);
00953
00957 void initZoneStringsArray(void);
00958
00962 void disposeZoneStrings(void);
00963
00968 static UDateFormatField U_EXPORT2 getPatternCharIndex(UChar c);
00969
00973 static UBool U_EXPORT2 isNumericField(UDateFormatField f, int32_t count);
00974
00978 static UBool U_EXPORT2 isNumericPatternChar(UChar c, int32_t count);
00979 public:
00980 #ifndef U_HIDE_INTERNAL_API
00981
00992 static DateFormatSymbols * U_EXPORT2 createForLocale(
00993 const Locale &locale, UErrorCode &status);
00994 #endif
00995 };
00996
00997 U_NAMESPACE_END
00998
00999 #endif
01000
01001 #endif // _DTFMTSYM
01002