]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/i18n/unicode/dtfmtsym.h
ICU-64232.0.1.tar.gz
[apple/icu.git] / icuSources / i18n / unicode / dtfmtsym.h
index 36b07446a4c36714061d367c604eab97384cfcb5..c2c12dab0d1a3ec07ae5ad90b2f98d44f3ebb865 100644 (file)
@@ -1,6 +1,8 @@
-/*  
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
 ********************************************************************************
-*   Copyright (C) 1997-2014, International Business Machines
+*   Copyright (C) 1997-2016, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 ********************************************************************************
 *
 *                            Changed to match C++ conventions
 ********************************************************************************
 */
-     
+
 #ifndef DTFMTSYM_H
 #define DTFMTSYM_H
+
 #include "unicode/utypes.h"
 
 #if !UCONFIG_NO_FORMATTING
 
 #include "unicode/calendar.h"
+#include "unicode/strenum.h"
 #include "unicode/uobject.h"
 #include "unicode/locid.h"
 #include "unicode/udat.h"
 #include "unicode/ures.h"
 
 /**
- * \file 
+ * \file
  * \brief C++ API: Symbols for formatting dates.
  */
 
+#if U_SHOW_CPLUSPLUS_API
 U_NAMESPACE_BEGIN
 
 /* forward declaration */
@@ -76,7 +80,7 @@ class Hashtable;
  * locale at least contains any resources that are to be particularized for the
  * calendar type.
  */
