[latex3-commits] [git/LaTeX3-latex3-latex3] main: Enable CJK token handling for (u)pTeX (fixes #1171) (a02716869)

Joseph Wright joseph.wright at morningstar2.co.uk
Mon Feb 13 17:50:10 CET 2023


Repository : https://github.com/latex3/latex3
On branch  : main
Link       : https://github.com/latex3/latex3/commit/a027168691aac77630f240e963a60ed2a5f2c495

>---------------------------------------------------------------

commit a027168691aac77630f240e963a60ed2a5f2c495
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Mon Feb 13 13:08:15 2023 +0000

    Enable CJK token handling for (u)pTeX (fixes #1171)


>---------------------------------------------------------------

a027168691aac77630f240e963a60ed2a5f2c495
 l3kernel/CHANGELOG.md                              |   4 +
 l3kernel/l3str.dtx                                 |  32 ++-
 l3kernel/l3text.dtx                                | 138 +++++-----
 l3kernel/testfiles/m3str-convert005.lvt            |   2 +-
 ...vert005.ptex.tlg => m3str-convert005.uptex.tlg} |   1 +
 l3kernel/testfiles/m3str002.lvt                    |   4 +-
 l3kernel/testfiles/m3str002.ptex.tlg               |  15 ++
 l3kernel/testfiles/m3str002.uptex.tlg              |   6 +-
 l3kernel/testfiles/m3text002.lvt                   |   4 +-
 l3kernel/testfiles/m3text002.ptex.tlg              | 296 +++++++++++++++++++++
 .../{m3text002.tlg => m3text002.uptex.tlg}         |  98 +++----
 l3kernel/testfiles/m3text005.lvt                   |   2 +-
 l3kernel/testfiles/m3text005.uptex.tlg             |   8 +-
 13 files changed, 463 insertions(+), 147 deletions(-)

diff --git a/l3kernel/CHANGELOG.md b/l3kernel/CHANGELOG.md
index 82278061e..a58c9a7df 100644
--- a/l3kernel/CHANGELOG.md
+++ b/l3kernel/CHANGELOG.md
@@ -7,6 +7,10 @@ this project uses date-based 'snapshot' version identifiers.
 
 ## [Unreleased]
 
+### Fixed
+- CJK character handling for (u)pTeX (issue
+  [\#1171](https://github.com/latex3/latex3/issues/1171))
+
 ## [2023-02-07]
 
 ### Changed
diff --git a/l3kernel/l3str.dtx b/l3kernel/l3str.dtx
index 55f9bd7f6..2c89eb371 100644
--- a/l3kernel/l3str.dtx
+++ b/l3kernel/l3str.dtx
@@ -1917,7 +1917,8 @@
 % \begin{macro}[EXP]{\@@_change_case_end:nw}
 % \begin{macro}[EXP]{\@@_change_case_loop:nw}
 % \begin{macro}[EXP]{\@@_change_case_space:n}
-% \begin{macro}[EXP]{\@@_change_case_char:nN, \@@_change_case_char_aux:nN}
+% \begin{macro}[EXP]
+%   {\@@_change_case_char:nN, \@@_change_case_char_auxi:nN, \@@_change_case_char_auxii:nN}
 % \begin{macro}[EXP]{\@@_change_case_codepoint:nN}
 % \begin{macro}[EXP]{\@@_change_case_codepoint:nNN}
 % \begin{macro}[EXP]{\@@_change_case_codepoint:nNNN}
@@ -1977,22 +1978,33 @@
   \cs_new:Npn \@@_change_case_codepoint:nN #1#2
     { \@@_change_case_char:fnn { \int_eval:n {`#2} } {#1} {#2} }
 \else:
-    \cs_new:Npn \@@_change_case_codepoint:nN #1#2
+    \cs_new:Npx \@@_change_case_codepoint:nN #1#2
       {
-        \int_compare:nNnTF {`#2} > { "80 }
+        \exp_not:N \int_compare:nNnTF {`#2} > { "80 }
           {
-            \int_compare:nNnTF {`#2} < { "E0 }
-              { \@@_change_case_codepoint:nNN }
+            \cs_if_exist:NTF \tex_pdftexversion:D
+              { \exp_not:N \@@_change_case_char_auxi:nN }
               {
-                 \int_compare:nNnTF {`#2} < { "F0 }
-                   { \@@_change_case_codepoint:nNNN }
-                   { \@@_change_case_codepoint:nNNNNN }
+                \exp_not:N \int_compare:nNnTF {`#2} > { "FF }
+                  { \exp_not:N \@@_change_case_char_auxii:nN }
+                  { \exp_not:N \@@_change_case_char_auxi:nN }
               }
           }
-          { \@@_change_case_char_aux:nN }
+          { \exp_not:N \@@_change_case_char_auxii:nN }
+            {#1} #2
+      }
+    \cs_new:Npn \@@_change_case_char_auxi:nN #1#2
+      {
+        \int_compare:nNnTF {`#2} < { "E0 }
+          { \@@_change_case_codepoint:nNN }
+          {
+             \int_compare:nNnTF {`#2} < { "F0 }
+               { \@@_change_case_codepoint:nNNN }
+               { \@@_change_case_codepoint:nNNNNN }
+          }
             {#1} #2
       }
-    \cs_new:Npn \@@_change_case_char_aux:nN #1#2
+    \cs_new:Npn \@@_change_case_char_auxii:nN #1#2
       { \@@_change_case_char:fnn { \int_eval:n {`#2} } {#1} {#2} }
     \cs_new:Npn \@@_change_case_codepoint:nNN #1#2#3
       {
diff --git a/l3kernel/l3text.dtx b/l3kernel/l3text.dtx
index c9121e675..8367b2313 100644
--- a/l3kernel/l3text.dtx
+++ b/l3kernel/l3text.dtx
@@ -633,7 +633,7 @@
 %
 % For working with codepoints in an engine-neutral way.
 %
-% \begin{macro}[EXP]{\@@_codepoint_process:nN}
+% \begin{macro}[EXP]{\@@_codepoint_process:nN, \@@_codepoint_process_aux:nN}
 % \begin{macro}[EXP]{\@@_codepoint_process:nNN}
 % \begin{macro}[EXP]{\@@_codepoint_process:nNNN}
 % \begin{macro}[EXP]{\@@_codepoint_process:nNNNN}
@@ -647,43 +647,38 @@
     \cs_new:Npn \@@_codepoint_process:nN #1#2 { #1 {#2} }
   }
   {
-    \cs_new:Npn \@@_codepoint_process:nN #1#2
+    \cs_new:Npx \@@_codepoint_process:nN #1#2
       {
-        \int_compare:nNnTF { `#2 } > { "80 }
+        \exp_not:N \int_compare:nNnTF {`#2} > { "80 }
           {
-            \int_compare:nNnTF { `#2 } < { "E0 }
-              { \@@_codepoint_process:nNN }
+            \sys_if_engine_pdftex:TF
+              { \exp_not:N \@@_codepoint_process_aux:nN }
               {
-                 \int_compare:nNnTF { `#2 } < { "F0 }
-                   { \@@_codepoint_process:nNNN }
-                   { \@@_codepoint_process:nNNNN }
+                \exp_not:N \int_compare:nNnTF {`#2} > { "FF }
+                  { \exp_not:N \use:n }
+                  { \exp_not:N \@@_codepoint_process_aux:nN }
               }
           }
-          { \use:n }
+          { \exp_not:N \use:n }
             {#1} #2
       }
-    \cs_new:Npn \@@_codepoint_process:nNN #1#2#3
-      { #1 {#2#3} }
-    \sys_if_engine_ptex:TF
+    \cs_new:Npn \@@_codepoint_process_aux:nN #1#2
       {
-        \cs_gset:Npn \@@_codepoint_process:nN #1#2
+        \int_compare:nNnTF { `#2 } < { "E0 }
+          { \@@_codepoint_process:nNN }
           {
-            \int_compare:nNnTF { `#2 } > { "80 }
-              {
-                \int_compare:nNnTF { `#2 } < { "E0 }
-                  { \@@_codepoint_process:nNN }
-                  { \use:n }
-              }
-          { \use:n }
+             \int_compare:nNnTF { `#2 } < { "F0 }
+               { \@@_codepoint_process:nNNN }
+               { \@@_codepoint_process:nNNNN }
+          }
             {#1} #2
         }
-      }
-      {
-        \cs_new:Npn \@@_codepoint_process:nNNN #1#2#3#4
-          { #1 {#2#3#4} }
-        \cs_new:Npn \@@_codepoint_process:nNNNN #1#2#3#4#5
-          { #1 {#2#3#4#5} }
-      }
+    \cs_new:Npn \@@_codepoint_process:nNN #1#2#3
+      { #1 {#2#3} }
+    \cs_new:Npn \@@_codepoint_process:nNNN #1#2#3#4
+      { #1 {#2#3#4} }
+    \cs_new:Npn \@@_codepoint_process:nNNNN #1#2#3#4#5
+      { #1 {#2#3#4#5} }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -692,7 +687,8 @@
 % \end{macro}
 %
 % \begin{macro}[EXP, pTF]{\@@_codepoint_compare:nNn}
-% \begin{macro}[EXP]{\@@_codepoint_from_chars:Nw}
+% \begin{macro}[EXP]
+%   {\@@_codepoint_from_chars:Nw, \@@_codepoint_from_chars_aux:Nw}
 % \begin{macro}[EXP]{\@@_codepoint_from_chars:N}
 % \begin{macro}[EXP]{\@@_codepoint_from_chars:NN}
 % \begin{macro}[EXP]{\@@_codepoint_from_chars:NNN}
@@ -720,62 +716,56 @@
             #2 {#3}
           \prg_return_true: \prg_return_false:
       }
-    \cs_new:Npn \@@_codepoint_from_chars:Nw #1
+    \cs_new:Npx \@@_codepoint_from_chars:Nw #1
+      {
+        \exp_not:N \if_int_compare:w `#1 > "80 \exp_not:N \exp_stop_f:
+          \sys_if_engine_pdftex:TF
+            {
+              \exp_not:N \exp_after:wN
+                \exp_not:N \@@_codepoint_from_chars_aux:Nw
+            }
+            {
+              \exp_not:N \if_int_compare:w `#1 > "FF \exp_not:N \exp_stop_f:
+                \exp_not:N \exp_after:wN \exp_not:N \exp_after:wN
+                  \exp_not:N \exp_after:wN
+                  \exp_not:N \@@_codepoint_from_chars:N
+              \exp_not:N \else:
+                \exp_not:N \exp_after:wN \exp_not:N \exp_after:wN
+                  \exp_not:N \exp_after:wN
+                  \exp_not:N \@@_codepoint_from_chars_aux:Nw
+              \exp_not:N \fi:
+            }
+        \exp_not:N \else:
+          \exp_not:N \exp_after:wN \exp_not:N \@@_codepoint_from_chars:N
+        \exp_not:N \fi:
+          #1
+      }
+    \cs_new:Npn \@@_codepoint_from_chars_aux:Nw #1
       {
-        \if_int_compare:w `#1 > "80 \exp_stop_f:
-          \if_int_compare:w `#1 < "E0 \exp_stop_f:
+        \if_int_compare:w `#1 < "E0 \exp_stop_f:
+          \exp_after:wN \@@_codepoint_from_chars:NN
+        \else:
+          \if_int_compare:w `#1 < "F0 \exp_stop_f:
             \exp_after:wN \exp_after:wN \exp_after:wN
-              \@@_codepoint_from_chars:NN
+              \@@_codepoint_from_chars:NNN
           \else:
-            \if_int_compare:w `#1 < "F0 \exp_stop_f:
-              \exp_after:wN \exp_after:wN \exp_after:wN
-              \exp_after:wN \exp_after:wN \exp_after:wN
-              \exp_after:wN \@@_codepoint_from_chars:NNN
-            \else:
-              \exp_after:wN \exp_after:wN \exp_after:wN
-              \exp_after:wN \exp_after:wN \exp_after:wN
-              \exp_after:wN \@@_codepoint_from_chars:NNNN
-            \fi:
+            \exp_after:wN \exp_after:wN \exp_after:wN
+              \@@_codepoint_from_chars:NNNN
           \fi:
-        \else:
-          \exp_after:wN \@@_codepoint_from_chars:N
         \fi:
           #1
       }
-    \cs_new:Npn \@@_codepoint_from_chars:N #1 { `#1 }
+    \cs_new:Npn \@@_codepoint_from_chars:N #1 {`#1}
     \cs_new:Npn \@@_codepoint_from_chars:NN #1#2
       { (`#1 - "C0) * "40 + `#2 - "80 }
-    %    \end{macrocode}
-    %   Avoid high chars with p\TeX{}.
-    %    \begin{macrocode}
-    \sys_if_engine_ptex:TF
+    \cs_new:Npn \@@_codepoint_from_chars:NNN #1#2#3
+      { (`#1 - "E0) * "1000 + (`#2 - "80) * "40 + `#3 - "80 }
+    \cs_new:Npn \@@_codepoint_from_chars:NNNN #1#2#3#4
       {
-        \cs_gset:Npn \@@_codepoint_from_chars:Nw #1
-          {
-            \if_int_compare:w `#1 > "80 \exp_stop_f:
-              \if_int_compare:w `#1 < "E0 \exp_stop_f:
-                \exp_after:wN \exp_after:wN \exp_after:wN
-                  \@@_codepoint_from_chars:NN
-              \else:
-                \exp_after:wN \exp_after:wN \exp_after:wN
-                  \@@_codepoint_from_chars:N
-              \fi:
-            \else:
-              \exp_after:wN \@@_codepoint_from_chars:N
-            \fi:
-              #1
-          }
-      }
-      {
-        \cs_new:Npn \@@_codepoint_from_chars:NNN #1#2#3
-          { (`#1 - "E0) * "1000 + (`#2 - "80) * "40 + `#3 - "80 }
-        \cs_new:Npn \@@_codepoint_from_chars:NNNN #1#2#3#4
-          {
-              (`#1 - "F0) * "40000 
-            + (`#2 - "80) * "1000
-            + (`#3 - "80) * "40
-            + `#4 - "80
-          }
+          (`#1 - "F0) * "40000 
+        + (`#2 - "80) * "1000
+        + (`#3 - "80) * "40
+        + `#4 - "80
       }
   }
 %    \end{macrocode}
diff --git a/l3kernel/testfiles/m3str-convert005.lvt b/l3kernel/testfiles/m3str-convert005.lvt
index cb718a17d..4ec3a7d18 100644
--- a/l3kernel/testfiles/m3str-convert005.lvt
+++ b/l3kernel/testfiles/m3str-convert005.lvt
@@ -11,7 +11,7 @@
 \ExplSyntaxOff
 
 \begin{document}
-\ifdefined\disablecjktoken\disablecjktoken\fi
+
 \START
 \AUTHOR{Joseph Wright}
 \ExplSyntaxOn
diff --git a/l3kernel/testfiles/m3str-convert005.ptex.tlg b/l3kernel/testfiles/m3str-convert005.uptex.tlg
similarity index 97%
copy from l3kernel/testfiles/m3str-convert005.ptex.tlg
copy to l3kernel/testfiles/m3str-convert005.uptex.tlg
index e7b068398..c69415204 100644
--- a/l3kernel/testfiles/m3str-convert005.ptex.tlg
+++ b/l3kernel/testfiles/m3str-convert005.uptex.tlg
@@ -6,6 +6,7 @@ TEST 1: PDF names
 ============================================================
 abczz
 brackets#28#29#5B#5D#7B#7D#3C#3Exxx
+gr#C3#BC#C3#9Fe##
 ============================================================
 ============================================================
 TEST 2: PDF names with spaces
diff --git a/l3kernel/testfiles/m3str002.lvt b/l3kernel/testfiles/m3str002.lvt
index 2a2dd4ca1..596f37181 100644
--- a/l3kernel/testfiles/m3str002.lvt
+++ b/l3kernel/testfiles/m3str002.lvt
@@ -6,7 +6,7 @@
 \ExplSyntaxOn
 \debug_on:n { check-declarations , deprecation , log-functions }
 \ExplSyntaxOff
-\ifdefined\disablecjktoken\disablecjktoken\fi
+
 \START
 \AUTHOR{Joseph Wright}
 \ExplSyntaxOn
@@ -33,7 +33,7 @@
     \tl_set:Nx \l_tmpb_tl{ \str_casefold:n { ABC~123 } }
     \tl_if_eq:NNTF \l_tmpa_tl \l_tmpb_tl \TRUE \ERROR
   }
-\sys_if_engine_ptex:T { \END }
+
 \TESTEXP { Accented~characters,~etc. }
   {
     " \str_uppercase:n { Café } "
diff --git a/l3kernel/testfiles/m3str002.ptex.tlg b/l3kernel/testfiles/m3str002.ptex.tlg
index fccc5ed84..aebe657ef 100644
--- a/l3kernel/testfiles/m3str002.ptex.tlg
+++ b/l3kernel/testfiles/m3str002.ptex.tlg
@@ -14,3 +14,18 @@ TEST 2: Checking category codes
 FALSE
 TRUE
 ============================================================
+============================================================
+TEST 3: Accented characters, etc.
+============================================================
+"CAF^^c3^^89"
+"^^c4^^87^^c4^^97^^c9^^97^^e1^^b9^^91^^e1^^b9^^91"
+"^^e1^^bd^^a2^^ce^^b9ωΝ"
+"^^cf^^85^^cc^^88^^cc^^81^^cf^^85^^cc^^88^^cc^^80st"
+"^^ea^^9a^^89^^ea^^9a^^87"
+"Z^^ea^^9d^^8f^^e2^^93^^a7"
+============================================================
+============================================================
+TEST 4: Characters with context-sensitive Unicode behaviour
+============================================================
+FALSE
+============================================================
diff --git a/l3kernel/testfiles/m3str002.uptex.tlg b/l3kernel/testfiles/m3str002.uptex.tlg
index 51fe29260..574de6c96 100644
--- a/l3kernel/testfiles/m3str002.uptex.tlg
+++ b/l3kernel/testfiles/m3str002.uptex.tlg
@@ -19,13 +19,13 @@ TEST 3: Accented characters, etc.
 ============================================================
 "CAF^^c3^^89"
 "^^c4^^87^^c4^^97^^c9^^97^^e1^^b9^^91^^e1^^b9^^91"
-"^^e1^^bd^^a2^^ce^^b9^^cf^^89^^ce^^bd"
+"^^e1^^bd^^a2^^ce^^b9ω^^ce^^bd"
 "^^cf^^85^^cc^^88^^cc^^81^^cf^^85^^cc^^88^^cc^^80st"
-"^^ea^^9a^^89^^ea^^9a^^87"
+"^^ea^^9a^^89ꚇ"
 "^^ef^^bd^^9a^^ea^^9d^^8f^^e2^^93^^a7"
 ============================================================
 ============================================================
 TEST 4: Characters with context-sensitive Unicode behaviour
 ============================================================
-TRUE
+FALSE
 ============================================================
diff --git a/l3kernel/testfiles/m3text002.lvt b/l3kernel/testfiles/m3text002.lvt
index 9cb826919..b0a796661 100644
--- a/l3kernel/testfiles/m3text002.lvt
+++ b/l3kernel/testfiles/m3text002.lvt
@@ -7,7 +7,7 @@
 \ExplSyntaxOn
 \debug_on:n { check-declarations , deprecation , log-functions }
 \ExplSyntaxOff
-\ifdefined\disablecjktoken\disablecjktoken\fi
+
 \START
 \AUTHOR{Joseph Wright}
 \ExplSyntaxOn
@@ -125,8 +125,6 @@
     \test:n { ABCÈ日本語}
   }
 
-\sys_if_engine_ptex:T { \END }
-
 \TESTEXP { Unicode~case~changing }
   {
     \test:n { åéîøὭдαƐ }
diff --git a/l3kernel/testfiles/m3text002.ptex.tlg b/l3kernel/testfiles/m3text002.ptex.tlg
index 570c4cfbc..4cde494e0 100644
--- a/l3kernel/testfiles/m3text002.ptex.tlg
+++ b/l3kernel/testfiles/m3text002.ptex.tlg
@@ -95,3 +95,299 @@ ABC^^c3^^88日本語
 Abc^^c3^^a8日本語
 ABC^^c3^^88日本語
 ============================================================
+============================================================
+TEST 10: Unicode case changing
+============================================================
+^^c3^^a5^^c3^^a9^^c3^^ae^^c3^^b8^^e1^^bd^^a5дα^^c9^^9b
+^^c3^^85^^c3^^89^^c3^^8e^^c3^^98^^e1^^bd^^adдα^^c6^^90
+^^c3^^85^^c3^^a9^^c3^^ae^^c3^^b8^^e1^^bd^^a5дα^^c9^^9b
+^^c3^^85^^c3^^a9^^c3^^ae^^c3^^b8^^e1^^bd^^adдα^^c6^^90
+============================================================
+============================================================
+TEST 11: Unicode case changing exceptions
+============================================================
+fu^^c3^^9fball
+FUSSBALL
+Fu^^c3^^9fball
+Fu^^c3^^9fball
+============================================================
+============================================================
+TEST 12: The final sigma rule
+============================================================
+^^e1^^bd^^80ΔΥΣΣΕ^^cf^^8dΣ (^^e1^^bd^^80ΔΥΣΣΕ^^cf^^8dΣ) ^^e1^^bd^^80ΔΥΣΣΕ^^cf^^8dΣ, ^^e1^^bd^^80ΔΥΣΣΕ^^cf^^8dΣ{} ^^e1^^bd^^80ΔΥΣΣΕ^^cf^^8dΣ\noop 
+^^e1^^bd^^88ΔΥΣΣΕ^^ce^^8eΣ (^^e1^^bd^^88ΔΥΣΣΕ^^ce^^8eΣ) ^^e1^^bd^^88ΔΥΣΣΕ^^ce^^8eΣ, ^^e1^^bd^^88ΔΥΣΣΕ^^ce^^8eΣ{} ^^e1^^bd^^88ΔΥΣΣΕ^^ce^^8eΣ\noop 
+^^e1^^bd^^88ΔΥΣΣΕ^^cf^^8dΣ (^^e1^^bd^^80ΔΥΣΣΕ^^cf^^8dΣ) ^^e1^^bd^^80ΔΥΣΣΕ^^cf^^8dΣ, ^^e1^^bd^^80ΔΥΣΣΕ^^cf^^8dΣ{} ^^e1^^bd^^80ΔΥΣΣΕ^^cf^^8dΣ\noop 
+^^e1^^bd^^88ΔΥΣΣΕ^^ce^^8eΣ (^^e1^^bd^^88ΔΥΣΣΕ^^ce^^8eΣ) ^^e1^^bd^^88ΔΥΣΣΕ^^ce^^8eΣ, ^^e1^^bd^^88ΔΥΣΣΕ^^ce^^8eΣ{} ^^e1^^bd^^88ΔΥΣΣΕ^^ce^^8eΣ\noop 
+^^e1^^bd^^80ΔΥΣΣΕ^^cf^^8dΣ
+^^e1^^bd^^88ΔΥΣΣΕ^^ce^^8eΣ
+^^e1^^bd^^88ΔΥΣΣΕ^^cf^^8dΣ
+^^e1^^bd^^88ΔΥΣΣΕ^^ce^^8eΣ
+============================================================
+============================================================
+TEST 13: Cyrillic
+============================================================
+Доклады Акад^^ea^^9f^^97мии наук
+^^ea^^9e^^a4окл^^ea^^9f^^90ды ^^ea^^9e^^a0к^^ea^^9f^^90демии н^^ea^^9f^^90ук
+^^ea^^9e^^a4окл^^ea^^9f^^90ды ^^ea^^9e^^a0к^^ea^^9f^^90демии н^^ea^^9f^^90ук
+^^ea^^9e^^a4окл^^ea^^9f^^90ды ^^ea^^9e^^a0к^^ea^^9f^^90демии н^^ea^^9f^^90ук
+============================================================
+============================================================
+TEST 14: BCP47 parts
+============================================================
+^^ce^^91δικο^^ce^^a3, κε^^ce^^99μενο, ^^ce^^99ριδα
+============================================================
+============================================================
+TEST 15: Armenian
+============================================================
+^^d4^^b5^^d5^^90^^d4^^b5^^d5^^92^^d4^^b1^^d5^^86
+^^d4^^b5^^d5^^90^^d4^^b5^^d5^^8e^^d4^^b1^^d5^^86
+^^d4^^b5^^d5^^90^^d4^^b5^^d5^^92^^d4^^b1^^d5^^86
+^^d4^^b5^^d6^^80^^d6^^87^^d5^^a1^^d5^^b6
+^^d4^^b5^^d5^^be^^d5^^a1^^d5^^b6
+^^d4^^b5^^d6^^82^^d5^^a1^^d5^^b6
+============================================================
+============================================================
+TEST 16: German-alternative
+============================================================
+FUSSBALL
+FU^^e1^^ba^^9eBALL
+============================================================
+============================================================
+TEST 17: Greek
+============================================================
+^^ce^^86δικο^^ce^^a3, κε^^ce^^8aμενο, ^^ce^^8aριδα
+^^ce^^91δικο^^ce^^a3, κε^^ce^^99μενο, ^^ce^^99ριδα
+Πατ^^ce^^86τα
+Πατ^^ce^^91τα
+Α^^ce^^88ρα^^ce^^a3, Μυστ^^ce^^89ριο, Ωρα^^ce^^8aο
+Α^^ce^^95ρα^^ce^^a3, Μυστ^^ce^^97ριο, Ωρα^^ce^^99ο
+Μα^^ce^^99^^cc^^88^^cc^^81ου, Π^^ce^^8cρο^^ce^^a3, Ρ^^ce^^8eθμιση
+Μα^^ce^^aaου, Π^^ce^^9fρο^^ce^^a3, Ρ^^ce^^a5θμιση
+^^ce^^a5^^cc^^88^^cc^^81, Τηρ^^ce^^8f, Μ^^ce^^86ιο^^ce^^a3
+^^ce^^ab, Τηρ^^ce^^a9, Μ^^ce^^91ιο^^ce^^a3
+^^ce^^86υλο^^ce^^a3
+^^ce^^91υλο^^ce^^a3
+Α^^ce^^abΛΟΣ
+Α^^ce^^abΛΟΣ
+^^ce^^86κλιτα ρ^^ce^^89ματα ^^ce^^89 ^^ce^^86κλιτε^^ce^^a3 μετοχ^^ce^^88^^ce^^a3
+^^ce^^91κλιτα ρ^^ce^^97ματα ^^ce^^89 ^^ce^^91κλιτε^^ce^^a3 μετοχ^^ce^^95^^ce^^a3
+Επειδ^^ce^^89 η αναγν^^ce^^8fριση τη^^ce^^a3 αξιοπρ^^ce^^88πεια^^ce^^a3
+Επειδ^^ce^^97 η αναγν^^ce^^a9ριση τη^^ce^^a3 αξιοπρ^^ce^^95πεια^^ce^^a3
+νομικο^^ce^^8e ^^ce^^89 διεθνο^^ce^^8e^^ce^^a3
+νομικο^^ce^^a5 ^^ce^^89 διεθνο^^ce^^a5^^ce^^a3
+^^e1^^bc^^98πειδ^^e1^^bf^^8a ^^e1^^bc^^a9 ^^e1^^bc^^88ναγν^^ce^^8fριση
+^^ce^^95πειδ^^ce^^97 ^^ce^^97 ^^ce^^91ναγν^^ce^^a9ριση
+νομικο^^ce^^a5^^cd^^82 ^^e1^^bc^^aa διεθνο^^ce^^a5^^cd^^82^^ce^^a3
+νομικο^^ce^^a5 ^^ce^^89 διεθνο^^ce^^a5^^ce^^a3
+Ν^^ce^^88ο, Δημιουργ^^ce^^8aα
+Ν^^ce^^95ο, Δημιουργ^^ce^^99α
+Ελ^^ce^^86τε να φ^^ce^^86τε τα καλ^^ce^^8eτερα πα^^ce^^aaδ^^ce^^86κια!
+Ελ^^ce^^91τε να φ^^ce^^91τε τα καλ^^ce^^a5τερα πα^^ce^^aaδ^^ce^^91κια!
+Μα^^ce^^99^^cc^^88^^cc^^81ου, τρ^^ce^^8cλε^^ce^^aa
+Μα^^ce^^aaου, τρ^^ce^^9fλε^^ce^^aa
+Το ^^ce^^88να ^^ce^^89 το ^^ce^^86λλο.
+Το ^^ce^^95να ^^ce^^89 το ^^ce^^91λλο.
+ρωμ^^ce^^88ικα
+ρωμ^^ce^^95ικα
+^^e1^^bd^^88ΔΥΣΣΕ^^cf^^8dΣ
+^^e1^^bd^^88ΔΥΣΣΕ^^cf^^8dΣ
+^^ce^^89^^ce^^99
+^^e1^^bf^^8c
+^^ce^^97^^ce^^99
+^^ce^^97^^ce^^99^^cc^^81
+^^e1^^bf^^8c
+^^ce^^97^^ce^^99
+^^e1^^bc^^88^^e1^^bc^^89^^e1^^bc^^8a^^e1^^bc^^8b^^e1^^bc^^8c^^e1^^bc^^8d^^e1^^bc^^8e^^e1^^bc^^8f
+^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91
+^^e1^^bc^^98^^e1^^bc^^99^^e1^^bc^^9a^^e1^^bc^^9b^^e1^^bc^^9c^^e1^^bc^^9d
+^^ce^^95^^ce^^95^^ce^^95^^ce^^95^^ce^^95^^ce^^95
+^^e1^^bc^^a8^^e1^^bc^^a9^^e1^^bc^^aa^^e1^^bc^^ab^^e1^^bc^^ac^^e1^^bc^^ad^^e1^^bc^^ae^^e1^^bc^^af
+^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97
+^^e1^^bc^^b8^^e1^^bc^^b9^^e1^^bc^^ba^^e1^^bc^^bb^^e1^^bc^^bc^^e1^^bc^^bd^^e1^^bc^^be^^e1^^bc^^bf
+^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99
+^^e1^^bd^^88^^e1^^bd^^89^^e1^^bd^^8a^^e1^^bd^^8b^^e1^^bd^^8c^^e1^^bd^^8d
+^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f
+^^ce^^a5^^cc^^93^^e1^^bd^^99^^ce^^a5^^cc^^93^^cc^^80^^e1^^bd^^9b^^ce^^a5^^cc^^93^^cc^^81^^e1^^bd^^9d^^ce^^a5^^cc^^93^^cd^^82^^e1^^bd^^9f
+^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5
+^^e1^^bd^^a8^^e1^^bd^^a9^^e1^^bd^^aa^^e1^^bd^^ab^^e1^^bd^^ac^^e1^^bd^^ad^^e1^^bd^^ae^^e1^^bd^^af
+^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9
+^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc
+^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99
+^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c
+^^ce^^97^^ce^^99^^ce^^97^^ce^^99^^ce^^97^^ce^^99^^ce^^97^^ce^^99^^ce^^97^^ce^^99^^ce^^97^^ce^^99^^ce^^97^^ce^^99^^ce^^97^^ce^^99
+^^e1^^bf^^bc^^e1^^bf^^bc^^e1^^bf^^bc^^e1^^bf^^bc^^e1^^bf^^bc^^e1^^bf^^bc^^e1^^bf^^bc^^e1^^bf^^bc
+^^ce^^a9^^ce^^99^^ce^^a9^^ce^^99^^ce^^a9^^ce^^99^^ce^^a9^^ce^^99^^ce^^a9^^ce^^99^^ce^^a9^^ce^^99^^ce^^a9^^ce^^99^^ce^^a9^^ce^^99
+============================================================
+============================================================
+TEST 18: Turkish/Azeri
+============================================================
+rag^^c4^^b1p hul^^c3^^bbsi ^^c3^^b6zdem
+ragip hul^^c3^^bbsi^^cc^^87 ^^c3^^b6zdem
+RAGIP HUL^^c3^^9bS^^c4^^b0 ^^c3^^96ZDEM
+RAGIP HUL^^c3^^9bSI ^^c3^^96ZDEM
+Rag^^c4^^b1p hul^^c3^^bbsi ^^c3^^b6zdem
+Rag^^c4^^b1p hul^^c3^^bbsi ^^c3^^b6zdem
+Ip hul^^c3^^bbsi ^^c3^^b6zdem
+Ip hul^^c3^^bbsi ^^c3^^b6zdem
+============================================================
+============================================================
+TEST 19: Lithuanian
+============================================================
+i^^cc^^87^^cc^^80i^^cc^^87^^cc^^81i^^cc^^87^^cc^^83i^^cc^^87^^cc^^80i^^cc^^87^^cc^^81i^^cc^^87^^cc^^83j^^cc^^87^^cc^^80j^^cc^^87^^cc^^81j^^cc^^87^^cc^^83^^c4^^af^^cc^^87^^cc^^80^^c4^^af^^cc^^87^^cc^^81^^c4^^af^^cc^^87^^cc^^83
+^^c3^^ac^^c3^^ad^^c4^^a9i^^cc^^80i^^cc^^81i^^cc^^83j^^cc^^80j^^cc^^81j^^cc^^83^^c4^^af^^cc^^80^^c4^^af^^cc^^81^^c4^^af^^cc^^83
+I^^cc^^80I^^cc^^80I^^cc^^83I^^cc^^80I^^cc^^81I^^cc^^83J^^cc^^80J^^cc^^81J^^cc^^83^^c4^^ae^^cc^^80^^c4^^ae^^cc^^81^^c4^^ae^^cc^^83
+I^^cc^^87^^cc^^80I^^cc^^87^^cc^^80I^^cc^^87^^cc^^83I^^cc^^87^^cc^^80I^^cc^^87^^cc^^81I^^cc^^87^^cc^^83J^^cc^^87^^cc^^80J^^cc^^87^^cc^^81J^^cc^^87^^cc^^83^^c4^^ae^^cc^^87^^cc^^80^^c4^^ae^^cc^^87^^cc^^81^^c4^^ae^^cc^^87^^cc^^83
+^^c3^^8ci^^cc^^87^^cc^^81i^^cc^^87^^cc^^83i^^cc^^87^^cc^^80i^^cc^^87^^cc^^81i^^cc^^87^^cc^^83j^^cc^^87^^cc^^80j^^cc^^87^^cc^^81j^^cc^^87^^cc^^83^^c4^^af^^cc^^87^^cc^^80^^c4^^af^^cc^^87^^cc^^81^^c4^^af^^cc^^87^^cc^^83
+I^^cc^^80i^^cc^^87^^cc^^80i^^cc^^87^^cc^^83i^^cc^^87^^cc^^80i^^cc^^87^^cc^^81i^^cc^^87^^cc^^83j^^cc^^87^^cc^^80j^^cc^^87^^cc^^81j^^cc^^87^^cc^^83^^c4^^af^^cc^^87^^cc^^80^^c4^^af^^cc^^87^^cc^^81^^c4^^af^^cc^^87^^cc^^83
+^^c3^^8c^^c3^^ad^^c4^^a9i^^cc^^80i^^cc^^81i^^cc^^83j^^cc^^80j^^cc^^81j^^cc^^83^^c4^^af^^cc^^80^^c4^^af^^cc^^81^^c4^^af^^cc^^83
+I^^cc^^87^^cc^^80i^^cc^^87^^cc^^80i^^cc^^87^^cc^^83i^^cc^^87^^cc^^80i^^cc^^87^^cc^^81i^^cc^^87^^cc^^83j^^cc^^87^^cc^^80j^^cc^^87^^cc^^81j^^cc^^87^^cc^^83^^c4^^af^^cc^^87^^cc^^80^^c4^^af^^cc^^87^^cc^^81^^c4^^af^^cc^^87^^cc^^83
+============================================================
+============================================================
+TEST 20: Medieval Latin
+============================================================
+lupus
+lvpvs
+LVPVS
+LUPUS
+============================================================
+============================================================
+TEST 21: Dutch
+============================================================
+ijsselmeer
+ijsselmeer
+IJSSELMEER
+IJSSELMEER
+IJsselmeer
+Ijsselmeer
+IJsselmeer
+Ijsselmeer
+IJsselmeer
+Ijsselmeer
+Im
+Im
+============================================================
+============================================================
+TEST 22: Titlecase exceptions
+============================================================
+Ssoo
+^^c7^^85!
+============================================================
+============================================================
+TEST 23: Case changing braced arguments
+============================================================
+foo \emph {BAR} {baz}
+FOO \emph {BAR} {BAZ}
+Foo \emph {BAR} {baz}
+FOO \emph {BAR} {BAZ}
+\emph {BAR} {baz}
+\emph {BAR} {BAZ}
+\emph {BAR} {Baz}
+\emph {BAR} {BAZ}
+============================================================
+============================================================
+TEST 24: Expanding content
+============================================================
+some text hello
+SOME TEXT HELLO
+Some text hello
+Some text Hello
+hello sometext
+HELLO SOMETEXT
+Hello sometext
+Hello sometext
+some text hello
+SOME TEXT HELLO
+Some text hello
+Some text Hello
+hello sometext
+HELLO SOMETEXT
+Hello sometext
+Hello sometext
+some text \cs_tmp:w 
+SOME TEXT \cs_tmp:w 
+Some text \cs_tmp:w 
+Some text \cs_tmp:w 
+\cs_tmp:w  sometext
+\cs_tmp:w  SOMETEXT
+\cs_tmp:w  Sometext
+\cs_tmp:w  Sometext
+============================================================
+============================================================
+TEST 25: Math-mode escape
+============================================================
+some text $y = mx + c$
+SOME TEXT $y = mx + c$
+Some text $y = mx + c$
+Some text $y = mx + c$
+$y = mx + c$ text
+$y = mx + c$ TEXT
+$y = mx + c$ Text
+$y = mx + c$ Text
+opps not close token in $y = mx + c
+OPPS NOT CLOSE TOKEN IN $y = mx + c
+Opps not close token in $y = mx + c
+Opps not close token in $y = mx + c
+============================================================
+============================================================
+TEST 26: Nesting
+============================================================
+HELLO
+hello
+FUSSBALL
+^^e1^^bd^^88ΔΥΣΣΕ^^ce^^8eΣ
+============================================================
+============================================================
+TEST 27: Letter-like commands
+============================================================
+\aa \aa \ae \dh \ss \l \o 
+\AA \AA \AE \DH \SS \L \O 
+\AA \aa \ae \dh \ss \l \o 
+\AA \aa \ae \dh \ss \l \O 
+============================================================
+============================================================
+TEST 28: Accents
+============================================================
+\"{a}\u {e}\H {i}\v {o}\.{u}
+\"{A}\u {E}\H {I}\v {O}\.{U}
+\"{A}\u {e}\H {i}\v {o}\.{u}
+\"{A}\u {e}\H {i}\v {o}\.{u}
+============================================================
+============================================================
+TEST 29: Active chars
+============================================================
+"`lo"=rem"'
+"`LO"=REM"'
+"`Lo"=rem"'
+"`Lo"=rem"'
+============================================================
+============================================================
+TEST 30: Case changing exclusions
+============================================================
+Variant \tl_show:x already defined; not changing it on line ...
+> foo\NoCaseChange {BAR}.
+<recently read> }
+l. ...  }
+> \use:n {foo}\NoCaseChange {BAR}.
+<recently read> }
+l. ...  }
+============================================================
+============================================================
+TEST 31: Case change switching
+============================================================
+lower
+UPPER
+Title
+Title
+WORDS lower
+words UPPER
+Words UPPER
+Words \text_case_switch:nnnn {normal}{lower}{UPPER}{Title}
+============================================================
+============================================================
+TEST 32: Case change replacements
+============================================================
+Defining \l__text_case_\foo_tl on line ...
+> fooreplaced.
+<recently read> }
+l. ...  }
+============================================================
diff --git a/l3kernel/testfiles/m3text002.tlg b/l3kernel/testfiles/m3text002.uptex.tlg
similarity index 69%
copy from l3kernel/testfiles/m3text002.tlg
copy to l3kernel/testfiles/m3text002.uptex.tlg
index 5177226a9..d7a7292f2 100644
--- a/l3kernel/testfiles/m3text002.tlg
+++ b/l3kernel/testfiles/m3text002.uptex.tlg
@@ -90,18 +90,18 @@ No problems
 ============================================================
 TEST 9: (u)pTeX-based tests
 ============================================================
-abc^^c3^^a8^^e6^^97^^a5^^e6^^9c^^ac^^e8^^aa^^9e
-ABC^^c3^^88^^e6^^97^^a5^^e6^^9c^^ac^^e8^^aa^^9e
-Abc^^c3^^a8^^e6^^97^^a5^^e6^^9c^^ac^^e8^^aa^^9e
-ABC^^c3^^88^^e6^^97^^a5^^e6^^9c^^ac^^e8^^aa^^9e
+abc^^c3^^a8日本語
+ABC^^c3^^88日本語
+Abc^^c3^^a8日本語
+ABC^^c3^^88日本語
 ============================================================
 ============================================================
 TEST 10: Unicode case changing
 ============================================================
-^^c3^^a5^^c3^^a9^^c3^^ae^^c3^^b8^^e1^^bd^^a5^^d0^^b4^^ce^^b1^^c9^^9b
-^^c3^^85^^c3^^89^^c3^^8e^^c3^^98^^e1^^bd^^ad^^d0^^94^^ce^^91^^c6^^90
-^^c3^^85^^c3^^a9^^c3^^ae^^c3^^b8^^e1^^bd^^a5^^d0^^b4^^ce^^b1^^c9^^9b
-^^c3^^85^^c3^^a9^^c3^^ae^^c3^^b8^^e1^^bd^^ad^^d0^^b4^^ce^^b1^^c6^^90
+^^c3^^a5^^c3^^a9^^c3^^ae^^c3^^b8^^e1^^bd^^a5дα^^c9^^9b
+^^c3^^85^^c3^^89^^c3^^8e^^c3^^98Ὥ^^d0^^94^^ce^^91^^c6^^90
+^^c3^^85^^c3^^a9^^c3^^ae^^c3^^b8^^e1^^bd^^a5дα^^c9^^9b
+^^c3^^85^^c3^^a9^^c3^^ae^^c3^^b8Ὥдα^^c6^^90
 ============================================================
 ============================================================
 TEST 11: Unicode case changing exceptions
@@ -114,22 +114,22 @@ Fu^^c3^^9fball
 ============================================================
 TEST 12: The final sigma rule
 ============================================================
-^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82 (^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82) ^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82, ^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82{} ^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82\noop 
-^^e1^^bd^^88^^ce^^94^^ce^^a5^^ce^^a3^^ce^^a3^^ce^^95^^ce^^8e^^ce^^a3 (^^e1^^bd^^88^^ce^^94^^ce^^a5^^ce^^a3^^ce^^a3^^ce^^95^^ce^^8e^^ce^^a3) ^^e1^^bd^^88^^ce^^94^^ce^^a5^^ce^^a3^^ce^^a3^^ce^^95^^ce^^8e^^ce^^a3, ^^e1^^bd^^88^^ce^^94^^ce^^a5^^ce^^a3^^ce^^a3^^ce^^95^^ce^^8e^^ce^^a3{} ^^e1^^bd^^88^^ce^^94^^ce^^a5^^ce^^a3^^ce^^a3^^ce^^95^^ce^^8e^^ce^^a3\noop 
-^^e1^^bd^^88^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82 (^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82) ^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82, ^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82{} ^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82\noop 
-^^e1^^bd^^88^^ce^^94^^ce^^a5^^ce^^a3^^ce^^a3^^ce^^95^^ce^^8e^^ce^^a3 (^^e1^^bd^^88^^ce^^94^^ce^^a5^^ce^^a3^^ce^^a3^^ce^^95^^ce^^8e^^ce^^a3) ^^e1^^bd^^88^^ce^^94^^ce^^a5^^ce^^a3^^ce^^a3^^ce^^95^^ce^^8e^^ce^^a3, ^^e1^^bd^^88^^ce^^94^^ce^^a5^^ce^^a3^^ce^^a3^^ce^^95^^ce^^8e^^ce^^a3{} ^^e1^^bd^^88^^ce^^94^^ce^^a5^^ce^^a3^^ce^^a3^^ce^^95^^ce^^8e^^ce^^a3\noop 
-^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82
-^^e1^^bd^^88^^ce^^94^^ce^^a5^^ce^^a3^^ce^^a3^^ce^^95^^ce^^8e^^ce^^a3
-^^e1^^bd^^88^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82
-^^e1^^bd^^88^^ce^^94^^ce^^a5^^ce^^a3^^ce^^a3^^ce^^95^^ce^^8e^^ce^^a3
+^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^82^^cf^^82^^ce^^b5^^cf^^8d^^cf^^82 (^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^82^^cf^^82^^ce^^b5^^cf^^8d^^cf^^82) ^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^82^^cf^^82^^ce^^b5^^cf^^8d^^cf^^82, ^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^82^^cf^^82^^ce^^b5^^cf^^8d^^cf^^82{} ^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^82^^cf^^82^^ce^^b5^^cf^^8d^^cf^^82\noop 
+ὈΔΥΣΣΕΎΣ (ὈΔΥΣΣΕΎΣ) ὈΔΥΣΣΕΎΣ, ὈΔΥΣΣΕΎΣ{} ὈΔΥΣΣΕΎΣ\noop 
+ὈΔΥΣΣΕΎΣ (ὈΔΥΣΣΕΎΣ) ὈΔΥΣΣΕΎΣ, ὈΔΥΣΣΕΎΣ{} ^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^82^^cf^^82^^ce^^b5^^cf^^8d^^cf^^82\noop 
+ὈΔΥΣΣΕΎΣ (ὈΔΥΣΣΕΎΣ) ὈΔΥΣΣΕΎΣ, ὈΔΥΣΣΕΎΣ{} ὈΔΥΣΣΕΎΣ\noop 
+^^e1^^bd^^80^^ce^^b4^^cf^^85^^cf^^82^^cf^^82^^ce^^b5^^cf^^8d^^cf^^82
+ὈΔΥΣΣΕΎΣ
+ὈΔΥΣΣΕΎΣ
+ὈΔΥΣΣΕΎΣ
 ============================================================
 ============================================================
 TEST 13: Cyrillic
 ============================================================
-^^d0^^b4^^d0^^be^^d0^^ba^^d0^^bb^^d0^^b0^^d0^^b4^^d1^^8b ^^d0^^b0^^d0^^ba^^d0^^b0^^d0^^b4^^d0^^b5^^d0^^bc^^d0^^b8^^d0^^b8 ^^d0^^bd^^d0^^b0^^d1^^83^^d0^^ba
-^^d0^^94^^d0^^9e^^d0^^9a^^d0^^9b^^d0^^90^^d0^^94^^d0^^ab ^^d0^^90^^d0^^9a^^d0^^90^^d0^^94^^d0^^95^^d0^^9c^^d0^^98^^d0^^98 ^^d0^^9d^^d0^^90^^d0^^a3^^d0^^9a
-^^d0^^94^^d0^^be^^d0^^ba^^d0^^bb^^d0^^b0^^d0^^b4^^d1^^8b ^^d0^^b0^^d0^^ba^^d0^^b0^^d0^^b4^^d0^^b5^^d0^^bc^^d0^^b8^^d0^^b8 ^^d0^^bd^^d0^^b0^^d1^^83^^d0^^ba
-^^d0^^94^^d0^^be^^d0^^ba^^d0^^bb^^d0^^b0^^d0^^b4^^d1^^8b ^^d0^^90^^d0^^ba^^d0^^b0^^d0^^b4^^d0^^b5^^d0^^bc^^d0^^b8^^d0^^b8 ^^d0^^bd^^d0^^b0^^d1^^83^^d0^^ba
+^^d0^^b4оклады ^^d0^^b0кадемии наук
+Д^^d0^^9e^^d0^^9a^^d0^^9b^^d0^^90^^d0^^94^^d0^^ab А^^d0^^9a^^d0^^90^^d0^^94^^d0^^95^^d0^^9c^^d0^^98^^d0^^98 ^^d0^^9d^^d0^^90^^d0^^a3^^d0^^9a
+Д^^d0^^9e^^d0^^9a^^d0^^9b^^d0^^90^^d0^^94^^d0^^ab А^^d0^^9a^^d0^^90^^d0^^94^^d0^^95^^d0^^9c^^d0^^98^^d0^^98 ^^d0^^9d^^d0^^90^^d0^^a3^^d0^^9a
+Д^^d0^^9e^^d0^^9a^^d0^^9b^^d0^^90^^d0^^94^^d0^^ab А^^d0^^9a^^d0^^90^^d0^^94^^d0^^95^^d0^^9c^^d0^^98^^d0^^98 ^^d0^^9d^^d0^^90^^d0^^a3^^d0^^9a
 ============================================================
 ============================================================
 TEST 14: BCP47 parts
@@ -139,12 +139,12 @@ TEST 14: BCP47 parts
 ============================================================
 TEST 15: Armenian
 ============================================================
-^^d4^^b5^^d5^^90^^d4^^b5^^d5^^92^^d4^^b1^^d5^^86
-^^d4^^b5^^d5^^90^^d4^^b5^^d5^^8e^^d4^^b1^^d5^^86
-^^d4^^b5^^d5^^90^^d4^^b5^^d5^^92^^d4^^b1^^d5^^86
-^^d4^^b5^^d6^^80^^d6^^87^^d5^^a1^^d5^^b6
-^^d4^^b5^^d5^^be^^d5^^a1^^d5^^b6
-^^d4^^b5^^d6^^82^^d5^^a1^^d5^^b6
+Ե^^d5^^90^^d4^^b5^^d5^^92^^d4^^b1^^d5^^86
+Ե^^d5^^90^^d4^^b5^^d5^^8e^^d4^^b1^^d5^^86
+Ե^^d5^^90^^d4^^b5^^d5^^92^^d4^^b1^^d5^^86
+Ե^^d5^^90^^d4^^b5^^d6^^82^^d4^^b1^^d5^^86
+^^d4^^b5^^d5^^be^^d4^^b1^^d5^^86
+^^d4^^b5^^d6^^82^^d4^^b1^^d5^^86
 ============================================================
 ============================================================
 TEST 16: German-alternative
@@ -157,44 +157,44 @@ TEST 17: Greek
 ============================================================
 ^^ce^^86^^ce^^94^^ce^^99^^ce^^9a^^ce^^9f^^ce^^a3, ^^ce^^9a^^ce^^95^^ce^^8a^^ce^^9c^^ce^^95^^ce^^9d^^ce^^9f, ^^ce^^8a^^ce^^a1^^ce^^99^^ce^^94^^ce^^91
 ^^ce^^91^^ce^^94^^ce^^99^^ce^^9a^^ce^^9f^^ce^^a3, ^^ce^^9a^^ce^^95^^ce^^99^^ce^^9c^^ce^^95^^ce^^9d^^ce^^9f, ^^ce^^99^^ce^^a1^^ce^^99^^ce^^94^^ce^^91
-^^ce^^a0^^ce^^91^^ce^^a4^^ce^^86^^ce^^a4^^ce^^91
+Π^^ce^^91^^ce^^a4^^ce^^86^^ce^^a4^^ce^^91
 ^^ce^^a0^^ce^^91^^ce^^a4^^ce^^91^^ce^^a4^^ce^^91
-^^ce^^91^^ce^^88^^ce^^a1^^ce^^91^^ce^^a3, ^^ce^^9c^^ce^^a5^^ce^^a3^^ce^^a4^^ce^^89^^ce^^a1^^ce^^99^^ce^^9f, ^^ce^^a9^^ce^^a1^^ce^^91^^ce^^8a^^ce^^9f
+Α^^ce^^88^^ce^^a1^^ce^^91^^ce^^a3, Μ^^ce^^a5^^ce^^a3^^ce^^a4^^ce^^89^^ce^^a1^^ce^^99^^ce^^9f, Ω^^ce^^a1^^ce^^91^^ce^^8a^^ce^^9f
 ^^ce^^91^^ce^^95^^ce^^a1^^ce^^91^^ce^^a3, ^^ce^^9c^^ce^^a5^^ce^^a3^^ce^^a4^^ce^^97^^ce^^a1^^ce^^99^^ce^^9f, ^^ce^^a9^^ce^^a1^^ce^^91^^ce^^99^^ce^^9f
-^^ce^^9c^^ce^^91^^ce^^99^^cc^^88^^cc^^81^^ce^^9f^^ce^^a5, ^^ce^^a0^^ce^^8c^^ce^^a1^^ce^^9f^^ce^^a3, ^^ce^^a1^^ce^^8e^^ce^^98^^ce^^9c^^ce^^99^^ce^^a3^^ce^^97
+Μ^^ce^^91^^ce^^99^^cc^^88^^cc^^81^^ce^^9f^^ce^^a5, Π^^ce^^8c^^ce^^a1^^ce^^9f^^ce^^a3, Ρ^^ce^^8e^^ce^^98^^ce^^9c^^ce^^99^^ce^^a3^^ce^^97
 ^^ce^^9c^^ce^^91^^ce^^aa^^ce^^9f^^ce^^a5, ^^ce^^a0^^ce^^9f^^ce^^a1^^ce^^9f^^ce^^a3, ^^ce^^a1^^ce^^a5^^ce^^98^^ce^^9c^^ce^^99^^ce^^a3^^ce^^97
-^^ce^^a5^^cc^^88^^cc^^81, ^^ce^^a4^^ce^^97^^ce^^a1^^ce^^8f, ^^ce^^9c^^ce^^86^^ce^^99^^ce^^9f^^ce^^a3
+^^ce^^a5^^cc^^88^^cc^^81, Τ^^ce^^97^^ce^^a1^^ce^^8f, Μ^^ce^^86^^ce^^99^^ce^^9f^^ce^^a3
 ^^ce^^ab, ^^ce^^a4^^ce^^97^^ce^^a1^^ce^^a9, ^^ce^^9c^^ce^^91^^ce^^aa^^ce^^9f^^ce^^a3
 ^^ce^^86^^ce^^a5^^ce^^9b^^ce^^9f^^ce^^a3
 ^^ce^^91^^ce^^ab^^ce^^9b^^ce^^9f^^ce^^a3
+ΑΫΛΟΣ
 ^^ce^^91^^ce^^ab^^ce^^9b^^ce^^9f^^ce^^a3
-^^ce^^91^^ce^^ab^^ce^^9b^^ce^^9f^^ce^^a3
-^^ce^^86^^ce^^9a^^ce^^9b^^ce^^99^^ce^^a4^^ce^^91 ^^ce^^a1^^ce^^89^^ce^^9c^^ce^^91^^ce^^a4^^ce^^91 ^^ce^^89 ^^ce^^86^^ce^^9a^^ce^^9b^^ce^^99^^ce^^a4^^ce^^95^^ce^^a3 ^^ce^^9c^^ce^^95^^ce^^a4^^ce^^9f^^ce^^a7^^ce^^88^^ce^^a3
+Ά^^ce^^9a^^ce^^9b^^ce^^99^^ce^^a4^^ce^^91 ^^ce^^a1^^ce^^89^^ce^^9c^^ce^^91^^ce^^a4^^ce^^91 ^^ce^^89 ^^ce^^86^^ce^^9a^^ce^^9b^^ce^^99^^ce^^a4^^ce^^95^^ce^^a3 ^^ce^^9c^^ce^^95^^ce^^a4^^ce^^9f^^ce^^a7^^ce^^88^^ce^^a3
 ^^ce^^91^^ce^^9a^^ce^^9b^^ce^^99^^ce^^a4^^ce^^91 ^^ce^^a1^^ce^^97^^ce^^9c^^ce^^91^^ce^^a4^^ce^^91 ^^ce^^89 ^^ce^^91^^ce^^9a^^ce^^9b^^ce^^99^^ce^^a4^^ce^^95^^ce^^a3 ^^ce^^9c^^ce^^95^^ce^^a4^^ce^^9f^^ce^^a7^^ce^^95^^ce^^a3
-^^ce^^95^^ce^^a0^^ce^^95^^ce^^99^^ce^^94^^ce^^89 ^^ce^^97 ^^ce^^91^^ce^^9d^^ce^^91^^ce^^93^^ce^^9d^^ce^^8f^^ce^^a1^^ce^^99^^ce^^a3^^ce^^97 ^^ce^^a4^^ce^^97^^ce^^a3 ^^ce^^91^^ce^^9e^^ce^^99^^ce^^9f^^ce^^a0^^ce^^a1^^ce^^88^^ce^^a0^^ce^^95^^ce^^99^^ce^^91^^ce^^a3
+Ε^^ce^^a0^^ce^^95^^ce^^99^^ce^^94^^ce^^89 ^^ce^^97 ^^ce^^91^^ce^^9d^^ce^^91^^ce^^93^^ce^^9d^^ce^^8f^^ce^^a1^^ce^^99^^ce^^a3^^ce^^97 ^^ce^^a4^^ce^^97^^ce^^a3 ^^ce^^91^^ce^^9e^^ce^^99^^ce^^9f^^ce^^a0^^ce^^a1^^ce^^88^^ce^^a0^^ce^^95^^ce^^99^^ce^^91^^ce^^a3
 ^^ce^^95^^ce^^a0^^ce^^95^^ce^^99^^ce^^94^^ce^^97 ^^ce^^97 ^^ce^^91^^ce^^9d^^ce^^91^^ce^^93^^ce^^9d^^ce^^a9^^ce^^a1^^ce^^99^^ce^^a3^^ce^^97 ^^ce^^a4^^ce^^97^^ce^^a3 ^^ce^^91^^ce^^9e^^ce^^99^^ce^^9f^^ce^^a0^^ce^^a1^^ce^^95^^ce^^a0^^ce^^95^^ce^^99^^ce^^91^^ce^^a3
 ^^ce^^9d^^ce^^9f^^ce^^9c^^ce^^99^^ce^^9a^^ce^^9f^^ce^^8e ^^ce^^89 ^^ce^^94^^ce^^99^^ce^^95^^ce^^98^^ce^^9d^^ce^^9f^^ce^^8e^^ce^^a3
 ^^ce^^9d^^ce^^9f^^ce^^9c^^ce^^99^^ce^^9a^^ce^^9f^^ce^^a5 ^^ce^^89 ^^ce^^94^^ce^^99^^ce^^95^^ce^^98^^ce^^9d^^ce^^9f^^ce^^a5^^ce^^a3
-^^e1^^bc^^98^^ce^^a0^^ce^^95^^ce^^99^^ce^^94^^e1^^bf^^8a ^^e1^^bc^^a9 ^^e1^^bc^^88^^ce^^9d^^ce^^91^^ce^^93^^ce^^9d^^ce^^8f^^ce^^a1^^ce^^99^^ce^^a3^^ce^^97
+Ἐ^^ce^^a0^^ce^^95^^ce^^99^^ce^^94^^e1^^bf^^8a ^^e1^^bc^^a9 ^^e1^^bc^^88^^ce^^9d^^ce^^91^^ce^^93^^ce^^9d^^ce^^8f^^ce^^a1^^ce^^99^^ce^^a3^^ce^^97
 ^^ce^^95^^ce^^a0^^ce^^95^^ce^^99^^ce^^94^^ce^^97 ^^ce^^97 ^^ce^^91^^ce^^9d^^ce^^91^^ce^^93^^ce^^9d^^ce^^a9^^ce^^a1^^ce^^99^^ce^^a3^^ce^^97
 ^^ce^^9d^^ce^^9f^^ce^^9c^^ce^^99^^ce^^9a^^ce^^9f^^ce^^a5^^cd^^82 ^^e1^^bc^^aa ^^ce^^94^^ce^^99^^ce^^95^^ce^^98^^ce^^9d^^ce^^9f^^ce^^a5^^cd^^82^^ce^^a3
 ^^ce^^9d^^ce^^9f^^ce^^9c^^ce^^99^^ce^^9a^^ce^^9f^^ce^^a5 ^^ce^^89 ^^ce^^94^^ce^^99^^ce^^95^^ce^^98^^ce^^9d^^ce^^9f^^ce^^a5^^ce^^a3
-^^ce^^9d^^ce^^88^^ce^^9f, ^^ce^^94^^ce^^97^^ce^^9c^^ce^^99^^ce^^9f^^ce^^a5^^ce^^a1^^ce^^93^^ce^^8a^^ce^^91
+Ν^^ce^^88^^ce^^9f, Δ^^ce^^97^^ce^^9c^^ce^^99^^ce^^9f^^ce^^a5^^ce^^a1^^ce^^93^^ce^^8a^^ce^^91
 ^^ce^^9d^^ce^^95^^ce^^9f, ^^ce^^94^^ce^^97^^ce^^9c^^ce^^99^^ce^^9f^^ce^^a5^^ce^^a1^^ce^^93^^ce^^99^^ce^^91
-^^ce^^95^^ce^^9b^^ce^^86^^ce^^a4^^ce^^95 ^^ce^^9d^^ce^^91 ^^ce^^a6^^ce^^86^^ce^^a4^^ce^^95 ^^ce^^a4^^ce^^91 ^^ce^^9a^^ce^^91^^ce^^9b^^ce^^8e^^ce^^a4^^ce^^95^^ce^^a1^^ce^^91 ^^ce^^a0^^ce^^91^^ce^^aa^^ce^^94^^ce^^86^^ce^^9a^^ce^^99^^ce^^91!
+Ε^^ce^^9b^^ce^^86^^ce^^a4^^ce^^95 ^^ce^^9d^^ce^^91 ^^ce^^a6^^ce^^86^^ce^^a4^^ce^^95 ^^ce^^a4^^ce^^91 ^^ce^^9a^^ce^^91^^ce^^9b^^ce^^8e^^ce^^a4^^ce^^95^^ce^^a1^^ce^^91 ^^ce^^a0^^ce^^91^^ce^^aa^^ce^^94^^ce^^86^^ce^^9a^^ce^^99^^ce^^91!
 ^^ce^^95^^ce^^9b^^ce^^91^^ce^^a4^^ce^^95 ^^ce^^9d^^ce^^91 ^^ce^^a6^^ce^^91^^ce^^a4^^ce^^95 ^^ce^^a4^^ce^^91 ^^ce^^9a^^ce^^91^^ce^^9b^^ce^^a5^^ce^^a4^^ce^^95^^ce^^a1^^ce^^91 ^^ce^^a0^^ce^^91^^ce^^aa^^ce^^94^^ce^^91^^ce^^9a^^ce^^99^^ce^^91!
-^^ce^^9c^^ce^^91^^ce^^99^^cc^^88^^cc^^81^^ce^^9f^^ce^^a5, ^^ce^^a4^^ce^^a1^^ce^^8c^^ce^^9b^^ce^^95^^ce^^aa
+Μ^^ce^^91^^ce^^99^^cc^^88^^cc^^81^^ce^^9f^^ce^^a5, ^^ce^^a4^^ce^^a1^^ce^^8c^^ce^^9b^^ce^^95^^ce^^aa
 ^^ce^^9c^^ce^^91^^ce^^aa^^ce^^9f^^ce^^a5, ^^ce^^a4^^ce^^a1^^ce^^9f^^ce^^9b^^ce^^95^^ce^^aa
-^^ce^^a4^^ce^^9f ^^ce^^88^^ce^^9d^^ce^^91 ^^ce^^89 ^^ce^^a4^^ce^^9f ^^ce^^86^^ce^^9b^^ce^^9b^^ce^^9f.
+Τ^^ce^^9f ^^ce^^88^^ce^^9d^^ce^^91 ^^ce^^89 ^^ce^^a4^^ce^^9f ^^ce^^86^^ce^^9b^^ce^^9b^^ce^^9f.
 ^^ce^^a4^^ce^^9f ^^ce^^95^^ce^^9d^^ce^^91 ^^ce^^89 ^^ce^^a4^^ce^^9f ^^ce^^91^^ce^^9b^^ce^^9b^^ce^^9f.
 ^^ce^^a1^^ce^^a9^^ce^^9c^^ce^^88^^ce^^99^^ce^^9a^^ce^^91
 ^^ce^^a1^^ce^^a9^^ce^^9c^^ce^^95^^ce^^aa^^ce^^9a^^ce^^91
-^^e1^^bd^^88^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82
-^^e1^^bd^^88^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82
+ὈΔΥΣΣΕΎΣ
+ὈΔΥΣΣΕΎΣ
 ^^ce^^89^^ce^^99
 ^^e1^^bf^^8c
 ^^ce^^97^^ce^^99
-^^ce^^97^^ce^^99^^cc^^81
+^^ce^^97^^ce^^99́
 ^^e1^^bf^^8c
 ^^ce^^97^^ce^^99
 ^^e1^^bc^^88^^e1^^bc^^89^^e1^^bc^^8a^^e1^^bc^^8b^^e1^^bc^^8c^^e1^^bc^^8d^^e1^^bc^^8e^^e1^^bc^^8f
@@ -233,14 +233,14 @@ Ip hul^^c3^^bbsi ^^c3^^b6zdem
 ============================================================
 TEST 19: Lithuanian
 ============================================================
-i^^cc^^87^^cc^^80i^^cc^^87^^cc^^81i^^cc^^87^^cc^^83i^^cc^^87^^cc^^80i^^cc^^87^^cc^^81i^^cc^^87^^cc^^83j^^cc^^87^^cc^^80j^^cc^^87^^cc^^81j^^cc^^87^^cc^^83^^c4^^af^^cc^^87^^cc^^80^^c4^^af^^cc^^87^^cc^^81^^c4^^af^^cc^^87^^cc^^83
-^^c3^^ac^^c3^^ad^^c4^^a9i^^cc^^80i^^cc^^81i^^cc^^83j^^cc^^80j^^cc^^81j^^cc^^83^^c4^^af^^cc^^80^^c4^^af^^cc^^81^^c4^^af^^cc^^83
-I^^cc^^80I^^cc^^80I^^cc^^83I^^cc^^80I^^cc^^81I^^cc^^83J^^cc^^80J^^cc^^81J^^cc^^83^^c4^^ae^^cc^^80^^c4^^ae^^cc^^81^^c4^^ae^^cc^^83
-I^^cc^^87^^cc^^80I^^cc^^87^^cc^^80I^^cc^^87^^cc^^83I^^cc^^87^^cc^^80I^^cc^^87^^cc^^81I^^cc^^87^^cc^^83J^^cc^^87^^cc^^80J^^cc^^87^^cc^^81J^^cc^^87^^cc^^83^^c4^^ae^^cc^^87^^cc^^80^^c4^^ae^^cc^^87^^cc^^81^^c4^^ae^^cc^^87^^cc^^83
-^^c3^^8ci^^cc^^87^^cc^^81i^^cc^^87^^cc^^83i^^cc^^87^^cc^^80i^^cc^^87^^cc^^81i^^cc^^87^^cc^^83j^^cc^^87^^cc^^80j^^cc^^87^^cc^^81j^^cc^^87^^cc^^83^^c4^^af^^cc^^87^^cc^^80^^c4^^af^^cc^^87^^cc^^81^^c4^^af^^cc^^87^^cc^^83
-I^^cc^^80i^^cc^^87^^cc^^80i^^cc^^87^^cc^^83i^^cc^^87^^cc^^80i^^cc^^87^^cc^^81i^^cc^^87^^cc^^83j^^cc^^87^^cc^^80j^^cc^^87^^cc^^81j^^cc^^87^^cc^^83^^c4^^af^^cc^^87^^cc^^80^^c4^^af^^cc^^87^^cc^^81^^c4^^af^^cc^^87^^cc^^83
-^^c3^^8c^^c3^^ad^^c4^^a9i^^cc^^80i^^cc^^81i^^cc^^83j^^cc^^80j^^cc^^81j^^cc^^83^^c4^^af^^cc^^80^^c4^^af^^cc^^81^^c4^^af^^cc^^83
-I^^cc^^87^^cc^^80i^^cc^^87^^cc^^80i^^cc^^87^^cc^^83i^^cc^^87^^cc^^80i^^cc^^87^^cc^^81i^^cc^^87^^cc^^83j^^cc^^87^^cc^^80j^^cc^^87^^cc^^81j^^cc^^87^^cc^^83^^c4^^af^^cc^^87^^cc^^80^^c4^^af^^cc^^87^^cc^^81^^c4^^af^^cc^^87^^cc^^83
+i^^cc^^87^^cc^^80i^^cc^^87^^cc^^81i^^cc^^87^^cc^^83i^^cc^^87̀i^^cc^^87́i^^cc^^87̃j^^cc^^87̀j^^cc^^87́j^^cc^^87̃^^c4^^af^^cc^^87̀^^c4^^af^^cc^^87́^^c4^^af^^cc^^87̃
+^^c3^^ac^^c3^^ad^^c4^^a9ìíĩj̀j́j̃^^c4^^af̀^^c4^^af́^^c4^^af̃
+ÌÌĨÌÍĨJ̀J́J̃^^c4^^aè^^c4^^aé^^c4^^aẽ
+İ̀İ̀İ̃İ̀İ́İ̃J̇̀J̇́J̇̃^^c4^^aė̀^^c4^^aė́^^c4^^aė̃
+^^c3^^8ci^^cc^^87^^cc^^81i^^cc^^87^^cc^^83i^^cc^^87̀i^^cc^^87́i^^cc^^87̃j^^cc^^87̀j^^cc^^87́j^^cc^^87̃^^c4^^af^^cc^^87̀^^c4^^af^^cc^^87́^^c4^^af^^cc^^87̃
+Ìi̇̀i̇̃i̇̀i̇́i̇̃j̇̀j̇́j̇̃^^c4^^aḟ̀^^c4^^aḟ́^^c4^^aḟ̃
+^^c3^^8c^^c3^^ad^^c4^^a9ìíĩj̀j́j̃^^c4^^af̀^^c4^^af́^^c4^^af̃
+İ̀i̇̀i̇̃i̇̀i̇́i̇̃j̇̀j̇́j̇̃^^c4^^aḟ̀^^c4^^aḟ́^^c4^^aḟ̃
 ============================================================
 ============================================================
 TEST 20: Medieval Latin
diff --git a/l3kernel/testfiles/m3text005.lvt b/l3kernel/testfiles/m3text005.lvt
index 61520e9a3..eaf566f46 100644
--- a/l3kernel/testfiles/m3text005.lvt
+++ b/l3kernel/testfiles/m3text005.lvt
@@ -7,7 +7,7 @@
 \ExplSyntaxOn
 \debug_on:n { check-declarations , deprecation , log-functions }
 \ExplSyntaxOff
-\ifdefined\disablecjktoken\disablecjktoken\fi
+
 \documentclass{minimal}
 
 \usepackage[T2A]{fontenc}
diff --git a/l3kernel/testfiles/m3text005.uptex.tlg b/l3kernel/testfiles/m3text005.uptex.tlg
index 685373bfc..427380824 100644
--- a/l3kernel/testfiles/m3text005.uptex.tlg
+++ b/l3kernel/testfiles/m3text005.uptex.tlg
@@ -5,11 +5,11 @@ Author: Joseph Wright
 TEST 1: \@uclclist\ entries
 ============================================================
 ^^d1^^91\cyryo 
+Ё\CYRYO 
+Ё\CYRYO 
+Ё\CYRYO 
+ё\cyryo 
 ^^d0^^81\CYRYO 
-^^d0^^81\cyryo 
 ^^d0^^81\CYRYO 
-^^d1^^91\cyryo 
 ^^d0^^81\CYRYO 
-^^d0^^81\cyryo 
-^^d0^^81\cyryo 
 ============================================================





More information about the latex3-commits mailing list.