diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /intl/icu-patches/bug-1814862-ICU-22260.diff | |
parent | Initial commit. (diff) | |
download | firefox-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.diff | 201 |
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 |