[latex3-commits] [git/LaTeX3-latex3-latex3] master: Enable handling of eta-acute in Greek uppercasing (18f5b6b0b)

Joseph Wright joseph.wright at morningstar2.co.uk
Thu Oct 22 11:51:20 CEST 2020


Repository : https://github.com/latex3/latex3
On branch  : master
Link       : https://github.com/latex3/latex3/commit/18f5b6b0bcffcbd9e34160a165197369a84a6680

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

commit 18f5b6b0bcffcbd9e34160a165197369a84a6680
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Thu Oct 22 10:51:20 2020 +0100

    Enable handling of eta-acute in Greek uppercasing
    
    There is now only one line left in the ICU tests that fails:
    I am waiting for input from a Greek expert on whether it's even right!


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

18f5b6b0bcffcbd9e34160a165197369a84a6680
 l3kernel/l3text-case.dtx                | 70 ++++++++++++++++++++++++++++++---
 l3kernel/testfiles/m3text002.luatex.tlg |  6 +++
 l3kernel/testfiles/m3text002.lvt        |  6 +--
 l3kernel/testfiles/m3text002.tlg        |  6 +++
 l3kernel/testfiles/m3text002.uptex.tlg  |  6 +++
 l3kernel/testfiles/m3text002.xetex.tlg  |  6 +++
 6 files changed, 91 insertions(+), 9 deletions(-)