-class U_I18N_API DateFormatSymbols : public UObject {
+class U_I18N_API DateFormatSymbols U_FINAL : public UObject  {
 public:
     /**
      * Construct a DateFormatSymbols object by loading format data from
@@ -115,7 +119,7 @@ public:
      * data for the default locale, it will return a last-resort object
      * based on hard-coded strings.
      *
-     * @param type      Type of calendar (as returned by Calendar::getType). 
+     * @param type      Type of calendar (as returned by Calendar::getType).
      *                  Will be used to access the correct set of strings.
      *                  (NULL or empty string defaults to "gregorian".)
      * @param status    Status code.  Failure
@@ -130,7 +134,7 @@ public:
      * resources for the given locale, in the default calendar (Gregorian).
      *
      * @param locale    Locale to load format data from.
-     * @param type      Type of calendar (as returned by Calendar::getType). 
+     * @param type      Type of calendar (as returned by Calendar::getType).
      *                  Will be used to access the correct set of strings.
      *                  (NULL or empty string defaults to "gregorian".)
      * @param status    Status code.  Failure
@@ -270,9 +274,15 @@ public:
      * @stable ICU 3.6
      */
     enum DtContextType {
-         FORMAT,
-         STANDALONE,
-         DT_CONTEXT_COUNT
+        FORMAT,
+        STANDALONE,
+#ifndef U_HIDE_DEPRECATED_API
+        /**
+         * One more than the highest normal DtContextType value.
+         * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
+         */
+        DT_CONTEXT_COUNT
+#endif  // U_HIDE_DEPRECATED_API
     };
 
     /**
@@ -280,17 +290,21 @@ public:
      * @stable ICU 3.6
      */
     enum DtWidthType {
-         ABBREVIATED,
-         WIDE,
-         NARROW,
-         /**
-          * Short width is currently only supported for weekday names.
-          * @stable ICU 51
-          */
-         SHORT,
-         /**
-          */
-         DT_WIDTH_COUNT = 4
+        ABBREVIATED,
+        WIDE,
+        NARROW,
+        /**
+         * Short width is currently only supported for weekday names.
+         * @stable ICU 51
+         */
+        SHORT,
+#ifndef U_HIDE_DEPRECATED_API
+        /**
+         * One more than the highest normal DtWidthType value.
+         * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
+         */
+        DT_WIDTH_COUNT = 4
+#endif  // U_HIDE_DEPRECATED_API
     };
 
     /**
@@ -408,6 +422,86 @@ public:
      */
     void setAmPmStrings(const UnicodeString* ampms, int32_t count);
 
+#ifndef U_HIDE_INTERNAL_API
+    /**
+     * This default time separator is used for formatting when the locale
+     * doesn't specify any time separator, and always recognized when parsing.
+     * @internal
+     */
+    static const char16_t DEFAULT_TIME_SEPARATOR = 0x003a;  // ':'
+
+    /**
+     * This alternate time separator is always recognized when parsing.
+     * @internal
+     */
+    static const char16_t ALTERNATE_TIME_SEPARATOR = 0x002e;  // '.'
+
+    /**
+     * Gets the time separator string. For example: ":".
+     * @param result Output param which will receive the time separator string.
+     * @return       A reference to 'result'.
+     * @internal
+     */
+    UnicodeString& getTimeSeparatorString(UnicodeString& result) const;
+
+    /**
+     * Sets the time separator string. For example: ":".
+     * @param newTimeSeparator the new time separator string.
+     * @internal
+     */
+    void setTimeSeparatorString(const UnicodeString& newTimeSeparator);
+#endif  /* U_HIDE_INTERNAL_API */
+
+    /**
+     * Gets cyclic year name strings if the calendar has them, by width and context.
+     * For example: "jia-zi", "yi-chou", etc.
+     * @param count     Filled in with length of the array.
+     * @param context   The usage context: FORMAT, STANDALONE.
+     * @param width     The requested name width: WIDE, ABBREVIATED, NARROW.
+     * @return          The year name strings (DateFormatSymbols retains ownership),
+     *                  or null if they are not available for this calendar.
+     * @stable ICU 54
+     */
+    const UnicodeString* getYearNames(int32_t& count,
+                            DtContextType context, DtWidthType width) const;
+
+    /**
+     * Sets cyclic year name strings by width and context. For example: "jia-zi", "yi-chou", etc.
+     *
+     * @param yearNames The new cyclic year name strings (not adopted; caller retains ownership).
+     * @param count     The length of the array.
+     * @param context   The usage context: FORMAT, STANDALONE (currently only FORMAT is supported).
+     * @param width     The name width: WIDE, ABBREVIATED, NARROW (currently only ABBREVIATED is supported).
+     * @stable ICU 54
+     */
+    void setYearNames(const UnicodeString* yearNames, int32_t count,
+                            DtContextType context, DtWidthType width);
+
+    /**
+     * Gets calendar zodiac name strings if the calendar has them, by width and context.
+     * For example: "Rat", "Ox", "Tiger", etc.
+     * @param count     Filled in with length of the array.
+     * @param context   The usage context: FORMAT, STANDALONE.
+     * @param width     The requested name width: WIDE, ABBREVIATED, NARROW.
+     * @return          The zodiac name strings (DateFormatSymbols retains ownership),
+     *                  or null if they are not available for this calendar.
+     * @stable ICU 54
+     */
+    const UnicodeString* getZodiacNames(int32_t& count,
+                            DtContextType context, DtWidthType width) const;
+
+    /**
+     * Sets calendar zodiac name strings by width and context. For example: "Rat", "Ox", "Tiger", etc.
+     *
+     * @param zodiacNames The new zodiac name strings (not adopted; caller retains ownership).
+     * @param count     The length of the array.
+     * @param context   The usage context: FORMAT, STANDALONE (currently only FORMAT is supported).
+     * @param width     The name width: WIDE, ABBREVIATED, NARROW (currently only ABBREVIATED is supported).
+     * @stable ICU 54
+     */
+    void setZodiacNames(const UnicodeString* zodiacNames, int32_t count,
+                            DtContextType context, DtWidthType width);
+
 #ifndef U_HIDE_INTERNAL_API
     /**
      * Somewhat temporary constants for leap month pattern types, adequate for supporting
@@ -443,16 +537,6 @@ public:
      */
     const UnicodeString* getLeapMonthPatterns(int32_t& count) const;
 
-    /**
-     * Apple addition to get zodiac names. Returns NULL if calendar
-     * does not have zodiac names. Note, there is currently no setter for this.
-     * @param count        Filled in with length of the array (may be 0).
-     * @return             The zodiac names (DateFormatSymbols retains ownership).
-     *                     May be NULL if there are no zodiac names for this calendar.
-     * @internal
-     */
-    const UnicodeString* getZodiacNames(int32_t& count) const;
-
 #endif  /* U_HIDE_INTERNAL_API */
 
 #ifndef U_HIDE_DEPRECATED_API
@@ -484,7 +568,7 @@ public:
      * @return    the non-localized date-time pattern characters
      * @stable ICU 2.0
      */
-    static const UChar * U_EXPORT2 getPatternUChars(void);
+    static const char16_t * U_EXPORT2 getPatternUChars(void);
 
     /**
      * Gets localized date-time pattern characters. For example: 'u', 't', etc.
@@ -667,6 +751,17 @@ private:
     UnicodeString*  fAmPms;
     int32_t         fAmPmsCount;
 
+    /**
+     * Narrow Ampm strings. For example: "a" and "p".
+     */
+    UnicodeString*  fNarrowAmPms;
+    int32_t         fNarrowAmPmsCount;
+
+    /**
+     * Time separator string. For example: ":".
+     */
+    UnicodeString   fTimeSeparator;
+
     /**
      * Quarter strings. For example: "1st quarter", "2nd quarter", etc.
      */
@@ -698,15 +793,19 @@ private:
     int32_t         fLeapMonthPatternsCount;
 
     /**
-     * (Format) Short cyclic year names, for example: "jia-zi", "yi-chou", ... "gui-hai"
+     * Cyclic year names, for example: "jia-zi", "yi-chou", ... "gui-hai";
+     * currently we only have data for format/abbreviated.
+     * For the others, just get from format/abbreviated, ignore set.
      */
-    UnicodeString*  fShortYearNames;
+    UnicodeString  *fShortYearNames;
     int32_t         fShortYearNamesCount;
 
     /**
-     * (Format) Short cyclic zodiac names - Apple addition for now
+     * Cyclic zodiac names, for example "Rat", "Ox", "Tiger", etc.;
+     * currently we only have data for format/abbreviated.
+     * For the others, just get from format/abbreviated, ignore set.
      */
-    UnicodeString*  fShortZodiacNames;
+    UnicodeString  *fShortZodiacNames;
     int32_t         fShortZodiacNamesCount;
 
     /**
@@ -765,6 +864,42 @@ private:
      */
      UBool fCapitalization[kCapContextUsageTypeCount][2];
 
+    /**
+     * Abbreviated (== short) day period strings.
+     */
+    UnicodeString  *fAbbreviatedDayPeriods;
+    int32_t         fAbbreviatedDayPeriodsCount;
+
+    /**
+     * Wide day period strings.
+     */
+    UnicodeString  *fWideDayPeriods;
+    int32_t         fWideDayPeriodsCount;
+
+    /**
+     * Narrow day period strings.
+     */
+    UnicodeString  *fNarrowDayPeriods;
+    int32_t         fNarrowDayPeriodsCount;
+
+    /**
+     * Stand-alone abbreviated (== short) day period strings.
+     */
+    UnicodeString  *fStandaloneAbbreviatedDayPeriods;
+    int32_t         fStandaloneAbbreviatedDayPeriodsCount;
+
+    /**
+     * Stand-alone wide day period strings.
+     */
+    UnicodeString  *fStandaloneWideDayPeriods;
+    int32_t         fStandaloneWideDayPeriodsCount;
+
+    /**
+     * Stand-alone narrow day period strings.
+     */
+    UnicodeString  *fStandaloneNarrowDayPeriods;
+    int32_t         fStandaloneNarrowDayPeriodsCount;
+
 private:
     /** valid/actual locale information 
      *  these are always ICU locales, so the length should not be a problem
@@ -844,7 +979,7 @@ private:
      * Returns the date format field index of the pattern character c,
      * or UDAT_FIELD_COUNT if c is not a pattern character.
      */
-    static UDateFormatField U_EXPORT2 getPatternCharIndex(UChar c);
+    static UDateFormatField U_EXPORT2 getPatternCharIndex(char16_t c);
 
     /**
      * Returns TRUE if f (with its pattern character repeated count times) is a numeric field.
@@ -854,10 +989,43 @@ private:
     /**
      * Returns TRUE if c (repeated count times) is the pattern character for a numeric field.
      */
-    static UBool U_EXPORT2 isNumericPatternChar(UChar c, int32_t count);
+    static UBool U_EXPORT2 isNumericPatternChar(char16_t c, int32_t count);
+public:
+#ifndef U_HIDE_INTERNAL_API
+    /**
+     * Gets a DateFormatSymbols by locale.
+     * Unlike the constructors which always use gregorian calendar, this
+     * method uses the calendar in the locale. If the locale contains no
+     * explicit calendar, this method uses the default calendar for that
+     * locale.
+     * @param locale the locale.
+     * @param status error returned here.
+     * @return the new DateFormatSymbols which the caller owns.
+     * @internal For ICU use only.
+     */
+    static DateFormatSymbols * U_EXPORT2 createForLocale(
+            const Locale &locale, UErrorCode &status);
+
+    /**
+     * Apple addition
+     * Get whether to capitalize based on usage.
+     * @param usage the usage.
+     * @param context 0 for menu, 1 for standalone
+     * @return TRUE to capitalize, FALSE otherwise
+     * @internal For ICU use only.
+     */
+    UBool capitalizeForUsage(ECapitalizationContextUsageType usage, int32_t context) const;
+#endif  /* U_HIDE_INTERNAL_API */
 };
 
+inline UBool
+DateFormatSymbols::capitalizeForUsage(DateFormatSymbols::ECapitalizationContextUsageType usage, int32_t context) const
+{
+    return fCapitalization[usage][context];
+}
+
 U_NAMESPACE_END
+#endif // U_SHOW_CPLUSPLUS_API
 
 #endif /* #if !UCONFIG_NO_FORMATTING */