[latex3-commits] [git/LaTeX3-latex3-latex3] cctab: Include endlinechar into catcode table variables (10b5c0686)

Bruno Le Floch bruno at le-floch.fr
Thu Jul 2 12:53:51 CEST 2020


Repository : https://github.com/latex3/latex3
On branch  : cctab
Link       : https://github.com/latex3/latex3/commit/10b5c0686bad55e13a034f5ddf4b9296dd1a9e3b

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

commit 10b5c0686bad55e13a034f5ddf4b9296dd1a9e3b
Author: Bruno Le Floch <bruno at le-floch.fr>
Date:   Thu Jul 2 12:53:51 2020 +0200

    Include endlinechar into catcode table variables


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

10b5c0686bad55e13a034f5ddf4b9296dd1a9e3b
 l3kernel/l3cctab.dtx | 94 ++++++++++++++++++++++++++++++++++++----------------
 1 file changed, 65 insertions(+), 29 deletions(-)

diff --git a/l3kernel/l3cctab.dtx b/l3kernel/l3cctab.dtx
index 4be215715..01cfbb9d6 100644
--- a/l3kernel/l3cctab.dtx
+++ b/l3kernel/l3cctab.dtx
@@ -206,12 +206,22 @@
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{variable}{\l_@@_table_tl}
-%   Used when popping sequences: consists of the catcodetable number
-%   (integer denotation) in \LuaTeX{}, or of an intarray variable (as a
-%   single token) in other engines.
+% \begin{variable}{\l_@@_internal_tl}
+%   Scratch space.  For instance, when popping
+%   \cs{g_@@_stack_seq}/\cs{g_@@_unused_seq}, consists of the
+%   catcodetable number (integer denotation) in \LuaTeX{}, or of an
+%   intarray variable (as a single token) in other engines.
 %    \begin{macrocode}
-\tl_new:N \l_@@_table_tl
+\tl_new:N \l_@@_internal_tl
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\g_@@_endlinechar_prop}
+%   In \LuaTeX{} we store the \tn{endlinechar} associated to each
+%   \tn{catcodetable} in a property list, unless it is the default
+%   value~$13$.
+%    \begin{macrocode}
+\prop_new:N \g_@@_endlinechar_prop
 %    \end{macrocode}
 % \end{variable}
 %
@@ -258,11 +268,12 @@
 %   Now the case for other engines. Here, each table is an integer
 %   array.  Following the \LuaTeX{} pattern, a new table starts with
 %   \IniTeX{} codes.  The index base is out-by-one, so we have an
