|
ICU 73.2
73.2
|
00001 // © 2016 and later: Unicode, Inc. and others. 00002 // License & terms of use: http://www.unicode.org/copyright.html 00003 /* 00004 ***************************************************************************** 00005 * Copyright (C) 2014-2016, International Business Machines Corporation and 00006 * others. 00007 * All Rights Reserved. 00008 ***************************************************************************** 00009 * 00010 * File RELDATEFMT.H 00011 ***************************************************************************** 00012 */ 00013 00014 #ifndef __RELDATEFMT_H 00015 #define __RELDATEFMT_H 00016 00017 #include "unicode/utypes.h" 00018 00019 #if U_SHOW_CPLUSPLUS_API 00020 00021 #include "unicode/uobject.h" 00022 #include "unicode/udisplaycontext.h" 00023 #include "unicode/ureldatefmt.h" 00024 #include "unicode/locid.h" 00025 #include "unicode/formattedvalue.h" 00026 00032 #if !UCONFIG_NO_FORMATTING 00033 00039 typedef enum UDateRelativeUnit { 00040 00045 UDAT_RELATIVE_SECONDS, 00046 00051 UDAT_RELATIVE_MINUTES, 00052 00057 UDAT_RELATIVE_HOURS, 00058 00063 UDAT_RELATIVE_DAYS, 00064 00069 UDAT_RELATIVE_WEEKS, 00070 00075 UDAT_RELATIVE_MONTHS, 00076 00081 UDAT_RELATIVE_YEARS, 00082 00083 #ifndef U_HIDE_DEPRECATED_API 00084 00088 UDAT_RELATIVE_UNIT_COUNT 00089 #endif // U_HIDE_DEPRECATED_API 00090 } UDateRelativeUnit; 00091 00096 typedef enum UDateAbsoluteUnit { 00097 00098 // Days of week have to remain together and in order from Sunday to 00099 // Saturday. 00104 UDAT_ABSOLUTE_SUNDAY, 00105 00110 UDAT_ABSOLUTE_MONDAY, 00111 00116 UDAT_ABSOLUTE_TUESDAY, 00117 00122 UDAT_ABSOLUTE_WEDNESDAY, 00123 00128 UDAT_ABSOLUTE_THURSDAY, 00129 00134 UDAT_ABSOLUTE_FRIDAY, 00135 00140 UDAT_ABSOLUTE_SATURDAY, 00141 00146 UDAT_ABSOLUTE_DAY, 00147 00152 UDAT_ABSOLUTE_WEEK, 00153 00158 UDAT_ABSOLUTE_MONTH, 00159 00164 UDAT_ABSOLUTE_YEAR, 00165 00170 UDAT_ABSOLUTE_NOW, 00171 00176 UDAT_ABSOLUTE_QUARTER, 00177 00182 UDAT_ABSOLUTE_HOUR, 00183 00188 UDAT_ABSOLUTE_MINUTE, 00189 00190 #ifndef U_HIDE_DEPRECATED_API 00191 00195 UDAT_ABSOLUTE_UNIT_COUNT = UDAT_ABSOLUTE_NOW + 4 00196 #endif // U_HIDE_DEPRECATED_API 00197 } UDateAbsoluteUnit; 00198 00204 typedef enum UDateDirection { 00205 00210 UDAT_DIRECTION_LAST_2, 00211 00216 UDAT_DIRECTION_LAST, 00217 00222 UDAT_DIRECTION_THIS, 00223 00228 UDAT_DIRECTION_NEXT, 00229 00234 UDAT_DIRECTION_NEXT_2, 00235 00240 UDAT_DIRECTION_PLAIN, 00241 00242 #ifndef U_HIDE_DEPRECATED_API 00243 00247 UDAT_DIRECTION_COUNT 00248 #endif // U_HIDE_DEPRECATED_API 00249 } UDateDirection; 00250 00251 #if !UCONFIG_NO_BREAK_ITERATION 00252 00253 U_NAMESPACE_BEGIN 00254 00255 class BreakIterator; 00256 class RelativeDateTimeCacheData; 00257 class SharedNumberFormat; 00258 class SharedPluralRules; 00259 class SharedBreakIterator; 00260 class NumberFormat; 00261 class UnicodeString; 00262 class FormattedRelativeDateTime; 00263 class FormattedRelativeDateTimeData; 00264 00274 class U_I18N_API FormattedRelativeDateTime : public UMemory, public FormattedValue { 00275 public: 00280 FormattedRelativeDateTime() : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {} 00281 00286 FormattedRelativeDateTime(FormattedRelativeDateTime&& src) noexcept; 00287 00292 virtual ~FormattedRelativeDateTime() override; 00293 00295 FormattedRelativeDateTime(const FormattedRelativeDateTime&) = delete; 00296 00298 FormattedRelativeDateTime& operator=(const FormattedRelativeDateTime&) = delete; 00299 00304 FormattedRelativeDateTime& operator=(FormattedRelativeDateTime&& src) noexcept; 00305 00307 UnicodeString toString(UErrorCode& status) const override; 00308 00310 UnicodeString toTempString(UErrorCode& status) const override; 00311 00313 Appendable &appendTo(Appendable& appendable, UErrorCode& status) const override; 00314 00316 UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const override; 00317 00318 private: 00319 FormattedRelativeDateTimeData *fData; 00320 UErrorCode fErrorCode; 00321 explicit FormattedRelativeDateTime(FormattedRelativeDateTimeData *results) 00322 : fData(results), fErrorCode(U_ZERO_ERROR) {} 00323 explicit FormattedRelativeDateTime(UErrorCode errorCode) 00324 : fData(nullptr), fErrorCode(errorCode) {} 00325 friend class RelativeDateTimeFormatter; 00326 }; 00327 00396 class U_I18N_API RelativeDateTimeFormatter : public UObject { 00397 public: 00398 00403 RelativeDateTimeFormatter(UErrorCode& status); 00404 00409 RelativeDateTimeFormatter(const Locale& locale, UErrorCode& status); 00410 00421 RelativeDateTimeFormatter( 00422 const Locale& locale, NumberFormat *nfToAdopt, UErrorCode& status); 00423 00439 RelativeDateTimeFormatter( 00440 const Locale& locale, 00441 NumberFormat *nfToAdopt, 00442 UDateRelativeDateTimeFormatterStyle style, 00443 UDisplayContext capitalizationContext, 00444 UErrorCode& status); 00445 00450 RelativeDateTimeFormatter(const RelativeDateTimeFormatter& other); 00451 00456 RelativeDateTimeFormatter& operator=( 00457 const RelativeDateTimeFormatter& other); 00458 00463 virtual ~RelativeDateTimeFormatter(); 00464 00484 UnicodeString& format( 00485 double quantity, 00486 UDateDirection direction, 00487 UDateRelativeUnit unit, 00488 UnicodeString& appendTo, 00489 UErrorCode& status) const; 00490 00508 FormattedRelativeDateTime formatToValue( 00509 double quantity, 00510 UDateDirection direction, 00511 UDateRelativeUnit unit, 00512 UErrorCode& status) const; 00513 00530 UnicodeString& format( 00531 UDateDirection direction, 00532 UDateAbsoluteUnit unit, 00533 UnicodeString& appendTo, 00534 UErrorCode& status) const; 00535 00551 FormattedRelativeDateTime formatToValue( 00552 UDateDirection direction, 00553 UDateAbsoluteUnit unit, 00554 UErrorCode& status) const; 00555 00576 UnicodeString& formatNumeric( 00577 double offset, 00578 URelativeDateTimeUnit unit, 00579 UnicodeString& appendTo, 00580 UErrorCode& status) const; 00581 00600 FormattedRelativeDateTime formatNumericToValue( 00601 double offset, 00602 URelativeDateTimeUnit unit, 00603 UErrorCode& status) const; 00604 00625 UnicodeString& format( 00626 double offset, 00627 URelativeDateTimeUnit unit, 00628 UnicodeString& appendTo, 00629 UErrorCode& status) const; 00630 00649 FormattedRelativeDateTime formatToValue( 00650 double offset, 00651 URelativeDateTimeUnit unit, 00652 UErrorCode& status) const; 00653 00666 UnicodeString& combineDateAndTime( 00667 const UnicodeString& relativeDateString, 00668 const UnicodeString& timeString, 00669 UnicodeString& appendTo, 00670 UErrorCode& status) const; 00671 00677 const NumberFormat& getNumberFormat() const; 00678 00684 UDisplayContext getCapitalizationContext() const; 00685 00691 UDateRelativeDateTimeFormatterStyle getFormatStyle() const; 00692 00693 private: 00694 const RelativeDateTimeCacheData* fCache; 00695 const SharedNumberFormat *fNumberFormat; 00696 const SharedPluralRules *fPluralRules; 00697 UDateRelativeDateTimeFormatterStyle fStyle; 00698 UDisplayContext fContext; 00699 const SharedBreakIterator *fOptBreakIterator; 00700 Locale fLocale; 00701 void init( 00702 NumberFormat *nfToAdopt, 00703 BreakIterator *brkIter, 00704 UErrorCode &status); 00705 UnicodeString& adjustForContext(UnicodeString &) const; 00706 UBool checkNoAdjustForContext(UErrorCode& status) const; 00707 00708 template<typename F, typename... Args> 00709 UnicodeString& doFormat( 00710 F callback, 00711 UnicodeString& appendTo, 00712 UErrorCode& status, 00713 Args... args) const; 00714 00715 template<typename F, typename... Args> 00716 FormattedRelativeDateTime doFormatToValue( 00717 F callback, 00718 UErrorCode& status, 00719 Args... args) const; 00720 00721 void formatImpl( 00722 double quantity, 00723 UDateDirection direction, 00724 UDateRelativeUnit unit, 00725 FormattedRelativeDateTimeData& output, 00726 UErrorCode& status) const; 00727 void formatAbsoluteImpl( 00728 UDateDirection direction, 00729 UDateAbsoluteUnit unit, 00730 FormattedRelativeDateTimeData& output, 00731 UErrorCode& status) const; 00732 void formatNumericImpl( 00733 double offset, 00734 URelativeDateTimeUnit unit, 00735 FormattedRelativeDateTimeData& output, 00736 UErrorCode& status) const; 00737 void formatRelativeImpl( 00738 double offset, 00739 URelativeDateTimeUnit unit, 00740 FormattedRelativeDateTimeData& output, 00741 UErrorCode& status) const; 00742 }; 00743 00744 U_NAMESPACE_END 00745 00746 #endif /* !UCONFIG_NO_BREAK_ITERATION */ 00747 #endif /* !UCONFIG_NO_FORMATTING */ 00748 00749 #endif /* U_SHOW_CPLUSPLUS_API */ 00750 00751 #endif /* __RELDATEFMT_H */
1.7.6.1