summaryrefslogtreecommitdiffstats
path: root/intl/icu-patches/bug-1814862-ICU-22260.diff
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /intl/icu-patches/bug-1814862-ICU-22260.diff
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'intl/icu-patches/bug-1814862-ICU-22260.diff')
-rw-r--r--intl/icu-patches/bug-1814862-ICU-22260.diff201
1 files changed, 201 insertions, 0 deletions
diff --git a/intl/icu-patches/bug-1814862-ICU-22260.diff b/intl/icu-patches/bug-1814862-ICU-22260.diff
new file mode 100644
index 0000000000..264dda3a31
--- /dev/null
+++ b/intl/icu-patches/bug-1814862-ICU-22260.diff
@@ -0,0 +1,201 @@
+# Support relative date formatting with UCONFIG_NO_BREAK_ITERATION
+#
+# ICU bug: https://unicode-org.atlassian.net/browse/ICU-22260
+
+diff --git a/intl/icu/source/i18n/reldatefmt.cpp b/intl/icu/source/i18n/reldatefmt.cpp
+index 24d22a4b4b..6a0c9e65ef 100644
+--- a/intl/icu/source/i18n/reldatefmt.cpp
++++ b/intl/icu/source/i18n/reldatefmt.cpp
+@@ -12,7 +12,7 @@
+
+ #include "unicode/reldatefmt.h"
+
+-#if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION
++#if !UCONFIG_NO_FORMATTING
+
+ #include <cmath>
+ #include <functional>
+@@ -761,6 +761,7 @@ RelativeDateTimeFormatter::RelativeDateTimeFormatter(UErrorCode& status) :
+ fStyle(UDAT_STYLE_LONG),
+ fContext(UDISPCTX_CAPITALIZATION_NONE),
+ fOptBreakIterator(nullptr) {
++ (void)fOptBreakIterator; // suppress unused field warning
+ init(nullptr, nullptr, status);
+ }
+
+@@ -809,11 +810,16 @@ RelativeDateTimeFormatter::RelativeDateTimeFormatter(
+ return;
+ }
+ if (capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE) {
++#if !UCONFIG_NO_BREAK_ITERATION
+ BreakIterator *bi = BreakIterator::createSentenceInstance(locale, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ init(nfToAdopt, bi, status);
++#else
++ status = U_UNSUPPORTED_ERROR;
++ return;
++#endif // !UCONFIG_NO_BREAK_ITERATION
+ } else {
+ init(nfToAdopt, nullptr, status);
+ }
+@@ -832,9 +838,11 @@ RelativeDateTimeFormatter::RelativeDateTimeFormatter(
+ fCache->addRef();
+ fNumberFormat->addRef();
+ fPluralRules->addRef();
++#if !UCONFIG_NO_BREAK_ITERATION
+ if (fOptBreakIterator != nullptr) {
+ fOptBreakIterator->addRef();
+ }
++#endif // !UCONFIG_NO_BREAK_ITERATION
+ }
+
+ RelativeDateTimeFormatter& RelativeDateTimeFormatter::operator=(
+@@ -843,7 +851,9 @@ RelativeDateTimeFormatter& RelativeDateTimeFormatter::operator=(
+ SharedObject::copyPtr(other.fCache, fCache);
+ SharedObject::copyPtr(other.fNumberFormat, fNumberFormat);
+ SharedObject::copyPtr(other.fPluralRules, fPluralRules);
++#if !UCONFIG_NO_BREAK_ITERATION
+ SharedObject::copyPtr(other.fOptBreakIterator, fOptBreakIterator);
++#endif // !UCONFIG_NO_BREAK_ITERATION
+ fStyle = other.fStyle;
+ fContext = other.fContext;
+ fLocale = other.fLocale;
+@@ -861,9 +871,11 @@ RelativeDateTimeFormatter::~RelativeDateTimeFormatter() {
+ if (fPluralRules != nullptr) {
+ fPluralRules->removeRef();
+ }
++#if !UCONFIG_NO_BREAK_ITERATION
+ if (fOptBreakIterator != nullptr) {
+ fOptBreakIterator->removeRef();
+ }
++#endif // !UCONFIG_NO_BREAK_ITERATION
+ }
+
+ const NumberFormat& RelativeDateTimeFormatter::getNumberFormat() const {
+@@ -1191,6 +1203,7 @@ UnicodeString& RelativeDateTimeFormatter::combineDateAndTime(
+ }
+
+ UnicodeString& RelativeDateTimeFormatter::adjustForContext(UnicodeString &str) const {
++#if !UCONFIG_NO_BREAK_ITERATION
+ if (fOptBreakIterator == nullptr
+ || str.length() == 0 || !u_islower(str.char32At(0))) {
+ return str;
+@@ -1204,25 +1217,36 @@ UnicodeString& RelativeDateTimeFormatter::adjustForContext(UnicodeString &str) c
+ fOptBreakIterator->get(),
+ fLocale,
+ U_TITLECASE_NO_LOWERCASE | U_TITLECASE_NO_BREAK_ADJUSTMENT);
++#endif // !UCONFIG_NO_BREAK_ITERATION
+ return str;
+ }
+
+ UBool RelativeDateTimeFormatter::checkNoAdjustForContext(UErrorCode& status) const {
++#if !UCONFIG_NO_BREAK_ITERATION
+ // This is unsupported because it's hard to keep fields in sync with title
+ // casing. The code could be written and tested if there is demand.
+ if (fOptBreakIterator != nullptr) {
+ status = U_UNSUPPORTED_ERROR;
+ return false;
+ }
++#else
++ (void)status; // suppress unused argument warning
++#endif // !UCONFIG_NO_BREAK_ITERATION
+ return true;
+ }
+
+ void RelativeDateTimeFormatter::init(
+ NumberFormat *nfToAdopt,
++#if !UCONFIG_NO_BREAK_ITERATION
+ BreakIterator *biToAdopt,
++#else
++ std::nullptr_t,
++#endif // !UCONFIG_NO_BREAK_ITERATION
+ UErrorCode &status) {
+ LocalPointer<NumberFormat> nf(nfToAdopt);
++#if !UCONFIG_NO_BREAK_ITERATION
+ LocalPointer<BreakIterator> bi(biToAdopt);
++#endif // !UCONFIG_NO_BREAK_ITERATION
+ UnifiedCache::getByLocale(fLocale, fCache, status);
+ if (U_FAILURE(status)) {
+ return;
+@@ -1251,6 +1275,7 @@ void RelativeDateTimeFormatter::init(
+ nf.orphan();
+ SharedObject::copyPtr(shared, fNumberFormat);
+ }
++#if !UCONFIG_NO_BREAK_ITERATION
+ if (bi.isNull()) {
+ SharedObject::clearPtr(fOptBreakIterator);
+ } else {
+@@ -1262,6 +1287,7 @@ void RelativeDateTimeFormatter::init(
+ bi.orphan();
+ SharedObject::copyPtr(shared, fOptBreakIterator);
+ }
++#endif // !UCONFIG_NO_BREAK_ITERATION
+ }
+
+ U_NAMESPACE_END
+diff --git a/intl/icu/source/i18n/unicode/reldatefmt.h b/intl/icu/source/i18n/unicode/reldatefmt.h
+index 4123468c65..5dc4905b12 100644
+--- a/intl/icu/source/i18n/unicode/reldatefmt.h
++++ b/intl/icu/source/i18n/unicode/reldatefmt.h
+@@ -248,8 +248,6 @@ typedef enum UDateDirection {
+ #endif // U_HIDE_DEPRECATED_API
+ } UDateDirection;
+
+-#if !UCONFIG_NO_BREAK_ITERATION
+-
+ U_NAMESPACE_BEGIN
+
+ class BreakIterator;
+@@ -696,11 +694,19 @@ class U_I18N_API RelativeDateTimeFormatter : public UObject {
+ const SharedPluralRules *fPluralRules;
+ UDateRelativeDateTimeFormatterStyle fStyle;
+ UDisplayContext fContext;
++#if !UCONFIG_NO_BREAK_ITERATION
+ const SharedBreakIterator *fOptBreakIterator;
++#else
++ std::nullptr_t fOptBreakIterator = nullptr;
++#endif // !UCONFIG_NO_BREAK_ITERATION
+ Locale fLocale;
+ void init(
+ NumberFormat *nfToAdopt,
++#if !UCONFIG_NO_BREAK_ITERATION
+ BreakIterator *brkIter,
++#else
++ std::nullptr_t,
++#endif // !UCONFIG_NO_BREAK_ITERATION
+ UErrorCode &status);
+ UnicodeString& adjustForContext(UnicodeString &) const;
+ UBool checkNoAdjustForContext(UErrorCode& status) const;
+@@ -743,7 +749,6 @@ class U_I18N_API RelativeDateTimeFormatter : public UObject {
+
+ U_NAMESPACE_END
+
+-#endif /* !UCONFIG_NO_BREAK_ITERATION */
+ #endif /* !UCONFIG_NO_FORMATTING */
+
+ #endif /* U_SHOW_CPLUSPLUS_API */
+diff --git a/intl/icu/source/i18n/unicode/ureldatefmt.h b/intl/icu/source/i18n/unicode/ureldatefmt.h
+index 3c44890043..0882360d14 100644
+--- a/intl/icu/source/i18n/unicode/ureldatefmt.h
++++ b/intl/icu/source/i18n/unicode/ureldatefmt.h
+@@ -12,7 +12,7 @@
+
+ #include "unicode/utypes.h"
+
+-#if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION
++#if !UCONFIG_NO_FORMATTING
+
+ #include "unicode/unum.h"
+ #include "unicode/udisplaycontext.h"
+@@ -505,6 +505,6 @@ ureldatefmt_combineDateAndTime( const URelativeDateTimeFormatter* reldatefmt,
+ int32_t resultCapacity,
+ UErrorCode* status );
+
+-#endif /* !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION */
++#endif /* !UCONFIG_NO_FORMATTING */
+
+ #endif
+--
+2.34.1