Index: source/i18n/unicode/ureldatefmt.h |
diff --git a/source/i18n/unicode/ureldatefmt.h b/source/i18n/unicode/ureldatefmt.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..40b3d593110c98d5b993023cce7c10f740a3f383 |
--- /dev/null |
+++ b/source/i18n/unicode/ureldatefmt.h |
@@ -0,0 +1,371 @@ |
+// Copyright (C) 2016 and later: Unicode, Inc. and others. |
+// License & terms of use: http://www.unicode.org/copyright.html |
+/* |
+***************************************************************************************** |
+* Copyright (C) 2016, International Business Machines |
+* Corporation and others. All Rights Reserved. |
+***************************************************************************************** |
+*/ |
+ |
+#ifndef URELDATEFMT_H |
+#define URELDATEFMT_H |
+ |
+#include "unicode/utypes.h" |
+ |
+#if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION |
+ |
+#include "unicode/unum.h" |
+#include "unicode/udisplaycontext.h" |
+#include "unicode/localpointer.h" |
+ |
+/** |
+ * \file |
+ * \brief C API: URelativeDateTimeFormatter, relative date formatting of unit + numeric offset. |
+ * |
+ * Provides simple formatting of relative dates, in two ways |
+ * <ul> |
+ * <li>relative dates with a quantity e.g "in 5 days"</li> |
+ * <li>relative dates without a quantity e.g "next Tuesday"</li> |
+ * </ul> |
+ * <p> |
+ * This does not provide compound formatting for multiple units, |
+ * other than the ability to combine a time string with a relative date, |
+ * as in "next Tuesday at 3:45 PM". It also does not provide support |
+ * for determining which unit to use, such as deciding between "in 7 days" |
+ * and "in 1 week". |
+ * |
+ * @draft ICU 57 |
+ */ |
+ |
+/** |
+ * The formatting style |
+ * @stable ICU 54 |
+ */ |
+typedef enum UDateRelativeDateTimeFormatterStyle { |
+ /** |
+ * Everything spelled out. |
+ * @stable ICU 54 |
+ */ |
+ UDAT_STYLE_LONG, |
+ |
+ /** |
+ * Abbreviations used when possible. |
+ * @stable ICU 54 |
+ */ |
+ UDAT_STYLE_SHORT, |
+ |
+ /** |
+ * Use the shortest possible form. |
+ * @stable ICU 54 |
+ */ |
+ UDAT_STYLE_NARROW, |
+ |
+#ifndef U_HIDE_DEPRECATED_API |
+ /** |
+ * One more than the highest normal UDateRelativeDateTimeFormatterStyle value. |
+ * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. |
+ */ |
+ UDAT_STYLE_COUNT |
+#endif // U_HIDE_DEPRECATED_API |
+} UDateRelativeDateTimeFormatterStyle; |
+ |
+#ifndef U_HIDE_DRAFT_API |
+/** |
+ * Represents the unit for formatting a relative date. e.g "in 5 days" |
+ * or "next year" |
+ * @draft ICU 57 |
+ */ |
+typedef enum URelativeDateTimeUnit { |
+ /** |
+ * Specifies that relative unit is year, e.g. "last year", |
+ * "in 5 years". |
+ * @draft ICU 57 |
+ */ |
+ UDAT_REL_UNIT_YEAR, |
+ /** |
+ * Specifies that relative unit is quarter, e.g. "last quarter", |
+ * "in 5 quarters". |
+ * @draft ICU 57 |
+ */ |
+ UDAT_REL_UNIT_QUARTER, |
+ /** |
+ * Specifies that relative unit is month, e.g. "last month", |
+ * "in 5 months". |
+ * @draft ICU 57 |
+ */ |
+ UDAT_REL_UNIT_MONTH, |
+ /** |
+ * Specifies that relative unit is week, e.g. "last week", |
+ * "in 5 weeks". |
+ * @draft ICU 57 |
+ */ |
+ UDAT_REL_UNIT_WEEK, |
+ /** |
+ * Specifies that relative unit is day, e.g. "yesterday", |
+ * "in 5 days". |
+ * @draft ICU 57 |
+ */ |
+ UDAT_REL_UNIT_DAY, |
+ /** |
+ * Specifies that relative unit is hour, e.g. "1 hour ago", |
+ * "in 5 hours". |
+ * @draft ICU 57 |
+ */ |
+ UDAT_REL_UNIT_HOUR, |
+ /** |
+ * Specifies that relative unit is minute, e.g. "1 minute ago", |
+ * "in 5 minutes". |
+ * @draft ICU 57 |
+ */ |
+ UDAT_REL_UNIT_MINUTE, |
+ /** |
+ * Specifies that relative unit is second, e.g. "1 second ago", |
+ * "in 5 seconds". |
+ * @draft ICU 57 |
+ */ |
+ UDAT_REL_UNIT_SECOND, |
+ /** |
+ * Specifies that relative unit is Sunday, e.g. "last Sunday", |
+ * "this Sunday", "next Sunday", "in 5 Sundays". |
+ * @draft ICU 57 |
+ */ |
+ UDAT_REL_UNIT_SUNDAY, |
+ /** |
+ * Specifies that relative unit is Monday, e.g. "last Monday", |
+ * "this Monday", "next Monday", "in 5 Mondays". |
+ * @draft ICU 57 |
+ */ |
+ UDAT_REL_UNIT_MONDAY, |
+ /** |
+ * Specifies that relative unit is Tuesday, e.g. "last Tuesday", |
+ * "this Tuesday", "next Tuesday", "in 5 Tuesdays". |
+ * @draft ICU 57 |
+ */ |
+ UDAT_REL_UNIT_TUESDAY, |
+ /** |
+ * Specifies that relative unit is Wednesday, e.g. "last Wednesday", |
+ * "this Wednesday", "next Wednesday", "in 5 Wednesdays". |
+ * @draft ICU 57 |
+ */ |
+ UDAT_REL_UNIT_WEDNESDAY, |
+ /** |
+ * Specifies that relative unit is Thursday, e.g. "last Thursday", |
+ * "this Thursday", "next Thursday", "in 5 Thursdays". |
+ * @draft ICU 57 |
+ */ |
+ UDAT_REL_UNIT_THURSDAY, |
+ /** |
+ * Specifies that relative unit is Friday, e.g. "last Friday", |
+ * "this Friday", "next Friday", "in 5 Fridays". |
+ * @draft ICU 57 |
+ */ |
+ UDAT_REL_UNIT_FRIDAY, |
+ /** |
+ * Specifies that relative unit is Saturday, e.g. "last Saturday", |
+ * "this Saturday", "next Saturday", "in 5 Saturdays". |
+ * @draft ICU 57 |
+ */ |
+ UDAT_REL_UNIT_SATURDAY, |
+#ifndef U_HIDE_DEPRECATED_API |
+ /** |
+ * One more than the highest normal URelativeDateTimeUnit value. |
+ * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. |
+ */ |
+ UDAT_REL_UNIT_COUNT |
+#endif // U_HIDE_DEPRECATED_API |
+} URelativeDateTimeUnit; |
+#endif /* U_HIDE_DRAFT_API */ |
+ |
+#ifndef U_HIDE_DRAFT_API |
+ |
+/** |
+ * Opaque URelativeDateTimeFormatter object for use in C programs. |
+ * @draft ICU 57 |
+ */ |
+struct URelativeDateTimeFormatter; |
+typedef struct URelativeDateTimeFormatter URelativeDateTimeFormatter; /**< C typedef for struct URelativeDateTimeFormatter. @draft ICU 57 */ |
+ |
+ |
+/** |
+ * Open a new URelativeDateTimeFormatter object for a given locale using the |
+ * specified width and capitalizationContext, along with a number formatter |
+ * (if desired) to override the default formatter that would be used for |
+ * display of numeric field offsets. The default formatter typically rounds |
+ * toward 0 and has a minimum of 0 fraction digits and a maximum of 3 |
+ * fraction digits (i.e. it will show as many decimal places as necessary |
+ * up to 3, without showing trailing 0s). |
+ * |
+ * @param locale |
+ * The locale |
+ * @param nfToAdopt |
+ * A number formatter to set for this URelativeDateTimeFormatter |
+ * object (instead of the default decimal formatter). Ownership of |
+ * this UNumberFormat object will pass to the URelativeDateTimeFormatter |
+ * object (the URelativeDateTimeFormatter adopts the UNumberFormat), |
+ * which becomes responsible for closing it. If the caller wishes to |
+ * retain ownership of the UNumberFormat object, the caller must clone |
+ * it (with unum_clone) and pass the clone to ureldatefmt_open. May be |
+ * NULL to use the default decimal formatter. |
+ * @param width |
+ * The width - wide, short, narrow, etc. |
+ * @param capitalizationContext |
+ * A value from UDisplayContext that pertains to capitalization, e.g. |
+ * UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE. |
+ * @param status |
+ * A pointer to a UErrorCode to receive any errors. |
+ * @return |
+ * A pointer to a URelativeDateTimeFormatter object for the specified locale, |
+ * or NULL if an error occurred. |
+ * @draft ICU 57 |
+ */ |
+U_DRAFT URelativeDateTimeFormatter* U_EXPORT2 |
+ureldatefmt_open( const char* locale, |
+ UNumberFormat* nfToAdopt, |
+ UDateRelativeDateTimeFormatterStyle width, |
+ UDisplayContext capitalizationContext, |
+ UErrorCode* status ); |
+ |
+/** |
+ * Close a URelativeDateTimeFormatter object. Once closed it may no longer be used. |
+ * @param reldatefmt |
+ * The URelativeDateTimeFormatter object to close. |
+ * @draft ICU 57 |
+ */ |
+U_DRAFT void U_EXPORT2 |
+ureldatefmt_close(URelativeDateTimeFormatter *reldatefmt); |
+ |
+#if U_SHOW_CPLUSPLUS_API |
+ |
+U_NAMESPACE_BEGIN |
+ |
+/** |
+ * \class LocalURelativeDateTimeFormatterPointer |
+ * "Smart pointer" class, closes a URelativeDateTimeFormatter via ureldatefmt_close(). |
+ * For most methods see the LocalPointerBase base class. |
+ * |
+ * @see LocalPointerBase |
+ * @see LocalPointer |
+ * @draft ICU 57 |
+ */ |
+U_DEFINE_LOCAL_OPEN_POINTER(LocalURelativeDateTimeFormatterPointer, URelativeDateTimeFormatter, ureldatefmt_close); |
+ |
+U_NAMESPACE_END |
+ |
+#endif |
+ |
+/** |
+ * Format a combination of URelativeDateTimeUnit and numeric |
+ * offset using a numeric style, e.g. "1 week ago", "in 1 week", |
+ * "5 weeks ago", "in 5 weeks". |
+ * |
+ * @param reldatefmt |
+ * The URelativeDateTimeFormatter object specifying the |
+ * format conventions. |
+ * @param offset |
+ * The signed offset for the specified unit. This will |
+ * be formatted according to this object's UNumberFormat |
+ * object. |
+ * @param unit |
+ * The unit to use when formatting the relative |
+ * date, e.g. UDAT_REL_UNIT_WEEK, UDAT_REL_UNIT_FRIDAY. |
+ * @param result |
+ * A pointer to a buffer to receive the formatted result. |
+ * @param resultCapacity |
+ * The maximum size of result. |
+ * @param status |
+ * A pointer to a UErrorCode to receive any errors. In |
+ * case of error status, the contents of result are |
+ * undefined. |
+ * @return |
+ * The length of the formatted result; may be greater |
+ * than resultCapacity, in which case an error is returned. |
+ * @draft ICU 57 |
+ */ |
+U_DRAFT int32_t U_EXPORT2 |
+ureldatefmt_formatNumeric( const URelativeDateTimeFormatter* reldatefmt, |
+ double offset, |
+ URelativeDateTimeUnit unit, |
+ UChar* result, |
+ int32_t resultCapacity, |
+ UErrorCode* status); |
+ |
+/** |
+ * Format a combination of URelativeDateTimeUnit and numeric offset |
+ * using a text style if possible, e.g. "last week", "this week", |
+ * "next week", "yesterday", "tomorrow". Falls back to numeric |
+ * style if no appropriate text term is available for the specified |
+ * offset in the object's locale. |
+ * |
+ * @param reldatefmt |
+ * The URelativeDateTimeFormatter object specifying the |
+ * format conventions. |
+ * @param offset |
+ * The signed offset for the specified unit. |
+ * @param unit |
+ * The unit to use when formatting the relative |
+ * date, e.g. UDAT_REL_UNIT_WEEK, UDAT_REL_UNIT_FRIDAY. |
+ * @param result |
+ * A pointer to a buffer to receive the formatted result. |
+ * @param resultCapacity |
+ * The maximum size of result. |
+ * @param status |
+ * A pointer to a UErrorCode to receive any errors. In |
+ * case of error status, the contents of result are |
+ * undefined. |
+ * @return |
+ * The length of the formatted result; may be greater |
+ * than resultCapacity, in which case an error is returned. |
+ * @draft ICU 57 |
+ */ |
+U_DRAFT int32_t U_EXPORT2 |
+ureldatefmt_format( const URelativeDateTimeFormatter* reldatefmt, |
+ double offset, |
+ URelativeDateTimeUnit unit, |
+ UChar* result, |
+ int32_t resultCapacity, |
+ UErrorCode* status); |
+ |
+/** |
+ * Combines a relative date string and a time string in this object's |
+ * locale. This is done with the same date-time separator used for the |
+ * default calendar in this locale to produce a result such as |
+ * "yesterday at 3:45 PM". |
+ * |
+ * @param reldatefmt |
+ * The URelativeDateTimeFormatter object specifying the format conventions. |
+ * @param relativeDateString |
+ * The relative date string. |
+ * @param relativeDateStringLen |
+ * The length of relativeDateString; may be -1 if relativeDateString |
+ * is zero-terminated. |
+ * @param timeString |
+ * The time string. |
+ * @param timeStringLen |
+ * The length of timeString; may be -1 if timeString is zero-terminated. |
+ * @param result |
+ * A pointer to a buffer to receive the formatted result. |
+ * @param resultCapacity |
+ * The maximum size of result. |
+ * @param status |
+ * A pointer to a UErrorCode to receive any errors. In case of error status, |
+ * the contents of result are undefined. |
+ * @return |
+ * The length of the formatted result; may be greater than resultCapacity, |
+ * in which case an error is returned. |
+ * @draft ICU 57 |
+ */ |
+U_DRAFT int32_t U_EXPORT2 |
+ureldatefmt_combineDateAndTime( const URelativeDateTimeFormatter* reldatefmt, |
+ const UChar * relativeDateString, |
+ int32_t relativeDateStringLen, |
+ const UChar * timeString, |
+ int32_t timeStringLen, |
+ UChar* result, |
+ int32_t resultCapacity, |
+ UErrorCode* status ); |
+ |
+#endif /* U_HIDE_DRAFT_API */ |
+ |
+#endif /* !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION */ |
+ |
+#endif |