-%   internal function to handle that.
+%   internal function to handle that.  The \IniTeX{} \tn{endlinechar} is
+%   $13$.
 %    \begin{macrocode}
   {
     \cs_new_protected:Npn \@@_new:N #1
-      { \intarray_new:Nn #1 { 256 } }
+      { \intarray_new:Nn #1 { 257 } }
     \cs_new_protected:Npn \@@_gstore:Nnn #1#2#3
       { \intarray_gset:Nnn #1 { \int_eval:n { #2 + 1 } } {#3} }
     \cs_new_protected:Npn \cctab_new:N #1
@@ -271,6 +282,7 @@
         \@@_new:N #1
         \int_step_inline:nn { 256 }
           { \__kernel_intarray_gset:Nnn #1 {##1} { 12 } }
+        \__kernel_intarray_gset:Nnn #1 { 257 } { 13 }
         \@@_gstore:Nnn #1 { 0 } { 9 }
         \@@_gstore:Nnn #1 { 13 } { 5 }
         \@@_gstore:Nnn #1 { 32 } { 10 }
@@ -289,23 +301,39 @@
 %
 % \subsection{Saving category code tables}
 %
-% \begin{macro}{\@@_gset:w}
+% \begin{macro}{\@@_gset:n, \@@_gset_aux:n}
 %   In various functions we need to save the current catcodes (globally)
-%   in a table.  It is a primitive in \LuaTeX{}.  In other engines we
-%   store $256$ current catcodes in an intarray variable.  We use a |w|
-%   signature because in \LuaTeX{} it also works when followed by an
-%   explicit integer denotation, as we use later on.
+%   in a table.  In \LuaTeX{}, saving the catcodes is a primitives, but
+%   the \tn{endlinechar} needs more work: to avoid filling
+%   \cs{g_@@_endlinechar_prop} with many entries we special-case the
+%   default value $13$.  In other engines we store $256$ current
+%   catcodes and the \tn{endlinechar} in an intarray variable.
 %    \begin{macrocode}
 \sys_if_engine_luatex:TF
-  { \cs_new_eq:NN \@@_gset:w \tex_savecatcodetable:D }
   {
-    \cs_new_protected:Npn \@@_gset:w #1
+    \cs_new_protected:Npn \@@_gset:n #1
+      { \exp_args:Nf \@@_gset_aux:n { \int_eval:n {#1} } }
+    \cs_new_protected:Npn \@@_gset_aux:n #1
+      {
+        \tex_savecatcodetable:D #1 \scan_stop:
+        \int_compare:nNnTF { \tex_endlinechar:D } = { 13 }
+          { \prop_gremove:Nn \g_@@_endlinechar_prop {#1} }
+          {
+            \prop_gput:NnV \g_@@_endlinechar_prop {#1}
+              \tex_endlinechar:D
+          }
+      }
+  }
+  {
+    \cs_new_protected:Npn \@@_gset:n #1
       {
         \int_step_inline:nn { 256 }
           {
             \__kernel_intarray_gset:Nnn #1 {##1}
               { \char_value_catcode:n { ##1 - 1 } }
           }
+        \__kernel_intarray_gset:Nnn #1 { 257 }
+          { \tex_endlinechar:D }
       }
   }
 %    \end{macrocode}
@@ -323,7 +351,7 @@
       {
         \group_begin:
           #2 \scan_stop:
-          \@@_gset:w #1
+          \@@_gset:n {#1}
         \group_end:
       }
   }
@@ -341,10 +369,10 @@
 %   would result in low-level engine-dependent errors.  First, the
 %   \LuaTeX{} case.  The aim here is to ensure that the saved tables are
 %   read-only.  This is done by applying the saved table, then switching
-%   immediately to a scratch table \cs{g_@@_internal_cctab}.  Any
+%   immediately to a scratch table \cs{g_@@_internal_cctab}.  Any later
 %   catcode assignment will affect that scratch table rather than the
 %   saved one.  In other engines, selecting a catcode table is a matter
-%   of doing $256$ catcode assignments.
+%   of doing $256$ catcode assignments and setting the \tn{endlinechar}.
 %    \begin{macrocode}
 \cs_new_protected:Npn \cctab_select:N #1
   { \@@_chk_if_valid:NT #1 { \@@_select:N #1 } }
@@ -357,6 +385,9 @@
         \tex_catcodetable:D #1
         \tex_savecatcodetable:D \g_@@_internal_cctab
         \tex_catcodetable:D \g_@@_internal_cctab
+        \prop_get:NVNTF \g_@@_endlinechar_prop #1 \l_@@_internal_tl
+          { \int_set:Nn \tex_endlinechar:D { \l_@@_internal_tl } }
+          { \int_set:Nn \tex_endlinechar:D { 13 } }
       }
   }
   {
@@ -367,6 +398,8 @@
             \char_set_catcode:nn { ##1 - 1 }
               { \__kernel_intarray_item:Nn #1 {##1} }
           }
+        \int_set:Nn \tex_endlinechar:D
+          { \__kernel_intarray_item:Nn #1 { 257 } }
       }
   }
 %    \end{macrocode}
@@ -379,7 +412,7 @@
 %   For \cs{cctab_begin:N}/\cs{cctab_end:} we will need to allocate
 %   dynamic tables.  This is done here by \cs{@@_begin_aux:}, which puts
 %   a table number (in \LuaTeX{}) or name (in other engines) into
-%   \cs{l_@@_table_tl}.  In \LuaTeX{} this simply calls \cs{@@_new:N}
+%   \cs{l_@@_internal_tl}.  In \LuaTeX{} this simply calls \cs{@@_new:N}
 %   and uses the resulting catcodetable number; in other engines we need
 %   to give a name to the intarray variable and use that.
 %    \begin{macrocode}
@@ -388,7 +421,7 @@
     \cs_new_protected:Npn \@@_begin_aux:
       {
         \@@_new:N \g_@@_next_cctab
-        \tl_set:NV \l_@@_table_tl \g_@@_next_cctab
+        \tl_set:NV \l_@@_internal_tl \g_@@_next_cctab
         \cs_undefine:N \g_@@_next_cctab
       }
   }
@@ -398,7 +431,7 @@
         \int_gincr:N \g_@@_allocate_int
         \exp_args:Nc \@@_new:N
           { g_@@_ \int_use:N \g_@@_allocate_int _cctab }
-        \exp_args:NNc \tl_set:Nn \l_@@_table_tl
+        \exp_args:NNc \tl_set:Nn \l_@@_internal_tl
           { g_@@_ \int_use:N \g_@@_allocate_int _cctab }
       }
   }
@@ -408,21 +441,21 @@
 %
 % \begin{macro}{\cctab_begin:N, \cctab_begin:c}
 %   Check the \meta{cctab~var} exists, to avoid low-level errors.  Get
-%   in \cs{l_@@_table_tl} the number/name of a dynamic table, either
+%   in \cs{l_@@_internal_tl} the number/name of a dynamic table, either
 %   from \cs{g_@@_unused_seq} where we save tables that are not
 %   currently in use, or from \cs{@@_begin_aux:} if none are available.
 %   Then save the current catcodes into the table (pointed to by)
-%   \cs{l_@@_table_tl} and save that table number in a stack before
+%   \cs{l_@@_internal_tl} and save that table number in a stack before
 %   selecting the desired catcodes.
 %    \begin{macrocode}
 \cs_new_protected:Npn \cctab_begin:N #1
   {
     \@@_chk_if_valid:NT #1
       {
-        \seq_gpop:NNF \g_@@_unused_seq \l_@@_table_tl
+        \seq_gpop:NNF \g_@@_unused_seq \l_@@_internal_tl
           { \@@_begin_aux: }
-        \seq_gpush:NV \g_@@_stack_seq \l_@@_table_tl
-        \exp_after:wN \@@_gset:w \l_@@_table_tl \scan_stop:
+        \seq_gpush:NV \g_@@_stack_seq \l_@@_internal_tl
+        \exp_args:NV \@@_gset:n \l_@@_internal_tl
         \@@_select:N #1
       }
   }
@@ -432,17 +465,17 @@
 %
 % \begin{macro}{\cctab_end:}
 %   Make sure a \cs{cctab_begin:N} was used some time earlier, get in
-%   \cs{l_@@_table_tl} the catcode table number/name in which the
+%   \cs{l_@@_internal_tl} the catcode table number/name in which the
 %   prevailing catcodes were stored, then restore these catcodes.  The
 %   dynamic table is now unused hence stored in \cs{g_@@_unused_seq} for
 %   recycling by later \cs{cctab_begin:N}.
 %    \begin{macrocode}
 \cs_new_protected:Npn \cctab_end:
   {
-    \seq_gpop:NNTF \g_@@_stack_seq \l_@@_table_tl
+    \seq_gpop:NNTF \g_@@_stack_seq \l_@@_internal_tl
       {
-        \seq_gpush:NV \g_@@_unused_seq \l_@@_table_tl
-        \@@_select:N \l_@@_table_tl
+        \seq_gpush:NV \g_@@_unused_seq \l_@@_internal_tl
+        \@@_select:N \l_@@_internal_tl
       }
       { \__kernel_msg_error:nn { kernel } { cctab-extra-end } }
   }
@@ -546,9 +579,11 @@
 \cctab_const:Nn \c_code_cctab
   {
     \char_set_catcode_letter:n         { 64 }
+    \int_set:Nn \tex_endlinechar:D     { 32 }
   }
 \cctab_const:Nn \c_document_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 }
@@ -558,6 +593,7 @@
 \cctab_const:Nn \c_other_cctab
   {
     \cctab_select:N \c_initex_cctab
+    \int_set:Nn \tex_endlinechar:D     { -1 }
     \int_step_inline:nnn { 0 } { 127 }
       { \char_set_catcode_other:n {#1} }
   }





More information about the latex3-commits mailing list.