[latex3-commits] [git/LaTeX3-latex3-latex2e] hook-args: Define a boolean instead of passing one as argument (22d1bda4)
PhelypeOleinik
phelype.oleinik at latex-project.org
Mon Mar 6 04:11:23 CET 2023
Repository : https://github.com/latex3/latex2e
On branch : hook-args
Link : https://github.com/latex3/latex2e/commit/22d1bda495498f451146b0b373b995fed35d9c70
>---------------------------------------------------------------
commit 22d1bda495498f451146b0b373b995fed35d9c70
Author: PhelypeOleinik <phelype.oleinik at latex-project.org>
Date: Mon Mar 6 00:11:23 2023 -0300
Define a boolean instead of passing one as argument
>---------------------------------------------------------------
22d1bda495498f451146b0b373b995fed35d9c70
base/lthooks.dtx | 161 ++++++++++++++++++++++++++++++++++++-------------------
1 file changed, 105 insertions(+), 56 deletions(-)
diff --git a/base/lthooks.dtx b/base/lthooks.dtx
index 24fcc08a..3a56ed5e 100644
--- a/base/lthooks.dtx
+++ b/base/lthooks.dtx
@@ -2557,28 +2557,28 @@
}
{ \@@_tl_gset:cn { @@#2~#3 } {#4} }
}
-\cs_new_protected:Npn \@@_cs_gput_right:Nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_cs_gput_right:nnn #1 #2 #3
{
- \tl_if_exist:cTF { c_@@_#3_parameter_tl }
+ \tl_if_exist:cTF { c_@@_#2_parameter_tl }
{
\@@_code_gset_auxi:veen
- { c_@@_#3_parameter_tl }
+ { c_@@_#2_parameter_tl }
{
\exp_args:NNo \exp_args:No \@@_double_hashes:n
{
- \cs:w @@#2~#3 \exp_last_unbraced:Ne \cs_end:
- { \@@_braced_parameter:n {#3} }
+ \cs:w @@#1~#2 \exp_last_unbraced:Ne \cs_end:
+ { \@@_braced_parameter:n {#2} }
}
}
{
\bool_if:NTF #1
{ \exp_not:n }
{ \@@_double_hashes:n }
- {#4}
+ {#3}
}
- { @@#2~#3 }
+ { @@#1~#2 }
}
- { \@@_tl_gput_right:cn { @@#2~#3 } {#4} }
+ { \@@_tl_gput_right:cn { @@#1~#2 } {#3} }
}
\cs_new_protected:Npn \@@_code_gset_auxi:nnnn #1 #2 #3 #4
{ \cs_gset:cpn {#4} #1 { #2 #3 } }
@@ -2786,12 +2786,12 @@
{
% \end{macrocode}
% Use \cs{c_false_bool} as the third argument to
-% \cs{@@_hook_gput_code_do:nnNn} because there is no argument
+% \cs{@@_hook_gput_code_do:nnn} because there is no argument
% replacement in legacy hooks.
% \begin{macrocode}
\use:e
{
- \@@_hook_gput_code_do:nnNn {#1} { legacy } \c_false_bool
+ \@@_hook_gput_code_do:nnn {#1} { legacy }
{ \exp_not:v { @#1hook } }
}
% \end{macrocode}
@@ -3257,7 +3257,7 @@
% \subsection{Adding or removing hook code}
%
% \begin{macro}{\hook_gput_code:nnn}
-% \begin{macro}{\@@_gput_code:nnNn,\@@_hook_gput_code_do:nnNn}
+% \begin{macro}{\@@_gput_code:nnn,\@@_hook_gput_code_do:nnn}
%
% With \cs{hook_gput_code:nnn}\Arg{hook}\Arg{label}\Arg{code} a
% chunk of \meta{code} is added to an existing \meta{hook} labeled
@@ -3266,34 +3266,38 @@
% \begin{macrocode}
%<latexrelease>\IncludeInRelease{2023/06/01}%
%<latexrelease> {\hook_gput_code_with_args:nnn}{Hooks~with~args}
-\cs_new_protected:Npn \hook_gput_code:nnn #1 #2
+\cs_new_protected:Npn \hook_gput_code:nnn #1 #2 #3
{
- \@@_normalize_hook_args:Nnn \@@_gput_code:nnNn
- {#1} {#2} \c_false_bool
+ \@@_replacing_args_false:
+ \@@_normalize_hook_args:Nnn \@@_gput_code:nnn {#1} {#2} {#3}
+ \@@_replacing_args_unset:
}
-\cs_new_protected:Npn \hook_gput_code_with_args:nnn #1 #2
+\cs_new_protected:Npn \hook_gput_code_with_args:nnn #1 #2 #3
{
- \@@_normalize_hook_args:Nnn \@@_gput_code:nnNn
- {#1} {#2} \c_true_bool
+ \@@_replacing_args_true:
+ \@@_normalize_hook_args:Nnn \@@_gput_code:nnn {#1} {#2} {#3}
+ \@@_replacing_args_unset:
}
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_gput_code:nnNn #1 #2 #3
+\cs_new_protected:Npn \@@_gput_code:nnn #1 #2
{
- \bool_if:NTF #3
+ \@@_if_replacing_args:TF
{
- \tl_if_exist:cF { c_@@_#1_parameter_tl }
+ \bool_lazy_and:nnT
+ { \@@_if_usable_p:n {#1} }
+ { ! \tl_if_exist_p:c { c_@@_#1_parameter_tl } }
{
\msg_error:nnnn { hooks } { without-args }
{#1} { AddToHook }
}
- \@@_gput_code_normal:nnNn
+ \@@_gput_code_normal:nnn
}
- { \@@_gput_code_normal:nnNn }
- {#1} {#2} #3
+ { \@@_gput_code_normal:nnn }
+ {#1} {#2}
}
-\cs_new_protected:Npn \@@_gput_code_normal:nnNn #1 #2 #3
+\cs_new_protected:Npn \@@_gput_code_normal:nnn #1 #2
{
% \end{macrocode}
% First check if the code should be executed immediately, rather than
@@ -3305,9 +3309,9 @@
\msg_error:nnnn { hooks } { one-time-args } {#1} { AddToHook }
\use:n
}
- { \@@_gput_code_store:nnNn {#1} {#2} #3 }
+ { \@@_gput_code_store:nnn {#1} {#2} }
}
-\cs_new_protected:Npn \@@_gput_code_store:nnNn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_gput_code_store:nnn #1 #2 #3
{
% \end{macrocode}
% Then check if the hook is usable.
@@ -3319,7 +3323,7 @@
% this is then sorted into a token list for fast execution.
% \begin{macrocode}
{
- \@@_hook_gput_code_do:nnNn {#1} {#2} #3 {#4}
+ \@@_hook_gput_code_do:nnn {#1} {#2} {#3}
% \end{macrocode}
% However, if there is an update within the document we need to alter
% this execution code which is done by
@@ -3336,14 +3340,14 @@
{
\@@_if_disabled:nTF {#1}
{ \msg_error:nnn { hooks } { hook-disabled } {#1} }
- { \@@_try_declaring_generic_hook:nnn {#1} {#2} {#4} }
+ { \@@_try_declaring_generic_hook:nnn {#1} {#2} {#3} }
}
}
% \end{macrocode}
%
% This macro will unconditionally add a chunk of code to the given hook.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_hook_gput_code_do:nnNn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_hook_gput_code_do:nnn #1 #2 #3
{
% \end{macrocode}
% However, first some debugging info if debugging is enabled:
@@ -3351,11 +3355,11 @@
\@@_debug:n{\iow_term:x{****~ Add~ to~
\@@_if_usable:nF {#1} { undeclared~ }
hook~ #1~ (#2)
- \on at line\space <-~ \tl_to_str:n{#4}} }
+ \on at line\space <-~ \tl_to_str:n{#3}} }
% \end{macrocode}
% Then try to get the code chunk labeled \verb=#2= from the hook.
-% If there's code already there, then append \verb=#4= to that,
-% otherwise just put \verb=#4=. If the current label is |top-level|,
+% If there's code already there, then append \verb=#3= to that,
+% otherwise just put \verb=#3=. If the current label is |top-level|,
% the code is added to a dedicated token list
% \cs{@@_toplevel\textvisiblespace\meta{hook}} that goes at the end of the
% hook (or at the beginning, for a reversed hook), just before
@@ -3370,7 +3374,7 @@
% with \cs{@@_init_structure:n}.
% \begin{macrocode}
\@@_init_structure:n {#1}
- \@@_cs_gput_right:Nnnn #3 { _toplevel } {#1} {#4}
+ \@@_cs_gput_right:nnn { _toplevel } {#1} {#3}
}
{ \msg_error:nnn { hooks } { misused-top-level } {#1} }
}
@@ -3379,11 +3383,11 @@
{ g_@@_#1_code_prop }
{
\bool_lazy_or:nnTF
- { \bool_if_p:N #3 }
+ { \@@_if_replacing_args_p: }
{ ! \tl_if_exist_p:c { c_@@_#1_parameter_tl } }
{ \exp_not:n }
{ \@@_double_hashes:n }
- {#4}
+ {#3}
}
{#2}
}
@@ -3464,7 +3468,7 @@
\cs_new_protected:Npn \@@_gput_undeclared_hook:nnn #1 #2 #3
{
\@@_init_structure:n {#1}
- \@@_hook_gput_code_do:nnNn {#1} {#2} \c_false_bool {#3}
+ \@@_hook_gput_code_do:nnn {#1} {#2} {#3}
}
%<latexrelease>\EndIncludeInRelease
% \end{macrocode}
@@ -5373,49 +5377,53 @@
%
% \begin{macro}{\hook_gput_next_code:nn}
% \begin{macrocode}
-\cs_new_protected:Npn \hook_gput_next_code:nn #1
+\cs_new_protected:Npn \hook_gput_next_code:nn #1 #2
{
- \@@_normalize_hook_args:Nn \@@_gput_next_code:nNn
- {#1} \c_false_bool
+ \@@_replacing_args_false:
+ \@@_normalize_hook_args:Nn \@@_gput_next_code:nn {#1} {#2}
+ \@@_replacing_args_unset:
}
-\cs_new_protected:Npn \hook_gput_next_code_with_args:nn #1
+\cs_new_protected:Npn \hook_gput_next_code_with_args:nn #1 #2
{
- \@@_normalize_hook_args:Nn \@@_gput_next_code:nNn
- {#1} \c_true_bool
+ \@@_replacing_args_true:
+ \@@_normalize_hook_args:Nn \@@_gput_next_code:nn {#1} {#2}
+ \@@_replacing_args_unset:
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_gput_next_code:nNn,
% \@@_gput_next_do:nn,
-% \@@_gput_next_do:NnNn}
+% \@@_gput_next_do:Nnn}
% \begin{macrocode}
-\cs_new_protected:Npn \@@_gput_next_code:nNn #1 #2 #3
+\cs_new_protected:Npn \@@_gput_next_code:nn #1 #2
{
\@@_if_disabled:nTF {#1}
{ \msg_error:nnn { hooks } { hook-disabled } {#1} }
{
\@@_if_structure_exist:nTF {#1}
- { \@@_gput_next_choose:Nnn #2 {#1} {#3} }
- { \@@_try_declaring_generic_next_hook:nn {#1} {#3} }
+ { \@@_gput_next_choose:nn }
+ { \@@_try_declaring_generic_next_hook:nn }
+ {#1} {#2}
}
}
% \end{macrocode}
%
% \begin{macrocode}
\cs_new_protected:Npn \@@_gput_next_do:nn #1
- { \@@_gput_next_choose:Nnn \c_false_bool }
-\cs_new_protected:Npn \@@_gput_next_choose:Nnn #1 #2
+ { \@@_gput_next_choose:nn }
+\cs_new_protected:Npn \@@_gput_next_choose:nn #1
{
- \bool_if:NT #1
+ \@@_if_replacing_args:TF
{
- \tl_if_exist:cF { c_@@_#2_parameter_tl }
+ \tl_if_exist:cF { c_@@_#1_parameter_tl }
{
\msg_error:nnnn { hooks } { without-args }
- {#2} { AddToHookNext }
+ {#1} { AddToHookNext }
}
}
- \exp_args:Nc \@@_gput_next_do:NnNn { @@_next~#2 } {#2} #1
+ { }
+ \exp_args:Nc \@@_gput_next_do:Nnn { @@_next~#1 } {#1}
}
% \end{macrocode}
% First check if the ``next code'' token list is empty: if so we need
@@ -5428,13 +5436,13 @@
% list is empty, the hook code has to be updated to add the next
% execution token list.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_gput_next_do:NnNn #1 #2 #3
+\cs_new_protected:Npn \@@_gput_next_do:Nnn #1 #2
{
\exp_args:Ne \str_if_empty:nT { \cs_replacement_spec:c { @@~#2 } }
{ \@@_update_hook_code:n {#2} }
\tl_if_empty:NT #1
{ \@@_tl_gset:Nn #1 { \@@_clear_next:n {#2} } }
- \@@_cs_gput_right:Nnnn #3 { _next } {#2}
+ \@@_cs_gput_right:nnn { _next } {#2}
}
% \end{macrocode}
% \end{macro}
@@ -5686,8 +5694,9 @@
% cheat a bit and sneak the cleanup code at the end of the hook,
% along with the next execution code.
% \begin{macrocode}
- \@@_cs_gput_right:Nnnn \c_false_bool { _next }
- {#1} { \@@_use_once_clear:n {#1} }
+ \@@_replacing_args_false:
+ \@@_cs_gput_right:nnn { _next } {#1} { \@@_use_once_clear:n {#1} }
+ \@@_replacing_args_unset:
\@@_use_initialized:n {#1}
}
%<latexrelease>\EndIncludeInRelease
@@ -5955,6 +5964,46 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}[EXP]{\@@_if_replacing_args:TF}
+% \begin{macro}[EXP]{\@@_misused_replacing_args:nn}
+% \begin{macro}{\@@_replacing_args_true:}
+% \begin{macro}{\@@_replacing_args_false:}
+% \begin{macro}{\@@_replacing_args_unset:}
+% An internal conditional that checks if the code being added to the
+% hook contains arguments.
+% \begin{macrocode}
+\cs_new:Npn \@@_misused_if_replacing_args:nn #1 #2
+ {
+ \msg_expandable_error:nnn { latex2e } { should-not-happen }
+ { Misused~\@@_if_replacing_args:. }
+ }
+\cs_new_eq:NN \@@_if_replacing_args:TF \@@_misused_if_replacing_args:nn
+\cs_new:Npn \@@_if_replacing_args_p:
+ { \@@_misused_if_replacing_args:nn ?? \c_false_bool }
+\cs_new_protected:Npn \@@_replacing_args_true:
+ {
+ \cs_set_eq:NN \@@_if_replacing_args:TF \use_i:nn
+ \cs_set_eq:NN \@@_if_replacing_args_p: \c_true_bool
+ }
+\cs_new_protected:Npn \@@_replacing_args_false:
+ {
+ \cs_set_eq:NN \@@_if_replacing_args:TF \use_ii:nn
+ \cs_set_eq:NN \@@_if_replacing_args_p: \c_false_bool
+ }
+\cs_new_protected:Npn \@@_replacing_args_unset:
+ {
+ \cs_set_eq:NN \@@_if_replacing_args:TF
+ \@@_misused_if_replacing_args:nn
+ \cs_set:Npn \@@_if_replacing_args_p:
+ { \@@_misused_if_replacing_args:nn ?? \c_false_bool }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
% \subsection{Messages}
%
% Hook errors are LaTeX kernel errors:
More information about the latex3-commits
mailing list.