123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- From b0a7f5691113534c2cf771f2dd3cece5e93bc7d4 Mon Sep 17 00:00:00 2001
- From: Frank Tang <ftang@chromium.org>
- Date: Tue, 03 Nov 2020 23:20:37 -0800
- Subject: [PATCH] Update to ICU68-1
- ICU68-1 change the output skeleton format. So we need to change
- resolvedOptions code for 68 migration.
- Chromium roll
- https://chromium-review.googlesource.com/c/chromium/src/+/2474093
- Bug: v8:10945
- Change-Id: I3b2c7fbe8abb22df8fa51287c498ca3245b8c55b
- Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2477431
- Commit-Queue: Frank Tang <ftang@chromium.org>
- Reviewed-by: Jakob Kummerow <jkummerow@chromium.org>
- Reviewed-by: Shu-yu Guo <syg@chromium.org>
- Cr-Commit-Position: refs/heads/master@{#70972}
- (ported to work with <ICU-68.1 -- https://bugs.gentoo.org/757606)
- ---
- diff --git a/src/objects/js-number-format.cc b/src/objects/js-number-format.cc
- index 45b0eab..d18b133 100644
- --- a/src/objects/js-number-format.cc
- +++ b/src/objects/js-number-format.cc
- @@ -389,17 +389,20 @@ Handle<String> CurrencySignString(Isolate* isolate,
- Handle<String> UnitDisplayString(Isolate* isolate,
- const icu::UnicodeString& skeleton) {
- // Ex: skeleton as
- - // "measure-unit/length-meter .### rounding-mode-half-up unit-width-full-name"
- + // <ICU-68.1: "measure-unit/length-meter .### rounding-mode-half-up unit-width-full-name".
- + // >=ICU-68.1: "unit/length-meter .### rounding-mode-half-up unit-width-full-name"
- if (skeleton.indexOf("unit-width-full-name") >= 0) {
- return ReadOnlyRoots(isolate).long_string_handle();
- }
- // Ex: skeleton as
- - // "measure-unit/length-meter .### rounding-mode-half-up unit-width-narrow".
- + // <ICU-68.1: "measure-unit/length-meter .### rounding-mode-half-up unit-width-narrow".
- + // >=ICU-68.1: "unit/length-meter .### rounding-mode-half-up unit-width-narrow".
- if (skeleton.indexOf("unit-width-narrow") >= 0) {
- return ReadOnlyRoots(isolate).narrow_string_handle();
- }
- // Ex: skeleton as
- - // "measure-unit/length-foot .### rounding-mode-half-up"
- + // <ICU-68.1: "measure-unit/length-foot .### rounding-mode-half-up"
- + // >=ICU-68.1: "unit/length-foot .### rounding-mode-half-up"
- return ReadOnlyRoots(isolate).short_string_handle();
- }
-
- @@ -422,7 +425,8 @@ Notation NotationFromSkeleton(const icu::UnicodeString& skeleton) {
- return Notation::COMPACT;
- }
- // Ex: skeleton as
- - // "measure-unit/length-foot .### rounding-mode-half-up"
- + // <ICU-68.1: "measure-unit/length-foot .### rounding-mode-half-up"
- + // >=ICU-68.1: "unit/length-foot .### rounding-mode-half-up"
- return Notation::STANDARD;
- }
-
- @@ -562,14 +566,23 @@ namespace {
-
- // Ex: percent .### rounding-mode-half-up
- // Special case for "percent"
- -// Ex: "measure-unit/length-kilometer per-measure-unit/duration-hour .###
- -// rounding-mode-half-up" should return "kilometer-per-unit".
- -// Ex: "measure-unit/duration-year .### rounding-mode-half-up" should return
- -// "year".
- +// <ICU-68.1:
- +// Ex: "measure-unit/length-kilometer per-measure-unit/duration-hour .###
- +// rounding-mode-half-up" should return "kilometer-per-unit".
- +// Ex: "measure-unit/duration-year .### rounding-mode-half-up" should return
- +// >=ICU-68.1:
- +// Ex: "unit/milliliter-per-acre .### rounding-mode-half-up"
- +// should return "milliliter-per-acre".
- +// Ex: "unit/year .### rounding-mode-half-up" should return
- +// "year".
- std::string UnitFromSkeleton(const icu::UnicodeString& skeleton) {
- std::string str;
- str = skeleton.toUTF8String<std::string>(str);
- +#if U_ICU_VERSION_MAJOR_NUM < 68
- std::string search("measure-unit/");
- +#else
- + std::string search("unit/");
- +#endif
- size_t begin = str.find(search);
- if (begin == str.npos) {
- // Special case for "percent".
- @@ -578,20 +591,41 @@ std::string UnitFromSkeleton(const icu::UnicodeString& skeleton) {
- }
- return "";
- }
- +#if U_ICU_VERSION_MAJOR_NUM < 68
- // Skip the type (ex: "length").
- // "measure-unit/length-kilometer per-measure-unit/duration-hour"
- // b
- begin = str.find("-", begin + search.size());
- +#else
- + // Ex:
- + // "unit/acre .### rounding-mode-half-up"
- + // b
- + // Ex:
- + // "unit/milliliter-per-acre .### rounding-mode-half-up"
- + // b
- + begin += search.size();
- +#endif
- if (begin == str.npos) {
- return "";
- }
- +#if U_ICU_VERSION_MAJOR_NUM < 68
- begin++; // Skip the '-'.
- +#endif
- // Find the end of the subtype.
- size_t end = str.find(" ", begin);
- - // "measure-unit/length-kilometer per-measure-unit/duration-hour"
- - // b e
- + // <ICU-68.1:
- + // "measure-unit/length-kilometer per-measure-unit/duration-hour"
- + // b e
- + // >=ICU-68.1:
- + // Ex:
- + // "unit/acre .### rounding-mode-half-up"
- + // b e
- + // Ex:
- + // "unit/milliliter-per-acre .### rounding-mode-half-up"
- + // b e
- if (end == str.npos) {
- end = str.size();
- +#if U_ICU_VERSION_MAJOR_NUM < 68
- return str.substr(begin, end - begin);
- }
- // "measure-unit/length-kilometer per-measure-unit/duration-hour"
- @@ -625,17 +659,36 @@ std::string UnitFromSkeleton(const icu::UnicodeString& skeleton) {
- // "measure-unit/length-kilometer per-measure-unit/duration-hour"
- // [result ] b e
- return result + "-per-" + str.substr(begin, end - begin);
- +#else
- + }
- + return str.substr(begin, end - begin);
- +#endif
- }
-
- Style StyleFromSkeleton(const icu::UnicodeString& skeleton) {
- if (skeleton.indexOf("currency/") >= 0) {
- return Style::CURRENCY;
- }
- +#if U_ICU_VERSION_MAJOR_NUM < 68
- if (skeleton.indexOf("measure-unit/") >= 0) {
- if (skeleton.indexOf("scale/100") >= 0 &&
- skeleton.indexOf("measure-unit/concentr-percent") >= 0) {
- +#else
- + if (skeleton.indexOf("percent") >= 0) {
- + // percent precision-integer rounding-mode-half-up scale/100
- + if (skeleton.indexOf("scale/100") >= 0) {
- +#endif
- return Style::PERCENT;
- +#if U_ICU_VERSION_MAJOR_NUM >= 68
- + } else {
- + return Style::UNIT;
- +#endif
- }
- +#if U_ICU_VERSION_MAJOR_NUM >= 68
- + }
- + // Before ICU68: "measure-unit/", since ICU68 "unit/"
- + if (skeleton.indexOf("unit/") >= 0) {
- +#endif
- return Style::UNIT;
- }
- return Style::DECIMAL;
- diff --git a/src/objects/js-relative-time-format.cc b/src/objects/js-relative-time-format.cc
- index 267343aaae..64d56a1c12 100644
- --- a/src/objects/js-relative-time-format.cc
- +++ b/src/objects/js-relative-time-format.cc
- @@ -195,9 +195,18 @@ MaybeHandle<JSRelativeTimeFormat> JSRelativeTimeFormat::New(
- }
- }
-
- +#if U_ICU_VERSION_MAJOR_NUM < 68
- icu::DecimalFormat* decimal_format =
- static_cast<icu::DecimalFormat*>(number_format);
- decimal_format->setMinimumGroupingDigits(-2);
- +#else
- + if (number_format->getDynamicClassID() ==
- + icu::DecimalFormat::getStaticClassID()) {
- + icu::DecimalFormat* decimal_format =
- + static_cast<icu::DecimalFormat*>(number_format);
- + decimal_format->setMinimumGroupingDigits(-2);
- + }
- +#endif
-
- // Change UDISPCTX_CAPITALIZATION_NONE to other values if
- // ECMA402 later include option to change capitalization.
|