+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
-* Copyright (C) 2007-2009, International Business Machines Corporation and *
+* Copyright (C) 2007-2016, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
#include "unicode/utypes.h"
/**
- * \file
+ * \file
* \brief C++ API: Format and parse relative dates and times.
*/
-
+
#if !UCONFIG_NO_FORMATTING
#include "unicode/datefmt.h"
+#include "unicode/smpdtfmt.h"
+#include "unicode/brkiter.h"
U_NAMESPACE_BEGIN
// forward declarations
-class MessageFormat;
+class DateFormatSymbols;
+class SimpleFormatter;
// internal structure used for caching strings
struct URelativeString;
/**
- * This class is normally accessed using the kRelative or k...Relative values of EStyle as parameters to DateFormat::createDateInstance.
- *
- * Example:
+ * This class is normally accessed using the kRelative or k...Relative values of EStyle as
+ * parameters to DateFormat::createDateInstance.
+ *
+ * Example:
* DateFormat *fullrelative = DateFormat::createDateInstance(DateFormat::kFullRelative, loc);
- *
- * @draft ICU 3.8
+ *
+ * @internal ICU 3.8
*/
class RelativeDateFormat : public DateFormat {
// overrides
/**
* Copy constructor.
- * @draft ICU 3.8
+ * @internal ICU 3.8
*/
RelativeDateFormat(const RelativeDateFormat&);
/**
* Assignment operator.
- * @draft ICU 3.8
+ * @internal ICU 3.8
*/
RelativeDateFormat& operator=(const RelativeDateFormat&);
/**
* Destructor.
- * @draft ICU 3.8
+ * @internal ICU 3.8
*/
virtual ~RelativeDateFormat();
* Clone this Format object polymorphically. The caller owns the result and
* should delete it when done.
* @return A copy of the object.
- * @draft ICU 3.8
+ * @internal ICU 3.8
*/
virtual Format* clone(void) const;
* of different subclasses are considered unequal.
* @param other the object to be compared with.
* @return true if the given Format objects are semantically equal.
- * @draft ICU 3.8
+ * @internal ICU 3.8
*/
virtual UBool operator==(const Format& other) const;
+
+ using DateFormat::format;
+
/**
* Format a date or time, which is the standard millis since 24:00 GMT, Jan
* 1, 1970. Overrides DateFormat pure virtual method.
* @param pos The formatting position. On input: an alignment field,
* if desired. On output: the offsets of the alignment field.
* @return Reference to 'appendTo' parameter.
- * @draft ICU 3.8
+ * @internal ICU 3.8
*/
virtual UnicodeString& format( Calendar& cal,
UnicodeString& appendTo,
* On output: the offsets of the alignment field.
* @param status Output param filled with success/failure status.
* @return Reference to 'appendTo' parameter.
- * @draft ICU 3.8
+ * @internal ICU 3.8
*/
virtual UnicodeString& format(const Formattable& obj,
UnicodeString& appendTo,
* output, the position at which parsing terminated, or the
* start position if the parse failed.
* @return A valid UDate if the input could be parsed.
- * @draft ICU 3.8
+ * @internal ICU 3.8
*/
virtual void parse( const UnicodeString& text,
Calendar& cal,
- ParsePosition& pos) const;
+ ParsePosition& pos) const;
/**
* Parse a date/time string starting at the given parse position. For
* output, the position at which parsing terminated, or the
* start position if the parse failed.
* @return A valid UDate if the input could be parsed.
- * @draft ICU 3.8
+ * @internal ICU 3.8
*/
UDate parse( const UnicodeString& text,
ParsePosition& pos) const;
* @param status Filled in with U_ZERO_ERROR if the parse was successful, and with
* an error value if there was a parse error.
* @return A valid UDate if the input could be parsed.
- * @draft ICU 3.8
+ * @internal ICU 3.8
*/
virtual UDate parse( const UnicodeString& text,
UErrorCode& status) const;
*/
virtual void applyPatterns(const UnicodeString& datePattern, const UnicodeString& timePattern, UErrorCode &status);
+ /**
+ * Gets the date/time formatting symbols (this is an object carrying
+ * the various strings and other symbols used in formatting: e.g., month
+ * names and abbreviations, time zone names, AM/PM strings, etc.)
+ * @return a copy of the date-time formatting data associated
+ * with this date-time formatter.
+ * @internal ICU 4.8
+ */
+ virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
+
+ /**
+ * 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.
+ * @internal ICU 53
+ */
+ virtual void setContext(UDisplayContext value, UErrorCode& status);
private:
- DateFormat *fDateFormat; // the held date format
- DateFormat *fTimeFormat; // the held time format
- MessageFormat *fCombinedFormat; // the {0} {1} format.
-
+ SimpleDateFormat *fDateTimeFormatter;
+ UnicodeString fDatePattern;
+ UnicodeString fTimePattern;
+ SimpleFormatter *fCombinedFormat; // the {0} {1} format.
+
UDateFormatStyle fDateStyle;
- UDateFormatStyle fTimeStyle;
Locale fLocale;
-
- int32_t fDayMin; // day id of lowest #
- int32_t fDayMax; // day id of highest #
+
int32_t fDatesLen; // Length of array
URelativeString *fDates; // array of strings
-
-
+
+ UBool fCombinedHasDateAtStart;
+ UBool fCapitalizationInfoSet;
+ UBool fCapitalizationOfRelativeUnitsForUIListMenu;
+ UBool fCapitalizationOfRelativeUnitsForStandAlone;
+#if !UCONFIG_NO_BREAK_ITERATION
+ BreakIterator* fCapitalizationBrkIter;
+#else
+ UObject* fCapitalizationBrkIter;
+#endif
+
/**
* Get the string at a specific offset.
* @param day day offset ( -1, 0, 1, etc.. )
- * @param len on output, length of string.
+ * @param len on output, length of string.
* @return the string, or NULL if none at that location.
*/
const UChar *getStringForDay(int32_t day, int32_t &len, UErrorCode &status) const;
-
- /**
+
+ /**
* Load the Date string array
*/
void loadDates(UErrorCode &status);
-
+
+ /**
+ * Set fCapitalizationOfRelativeUnitsForUIListMenu, fCapitalizationOfRelativeUnitsForStandAlone
+ */
+ void initCapitalizationContextInfo(const Locale& thelocale);
+
/**
* @return the number of days in "until-now"
*/
static int32_t dayDifference(Calendar &until, UErrorCode &status);
-
+
/**
* initializes fCalendar from parameters. Returns fCalendar as a convenience.
* @param adoptZone Zone to be adopted, or NULL for TimeZone::createDefault().
* @param locale Locale of the calendar
* @param status Error code
* @return the newly constructed fCalendar
- * @draft ICU 3.8
+ * @internal ICU 3.8
*/
Calendar* initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status);
-
+
public:
/**
* Return the class ID for this class. This is useful only for comparing to
* . erived::getStaticClassID()) ...
* </pre>
* @return The class ID for all objects of this class.
- * @draft ICU 3.8
+ * @internal ICU 3.8
*/
U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void);
* @return The class ID for this object. All objects of a
* given class have the same class ID. Objects of
* other classes have different class IDs.
- * @draft ICU 3.8
+ * @internal ICU 3.8
*/
virtual UClassID getDynamicClassID(void) const;
+
+ /**
+ * Apple addition
+ * This is for ICU internal use only. Please do not use.
+ * Get the capitalization break iterator of this relative date formatter.
+ * Should be cloned before using it.
+ * It is used in udat.
+ *
+ * @return capitalization break iterator
+ * @internal
+ */
+ BreakIterator* getCapitalizationBrkIter(void) const;
};
+inline BreakIterator*
+RelativeDateFormat::getCapitalizationBrkIter() const
+{
+ return fCapitalizationBrkIter;
+}
U_NAMESPACE_END
#endif /* #if !UCONFIG_NO_FORMATTING */
#endif // RELDTFMT_H
-//eof