From 483a0f75effa3e7c0d2179bbd3c1a2b23a25575d Mon Sep 17 00:00:00 2001 From: Roozbeh Pournader Date: Thu, 17 Sep 2026 18:15:02 -0700 Subject: [PATCH 1/2] Added five addtional bidi test cases and fixed BidiReference.java See https://github.com/unicode-org/properties/issues/675 --- .../data/ucd/dev/BidiCharacterTest.txt | 20 ++++++- unicodetools/data/ucd/dev/BidiTest.txt | 52 ++++++++++++++++++- .../bidi/BidiConformanceTestBuilder.java | 25 +++++++++ .../java/org/unicode/bidi/BidiReference.java | 3 ++ 4 files changed, 97 insertions(+), 3 deletions(-) diff --git a/unicodetools/data/ucd/dev/BidiCharacterTest.txt b/unicodetools/data/ucd/dev/BidiCharacterTest.txt index c6fd4313ab..6e729cb418 100644 --- a/unicodetools/data/ucd/dev/BidiCharacterTest.txt +++ b/unicodetools/data/ucd/dev/BidiCharacterTest.txt @@ -1,5 +1,5 @@ # BidiCharacterTest-18.0.0.txt -# Date: 2026-02-03 +# Date: 2026-09-18, 01:08:09 GMT # © 2026 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html @@ -121,6 +121,24 @@ 0061 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0062 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029;1;1;2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2;0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 0061 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0062 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029 0029;1;1;2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1;129 128 127 126 125 124 123 122 121 120 119 118 117 116 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 +################################################################################ +# Additional tests for isolating run sequences, depth limits, and overrides. [added to test cases for Unicode 19.0] + +# Preserve PDI identity when joining isolating run sequences after an override (BD9, BD13, X10). +202E 2067 05D0 2069 202C 202B 0061 2067 05D1 2069 0062;0;0;x 1 3 1 x x 2 2 3 2 2;6 7 8 9 10 3 2 1 + +# An overflow isolate must not split a level run (BD7, X5b, X10). +202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 05D0 2066 05D1;0;0;x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 125 125 125;64 63 62 + +# Do not reverse a level-126 run when no odd level is present (L2). +202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 202A 0661 0662;0;0;x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 126 126;62 63 + +# Apply the active directional override to an unmatched PDI (X6a). +202A 0061 202C 202E 2069 202A 0062;0;0;x 2 x x 1 x 2;6 4 1 + +# Bracket-stack overflow discards pairs found earlier in the isolating run sequence (BD16). +0061 0028 0062 0029 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028 0028;1;1;2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1;67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 0 1 2 + ################################################################################ # Miscellaneous test cases diff --git a/unicodetools/data/ucd/dev/BidiTest.txt b/unicodetools/data/ucd/dev/BidiTest.txt index 7cd0ecbc5c..ee44859729 100644 --- a/unicodetools/data/ucd/dev/BidiTest.txt +++ b/unicodetools/data/ucd/dev/BidiTest.txt @@ -1,5 +1,5 @@ # BidiTest-18.0.0.txt -# Date: 2026-02-03, 23:09:43 GMT +# Date: 2026-09-18, 01:08:09 GMT # © 2026 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html @@ -496724,6 +496724,18 @@ FSI ON AN AN PDI; 4 #Count: 1 +@Levels: x 2 x x 1 x 2 +@Reorder: 6 4 1 +LRE L PDF RLO PDI LRE L; 3 + +#Count: 1 + +@Levels: x 2 x x 3 x 4 +@Reorder: 1 6 4 +LRE L PDF RLO PDI LRE L; 4 + +#Count: 1 + @Levels: 0 1 2 1 2 0 @Reorder: 0 4 3 2 1 5 FSI ON EN R L PDI; 3 @@ -496826,6 +496838,18 @@ ON FSI R AL PDI RLI R AL PDI; 4 #Count: 1 +@Levels: x 1 3 1 x x 2 2 3 2 2 +@Reorder: 6 7 8 9 10 3 2 1 +RLO RLI R PDI PDF RLE L RLI R PDI L; 3 + +#Count: 1 + +@Levels: x 3 5 3 x x 4 4 5 4 4 +@Reorder: 6 7 8 9 10 3 2 1 +RLO RLI R PDI PDF RLE L RLI R PDI L; 4 + +#Count: 1 + @Levels: 0 0 0 0 0 0 0 0 0 0 @Reorder: 0 1 2 3 4 5 6 7 8 9 ET LRI PDI EN RLI PDI ET FSI PDI EN; 3 @@ -497482,6 +497506,12 @@ L L WS L L L L WS ON R R WS R R WS ON AN AN AN CS AN AN AN ON CS WS R R ON; 4 #Count: 2 +@Levels: x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 126 126 +@Reorder: 62 63 +LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE AN AN; 7 + +#Count: 1 + @Levels: 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 2 2 2 1 1 2 2 2 1 1 1 1 1 0 @Reorder: 0 1 2 3 4 5 6 7 8 28 27 26 25 24 21 22 23 20 19 16 17 18 15 14 13 12 11 10 9 29 L L WS L L L L WS ON R R WS R R WS ON EN EN EN CS WS EN EN AN ON CS WS R R ON; 3 @@ -497538,6 +497568,12 @@ R AL WS R AL R AL WS ON L L WS L L WS L WS L L L ON L ON WS AL R AL WS R AL R; 5 #Count: 1 +@Levels: x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 125 125 125 +@Reorder: 64 63 62 +LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE R LRI R; 7 + +#Count: 1 + @Levels: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 @Reorder: 25 26 27 28 29 30 31 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 AL R R R R AL R WS AL R R WS R AL AL R WS R R R AL R CS WS AL EN EN EN CS EN EN AN; 7 @@ -497586,6 +497622,18 @@ LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE LRE #Count: 1 -#Total Count: 490846 +@Levels: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +@Reorder: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 +L ON L ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON; 3 + +#Count: 1 + +@Levels: 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +@Reorder: 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 0 1 2 +L ON L ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON ON; 4 + +#Count: 1 + +#Total Count: 490854 # EOF \ No newline at end of file diff --git a/unicodetools/src/main/java/org/unicode/bidi/BidiConformanceTestBuilder.java b/unicodetools/src/main/java/org/unicode/bidi/BidiConformanceTestBuilder.java index 73ccb5e979..e71b39460e 100644 --- a/unicodetools/src/main/java/org/unicode/bidi/BidiConformanceTestBuilder.java +++ b/unicodetools/src/main/java/org/unicode/bidi/BidiConformanceTestBuilder.java @@ -46,6 +46,31 @@ public class BidiConformanceTestBuilder { private static final byte PDI = BidiReference.PDI; private static byte[][] extraTests = { + // Preserve PDI identity when joining isolating run sequences after an override. + {RLO, RLI, R, PDI, PDF, RLE, L, RLI, R, PDI, L}, + // An overflow isolate must not split a level run. + { + LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, + LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, + LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, + LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, R, LRI, R + }, + // Do not reverse a level-126 run when no odd level is present. + { + LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, + LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, + LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, + LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, AN, AN + }, + // An unmatched PDI must receive the active directional override. + {LRE, L, PDF, RLO, PDI, LRE, L}, + // Class-only counterpart; bracket overflow is tested in BidiCharacterTest.txt. + { + L, ON, L, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, + ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, + ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, + ON, ON + }, // Test data provided by Behdad Esfahbod, Dov Grobgeld, Aharon Lanin, and Roozbeh Pournader {AL, AL, R, WS, R, R, WS, L, L, L, WS, L, L, L, WS, R, R, WS, AL, R, R, R, R, R, R}, { diff --git a/unicodetools/src/main/java/org/unicode/bidi/BidiReference.java b/unicodetools/src/main/java/org/unicode/bidi/BidiReference.java index 824a246a15..7e74f04b73 100644 --- a/unicodetools/src/main/java/org/unicode/bidi/BidiReference.java +++ b/unicodetools/src/main/java/org/unicode/bidi/BidiReference.java @@ -485,6 +485,9 @@ private void determineExplicitEmbeddingLevels() { --validIsolateCount; } resultLevels[i] = stack.lastEmbeddingLevel(); + if (stack.lastDirectionalOverrideStatus() != ON) { + resultTypes[i] = stack.lastDirectionalOverrideStatus(); + } break; // Rule X7 From 6f211c4c45771d183773008aeb23521ed9f2dc14 Mon Sep 17 00:00:00 2001 From: Roozbeh Pournader Date: Sat, 10 Oct 2026 15:01:20 -0700 Subject: [PATCH 2/2] Update version and timestamp --- unicodetools/data/ucd/dev/BidiCharacterTest.txt | 4 ++-- unicodetools/data/ucd/dev/BidiTest.txt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/unicodetools/data/ucd/dev/BidiCharacterTest.txt b/unicodetools/data/ucd/dev/BidiCharacterTest.txt index 6e729cb418..409e2ba9e6 100644 --- a/unicodetools/data/ucd/dev/BidiCharacterTest.txt +++ b/unicodetools/data/ucd/dev/BidiCharacterTest.txt @@ -1,5 +1,5 @@ -# BidiCharacterTest-18.0.0.txt -# Date: 2026-09-18, 01:08:09 GMT +# BidiCharacterTest-19.0.0.txt +# Date: 2026-10-10, 22:00:00 GMT # © 2026 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html diff --git a/unicodetools/data/ucd/dev/BidiTest.txt b/unicodetools/data/ucd/dev/BidiTest.txt index ee44859729..e8817c5da8 100644 --- a/unicodetools/data/ucd/dev/BidiTest.txt +++ b/unicodetools/data/ucd/dev/BidiTest.txt @@ -1,5 +1,5 @@ -# BidiTest-18.0.0.txt -# Date: 2026-09-18, 01:08:09 GMT +# BidiTest-19.0.0.txt +# Date: 2026-10-10, 22:00:00 GMT # © 2026 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html