From b0a7f5691113534c2cf771f2dd3cece5e93bc7d4 Mon Sep 17 00:00:00 2001 From: Frank Tang 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 Reviewed-by: Jakob Kummerow Reviewed-by: Shu-yu Guo Cr-Commit-Position: refs/heads/master@{#70972} (ported to work with CurrencySignString(Isolate* isolate, Handle 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: "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: "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: "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: "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: "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(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: + // 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; }