Index: source/i18n/unicode/smpdtfmt.h |
diff --git a/source/i18n/unicode/smpdtfmt.h b/source/i18n/unicode/smpdtfmt.h |
index 0ce2161efc5f0a81290fb2cbe0c960b5f0e8af2e..d41fb59f713ff9323885fb8c0e2468af1690b53e 100644 |
--- a/source/i18n/unicode/smpdtfmt.h |
+++ b/source/i18n/unicode/smpdtfmt.h |
@@ -1,5 +1,5 @@ |
/* |
-* Copyright (C) 1997-2013, International Business Machines Corporation and |
+* Copyright (C) 1997-2014, International Business Machines Corporation and |
* others. All Rights Reserved. |
******************************************************************************* |
* |
@@ -35,6 +35,8 @@ |
#include "unicode/datefmt.h" |
#include "unicode/udisplaycontext.h" |
+#include "unicode/tzfmt.h" /* for UTimeZoneFormatTimeType */ |
+#include "unicode/brkiter.h" |
U_NAMESPACE_BEGIN |
@@ -69,7 +71,8 @@ class TimeZoneFormat; |
* <a href="http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table">UTS#35 |
* Unicode Locale Data Markup Language (LDML)</a> and further documented for ICU in the |
* <a href="https://sites.google.com/site/icuprojectuserguide/formatparse/datetime?pli=1#TOC-Date-Field-Symbol-Table">ICU |
- * User Guide</a>. The following pattern letters are currently available:</p> |
+ * User Guide</a>. The following pattern letters are currently available (note that the actual |
+ * values depend on CLDR and may change from the examples shown here):</p> |
* |
* <table border="1"> |
* <tr> |
@@ -85,7 +88,7 @@ class TimeZoneFormat; |
* <td style="text-align: center">1..3</td> |
* <td>AD</td> |
* <td rowspan="3">Era - Replaced with the Era string for the current date. One to three letters for the |
- * abbreviated form, four letters for the long form, five for the narrow form.</td> |
+ * abbreviated form, four letters for the long (wide) form, five for the narrow form.</td> |
* </tr> |
* <tr> |
* <td style="text-align: center">4</td> |
@@ -180,7 +183,7 @@ class TimeZoneFormat; |
* <td>甲子</td> |
* <td rowspan="3">Cyclic year name. Calendars such as the Chinese lunar calendar (and related calendars) |
* and the Hindu calendars use 60-year cycles of year names. Use one through three letters for the abbreviated |
- * name, four for the full name, or five for the narrow name (currently the data only provides abbreviated names, |
+ * name, four for the full (wide) name, or five for the narrow name (currently the data only provides abbreviated names, |
* which will be used for all requested name widths). If the calendar does not provide cyclic year name data, |
* or if the year value to be formatted is out of the range of years for which cyclic name data is provided, |
* then numeric formatting is used (behaves like 'y').</td> |
@@ -198,8 +201,8 @@ class TimeZoneFormat; |
* <td rowspan="3" style="text-align: center">Q</td> |
* <td style="text-align: center">1..2</td> |
* <td>02</td> |
- * <td rowspan="3">Quarter - Use one or two for the numerical quarter, three for the abbreviation, or four |
- * for the full name.</td> |
+ * <td rowspan="3">Quarter - Use one or two for the numerical quarter, three for the abbreviation, or four for the |
+ * full (wide) name (five for the narrow name is not yet supported).</td> |
* </tr> |
* <tr> |
* <td style="text-align: center">3</td> |
@@ -214,7 +217,7 @@ class TimeZoneFormat; |
* <td style="text-align: center">1..2</td> |
* <td>02</td> |
* <td rowspan="3"><b>Stand-Alone</b> Quarter - Use one or two for the numerical quarter, three for the abbreviation, |
- * or four for the full name.</td> |
+ * or four for the full name (five for the narrow name is not yet supported).</td> |
* </tr> |
* <tr> |
* <td style="text-align: center">3</td> |
@@ -230,11 +233,12 @@ class TimeZoneFormat; |
* <td style="text-align: center">1..2</td> |
* <td>09</td> |
* <td rowspan="4">Month - Use one or two for the numerical month, three for the abbreviation, four for |
- * the full name, or five for the narrow name.</td> |
+ * the full (wide) name, or five for the narrow name. With two ("MM"), the month number is zero-padded |
+ * if necessary (e.g. "08")</td> |
* </tr> |
* <tr> |
* <td style="text-align: center">3</td> |
- * <td>Sept</td> |
+ * <td>Sep</td> |
* </tr> |
* <tr> |
* <td style="text-align: center">4</td> |
@@ -249,11 +253,12 @@ class TimeZoneFormat; |
* <td style="text-align: center">1..2</td> |
* <td>09</td> |
* <td rowspan="4"><b>Stand-Alone</b> Month - Use one or two for the numerical month, three for the abbreviation, |
- * or four for the full name, or 5 for the narrow name.</td> |
+ * four for the full (wide) name, or 5 for the narrow name. With two ("LL"), the month number is zero-padded if |
+ * necessary (e.g. "08")</td> |
* </tr> |
* <tr> |
* <td style="text-align: center">3</td> |
- * <td>Sept</td> |
+ * <td>Sep</td> |
* </tr> |
* <tr> |
* <td style="text-align: center">4</td> |
@@ -268,7 +273,8 @@ class TimeZoneFormat; |
* <td style="text-align: center">w</td> |
* <td style="text-align: center">1..2</td> |
* <td>27</td> |
- * <td>Week of Year.</td> |
+ * <td>Week of Year. Use "w" to show the minimum number of digits, or "ww" to always show two digits |
+ * (zero-padding if necessary, e.g. "08").</td> |
* </tr> |
* <tr> |
* <td style="text-align: center">W</td> |
@@ -281,7 +287,8 @@ class TimeZoneFormat; |
* <td style="text-align: center">d</td> |
* <td style="text-align: center">1..2</td> |
* <td>1</td> |
- * <td>Date - Day of the month</td> |
+ * <td>Date - Day of the month. Use "d" to show the minimum number of digits, or "dd" to always show |
+ * two digits (zero-padding if necessary, e.g. "08").</td> |
* </tr> |
* <tr> |
* <td style="text-align: center">D</td> |
@@ -309,8 +316,8 @@ class TimeZoneFormat; |
* day</th> |
* <td rowspan="4" style="text-align: center">E</td> |
* <td style="text-align: center">1..3</td> |
- * <td>Tues</td> |
- * <td rowspan="4">Day of week - Use one through three letters for the short day, or four for the full name, |
+ * <td>Tue</td> |
+ * <td rowspan="4">Day of week - Use one through three letters for the short day, four for the full (wide) name, |
* five for the narrow name, or six for the short name.</td> |
* </tr> |
* <tr> |
@@ -334,7 +341,7 @@ class TimeZoneFormat; |
* </tr> |
* <tr> |
* <td style="text-align: center">3</td> |
- * <td>Tues</td> |
+ * <td>Tue</td> |
* </tr> |
* <tr> |
* <td style="text-align: center">4</td> |
@@ -353,12 +360,12 @@ class TimeZoneFormat; |
* <td style="text-align: center">1</td> |
* <td>2</td> |
* <td rowspan="5"><b>Stand-Alone</b> local day of week - Use one letter for the local numeric value (same |
- * as 'e'), three for the short day, four for the full name, five for the narrow name, or six for |
+ * as 'e'), three for the short day, four for the full (wide) name, five for the narrow name, or six for |
* the short name.</td> |
* </tr> |
* <tr> |
* <td style="text-align: center">3</td> |
- * <td>Tues</td> |
+ * <td>Tue</td> |
* </tr> |
* <tr> |
* <td style="text-align: center">4</td> |
@@ -413,20 +420,23 @@ class TimeZoneFormat; |
* <td style="text-align: center">m</td> |
* <td style="text-align: center">1..2</td> |
* <td>59</td> |
- * <td>Minute. Use one or two for zero padding.</td> |
+ * <td>Minute. Use "m" to show the minimum number of digits, or "mm" to always show two digits |
+ * (zero-padding if necessary, e.g. "08").</td> |
* </tr> |
* <tr> |
* <th rowspan="3">second</th> |
* <td style="text-align: center">s</td> |
* <td style="text-align: center">1..2</td> |
* <td>12</td> |
- * <td>Second. Use one or two for zero padding.</td> |
+ * <td>Second. Use "s" to show the minimum number of digits, or "ss" to always show two digits |
+ * (zero-padding if necessary, e.g. "08").</td> |
* </tr> |
* <tr> |
* <td style="text-align: center">S</td> |
* <td style="text-align: center">1..n</td> |
- * <td>3456</td> |
- * <td>Fractional Second - truncates (like other time fields) to the count of letters. |
+ * <td>3450</td> |
+ * <td>Fractional Second - truncates (like other time fields) to the count of letters when formatting. |
+ * Appends zeros if more than 3 letters specified. Truncates at three significant digits when parsing. |
* (example shows display using pattern SSSS for seconds value 12.34567)</td> |
* </tr> |
* <tr> |
@@ -1083,31 +1093,6 @@ public: |
*/ |
virtual void adoptCalendar(Calendar* calendarToAdopt); |
- /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */ |
- /** |
- * Set a particular UDisplayContext value in the formatter, such as |
- * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. |
- * @param value The UDisplayContext value to set. |
- * @param status Input/output status. If at entry this indicates a failure |
- * status, the function will do nothing; otherwise this will be |
- * updated with any new status from the function. |
- * @draft ICU 51 |
- */ |
- virtual void setContext(UDisplayContext value, UErrorCode& status); |
- |
- /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */ |
- /** |
- * Get the formatter's UDisplayContext value for the specified UDisplayContextType, |
- * such as UDISPCTX_TYPE_CAPITALIZATION. |
- * @param type The UDisplayContextType whose value to return |
- * @param status Input/output status. If at entry this indicates a failure |
- * status, the function will do nothing; otherwise this will be |
- * updated with any new status from the function. |
- * @return The UDisplayContextValue for the specified type. |
- * @draft ICU 51 |
- */ |
- virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const; |
- |
/* Cannot use #ifndef U_HIDE_INTERNAL_API for the following methods since they are virtual */ |
/** |
* Sets the TimeZoneFormat to be used by this date/time formatter. |
@@ -1132,6 +1117,54 @@ public: |
*/ |
virtual const TimeZoneFormat* getTimeZoneFormat(void) const; |
+ /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */ |
+ /** |
+ * Set a particular UDisplayContext value in the formatter, such as |
+ * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. Note: For getContext, see |
+ * DateFormat. |
+ * @param value The UDisplayContext value to set. |
+ * @param status Input/output status. If at entry this indicates a failure |
+ * status, the function will do nothing; otherwise this will be |
+ * updated with any new status from the function. |
+ * @draft ICU 53 |
+ */ |
+ virtual void setContext(UDisplayContext value, UErrorCode& status); |
+ |
+#ifndef U_HIDE_DRAFT_API |
+ /** |
+ * Overrides base class method and |
+ * This method clears per field NumberFormat instances |
+ * previously set by {@see adoptNumberFormat(const UnicodeString&, NumberFormat*, UErrorCode)} |
+ * @param adoptNF the NumbeferFormat used |
+ * @draft ICU 54 |
+ */ |
+ void adoptNumberFormat(NumberFormat *formatToAdopt); |
+ |
+ /** |
+ * Allow the user to set the NumberFormat for several fields |
+ * It can be a single field like: "y"(year) or "M"(month) |
+ * It can be several field combined together: "yM"(year and month) |
+ * Note: |
+ * 1 symbol field is enough for multiple symbol field (so "y" will override "yy", "yyy") |
+ * If the field is not numeric, then override has no effect (like "MMM" will use abbreviation, not numerical field) |
+ * Per field NumberFormat can also be cleared in {@see DateFormat::setNumberFormat(const NumberFormat& newNumberFormat)} |
+ * |
+ * @param fields the fields to override(like y) |
+ * @param adoptNF the NumbeferFormat used |
+ * @param status Receives a status code, which will be U_ZERO_ERROR |
+ * if the operation succeeds. |
+ * @draft ICU 54 |
+ */ |
+ void adoptNumberFormat(const UnicodeString& fields, NumberFormat *formatToAdopt, UErrorCode &status); |
+ |
+ /** |
+ * Get the numbering system to be used for a particular field. |
+ * @param field The UDateFormatField to get |
+ * @draft ICU 54 |
+ */ |
+ const NumberFormat * getNumberFormatForField(UChar field) const; |
+#endif /* U_HIDE_DRAFT_API */ |
+ |
#ifndef U_HIDE_INTERNAL_API |
/** |
* This is for ICU internal use only. Please do not use. |
@@ -1176,6 +1209,8 @@ private: |
void initializeDefaultCentury(void); |
+ void initializeBooleanAttributes(void); |
+ |
SimpleDateFormat(); // default constructor not implemented |
/** |
@@ -1340,12 +1375,15 @@ private: |
* @param text the text being parsed |
* @param textOffset the starting offset into the text. On output |
* will be set to the offset of the character after the match |
- * @param lenient <code>TRUE</code> if the parse is lenient, <code>FALSE</code> otherwise. |
+ * @param whitespaceLenient <code>TRUE</code> if whitespace parse is lenient, <code>FALSE</code> otherwise. |
+ * @param partialMatchLenient <code>TRUE</code> if partial match parse is lenient, <code>FALSE</code> otherwise. |
+ * @param oldLeniency <code>TRUE</code> if old leniency control is lenient, <code>FALSE</code> otherwise. |
* |
* @return <code>TRUE</code> if the literal text could be matched, <code>FALSE</code> otherwise. |
*/ |
static UBool matchLiterals(const UnicodeString &pattern, int32_t &patternOffset, |
- const UnicodeString &text, int32_t &textOffset, UBool lenient); |
+ const UnicodeString &text, int32_t &textOffset, |
+ UBool whitespaceLenient, UBool partialMatchLenient, UBool oldLeniency); |
/** |
* Private member function that converts the parsed date strings into |
@@ -1362,12 +1400,14 @@ private: |
* into a date/time string. |
* @param patLoc |
* @param numericLeapMonthFormatter If non-null, used to parse numeric leap months. |
+ * @param tzTimeType the type of parsed time zone - standard, daylight or unknown (output). |
+ * This parameter can be NULL if caller does not need the information. |
* @return the new start position if matching succeeded; a negative number |
* indicating matching failure, otherwise. |
*/ |
int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count, |
UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], int32_t& saveHebrewMonth, Calendar& cal, |
- int32_t patLoc, MessageFormat * numericLeapMonthFormatter) const; |
+ int32_t patLoc, MessageFormat * numericLeapMonthFormatter, UTimeZoneFormatTimeType *tzTimeType) const; |
void parseInt(const UnicodeString& text, |
Formattable& number, |
@@ -1523,8 +1563,6 @@ private: |
*/ |
/*transient*/ int32_t fDefaultCenturyStartYear; |
- int32_t tztype; // here to avoid api change |
- |
typedef struct NSOverride { |
NumberFormat *nf; |
int32_t hash; |
@@ -1537,7 +1575,7 @@ private: |
UBool fHaveDefaultCentury; |
- UDisplayContext fCapitalizationContext; |
+ BreakIterator* fCapitalizationBrkIter; |
}; |
inline UDate |