diff --git a/common/main/hi_Latn.xml b/common/main/hi_Latn.xml
index 295c7060347..219942bfcb1 100644
--- a/common/main/hi_Latn.xml
+++ b/common/main/hi_Latn.xml
@@ -2211,14 +2211,14 @@ annotations.
G y MMM d–d
G y MMM d – G y MMM d
- G y MMM d – MMM d
- G y MMM d – y d MMM
+ G y MMM d – MMM d
+ G y MMM d – y d MMM
G y MMM d, E – MMM d, E
- G y MMM d, E – G y MMM d, E
- G y MMM d, E – MMM d, E
- G y MMM d, E – y MMM d, E
+ G y MMM d, E – G y MMM d, E
+ G y MMM d, E – MMM d, E
+ G y MMM d, E – y MMM d, E
↑↑↑
diff --git a/common/main/ku.xml b/common/main/ku.xml
index 4fd6e802a2e..2c95822fe33 100644
--- a/common/main/ku.xml
+++ b/common/main/ku.xml
@@ -1186,9 +1186,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic
G d'ê' MMM'a' y'an' – d'ê' MMM'a' y'an'
- G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E
- G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E
- G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E
+ G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E
+ G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E
+ G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E
G MMMM – MMMM y
@@ -1722,9 +1722,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic
d'ê' MMM'a' y'an' – d'ê' MMM'a' y'an'
- d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E
- d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E
- d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E
+ d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E
+ d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E
+ d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E
MMMM – MMMM y
diff --git a/common/main/pap.xml b/common/main/pap.xml
index 5c8190cf070..8ab1eec7e3b 100644
--- a/common/main/pap.xml
+++ b/common/main/pap.xml
@@ -388,7 +388,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic
E, d MMM – d MMM y G
- E, d MMM y G – E, d MMM y G
+ E, d MMM y G – E, d MMM y G
E, d MMM – E, d MMM y G
E, d MMM y – E, d MMM y G
@@ -905,7 +905,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic
d–d MMM
- d MMM – d MMM
+ d MMM – d MMM
E, d MMM – E, d MMM
diff --git a/common/main/syr.xml b/common/main/syr.xml
index b69844febb8..50c642eb6cd 100644
--- a/common/main/syr.xml
+++ b/common/main/syr.xml
@@ -1200,7 +1200,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic
↑↑↑
- {0} – {1}
+ {0} – {1}
↑↑↑
↑↑↑
diff --git a/common/main/vi.xml b/common/main/vi.xml
index 7030188decc..d8eaffc37c5 100644
--- a/common/main/vi.xml
+++ b/common/main/vi.xml
@@ -2523,15 +2523,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/
d/M/y – d/M/y GGGGG
- d/M/y GGGGG – d/M/y GGGGG
+ d/M/y GGGGG – d/M/y GGGGG
d/M/y – d/M/y GGGGG
d/M/y – d/M/y GGGGG
- E, d/M/y – E, d/M/y GGGGG
- E, d/M/y GGGGG – E, d/M/y GGGGG
- E, d/M/y – E, d/M/y GGGGG
- E, d/M/y – E, d/M/y GGGGG
+ E, d/M/y – E, d/M/y GGGGG
+ E, d/M/y GGGGG – E, d/M/y GGGGG
+ E, d/M/y – E, d/M/y GGGGG
+ E, d/M/y – E, d/M/y GGGGG
MMM y G – MMM y G
@@ -2590,19 +2590,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/
d/M – d/M
- E, d/M – E, d/M
- E, d/M – E, d/M
+ E, d/M – E, d/M
+ E, d/M – E, d/M
- MMM – MMM
+ MMM – MMM
d – d MMM
- d MMM – d MMM
+ d MMM – d MMM
- E, d MMM – E, d MMM
- E, d MMM – E, d MMM
+ E, d MMM – E, d MMM
+ E, d MMM – E, d MMM
y–y G
@@ -2617,26 +2617,26 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/
d/M/y – d/M/y GGGGG
- E, d/M/y – E, d/M/y GGGGG
- E, d/M/y – E, d/M/y GGGGG
- E, d/M/y – E, d/M/y GGGGG
+ E, d/M/y – E, d/M/y GGGGG
+ E, d/M/y – E, d/M/y GGGGG
+ E, d/M/y – E, d/M/y GGGGG
- MMM – MMM y G
- MMM y – MMM y G
+ MMM – MMM y G
+ MMM y – MMM y G
d – d MMM, y G
- d MMM – d MMM, y G
- d MMM, y – d MMM, y G
+ d MMM – d MMM, y G
+ d MMM, y – d MMM, y G
- E, d MMM – E, d MMM, y G
- E, d MMM – E, d MMM, y G
- E, d MMM, y – E, d MMM, y G
+ E, d MMM – E, d MMM, y G
+ E, d MMM – E, d MMM, y G
+ E, d MMM, y – E, d MMM, y G
- MMMM – MMMM y G
+ MMMM – MMMM y G
MMMM y – MMMM y G
@@ -3081,7 +3081,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/
↑↑↑
- h 'giờ' B – h 'giờ' B
+ h 'giờ' B – h 'giờ' B
h – h 'giờ' B
@@ -3097,24 +3097,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/
y – y G
- M/y G – M/y G
+ M/y G – M/y G
M/y– M/y G
M/y – M/y G
d/M/y – d/M/y G
- d/M/y G – d/M/y G
+ d/M/y G – d/M/y G
d/M/y – d/M/y G
d/M/y – d/M/y G
- E, d/M/y – E, d/M/y G
- E, d/M/y G – E, d/M/y G
- E, d/M/y – E, d/M/y G
- E, d/M/y – E, d/M/y G
+ E, d/M/y – E, d/M/y G
+ E, d/M/y G – E, d/M/y G
+ E, d/M/y – E, d/M/y G
+ E, d/M/y – E, d/M/y G
- MMM y G – MMM y G
+ MMM y G – MMM y G
MMM – MMM y G
MMM y – MMM y G
@@ -3170,15 +3170,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/
d/M – d/M
- E, d/M – E, d/M
- E, d/M – E, d/M
+ E, d/M – E, d/M
+ E, d/M – E, d/M
MMM – MMM
d – d MMM
- d MMM – d MMM
+ d MMM – d MMM
E, d MMM – E, d MMM
@@ -3197,27 +3197,27 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/
d/M/y – d/M/y
- E, d/M/y – E, d/M/y
- E, d/M/y – E, d/M/y
- E, d/M/y – E, d/M/y
+ E, d/M/y – E, d/M/y
+ E, d/M/y – E, d/M/y
+ E, d/M/y – E, d/M/y
- MMM – MMM y
- MMM y – MMM y
+ MMM – MMM y
+ MMM y – MMM y
d – d MMM, y
- d MMM – d MMM, y
- d MMM, y – d MMM, y
+ d MMM – d MMM, y
+ d MMM, y – d MMM, y
- E, d MMM – E, d MMM, y
- E, d MMM – E, d MMM, y
- E, d MMM, y – E, d MMM, y
+ E, d MMM – E, d MMM, y
+ E, d MMM – E, d MMM, y
+ E, d MMM, y – E, d MMM, y
- MMMM – MMMM 'năm' y
- MMMM 'năm' y – MMMM 'năm' y
+ MMMM – MMMM 'năm' y
+ MMMM 'năm' y – MMMM 'năm' y
diff --git a/tools/cldr-code/src/main/java/org/unicode/cldr/test/DisplayAndInputProcessor.java b/tools/cldr-code/src/main/java/org/unicode/cldr/test/DisplayAndInputProcessor.java
index 5a969c5a420..e9e980de343 100644
--- a/tools/cldr-code/src/main/java/org/unicode/cldr/test/DisplayAndInputProcessor.java
+++ b/tools/cldr-code/src/main/java/org/unicode/cldr/test/DisplayAndInputProcessor.java
@@ -155,13 +155,15 @@ public class DisplayAndInputProcessor {
// private static final Pattern SPACE_PLUS_NBSP_TO_NORMALIZE =
// PatternCache.get("\\u0020+[\\u00A0\\u202F]+");
- // NNBSP among other spaces
- private static final Pattern NNBSP_AND_OTHER_SPACES =
- PatternCache.get(
- "[\\u0020\\u00A0]+\\u202F[\\u0020\\u00A0\\u202F]*|\\u202F[\\u0020\\u00A0\\u202F]+");
- // NBSP among other spaces (after handling NNBSP among other spaces)
- private static final Pattern NBSP_AND_SPACES =
- PatternCache.get("\\u0020+\\u00A0[\\u0020\\u00A0]*|\\u00A0[\\u0020\\u00A0]+");
+ // NNBSP 202F among other horizontal spaces (includes 0020, 00A0, 2009, 202F, etc.)
+ private static final Pattern NNBSP_AMONG_OTHER_SPACES =
+ PatternCache.get("[\\h&&[^\\u202F]]+\\u202F\\h*|\\u202F\\h+");
+ // NBSP 00A0 among other horizontal spaces
+ private static final Pattern NBSP_AMONG_OTHER_SPACES =
+ PatternCache.get("[\\h&&[^\\u00A0]]+\\u00A0\\h*|\\u00A0\\h+");
+ // THIN SPACE 2009 among other horizontal spaces
+ private static final Pattern THIN_SPACE_AMONG_OTHER_SPACES =
+ PatternCache.get("[\\h&&[^\\u2009]]+\\u2009\\h*|\\u2009\\h+");
private static final Pattern INITIAL_NBSP = PatternCache.get("^[\\u00A0\\u202F]+");
private static final Pattern FINAL_NBSP = PatternCache.get("[\\u00A0\\u202F]+$");
@@ -1299,9 +1301,11 @@ private String normalizeWhitespace(String path, String value) {
// Finally, replace remaining space combinations with most restrictive type CLDR-17233
// If we have NNBSP U+202F in combination with other spaces, keep just it
- value = NNBSP_AND_OTHER_SPACES.matcher(value).replaceAll("\u202F");
+ value = NNBSP_AMONG_OTHER_SPACES.matcher(value).replaceAll("\u202F");
// Else if we have NBSP U+00A0 in combination with other spaces, keep just it
- value = NBSP_AND_SPACES.matcher(value).replaceAll("\u00A0");
+ value = NBSP_AMONG_OTHER_SPACES.matcher(value).replaceAll("\u00A0");
+ // Else if we have THIN SPACE U+2009 in combination with other spaces, keep just it
+ value = THIN_SPACE_AMONG_OTHER_SPACES.matcher(value).replaceAll("\u2009");
return value;
}