[latex3-commits] [git/LaTeX3-latex3-latex3] cctab: Document internal macros (24344d6ab)
PhelypeOleinik
tex.phelype at gmail.com
Fri Jul 3 04:32:00 CEST 2020
Repository : https://github.com/latex3/latex3
On branch : cctab
Link : https://github.com/latex3/latex3/commit/24344d6ab703967c1fcf7a1c832ad9ae75aa52e9
>---------------------------------------------------------------
commit 24344d6ab703967c1fcf7a1c832ad9ae75aa52e9
Author: PhelypeOleinik <tex.phelype at gmail.com>
Date: Thu Jul 2 23:32:00 2020 -0300
Document internal macros
>---------------------------------------------------------------
24344d6ab703967c1fcf7a1c832ad9ae75aa52e9
l3kernel/l3cctab.dtx | 63 +++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 55 insertions(+), 8 deletions(-)
diff --git a/l3kernel/l3cctab.dtx b/l3kernel/l3cctab.dtx
index 8e97e92e5..5184b9fc2 100644
--- a/l3kernel/l3cctab.dtx
+++ b/l3kernel/l3cctab.dtx
@@ -556,20 +556,58 @@
% we check that they are properly nested regarding \TeX{} groups.
% \cs{@@_chk_group_begin:n} stores the current group level in a stack,
% and locally defines a dummy control sequence
-% \cs[no-index]{@@_group_\meta{group-level}_chk:}.
+% \cs[no-index]{@@_group_\meta{cctab-level}_chk:}.
%
% \cs{@@_chk_group_end:n} pops the stack, and compares the returned
% value with \cs{tex_currentgrouplevel:D}. If they differ,
% \cs{cctab_end:} is in a different grouping level than the matching
% \cs{cctab_begin:N}. If they are the same, both happened at the same
-% level, but a group might have ended and another started between
-% \cs{cctab_begin:N} and \cs{cctab_end:}, which is the case if
-% \cs[no-index]{@@_group_\meta{group-level}_chk:} doesn't exist
-% since it was locally defined.
-%
-% Any of these cases just raise an error, but no recovery is
+% level, however a group might have ended and another started between
+% \cs{cctab_begin:N} and \cs{cctab_end:}:
+% \begin{verbatim}
+% \group_begin:
+% \cctab_begin:N \c_document_cctab
+% \group_end:
+% \group_begin:
+% \cctab_end:
+% \group_end:
+% \end{verbatim}
+% In this case checking \cs{tex_currentgrouplevel:D} is not enough, so
+% we locally define \cs[no-index]{@@_group_\meta{cctab-level}_chk:},
+% and then check if it exist in \cs{cctab_end:}. If it doesn't,
+% we know there was a group end where it shouldn't.
+%
+% The \meta{cctab-level} in the sentinel macro above cannot be
+% replaced by the more convenient \cs{tex_currentgrouplevel:D} because
+% with the latter we might be tricked. Suppose:
+% \begin{verbatim}
+% \group_begin:
+% \cctab_begin:N \c_code_cctab % A
+% \group_end:
+% \group_begin:
+% \cctab_begin:N \c_code_cctab % B
+% \cctab_end: % C
+% \cctab_end: % D
+% \group_end:
+% \end{verbatim}
+% The line marked with |A| would start a |cctab| with a sentinel token
+% named \cs[no-index]{@@_group_1_chk:}, which would disappear at the
+% \cs{group_end:} that follows. But |B| would create the same
+% sentinel token, since both are at the same group level. Line |C|
+% would end the |cctab| from line |B| correctly, but so would line |D|
+% because line |B| created the same sentinel token. Using
+% \meta{cctab-level} works correctly because it signals that certain
+% |cctab| level was activated somewhere, but if it doesn't exist when
+% the \cs{cctab_end:} is reached, we had a problem.
+%
+% Unfortunately these tests only flag the wrong usage at the
+% \cs{cctab_end:}, which might be farfrom the \cs{cctab_begin:N}.
+% However it isn't possible to signal the wrong usage at the
+% \cs{group_end:} without abusing \cs{tex_aftergroup:D}.
+%
+% The three cases checked here just raise an error, and no recovery is
% attempted: usually interleaving groups and catcode tables will work
-% as expected.
+% predictably.
% \begin{macrocode}
\cs_new_protected:Npn \@@_chk_group_begin:n #1
{
@@ -599,6 +637,15 @@
}
}
}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_nesting_number:N,\@@_nesting_number:w}
+% This macro returns the numeric index of the current catcode table.
+% In \LuaTeX{} this is just the argument, which is a count reference
+% to a \tn{catcodetable} register. In other engines, the number is
+% extracted from the |cctab| variable.
+% \begin{macrocode}
\sys_if_engine_luatex:TF
{ \cs_new:Npn \@@_nesting_number:N #1 {#1} }
{
More information about the latex3-commits
mailing list.