[latex3-commits] [git/LaTeX3-latex3-latex3] cctab: Delay cctab creation to end-of-format (863e1f3db)

Joseph Wright joseph.wright at morningstar2.co.uk
Wed Jul 8 15:21:29 CEST 2020


Repository : https://github.com/latex3/latex3
On branch  : cctab
Link       : https://github.com/latex3/latex3/commit/863e1f3dbf161f514402adc33ac6ba69392610ea

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

commit 863e1f3dbf161f514402adc33ac6ba69392610ea
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Wed Jul 8 14:20:54 2020 +0100

    Delay cctab creation to end-of-format


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

863e1f3dbf161f514402adc33ac6ba69392610ea
 l3kernel/l3cctab.dtx                     | 73 ++++++++++++++++++--------------
 l3kernel/testfiles/m3cctab002.luatex.tlg |  1 +
 2 files changed, 43 insertions(+), 31 deletions(-)

diff --git a/l3kernel/l3cctab.dtx b/l3kernel/l3cctab.dtx
index ac9e4d3a4..f9c05d81e 100644
--- a/l3kernel/l3cctab.dtx
+++ b/l3kernel/l3cctab.dtx
@@ -746,44 +746,13 @@
 % \begin{variable}
 %   {
 %     \c_initex_cctab   ,
-%     \c_code_cctab     ,
-%     \c_document_cctab ,
 %     \c_other_cctab    ,
 %     \c_str_cctab
 %   }
 %   Creating category code tables means thinking starting from \IniTeX{}.
 %   For all-other and the standard \enquote{string} tables that's easy.
-%   For document-level codes, we need to save the data as-is: some
-%   work.
 %    \begin{macrocode}
 \cctab_new:N \c_initex_cctab
-\group_begin:
-  \cs_set:Npn \@@_tmp:n #1
-    { \tex_catcode:D #1 = \tex_the:D \tex_catcode:D #1 ~ }
-  \cs_set_nopar:Npx \@@_tmp:
-    {
-      \sys_if_engine_luatex:TF
-        { \int_step_function:nnN { 0 } { "10FFFF } }
-        { \int_step_function:nnN { 0 } { 255 } }
-          \@@_tmp:n
-    }
-  \cctab_const:Nn \c_code_cctab
-    {
-      \@@_tmp:
-      \char_set_catcode_other:n { `\@ }
-    }
-\group_end:
-\cctab_const:Nn \c_document_cctab
-  {
-    \cctab_select:N \c_code_cctab
-    \int_set:Nn \tex_endlinechar:D     { 13 }
-    \char_set_catcode_space:n          { 9 }
-    \char_set_catcode_space:n          { 32 }
-    \char_set_catcode_other:n          { 58 }
-    \char_set_catcode_other:n          { 64 }
-    \char_set_catcode_math_subscript:n { 95 }
-    \char_set_catcode_active:n         { 126 }
-  }
 \cctab_const:Nn \c_other_cctab
   {
     \cctab_select:N \c_initex_cctab
@@ -799,6 +768,48 @@
 %    \end{macrocode}
 % \end{variable}
 %
+% \begin{variable}{\c_document_cctab, \c_other_cctab}
+%  To pick up document-level category codes, we need to delay set up to the
+%  end of the format, where that's possible. Also, as there are a \emph{lot}
+%  of category codes to set, we avoid using the official interface and store the
+%  document codes using internal code. Depending on whether we are in the hook
+%  or not, the catcodes may be code or document, so we explicitly set up both
+%  correctly.
+%    \begin{macrocode}
+\cs_if_exist:NTF \@expl at finalise@setup@@ % \@@_gset:n
+  { \tl_gsput_right:Nn \@expl at finalise@setup@@ }
+  { \use:n }
+  {
+    \@@_new:N \c_code_cctab
+    \group_begin:
+      \int_set:Nn \tex_endlinechar:D { 13 }
+      \char_set_catcode_ignore:n           { 9 }   % tab
+      \char_set_catcode_ignore:n           { 32 }  % space
+      \char_set_catcode_other:n            { 34 }  % double quote
+      \char_set_catcode_alignment:n        { 38 }  % ampersand
+      \char_set_catcode_letter:n           { 58 }  % colon
+      \char_set_catcode_other:n            { 64 }  % ampersand
+      \char_set_catcode_math_superscript:n { 94 }  % circumflex
+      \char_set_catcode_letter:n           { 95 }  % underscore
+      \char_set_catcode_other:n            { 124 } % pipe
+      \char_set_catcode_space:n            { 126 } % tilde
+      \@@_gset:n \c_code_cctab
+    \group_end:
+    \cctab_const:Nn \c_document_cctab
+      {
+        \cctab_select:N \c_code_cctab
+        \int_set:Nn \tex_endlinechar:D { 13 }
+        \char_set_catcode_space:n          { 9 }
+        \char_set_catcode_space:n          { 32 }
+        \char_set_catcode_other:n          { 58 }
+        \char_set_catcode_other:n          { 64 }
+        \char_set_catcode_math_subscript:n { 95 }
+        \char_set_catcode_active:n         { 126 }
+  }
+  }
+%    \end{macrocode}
+% \end{variable}
+%
 % \subsection{Messages}
 %
 %    \begin{macrocode}
diff --git a/l3kernel/testfiles/m3cctab002.luatex.tlg b/l3kernel/testfiles/m3cctab002.luatex.tlg
index cc3d56c9f..e8e4873b0 100644
--- a/l3kernel/testfiles/m3cctab002.luatex.tlg
+++ b/l3kernel/testfiles/m3cctab002.luatex.tlg
@@ -44,5 +44,6 @@ TEST 4: Nested \cctab_begin:N
 ============================================================
 TEST 5: Nested groups
 ============================================================
+\g__cctab_internalii_cctab=\catcodetable...
 \g__cctab_internaliii_cctab=\catcodetable...
 ============================================================





More information about the latex3-commits mailing list.