diff --git a/l3kernel/l3text-case.dtx b/l3kernel/l3text-case.dtx
index ef3ca6884..7822649e4 100644
--- a/l3kernel/l3text-case.dtx
+++ b/l3kernel/l3text-case.dtx
@@ -299,6 +299,7 @@
   }
   {
     \@@_change_case_store:n { ~ }
+    \cs_if_exist_use:c { @@_change_case_space_ #1 _ #2 :w }
     \@@_change_case_loop:nnw {#1} {#2}
   }
 %    \end{macrocode}
@@ -795,7 +796,7 @@
 %   is whether after that we have another character token, either from the NFD or
 %   directly in the input. If not, we store the changed character at this stage.
 %    \begin{macrocode}
-    \cs_new:Npn \@@_change_case_upper_el:nnNw #1#2#3#4 \q__text_recursion_stop
+    \cs_new:Npn \@@_change_case_upper_el:nnNw #1#2#3#4 \q_@@_recursion_stop
       {
         \tl_if_head_is_N_type:nTF {#4}
           { \@@_change_case_upper_el:NnnN #3 }
@@ -803,7 +804,7 @@
             \@@_change_case_store:e { \char_uppercase:N #3 }
             \@@_change_case_loop:nnw
           }
-            {#1} {#2} #4 \q__text_recursion_stop
+            {#1} {#2} #4 \q_@@_recursion_stop
       }
 %    \end{macrocode}
 %   Now, we check the detail of the next codepoint: again we filter out the
@@ -865,13 +866,13 @@
 %   skip this code point, hence needing a separate function.
 %    \begin{macrocode}
     \cs_new:Npn \@@_change_case_upper_el_hiatus:nnNw
-      #1#2#3#4 \q__text_recursion_stop
+      #1#2#3#4 \q_@@_recursion_stop
       {
         \@@_change_case_store:e { \char_uppercase:N #3 }
         \tl_if_head_is_N_type:nTF {#4}
           { \@@_change_case_upper_el_hiatus:nnN }
           { \@@_change_case_loop:nnw }
-            {#1} {#2} #4 \q__text_recursion_stop
+            {#1} {#2} #4 \q_@@_recursion_stop
       }
     \cs_new:Npn \@@_change_case_upper_el_hiatus:nnN #1#2#3
       {
@@ -891,12 +892,12 @@
 %   the first one.
 %    \begin{macrocode}
     \cs_new:Npn \@@_change_case_upper_el_gobble:nnw
-      #1#2#3 \q__text_recursion_stop
+      #1#2#3 \q_@@_recursion_stop
       {
         \tl_if_head_is_N_type:nTF {#3}
           { \@@_change_case_upper_el_gobble:nnN }
           { \@@_change_case_loop:nnw }
-            {#1} {#2} #3 \q__text_recursion_stop
+            {#1} {#2} #3 \q_@@_recursion_stop
       }
     \cs_new:Npn \@@_change_case_upper_el_gobble:nnN #1#2#3
       {
@@ -1026,6 +1027,63 @@
 % \end{macro}
 % \end{macro}
 % \end{macro}
+% \begin{macro}[EXP]{\@@_change_case_space_upper_el:Nnnw}
+% \begin{macro}[EXP]{\@@_change_case_space_upper_el:nnN}
+% \begin{macro}[EXP]{\@@_change_case_space_upper_el:nnNw}
+% \begin{macro}[EXP]{\@@_change_case_space_upper_el:NnnN}
+%   There is one special case in Greek that needs to be picked up based on
+%   being an isolated letter. We do that using a test similar to final sigma,
+%   but it has to fire off from the space grabber.
+%    \begin{macrocode}
+\bool_lazy_or:nnT
+  { \sys_if_engine_luatex_p: }
+  { \sys_if_engine_xetex_p: }
+  {
+    \cs_new:Npn \@@_change_case_space_upper_el:Nnnw
+      #1#2#3#4 \q_@@_recursion_stop
+      {
+        \tl_if_head_is_N_type:nTF {#4}
+          { \@@_change_case_space_upper_el:nnN }
+          { \@@_change_case_loop:nnw }
+            {#2} {#3} #4 \q_@@_recursion_stop
+      }
+    \cs_new:Npn \@@_change_case_space_upper_el:nnN #1#2#3
+      {
+        \bool_lazy_or:nnTF
+          { \token_if_cs_p:N #3 }
+          { ! \int_compare_p:nNn { `#3 } = { "03AE } }
+          { \@@_change_case_loop:nnw }
+          { \@@_change_case_space_upper_el:nnNw }
+            {#1} {#2} #3
+      }
+    \cs_new:Npn \@@_change_case_space_upper_el:nnNw
+      #1#2#3#4 \q_@@_recursion_stop
+       {
+        \tl_if_head_is_N_type:nTF {#4}
+          { \@@_change_case_space_upper_el:NnnN #3 }
+          {
+            \@@_change_case_store:e
+              { \char_generate:nn { "0389 } { \@@_char_catcode:N #3 } }
+            \@@_change_case_loop:nnw
+          }
+            {#1} {#2} #4 \q_@@_recursion_stop
+      }
+    \cs_new:Npn \@@_change_case_space_upper_el:NnnN #1#2#3#4
+      {
+        \token_if_letter:NTF #4
+          { \@@_change_case_loop:nnw {#2} {#3} #1#4 }
+          {
+            \@@_change_case_store:e
+              { \char_generate:nn { "0389 } { \@@_char_catcode:N #1 } }
+            \@@_change_case_loop:nnw {#2} {#3} #4
+          }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
 % \begin{macro}[EXP]{\@@_change_case_title_el:nnnN}
 %   Titlecasing retains accents, but to prevent the uppercasing code
 %   from kicking in, there has to be an explicit function here.
diff --git a/l3kernel/testfiles/m3text002.luatex.tlg b/l3kernel/testfiles/m3text002.luatex.tlg
index df75c6ef3..2cf6498c2 100644
--- a/l3kernel/testfiles/m3text002.luatex.tlg
+++ b/l3kernel/testfiles/m3text002.luatex.tlg
@@ -154,12 +154,18 @@ TEST 14: Greek
 ΑΚΛΙΤΑ ΡΗΜΑΤΑ Η ΑΚΛΙΤΕΣ ΜΕΤΟΧΕΣ
 ΕΠΕΙΔΉ Η ΑΝΑΓΝΏΡΙΣΗ ΤΗΣ ΑΞΙΟΠΡΈΠΕΙΑΣ
 ΕΠΕΙΔΗ Η ΑΝΑΓΝΩΡΙΣΗ ΤΗΣ ΑΞΙΟΠΡΕΠΕΙΑΣ
+ΝΟΜΙΚΟΎ Ή ΔΙΕΘΝΟΎΣ
+ΝΟΜΙΚΟΥ Η ΔΙΕΘΝΟΥΣ
+ἘΠΕΙΔῊ Ἡ ἈΝΑΓΝΏΡΙΣΗ
+ΕΠΕΙΔΗ Η ΑΝΑΓΝΩΡΙΣΗ
 ΝΈΟ, ΔΗΜΙΟΥΡΓΊΑ
 ΝΕΟ, ΔΗΜΙΟΥΡΓΙΑ
 ΕΛΆΤΕ ΝΑ ΦΆΤΕ ΤΑ ΚΑΛΎΤΕΡΑ ΠΑΪΔΆΚΙΑ!
 ΕΛΑΤΕ ΝΑ ΦΑΤΕ ΤΑ ΚΑΛΥΤΕΡΑ ΠΑΪΔΑΚΙΑ!
 ΜΑΪ́ΟΥ, ΤΡΌΛΕΪ
 ΜΑΪΟΥ, ΤΡΟΛΕΪ
+ΤΟ ΈΝΑ Ή ΤΟ ΆΛΛΟ.
+ΤΟ ΕΝΑ Η ΤΟ ΑΛΛΟ.
 ΡΩΜΈΙΚΑ
 ΡΩΜΕΪΚΑ
 Ὀδυσσεύς
diff --git a/l3kernel/testfiles/m3text002.lvt b/l3kernel/testfiles/m3text002.lvt
index f0e6ea302..65a49cd8e 100644
--- a/l3kernel/testfiles/m3text002.lvt
+++ b/l3kernel/testfiles/m3text002.lvt
@@ -168,13 +168,13 @@
     \greektest:n { ΑΫΛΟΣ }                                \NEWLINE
     \greektest:n { Άκλιτα~ρήματα~ή~άκλιτες~μετοχές }      \NEWLINE
     \greektest:n { Επειδή~η~αναγνώριση~της~αξιοπρέπειας } \NEWLINE
-%    \greektest:n { νομικού~ή~διεθνούς }                   \NEWLINE
-%    \greektest:n { Ἐπειδὴ~ἡ~ἀναγνώριση }                  \NEWLINE
+    \greektest:n { νομικού~ή~διεθνούς }                   \NEWLINE
+    \greektest:n { Ἐπειδὴ~ἡ~ἀναγνώριση }                  \NEWLINE
 %    \greektest:n { νομικοῦ~ἢ~διεθνοῦς }                   \NEWLINE
     \greektest:n { Νέο,~Δημιουργία }                      \NEWLINE
     \greektest:n { Ελάτε~να~φάτε~τα~καλύτερα~παϊδάκια! }  \NEWLINE
     \greektest:n { Μαΐου,~τρόλεϊ }                        \NEWLINE
-%    \greektest:n { Το~ένα~ή~το~άλλο. }                    \NEWLINE
+    \greektest:n { Το~ένα~ή~το~άλλο. }                    \NEWLINE
     \greektest:n { ρωμέικα }                              \NEWLINE
     \text_titlecase:n         { ὈΔΥΣΣΕΎΣ } \NEWLINE
     \text_titlecase:nn { el } { ὈΔΥΣΣΕΎΣ }
diff --git a/l3kernel/testfiles/m3text002.tlg b/l3kernel/testfiles/m3text002.tlg
index a293d9978..3bf29c2b8 100644
--- a/l3kernel/testfiles/m3text002.tlg
+++ b/l3kernel/testfiles/m3text002.tlg
@@ -150,12 +150,18 @@ TEST 14: Greek
 ^^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^^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^^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^^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^^8e ^^ce^^89 ^^ce^^94^^ce^^99^^ce^^95^^ce^^98^^ce^^9d^^ce^^9f^^ce^^8e^^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
+^^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^^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^^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^^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^^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^^9c^^ce^^91^^ce^^90^^ce^^9f^^ce^^a5, ^^ce^^a4^^ce^^a1^^ce^^8c^^ce^^9b^^ce^^95^^ce^^aa
 ^^ce^^9c^^ce^^91^^ce^^90^^ce^^9f^^ce^^a5, ^^ce^^a4^^ce^^a1^^ce^^8c^^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^^a4^^ce^^9f ^^ce^^88^^ce^^9d^^ce^^91 ^^ce^^89 ^^ce^^a4^^ce^^9f ^^ce^^86^^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^^88^^ce^^99^^ce^^9a^^ce^^91
 ^^e1^^bd^^88^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82
diff --git a/l3kernel/testfiles/m3text002.uptex.tlg b/l3kernel/testfiles/m3text002.uptex.tlg
index 00cf3bb0a..36f7b39dd 100644
--- a/l3kernel/testfiles/m3text002.uptex.tlg
+++ b/l3kernel/testfiles/m3text002.uptex.tlg
@@ -154,12 +154,18 @@ TEST 14: Greek
 ΆΚΛΙΤΑ ΡΉΜΑΤΑ Ή ΆΚΛΙΤΕΣ ΜΕΤΟΧΈΣ
 ΕΠΕΙΔΉ Η ΑΝΑΓΝΏΡΙΣΗ ΤΗΣ ΑΞΙΟΠΡΈΠΕΙΑΣ
 ΕΠΕΙΔΉ Η ΑΝΑΓΝΏΡΙΣΗ ΤΗΣ ΑΞΙΟΠΡΈΠΕΙΑΣ
+ΝΟΜΙΚΟΎ Ή ΔΙΕΘΝΟΎΣ
+ΝΟΜΙΚΟΎ Ή ΔΙΕΘΝΟΎΣ
+ἘΠΕΙΔῊ Ἡ ἈΝΑΓΝΏΡΙΣΗ
+ἘΠΕΙΔῊ Ἡ ἈΝΑΓΝΏΡΙΣΗ
 ΝΈΟ, ΔΗΜΙΟΥΡΓΊΑ
 ΝΈΟ, ΔΗΜΙΟΥΡΓΊΑ
 ΕΛΆΤΕ ΝΑ ΦΆΤΕ ΤΑ ΚΑΛΎΤΕΡΑ ΠΑΪΔΆΚΙΑ!
 ΕΛΆΤΕ ΝΑ ΦΆΤΕ ΤΑ ΚΑΛΎΤΕΡΑ ΠΑΪΔΆΚΙΑ!
 ΜΑΐΟΥ, ΤΡΌΛΕΪ
 ΜΑΐΟΥ, ΤΡΌΛΕΪ
+ΤΟ ΈΝΑ Ή ΤΟ ΆΛΛΟ.
+ΤΟ ΈΝΑ Ή ΤΟ ΆΛΛΟ.
 ΡΩΜΈΙΚΑ
 ΡΩΜΈΙΚΑ
 Ὀδυσσεύς
diff --git a/l3kernel/testfiles/m3text002.xetex.tlg b/l3kernel/testfiles/m3text002.xetex.tlg
index f135505b6..167475ffd 100644
--- a/l3kernel/testfiles/m3text002.xetex.tlg
+++ b/l3kernel/testfiles/m3text002.xetex.tlg
@@ -150,12 +150,18 @@ TEST 14: Greek
 ΑΚΛΙΤΑ ΡΗΜΑΤΑ Η ΑΚΛΙΤΕΣ ΜΕΤΟΧΕΣ
 ΕΠΕΙΔΉ Η ΑΝΑΓΝΏΡΙΣΗ ΤΗΣ ΑΞΙΟΠΡΈΠΕΙΑΣ
 ΕΠΕΙΔΗ Η ΑΝΑΓΝΩΡΙΣΗ ΤΗΣ ΑΞΙΟΠΡΕΠΕΙΑΣ
+ΝΟΜΙΚΟΎ Ή ΔΙΕΘΝΟΎΣ
+ΝΟΜΙΚΟΥ Η ΔΙΕΘΝΟΥΣ
+ἘΠΕΙΔῊ Ἡ ἈΝΑΓΝΏΡΙΣΗ
+ΕΠΕΙΔΗ Η ΑΝΑΓΝΩΡΙΣΗ
 ΝΈΟ, ΔΗΜΙΟΥΡΓΊΑ
 ΝΕΟ, ΔΗΜΙΟΥΡΓΙΑ
 ΕΛΆΤΕ ΝΑ ΦΆΤΕ ΤΑ ΚΑΛΎΤΕΡΑ ΠΑΪΔΆΚΙΑ!
 ΕΛΑΤΕ ΝΑ ΦΑΤΕ ΤΑ ΚΑΛΥΤΕΡΑ ΠΑΪΔΑΚΙΑ!
 ΜΑΪ́ΟΥ, ΤΡΌΛΕΪ
 ΜΑΪΟΥ, ΤΡΟΛΕΪ
+ΤΟ ΈΝΑ Ή ΤΟ ΆΛΛΟ.
+ΤΟ ΕΝΑ Η ΤΟ ΑΛΛΟ.
 ΡΩΜΈΙΚΑ
 ΡΩΜΕΪΚΑ
 Ὀδυσσεύς





More information about the latex3-commits mailing list.