summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx')
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx428
1 files changed, 310 insertions, 118 deletions
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
index 2ddf658d7a5..00137d96bed 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
@@ -7,7 +7,7 @@
% license or (at your option) any later version. The latest version
% of this license is in the file
%
-% http://www.latex-project.org/lppl.txt
+% https://www.latex-project.org/lppl.txt
%
% This file is part of the "l3kernel bundle" (The Work in LPPL)
% and all files in that bundle must be distributed together.
@@ -21,7 +21,7 @@
% for those people who are interested.
%
%<*driver>
-\documentclass[full]{l3doc}
+\documentclass[full,kernel]{l3doc}
\begin{document}
\DocInput{\jobname.dtx}
\end{document}
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2017/11/14}
+% \date{Released 2017/12/05}
%
% \maketitle
%
@@ -94,7 +94,9 @@
% can be used in the \meta{list} are
% \begin{itemize}
% \item \texttt{check-declarations} that checks all \pkg{expl3}
-% variables used were previously declared;
+% variables used were previously declared and that local/global
+% variables (based on their name or on their first assignment) are
+% only locally/globally assigned;
% \item \texttt{check-expressions} that checks integer, dimension,
% skip, and muskip expressions are not terminated prematurely;
% \item \texttt{deprecation} that makes soon-to-be-deprecated commands produce errors;
@@ -107,6 +109,17 @@
% loaded with \texttt{enable-debug} or another option implying it.
% \end{function}
%
+% \begin{function}[added = 2017-11-28]{\debug_suspend:, \debug_resume:}
+% \begin{syntax}
+% \cs{debug_suspend:} \ldots{} \cs{debug_resume:}
+% \end{syntax}
+% Suppress (locally) errors and logging from \texttt{debug} commands,
+% except for the \texttt{deprecation} errors or warnings. These pairs
+% of commands can be nested. This can be used around pieces of code
+% that are known to fail checks, if such failures should be ignored.
+% See for instance \pkg{l3coffins}.
+% \end{function}
+%
% \begin{function}[added = 2017-07-04]{\mode_leave_vertical:}
% \begin{syntax}
% \cs{mode_leave_vertical:}
@@ -357,6 +370,66 @@
% space might be removed as well.
% \end{function}
%
+% \begin{function}[added = 2017-12-04]{\msg_show_eval:Nn, \msg_log_eval:Nn}
+% \begin{syntax}
+% \cs{msg_show_eval:Nn} \meta{function} \Arg{expression}
+% \end{syntax}
+% Shows or logs the \meta{expression} (turned into a string), an equal
+% sign, and the result of applying the \meta{function} to the
+% \Arg{expression} (with \texttt{f}-expansion). For instance, if the
+% \meta{function} is \cs{int_eval:n} and the \meta{expression} is
+% |1+2| then this logs |> 1+2=3.|
+% \end{function}
+%
+% \begin{function}[added = 2017-12-04]
+% {
+% \msg_show:nnnnnn ,
+% \msg_show:nnnnn ,
+% \msg_show:nnnn ,
+% \msg_show:nnn ,
+% \msg_show:nn ,
+% \msg_show:nnxxxx ,
+% \msg_show:nnxxx ,
+% \msg_show:nnxx ,
+% \msg_show:nnx
+% }
+% \begin{syntax}
+% \cs{msg_show:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four}
+% \end{syntax}
+% Issues \meta{module} information \meta{message}, passing \meta{arg
+% one} to \meta{arg four} to the text-creating functions. The
+% information text is shown on the terminal and the \TeX{} run is
+% interrupted in a manner similar to \cs{tl_show:n}. This is used in
+% conjunction with \cs{msg_show_item:n} and similar functions to print
+% complex variable contents completely. If the formatted text does
+% not contain |>~| at the start of a line, an additional line |>~.|
+% will be put at the end. In addition, a final period is added if not
+% present.
+% \end{function}
+%
+% \begin{function}[EXP, added = 2017-12-04]
+% {\msg_show_item:n, \msg_show_item_unbraced:n, \msg_show_item:nn, \msg_show_item_unbraced:nn}
+% \begin{syntax}
+% \cs{seq_map_function:NN} \meta{seq} \cs{msg_show_item:n}
+% \cs{prop_map_function:NN} \meta{prop} \cs{msg_show_item:nn}
+% \end{syntax}
+% Used in the text of messages for \cs{msg_show:nnxxxx} to show or log
+% a list of items or key--value pairs. The one-argument functions are
+% used for sequences, clist or token lists and the others for property
+% lists. These functions turn their arguments to strings.
+% \end{function}
+%
+% \section{Additions to \pkg{l3prg}}
+%
+% \begin{function}[added = 2017-11-28]{\bool_const:Nn, \bool_const:cn}
+% \begin{syntax}
+% \cs{bool_const:Nn} \meta{boolean} \Arg{boolexpr}
+% \end{syntax}
+% Creates a new constant \meta{boolean} or raises an error if the name
+% is already taken. The value of the \meta{boolean} is set globally to
+% the result of evaluating the \meta{boolexpr}.
+% \end{function}
+%
% \section{Additions to \pkg{l3prop}}
%
% \begin{function}[EXP]{\prop_count:N, \prop_count:c}
@@ -402,6 +475,36 @@
% \end{texnote}
% \end{function}
%
+% \begin{function}[added = 2017-11-28]
+% {
+% \prop_set_from_keyval:Nn, \prop_set_from_keyval:cn,
+% \prop_gset_from_keyval:Nn, \prop_gset_from_keyval:cn,
+% }
+% \begin{syntax}
+% \cs{prop_set_from_keyval:Nn} \meta{prop~var}
+% \{
+% \meta{key1} |=| \meta{value1} |,|
+% \meta{key2} |=| \meta{value2} |,| \ldots{}
+% \}
+% \end{syntax}
+% Sets \meta{prop~var} to contain key--value pairs given in the second
+% argument.
+% \end{function}
+%
+% \begin{function}[added = 2017-11-28]
+% {\prop_const_from_keyval:Nn, \prop_const_from_keyval:cn}
+% \begin{syntax}
+% \cs{prop_const_from_keyval:Nn} \meta{prop~var}
+% \{
+% \meta{key1} |=| \meta{value1} |,|
+% \meta{key2} |=| \meta{value2} |,| \ldots{}
+% \}
+% \end{syntax}
+% Creates a new constant \meta{prop~var} or raises an error if the
+% name is already taken. The \meta{prop~var} is set globally to
+% contain key--value pairs given in the second argument.
+% \end{function}
+%
% \section{Additions to \pkg{l3seq}}
%
% \begin{function}[rEXP]
@@ -470,6 +573,16 @@
% \end{texnote}
% \end{function}
%
+% \begin{function}[added = 2017-11-28]
+% {\seq_const_from_clist:Nn, \seq_const_from_clist:cn}
+% \begin{syntax}
+% \cs{seq_const_from_clist:Nn} \meta{seq~var} \Arg{comma-list}
+% \end{syntax}
+% Creates a new constant \meta{seq~var} or raises an error if the name
+% is already taken. The \meta{seq~var} is set globally to contain the
+% items in the \meta{comma list}.
+% \end{function}
+%
% \section{Additions to \pkg{l3skip}}
%
% \begin{function}{\skip_split_finite_else_action:nnNN}
@@ -1027,14 +1140,13 @@
% Trimming from the left- and right-hand edges of the box is easy: kern the
% appropriate parts off each side.
% \begin{macrocode}
-\__debug_patch_args:nNNpn { {#1} { (#2) } {#3} { (#4) } {#5} }
\cs_new_protected:Npn \box_trim:Nnnnn #1#2#3#4#5
{
\hbox_set:Nn \l_@@_internal_box
{
- \tex_kern:D -\__dim_eval:w #2 \__dim_eval_end:
+ \tex_kern:D - \__dim_eval:n {#2}
\box_use:N #1
- \tex_kern:D -\__dim_eval:w #4 \__dim_eval_end:
+ \tex_kern:D - \__dim_eval:n {#4}
}
% \end{macrocode}
% For the height and depth, there is a need to watch the baseline is
@@ -1094,14 +1206,13 @@
% dimensions. As a result, there are some things to watch out for in the
% vertical direction.
% \begin{macrocode}
-\__debug_patch_args:nNNpn { {#1} { (#2) } {#3} { (#4) } {#5} }
\cs_new_protected:Npn \box_viewport:Nnnnn #1#2#3#4#5
{
\hbox_set:Nn \l_@@_internal_box
{
- \tex_kern:D -\__dim_eval:w #2 \__dim_eval_end:
+ \tex_kern:D - \__dim_eval:n {#2}
\box_use:N #1
- \tex_kern:D \__dim_eval:w #4 - \box_wd:N #1 \__dim_eval_end:
+ \tex_kern:D \__dim_eval:n { #4 - \box_wd:N #1 }
}
\dim_compare:nNnTF {#3} < \c_zero_dim
{
@@ -1110,7 +1221,7 @@
\box_move_down:nn \c_zero_dim
{ \box_use:N \l_@@_internal_box }
}
- \box_set_dp:Nn \l_@@_internal_box { -\dim_eval:n {#3} }
+ \box_set_dp:Nn \l_@@_internal_box { - \__dim_eval:n {#3} }
}
{
\hbox_set:Nn \l_@@_internal_box
@@ -1134,7 +1245,7 @@
{
\hbox_set:Nn \l_@@_internal_box
{
- \box_move_up:nn { -\dim_eval:n {#5} }
+ \box_move_up:nn { - \__dim_eval:n {#5} }
{ \box_use:N \l_@@_internal_box }
}
\box_set_ht:Nn \l_@@_internal_box \c_zero_dim
@@ -1152,7 +1263,7 @@
% \end{macrocode}
%
% \begin{macro}{\clist_rand_item:n, \clist_rand_item:N, \clist_rand_item:c}
-% \begin{macro}[aux]{\@@_rand_item:nn}
+% \begin{macro}{\@@_rand_item:nn}
% The |N|-type function is not implemented through the |n|-type
% function for efficiency: for instance comma-list variables do not
% require space-trimming of their items. Even testing for emptyness
@@ -1274,9 +1385,8 @@
\hbox_set:Nn \l_@@_internal_box
{
\tex_kern:D
- \__dim_eval:w
- \l_@@_bounding_shift_dim - \l_@@_left_corner_dim
- \__dim_eval_end:
+ \__dim_eval:n
+ { \l_@@_bounding_shift_dim - \l_@@_left_corner_dim }
\box_move_down:nn { \l_@@_bottom_corner_dim }
{ \box_use:N #1 }
}
@@ -1401,7 +1511,7 @@
% \end{macro}
%
% \begin{macro}{\@@_find_corner_maxima:N}
-% \begin{macro}[aux]{\@@_find_corner_maxima_aux:nn}
+% \begin{macro}{\@@_find_corner_maxima_aux:nn}
% The idea here is to find the extremities of the content of the
% coffin. This is done by looking for the smallest values for the bottom
% and left corners, and the largest values for the top and right
@@ -1433,7 +1543,7 @@
% \end{macro}
%
% \begin{macro}{\@@_find_bounding_shift:}
-% \begin{macro}[aux]{\@@_find_bounding_shift_aux:nn}
+% \begin{macro}{\@@_find_bounding_shift_aux:nn}
% The approach to finding the shift for the bounding box is similar to
% that for the corners. However, there is only one value needed here and
% a fixed input property list, so things are a bit clearer.
@@ -1646,7 +1756,7 @@
%
% \begin{macro}
% {\file_get_mdfive_hash:nN, \file_get_size:nN, \file_get_timestamp:nN}
-% \begin{macro}[aux]{\@@_get_details:nnN}
+% \begin{macro}{\@@_get_details:nnN}
% These are all wrappers around the \pdfTeX{} primitives doing the same
% jobs: as we want consistent file paths to be found, they are all set up
% using \cs{file_get_full_name:nN} and so are non-expandable \texttt{get}
@@ -1723,16 +1833,16 @@
% \begin{macrocode}
\cs_new_protected:Npn \file_if_exist_input:n #1
{
- \file_get_full_name:nN {#1} \l__file_full_name_str
- \str_if_empty:NF \l__file_full_name_str
- { \@@_input:V \l__file_full_name_str }
+ \file_get_full_name:nN {#1} \l_@@_full_name_str
+ \str_if_empty:NF \l_@@_full_name_str
+ { \@@_input:V \l_@@_full_name_str }
}
\cs_new_protected:Npn \file_if_exist_input:nF #1#2
{
- \file_get_full_name:nN {#1} \l__file_full_name_str
- \str_if_empty:NTF \l__file_full_name_str
+ \file_get_full_name:nN {#1} \l_@@_full_name_str
+ \str_if_empty:NTF \l_@@_full_name_str
{#2}
- { \@@_input:V \l__file_full_name_str }
+ { \@@_input:V \l_@@_full_name_str }
}
% \end{macrocode}
% \end{macro}
@@ -1744,17 +1854,17 @@
{ \file_if_exist:nTF and~ \file_input:n }
\cs_new_protected:Npn \file_if_exist_input:nTF #1#2#3
{
- \file_get_full_name:nN {#1} \l__file_full_name_str
- \str_if_empty:NTF \l__file_full_name_str
- {#3} { #2 \@@_input:V \l__file_full_name_str }
+ \file_get_full_name:nN {#1} \l_@@_full_name_str
+ \str_if_empty:NTF \l_@@_full_name_str
+ {#3} { #2 \@@_input:V \l_@@_full_name_str }
}
\__debug_deprecation:nnNNpn { 2017-12-31 }
{ \file_if_exist:nT and~ \file_input:n }
\cs_new_protected:Npn \file_if_exist_input:nT #1#2
{
- \file_get_full_name:nN {#1} \l__file_full_name_str
- \str_if_empty:NF \l__file_full_name_str
- { #2 \@@_input:V \l__file_full_name_str }
+ \file_get_full_name:nN {#1} \l_@@_full_name_str
+ \str_if_empty:NF \l_@@_full_name_str
+ { #2 \@@_input:V \l_@@_full_name_str }
}
% \end{macrocode}
% \end{macro}
@@ -1773,7 +1883,7 @@
% \end{macrocode}
%
% \begin{macro}[EXP]{\int_rand:nn}
-% \begin{macro}[aux, EXP]
+% \begin{macro}[EXP]
% {
% \@@_rand:ww, \@@_rand_narrow:n,
% \@@_rand_narrow:nnn, \@@_rand_narrow:nnnn
@@ -1793,12 +1903,16 @@
% \begin{macrocode}
\cs_if_exist:NTF \pdftex_uniformdeviate:D
{
- \__debug_patch_args:nNNpn { { (#1) } { (#2) } }
+ \__debug_patch_args:nNNpn
+ {
+ { \__debug_chk_expr:nNnN {#1} \@@_eval:w { } \int_rand:nn }
+ { \__debug_chk_expr:nNnN {#2} \@@_eval:w { } \int_rand:nn }
+ }
\cs_new:Npn \int_rand:nn #1#2
{
\exp_after:wN \@@_rand:ww
- \__int_value:w \__int_eval:w #1 \exp_after:wN ;
- \__int_value:w \__int_eval:w #2 ;
+ \@@_value:w \@@_eval:w #1 \exp_after:wN ;
+ \@@_value:w \@@_eval:w #2 ;
}
\cs_new:Npn \@@_rand:ww #1; #2;
{
@@ -1874,7 +1988,7 @@
% \msg_expandable_error:nnff ,
% \msg_expandable_error:nnf
% }
-% \begin{macro}[aux]{\__msg_expandable_error_module:nn}
+% \begin{macro}{\@@_expandable_error_module:nn}
% Pass to an auxiliary the message to display and the module name
% \begin{macrocode}
\cs_new:Npn \msg_expandable_error:nnnnnn #1#2#3#4#5#6
@@ -1908,6 +2022,73 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\msg_show_eval:Nn, \msg_log_eval:Nn, \@@_show_eval:nnN}
+% A short-hand used for \cs{int_show:n} and similar functions that
+% passes to \cs{tl_show:n} the result of applying |#1| (a
+% function such as \cs{int_eval:n}) to the expression |#2|. The use of
+% \texttt{f}-expansion ensures that |#1| is expanded in the scope in which the
+% show command is called, rather than in the group created by
+% \cs{iow_wrap:nnnN}. This is only important for expressions
+% involving the \tn{currentgrouplevel} or \tn{currentgrouptype}.
+% On the other hand we want the expression to be converted to a string
+% with the usual escape character, hence within the wrapping code.
+% \begin{macrocode}
+\cs_new_protected:Npn \msg_show_eval:Nn #1#2
+ { \exp_args:Nf \@@_show_eval:nnN { #1 {#2} } {#2} \tl_show:n }
+\cs_new_protected:Npn \msg_log_eval:Nn #1#2
+ { \exp_args:Nf \@@_show_eval:nnN { #1 {#2} } {#2} \tl_log:n }
+\cs_new_protected:Npn \@@_show_eval:nnN #1#2#3 { #3 { #2 = #1 } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\msg_show_item:n}
+% \begin{macro}[EXP]{\msg_show_item_unbraced:n}
+% \begin{macro}[EXP]{\msg_show_item:nn}
+% \begin{macro}[EXP]{\msg_show_item_unbraced:nn}
+% Each item in the variable is formatted using one of the following
+% functions. We cannot use |\\| and so on because these short-hands
+% cannot be used inside the arguments of messages, only when defining
+% the messages.
+% \begin{macrocode}
+\cs_new:Npx \msg_show_item:n #1
+ { \iow_newline: > ~ \c_space_tl \exp_not:N \tl_to_str:n { {#1} } }
+\cs_new:Npx \msg_show_item_unbraced:n #1
+ { \iow_newline: > ~ \c_space_tl \exp_not:N \tl_to_str:n {#1} }
+\cs_new:Npx \msg_show_item:nn #1#2
+ {
+ \iow_newline: > \use:nn { ~ } { ~ }
+ \exp_not:N \tl_to_str:n { {#1} }
+ \use:nn { ~ } { ~ } => \use:nn { ~ } { ~ }
+ \exp_not:N \tl_to_str:n { {#2} }
+ }
+\cs_new:Npx \msg_show_item_unbraced:nn #1#2
+ {
+ \iow_newline: > \use:nn { ~ } { ~ }
+ \exp_not:N \tl_to_str:n {#1}
+ \use:nn { ~ } { ~ } => \use:nn { ~ } { ~ }
+ \exp_not:N \tl_to_str:n {#2}
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Additions to \pkg{l3prg}}
+%
+% \begin{macro}[added = 2017-11-28]{\bool_const:Nn, \bool_const:cn}
+% A merger between \cs{tl_const:Nn} and \cs{bool_set:Nn}.
+% \begin{macrocode}
+\__debug_patch:nnNNpn { \__debug_chk_var_scope:NN c #1 } { }
+\cs_new_protected:Npn \bool_const:Nn #1#2
+ {
+ \__chk_if_free_cs:N #1
+ \tex_global:D \tex_chardef:D #1 = \bool_if_p:n {#2}
+ }
+\cs_generate_variant:Nn \bool_const:Nn { c }
+% \end{macrocode}
+% \end{macro}
+%
% \subsection{Additions to \pkg{l3prop}}
%
% \begin{macrocode}
@@ -1915,7 +2096,7 @@
% \end{macrocode}
%
% \begin{macro}[EXP]{\prop_count:N, \prop_count:c}
-% \begin{macro}[aux,EXP]{\@@_count:nn}
+% \begin{macro}[EXP]{\@@_count:nn}
% Counting the key--value pairs in a property list is done using the
% same approach as for other count functions: turn each entry into a
% \texttt{+1} then use integer evaluation to actually do the
@@ -1936,7 +2117,7 @@
% \end{macro}
%
% \begin{macro}[rEXP]{\prop_map_tokens:Nn, \prop_map_tokens:cn}
-% \begin{macro}[aux]{\@@_map_tokens:nwwn}
+% \begin{macro}{\@@_map_tokens:nwwn}
% The mapping is very similar to \cs{prop_map_function:NN}. It grabs
% one key--value pair at a time, and stops when reaching the marker
% key \cs{q_recursion_tail}, which cannot appear in normal keys since
@@ -1966,7 +2147,7 @@
%
% \begin{macro}[EXP]
% {\prop_rand_key_value:N, \prop_rand_key_value:c}
-% \begin{macro}[aux, EXP]{\@@_rand:NN, \@@_rand_item:Nw}
+% \begin{macro}[EXP]{\@@_rand:NN, \@@_rand_item:Nw}
% Contrarily to |clist|, |seq| and |tl|, there is no function to get
% an item of a |prop| given an integer between $1$ and the number of
% items, so we write the appropriate code. There is no bounds
@@ -2008,7 +2189,7 @@
% \seq_mapthread_function:NNN, \seq_mapthread_function:NcN,
% \seq_mapthread_function:cNN, \seq_mapthread_function:ccN
% }
-% \begin{macro}[aux]
+% \begin{macro}
% {
% \@@_mapthread_function:wNN, \@@_mapthread_function:wNw,
% \@@_mapthread_function:Nnnwnn
@@ -2052,7 +2233,7 @@
% \end{macro}
%
% \begin{macro}{\seq_set_filter:NNn, \seq_gset_filter:NNn}
-% \begin{macro}[aux]{\@@_set_filter:NNNn}
+% \begin{macro}{\@@_set_filter:NNNn}
% Similar to \cs{seq_map_inline:Nn}, without a
% \cs{__prg_break_point:} because the user's code
% is performed within the evaluation of a boolean expression,
@@ -2076,7 +2257,7 @@
% \end{macro}
%
% \begin{macro}{\seq_set_map:NNn, \seq_gset_map:NNn}
-% \begin{macro}[aux]{\@@_set_map:NNNn}
+% \begin{macro}{\@@_set_map:NNNn}
% Very similar to \cs{seq_set_filter:NNn}. We could actually
% merge the two within a single function, but it would have weird
% semantics.
@@ -2107,6 +2288,18 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\seq_const_from_clist:Nn, \seq_const_from_clist:cn}
+% Almost identical to \cs{seq_set_from_clist:Nn}.
+% \begin{macrocode}
+\cs_new_protected:Npn \seq_const_from_clist:Nn #1#2
+ {
+ \tl_const:Nx #1
+ { \s_@@ \clist_map_function:nN {#2} \@@_wrap_item:n }
+ }
+\cs_generate_variant:Nn \seq_const_from_clist:Nn { c }
+% \end{macrocode}
+% \end{macro}
+%
% \subsection{Additions to \pkg{l3skip}}
%
% \begin{macrocode}
@@ -2170,9 +2363,8 @@
% \begin{macro}{\sys_gset_rand_seed:n}
% The primitive always assigns the seed globally.
% \begin{macrocode}
-\__debug_patch_args:nNNpn { { (#1) } }
\cs_new_protected:Npn \sys_gset_rand_seed:n #1
- { \pdftex_setrandomseed:D \__int_eval:w #1 \__int_eval_end: }
+ { \pdftex_setrandomseed:D \__int_eval:n {#1} }
% \end{macrocode}
% \end{macro}
%
@@ -2332,7 +2524,7 @@
% \end{macro}
%
% \begin{macro}[EXP]{\tl_reverse_tokens:n}
-% \begin{macro}[EXP,aux]{\@@_reverse_group:nn}
+% \begin{macro}[EXP]{\@@_reverse_group:nn}
% The same as \cs{tl_reverse:n} but with recursion within brace groups.
% \begin{macrocode}
\cs_new:Npn \tl_reverse_tokens:n #1
@@ -2356,7 +2548,7 @@
}
% \end{macrocode}
% \end{macro}
-% \begin{macro}[EXP,aux]{\@@_act_group_recurse:Nnn}
+% \begin{macro}[EXP]{\@@_act_group_recurse:Nnn}
% In many applications of \cs{@@_act:NNNnn}, we need to recursively
% apply some transformation within brace groups, then output. In this
% code, |#1| is the output function, |#2| is the transformation,
@@ -2372,7 +2564,7 @@
% \end{macro}
%
% \begin{macro}[EXP]{\tl_count_tokens:n}
-% \begin{macro}[EXP,aux]{\@@_act_count_normal:nN,
+% \begin{macro}[EXP]{\@@_act_count_normal:nN,
% \@@_act_count_group:nn, \@@_act_count_space:n}
% The token count is computed through an \cs{int_eval:n} construction.
% Each \texttt{1+} is output to the \emph{left}, into the integer
@@ -2405,8 +2597,8 @@
% \tl_set_from_file:Nnn, \tl_set_from_file:cnn,
% \tl_gset_from_file:Nnn, \tl_gset_from_file:cnn
% }
-% \begin{macro}[aux]{\@@_set_from_file:NNnn}
-% \begin{macro}[aux]{\@@_from_file_do:w}
+% \begin{macro}{\@@_set_from_file:NNnn}
+% \begin{macro}{\@@_from_file_do:w}
% The approach here is similar to that for doing a rescan, and so the same
% internals can be reused. Thus the plan is to insert a pair of tokens of
% the same charcode but different catcodes after the file has been read.
@@ -2450,7 +2642,7 @@
% \tl_set_from_file_x:Nnn, \tl_set_from_file_x:cnn,
% \tl_gset_from_file_x:Nnn, \tl_gset_from_file_x:cnn
% }
-% \begin{macro}[aux]{\@@_set_from_file_x:NNnn}
+% \begin{macro}{\@@_set_from_file_x:NNnn}
% When reading a file and allowing expansion of the content, the set up
% only needs to prevent \TeX{} complaining about the end of the file. That
% is done simply, with a group then used to trap the definition needed.
@@ -2512,10 +2704,10 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[aux, EXP]{\@@_change_case:nnn}
-% \begin{macro}[aux, EXP]{\@@_change_case_aux:nnn}
-% \begin{macro}[aux, EXP]{\@@_change_case_loop:wnn}
-% \begin{macro}[aux, EXP]
+% \begin{macro}[EXP]{\@@_change_case:nnn}
+% \begin{macro}[EXP]{\@@_change_case_aux:nnn}
+% \begin{macro}[EXP]{\@@_change_case_loop:wnn}
+% \begin{macro}[EXP]
% {
% \@@_change_case_output:nwn ,
% \@@_change_case_output:Vwn ,
@@ -2523,58 +2715,58 @@
% \@@_change_case_output:vwn ,
% \@@_change_case_output:fwn ,
% }
-% \begin{macro}[aux, EXP]{\@@_change_case_end:wn}
-% \begin{macro}[aux, EXP]{\@@_change_case_group:nwnn}
-% \begin{macro}[aux, EXP]
+% \begin{macro}[EXP]{\@@_change_case_end:wn}
+% \begin{macro}[EXP]{\@@_change_case_group:nwnn}
+% \begin{macro}[EXP]
% {
% \@@_change_case_group_lower:nnnn ,
% \@@_change_case_group_upper:nnnn ,
% \@@_change_case_group_mixed:nnnn
% }
-% \begin{macro}[aux, EXP]{\@@_change_case_space:wnn}
-% \begin{macro}[aux, EXP]{\@@_change_case_N_type:Nwnn}
-% \begin{macro}[aux, EXP]{\@@_change_case_N_type:NNNnnn}
-% \begin{macro}[aux, EXP]{\@@_change_case_math:NNNnnn}
-% \begin{macro}[aux, EXP]{\@@_change_case_math_loop:wNNnn}
-% \begin{macro}[aux, EXP]{\@@_change_case_math:NwNNnn}
-% \begin{macro}[aux, EXP]{\@@_change_case_math_group:nwNNnn}
-% \begin{macro}[aux, EXP]{\@@_change_case_math_space:wNNnn}
-% \begin{macro}[aux, EXP]{\@@_change_case_N_type:Nnnn}
-% \begin{macro}[aux, EXP]
+% \begin{macro}[EXP]{\@@_change_case_space:wnn}
+% \begin{macro}[EXP]{\@@_change_case_N_type:Nwnn}
+% \begin{macro}[EXP]{\@@_change_case_N_type:NNNnnn}
+% \begin{macro}[EXP]{\@@_change_case_math:NNNnnn}
+% \begin{macro}[EXP]{\@@_change_case_math_loop:wNNnn}
+% \begin{macro}[EXP]{\@@_change_case_math:NwNNnn}
+% \begin{macro}[EXP]{\@@_change_case_math_group:nwNNnn}
+% \begin{macro}[EXP]{\@@_change_case_math_space:wNNnn}
+% \begin{macro}[EXP]{\@@_change_case_N_type:Nnnn}
+% \begin{macro}[EXP]
% {
% \@@_change_case_char_lower:Nnn ,
% \@@_change_case_char_upper:Nnn ,
% \@@_change_case_char_mixed:Nnn
% }
-% \begin{macro}[aux, EXP]{\@@_change_case_char:nN}
-% \begin{macro}[aux, EXP]
+% \begin{macro}[EXP]{\@@_change_case_char:nN}
+% \begin{macro}[EXP]
% {\@@_change_case_char_auxi:nN, \@@_change_case_char_auxii:nN}
-% \begin{macro}[aux, EXP]
+% \begin{macro}[EXP]
% {
% \@@_change_case_char_mixed:N,
% \@@_change_case_char_lower:N,
% \@@_change_case_char_upper:N
% }
-% \begin{macro}[aux]
+% \begin{macro}
% {\@@_lookup_mixed:N, \@@_lookup_lower:N, \@@_lookup_upper:N}
-% \begin{macro}[aux, EXP]{\@@_change_case_char_UTFviii:nNN}
-% \begin{macro}[aux, EXP]{\@@_change_case_char_UTFviii:nNNN}
-% \begin{macro}[aux, EXP]{\@@_change_case_char_UTFviii:nNNNN}
-% \begin{macro}[aux, EXP]{\@@_change_case_char_UTFviii:nn}
-% \begin{macro}[aux, EXP]{\@@_change_case_cs_letterlike:Nn}
-% \begin{macro}[aux, EXP]{\@@_change_case_cs_letterlike:NnN}
-% \begin{macro}[aux, EXP]{\@@_change_case_cs_accents:NN}
-% \begin{macro}[aux, EXP]{\@@_change_case_cs:N}
-% \begin{macro}[aux, EXP]{\@@_change_case_cs:NN}
-% \begin{macro}[aux, EXP]{\@@_change_case_cs:NNn}
-% \begin{macro}[aux, EXP]{\@@_change_case_protect:wNN}
-% \begin{macro}[aux, EXP]{\@@_change_case_if_expandable:NTF}
-% \begin{macro}[aux, EXP]{\@@_change_case_cs_expand:Nnw}
-% \begin{macro}[aux, EXP]{\@@_change_case_cs_expand:NN}
-% \begin{macro}[aux, EXP]{\@@_change_case_mixed_skip:N}
-% \begin{macro}[aux, EXP]{\@@_change_case_mixed_skip:NN}
-% \begin{macro}[aux, EXP]{\@@_change_case_mixed_skip_tidy:Nwn}
-% \begin{macro}[aux, EXP]{\@@_change_case_mixed_switch:w}
+% \begin{macro}[EXP]{\@@_change_case_char_UTFviii:nNN}
+% \begin{macro}[EXP]{\@@_change_case_char_UTFviii:nNNN}
+% \begin{macro}[EXP]{\@@_change_case_char_UTFviii:nNNNN}
+% \begin{macro}[EXP]{\@@_change_case_char_UTFviii:nn}
+% \begin{macro}[EXP]{\@@_change_case_cs_letterlike:Nn}
+% \begin{macro}[EXP]{\@@_change_case_cs_letterlike:NnN}
+% \begin{macro}[EXP]{\@@_change_case_cs_accents:NN}
+% \begin{macro}[EXP]{\@@_change_case_cs:N}
+% \begin{macro}[EXP]{\@@_change_case_cs:NN}
+% \begin{macro}[EXP]{\@@_change_case_cs:NNn}
+% \begin{macro}[EXP]{\@@_change_case_protect:wNN}
+% \begin{macro}[EXP]{\@@_change_case_if_expandable:NTF}
+% \begin{macro}[EXP]{\@@_change_case_cs_expand:Nnw}
+% \begin{macro}[EXP]{\@@_change_case_cs_expand:NN}
+% \begin{macro}[EXP]{\@@_change_case_mixed_skip:N}
+% \begin{macro}[EXP]{\@@_change_case_mixed_skip:NN}
+% \begin{macro}[EXP]{\@@_change_case_mixed_skip_tidy:Nwn}
+% \begin{macro}[EXP]{\@@_change_case_mixed_switch:w}
% The mechanism for the core conversion of case is based on the idea that
% we can use a loop to grab the entire token list plus a quark: the latter is
% used as an end marker and to avoid any brace stripping. Depending on the
@@ -3114,10 +3306,10 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[aux, EXP]{\@@_change_case_lower_sigma:Nnw}
-% \begin{macro}[aux, EXP]{\@@_change_case_lower_sigma:w}
-% \begin{macro}[aux, EXP]{\@@_change_case_lower_sigma:Nw}
-% \begin{macro}[aux, EXP]{\@@_change_case_upper_sigma:Nnw}
+% \begin{macro}[EXP]{\@@_change_case_lower_sigma:Nnw}
+% \begin{macro}[EXP]{\@@_change_case_lower_sigma:w}
+% \begin{macro}[EXP]{\@@_change_case_lower_sigma:Nw}
+% \begin{macro}[EXP]{\@@_change_case_upper_sigma:Nnw}
% If the current char is an upper case sigma, the a check is made on the next
% item in the input. If it is \texttt{N}-type and not a control sequence
% then there is a look-ahead phase.
@@ -3161,12 +3353,12 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[aux, EXP]{\@@_change_case_lower_tr:Nnw}
-% \begin{macro}[aux, EXP]{\@@_change_case_lower_tr_auxi:Nw}
-% \begin{macro}[aux, EXP]{\@@_change_case_lower_tr_auxii:Nw}
-% \begin{macro}[aux, EXP]{\@@_change_case_upper_tr:Nnw}
-% \begin{macro}[aux, EXP]{\@@_change_case_lower_az:Nnw}
-% \begin{macro}[aux, EXP]{\@@_change_case_upper_az:Nnw}
+% \begin{macro}[EXP]{\@@_change_case_lower_tr:Nnw}
+% \begin{macro}[EXP]{\@@_change_case_lower_tr_auxi:Nw}
+% \begin{macro}[EXP]{\@@_change_case_lower_tr_auxii:Nw}
+% \begin{macro}[EXP]{\@@_change_case_upper_tr:Nnw}
+% \begin{macro}[EXP]{\@@_change_case_lower_az:Nnw}
+% \begin{macro}[EXP]{\@@_change_case_upper_az:Nnw}
% The Turkic languages need special treatment for dotted-i and dotless-i.
% The lower casing rule can be expressed in terms of searching first for
% either a dotless-I or a dotted-I. In the latter case the mapping is
@@ -3270,15 +3462,15 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[aux, EXP]{\@@_change_case_lower_lt:Nnw}
-% \begin{macro}[aux, EXP]{\@@_change_case_lower_lt:nNnw}
-% \begin{macro}[aux, EXP]{\@@_change_case_lower_lt:nnw}
-% \begin{macro}[aux, EXP]{\@@_change_case_lower_lt:Nw}
-% \begin{macro}[aux, EXP]{\@@_change_case_lower_lt:NNw}
-% \begin{macro}[aux, EXP]{\@@_change_case_upper_lt:Nnw}
-% \begin{macro}[aux, EXP]{\@@_change_case_upper_lt:nnw}
-% \begin{macro}[aux, EXP]{\@@_change_case_upper_lt:Nw}
-% \begin{macro}[aux, EXP]{\@@_change_case_upper_lt:NNw}
+% \begin{macro}[EXP]{\@@_change_case_lower_lt:Nnw}
+% \begin{macro}[EXP]{\@@_change_case_lower_lt:nNnw}
+% \begin{macro}[EXP]{\@@_change_case_lower_lt:nnw}
+% \begin{macro}[EXP]{\@@_change_case_lower_lt:Nw}
+% \begin{macro}[EXP]{\@@_change_case_lower_lt:NNw}
+% \begin{macro}[EXP]{\@@_change_case_upper_lt:Nnw}
+% \begin{macro}[EXP]{\@@_change_case_upper_lt:nnw}
+% \begin{macro}[EXP]{\@@_change_case_upper_lt:Nw}
+% \begin{macro}[EXP]{\@@_change_case_upper_lt:NNw}
% For Lithuanian, the issue to be dealt with is dots over lower case
% letters: these should be present if there is another accent. That means
% that there is some work to do when lower casing I and J. The first step
@@ -3428,10 +3620,10 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP, int]{\__unicode_codepoint_to_UTFviii:n}
-% \begin{macro}[EXP, aux]{\__unicode_codepoint_to_UTFviii_auxi:n}
-% \begin{macro}[EXP, aux]{\__unicode_codepoint_to_UTFviii_auxii:Nnn}
-% \begin{macro}[EXP, aux]{\__unicode_codepoint_to_UTFviii_auxiii:n}
+% \begin{macro}[EXP]{\__unicode_codepoint_to_UTFviii:n}
+% \begin{macro}[EXP]{\__unicode_codepoint_to_UTFviii_auxi:n}
+% \begin{macro}[EXP]{\__unicode_codepoint_to_UTFviii_auxii:Nnn}
+% \begin{macro}[EXP]{\__unicode_codepoint_to_UTFviii_auxiii:n}
% This code converts a codepoint into the correct UTF-8 representation.
% As there are a variable number of octets, the result starts with the
% numeral |1|--|4| to indicate the nature of the returned value. Note that
@@ -3784,9 +3976,9 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}[aux, EXP]{\@@_change_case_mixed_nl:Nnw}
-% \begin{macro}[aux, EXP]{\@@_change_case_mixed_nl:Nw}
-% \begin{macro}[aux, EXP]{\@@_change_case_mixed_nl:NNw}
+% \begin{macro}[EXP]{\@@_change_case_mixed_nl:Nnw}
+% \begin{macro}[EXP]{\@@_change_case_mixed_nl:Nw}
+% \begin{macro}[EXP]{\@@_change_case_mixed_nl:NNw}
% For Dutch, there is a single look-ahead test for \texttt{ij} when
% title casing. If the appropriate letters are found, produce \texttt{IJ}
% and gobble the \texttt{j}/\texttt{J}.
@@ -3895,7 +4087,7 @@
% \begin{macro}{\tl_range_braced:Nnn, \tl_range_braced:cnn, \tl_range_braced:nnn}
% \begin{macro}
% {\tl_range_unbraced:Nnn, \tl_range_unbraced:cnn, \tl_range_unbraced:nnn}
-% \begin{macro}[aux]
+% \begin{macro}
% {
% \@@_range:Nnnn, \@@_range:nnnNn, \@@_range:nnNn, \@@_range_skip:w,
% \@@_range_braced:w, \@@_range_collect_braced:w,
@@ -4042,7 +4234,7 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[EXP, aux]{\@@_range_normalize:nn}
+% \begin{macro}[EXP]{\@@_range_normalize:nn}
% This function converts an \meta{index} argument into an explicit
% position in the token list (a result of $0$ denoting \enquote{out of
% bounds}). Expects two explicit integer arguments: the \meta{index}
@@ -4093,7 +4285,7 @@
% \end{macrocode}
%
% \begin{macro}[TF]{\peek_N_type:}
-% \begin{macro}[aux]
+% \begin{macro}
% {\@@_execute_branches_N_type:, \@@_N_type:w, \@@_N_type_aux:nnw}
% All tokens are \texttt{N}-type tokens, except in four cases:
% begin-group tokens, end-group tokens, space tokens with character