From 2d183b5a924d8f159c1c931ba562fc24f81e4541 Mon Sep 17 00:00:00 2001 From: Peter Edberg Date: Sun, 5 Mar 2017 03:53:56 +0000 Subject: [PATCH 1/5] ICU-13005 Integrate data from CLDR release-31-d02, remove logKnownIssues for fixed items X-SVN-Rev: 39735 --- icu4c/source/data/brkitr/root.txt | 2 +- icu4c/source/data/curr/ar.txt | 2 +- icu4c/source/data/lang/ar.txt | 2 +- icu4c/source/data/locales/ar.txt | 100 +++++++++++++++++- icu4c/source/data/misc/metadata.txt | 8 ++ icu4c/source/data/region/ar.txt | 2 +- icu4c/source/data/unit/ar.txt | 2 +- icu4c/source/data/zone/ar.txt | 2 +- icu4j/main/shared/data/icudata.jar | 4 +- .../test/format/CompactDecimalFormatTest.java | 7 +- 10 files changed, 116 insertions(+), 15 deletions(-) diff --git a/icu4c/source/data/brkitr/root.txt b/icu4c/source/data/brkitr/root.txt index 86d2fe0ccd5..82d9879bf91 100644 --- a/icu4c/source/data/brkitr/root.txt +++ b/icu4c/source/data/brkitr/root.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License root{ - Version{"2.1.30.48"} + Version{"2.1.32.92"} boundaries{ grapheme:process(dependency){"char.brk"} line:process(dependency){"line.brk"} diff --git a/icu4c/source/data/curr/ar.txt b/icu4c/source/data/curr/ar.txt index 3526e9e665e..2eb7d273581 100644 --- a/icu4c/source/data/curr/ar.txt +++ b/icu4c/source/data/curr/ar.txt @@ -2405,5 +2405,5 @@ ar{ two{"{0} {1}"} zero{"{0} {1}"} } - Version{"2.1.32.59"} + Version{"2.1.32.86"} } diff --git a/icu4c/source/data/lang/ar.txt b/icu4c/source/data/lang/ar.txt index 0ad9c7a8b10..5d31d4f4bc9 100644 --- a/icu4c/source/data/lang/ar.txt +++ b/icu4c/source/data/lang/ar.txt @@ -849,7 +849,7 @@ ar{ VALENCIA{"بلنسية"} WADEGILE{"المندرين باللاتينية - ويد–جيلز"} } - Version{"2.1.32.59"} + Version{"2.1.32.86"} characterLabelPattern{ all{"{0} - الكل"} category-list{"{0}: {1}"} diff --git a/icu4c/source/data/locales/ar.txt b/icu4c/source/data/locales/ar.txt index b0c39698e78..39bbe175791 100644 --- a/icu4c/source/data/locales/ar.txt +++ b/icu4c/source/data/locales/ar.txt @@ -252,6 +252,104 @@ ar{ zero{"¤ 000 ترليو"} } } + decimalFormat{ + 1000{ + few{"0 آلاف"} + many{"0 ألف"} + one{"0 ألف"} + other{"0 ألف"} + two{"0 ألف"} + zero{"0 ألف"} + } + 10000{ + few{"00 ألف"} + many{"00 ألف"} + one{"00 ألف"} + other{"00 ألف"} + two{"00 ألف"} + zero{"00 ألف"} + } + 100000{ + few{"000 ألف"} + many{"000 ألف"} + one{"000 ألف"} + other{"000 ألف"} + two{"000 ألف"} + zero{"000 ألف"} + } + 1000000{ + few{"0 مليو"} + many{"0 مليو"} + one{"0 مليو"} + other{"0 مليو"} + two{"0 مليو"} + zero{"0 مليو"} + } + 10000000{ + few{"00 مليو"} + many{"00 مليو"} + one{"00 مليو"} + other{"00 مليو"} + two{"00 مليو"} + zero{"00 مليو"} + } + 100000000{ + few{"000 مليو"} + many{"000 مليو"} + one{"000 مليو"} + other{"000 مليو"} + two{"000 مليو"} + zero{"000 مليو"} + } + 1000000000{ + few{"0 مليا"} + many{"0 مليا"} + one{"0 مليا"} + other{"0 مليا"} + two{"0 مليا"} + zero{"0 مليا"} + } + 10000000000{ + few{"00 مليا"} + many{"00 مليا"} + one{"00 مليا"} + other{"00 مليا"} + two{"00 مليا"} + zero{"00 مليا"} + } + 100000000000{ + few{"000 مليا"} + many{"000 مليا"} + one{"000 مليا"} + other{"000 مليا"} + two{"000 مليا"} + zero{"000 مليا"} + } + 1000000000000{ + few{"0 ترليو"} + many{"0 ترليو"} + one{"0 ترليو"} + other{"0 ترليو"} + two{"0 ترليو"} + zero{"0 ترليو"} + } + 10000000000000{ + few{"00 ترليو"} + many{"00 ترليو"} + one{"00 ترليو"} + other{"00 ترليو"} + two{"00 ترليو"} + zero{"00 ترليو"} + } + 100000000000000{ + few{"000 ترليو"} + many{"000 ترليو"} + one{"000 ترليو"} + other{"000 ترليو"} + two{"000 ترليو"} + zero{"000 ترليو"} + } + } } symbols{ decimal{"."} @@ -284,7 +382,7 @@ ar{ minimumGroupingDigits{"1"} native{"arab"} } - Version{"2.1.32.59"} + Version{"2.1.32.86"} calendar{ buddhist{ eras{ diff --git a/icu4c/source/data/misc/metadata.txt b/icu4c/source/data/misc/metadata.txt index ae4ecc6d2dc..8868f42f0c2 100644 --- a/icu4c/source/data/misc/metadata.txt +++ b/icu4c/source/data/misc/metadata.txt @@ -1279,6 +1279,14 @@ metadata:table(nofallback){ reason{"overlong"} replacement{"yo"} } + yue_CN{ + reason{"legacy"} + replacement{"yue_Hans_CN"} + } + yue_HK{ + reason{"legacy"} + replacement{"yue_Hant_HK"} + } zai{ reason{"macrolanguage"} replacement{"zap"} diff --git a/icu4c/source/data/region/ar.txt b/icu4c/source/data/region/ar.txt index 0e8b2b5b23f..aa2313afd43 100644 --- a/icu4c/source/data/region/ar.txt +++ b/icu4c/source/data/region/ar.txt @@ -309,5 +309,5 @@ ar{ MK{"مقدونيا- جمهورية مقدونيا اليوغسلافية السابقة"} TL{"تيمور الشرقية"} } - Version{"2.1.32.59"} + Version{"2.1.32.86"} } diff --git a/icu4c/source/data/unit/ar.txt b/icu4c/source/data/unit/ar.txt index 0797f473a70..577f9f8304a 100644 --- a/icu4c/source/data/unit/ar.txt +++ b/icu4c/source/data/unit/ar.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar{ - Version{"2.1.32.59"} + Version{"2.1.32.86"} durationUnits{ hm{"h:mm"} hms{"h:mm:ss"} diff --git a/icu4c/source/data/zone/ar.txt b/icu4c/source/data/zone/ar.txt index f28764fa02c..418d0cfeefa 100644 --- a/icu4c/source/data/zone/ar.txt +++ b/icu4c/source/data/zone/ar.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License ar{ - Version{"2.1.32.59"} + Version{"2.1.32.86"} zoneStrings{ "Africa:Abidjan"{ ec{"أبيدجان"} diff --git a/icu4j/main/shared/data/icudata.jar b/icu4j/main/shared/data/icudata.jar index d0a25acf75c..87a679a0b95 100755 --- a/icu4j/main/shared/data/icudata.jar +++ b/icu4j/main/shared/data/icudata.jar @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c8dbe867365547805caf125f25a2551375b58e09653f9e625d7a015b35aa6aa -size 12154917 +oid sha256:88c822b919d4c929386735e4cf6d95194bf20dba17cfe4aa93d4f46a08d2a5d4 +size 12155049 diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/CompactDecimalFormatTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/CompactDecimalFormatTest.java index 364955f3d5a..4c82e878d4a 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/CompactDecimalFormatTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/CompactDecimalFormatTest.java @@ -484,9 +484,6 @@ public class CompactDecimalFormatTest extends TestFmwk { @Test public void TestNordic() { - if (logKnownIssue("cldrbug:9465","CDF(12,000) for no_NO shouldn't be 12 (12K or similar)")) { - return; - } String result = CompactDecimalFormat.getInstance( new ULocale("no_NO"), CompactDecimalFormat.CompactStyle.SHORT ).format(12000); assertNotEquals("CDF(12,000) for no_NO shouldn't be 12 (12K or similar)", "12", result); @@ -544,9 +541,7 @@ public class CompactDecimalFormatTest extends TestFmwk { cdf = CompactDecimalFormat.getInstance(new ULocale("ar"), CompactDecimalFormat.CompactStyle.SHORT); cdf.setMaximumSignificantDigits(3); result = cdf.format(1234); - if (!logKnownIssue("cldrbug:9492", "CLDR 31-d01 incorrectly deleted ar compactDecimals short form")) { - assertEquals("CDF should correctly format 1234 with 3 significant digits in 'ar'", "١٫٢٣ ألف", result); - } + assertEquals("CDF should correctly format 1234 with 3 significant digits in 'ar'", "١٫٢٣ ألف", result); // Check currency formatting as well cdf = CompactDecimalFormat.getInstance(new ULocale("ar"), CompactDecimalFormat.CompactStyle.SHORT); From b3045d787df2c076aa75fcb68e73b60e4ec6e59a Mon Sep 17 00:00:00 2001 From: Peter Edberg Date: Sun, 5 Mar 2017 04:57:45 +0000 Subject: [PATCH 2/5] ICU-13005 update release version to 59.1 rc X-SVN-Rev: 39736 --- icu4c/source/common/unicode/uvernum.h | 8 ++++---- icu4c/source/configure | 18 +++++++++--------- icu4c/source/data/misc/icuver.txt | 4 ++-- icu4j/build.properties | 4 ++-- .../core/src/com/ibm/icu/util/VersionInfo.java | 4 ++-- icu4j/main/shared/build/common.properties | 2 +- .../icu/dev/test/util/DebugUtilitiesData.java | 2 +- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/icu4c/source/common/unicode/uvernum.h b/icu4c/source/common/unicode/uvernum.h index 31d0167d1d7..4479ea9ff1c 100644 --- a/icu4c/source/common/unicode/uvernum.h +++ b/icu4c/source/common/unicode/uvernum.h @@ -64,13 +64,13 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.6 */ -#define U_ICU_VERSION_MINOR_NUM 0 +#define U_ICU_VERSION_MINOR_NUM 1 /** The current ICU patchlevel version as an integer. * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION_PATCHLEVEL_NUM 1 +#define U_ICU_VERSION_PATCHLEVEL_NUM 0 /** The current ICU build level version as an integer. * This value is for use by ICU clients. It defaults to 0. @@ -119,7 +119,7 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION "59.0.1" +#define U_ICU_VERSION "59.1" /** The current ICU library major/minor version as a string without dots, for library name suffixes. * This value will change in the subsequent releases of ICU @@ -131,7 +131,7 @@ /** Data version in ICU4C. * @internal ICU 4.4 Internal Use Only **/ -#define U_ICU_DATA_VERSION "59.0.1" +#define U_ICU_DATA_VERSION "59.1" #endif /* U_HIDE_INTERNAL_API */ /*=========================================================================== diff --git a/icu4c/source/configure b/icu4c/source/configure index 20a0158cfd5..77a6b431c81 100755 --- a/icu4c/source/configure +++ b/icu4c/source/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for ICU 59.0.1 +# Generated by GNU Autoconf 2.69 for ICU 59.1 # # Report bugs to . # @@ -582,8 +582,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='ICU' PACKAGE_TARNAME='International Components for Unicode' -PACKAGE_VERSION='59.0.1' -PACKAGE_STRING='ICU 59.0.1' +PACKAGE_VERSION='59.1' +PACKAGE_STRING='ICU 59.1' PACKAGE_BUGREPORT='http://icu-project.org/bugs' PACKAGE_URL='http://icu-project.org' @@ -1357,7 +1357,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures ICU 59.0.1 to adapt to many kinds of systems. +\`configure' configures ICU 59.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1423,7 +1423,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of ICU 59.0.1:";; + short | recursive ) echo "Configuration of ICU 59.1:";; esac cat <<\_ACEOF @@ -1559,7 +1559,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -ICU configure 59.0.1 +ICU configure 59.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2251,7 +2251,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by ICU $as_me 59.0.1, which was +It was created by ICU $as_me 59.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -8345,7 +8345,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by ICU $as_me 59.0.1, which was +This file was extended by ICU $as_me 59.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -8399,7 +8399,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -ICU config.status 59.0.1 +ICU config.status 59.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/icu4c/source/data/misc/icuver.txt b/icu4c/source/data/misc/icuver.txt index 114bfaa3137..1938d4f3063 100644 --- a/icu4c/source/data/misc/icuver.txt +++ b/icu4c/source/data/misc/icuver.txt @@ -8,6 +8,6 @@ // *************************************************************************** icuver:table(nofallback){ - DataVersion { "58.1.0.0" } - ICUVersion { "58.1.0.0" } + DataVersion { "59.1.0.0" } + ICUVersion { "59.1.0.0" } } diff --git a/icu4j/build.properties b/icu4j/build.properties index 16787e25d09..8ad625bce31 100644 --- a/icu4j/build.properties +++ b/icu4j/build.properties @@ -6,6 +6,6 @@ #******************************************************************************* api.report.version = 59 api.report.prev.version = 58 -release.file.ver = 59m1 -api.doc.version = 59 Milestone 1 +release.file.ver = 59rc +api.doc.version = 59 Release Candidate diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/VersionInfo.java b/icu4j/main/classes/core/src/com/ibm/icu/util/VersionInfo.java index f5ab3fe70cb..bda36cf0238 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/VersionInfo.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/VersionInfo.java @@ -560,8 +560,8 @@ public final class VersionInfo implements Comparable UNICODE_8_0 = getInstance(8, 0, 0, 0); UNICODE_9_0 = getInstance(9, 0, 0, 0); - ICU_VERSION = getInstance(59, 0, 1, 0); - ICU_DATA_VERSION = getInstance(59, 0, 1, 0); + ICU_VERSION = getInstance(59, 1, 0, 0); + ICU_DATA_VERSION = getInstance(59, 1, 0, 0); UNICODE_VERSION = UNICODE_9_0; UCOL_RUNTIME_VERSION = getInstance(9); diff --git a/icu4j/main/shared/build/common.properties b/icu4j/main/shared/build/common.properties index c33f98a94b3..ac6df91ad70 100644 --- a/icu4j/main/shared/build/common.properties +++ b/icu4j/main/shared/build/common.properties @@ -7,7 +7,7 @@ # Version numbers, etc. icu4j.spec.version = 59 -icu4j.impl.version = 59.0.1 +icu4j.impl.version = 59.1 icu4j.data.version = 59 current.year = 2017 default.exec.env = JavaSE-1.6 diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/DebugUtilitiesData.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/DebugUtilitiesData.java index 2f7f4a153ef..8f47d5f94c2 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/DebugUtilitiesData.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/DebugUtilitiesData.java @@ -10,7 +10,7 @@ package com.ibm.icu.dev.test.util; public class DebugUtilitiesData extends Object { - public static final String ICU4C_VERSION="59.0.1"; + public static final String ICU4C_VERSION="59.1"; public static final int UDebugEnumType = 0; public static final int UCalendarDateFields = 1; public static final int UCalendarMonths = 2; From e8eb923aba1b97335e66e53341bf539675bb9209 Mon Sep 17 00:00:00 2001 From: Peter Edberg Date: Sun, 5 Mar 2017 05:13:24 +0000 Subject: [PATCH 3/5] ICU-12998 icu4c readme, fixed two refs to icu/icu/trunk, preliminary update for 59rc X-SVN-Rev: 39737 --- icu4c/readme.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/icu4c/readme.html b/icu4c/readme.html index f7843f4d83c..f7762bb8ef1 100644 --- a/icu4c/readme.html +++ b/icu4c/readme.html @@ -3,7 +3,7 @@ - ReadMe for ICU 59.0.1 + ReadMe for ICU 59.1 - +

Note: This is a draft readme.

@@ -32,7 +32,7 @@ International Components for Unicode
Release Candidate (Milestone Release) - ICU 59.0.1 ReadMe + ICU 59.1 ReadMe @@ -44,7 +44,7 @@

This is a release candidate version of ICU4C. It is not recommended for production use.

-

Last updated: 2017-Jan-15
+

Last updated: 2017-Mar-04
Copyright © 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html
Copyright © 1997-2016 International Business Machines Corporation and others. @@ -230,7 +230,7 @@

Important: Please make sure you understand the Copyright and License Information.

+ "http://source.icu-project.org/repos/icu/trunk/icu4c/LICENSE">Copyright and License Information.

What is new in this release?

@@ -790,7 +790,7 @@ source file tree clean and have build output files written to a different location. This is called an "out-of-source build". Simply invoke the configure script from the target location: -
~/icu$ svn export http://source.icu-project.org/repos/icu/icu/trunk
+
~/icu$ svn export http://source.icu-project.org/repos/icu/trunk/icu4c
 ~/icu$ mkdir trunk-dev
 ~/icu$ cd trunk-dev
 ~/icu/trunk-dev$ ../trunk/source/runConfigureICU Linux

From 410e3f6db548604ac78dfd8a628cfe163fc76729 Mon Sep 17 00:00:00 2001
From: Peter Edberg 
Date: Sun, 5 Mar 2017 05:38:02 +0000
Subject: [PATCH 4/5] ICU-13005 Integrate data from CLDR release-31-d02 (part
 2, add new locales)

X-SVN-Rev: 39738
---
 icu4c/source/data/curr/es_BZ.txt      |  12 ++
 icu4c/source/data/curr/resfiles.mk    | 104 +++++++-------
 icu4c/source/data/icu-config.xml      |   2 +
 icu4c/source/data/lang/es_BZ.txt      |   6 +
 icu4c/source/data/lang/resfiles.mk    |  86 ++++++------
 icu4c/source/data/locales/es_BZ.txt   |   6 +
 icu4c/source/data/locales/it_VA.txt   |   5 +
 icu4c/source/data/locales/resfiles.mk | 191 +++++++++++++-------------
 icu4c/source/data/region/es_BZ.txt    |   6 +
 icu4c/source/data/region/resfiles.mk  |  86 ++++++------
 icu4c/source/data/unit/es_BZ.txt      |   6 +
 icu4c/source/data/unit/resfiles.mk    |  82 +++++------
 icu4c/source/data/zone/es_BZ.txt      |   6 +
 icu4c/source/data/zone/resfiles.mk    |  84 +++++------
 icu4j/main/shared/data/icudata.jar    |   4 +-
 15 files changed, 368 insertions(+), 318 deletions(-)
 create mode 100644 icu4c/source/data/curr/es_BZ.txt
 create mode 100644 icu4c/source/data/lang/es_BZ.txt
 create mode 100644 icu4c/source/data/locales/es_BZ.txt
 create mode 100644 icu4c/source/data/locales/it_VA.txt
 create mode 100644 icu4c/source/data/region/es_BZ.txt
 create mode 100644 icu4c/source/data/unit/es_BZ.txt
 create mode 100644 icu4c/source/data/zone/es_BZ.txt

diff --git a/icu4c/source/data/curr/es_BZ.txt b/icu4c/source/data/curr/es_BZ.txt
new file mode 100644
index 00000000000..f3475ce92b8
--- /dev/null
+++ b/icu4c/source/data/curr/es_BZ.txt
@@ -0,0 +1,12 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html#License
+es_BZ{
+    %%Parent{"es_419"}
+    Currencies{
+        BZD{
+            "$",
+            "dólar beliceño",
+        }
+    }
+    Version{"2.1.32.37"}
+}
diff --git a/icu4c/source/data/curr/resfiles.mk b/icu4c/source/data/curr/resfiles.mk
index ebab478825f..a05ca8dede1 100644
--- a/icu4c/source/data/curr/resfiles.mk
+++ b/icu4c/source/data/curr/resfiles.mk
@@ -78,56 +78,56 @@ CURR_SOURCE = af.txt af_NA.txt agq.txt ak.txt\
  en_TO.txt en_TT.txt en_TV.txt en_TZ.txt en_UG.txt\
  en_VC.txt en_VG.txt en_VU.txt en_WS.txt en_ZA.txt\
  en_ZM.txt en_ZW.txt eo.txt es.txt es_419.txt\
- es_AR.txt es_BO.txt es_BR.txt es_CL.txt es_CO.txt\
- es_CR.txt es_CU.txt es_DO.txt es_EC.txt es_GQ.txt\
- es_GT.txt es_HN.txt es_MX.txt es_NI.txt es_PA.txt\
- es_PE.txt es_PH.txt es_PR.txt es_PY.txt es_SV.txt\
- es_US.txt es_UY.txt es_VE.txt et.txt eu.txt\
- ewo.txt fa.txt fa_AF.txt ff.txt ff_GN.txt\
- ff_MR.txt fi.txt fil.txt fo.txt fo_DK.txt\
- fr.txt fr_BI.txt fr_CA.txt fr_CD.txt fr_DJ.txt\
- fr_DZ.txt fr_GN.txt fr_HT.txt fr_KM.txt fr_LU.txt\
- fr_MG.txt fr_MR.txt fr_MU.txt fr_RW.txt fr_SC.txt\
- fr_SY.txt fr_TN.txt fr_VU.txt fur.txt fy.txt\
- ga.txt gd.txt gl.txt gsw.txt gu.txt\
- guz.txt gv.txt ha.txt ha_GH.txt haw.txt\
- he.txt hi.txt hr.txt hr_BA.txt hsb.txt\
- hu.txt hy.txt id.txt ig.txt ii.txt\
- is.txt it.txt ja.txt jgo.txt jmc.txt\
- ka.txt kab.txt kam.txt kde.txt kea.txt\
- khq.txt ki.txt kk.txt kkj.txt kl.txt\
- kln.txt km.txt kn.txt ko.txt kok.txt\
- ks.txt ksb.txt ksf.txt ksh.txt kw.txt\
- ky.txt lag.txt lb.txt lg.txt lkt.txt\
- ln.txt ln_AO.txt lo.txt lrc.txt lt.txt\
- lu.txt luo.txt luy.txt lv.txt mas.txt\
- mas_TZ.txt mer.txt mfe.txt mg.txt mgh.txt\
- mgo.txt mk.txt ml.txt mn.txt mr.txt\
- ms.txt ms_BN.txt ms_SG.txt mt.txt mua.txt\
- my.txt mzn.txt naq.txt nb.txt nd.txt\
- nds.txt ne.txt nl.txt nl_AW.txt nl_BQ.txt\
- nl_CW.txt nl_SR.txt nl_SX.txt nmg.txt nn.txt\
- nnh.txt nus.txt nyn.txt om.txt om_KE.txt\
- or.txt os.txt os_RU.txt pa.txt pa_Arab.txt\
- pa_Guru.txt pl.txt ps.txt pt.txt pt_AO.txt\
- pt_CH.txt pt_CV.txt pt_GQ.txt pt_GW.txt pt_LU.txt\
- pt_MO.txt pt_MZ.txt pt_PT.txt pt_ST.txt pt_TL.txt\
- qu.txt qu_BO.txt qu_EC.txt rm.txt rn.txt\
- ro.txt ro_MD.txt rof.txt ru.txt ru_BY.txt\
- ru_KG.txt ru_KZ.txt ru_MD.txt rw.txt rwk.txt\
- sah.txt saq.txt sbp.txt se.txt se_SE.txt\
- seh.txt ses.txt sg.txt shi.txt shi_Latn.txt\
- shi_Tfng.txt si.txt sk.txt sl.txt smn.txt\
- sn.txt so.txt so_DJ.txt so_ET.txt so_KE.txt\
- sq.txt sq_MK.txt sr.txt sr_Cyrl.txt sr_Latn.txt\
- sv.txt sw.txt sw_CD.txt sw_UG.txt ta.txt\
- ta_LK.txt ta_MY.txt ta_SG.txt te.txt teo.txt\
- teo_KE.txt th.txt ti.txt ti_ER.txt to.txt\
- tr.txt twq.txt tzm.txt ug.txt uk.txt\
- ur.txt ur_IN.txt uz.txt uz_Arab.txt uz_Cyrl.txt\
- uz_Latn.txt vai.txt vai_Latn.txt vai_Vaii.txt vi.txt\
- vun.txt wae.txt xog.txt yav.txt yi.txt\
- yo.txt yo_BJ.txt yue.txt zgh.txt zh.txt\
- zh_Hans.txt zh_Hans_HK.txt zh_Hans_MO.txt zh_Hans_SG.txt zh_Hant.txt\
- zh_Hant_HK.txt zh_Hant_MO.txt zu.txt
+ es_AR.txt es_BO.txt es_BR.txt es_BZ.txt es_CL.txt\
+ es_CO.txt es_CR.txt es_CU.txt es_DO.txt es_EC.txt\
+ es_GQ.txt es_GT.txt es_HN.txt es_MX.txt es_NI.txt\
+ es_PA.txt es_PE.txt es_PH.txt es_PR.txt es_PY.txt\
+ es_SV.txt es_US.txt es_UY.txt es_VE.txt et.txt\
+ eu.txt ewo.txt fa.txt fa_AF.txt ff.txt\
+ ff_GN.txt ff_MR.txt fi.txt fil.txt fo.txt\
+ fo_DK.txt fr.txt fr_BI.txt fr_CA.txt fr_CD.txt\
+ fr_DJ.txt fr_DZ.txt fr_GN.txt fr_HT.txt fr_KM.txt\
+ fr_LU.txt fr_MG.txt fr_MR.txt fr_MU.txt fr_RW.txt\
+ fr_SC.txt fr_SY.txt fr_TN.txt fr_VU.txt fur.txt\
+ fy.txt ga.txt gd.txt gl.txt gsw.txt\
+ gu.txt guz.txt gv.txt ha.txt ha_GH.txt\
+ haw.txt he.txt hi.txt hr.txt hr_BA.txt\
+ hsb.txt hu.txt hy.txt id.txt ig.txt\
+ ii.txt is.txt it.txt ja.txt jgo.txt\
+ jmc.txt ka.txt kab.txt kam.txt kde.txt\
+ kea.txt khq.txt ki.txt kk.txt kkj.txt\
+ kl.txt kln.txt km.txt kn.txt ko.txt\
+ kok.txt ks.txt ksb.txt ksf.txt ksh.txt\
+ kw.txt ky.txt lag.txt lb.txt lg.txt\
+ lkt.txt ln.txt ln_AO.txt lo.txt lrc.txt\
+ lt.txt lu.txt luo.txt luy.txt lv.txt\
+ mas.txt mas_TZ.txt mer.txt mfe.txt mg.txt\
+ mgh.txt mgo.txt mk.txt ml.txt mn.txt\
+ mr.txt ms.txt ms_BN.txt ms_SG.txt mt.txt\
+ mua.txt my.txt mzn.txt naq.txt nb.txt\
+ nd.txt nds.txt ne.txt nl.txt nl_AW.txt\
+ nl_BQ.txt nl_CW.txt nl_SR.txt nl_SX.txt nmg.txt\
+ nn.txt nnh.txt nus.txt nyn.txt om.txt\
+ om_KE.txt or.txt os.txt os_RU.txt pa.txt\
+ pa_Arab.txt pa_Guru.txt pl.txt ps.txt pt.txt\
+ pt_AO.txt pt_CH.txt pt_CV.txt pt_GQ.txt pt_GW.txt\
+ pt_LU.txt pt_MO.txt pt_MZ.txt pt_PT.txt pt_ST.txt\
+ pt_TL.txt qu.txt qu_BO.txt qu_EC.txt rm.txt\
+ rn.txt ro.txt ro_MD.txt rof.txt ru.txt\
+ ru_BY.txt ru_KG.txt ru_KZ.txt ru_MD.txt rw.txt\
+ rwk.txt sah.txt saq.txt sbp.txt se.txt\
+ se_SE.txt seh.txt ses.txt sg.txt shi.txt\
+ shi_Latn.txt shi_Tfng.txt si.txt sk.txt sl.txt\
+ smn.txt sn.txt so.txt so_DJ.txt so_ET.txt\
+ so_KE.txt sq.txt sq_MK.txt sr.txt sr_Cyrl.txt\
+ sr_Latn.txt sv.txt sw.txt sw_CD.txt sw_UG.txt\
+ ta.txt ta_LK.txt ta_MY.txt ta_SG.txt te.txt\
+ teo.txt teo_KE.txt th.txt ti.txt ti_ER.txt\
+ to.txt tr.txt twq.txt tzm.txt ug.txt\
+ uk.txt ur.txt ur_IN.txt uz.txt uz_Arab.txt\
+ uz_Cyrl.txt uz_Latn.txt vai.txt vai_Latn.txt vai_Vaii.txt\
+ vi.txt vun.txt wae.txt xog.txt yav.txt\
+ yi.txt yo.txt yo_BJ.txt yue.txt zgh.txt\
+ zh.txt zh_Hans.txt zh_Hans_HK.txt zh_Hans_MO.txt zh_Hans_SG.txt\
+ zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt
 
diff --git a/icu4c/source/data/icu-config.xml b/icu4c/source/data/icu-config.xml
index e2c3ad77b18..48a2420eea4 100644
--- a/icu4c/source/data/icu-config.xml
+++ b/icu4c/source/data/icu-config.xml
@@ -253,6 +253,7 @@
 		
 		
 		
+		
 		
 		
 		
@@ -397,6 +398,7 @@
 		
 		
 		
+		
 		
 		
 		
diff --git a/icu4c/source/data/lang/es_BZ.txt b/icu4c/source/data/lang/es_BZ.txt
new file mode 100644
index 00000000000..7734598e064
--- /dev/null
+++ b/icu4c/source/data/lang/es_BZ.txt
@@ -0,0 +1,6 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html#License
+es_BZ{
+    %%Parent{"es_419"}
+    Version{"2.1.32.37"}
+}
diff --git a/icu4c/source/data/lang/resfiles.mk b/icu4c/source/data/lang/resfiles.mk
index d7f2a7c5f95..4a088f3450f 100644
--- a/icu4c/source/data/lang/resfiles.mk
+++ b/icu4c/source/data/lang/resfiles.mk
@@ -76,47 +76,47 @@ LANG_SOURCE = af.txt agq.txt ak.txt am.txt\
  en_TT.txt en_TV.txt en_TZ.txt en_UG.txt en_VC.txt\
  en_VG.txt en_VU.txt en_WS.txt en_ZA.txt en_ZM.txt\
  en_ZW.txt eo.txt es.txt es_419.txt es_AR.txt\
- es_BO.txt es_BR.txt es_CL.txt es_CO.txt es_CR.txt\
- es_CU.txt es_DO.txt es_EC.txt es_GT.txt es_HN.txt\
- es_MX.txt es_NI.txt es_PA.txt es_PE.txt es_PR.txt\
- es_PY.txt es_SV.txt es_US.txt es_UY.txt es_VE.txt\
- et.txt eu.txt ewo.txt fa.txt fa_AF.txt\
- ff.txt fi.txt fil.txt fo.txt fr.txt\
- fr_BE.txt fr_CA.txt fr_CH.txt fur.txt fy.txt\
- ga.txt gd.txt gl.txt gsw.txt gu.txt\
- guz.txt gv.txt ha.txt haw.txt he.txt\
- hi.txt hr.txt hsb.txt hu.txt hy.txt\
- id.txt ig.txt ii.txt is.txt it.txt\
- ja.txt jgo.txt jmc.txt ka.txt kab.txt\
- kam.txt kde.txt kea.txt khq.txt ki.txt\
- kk.txt kkj.txt kl.txt kln.txt km.txt\
- kn.txt ko.txt kok.txt ks.txt ksb.txt\
- ksf.txt ksh.txt kw.txt ky.txt lag.txt\
- lb.txt lg.txt lkt.txt ln.txt lo.txt\
- lrc.txt lt.txt lu.txt luo.txt luy.txt\
- lv.txt mas.txt mer.txt mfe.txt mg.txt\
- mgh.txt mgo.txt mk.txt ml.txt mn.txt\
- mr.txt ms.txt mt.txt mua.txt my.txt\
- mzn.txt naq.txt nb.txt nd.txt nds.txt\
- ne.txt nl.txt nmg.txt nn.txt nnh.txt\
- nus.txt nyn.txt om.txt or.txt os.txt\
- pa.txt pa_Arab.txt pa_Guru.txt pl.txt ps.txt\
- pt.txt pt_AO.txt pt_CH.txt pt_CV.txt pt_GQ.txt\
- pt_GW.txt pt_LU.txt pt_MO.txt pt_MZ.txt pt_PT.txt\
- pt_ST.txt pt_TL.txt qu.txt rm.txt rn.txt\
- ro.txt ro_MD.txt rof.txt ru.txt rw.txt\
- rwk.txt sah.txt saq.txt sbp.txt se.txt\
- se_FI.txt seh.txt ses.txt sg.txt shi.txt\
- shi_Latn.txt shi_Tfng.txt si.txt sk.txt sl.txt\
- smn.txt sn.txt so.txt sq.txt sr.txt\
- sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_XK.txt sr_Latn.txt\
- sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_XK.txt sv.txt sv_FI.txt\
- sw.txt sw_CD.txt sw_KE.txt ta.txt te.txt\
- teo.txt th.txt ti.txt to.txt tr.txt\
- twq.txt tzm.txt ug.txt uk.txt ur.txt\
- ur_IN.txt uz.txt uz_Arab.txt uz_Cyrl.txt uz_Latn.txt\
- vai.txt vai_Latn.txt vai_Vaii.txt vi.txt vun.txt\
- wae.txt xog.txt yav.txt yi.txt yo.txt\
- yo_BJ.txt yue.txt zgh.txt zh.txt zh_Hans.txt\
- zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt
+ es_BO.txt es_BR.txt es_BZ.txt es_CL.txt es_CO.txt\
+ es_CR.txt es_CU.txt es_DO.txt es_EC.txt es_GT.txt\
+ es_HN.txt es_MX.txt es_NI.txt es_PA.txt es_PE.txt\
+ es_PR.txt es_PY.txt es_SV.txt es_US.txt es_UY.txt\
+ es_VE.txt et.txt eu.txt ewo.txt fa.txt\
+ fa_AF.txt ff.txt fi.txt fil.txt fo.txt\
+ fr.txt fr_BE.txt fr_CA.txt fr_CH.txt fur.txt\
+ fy.txt ga.txt gd.txt gl.txt gsw.txt\
+ gu.txt guz.txt gv.txt ha.txt haw.txt\
+ he.txt hi.txt hr.txt hsb.txt hu.txt\
+ hy.txt id.txt ig.txt ii.txt is.txt\
+ it.txt ja.txt jgo.txt jmc.txt ka.txt\
+ kab.txt kam.txt kde.txt kea.txt khq.txt\
+ ki.txt kk.txt kkj.txt kl.txt kln.txt\
+ km.txt kn.txt ko.txt kok.txt ks.txt\
+ ksb.txt ksf.txt ksh.txt kw.txt ky.txt\
+ lag.txt lb.txt lg.txt lkt.txt ln.txt\
+ lo.txt lrc.txt lt.txt lu.txt luo.txt\
+ luy.txt lv.txt mas.txt mer.txt mfe.txt\
+ mg.txt mgh.txt mgo.txt mk.txt ml.txt\
+ mn.txt mr.txt ms.txt mt.txt mua.txt\
+ my.txt mzn.txt naq.txt nb.txt nd.txt\
+ nds.txt ne.txt nl.txt nmg.txt nn.txt\
+ nnh.txt nus.txt nyn.txt om.txt or.txt\
+ os.txt pa.txt pa_Arab.txt pa_Guru.txt pl.txt\
+ ps.txt pt.txt pt_AO.txt pt_CH.txt pt_CV.txt\
+ pt_GQ.txt pt_GW.txt pt_LU.txt pt_MO.txt pt_MZ.txt\
+ pt_PT.txt pt_ST.txt pt_TL.txt qu.txt rm.txt\
+ rn.txt ro.txt ro_MD.txt rof.txt ru.txt\
+ rw.txt rwk.txt sah.txt saq.txt sbp.txt\
+ se.txt se_FI.txt seh.txt ses.txt sg.txt\
+ shi.txt shi_Latn.txt shi_Tfng.txt si.txt sk.txt\
+ sl.txt smn.txt sn.txt so.txt sq.txt\
+ sr.txt sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_XK.txt\
+ sr_Latn.txt sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_XK.txt sv.txt\
+ sv_FI.txt sw.txt sw_CD.txt sw_KE.txt ta.txt\
+ te.txt teo.txt th.txt ti.txt to.txt\
+ tr.txt twq.txt tzm.txt ug.txt uk.txt\
+ ur.txt ur_IN.txt uz.txt uz_Arab.txt uz_Cyrl.txt\
+ uz_Latn.txt vai.txt vai_Latn.txt vai_Vaii.txt vi.txt\
+ vun.txt wae.txt xog.txt yav.txt yi.txt\
+ yo.txt yo_BJ.txt yue.txt zgh.txt zh.txt\
+ zh_Hans.txt zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt
 
diff --git a/icu4c/source/data/locales/es_BZ.txt b/icu4c/source/data/locales/es_BZ.txt
new file mode 100644
index 00000000000..7734598e064
--- /dev/null
+++ b/icu4c/source/data/locales/es_BZ.txt
@@ -0,0 +1,6 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html#License
+es_BZ{
+    %%Parent{"es_419"}
+    Version{"2.1.32.37"}
+}
diff --git a/icu4c/source/data/locales/it_VA.txt b/icu4c/source/data/locales/it_VA.txt
new file mode 100644
index 00000000000..b075886a761
--- /dev/null
+++ b/icu4c/source/data/locales/it_VA.txt
@@ -0,0 +1,5 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html#License
+it_VA{
+    Version{"2.1.32.51"}
+}
diff --git a/icu4c/source/data/locales/resfiles.mk b/icu4c/source/data/locales/resfiles.mk
index 964065ec021..b0ea2ce0249 100644
--- a/icu4c/source/data/locales/resfiles.mk
+++ b/icu4c/source/data/locales/resfiles.mk
@@ -89,99 +89,100 @@ GENRB_SOURCE = af.txt af_NA.txt af_ZA.txt agq.txt\
  en_UG.txt en_UM.txt en_US.txt en_US_POSIX.txt en_VC.txt\
  en_VG.txt en_VI.txt en_VU.txt en_WS.txt en_ZA.txt\
  en_ZM.txt en_ZW.txt eo.txt es.txt es_419.txt\
- es_AR.txt es_BO.txt es_BR.txt es_CL.txt es_CO.txt\
- es_CR.txt es_CU.txt es_DO.txt es_EA.txt es_EC.txt\
- es_ES.txt es_GQ.txt es_GT.txt es_HN.txt es_IC.txt\
- es_MX.txt es_NI.txt es_PA.txt es_PE.txt es_PH.txt\
- es_PR.txt es_PY.txt es_SV.txt es_US.txt es_UY.txt\
- es_VE.txt et.txt et_EE.txt eu.txt eu_ES.txt\
- ewo.txt ewo_CM.txt fa.txt fa_AF.txt fa_IR.txt\
- ff.txt ff_CM.txt ff_GN.txt ff_MR.txt ff_SN.txt\
- fi.txt fi_FI.txt fil.txt fil_PH.txt fo.txt\
- fo_DK.txt fo_FO.txt fr.txt fr_BE.txt fr_BF.txt\
- fr_BI.txt fr_BJ.txt fr_BL.txt fr_CA.txt fr_CD.txt\
- fr_CF.txt fr_CG.txt fr_CH.txt fr_CI.txt fr_CM.txt\
- fr_DJ.txt fr_DZ.txt fr_FR.txt fr_GA.txt fr_GF.txt\
- fr_GN.txt fr_GP.txt fr_GQ.txt fr_HT.txt fr_KM.txt\
- fr_LU.txt fr_MA.txt fr_MC.txt fr_MF.txt fr_MG.txt\
- fr_ML.txt fr_MQ.txt fr_MR.txt fr_MU.txt fr_NC.txt\
- fr_NE.txt fr_PF.txt fr_PM.txt fr_RE.txt fr_RW.txt\
- fr_SC.txt fr_SN.txt fr_SY.txt fr_TD.txt fr_TG.txt\
- fr_TN.txt fr_VU.txt fr_WF.txt fr_YT.txt fur.txt\
- fur_IT.txt fy.txt fy_NL.txt ga.txt ga_IE.txt\
- gd.txt gd_GB.txt gl.txt gl_ES.txt gsw.txt\
- gsw_CH.txt gsw_FR.txt gsw_LI.txt gu.txt gu_IN.txt\
- guz.txt guz_KE.txt gv.txt gv_IM.txt ha.txt\
- ha_GH.txt ha_NE.txt ha_NG.txt haw.txt haw_US.txt\
- he.txt he_IL.txt hi.txt hi_IN.txt hr.txt\
- hr_BA.txt hr_HR.txt hsb.txt hsb_DE.txt hu.txt\
- hu_HU.txt hy.txt hy_AM.txt id.txt id_ID.txt\
- ig.txt ig_NG.txt ii.txt ii_CN.txt is.txt\
- is_IS.txt it.txt it_CH.txt it_IT.txt it_SM.txt\
- ja.txt ja_JP.txt jgo.txt jgo_CM.txt jmc.txt\
- jmc_TZ.txt ka.txt ka_GE.txt kab.txt kab_DZ.txt\
- kam.txt kam_KE.txt kde.txt kde_TZ.txt kea.txt\
- kea_CV.txt khq.txt khq_ML.txt ki.txt ki_KE.txt\
- kk.txt kk_KZ.txt kkj.txt kkj_CM.txt kl.txt\
- kl_GL.txt kln.txt kln_KE.txt km.txt km_KH.txt\
- kn.txt kn_IN.txt ko.txt ko_KP.txt ko_KR.txt\
- kok.txt kok_IN.txt ks.txt ks_IN.txt ksb.txt\
- ksb_TZ.txt ksf.txt ksf_CM.txt ksh.txt ksh_DE.txt\
- kw.txt kw_GB.txt ky.txt ky_KG.txt lag.txt\
- lag_TZ.txt lb.txt lb_LU.txt lg.txt lg_UG.txt\
- lkt.txt lkt_US.txt ln.txt ln_AO.txt ln_CD.txt\
- ln_CF.txt ln_CG.txt lo.txt lo_LA.txt lrc.txt\
- lrc_IQ.txt lrc_IR.txt lt.txt lt_LT.txt lu.txt\
- lu_CD.txt luo.txt luo_KE.txt luy.txt luy_KE.txt\
- lv.txt lv_LV.txt mas.txt mas_KE.txt mas_TZ.txt\
- mer.txt mer_KE.txt mfe.txt mfe_MU.txt mg.txt\
- mg_MG.txt mgh.txt mgh_MZ.txt mgo.txt mgo_CM.txt\
- mk.txt mk_MK.txt ml.txt ml_IN.txt mn.txt\
- mn_MN.txt mr.txt mr_IN.txt ms.txt ms_BN.txt\
- ms_MY.txt ms_SG.txt mt.txt mt_MT.txt mua.txt\
- mua_CM.txt my.txt my_MM.txt mzn.txt mzn_IR.txt\
- naq.txt naq_NA.txt nb.txt nb_NO.txt nb_SJ.txt\
- nd.txt nd_ZW.txt nds.txt nds_DE.txt nds_NL.txt\
- ne.txt ne_IN.txt ne_NP.txt nl.txt nl_AW.txt\
- nl_BE.txt nl_BQ.txt nl_CW.txt nl_NL.txt nl_SR.txt\
- nl_SX.txt nmg.txt nmg_CM.txt nn.txt nn_NO.txt\
- nnh.txt nnh_CM.txt nus.txt nus_SS.txt nyn.txt\
- nyn_UG.txt om.txt om_ET.txt om_KE.txt or.txt\
- or_IN.txt os.txt os_GE.txt os_RU.txt pa.txt\
- pa_Arab.txt pa_Arab_PK.txt pa_Guru.txt pa_Guru_IN.txt pl.txt\
- pl_PL.txt ps.txt ps_AF.txt pt.txt pt_AO.txt\
- pt_BR.txt pt_CH.txt pt_CV.txt pt_GQ.txt pt_GW.txt\
- pt_LU.txt pt_MO.txt pt_MZ.txt pt_PT.txt pt_ST.txt\
- pt_TL.txt qu.txt qu_BO.txt qu_EC.txt qu_PE.txt\
- rm.txt rm_CH.txt rn.txt rn_BI.txt ro.txt\
- ro_MD.txt ro_RO.txt rof.txt rof_TZ.txt ru.txt\
- ru_BY.txt ru_KG.txt ru_KZ.txt ru_MD.txt ru_RU.txt\
- ru_UA.txt rw.txt rw_RW.txt rwk.txt rwk_TZ.txt\
- sah.txt sah_RU.txt saq.txt saq_KE.txt sbp.txt\
- sbp_TZ.txt se.txt se_FI.txt se_NO.txt se_SE.txt\
- seh.txt seh_MZ.txt ses.txt ses_ML.txt sg.txt\
- sg_CF.txt shi.txt shi_Latn.txt shi_Latn_MA.txt shi_Tfng.txt\
- shi_Tfng_MA.txt si.txt si_LK.txt sk.txt sk_SK.txt\
- sl.txt sl_SI.txt smn.txt smn_FI.txt sn.txt\
- sn_ZW.txt so.txt so_DJ.txt so_ET.txt so_KE.txt\
- so_SO.txt sq.txt sq_AL.txt sq_MK.txt sq_XK.txt\
- sr.txt sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_RS.txt\
- sr_Cyrl_XK.txt sr_Latn.txt sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_RS.txt\
- sr_Latn_XK.txt sv.txt sv_AX.txt sv_FI.txt sv_SE.txt\
- sw.txt sw_CD.txt sw_KE.txt sw_TZ.txt sw_UG.txt\
- ta.txt ta_IN.txt ta_LK.txt ta_MY.txt ta_SG.txt\
- te.txt te_IN.txt teo.txt teo_KE.txt teo_UG.txt\
- th.txt th_TH.txt ti.txt ti_ER.txt ti_ET.txt\
- to.txt to_TO.txt tr.txt tr_CY.txt tr_TR.txt\
- twq.txt twq_NE.txt tzm.txt tzm_MA.txt ug.txt\
- ug_CN.txt uk.txt uk_UA.txt ur.txt ur_IN.txt\
- ur_PK.txt uz.txt uz_Arab.txt uz_Arab_AF.txt uz_Cyrl.txt\
- uz_Cyrl_UZ.txt uz_Latn.txt uz_Latn_UZ.txt vai.txt vai_Latn.txt\
- vai_Latn_LR.txt vai_Vaii.txt vai_Vaii_LR.txt vi.txt vi_VN.txt\
- vun.txt vun_TZ.txt wae.txt wae_CH.txt xog.txt\
- xog_UG.txt yav.txt yav_CM.txt yi.txt yi_001.txt\
- yo.txt yo_BJ.txt yo_NG.txt yue.txt yue_HK.txt\
- zgh.txt zgh_MA.txt zh.txt zh_Hans.txt zh_Hans_CN.txt\
- zh_Hans_HK.txt zh_Hans_MO.txt zh_Hans_SG.txt zh_Hant.txt zh_Hant_HK.txt\
- zh_Hant_MO.txt zh_Hant_TW.txt zu.txt zu_ZA.txt
+ es_AR.txt es_BO.txt es_BR.txt es_BZ.txt es_CL.txt\
+ es_CO.txt es_CR.txt es_CU.txt es_DO.txt es_EA.txt\
+ es_EC.txt es_ES.txt es_GQ.txt es_GT.txt es_HN.txt\
+ es_IC.txt es_MX.txt es_NI.txt es_PA.txt es_PE.txt\
+ es_PH.txt es_PR.txt es_PY.txt es_SV.txt es_US.txt\
+ es_UY.txt es_VE.txt et.txt et_EE.txt eu.txt\
+ eu_ES.txt ewo.txt ewo_CM.txt fa.txt fa_AF.txt\
+ fa_IR.txt ff.txt ff_CM.txt ff_GN.txt ff_MR.txt\
+ ff_SN.txt fi.txt fi_FI.txt fil.txt fil_PH.txt\
+ fo.txt fo_DK.txt fo_FO.txt fr.txt fr_BE.txt\
+ fr_BF.txt fr_BI.txt fr_BJ.txt fr_BL.txt fr_CA.txt\
+ fr_CD.txt fr_CF.txt fr_CG.txt fr_CH.txt fr_CI.txt\
+ fr_CM.txt fr_DJ.txt fr_DZ.txt fr_FR.txt fr_GA.txt\
+ fr_GF.txt fr_GN.txt fr_GP.txt fr_GQ.txt fr_HT.txt\
+ fr_KM.txt fr_LU.txt fr_MA.txt fr_MC.txt fr_MF.txt\
+ fr_MG.txt fr_ML.txt fr_MQ.txt fr_MR.txt fr_MU.txt\
+ fr_NC.txt fr_NE.txt fr_PF.txt fr_PM.txt fr_RE.txt\
+ fr_RW.txt fr_SC.txt fr_SN.txt fr_SY.txt fr_TD.txt\
+ fr_TG.txt fr_TN.txt fr_VU.txt fr_WF.txt fr_YT.txt\
+ fur.txt fur_IT.txt fy.txt fy_NL.txt ga.txt\
+ ga_IE.txt gd.txt gd_GB.txt gl.txt gl_ES.txt\
+ gsw.txt gsw_CH.txt gsw_FR.txt gsw_LI.txt gu.txt\
+ gu_IN.txt guz.txt guz_KE.txt gv.txt gv_IM.txt\
+ ha.txt ha_GH.txt ha_NE.txt ha_NG.txt haw.txt\
+ haw_US.txt he.txt he_IL.txt hi.txt hi_IN.txt\
+ hr.txt hr_BA.txt hr_HR.txt hsb.txt hsb_DE.txt\
+ hu.txt hu_HU.txt hy.txt hy_AM.txt id.txt\
+ id_ID.txt ig.txt ig_NG.txt ii.txt ii_CN.txt\
+ is.txt is_IS.txt it.txt it_CH.txt it_IT.txt\
+ it_SM.txt it_VA.txt ja.txt ja_JP.txt jgo.txt\
+ jgo_CM.txt jmc.txt jmc_TZ.txt ka.txt ka_GE.txt\
+ kab.txt kab_DZ.txt kam.txt kam_KE.txt kde.txt\
+ kde_TZ.txt kea.txt kea_CV.txt khq.txt khq_ML.txt\
+ ki.txt ki_KE.txt kk.txt kk_KZ.txt kkj.txt\
+ kkj_CM.txt kl.txt kl_GL.txt kln.txt kln_KE.txt\
+ km.txt km_KH.txt kn.txt kn_IN.txt ko.txt\
+ ko_KP.txt ko_KR.txt kok.txt kok_IN.txt ks.txt\
+ ks_IN.txt ksb.txt ksb_TZ.txt ksf.txt ksf_CM.txt\
+ ksh.txt ksh_DE.txt kw.txt kw_GB.txt ky.txt\
+ ky_KG.txt lag.txt lag_TZ.txt lb.txt lb_LU.txt\
+ lg.txt lg_UG.txt lkt.txt lkt_US.txt ln.txt\
+ ln_AO.txt ln_CD.txt ln_CF.txt ln_CG.txt lo.txt\
+ lo_LA.txt lrc.txt lrc_IQ.txt lrc_IR.txt lt.txt\
+ lt_LT.txt lu.txt lu_CD.txt luo.txt luo_KE.txt\
+ luy.txt luy_KE.txt lv.txt lv_LV.txt mas.txt\
+ mas_KE.txt mas_TZ.txt mer.txt mer_KE.txt mfe.txt\
+ mfe_MU.txt mg.txt mg_MG.txt mgh.txt mgh_MZ.txt\
+ mgo.txt mgo_CM.txt mk.txt mk_MK.txt ml.txt\
+ ml_IN.txt mn.txt mn_MN.txt mr.txt mr_IN.txt\
+ ms.txt ms_BN.txt ms_MY.txt ms_SG.txt mt.txt\
+ mt_MT.txt mua.txt mua_CM.txt my.txt my_MM.txt\
+ mzn.txt mzn_IR.txt naq.txt naq_NA.txt nb.txt\
+ nb_NO.txt nb_SJ.txt nd.txt nd_ZW.txt nds.txt\
+ nds_DE.txt nds_NL.txt ne.txt ne_IN.txt ne_NP.txt\
+ nl.txt nl_AW.txt nl_BE.txt nl_BQ.txt nl_CW.txt\
+ nl_NL.txt nl_SR.txt nl_SX.txt nmg.txt nmg_CM.txt\
+ nn.txt nn_NO.txt nnh.txt nnh_CM.txt nus.txt\
+ nus_SS.txt nyn.txt nyn_UG.txt om.txt om_ET.txt\
+ om_KE.txt or.txt or_IN.txt os.txt os_GE.txt\
+ os_RU.txt pa.txt pa_Arab.txt pa_Arab_PK.txt pa_Guru.txt\
+ pa_Guru_IN.txt pl.txt pl_PL.txt ps.txt ps_AF.txt\
+ pt.txt pt_AO.txt pt_BR.txt pt_CH.txt pt_CV.txt\
+ pt_GQ.txt pt_GW.txt pt_LU.txt pt_MO.txt pt_MZ.txt\
+ pt_PT.txt pt_ST.txt pt_TL.txt qu.txt qu_BO.txt\
+ qu_EC.txt qu_PE.txt rm.txt rm_CH.txt rn.txt\
+ rn_BI.txt ro.txt ro_MD.txt ro_RO.txt rof.txt\
+ rof_TZ.txt ru.txt ru_BY.txt ru_KG.txt ru_KZ.txt\
+ ru_MD.txt ru_RU.txt ru_UA.txt rw.txt rw_RW.txt\
+ rwk.txt rwk_TZ.txt sah.txt sah_RU.txt saq.txt\
+ saq_KE.txt sbp.txt sbp_TZ.txt se.txt se_FI.txt\
+ se_NO.txt se_SE.txt seh.txt seh_MZ.txt ses.txt\
+ ses_ML.txt sg.txt sg_CF.txt shi.txt shi_Latn.txt\
+ shi_Latn_MA.txt shi_Tfng.txt shi_Tfng_MA.txt si.txt si_LK.txt\
+ sk.txt sk_SK.txt sl.txt sl_SI.txt smn.txt\
+ smn_FI.txt sn.txt sn_ZW.txt so.txt so_DJ.txt\
+ so_ET.txt so_KE.txt so_SO.txt sq.txt sq_AL.txt\
+ sq_MK.txt sq_XK.txt sr.txt sr_Cyrl.txt sr_Cyrl_BA.txt\
+ sr_Cyrl_ME.txt sr_Cyrl_RS.txt sr_Cyrl_XK.txt sr_Latn.txt sr_Latn_BA.txt\
+ sr_Latn_ME.txt sr_Latn_RS.txt sr_Latn_XK.txt sv.txt sv_AX.txt\
+ sv_FI.txt sv_SE.txt sw.txt sw_CD.txt sw_KE.txt\
+ sw_TZ.txt sw_UG.txt ta.txt ta_IN.txt ta_LK.txt\
+ ta_MY.txt ta_SG.txt te.txt te_IN.txt teo.txt\
+ teo_KE.txt teo_UG.txt th.txt th_TH.txt ti.txt\
+ ti_ER.txt ti_ET.txt to.txt to_TO.txt tr.txt\
+ tr_CY.txt tr_TR.txt twq.txt twq_NE.txt tzm.txt\
+ tzm_MA.txt ug.txt ug_CN.txt uk.txt uk_UA.txt\
+ ur.txt ur_IN.txt ur_PK.txt uz.txt uz_Arab.txt\
+ uz_Arab_AF.txt uz_Cyrl.txt uz_Cyrl_UZ.txt uz_Latn.txt uz_Latn_UZ.txt\
+ vai.txt vai_Latn.txt vai_Latn_LR.txt vai_Vaii.txt vai_Vaii_LR.txt\
+ vi.txt vi_VN.txt vun.txt vun_TZ.txt wae.txt\
+ wae_CH.txt xog.txt xog_UG.txt yav.txt yav_CM.txt\
+ yi.txt yi_001.txt yo.txt yo_BJ.txt yo_NG.txt\
+ yue.txt yue_HK.txt zgh.txt zgh_MA.txt zh.txt\
+ zh_Hans.txt zh_Hans_CN.txt zh_Hans_HK.txt zh_Hans_MO.txt zh_Hans_SG.txt\
+ zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zh_Hant_TW.txt zu.txt\
+ zu_ZA.txt
 
diff --git a/icu4c/source/data/region/es_BZ.txt b/icu4c/source/data/region/es_BZ.txt
new file mode 100644
index 00000000000..7734598e064
--- /dev/null
+++ b/icu4c/source/data/region/es_BZ.txt
@@ -0,0 +1,6 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html#License
+es_BZ{
+    %%Parent{"es_419"}
+    Version{"2.1.32.37"}
+}
diff --git a/icu4c/source/data/region/resfiles.mk b/icu4c/source/data/region/resfiles.mk
index 6a38276c209..082bc48aef8 100644
--- a/icu4c/source/data/region/resfiles.mk
+++ b/icu4c/source/data/region/resfiles.mk
@@ -76,47 +76,47 @@ REGION_SOURCE = af.txt agq.txt ak.txt am.txt\
  en_TV.txt en_TZ.txt en_UG.txt en_VC.txt en_VG.txt\
  en_VU.txt en_WS.txt en_ZA.txt en_ZM.txt en_ZW.txt\
  eo.txt es.txt es_419.txt es_AR.txt es_BO.txt\
- es_BR.txt es_CL.txt es_CO.txt es_CR.txt es_CU.txt\
- es_DO.txt es_EC.txt es_GT.txt es_HN.txt es_MX.txt\
- es_NI.txt es_PA.txt es_PE.txt es_PR.txt es_PY.txt\
- es_SV.txt es_US.txt es_UY.txt es_VE.txt et.txt\
- eu.txt ewo.txt fa.txt fa_AF.txt ff.txt\
- fi.txt fil.txt fo.txt fr.txt fr_BE.txt\
- fr_CA.txt fur.txt fy.txt ga.txt gd.txt\
- gl.txt gsw.txt gu.txt guz.txt gv.txt\
- ha.txt haw.txt he.txt hi.txt hr.txt\
- hsb.txt hu.txt hy.txt id.txt ig.txt\
- ii.txt is.txt it.txt ja.txt jgo.txt\
- jmc.txt ka.txt kab.txt kam.txt kde.txt\
- kea.txt khq.txt ki.txt kk.txt kkj.txt\
- kl.txt kln.txt km.txt kn.txt ko.txt\
- ko_KP.txt kok.txt ks.txt ksb.txt ksf.txt\
- ksh.txt kw.txt ky.txt lag.txt lb.txt\
- lg.txt lkt.txt ln.txt lo.txt lrc.txt\
- lt.txt lu.txt luo.txt luy.txt lv.txt\
- mas.txt mer.txt mfe.txt mg.txt mgh.txt\
- mgo.txt mk.txt ml.txt mn.txt mr.txt\
- ms.txt mt.txt mua.txt my.txt mzn.txt\
- naq.txt nb.txt nd.txt nds.txt ne.txt\
- nl.txt nmg.txt nn.txt nnh.txt nus.txt\
- nyn.txt om.txt or.txt os.txt pa.txt\
- pa_Arab.txt pa_Guru.txt pl.txt ps.txt pt.txt\
- pt_AO.txt pt_CH.txt pt_CV.txt pt_GQ.txt pt_GW.txt\
- pt_LU.txt pt_MO.txt pt_MZ.txt pt_PT.txt pt_ST.txt\
- pt_TL.txt qu.txt rm.txt rn.txt ro.txt\
- ro_MD.txt rof.txt ru.txt ru_UA.txt rw.txt\
- rwk.txt sah.txt saq.txt sbp.txt se.txt\
- se_FI.txt seh.txt ses.txt sg.txt shi.txt\
- shi_Latn.txt shi_Tfng.txt si.txt sk.txt sl.txt\
- smn.txt sn.txt so.txt sq.txt sr.txt\
- sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_XK.txt sr_Latn.txt\
- sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_XK.txt sv.txt sw.txt\
- sw_CD.txt sw_KE.txt ta.txt te.txt teo.txt\
- th.txt ti.txt to.txt tr.txt twq.txt\
- tzm.txt ug.txt uk.txt ur.txt ur_IN.txt\
- uz.txt uz_Arab.txt uz_Cyrl.txt uz_Latn.txt vai.txt\
- vai_Latn.txt vai_Vaii.txt vi.txt vun.txt wae.txt\
- xog.txt yav.txt yi.txt yo.txt yo_BJ.txt\
- yue.txt zgh.txt zh.txt zh_Hans.txt zh_Hant.txt\
- zh_Hant_HK.txt zh_Hant_MO.txt zu.txt
+ es_BR.txt es_BZ.txt es_CL.txt es_CO.txt es_CR.txt\
+ es_CU.txt es_DO.txt es_EC.txt es_GT.txt es_HN.txt\
+ es_MX.txt es_NI.txt es_PA.txt es_PE.txt es_PR.txt\
+ es_PY.txt es_SV.txt es_US.txt es_UY.txt es_VE.txt\
+ et.txt eu.txt ewo.txt fa.txt fa_AF.txt\
+ ff.txt fi.txt fil.txt fo.txt fr.txt\
+ fr_BE.txt fr_CA.txt fur.txt fy.txt ga.txt\
+ gd.txt gl.txt gsw.txt gu.txt guz.txt\
+ gv.txt ha.txt haw.txt he.txt hi.txt\
+ hr.txt hsb.txt hu.txt hy.txt id.txt\
+ ig.txt ii.txt is.txt it.txt ja.txt\
+ jgo.txt jmc.txt ka.txt kab.txt kam.txt\
+ kde.txt kea.txt khq.txt ki.txt kk.txt\
+ kkj.txt kl.txt kln.txt km.txt kn.txt\
+ ko.txt ko_KP.txt kok.txt ks.txt ksb.txt\
+ ksf.txt ksh.txt kw.txt ky.txt lag.txt\
+ lb.txt lg.txt lkt.txt ln.txt lo.txt\
+ lrc.txt lt.txt lu.txt luo.txt luy.txt\
+ lv.txt mas.txt mer.txt mfe.txt mg.txt\
+ mgh.txt mgo.txt mk.txt ml.txt mn.txt\
+ mr.txt ms.txt mt.txt mua.txt my.txt\
+ mzn.txt naq.txt nb.txt nd.txt nds.txt\
+ ne.txt nl.txt nmg.txt nn.txt nnh.txt\
+ nus.txt nyn.txt om.txt or.txt os.txt\
+ pa.txt pa_Arab.txt pa_Guru.txt pl.txt ps.txt\
+ pt.txt pt_AO.txt pt_CH.txt pt_CV.txt pt_GQ.txt\
+ pt_GW.txt pt_LU.txt pt_MO.txt pt_MZ.txt pt_PT.txt\
+ pt_ST.txt pt_TL.txt qu.txt rm.txt rn.txt\
+ ro.txt ro_MD.txt rof.txt ru.txt ru_UA.txt\
+ rw.txt rwk.txt sah.txt saq.txt sbp.txt\
+ se.txt se_FI.txt seh.txt ses.txt sg.txt\
+ shi.txt shi_Latn.txt shi_Tfng.txt si.txt sk.txt\
+ sl.txt smn.txt sn.txt so.txt sq.txt\
+ sr.txt sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_XK.txt\
+ sr_Latn.txt sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_XK.txt sv.txt\
+ sw.txt sw_CD.txt sw_KE.txt ta.txt te.txt\
+ teo.txt th.txt ti.txt to.txt tr.txt\
+ twq.txt tzm.txt ug.txt uk.txt ur.txt\
+ ur_IN.txt uz.txt uz_Arab.txt uz_Cyrl.txt uz_Latn.txt\
+ vai.txt vai_Latn.txt vai_Vaii.txt vi.txt vun.txt\
+ wae.txt xog.txt yav.txt yi.txt yo.txt\
+ yo_BJ.txt yue.txt zgh.txt zh.txt zh_Hans.txt\
+ zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt
 
diff --git a/icu4c/source/data/unit/es_BZ.txt b/icu4c/source/data/unit/es_BZ.txt
new file mode 100644
index 00000000000..7734598e064
--- /dev/null
+++ b/icu4c/source/data/unit/es_BZ.txt
@@ -0,0 +1,6 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html#License
+es_BZ{
+    %%Parent{"es_419"}
+    Version{"2.1.32.37"}
+}
diff --git a/icu4c/source/data/unit/resfiles.mk b/icu4c/source/data/unit/resfiles.mk
index e582ab52af5..7ff973986af 100644
--- a/icu4c/source/data/unit/resfiles.mk
+++ b/icu4c/source/data/unit/resfiles.mk
@@ -76,45 +76,45 @@ UNIT_SOURCE = af.txt agq.txt ak.txt am.txt\
  en_TV.txt en_TZ.txt en_UG.txt en_VC.txt en_VG.txt\
  en_VU.txt en_WS.txt en_ZA.txt en_ZM.txt en_ZW.txt\
  eo.txt es.txt es_419.txt es_AR.txt es_BO.txt\
- es_BR.txt es_CL.txt es_CO.txt es_CR.txt es_CU.txt\
- es_DO.txt es_EC.txt es_GT.txt es_HN.txt es_MX.txt\
- es_NI.txt es_PA.txt es_PE.txt es_PR.txt es_PY.txt\
- es_SV.txt es_US.txt es_UY.txt es_VE.txt et.txt\
- eu.txt ewo.txt fa.txt ff.txt fi.txt\
- fil.txt fo.txt fr.txt fr_CA.txt fr_HT.txt\
- fur.txt fy.txt ga.txt gd.txt gl.txt\
- gsw.txt gu.txt guz.txt gv.txt ha.txt\
- haw.txt he.txt hi.txt hr.txt hsb.txt\
- hu.txt hy.txt id.txt ig.txt ii.txt\
- is.txt it.txt ja.txt jgo.txt jmc.txt\
- ka.txt kab.txt kam.txt kde.txt kea.txt\
- khq.txt ki.txt kk.txt kkj.txt kl.txt\
- kln.txt km.txt kn.txt ko.txt kok.txt\
- ks.txt ksb.txt ksf.txt ksh.txt kw.txt\
- ky.txt lag.txt lb.txt lg.txt lkt.txt\
- ln.txt lo.txt lrc.txt lt.txt lu.txt\
- luo.txt luy.txt lv.txt mas.txt mer.txt\
- mfe.txt mg.txt mgh.txt mgo.txt mk.txt\
- ml.txt mn.txt mr.txt ms.txt mt.txt\
- mua.txt my.txt mzn.txt naq.txt nb.txt\
- nd.txt nds.txt ne.txt nl.txt nmg.txt\
- nn.txt nnh.txt nus.txt nyn.txt om.txt\
- or.txt os.txt pa.txt pa_Arab.txt pa_Guru.txt\
- pl.txt ps.txt pt.txt pt_AO.txt pt_CH.txt\
- pt_CV.txt pt_GQ.txt pt_GW.txt pt_LU.txt pt_MO.txt\
- pt_MZ.txt pt_PT.txt pt_ST.txt pt_TL.txt qu.txt\
- rm.txt rn.txt ro.txt ro_MD.txt rof.txt\
- ru.txt rw.txt rwk.txt sah.txt saq.txt\
- sbp.txt se.txt seh.txt ses.txt sg.txt\
- shi.txt shi_Latn.txt shi_Tfng.txt si.txt sk.txt\
- sl.txt smn.txt sn.txt so.txt sq.txt\
- sr.txt sr_Cyrl.txt sr_Latn.txt sv.txt sv_FI.txt\
- sw.txt ta.txt te.txt teo.txt th.txt\
- ti.txt to.txt tr.txt twq.txt tzm.txt\
- ug.txt uk.txt ur.txt ur_IN.txt uz.txt\
- uz_Arab.txt uz_Cyrl.txt uz_Latn.txt vai.txt vai_Latn.txt\
- vai_Vaii.txt vi.txt vun.txt wae.txt xog.txt\
- yav.txt yi.txt yo.txt yue.txt zgh.txt\
- zh.txt zh_Hans.txt zh_Hans_HK.txt zh_Hans_MO.txt zh_Hans_SG.txt\
- zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt
+ es_BR.txt es_BZ.txt es_CL.txt es_CO.txt es_CR.txt\
+ es_CU.txt es_DO.txt es_EC.txt es_GT.txt es_HN.txt\
+ es_MX.txt es_NI.txt es_PA.txt es_PE.txt es_PR.txt\
+ es_PY.txt es_SV.txt es_US.txt es_UY.txt es_VE.txt\
+ et.txt eu.txt ewo.txt fa.txt ff.txt\
+ fi.txt fil.txt fo.txt fr.txt fr_CA.txt\
+ fr_HT.txt fur.txt fy.txt ga.txt gd.txt\
+ gl.txt gsw.txt gu.txt guz.txt gv.txt\
+ ha.txt haw.txt he.txt hi.txt hr.txt\
+ hsb.txt hu.txt hy.txt id.txt ig.txt\
+ ii.txt is.txt it.txt ja.txt jgo.txt\
+ jmc.txt ka.txt kab.txt kam.txt kde.txt\
+ kea.txt khq.txt ki.txt kk.txt kkj.txt\
+ kl.txt kln.txt km.txt kn.txt ko.txt\
+ kok.txt ks.txt ksb.txt ksf.txt ksh.txt\
+ kw.txt ky.txt lag.txt lb.txt lg.txt\
+ lkt.txt ln.txt lo.txt lrc.txt lt.txt\
+ lu.txt luo.txt luy.txt lv.txt mas.txt\
+ mer.txt mfe.txt mg.txt mgh.txt mgo.txt\
+ mk.txt ml.txt mn.txt mr.txt ms.txt\
+ mt.txt mua.txt my.txt mzn.txt naq.txt\
+ nb.txt nd.txt nds.txt ne.txt nl.txt\
+ nmg.txt nn.txt nnh.txt nus.txt nyn.txt\
+ om.txt or.txt os.txt pa.txt pa_Arab.txt\
+ pa_Guru.txt pl.txt ps.txt pt.txt pt_AO.txt\
+ pt_CH.txt pt_CV.txt pt_GQ.txt pt_GW.txt pt_LU.txt\
+ pt_MO.txt pt_MZ.txt pt_PT.txt pt_ST.txt pt_TL.txt\
+ qu.txt rm.txt rn.txt ro.txt ro_MD.txt\
+ rof.txt ru.txt rw.txt rwk.txt sah.txt\
+ saq.txt sbp.txt se.txt seh.txt ses.txt\
+ sg.txt shi.txt shi_Latn.txt shi_Tfng.txt si.txt\
+ sk.txt sl.txt smn.txt sn.txt so.txt\
+ sq.txt sr.txt sr_Cyrl.txt sr_Latn.txt sv.txt\
+ sv_FI.txt sw.txt ta.txt te.txt teo.txt\
+ th.txt ti.txt to.txt tr.txt twq.txt\
+ tzm.txt ug.txt uk.txt ur.txt ur_IN.txt\
+ uz.txt uz_Arab.txt uz_Cyrl.txt uz_Latn.txt vai.txt\
+ vai_Latn.txt vai_Vaii.txt vi.txt vun.txt wae.txt\
+ xog.txt yav.txt yi.txt yo.txt yue.txt\
+ zgh.txt zh.txt zh_Hans.txt zh_Hans_HK.txt zh_Hans_MO.txt\
+ zh_Hans_SG.txt zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt
 
diff --git a/icu4c/source/data/zone/es_BZ.txt b/icu4c/source/data/zone/es_BZ.txt
new file mode 100644
index 00000000000..7734598e064
--- /dev/null
+++ b/icu4c/source/data/zone/es_BZ.txt
@@ -0,0 +1,6 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html#License
+es_BZ{
+    %%Parent{"es_419"}
+    Version{"2.1.32.37"}
+}
diff --git a/icu4c/source/data/zone/resfiles.mk b/icu4c/source/data/zone/resfiles.mk
index b927e3e279f..c38a013c486 100644
--- a/icu4c/source/data/zone/resfiles.mk
+++ b/icu4c/source/data/zone/resfiles.mk
@@ -76,46 +76,46 @@ ZONE_SOURCE = af.txt agq.txt ak.txt am.txt\
  en_TO.txt en_TT.txt en_TV.txt en_TZ.txt en_UG.txt\
  en_VC.txt en_VG.txt en_VU.txt en_WS.txt en_ZA.txt\
  en_ZM.txt en_ZW.txt eo.txt es.txt es_419.txt\
- es_AR.txt es_BO.txt es_BR.txt es_CL.txt es_CO.txt\
- es_CR.txt es_CU.txt es_DO.txt es_EC.txt es_GT.txt\
- es_HN.txt es_MX.txt es_NI.txt es_PA.txt es_PE.txt\
- es_PR.txt es_PY.txt es_SV.txt es_US.txt es_UY.txt\
- es_VE.txt et.txt eu.txt ewo.txt fa.txt\
- ff.txt fi.txt fil.txt fo.txt fr.txt\
- fr_CA.txt fr_GF.txt fur.txt fy.txt ga.txt\
- gd.txt gl.txt gsw.txt gu.txt guz.txt\
- gv.txt ha.txt haw.txt he.txt hi.txt\
- hr.txt hsb.txt hu.txt hy.txt id.txt\
- ig.txt ii.txt is.txt it.txt ja.txt\
- jgo.txt jmc.txt ka.txt kab.txt kam.txt\
- kde.txt kea.txt khq.txt ki.txt kk.txt\
- kkj.txt kl.txt kln.txt km.txt kn.txt\
- ko.txt ko_KP.txt kok.txt ks.txt ksb.txt\
- ksf.txt ksh.txt kw.txt ky.txt lag.txt\
- lb.txt lg.txt lkt.txt ln.txt lo.txt\
- lrc.txt lt.txt lu.txt luo.txt luy.txt\
- lv.txt mas.txt mer.txt mfe.txt mg.txt\
- mgh.txt mgo.txt mk.txt ml.txt mn.txt\
- mr.txt ms.txt mt.txt mua.txt my.txt\
- mzn.txt naq.txt nb.txt nd.txt nds.txt\
- ne.txt ne_IN.txt nl.txt nl_SR.txt nmg.txt\
- nn.txt nnh.txt nus.txt nyn.txt om.txt\
- or.txt os.txt pa.txt pa_Arab.txt pa_Guru.txt\
- pl.txt ps.txt pt.txt pt_AO.txt pt_CH.txt\
- pt_CV.txt pt_GQ.txt pt_GW.txt pt_LU.txt pt_MO.txt\
- pt_MZ.txt pt_PT.txt pt_ST.txt pt_TL.txt qu.txt\
- qu_BO.txt qu_EC.txt rm.txt rn.txt ro.txt\
- rof.txt ru.txt rw.txt rwk.txt sah.txt\
- saq.txt sbp.txt se.txt seh.txt ses.txt\
- sg.txt shi.txt shi_Latn.txt shi_Tfng.txt si.txt\
- sk.txt sl.txt smn.txt sn.txt so.txt\
- sq.txt sr.txt sr_Cyrl.txt sr_Latn.txt sv.txt\
- sw.txt ta.txt ta_MY.txt ta_SG.txt te.txt\
- teo.txt th.txt ti.txt to.txt tr.txt\
- twq.txt tzm.txt ug.txt uk.txt ur.txt\
- ur_IN.txt uz.txt uz_Arab.txt uz_Cyrl.txt uz_Latn.txt\
- vai.txt vai_Latn.txt vai_Vaii.txt vi.txt vun.txt\
- wae.txt xog.txt yav.txt yi.txt yo.txt\
- yue.txt zgh.txt zh.txt zh_Hans.txt zh_Hans_SG.txt\
- zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt
+ es_AR.txt es_BO.txt es_BR.txt es_BZ.txt es_CL.txt\
+ es_CO.txt es_CR.txt es_CU.txt es_DO.txt es_EC.txt\
+ es_GT.txt es_HN.txt es_MX.txt es_NI.txt es_PA.txt\
+ es_PE.txt es_PR.txt es_PY.txt es_SV.txt es_US.txt\
+ es_UY.txt es_VE.txt et.txt eu.txt ewo.txt\
+ fa.txt ff.txt fi.txt fil.txt fo.txt\
+ fr.txt fr_CA.txt fr_GF.txt fur.txt fy.txt\
+ ga.txt gd.txt gl.txt gsw.txt gu.txt\
+ guz.txt gv.txt ha.txt haw.txt he.txt\
+ hi.txt hr.txt hsb.txt hu.txt hy.txt\
+ id.txt ig.txt ii.txt is.txt it.txt\
+ ja.txt jgo.txt jmc.txt ka.txt kab.txt\
+ kam.txt kde.txt kea.txt khq.txt ki.txt\
+ kk.txt kkj.txt kl.txt kln.txt km.txt\
+ kn.txt ko.txt ko_KP.txt kok.txt ks.txt\
+ ksb.txt ksf.txt ksh.txt kw.txt ky.txt\
+ lag.txt lb.txt lg.txt lkt.txt ln.txt\
+ lo.txt lrc.txt lt.txt lu.txt luo.txt\
+ luy.txt lv.txt mas.txt mer.txt mfe.txt\
+ mg.txt mgh.txt mgo.txt mk.txt ml.txt\
+ mn.txt mr.txt ms.txt mt.txt mua.txt\
+ my.txt mzn.txt naq.txt nb.txt nd.txt\
+ nds.txt ne.txt ne_IN.txt nl.txt nl_SR.txt\
+ nmg.txt nn.txt nnh.txt nus.txt nyn.txt\
+ om.txt or.txt os.txt pa.txt pa_Arab.txt\
+ pa_Guru.txt pl.txt ps.txt pt.txt pt_AO.txt\
+ pt_CH.txt pt_CV.txt pt_GQ.txt pt_GW.txt pt_LU.txt\
+ pt_MO.txt pt_MZ.txt pt_PT.txt pt_ST.txt pt_TL.txt\
+ qu.txt qu_BO.txt qu_EC.txt rm.txt rn.txt\
+ ro.txt rof.txt ru.txt rw.txt rwk.txt\
+ sah.txt saq.txt sbp.txt se.txt seh.txt\
+ ses.txt sg.txt shi.txt shi_Latn.txt shi_Tfng.txt\
+ si.txt sk.txt sl.txt smn.txt sn.txt\
+ so.txt sq.txt sr.txt sr_Cyrl.txt sr_Latn.txt\
+ sv.txt sw.txt ta.txt ta_MY.txt ta_SG.txt\
+ te.txt teo.txt th.txt ti.txt to.txt\
+ tr.txt twq.txt tzm.txt ug.txt uk.txt\
+ ur.txt ur_IN.txt uz.txt uz_Arab.txt uz_Cyrl.txt\
+ uz_Latn.txt vai.txt vai_Latn.txt vai_Vaii.txt vi.txt\
+ vun.txt wae.txt xog.txt yav.txt yi.txt\
+ yo.txt yue.txt zgh.txt zh.txt zh_Hans.txt\
+ zh_Hans_SG.txt zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt
 
diff --git a/icu4j/main/shared/data/icudata.jar b/icu4j/main/shared/data/icudata.jar
index 87a679a0b95..caa786027c7 100755
--- a/icu4j/main/shared/data/icudata.jar
+++ b/icu4j/main/shared/data/icudata.jar
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:88c822b919d4c929386735e4cf6d95194bf20dba17cfe4aa93d4f46a08d2a5d4
-size 12155049
+oid sha256:b7b2a9e282f3f3296f80ef40391df4d5a6f161bdebe6270b73e7bcc68db124ac
+size 12155212

From 782e4ff95e0cabbdf37f5fb612cfe87df9eed5ed Mon Sep 17 00:00:00 2001
From: Markus Scherer 
Date: Tue, 7 Mar 2017 22:57:46 +0000
Subject: [PATCH 5/5] ICU-12922 bidi explicit level 0: lift it up to resolved
 paragraph level except leave it at 0 for paragraph separators

X-SVN-Rev: 39741
---
 icu4c/source/common/ubidi.cpp                 | 52 +++++++---
 icu4c/source/common/unicode/ubidi.h           |  9 +-
 icu4c/source/test/cintltst/cbiditst.c         | 23 +++++
 .../core/src/com/ibm/icu/text/Bidi.java       | 96 ++++++++++++-------
 .../com/ibm/icu/dev/test/bidi/TestBidi.java   | 20 +++-
 5 files changed, 145 insertions(+), 55 deletions(-)

diff --git a/icu4c/source/common/ubidi.cpp b/icu4c/source/common/ubidi.cpp
index 29153499b0d..8e2fc36e5f1 100644
--- a/icu4c/source/common/ubidi.cpp
+++ b/icu4c/source/common/ubidi.cpp
@@ -1348,18 +1348,20 @@ resolveExplicitLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) {
 static UBiDiDirection
 checkExplicitLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) {
     DirProp *dirProps=pBiDi->dirProps;
-    DirProp dirProp;
     UBiDiLevel *levels=pBiDi->levels;
     int32_t isolateCount=0;
 
-    int32_t i, length=pBiDi->length;
+    int32_t length=pBiDi->length;
     Flags flags=0;  /* collect all directionalities in the text */
-    UBiDiLevel level;
     pBiDi->isolateCount=0;
 
-    for(i=0; iparas[0].limit;
+    int32_t currentParaLevel = pBiDi->paraLevel;
+
+    for(int32_t i=0; ipBiDi->isolateCount)
@@ -1369,21 +1371,41 @@ checkExplicitLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) {
             isolateCount--;
         else if(dirProp==B)
             isolateCount=0;
-        if(level&UBIDI_LEVEL_OVERRIDE) {
+
+        // optimized version of  int32_t currentParaLevel = GET_PARALEVEL(pBiDi, i);
+        if (pBiDi->defaultParaLevel != 0 &&
+                i == currentParaLimit && (currentParaIndex + 1) < pBiDi->paraCount) {
+            currentParaLevel = pBiDi->paras[++currentParaIndex].level;
+            currentParaLimit = pBiDi->paras[currentParaIndex].limit;
+        }
+
+        UBiDiLevel overrideFlag = level & UBIDI_LEVEL_OVERRIDE;
+        level &= ~UBIDI_LEVEL_OVERRIDE;
+        if (level < currentParaLevel || UBIDI_MAX_EXPLICIT_LEVEL < level) {
+            if (level == 0) {
+                if (dirProp == B) {
+                    // Paragraph separators are ok with explicit level 0.
+                    // Prevents reordering of paragraphs.
+                } else {
+                    // Treat explicit level 0 as a wildcard for the paragraph level.
+                    // Avoid making the caller guess what the paragraph level would be.
+                    level = (UBiDiLevel)currentParaLevel;
+                    levels[i] = level | overrideFlag;
+                }
+            } else {
+                // 1 <= level < currentParaLevel or UBIDI_MAX_EXPLICIT_LEVEL < level
+                /* level out of bounds */
+                *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
+                return UBIDI_LTR;
+            }
+        }
+        if (overrideFlag != 0) {
             /* keep the override flag in levels[i] but adjust the flags */
-            level&=~UBIDI_LEVEL_OVERRIDE;     /* make the range check below simpler */
             flags|=DIRPROP_FLAG_O(level);
         } else {
             /* set the flags */
             flags|=DIRPROP_FLAG_E(level)|DIRPROP_FLAG(dirProp);
         }
-        if((levelparaLevel);
diff --git a/icu4c/source/common/unicode/ubidi.h b/icu4c/source/common/unicode/ubidi.h
index 3f29ecdc47e..3b255f928b6 100644
--- a/icu4c/source/common/unicode/ubidi.h
+++ b/icu4c/source/common/unicode/ubidi.h
@@ -1196,11 +1196,12 @@ ubidi_setContext(UBiDi *pBiDi,
  *        A level overrides the directional property of its corresponding
  *        (same index) character if the level has the
  *        #UBIDI_LEVEL_OVERRIDE bit set.

- * Except for that bit, it must be + * Aside from that bit, it must be * paraLevel<=embeddingLevels[]<=UBIDI_MAX_EXPLICIT_LEVEL, - * with one exception: a level of zero may be specified for a paragraph - * separator even if paraLevel>0 when multiple paragraphs - * are submitted in the same call to ubidi_setPara().

+ * except that level 0 is always allowed. + * Level 0 for a paragraph separator prevents reordering of paragraphs. + * Level 0 for other characters is treated as a wildcard + * and is lifted up to the resolved level of the surrounding paragraph.

* Caution: A copy of this pointer, not of the levels, * will be stored in the UBiDi object; * the embeddingLevels array must not be diff --git a/icu4c/source/test/cintltst/cbiditst.c b/icu4c/source/test/cintltst/cbiditst.c index e2a7d4e753a..a902da7a493 100644 --- a/icu4c/source/test/cintltst/cbiditst.c +++ b/icu4c/source/test/cintltst/cbiditst.c @@ -90,6 +90,7 @@ static void testContext(void); static void doTailTest(void); static void testBracketOverflow(void); +static void TestExplicitLevel0(); /* new BIDI API */ static void testReorderingMode(void); @@ -138,6 +139,7 @@ addComplexTest(TestNode** root) { addTest(root, testGetBaseDirection, "complex/bidi/testGetBaseDirection"); addTest(root, testContext, "complex/bidi/testContext"); addTest(root, testBracketOverflow, "complex/bidi/TestBracketOverflow"); + addTest(root, &TestExplicitLevel0, "complex/bidi/TestExplicitLevel0"); addTest(root, doArabicShapingTest, "complex/arabic-shaping/ArabicShapingTest"); addTest(root, doLamAlefSpecialVLTRArabicShapingTest, "complex/arabic-shaping/lamalef"); @@ -4922,3 +4924,24 @@ testBracketOverflow(void) { ubidi_close(bidi); } +static void TestExplicitLevel0() { + // The following used to fail with an error, see ICU ticket #12922. + static const UChar text[2] = { 0x202d, 0x05d0 }; + static UBiDiLevel embeddings[2] = { 0, 0 }; + UErrorCode errorCode = U_ZERO_ERROR; + UBiDi *bidi = ubidi_open(); + ubidi_setPara(bidi, text, 2, UBIDI_DEFAULT_LTR , embeddings, &errorCode); + if (U_FAILURE(errorCode)) { + log_err("ubidi_setPara() - %s", u_errorName(errorCode)); + } else { + UBiDiLevel level0 = ubidi_getLevelAt(bidi, 0); + UBiDiLevel level1 = ubidi_getLevelAt(bidi, 1); + if (level0 != 1 || level1 != 1) { + log_err("resolved levels != 1: { %d, %d }\n", level0, level1); + } + if (embeddings[0] != 1 || embeddings[1] != 1) { + log_err("modified embeddings[] levels != 1: { %d, %d }\n", embeddings[0], embeddings[1]); + } + } + ubidi_close(bidi); +} diff --git a/icu4j/main/classes/core/src/com/ibm/icu/text/Bidi.java b/icu4j/main/classes/core/src/com/ibm/icu/text/Bidi.java index 62a276dc723..623f0aa6d2e 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/text/Bidi.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/text/Bidi.java @@ -2674,28 +2674,29 @@ public class Bidi { return dirct; } - /* + /** * Use a pre-specified embedding levels array: * - * Adjust the directional properties for overrides (->LEVEL_OVERRIDE), + *

Adjust the directional properties for overrides (->LEVEL_OVERRIDE), * ignore all explicit codes (X9), * and check all the preset levels. * - * Recalculate the flags to have them reflect the real properties + *

Recalculate the flags to have them reflect the real properties * after taking the explicit embeddings into account. */ private byte checkExplicitLevels() { - byte dirProp; - int i; int isolateCount = 0; this.flags = 0; /* collect all directionalities in the text */ - byte level; this.isolateCount = 0; - for (i = 0; i < length; ++i) { - level = levels[i]; - dirProp = dirProps[i]; + int currentParaIndex = 0; + int currentParaLimit = paras_limit[0]; + byte currentParaLevel = paraLevel; + + for (int i = 0; i < length; ++i) { + byte level = levels[i]; + byte dirProp = dirProps[i]; if (dirProp == LRI || dirProp == RLI) { isolateCount++; if (isolateCount > this.isolateCount) @@ -2705,21 +2706,40 @@ public class Bidi { isolateCount--; else if (dirProp == B) isolateCount = 0; - if ((level & LEVEL_OVERRIDE) != 0) { + + // optimized version of byte currentParaLevel = GetParaLevelAt(i); + if (defaultParaLevel != 0 && + i == currentParaLimit && (currentParaIndex + 1) < paraCount) { + currentParaLevel = paras_level[++currentParaIndex]; + currentParaLimit = paras_limit[currentParaIndex]; + } + + int overrideFlag = level & LEVEL_OVERRIDE; + level &= ~LEVEL_OVERRIDE; + if (level < currentParaLevel || MAX_EXPLICIT_LEVEL < level) { + if (level == 0) { + if (dirProp == B) { + // Paragraph separators are ok with explicit level 0. + // Prevents reordering of paragraphs. + } else { + // Treat explicit level 0 as a wildcard for the paragraph level. + // Avoid making the caller guess what the paragraph level would be. + level = currentParaLevel; + levels[i] = (byte)(level | overrideFlag); + } + } else { + // 1 <= level < currentParaLevel or MAX_EXPLICIT_LEVEL < level + throw new IllegalArgumentException("level " + level + + " out of bounds at " + i); + } + } + if (overrideFlag != 0) { /* keep the override flag in levels[i] but adjust the flags */ - level &= ~LEVEL_OVERRIDE; /* make the range check below simpler */ flags |= DirPropFlagO(level); } else { /* set the flags */ flags |= DirPropFlagE(level) | DirPropFlag(dirProp); } - if ((level < GetParaLevelAt(i) && - !((0 == level) && (dirProp == B))) || - (MAX_EXPLICIT_LEVEL < level)) { - /* level out of bounds */ - throw new IllegalArgumentException("level " + level + - " out of bounds at " + i); - } } if ((flags & MASK_EMBEDDING) != 0) flags |= DirPropFlagLR(paraLevel); @@ -3950,11 +3970,12 @@ public class Bidi { * A level overrides the directional property of its corresponding * (same index) character if the level has the * LEVEL_OVERRIDE bit set.

- * Except for that bit, it must be + * Aside from that bit, it must be * paraLevel<=embeddingLevels[]<=MAX_EXPLICIT_LEVEL, - * with one exception: a level of zero may be specified for a - * paragraph separator even if paraLevel>0 when multiple - * paragraphs are submitted in the same call to setPara().

+ * except that level 0 is always allowed. + * Level 0 for a paragraph separator prevents reordering of paragraphs. + * Level 0 for other characters is treated as a wildcard + * and is lifted up to the resolved level of the surrounding paragraph.

* Caution: A reference to this array, not a copy * of the levels, will be stored in the Bidi object; * the embeddingLevels @@ -5294,13 +5315,19 @@ public class Bidi { /** * Create Bidi from the given text, embedding, and direction information. - * The embeddings array may be null. If present, the values represent - * embedding level information. Negative values from -1 to -61 indicate - * overrides at the absolute value of the level. Positive values from 1 to - * 61 indicate embeddings. Where values are zero, the base embedding level - * as determined by the base direction is assumed.

* - * Note: this constructor calls setPara() internally. + *

The embeddings array may be null. If present, the values represent + * embedding level information. + * Negative values from -1 to -{@link #MAX_EXPLICIT_LEVEL} + * indicate overrides at the absolute value of the level. + * Positive values from 1 to {@link #MAX_EXPLICIT_LEVEL} indicate embeddings. + * Where values are zero, the base embedding level + * as determined by the base direction is assumed, + * except for paragraph separators which remain at 0 to prevent reordering of paragraphs.

+ * + *

Note: This constructor calls setPara() internally, + * after converting the java.text.Bidi-style embeddings with negative overrides + * into ICU-style embeddings with bit fields for {@link #LEVEL_OVERRIDE} and the level. * * @param text an array containing the paragraph of text to process. * @param textStart the index into the text array of the start of the @@ -5354,22 +5381,23 @@ public class Bidi { if (embeddings == null) { paraEmbeddings = null; } else { + // Convert from java.text.Bidi embeddings to ICU setPara() levels: + // Copy to the start of a new array and convert java.text negative overrides + // to ICU bit-field-and-mask overrides. + // A copy of the embeddings is always required because + // setPara() may modify its embeddings. paraEmbeddings = new byte[paragraphLength]; byte lev; for (int i = 0; i < paragraphLength; i++) { lev = embeddings[i + embStart]; if (lev < 0) { lev = (byte)((- lev) | LEVEL_OVERRIDE); - } else if (lev == 0) { - lev = paraLvl; - if (paraLvl > MAX_EXPLICIT_LEVEL) { - lev &= 1; - } } + // setPara() lifts level 0 up to the resolved paragraph level. paraEmbeddings[i] = lev; } } - if (textStart == 0 && embStart == 0 && paragraphLength == text.length) { + if (textStart == 0 && paragraphLength == text.length) { setPara(text, paraLvl, paraEmbeddings); } else { char[] paraText = new char[paragraphLength]; diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/bidi/TestBidi.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/bidi/TestBidi.java index 9fe50a65a35..af155ed8d25 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/bidi/TestBidi.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/bidi/TestBidi.java @@ -526,7 +526,7 @@ public class TestBidi extends BidiFmwk { bidi.setReorderingMode(Bidi.REORDER_RUNS_ONLY); bidi.setPara("a \u05d0 b \u05d1 c \u05d2 d ", Bidi.LTR, null); assertEquals("\nWrong number of runs #4", 14, bidi.countRuns()); - + /* test testGetBaseDirection to verify fast string direction detection function */ /* mixed start with L */ String mixedEnglishFirst = "\u0061\u0627\u0032\u06f3\u0061\u0034"; @@ -566,7 +566,7 @@ public class TestBidi extends BidiFmwk { assertEquals("\nWrong direction through fast detection #12", Bidi.NEUTRAL, Bidi.getBaseDirection(allArabicDigits)); /* null string */ String nullString = null; - assertEquals("\nWrong direction through fast detection #13", Bidi.NEUTRAL, Bidi.getBaseDirection(nullString)); + assertEquals("\nWrong direction through fast detection #13", Bidi.NEUTRAL, Bidi.getBaseDirection(nullString)); /* first L (English) others are R (Hebrew etc.) */ String startEnglishOthersHebrew = "\u0071\u0590\u05D5\u05EA\u05F1"; assertEquals("\nWrong direction through fast detection #14", Bidi.LTR, Bidi.getBaseDirection(startEnglishOthersHebrew)); @@ -574,4 +574,20 @@ public class TestBidi extends BidiFmwk { String lastHebrewOthersEnglishDigit = "\u0031\u0032\u0033\u05F1"; assertEquals("\nWrong direction through fast detection #15", Bidi.RTL, Bidi.getBaseDirection(lastHebrewOthersEnglishDigit)); } + + @Test + public void testExplicitLevel0() { + // The following used to fail with an error, see ICU ticket #12922. + String text = "\u202d\u05d0"; + byte[] embeddings = new byte[2]; // all 0 + int flags = Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT; // 0x7e + Bidi bidi = new Bidi(text.toCharArray(), 0, embeddings, 0, text.length(), flags); + assertEquals("resolved level at 0", 1, bidi.getLevelAt(0)); + assertEquals("resolved level at 1", 1, bidi.getLevelAt(1)); + + flags = java.text.Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT; // -2 + java.text.Bidi jb = new java.text.Bidi(text.toCharArray(), 0, embeddings, 0, text.length(), flags); + assertEquals("java.text resolved level at 0", 1, jb.getLevelAt(0)); + assertEquals("java.text resolved level at 1", 1, jb.getLevelAt(1)); + } }