You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-qt/qtwebengine/files/qtwebengine-5.15.2-icu-68-v...

171 lines
6.1 KiB

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 and rebased to qtwebengine)
---
diff --git a/src/3rdparty/chromium/v8/src/objects/js-number-format.cc b/src/3rdparty/chromium/v8/src/objects/js-number-format.cc
index 6f3d97a619..83cf021fb1 100644
--- a/src/3rdparty/chromium/v8/src/objects/js-number-format.cc
+++ b/src/3rdparty/chromium/v8/src/objects/js-number-format.cc
@@ -390,17 +390,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();
}
@@ -423,7 +426,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;
}
@@ -563,14 +567,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".
@@ -579,20 +592,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"
@@ -626,18 +660,37 @@ 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) {
+#else
+ if (skeleton.indexOf("unit/") >= 0) {
+#endif
return Style::UNIT;
}
+#if U_ICU_VERSION_MAJOR_NUM < 68
if (skeleton.indexOf("percent ") >= 0) {
return Style::PERCENT;
}
+#else
+ if (skeleton.indexOf("percent") >= 0) {
+ // percent precision-integer rounding-mode-half-up scale/100
+ if (skeleton.indexOf("scale/100") >= 0) {
+ return Style::PERCENT;
+ } else {
+ return Style::UNIT;
+ }
+ }
+#endif
return Style::DECIMAL;
}