From 7bad9b14c550da9ae08669e681e2d94c11bddd9e Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 14 Mar 2024 20:24:49 +0000 Subject: l3 (14mar24) git-svn-id: svn://tug.org/texlive/trunk@70637 c570f23f-e606-0410-a88d-b1316a301751 --- .../source/latex/l3backend/l3backend-basics.dtx | 14 +- .../source/latex/l3backend/l3backend-box.dtx | 2 +- .../source/latex/l3backend/l3backend-color.dtx | 2 +- .../source/latex/l3backend/l3backend-draw.dtx | 47 +- .../source/latex/l3backend/l3backend-graphics.dtx | 2 +- .../source/latex/l3backend/l3backend-header.dtx | 2 +- .../source/latex/l3backend/l3backend-opacity.dtx | 78 ++-- .../source/latex/l3backend/l3backend-pdf.dtx | 2 +- .../l3experimental/l3benchmark/l3benchmark.dtx | 4 +- .../latex/l3experimental/l3draw/l3draw-boxes.dtx | 2 +- .../latex/l3experimental/l3draw/l3draw-layers.dtx | 2 +- .../latex/l3experimental/l3draw/l3draw-paths.dtx | 79 ++-- .../latex/l3experimental/l3draw/l3draw-points.dtx | 2 +- .../latex/l3experimental/l3draw/l3draw-scopes.dtx | 2 +- .../l3experimental/l3draw/l3draw-softpath.dtx | 10 +- .../latex/l3experimental/l3draw/l3draw-state.dtx | 2 +- .../l3experimental/l3draw/l3draw-transforms.dtx | 7 +- .../source/latex/l3experimental/l3draw/l3draw.dtx | 18 +- .../latex/l3experimental/l3graphics/l3graphics.dtx | 4 +- .../latex/l3experimental/l3opacity/l3opacity.dtx | 31 +- .../latex/l3experimental/l3str/l3str-format.dtx | 4 +- .../l3experimental/l3sys-shell/l3sys-shell.dtx | 446 ------------------ .../l3experimental/l3sys-shell/l3sys-shell.ins | 62 --- .../latex/l3experimental/xcoffins/xcoffins.dtx | 4 +- .../latex/l3experimental/xgalley/l3galley.dtx | 4 +- .../latex/l3experimental/xgalley/xgalley.dtx | 4 +- Master/texmf-dist/source/latex/l3kernel/expl3.dtx | 14 +- .../texmf-dist/source/latex/l3kernel/l3basics.dtx | 504 ++++++++++----------- .../texmf-dist/source/latex/l3kernel/l3bitset.dtx | 2 +- .../source/latex/l3kernel/l3bootstrap.dtx | 4 +- Master/texmf-dist/source/latex/l3kernel/l3box.dtx | 12 +- .../texmf-dist/source/latex/l3kernel/l3cctab.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3clist.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3coffins.dtx | 4 +- .../texmf-dist/source/latex/l3kernel/l3color.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3debug.dtx | 4 +- .../source/latex/l3kernel/l3deprecation.dtx | 110 ++--- Master/texmf-dist/source/latex/l3kernel/l3doc.dtx | 26 +- .../source/latex/l3kernel/l3docstrip.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3expan.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3file.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3flag.dtx | 2 +- .../source/latex/l3kernel/l3fp-assign.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3fp-aux.dtx | 2 +- .../source/latex/l3kernel/l3fp-basics.dtx | 2 +- .../source/latex/l3kernel/l3fp-convert.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3fp-expo.dtx | 2 +- .../source/latex/l3kernel/l3fp-extended.dtx | 2 +- .../source/latex/l3kernel/l3fp-functions.dtx | 2 +- .../source/latex/l3kernel/l3fp-logic.dtx | 2 +- .../source/latex/l3kernel/l3fp-parse.dtx | 2 +- .../source/latex/l3kernel/l3fp-random.dtx | 2 +- .../source/latex/l3kernel/l3fp-round.dtx | 2 +- .../source/latex/l3kernel/l3fp-symbolic.dtx | 2 +- .../source/latex/l3kernel/l3fp-traps.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3fp-trig.dtx | 2 +- .../source/latex/l3kernel/l3fp-types.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3fp.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3fparray.dtx | 15 +- Master/texmf-dist/source/latex/l3kernel/l3int.dtx | 10 +- .../source/latex/l3kernel/l3intarray.dtx | 2 +- .../source/latex/l3kernel/l3kernel-functions.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3keys.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3legacy.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3luatex.dtx | 6 +- Master/texmf-dist/source/latex/l3kernel/l3msg.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3names.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3prg.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3prop.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3quark.dtx | 65 +-- .../texmf-dist/source/latex/l3kernel/l3regex.dtx | 4 +- Master/texmf-dist/source/latex/l3kernel/l3seq.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3skip.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3sort.dtx | 2 +- .../source/latex/l3kernel/l3str-convert.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3str.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3sys.dtx | 161 ++++++- .../source/latex/l3kernel/l3text-case.dtx | 2 +- .../source/latex/l3kernel/l3text-map.dtx | 2 +- .../source/latex/l3kernel/l3text-purify.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3text.dtx | 14 +- .../source/latex/l3kernel/l3tl-analysis.dtx | 2 +- .../source/latex/l3kernel/l3tl-build.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3tl.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3token.dtx | 4 +- .../texmf-dist/source/latex/l3kernel/l3unicode.dtx | 2 +- .../source/latex/l3packages/l3keys2e/l3keys2e.dtx | 4 +- .../texmf-dist/source/latex/l3packages/xfp/xfp.dtx | 4 +- .../source/latex/l3packages/xparse/xparse.dtx | 19 +- .../latex/l3packages/xtemplate/xtemplate.dtx | 16 +- 91 files changed, 833 insertions(+), 1093 deletions(-) delete mode 100644 Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx delete mode 100644 Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins (limited to 'Master/texmf-dist/source/latex') diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx index c80d51e06d9..4d3b68225ab 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -70,27 +70,27 @@ % \begin{macrocode} \ProvidesExplFile %<*dvipdfmx> - {l3backend-dvipdfmx.def}{2024-02-20}{} + {l3backend-dvipdfmx.def}{2024-03-14}{} {L3 backend support: dvipdfmx} % %<*dvips> - {l3backend-dvips.def}{2024-02-20}{} + {l3backend-dvips.def}{2024-03-14}{} {L3 backend support: dvips} % %<*dvisvgm> - {l3backend-dvisvgm.def}{2024-02-20}{} + {l3backend-dvisvgm.def}{2024-03-14}{} {L3 backend support: dvisvgm} % %<*luatex> - {l3backend-luatex.def}{2024-02-20}{} + {l3backend-luatex.def}{2024-03-14}{} {L3 backend support: PDF output (LuaTeX)} % %<*pdftex> - {l3backend-pdftex.def}{2024-02-20}{} + {l3backend-pdftex.def}{2024-03-14}{} {L3 backend support: PDF output (pdfTeX)} % %<*xetex> - {l3backend-xetex.def}{2024-02-20}{} + {l3backend-xetex.def}{2024-03-14}{} {L3 backend support: XeTeX} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx index 4b0059c2b9e..3fc3243c422 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx index 907ca91c6ee..eaa89add8cf 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx index ee33a717fef..eef86886f58 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -68,7 +68,7 @@ % % \begin{macro}{\@@_backend_literal:n, \@@_backend_literal:e} % The same as literal PostScript: same arguments about positioning apply -% her. +% here. % \begin{macrocode} \cs_new_eq:NN \@@_backend_literal:n \__kernel_backend_literal_postscript:n \cs_generate_variant:Nn \@@_backend_literal:n { e } @@ -81,23 +81,20 @@ % but where we can't split material between separate calls. The % |@beginspecial|/|@endspecial| pair are from |special.pro| and correct the % scale and $y$-axis direction. -% In contrast to \pkg{pgf}, we don't save the current point: -% discussion with Tom Rokici suggested a better way to handle the necessary -% translations (see \cs{@@_backend_box_use:Nnnnn}). (Note that -% |@beginspecial|/|@endspecial| forms a backend scope.) The |[begin]|/^^A -% |[end]| lines are handled differently from the rest as they are -% conceptually different: not really drawing literals but instructions to -% \texttt{dvips} itself. +% As for \pkg{pgf}, we need to save the current point as this is +% required for box placement. (Note that +% |@beginspecial|/|@endspecial| forms a backend scope.) % \begin{macrocode} \cs_new_protected:Npn \@@_backend_begin: { - \__kernel_backend_literal:n { ps::[begin] } + \@@_backend_literal:n { [begin] } + \@@_backend_literal:n { /draw.x~currentpoint~/draw.y~exch~def~def } \@@_backend_literal:n { @beginspecial } } \cs_new_protected:Npn \@@_backend_end: { \@@_backend_literal:n { @endspecial } - \__kernel_backend_literal:n { ps::[end] } + \@@_backend_literal:n { [end] } } % \end{macrocode} % \end{macro} @@ -350,21 +347,23 @@ % Inside a picture |@beginspecial|/|@endspecial| are active, which is % normally a good thing but means that the position and scaling would be off % if the box was inserted directly. To deal with that, there are a number of -% possible approaches. The implementation here was suggested by Tom Rokici -% (author of \texttt{dvips}). We end the current special placement, then -% set the current point with a literal |[begin]|. As for general -% literals, we then use the stack to store the current point and move to -% it. To insert the required transformation, we have to flip the $y$-axis, -% once before and once after it. Then we get back to the \TeX{} reference -% point to insert our content. The clean up has to happen in the right -% places, hence the |[begin]|/|[end]| pair around |restore|. Finally, -% we can return to \enquote{normal} drawing mode. Notice that the set up -% here is very similar to that in \cs{@@_align_currentpoint_\ldots}, but -% the ordering of saving and restoring is different (intermixed). +% possible approaches. A previous implementation suggested by Tom Rokici +% used |@endspecial|/|@beginspecial|. This avoids needing internals of +% \texttt{dvips}, but fails if there the box is used inside a scope +% (see \url{https://github.com/latex3/latex3/issues/1504}). Instead, +% we use the same method as \pkg{pgf}, which means tracking the position +% at the PostScript level. Also note that using |@endspecial| would +% close the scope it creates, meaning that after a box insertion, any +% local changes would be lost. Keeping \texttt{dvips} on track is +% non-trivial, hence the |[begin]|/|[end]| pair before the +% |save| and around the |restore|. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_box_use:Nnnnn #1#2#3#4#5 { - \@@_backend_literal:n { @endspecial } + \@@_backend_literal:n { save } + \@@_backend_literal:n { 72~Resolution~div~72~VResolution~div~neg~scale } + \@@_backend_literal:n { magscale { 1~DVImag~div~dup~scale } if } + \@@_backend_literal:n { draw.x~neg~draw.y~neg~translate } \@@_backend_literal:n { [end] } \@@_backend_literal:n { [begin] } \@@_backend_literal:n { save } @@ -380,7 +379,7 @@ \@@_backend_literal:n { restore } \@@_backend_literal:n { [end] } \@@_backend_literal:n { [begin] } - \@@_backend_literal:n { @beginspecial } + \@@_backend_literal:n { restore } } % \end{macrocode} % \end{macro} diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx index cb959169d99..9360bffd2e1 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx index d7b6d4c37c9..84f8ab53b7a 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx index 6cc972f7d84..a5828bfd905 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -71,9 +71,9 @@ %<*dvips> % \end{macrocode} % -% \begin{macro}{\@@_backend_select:n,\@@_backend_select_aux:n} +% \begin{macro}{\@@_backend_select:n} % \begin{macro}{\@@_backend_fill:n, \@@_backend_stroke:n} -% \begin{macro}{\@@_backend:nnn, \@@_backend:enn} +% \begin{macro}{\@@_backend:nnn} % No stack so set values directly. The need to deal with Distiller and % Ghostscript separately means we use a common auxiliary: the two % systems require different PostScript for transparency. This is @@ -82,26 +82,21 @@ % for the detail on testing for GhostScript. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_select:n #1 - { - \exp_args:Ne \@@_backend_select_aux:n - { \fp_eval:n { min(max(0,#1),1) } } - } -\cs_new_protected:Npn \@@_backend_select_aux:n #1 { \@@_backend:nnn {#1} { fill } { ca } \@@_backend:nnn {#1} { stroke } { CA } } \cs_new_protected:Npn \@@_backend_fill:n #1 { - \@@_backend:enn - { \fp_eval:n { min(max(0,#1),1) } } + \@@_backend:nnn + { #1 } { fill } { ca } } \cs_new_protected:Npn \@@_backend_stroke:n #1 { - \@@_backend:enn - { \fp_eval:n { min(max(0,#1),1) } } + \@@_backend:nnn + { #1 } { stroke } { CA } } @@ -124,7 +119,6 @@ ifelse } } -\cs_generate_variant:Nn \@@_backend:nnn { e } % \end{macrocode} % \end{macro} % \end{macro} @@ -143,7 +137,7 @@ % \begin{macrocode} \bool_lazy_and:nnT { \cs_if_exist_p:N \pdfmanagement_if_active_p: } - { \pdfmanagement_if_active_p:} + { \pdfmanagement_if_active_p: } { %<*luatex|pdftex> \__kernel_color_backend_stack_init:Nnn \c_@@_backend_stack_int @@ -157,23 +151,20 @@ % % \begin{variable}{\l_@@_backend_fill_tl, \l_@@_backend_stroke_tl} % We use |tl| here for speed: at the backend, this should be reasonable. +% Both need to start off fully opaque. % \begin{macrocode} \tl_new:N \l_@@_backend_fill_tl \tl_new:N \l_@@_backend_stroke_tl +\tl_set:Nn \l_@@_backend_fill_tl { 1 } +\tl_set:Nn \l_@@_backend_stroke_tl { 1 } % \end{macrocode} % \end{variable} % -% \begin{macro}{\@@_backend_select:n, \@@_backend_select_aux:n} +% \begin{macro}{\@@_backend_select:n} % \begin{macro}{\@@_backend_reset:} -% Other than the need to evaluate the opacity as an \texttt{fp}, much the -% same as color. +% Much the same as color. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_select:n #1 - { - \exp_args:Ne \@@_backend_select_aux:n - { \fp_eval:n { min(max(0,#1),1) } } - } -\cs_new_protected:Npn \@@_backend_select_aux:n #1 { \tl_set:Nn \l_@@_backend_fill_tl {#1} \tl_set:Nn \l_@@_backend_stroke_tl {#1} @@ -189,12 +180,6 @@ { /opacity #1 ~ gs } \group_insert_after:N \@@_backend_reset: } -\bool_lazy_and:nnF - { \cs_if_exist_p:N \pdfmanagement_if_active_p: } - { \pdfmanagement_if_active_p:} - { - \cs_gset_protected:Npn \@@_backend_select_aux:n #1 { } - } \cs_new_protected:Npn \@@_backend_reset: { %<*dvipdfmx|xetex> @@ -210,26 +195,26 @@ % \end{macro} % % \begin{macro}{\@@_backend_fill:n, \@@_backend_stroke:n} -% \begin{macro}{\@@_backend_fillstroke:nn, \@@_backend_fillstroke:ee} +% \begin{macro}{\@@_backend_fill_stroke:nn} % For separate fill and stroke, we need to work out if we need to do % more work or if we can stick to a single setting. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_fill:n #1 { - \@@_backend_fill_stroke:ee - { \fp_eval:n { min(max(0,#1),1) } } - \l_@@_backend_stroke_tl + \exp_args:Nno \@@_backend_fill_stroke:nn + { #1 } + { \l_@@_backend_stroke_tl } } \cs_new_protected:Npn \@@_backend_stroke:n #1 { - \@@_backend_fill_stroke:ee - \l_@@_backend_fill_tl - { \fp_eval:n { min(max(0,#1),1) } } + \exp_args:No \@@_backend_fill_stroke:nn + { \l_@@_backend_fill_tl } + { #1 } } \cs_new_protected:Npn \@@_backend_fill_stroke:nn #1#2 { \str_if_eq:nnTF {#1} {#2} - { \@@_backend_select_aux:n {#1} } + { \@@_backend_select:n {#1} } { \tl_set:Nn \l_@@_backend_fill_tl {#1} \tl_set:Nn \l_@@_backend_stroke_tl {#2} @@ -237,7 +222,7 @@ { opacity.fill #1 } { << /ca ~ #1 >> } \pdfmanagement_add:nnn { Page / Resources / ExtGState } - { opacity.stroke #1 } + { opacity.stroke #2 } { << /CA ~ #2 >> } %<*dvipdfmx|xetex> \__kernel_backend_literal_pdf:n @@ -249,11 +234,24 @@ \group_insert_after:N \@@_backend_reset: } } -\cs_generate_variant:Nn \@@_backend_fill_stroke:nn { ee } % \end{macrocode} % \end{macro} % \end{macro} % +% \begin{macro}{\@@_backend_select:n, \@@_backend_fill_stroke:nn} +% Redefine them to stubs if pdfmanagement is either not loaded or +% deactivated. +% \begin{macrocode} +\bool_lazy_and:nnF + { \cs_if_exist_p:N \pdfmanagement_if_active_p: } + { \pdfmanagement_if_active_p: } + { + \cs_gset_protected:Npn \@@_backend_select:n #1 { } + \cs_gset_protected:Npn \@@_backend_fill_stroke:nn #1#2 { } + } +% \end{macrocode} +% \end{macro} +% % \begin{macrocode} % % \end{macrocode} @@ -272,9 +270,9 @@ \cs_new_protected:Npn \@@_backend_fill:n #1 { \@@_backend:nn {#1} { fill- } } \cs_new_protected:Npn \@@_backend_stroke:n #1 - { \@@_backend:nn { {#1} } { stroke- } } + { \@@_backend:nn {#1} { stroke- } } \cs_new_protected:Npn \@@_backend:nn #1#2 - { \__kernel_backend_scope:e { #2 opacity = " \fp_eval:n { min(max(0,#1),1) } " } } + { \__kernel_backend_scope:e { #2 opacity = " #1 " } } % \end{macrocode} % \end{macro} % \end{macro} diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx index 472b7adefae..0a16a79f9ea 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx +++ b/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx index 58d4da8bb72..8cbd99cffb1 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -122,7 +122,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3benchmark}{2024-02-20}{} +\ProvidesExplPackage{l3benchmark}{2024-03-14}{} {L3 Experimental benchmarking} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx index 992acaa05c1..fe2207fc1ba 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx index 1244dfa0ec3..bea1d2423c0 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx index e869351f6bc..0b428cad0f2 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -192,8 +192,8 @@ % \begin{macrocode} \cs_new_protected:Npn \draw_path_corner_arc:nn #1#2 { - \dim_set:Nn \l_@@_corner_xarc_dim {#1} - \dim_set:Nn \l_@@_corner_yarc_dim {#2} + \dim_set:Nn \l_@@_corner_xarc_dim { \fp_to_dim:n {#1} } + \dim_set:Nn \l_@@_corner_yarc_dim { \fp_to_dim:n {#2} } \bool_lazy_and:nnTF { \dim_compare_p:nNn \l_@@_corner_xarc_dim = { 0pt } } { \dim_compare_p:nNn \l_@@_corner_yarc_dim = { 0pt } } @@ -700,16 +700,18 @@ % \begin{macrocode} \cs_new_protected:Npn \draw_path_rectangle:nn #1#2 { - \@@_point_process:nnn + \bool_lazy_or:nnTF + { \l_@@_corner_arc_bool } + { \l_@@_matrix_active_bool } { - \bool_lazy_or:nnTF - { \l_@@_corner_arc_bool } - { \l_@@_matrix_active_bool } - { \@@_path_rectangle_rounded:nnnn } - { \@@_path_rectangle:nnnn } + \@@_point_process:nnn \@@_path_rectangle_rounded:nnnn + {#1} {#2} + } + { + \@@_point_process:nnn \@@_path_rectangle:nnnn + { (#1) + ( \l_@@_xshift_dim , \l_@@_yshift_dim ) } + { #2 } } - {#1} - {#2} } \cs_new_protected:Npn \@@_path_rectangle:nnnn #1#2#3#4 { @@ -766,8 +768,8 @@ \@@_point_process:nnn { \@@_path_grid_auxi:eennnn - { \dim_eval:n { \dim_abs:n {#1} } } - { \dim_eval:n { \dim_abs:n {#2} } } + { \dim_abs:n {#1} } + { \dim_abs:n {#2} } } {#3} {#4} } @@ -787,8 +789,8 @@ \cs_new_protected:Npn \@@_path_grid_auxiii:nnnnnn #1#2#3#4#5#6 { \@@_path_grid_auxiv:eennnnnn - { \fp_to_dim:n { #1 * trunc(#3/(#1)) } } - { \fp_to_dim:n { #2 * trunc(#4/(#2)) } } + { \fp_to_dim:n { #1 * ceil(#3/(#1)) } } + { \fp_to_dim:n { #2 * ceil(#4/(#2)) } } {#1} {#2} {#3} {#4} {#5} {#6} } \cs_new_protected:Npn \@@_path_grid_auxiv:nnnnnnnn #1#2#3#4#5#6#7#8 @@ -832,19 +834,20 @@ % \end{macrocode} % \end{variable} % -% \begin{variable}{\l_@@_path_use_bb_bool, \l_@@_path_use_clear_bool} +% \begin{variable}{\l_@@_path_use_clear_bool} % Actions handled at the macro layer. % \begin{macrocode} -\bool_new:N \l_@@_path_use_bb_bool \bool_new:N \l_@@_path_use_clear_bool % \end{macrocode} % \end{variable} % % \begin{macro}{\draw_path_use:n, \draw_path_use_clear:n} +% \begin{macro}{\draw_path_replace_bb:} +% \begin{macro}{\@@_path_replace_bb:NnN} % \begin{macro}{\@@_path_use:n} % \begin{macro}{\@@_path_use_action_draw:, \@@_path_use_action_fillstroke:} % \begin{macro}{\@@_path_use_stroke_bb:} -% \begin{macro}{\@@_path_use_stroke_bb_aux:NnN} +% \begin{macro}{\@@_path_use_bb:NnN} % There are a range of actions which can apply to a path: they are handled % in a single function which can carry out several of them. The first step % is to deal with the special case of clearing the path. @@ -865,6 +868,23 @@ } { \@@_path_use:n { #1 , clear } } } +\cs_new_protected:Npn \draw_path_replace_bb: + { + \@@_path_replace_bb:NnN x { max } + + \@@_path_replace_bb:NnN y { max } + + \@@_path_replace_bb:NnN x { min } - + \@@_path_replace_bb:NnN y { min } - + \@@_softpath_clear: + \@@_path_reset_limits: + } +\cs_new_protected:Npn \@@_path_replace_bb:NnN #1#2#3 + { + \dim_gset:cn { g_@@_ #1#2 _dim } + { + \dim_use:c { g_@@_path_ #1#2 _dim } + #3 0.5 \g_@@_linewidth_dim + } + } % \end{macrocode} % Map over the actions and set up the data: mainly just booleans, % but with the possibility to cover more complex cases. The business end @@ -913,7 +933,10 @@ } } \bool_if:NT \l_@@_path_use_clear_bool - { \@@_softpath_clear: } + { + \@@_softpath_clear: + \@@_path_reset_limits: + } } \cs_new_protected:Npn \@@_path_use_action_draw: { @@ -930,12 +953,12 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_path_use_stroke_bb: { - \@@_path_use_stroke_bb_aux:NnN x { max } + - \@@_path_use_stroke_bb_aux:NnN y { max } + - \@@_path_use_stroke_bb_aux:NnN x { min } - - \@@_path_use_stroke_bb_aux:NnN y { min } - + \@@_path_use_bb:NnN x { max } + + \@@_path_use_bb:NnN y { max } + + \@@_path_use_bb:NnN x { min } - + \@@_path_use_bb:NnN y { min } - } -\cs_new_protected:Npn \@@_path_use_stroke_bb_aux:NnN #1#2#3 +\cs_new_protected:Npn \@@_path_use_bb:NnN #1#2#3 { \dim_compare:nNnF { \dim_use:c { g_@@_ #1#2 _dim } } = { #3 -\c_max_dim } { @@ -956,6 +979,8 @@ % \end{macro} % \end{macro} % \end{macro} +% \end{macro} +% \end{macro} % % \subsection{Scoping paths} % @@ -1017,11 +1042,13 @@ % \end{macrocode} % \end{macro} % -% \begin{macrocode} +% \subsection{Messages} +% +% \begin{macrocode} \msg_new:nnnn { draw } { invalid-path-action } { Invalid~action~'#1'~for~path. } { Paths~can~be~used~with~actions~'draw',~'clip',~'fill'~or~'stroke'. } -% \end{macrocode} +% \end{macrocode} % % \begin{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx index 0cb0fd65079..919f0734402 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx index 56ce949b240..81ab2dfed29 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx index c929e86aa7a..0d5d6d8b6b9 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -163,6 +163,7 @@ % \end{macrocode} % \end{variable} % +% \begin{macro}{\@@_softpath_closepath:} % \begin{macro}{\@@_softpath_curveto:nnnnnn} % \begin{macro} % { @@ -227,6 +228,7 @@ % \end{macro} % \end{macro} % \end{macro} +% \end{macro} % % \begin{macro} % { @@ -260,12 +262,14 @@ { \@@_backend_lineto:nn {#1} {#2} } \cs_new_protected:Npn \@@_softpath_moveto_op:nn #1#2 { \@@_backend_moveto:nn {#1} {#2} } -\cs_new_protected:Npn \@@_softpath_roundpoint_op:nn #1#2 { } +\cs_new_protected:Npn \@@_softpath_roundpoint_op:nn #1#2 + { \@@_softpath_roundpoint_op:nn } \cs_new_protected:Npn \@@_softpath_rectangle_opi:nn #1#2 { \@@_softpath_rectangle_opi:nnNnn {#1} {#2} } \cs_new_protected:Npn \@@_softpath_rectangle_opi:nnNnn #1#2#3#4#5 { \@@_backend_rectangle:nnnn {#1} {#2} {#4} {#5} } - \cs_new_protected:Npn \@@_softpath_rectangle_opii:nn #1#2 { } +\cs_new_protected:Npn \@@_softpath_rectangle_opii:nn #1#2 + { \@@_softpath_rectangle_opii:nn } % \end{macrocode} % \end{macro} % \end{macro} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx index aef5c2111d7..989c10fc2d0 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx index 8e9143420ed..411bf309280 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -114,6 +114,7 @@ \fp_zero:N \l_@@_matrix_b_fp \fp_zero:N \l_@@_matrix_c_fp \fp_set:Nn \l_@@_matrix_d_fp { 1 } + \bool_set_false:N \l_@@_matrix_active_bool } \cs_new_protected:Npn \draw_transform_shift_reset: { @@ -219,7 +220,7 @@ \fp_to_dim:n { #1 + - ( #3 * \l_@@_matrix_a_fp + #4 * \l_@@_matrix_b_fp ) + ( #3 * \l_@@_matrix_a_fp + #4 * \l_@@_matrix_c_fp ) } } \dim_set:Nn \l_@@_yshift_dim @@ -227,7 +228,7 @@ \fp_to_dim:n { #2 + - ( #3 * \l_@@_matrix_c_fp + #4 * \l_@@_matrix_d_fp ) + ( #3 * \l_@@_matrix_b_fp + #4 * \l_@@_matrix_d_fp ) } } } diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx index 2bfa4e00af2..a884b922b22 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx @@ -110,7 +110,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -583,7 +583,7 @@ % % \begin{function}{\draw_path_corner_arc:nn} % \begin{syntax} -% \cs{draw_path_corner_arc:n} \Arg{length1} \Arg{length2} +% \cs{draw_path_corner_arc:nn} \Arg{length1} \Arg{length2} % \end{syntax} % Sets the degree of rounding applied to corners in a path: the two % \meta{length} values are the distances from the corner at which the curving @@ -658,6 +658,18 @@ % at the macro level). % \end{function} % +% \begin{function}{\draw_path_replace_bb:} +% \begin{syntax} +% \cs{draw_path_replace_bb:} +% \end{syntax} +% Replaces the current bounding box of the drawing with one specified by the +% current path: this will be applied even when \cs{l_draw_bb_update_bool} +% is \texttt{false}. The current path is then cleared. Note that +% \cs{l_draw_bb_update_bool} is \emph{not} changed by this function: +% the user may wish to set it to \texttt{false} so that the bounding box +% is then left unchanged by further operations. +% \end{function} +% % \subsubsection{Path operations on drawing axes} % % The standard path functions are all influenced by the active transformation @@ -1181,7 +1193,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3draw}{2024-02-20}{} +\ProvidesExplPackage{l3draw}{2024-03-14}{} {L3 Experimental core drawing support} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx index ccb6f9669ba..97be8ac39bf 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -184,7 +184,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3graphics}{2024-02-20}{} +\ProvidesExplPackage{l3graphics}{2024-03-14}{} {L3 Experimental graphics inclusion support} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3opacity/l3opacity.dtx b/Master/texmf-dist/source/latex/l3experimental/l3opacity/l3opacity.dtx index ba251f971d3..fb293fd31c2 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3opacity/l3opacity.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3opacity/l3opacity.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -65,6 +65,12 @@ % particular, using Adobe Distiller, you will need to enable transparency % in the (text-based) configuration: this is not selectable from the GUI. % +% For users of PDF-based routes, note that opacity only takes effect if +% a \cs{DocumentMetadata}|{}| is added \emph{before} +% \cs[no-index]{documentclass}, which loads and activates +% the PDF management. +% See \file{pdfmanagement-testphase.pdf} for more info. +% % \begin{function}[added = 2021-07-01]{\opacity_select:n} % \begin{syntax} % \cs{opacity_select:n} \Arg{expression} @@ -96,13 +102,21 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3opacity}{2024-02-20}{} +\ProvidesExplPackage{l3opacity}{2024-03-14}{} {L3 Experimental opacity support} % \end{macrocode} % +% \begin{variable} +% Temporary storage. +% \begin{macrocode} +\fp_new:N \l_@@_tmp_fp +% \end{macrocode} +% \end{variable} +% % \begin{macro}{\opacity_select:n, \opacity_fill:n, \opacity_stroke:n} -% \begin{macro}{\@@_select:nN, \@@_select_aux:nN} -% Thin wrapper with error checking. +% \begin{macro}{\@@_select:nN} +% Thin wrapper with error checking. Opacity is passed to backend +% functions as a bounded, evaluated decimal number. % \begin{macrocode} \cs_new_protected:Npn \opacity_select:n #1 { \@@_select:nN {#1} \@@_backend_select:n } @@ -111,14 +125,13 @@ \cs_new_protected:Npn \opacity_stroke:n #1 { \@@_select:nN {#1} \@@_backend_stroke:n } \cs_new_protected:Npn \@@_select:nN #1#2 - { \exp_args:Ne \@@_select_aux:nN { \fp_eval:n {#1} } #2 } -\cs_new_protected:Npn \@@_select_aux:nN #1#2 { + \fp_set:Nn \l_@@_tmp_fp { #1 } \bool_lazy_or:nnTF - { \fp_compare_p:nNn {#1} < { 0 } } - { \fp_compare_p:nNn {#1} > { 1 } } + { \fp_compare_p:nNn \l_@@_tmp_fp < \c_zero_fp } + { \fp_compare_p:nNn \l_@@_tmp_fp > \c_one_fp } { \msg_error:nnn { opacity } { out-of-range } {#1} } - { #2 {#1} } + { \exp_args:Ne #2 { \fp_use:N \l_@@_tmp_fp } } } \msg_new:nnnn { opacity } { out-of-range } { Opacity~value~out~of~range. } diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx index 24aad778725..9ff5b451a9a 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -166,7 +166,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3str-format}{2024-02-20}{} +\ProvidesExplPackage{l3str-format}{2024-03-14}{} {L3 Experimental string formatting} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx deleted file mode 100644 index 186a03d87ad..00000000000 --- a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx +++ /dev/null @@ -1,446 +0,0 @@ -% \iffalse meta-comment -% -%% File: l3sys-shell.dtx -% -% Copyright (C) 2018-2024 The LaTeX Project -% -% It may be distributed and/or modified under the conditions of the -% LaTeX Project Public License (LPPL), either version 1.3c of this -% 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 -% -% This file is part of the "l3experimental bundle" (The Work in LPPL) -% and all files in that bundle must be distributed together. -% -% ----------------------------------------------------------------------- -% -% The development version of the bundle can be found at -% -% https://github.com/latex3/latex3 -% -% for those people who are interested. -% -%<*driver|package> -\RequirePackage{expl3} -% -%<*driver> -\documentclass[full]{l3doc} -\begin{document} - \DocInput{\jobname.dtx} -\end{document} -% -% \fi -% -% \title{^^A -% The \pkg{l3sys-shell} package\\ System shell functions^^A -% } -% -% \author{^^A -% The \LaTeX{} Project\thanks -% {^^A -% E-mail: -% \href{mailto:latex-team@latex-project.org} -% {latex-team@latex-project.org}^^A -% }^^A -% } -% -% \date{Released 2024-02-20} -% -% \maketitle -% -% \begin{documentation} -% -% This module provides platform-neutral interfaces to system shell commands. -% These functions can only access the shell if a document is proceeded using -% \texttt{--shell-escape}, which allows \emph{unrestricted} access to command -% line functions. -% -% In general, arbitrary documents should \emph{not} be processed in this way, -% as shell escape could either accidentally or deliberately lead to unexpected -% side-effects. In that sense, they should be treated like any other arbitrary -% script: with caution. No attempt is made by the functions here to avoid -% injection of additional commands into the arguments. -% -% With the above security caveats in mind, these functions are provided for -% authors where a workflow scripting \emph{within} a \LaTeX{} document is -% preferable to using an external script. The latter would of course also have -% the ability to run arbitrary code. -% -% \begin{function}[added = 2018-07-28]{\sys_shell_cp:nn} -% \begin{syntax} -% \cs{sys_shell_cp:nn} \Arg{source} \Arg{dest} -% \end{syntax} -% Copies the files specified in the \meta{source} (which may include -% wildcards) to the \meta{dest}. The file paths should be specified using -% |/| as a path separator. Copying is \emph{not} recursive: only files at -% the path level given are copied. If unrestricted shell escape is not -% enabled, no action is attempted. -% \end{function} -% -% \begin{function}[added = 2018-07-27]{\sys_shell_mkdir:n} -% \begin{syntax} -% \cs{sys_shell_mkdir:n} \Arg{directory} -% \end{syntax} -% Creates the \meta{directory}, which should be specified using |/| as -% a path separator. If unrestricted shell escape is not enabled, no action is -% attempted. -% \end{function} -% -% \begin{function}[added = 2018-07-28]{\sys_shell_mv:nn} -% \begin{syntax} -% \cs{sys_shell_mv:nn} \Arg{old} \Arg{new} -% \end{syntax} -% Moves the files from the \meta{old} to \meta{new} names/locations: the -% \meta{old} names may include wildcards. In both arguments, |/| should be -% used as the path separator. If unrestricted shell escape is not enabled, no -% action is attempted. -% \end{function} -% -% \begin{function}[added = 2018-07-27]{\sys_shell_rm:n} -% \begin{syntax} -% \cs{sys_shell_rm:n} \Arg{files} -% \end{syntax} -% Removes the \meta{files} (which may include wildcards). The file path should -% be specified using |/| as a path separator. If unrestricted shell escape is -% not enabled, no action is attempted. -% \end{function} -% -% \begin{function}[added = 2018-07-27]{\sys_shell_rmdir:n} -% \begin{syntax} -% \cs{sys_shell_rmdir:n} \Arg{directory} -% \end{syntax} -% Removes the \meta{directory}, which should be specified using |/| as -% a path separator. If unrestricted shell escape is not enabled, no action is -% attempted. -% \end{function} -% -% \begin{function}[added = 2018-07-28]{\sys_get_shell_pwd:N} -% \begin{syntax} -% \cs{sys_get_shell_pwd:N} \meta{str var} -% \end{syntax} -% Sets the \meta{str var} to the present working directory (the output of -% |pwd| on Unix or |cd| on Windows). Note that on Windows this will contain -% string backslash chars (|\|). If unrestricted shell escape is not -% enabled, no action is taken. -% \end{function} -% -% \begin{function}[added = 2018-07-28, updated = 2024-02-20] -% {\sys_shell_split_ls:nN} -% \begin{syntax} -% \cs{sys_shell_split_ls:N} \Arg{glob} \meta{seq} -% \end{syntax} -% Sets the \meta{seq var} to contain one entry per directory listing -% (equivalent to |ls -1| or |dir /b /s| with relative paths) as specified by -% the \meta{glob}: the entries are strings. If unrestricted shell is not -% enabled, no action is taken. -% \end{function} -% -% \end{documentation} -% -% \begin{implementation} -% -% \section{\pkg{l3sys-shell} implementation} -% -% \begin{macrocode} -%<*package> -% \end{macrocode} -% -% \begin{macrocode} -%<@@=sys> -% \end{macrocode} -% -% \begin{macrocode} -\ProvidesExplPackage{l3sys-shell}{2024-02-20}{} - {L3 Experimental system shell functions} -% \end{macrocode} -% -% \begin{variable}{\s_@@_stop} -% Internal scan marks. -% \begin{macrocode} -\scan_new:N \s_@@_stop -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\q_@@_nil} -% Internal quarks. -% \begin{macrocode} -\quark_new:N \q_@@_nil -% \end{macrocode} -% \end{variable} -% -% \begin{macro}[pTF]{\@@_quark_if_nil:n} -% Branching quark conditional. -% \begin{macrocode} -\__kernel_quark_new_conditional:Nn \@@_quark_if_nil:N { F } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}[EXP]{\@@_path_to_win:n} -% \begin{macro}[EXP]{\@@_path_to_win:w} -% \begin{macro}[EXP]{\@@_path_to_win:N} -% A simple expandable search-and-replace for providing Windows-style paths. -% \begin{macrocode} -\cs_new:Npn \@@_path_to_win:n #1 - { - \exp_after:wN \@@_path_to_win:w \tl_to_str:n {#1} ~ \s_@@_stop - } -\cs_new:Npn \@@_path_to_win:w #1 ~ #2 \s_@@_stop - { - \@@_path_to_win:N #1 \q_@@_nil - \tl_if_empty:nF {#2} - { - \c_space_tl - \@@_path_to_win:w #2 \s_@@_stop - } - } -\cs_new:Npn \@@_path_to_win:N #1 - { - \@@_quark_if_nil:NF #1 - { - \token_if_eq_meaning:NNTF #1 / - { \c_backslash_str } - {#1} - \@@_path_to_win:N - } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\sys_shell_cp:nn} -% Simple Unix-like file copying: at some stage we may need a directory-only -% version as Windows and Unix have different requirements here. -% \begin{macrocode} -\cs_new_protected:Npe \sys_shell_cp:nn #1#2 - { - \sys_if_shell_unrestricted:T - { - \sys_shell_now:e - { - \sys_if_platform_unix:T - { - cp~-f~ \exp_not:N \tl_to_str:n {#1} ~ - \exp_not:N \tl_to_str:n {#2} - } - \sys_if_platform_windows:T - { - copy~/y~ \exp_not:N \@@_path_to_win:n {#1} ~ - \exp_not:N \@@_path_to_win:n {#2} - } - } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\sys_shell_mkdir:n} -% Windows (with the extensions) will automatically make directory trees but -% issues a warning if the directory already exists: avoid by including a -% test. -% \begin{macrocode} -\cs_new_protected:Npe \sys_shell_mkdir:n #1 - { - \sys_if_shell_unrestricted:T - { - \sys_shell_now:e - { - \sys_if_platform_unix:T - { mkdir~-p~ \exp_not:N \tl_to_str:n {#1} } - \sys_if_platform_windows:T - { - if~not~exist~ - \exp_not:N \@@_path_to_win:n { #1 / nul } ~ - mkdir~ \exp_not:N \@@_path_to_win:n {#1} - } - } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\sys_shell_mv:nn} -% On Windows we do not have a single |mv| operation, so copy-and-delete -% instead. -% \begin{macrocode} -\cs_new_protected:Npe \sys_shell_mv:nn #1#2 - { - \sys_if_shell_unrestricted:T - { - \sys_shell_now:e - { - \sys_if_platform_unix:T - { - mv~ \exp_not:N \tl_to_str:n {#1} ~ - \exp_not:N \tl_to_str:n {#2} - } - \sys_if_platform_windows:T - { - copy~/y~ \exp_not:N \@@_path_to_win:n {#1} ~ - \exp_not:N \@@_path_to_win:n {#2} - \token_to_str:N & \token_to_str:N & - del~/f~/q~\exp_not:N \@@_path_to_win:n {#1} - } - } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\sys_shell_rm:n} -% Deletion: obviously a big health warning here! -% \begin{macrocode} -\cs_new_protected:Npe \sys_shell_rm:n #1 - { - \sys_if_shell_unrestricted:T - { - \sys_shell_now:e - { - \sys_if_platform_unix:T - { rm~-f~ \exp_not:N \tl_to_str:n {#1} } - \sys_if_platform_windows:T - { del~/f~/q~ \exp_not:N \@@_path_to_win:n {#1} } - } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\sys_shell_rmdir:n} -% When removing a directory, we create it first as that avoids errors in -% the Windows case. -% \begin{macrocode} -\cs_new_protected:Npe \sys_shell_rmdir:n #1 - { - \sys_if_shell_unrestricted:T - { - \sys_shell_mkdir:n {#1} - \sys_shell_now:e - { - \sys_if_platform_unix:T - { rm~-rf~ \exp_not:N \tl_to_str:n {#1} } - \sys_if_platform_windows:T - { rmdir~/s~/q~ \exp_not:N \@@_path_to_win:n {#1} } - } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{variable}{\l_@@_tmp_seq, \l_@@_tmp_tl} -% Scratch space. -% \begin{macrocode} -\seq_new:N \l_@@_tmp_seq -\tl_new:N \l_@@_tmp_tl -% \end{macrocode} -% \end{variable} -% -% \begin{macro}{\sys_get_shell_pwd:N} -% Getting the path is easy: the main work is avoiding loosing any -% information. (This information can be obtained using the recorder file: -% that does not require shell escape. However, it's hard to see how it might -% be useful without the other file functions.) -% \begin{macrocode} -\cs_new_protected:Npe \sys_get_shell_pwd:N #1 - { - \sys_if_shell_unrestricted:T - { - \exp_not:N \sys_get_shell:nnN - { - \sys_if_platform_unix:T { pwd } - \sys_if_platform_windows:T { cd } - } - { - \char_set_catcode_other:N \exp_not:N \\ - \char_set_catcode_other:N \exp_not:N \# - \char_set_catcode_other:N \exp_not:N \~ - \char_set_catcode_other:N \exp_not:N \% - \char_set_catcode_space:N \exp_not:N \ % - \tex_endlinechar:D -1 \scan_stop: - } - \exp_not:N \l_@@_tmp_tl - \str_set:NV #1 \exp_not:N \l_@@_tmp_tl - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\sys_shell_split_ls:nN} -% \begin{macro}{\@@_shell_split_ls:nN} -% \begin{macro}{\@@_shell_split_ls:w} -% Getting a one-per-line listing is easy enough. We need to set -% \cs{ExplSyntaxOff} as that deals with the end-of-line character. After that, -% just a case of tidying up. The listing always ends in |^^M| so there is an -% extra entry to trim. -% \begin{macrocode} -\cs_new_protected:Npe \sys_shell_split_ls:nN #1#2 - { - \sys_if_shell_unrestricted:T - { - \exp_not:N \exp_args:Ne \exp_not:N \sys_get_shell:nnN - { - \sys_if_platform_unix:T { ls~-1~ #1 } - \sys_if_platform_windows:T - { dir~/b~/s~ \exp_not:N \@@_path_to_win:n {#1} } - } - { - \ExplSyntaxOff - \char_set_catcode_other:N \exp_not:N \\ - \char_set_catcode_other:N \exp_not:N \# - \char_set_catcode_other:N \exp_not:N \~ - \char_set_catcode_other:N \exp_not:N \% - \char_set_catcode_other:n { 13 } - } - \exp_not:N \l_@@_tmp_tl - \str_set:NV \exp_not:N \l_@@_tmp_tl \exp_not:N \l_@@_tmp_tl - \seq_set_split:NnV #2 { \char_generate:nn { `\^^M } { 12 } } - \exp_not:N \l_@@_tmp_tl - \seq_pop_right:NN #2 \exp_not:N \l_@@_tmp_tl - \exp_not:N \tl_if_blank:eTF { \exp_not:N \seq_item:Nn #2 { 1 } } - { \seq_clear:N #2 } - \sys_if_platform_windows:T - { - \sys_get_shell_pwd:N \exp_not:N \l_@@_tmp_tl - \exp_not:N \exp_args:NV \exp_not:N \@@_shell_split_ls:nN - \exp_not:N \l_@@_tmp_tl #2 - } - } - } -% \end{macrocode} -% On Windows, we can either get just file names (|dir /b|) or file names with -% complete paths (|dir /s /b|), but not file names with relative paths in -% a simple way. So we take the full paths and trim off the current working -% directory. Normalization gives the same results as |ls|, hopefully. -% \begin{macrocode} -\sys_if_platform_windows:T - { - \cs_new_protected:Npe \@@_shell_split_ls:nN #1#2 - { - \cs_set:Npn \exp_not:N \@@_shell_split_ls:w #1 \c_backslash_str { } - \seq_set_eq:NN \exp_not:N \l_@@_tmp_seq #2 - \seq_clear:N #2 - \seq_map_inline:Nn \exp_not:N \l_@@_tmp_seq - { - \tl_set:Ne \exp_not:N \l_@@_tmp_tl - { \exp_not:N \@@_shell_split_ls:w ##1 } - \tl_replace_all:Nnn \exp_not:N \l_@@_tmp_tl - { \c_backslash_str } { / } - \seq_put_right:NV #2 \exp_not:N \l_@@_tmp_tl - } - } - \cs_new:Npn \@@_shell_split_ls:w { } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macrocode} -% -% \end{macrocode} -% -% \end{implementation} -% -% \PrintIndex diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins deleted file mode 100644 index 8e5e7169d90..00000000000 --- a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins +++ /dev/null @@ -1,62 +0,0 @@ -\iffalse meta-comment - -File: l3sys-shell.ins - -Copyright (C) 2018-2024 The LaTeX Project - -It may be distributed and/or modified under the conditions of the -LaTeX Project Public License (LPPL), either version 1.3c of this -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 - -This file is part of the "l3experimental bundle" (The Work in LPPL) -and all files in that bundle must be distributed together. - ------------------------------------------------------------------------ - -The development version of the bundle can be found at - - https://github.com/latex3/latex3 - -for those people who are interested. - ------------------------------------------------------------------------ - -Any modification of this file should ensure that the copyright and -license information is placed in the derived files. - -\fi - -\input docstrip % -\askforoverwritefalse - -\preamble - -Copyright (C) 2018-2024 The LaTeX Project - -It may be distributed and/or modified under the conditions of -the LaTeX Project Public License (LPPL), either version 1.3c of -this 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 - -This file is part of the "l3experimental bundle" (The Work in LPPL) -and all files in that bundle must be distributed together. - -\endpreamble -% stop docstrip adding \endinput -\postamble -\endpostamble - -\keepsilent - -\generate{\file{l3sys-shell.sty} - { - \from{l3sys-shell.dtx}{package} - } -} - -\endbatchfile diff --git a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx index c84f21ae973..404171ddc1b 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx @@ -53,7 +53,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -672,7 +672,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xcoffins}{2024-02-20}{} +\ProvidesExplPackage{xcoffins}{2024-03-14}{} {L3 Experimental design level coffins} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx index 724d0d151d2..8299d51d117 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx @@ -61,7 +61,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -686,7 +686,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3galley}{2024-02-20}{} +\ProvidesExplPackage{l3galley}{2024-03-14}{} {L3 Experimental galley code} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx index 25344df931a..5e4389eb952 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -731,7 +731,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xgalley}{2024-02-20}{} +\ProvidesExplPackage{xgalley}{2024-03-14}{} {L3 Experimental galley} \RequirePackage{xtemplate,l3galley} % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx index 2c3f5f892a3..76ef8ec9193 100644 --- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx @@ -24,7 +24,7 @@ % %<*driver|generic|package|2ekernel> % -\def\ExplFileDate{2024-02-20}% +\def\ExplFileDate{2024-03-14}% %<*driver> \documentclass[full]{l3doc} \usepackage{graphicx} @@ -51,7 +51,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -1695,6 +1695,16 @@ {\ExplFileDate\space L3 programming layer}% % \end{macrocode} % +% \begin{macrocode} +\ifnum\currentgrouplevel=0 % +\else + \errhelp{expl3 cannot be loaded inside a group: + reading the code has been aborted.}% + \errmessage{expl3 Error: Loading attempted inside a group!}% + \expandafter\endinput +\fi +% \end{macrocode} +% % \begin{variable}[int]{\l@expl@tidy@tl} % Save the category code of |@| and then set it to \enquote{letter}. % \begin{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx index 67bd4b8791a..66e999fe62c 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -1047,7 +1047,7 @@ % \texttt{n} arguments may be an unbraced single token % (\emph{i.e.}~an \texttt{N} argument). % \begin{texnote} -% These are equivalent to \LaTeXe{}'s \tn{@gobble}, \tn{@gobbbletwo}, +% These are equivalent to \LaTeXe{}'s \tn{@gobble}, \tn{@gobbletwo}, % \emph{etc.} % \end{texnote} % \end{function} @@ -1387,17 +1387,17 @@ % } % Then some conditionals. % \begin{macrocode} -\tex_let:D \if_true: \tex_iftrue:D -\tex_let:D \if_false: \tex_iffalse:D -\tex_let:D \or: \tex_or:D -\tex_let:D \else: \tex_else:D -\tex_let:D \fi: \tex_fi:D -\tex_let:D \reverse_if:N \tex_unless:D -\tex_let:D \if:w \tex_if:D -\tex_let:D \if_charcode:w \tex_if:D -\tex_let:D \if_catcode:w \tex_ifcat:D -\tex_let:D \if_meaning:w \tex_ifx:D -\tex_let:D \if_bool:N \tex_ifodd:D +\tex_global:D \tex_let:D \if_true: \tex_iftrue:D +\tex_global:D \tex_let:D \if_false: \tex_iffalse:D +\tex_global:D \tex_let:D \or: \tex_or:D +\tex_global:D \tex_let:D \else: \tex_else:D +\tex_global:D \tex_let:D \fi: \tex_fi:D +\tex_global:D \tex_let:D \reverse_if:N \tex_unless:D +\tex_global:D \tex_let:D \if:w \tex_if:D +\tex_global:D \tex_let:D \if_charcode:w \tex_if:D +\tex_global:D \tex_let:D \if_catcode:w \tex_ifcat:D +\tex_global:D \tex_let:D \if_meaning:w \tex_ifx:D +\tex_global:D \tex_let:D \if_bool:N \tex_ifodd:D % \end{macrocode} % \end{macro} % @@ -1410,20 +1410,20 @@ % } % \TeX{} lets us detect some if its modes. % \begin{macrocode} -\tex_let:D \if_mode_math: \tex_ifmmode:D -\tex_let:D \if_mode_horizontal: \tex_ifhmode:D -\tex_let:D \if_mode_vertical: \tex_ifvmode:D -\tex_let:D \if_mode_inner: \tex_ifinner:D +\tex_global:D \tex_let:D \if_mode_math: \tex_ifmmode:D +\tex_global:D \tex_let:D \if_mode_horizontal: \tex_ifhmode:D +\tex_global:D \tex_let:D \if_mode_vertical: \tex_ifvmode:D +\tex_global:D \tex_let:D \if_mode_inner: \tex_ifinner:D % \end{macrocode} % \end{macro} % % \begin{macro}[EXP]{\if_cs_exist:N, \if_cs_exist:w, \cs:w, \cs_end:} % Building csnames and testing if control sequences exist. % \begin{macrocode} -\tex_let:D \if_cs_exist:N \tex_ifdefined:D -\tex_let:D \if_cs_exist:w \tex_ifcsname:D -\tex_let:D \cs:w \tex_csname:D -\tex_let:D \cs_end: \tex_endcsname:D +\tex_global:D \tex_let:D \if_cs_exist:N \tex_ifdefined:D +\tex_global:D \tex_let:D \if_cs_exist:w \tex_ifcsname:D +\tex_global:D \tex_let:D \cs:w \tex_csname:D +\tex_global:D \tex_let:D \cs_end: \tex_endcsname:D % \end{macrocode} % \end{macro} % @@ -1431,28 +1431,28 @@ % The five |\exp_| functions are used in the \pkg{l3expan} module % where they are described. % \begin{macrocode} -\tex_let:D \exp_after:wN \tex_expandafter:D -\tex_let:D \exp_not:N \tex_noexpand:D -\tex_let:D \exp_not:n \tex_unexpanded:D -\tex_let:D \exp:w \tex_romannumeral:D -\tex_chardef:D \exp_end: = 0 ~ +\tex_global:D \tex_let:D \exp_after:wN \tex_expandafter:D +\tex_global:D \tex_let:D \exp_not:N \tex_noexpand:D +\tex_global:D \tex_let:D \exp_not:n \tex_unexpanded:D +\tex_global:D \tex_let:D \exp:w \tex_romannumeral:D +\tex_global:D \tex_chardef:D \exp_end: = 0 ~ % \end{macrocode} % \end{macro} % % \begin{macro}[EXP]{\token_to_meaning:N, \cs_meaning:N} % Examining a control sequence or token. % \begin{macrocode} -\tex_let:D \token_to_meaning:N \tex_meaning:D -\tex_let:D \cs_meaning:N \tex_meaning:D +\tex_global:D \tex_let:D \token_to_meaning:N \tex_meaning:D +\tex_global:D \tex_let:D \cs_meaning:N \tex_meaning:D % \end{macrocode} % \end{macro} % % \begin{macro}[EXP]{\tl_to_str:n, \token_to_str:N, \__kernel_tl_to_str:w} % Making strings. % \begin{macrocode} -\tex_let:D \tl_to_str:n \tex_detokenize:D -\tex_let:D \token_to_str:N \tex_string:D -\tex_let:D \__kernel_tl_to_str:w \tex_detokenize:D +\tex_global:D \tex_let:D \tl_to_str:n \tex_detokenize:D +\tex_global:D \tex_let:D \token_to_str:N \tex_string:D +\tex_global:D \tex_let:D \__kernel_tl_to_str:w \tex_detokenize:D % \end{macrocode} % \end{macro} % @@ -1461,9 +1461,9 @@ % versions that are safe inside alignments. These safe versions are % defined in the \pkg{l3prg} module. % \begin{macrocode} -\tex_let:D \scan_stop: \tex_relax:D -\tex_let:D \group_begin: \tex_begingroup:D -\tex_let:D \group_end: \tex_endgroup:D +\tex_global:D \tex_let:D \scan_stop: \tex_relax:D +\tex_global:D \tex_let:D \group_begin: \tex_begingroup:D +\tex_global:D \tex_let:D \group_end: \tex_endgroup:D % \end{macrocode} % \end{macro} % @@ -1474,24 +1474,24 @@ % \begin{macro}[EXP]{\if_int_compare:w, \@@_to_roman:w} % For integers. % \begin{macrocode} -\tex_let:D \if_int_compare:w \tex_ifnum:D -\tex_let:D \@@_to_roman:w \tex_romannumeral:D +\tex_global:D \tex_let:D \if_int_compare:w \tex_ifnum:D +\tex_global:D \tex_let:D \@@_to_roman:w \tex_romannumeral:D % \end{macrocode} % \end{macro} % % \begin{macro}{\group_insert_after:N} % Adding material after the end of a group. % \begin{macrocode} -\tex_let:D \group_insert_after:N \tex_aftergroup:D +\tex_global:D \tex_let:D \group_insert_after:N \tex_aftergroup:D % \end{macrocode} % \end{macro} % % \begin{macro}[EXP]{\exp_args:Nc, \exp_args:cc} % Discussed in \pkg{l3expan}, but needed much earlier. % \begin{macrocode} -\tex_long:D \tex_def:D \exp_args:Nc #1#2 +\tex_long:D \tex_gdef:D \exp_args:Nc #1#2 { \exp_after:wN #1 \cs:w #2 \cs_end: } -\tex_long:D \tex_def:D \exp_args:cc #1#2 +\tex_long:D \tex_gdef:D \exp_args:cc #1#2 { \cs:w #1 \exp_after:wN \cs_end: \cs:w #2 \cs_end: } % \end{macrocode} % \end{macro} @@ -1505,8 +1505,8 @@ % are used. The \cs{cs_meaning:c} command must check for an undefined % control sequence to avoid defining it mistakenly. % \begin{macrocode} -\tex_def:D \token_to_str:c { \exp_args:Nc \token_to_str:N } -\tex_long:D \tex_def:D \cs_meaning:c #1 +\tex_gdef:D \token_to_str:c { \exp_args:Nc \token_to_str:N } +\tex_long:D \tex_gdef:D \cs_meaning:c #1 { \if_cs_exist:w #1 \cs_end: \exp_after:wN \use_i:nn @@ -1516,7 +1516,7 @@ { \exp_args:Nc \cs_meaning:N {#1} } { \tl_to_str:n {undefined} } } -\tex_let:D \token_to_meaning:c = \cs_meaning:c +\tex_global:D \tex_let:D \token_to_meaning:c = \cs_meaning:c % \end{macrocode} % \end{macro} % @@ -1531,7 +1531,7 @@ % required but it can't be used until the allocation has been set % up properly! % \begin{macrocode} -\tex_chardef:D \c_zero_int = 0 ~ +\tex_global:D \tex_chardef:D \c_zero_int = 0 ~ % \end{macrocode} % \end{variable} % @@ -1542,12 +1542,12 @@ % more registers available than \eTeX{}. % \begin{macrocode} \tex_ifdefined:D \tex_luatexversion:D - \tex_chardef:D \c_max_register_int = 65 535 ~ + \tex_global:D \tex_chardef:D \c_max_register_int = 65 535 ~ \tex_else:D \tex_ifdefined:D \tex_omathchardef:D - \tex_omathchardef:D \c_max_register_int = 65535 ~ + \tex_global:D \tex_omathchardef:D \c_max_register_int = 65535 ~ \tex_else:D - \tex_mathchardef:D \c_max_register_int = 32767 ~ + \tex_global:D \tex_mathchardef:D \c_max_register_int = 32767 ~ \tex_fi:D \tex_fi:D % \end{macrocode} @@ -1556,39 +1556,7 @@ % \subsection{Defining functions} % % We start by providing functions for the typical definition -% functions. First the local ones. -% -% \begin{macro} -% { -% \cs_set_nopar:Npn , \cs_set_nopar:Npe , \cs_set_nopar:Npx , -% \cs_set:Npn , \cs_set:Npe , \cs_set:Npx , -% \cs_set_protected_nopar:Npn , \cs_set_protected_nopar:Npe , \cs_set_protected_nopar:Npx , -% \cs_set_protected:Npn , \cs_set_protected:Npe , \cs_set_protected:Npx -% } -% All assignment functions in \LaTeX3 should be naturally protected; -% after all, the \TeX{} primitives for assignments are and it can be -% a cause of problems if others aren't. -% \begin{macrocode} -\tex_let:D \cs_set_nopar:Npn \tex_def:D -\tex_let:D \cs_set_nopar:Npe \tex_edef:D -\tex_let:D \cs_set_nopar:Npx \tex_edef:D -\tex_protected:D \tex_long:D \tex_def:D \cs_set:Npn - { \tex_long:D \tex_def:D } -\tex_protected:D \tex_long:D \tex_def:D \cs_set:Npe - { \tex_long:D \tex_edef:D } -\tex_let:D \cs_set:Npx \cs_set:Npe -\tex_protected:D \tex_long:D \tex_def:D \cs_set_protected_nopar:Npn - { \tex_protected:D \tex_def:D } -\tex_protected:D \tex_long:D \tex_def:D \cs_set_protected_nopar:Npe - { \tex_protected:D \tex_edef:D } -\tex_let:D \cs_set_protected_nopar:Npx \cs_set_protected_nopar:Npe -\tex_protected:D \tex_long:D \tex_def:D \cs_set_protected:Npn - { \tex_protected:D \tex_long:D \tex_def:D } -\tex_protected:D \tex_long:D \tex_def:D \cs_set_protected:Npe - { \tex_protected:D \tex_long:D \tex_edef:D } -\tex_let:D \cs_set_protected:Npx \cs_set_protected:Npe -% \end{macrocode} -% \end{macro} +% functions. First the global ones. % % \begin{macro} % { @@ -1597,26 +1565,58 @@ % \cs_gset_protected_nopar:Npn , \cs_gset_protected_nopar:Npe , \cs_gset_protected_nopar:Npx , % \cs_gset_protected:Npn , \cs_gset_protected:Npe , \cs_gset_protected:Npx % } -% Global versions of the above functions. +% All assignment functions in \LaTeX3 should be naturally protected; +% after all, the \TeX{} primitives for assignments are and it can be +% a cause of problems if others aren't. % \begin{macrocode} -\tex_let:D \cs_gset_nopar:Npn \tex_gdef:D -\tex_let:D \cs_gset_nopar:Npe \tex_xdef:D -\tex_let:D \cs_gset_nopar:Npx \tex_xdef:D -\cs_set_protected:Npn \cs_gset:Npn +\tex_global:D \tex_let:D \cs_gset_nopar:Npn \tex_gdef:D +\tex_global:D \tex_let:D \cs_gset_nopar:Npe \tex_xdef:D +\tex_global:D \tex_let:D \cs_gset_nopar:Npx \tex_xdef:D +\tex_protected:D \tex_long:D \tex_gdef:D \cs_gset:Npn { \tex_long:D \tex_gdef:D } -\cs_set_protected:Npn \cs_gset:Npe +\tex_protected:D \tex_long:D \tex_gdef:D \cs_gset:Npe { \tex_long:D \tex_xdef:D } -\tex_let:D \cs_gset:Npx \cs_gset:Npe -\cs_set_protected:Npn \cs_gset_protected_nopar:Npn +\tex_global:D \tex_let:D \cs_gset:Npx \cs_gset:Npe +\tex_protected:D \tex_long:D \tex_gdef:D \cs_gset_protected_nopar:Npn { \tex_protected:D \tex_gdef:D } -\cs_set_protected:Npn \cs_gset_protected_nopar:Npe +\tex_protected:D \tex_long:D \tex_gdef:D \cs_gset_protected_nopar:Npe { \tex_protected:D \tex_xdef:D } -\tex_let:D \cs_gset_protected_nopar:Npx \cs_gset_protected_nopar:Npe -\cs_set_protected:Npn \cs_gset_protected:Npn +\tex_global:D \tex_let:D \cs_gset_protected_nopar:Npx \cs_gset_protected_nopar:Npe +\tex_protected:D \tex_long:D \tex_gdef:D \cs_gset_protected:Npn { \tex_protected:D \tex_long:D \tex_gdef:D } -\cs_set_protected:Npn \cs_gset_protected:Npe +\tex_protected:D \tex_long:D \tex_gdef:D \cs_gset_protected:Npe { \tex_protected:D \tex_long:D \tex_xdef:D } -\tex_let:D \cs_gset_protected:Npx \cs_gset_protected:Npe +\tex_global:D \tex_let:D \cs_gset_protected:Npx \cs_gset_protected:Npe +% \end{macrocode} +% \end{macro} +% +% \begin{macro} +% { +% \cs_set_nopar:Npn , \cs_set_nopar:Npe , \cs_set_nopar:Npx , +% \cs_set:Npn , \cs_set:Npe , \cs_set:Npx , +% \cs_set_protected_nopar:Npn , \cs_set_protected_nopar:Npe , \cs_set_protected_nopar:Npx , +% \cs_set_protected:Npn , \cs_set_protected:Npe , \cs_set_protected:Npx +% } +% Local versions of the above functions. +% \begin{macrocode} +\tex_global:D \tex_let:D \cs_set_nopar:Npn \tex_def:D +\tex_global:D \tex_let:D \cs_set_nopar:Npe \tex_edef:D +\tex_global:D \tex_let:D \cs_set_nopar:Npx \tex_edef:D +\cs_gset_protected:Npn \cs_set:Npn + { \tex_long:D \tex_def:D } +\cs_gset_protected:Npn \cs_set:Npe + { \tex_long:D \tex_edef:D } +\tex_global:D \tex_let:D \cs_set:Npx \cs_set:Npe +\cs_gset_protected:Npn \cs_set_protected_nopar:Npn + { \tex_protected:D \tex_def:D } +\cs_gset_protected:Npn \cs_set_protected_nopar:Npe + { \tex_protected:D \tex_edef:D } +\tex_global:D \tex_let:D \cs_set_protected_nopar:Npx \cs_set_protected_nopar:Npe +\cs_gset_protected:Npn \cs_set_protected:Npn + { \tex_protected:D \tex_long:D \tex_def:D } +\cs_gset_protected:Npn \cs_set_protected:Npe + { \tex_protected:D \tex_long:D \tex_edef:D } +\tex_global:D \tex_let:D \cs_set_protected:Npx \cs_set_protected:Npe % \end{macrocode} % \end{macro} % @@ -1631,14 +1631,14 @@ % used in defining conditionals. We don't use |tl| methods because % \pkg{l3basics} is loaded earlier. % \begin{macrocode} -\cs_set_nopar:Npn \l_@@_internal_tl { } +\cs_gset_nopar:Npn \l_@@_internal_tl { } % \end{macrocode} % \end{variable} % % \begin{macro}[EXP]{\use:c} % This macro grabs its argument and returns a csname from it. % \begin{macrocode} -\cs_set:Npn \use:c #1 { \cs:w #1 \cs_end: } +\cs_gset:Npn \use:c #1 { \cs:w #1 \cs_end: } % \end{macrocode} % \end{macro} % @@ -1646,7 +1646,7 @@ % Fully expands its argument and passes it to the input stream. Uses % the reserved \cs{l_@@_internal_tl} which we've set up above. % \begin{macrocode} -\cs_set_protected:Npn \use:x #1 +\cs_gset_protected:Npn \use:x #1 { \cs_set_nopar:Npx \l_@@_internal_tl {#1} \l_@@_internal_tl @@ -1660,7 +1660,7 @@ % % \begin{macro}[EXP]{\use:e} % \begin{macrocode} -\cs_set:Npn \use:e #1 { \tex_expanded:D {#1} } +\cs_gset:Npn \use:e #1 { \tex_expanded:D {#1} } % \end{macrocode} % \end{macro} % @@ -1672,18 +1672,18 @@ % These macros grab their arguments and return them back to the input % (with outer braces removed). % \begin{macrocode} -\cs_set:Npn \use:n #1 {#1} -\cs_set:Npn \use:nn #1#2 {#1#2} -\cs_set:Npn \use:nnn #1#2#3 {#1#2#3} -\cs_set:Npn \use:nnnn #1#2#3#4 {#1#2#3#4} +\cs_gset:Npn \use:n #1 {#1} +\cs_gset:Npn \use:nn #1#2 {#1#2} +\cs_gset:Npn \use:nnn #1#2#3 {#1#2#3} +\cs_gset:Npn \use:nnnn #1#2#3#4 {#1#2#3#4} % \end{macrocode} % \end{macro} % % \begin{macro}[EXP]{\use_i:nn, \use_ii:nn} % The equivalent to \LaTeXe{}'s \tn{@firstoftwo} and \tn{@secondoftwo}. % \begin{macrocode} -\cs_set:Npn \use_i:nn #1#2 {#1} -\cs_set:Npn \use_ii:nn #1#2 {#2} +\cs_gset:Npn \use_i:nn #1#2 {#1} +\cs_gset:Npn \use_ii:nn #1#2 {#2} % \end{macrocode} % \end{macro} % @@ -1705,60 +1705,60 @@ % } % We also need something for picking up arguments from a longer list. % \begin{macrocode} -\cs_set:Npn \use_i:nnn #1#2#3 {#1} -\cs_set:Npn \use_ii:nnn #1#2#3 {#2} -\cs_set:Npn \use_iii:nnn #1#2#3 {#3} -\cs_set:Npn \use_i:nnnn #1#2#3#4 {#1} -\cs_set:Npn \use_ii:nnnn #1#2#3#4 {#2} -\cs_set:Npn \use_iii:nnnn #1#2#3#4 {#3} -\cs_set:Npn \use_iv:nnnn #1#2#3#4 {#4} -\cs_set:Npn \use_i:nnnnn #1#2#3#4#5 {#1} -\cs_set:Npn \use_ii:nnnnn #1#2#3#4#5 {#2} -\cs_set:Npn \use_iii:nnnnn #1#2#3#4#5 {#3} -\cs_set:Npn \use_iv:nnnnn #1#2#3#4#5 {#4} -\cs_set:Npn \use_v:nnnnn #1#2#3#4#5 {#5} -\cs_set:Npn \use_i:nnnnnn #1#2#3#4#5#6 {#1} -\cs_set:Npn \use_ii:nnnnnn #1#2#3#4#5#6 {#2} -\cs_set:Npn \use_iii:nnnnnn #1#2#3#4#5#6 {#3} -\cs_set:Npn \use_iv:nnnnnn #1#2#3#4#5#6 {#4} -\cs_set:Npn \use_v:nnnnnn #1#2#3#4#5#6 {#5} -\cs_set:Npn \use_vi:nnnnnn #1#2#3#4#5#6 {#6} -\cs_set:Npn \use_i:nnnnnnn #1#2#3#4#5#6#7 {#1} -\cs_set:Npn \use_ii:nnnnnnn #1#2#3#4#5#6#7 {#2} -\cs_set:Npn \use_iii:nnnnnnn #1#2#3#4#5#6#7 {#3} -\cs_set:Npn \use_iv:nnnnnnn #1#2#3#4#5#6#7 {#4} -\cs_set:Npn \use_v:nnnnnnn #1#2#3#4#5#6#7 {#5} -\cs_set:Npn \use_vi:nnnnnnn #1#2#3#4#5#6#7 {#6} -\cs_set:Npn \use_vii:nnnnnnn #1#2#3#4#5#6#7 {#7} -\cs_set:Npn \use_i:nnnnnnnn #1#2#3#4#5#6#7#8 {#1} -\cs_set:Npn \use_ii:nnnnnnnn #1#2#3#4#5#6#7#8 {#2} -\cs_set:Npn \use_iii:nnnnnnnn #1#2#3#4#5#6#7#8 {#3} -\cs_set:Npn \use_iv:nnnnnnnn #1#2#3#4#5#6#7#8 {#4} -\cs_set:Npn \use_v:nnnnnnnn #1#2#3#4#5#6#7#8 {#5} -\cs_set:Npn \use_vi:nnnnnnnn #1#2#3#4#5#6#7#8 {#6} -\cs_set:Npn \use_vii:nnnnnnnn #1#2#3#4#5#6#7#8 {#7} -\cs_set:Npn \use_viii:nnnnnnnn #1#2#3#4#5#6#7#8 {#8} -\cs_set:Npn \use_i:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#1} -\cs_set:Npn \use_ii:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#2} -\cs_set:Npn \use_iii:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#3} -\cs_set:Npn \use_iv:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#4} -\cs_set:Npn \use_v:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#5} -\cs_set:Npn \use_vi:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#6} -\cs_set:Npn \use_vii:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#7} -\cs_set:Npn \use_viii:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#8} -\cs_set:Npn \use_ix:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#9} +\cs_gset:Npn \use_i:nnn #1#2#3 {#1} +\cs_gset:Npn \use_ii:nnn #1#2#3 {#2} +\cs_gset:Npn \use_iii:nnn #1#2#3 {#3} +\cs_gset:Npn \use_i:nnnn #1#2#3#4 {#1} +\cs_gset:Npn \use_ii:nnnn #1#2#3#4 {#2} +\cs_gset:Npn \use_iii:nnnn #1#2#3#4 {#3} +\cs_gset:Npn \use_iv:nnnn #1#2#3#4 {#4} +\cs_gset:Npn \use_i:nnnnn #1#2#3#4#5 {#1} +\cs_gset:Npn \use_ii:nnnnn #1#2#3#4#5 {#2} +\cs_gset:Npn \use_iii:nnnnn #1#2#3#4#5 {#3} +\cs_gset:Npn \use_iv:nnnnn #1#2#3#4#5 {#4} +\cs_gset:Npn \use_v:nnnnn #1#2#3#4#5 {#5} +\cs_gset:Npn \use_i:nnnnnn #1#2#3#4#5#6 {#1} +\cs_gset:Npn \use_ii:nnnnnn #1#2#3#4#5#6 {#2} +\cs_gset:Npn \use_iii:nnnnnn #1#2#3#4#5#6 {#3} +\cs_gset:Npn \use_iv:nnnnnn #1#2#3#4#5#6 {#4} +\cs_gset:Npn \use_v:nnnnnn #1#2#3#4#5#6 {#5} +\cs_gset:Npn \use_vi:nnnnnn #1#2#3#4#5#6 {#6} +\cs_gset:Npn \use_i:nnnnnnn #1#2#3#4#5#6#7 {#1} +\cs_gset:Npn \use_ii:nnnnnnn #1#2#3#4#5#6#7 {#2} +\cs_gset:Npn \use_iii:nnnnnnn #1#2#3#4#5#6#7 {#3} +\cs_gset:Npn \use_iv:nnnnnnn #1#2#3#4#5#6#7 {#4} +\cs_gset:Npn \use_v:nnnnnnn #1#2#3#4#5#6#7 {#5} +\cs_gset:Npn \use_vi:nnnnnnn #1#2#3#4#5#6#7 {#6} +\cs_gset:Npn \use_vii:nnnnnnn #1#2#3#4#5#6#7 {#7} +\cs_gset:Npn \use_i:nnnnnnnn #1#2#3#4#5#6#7#8 {#1} +\cs_gset:Npn \use_ii:nnnnnnnn #1#2#3#4#5#6#7#8 {#2} +\cs_gset:Npn \use_iii:nnnnnnnn #1#2#3#4#5#6#7#8 {#3} +\cs_gset:Npn \use_iv:nnnnnnnn #1#2#3#4#5#6#7#8 {#4} +\cs_gset:Npn \use_v:nnnnnnnn #1#2#3#4#5#6#7#8 {#5} +\cs_gset:Npn \use_vi:nnnnnnnn #1#2#3#4#5#6#7#8 {#6} +\cs_gset:Npn \use_vii:nnnnnnnn #1#2#3#4#5#6#7#8 {#7} +\cs_gset:Npn \use_viii:nnnnnnnn #1#2#3#4#5#6#7#8 {#8} +\cs_gset:Npn \use_i:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#1} +\cs_gset:Npn \use_ii:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#2} +\cs_gset:Npn \use_iii:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#3} +\cs_gset:Npn \use_iv:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#4} +\cs_gset:Npn \use_v:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#5} +\cs_gset:Npn \use_vi:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#6} +\cs_gset:Npn \use_vii:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#7} +\cs_gset:Npn \use_viii:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#8} +\cs_gset:Npn \use_ix:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#9} % \end{macrocode} % \end{macro} % % \begin{macro}[EXP]{\use_i_ii:nnn} % \begin{macrocode} -\cs_set:Npn \use_i_ii:nnn #1#2#3 {#1#2} +\cs_gset:Npn \use_i_ii:nnn #1#2#3 {#1#2} % \end{macrocode} % \end{macro} % % \begin{macro}[EXP]{\use_ii_i:nn} % \begin{macrocode} -\cs_set:Npn \use_ii_i:nn #1#2 { #2 #1 } +\cs_gset:Npn \use_ii_i:nn #1#2 { #2 #1 } % \end{macrocode} % \end{macro} % @@ -1772,9 +1772,9 @@ % Functions that gobble everything until they see either \cs{q_nil}, % \cs{q_stop}, or \cs{q_recursion_stop}, respectively. % \begin{macrocode} -\cs_set:Npn \use_none_delimit_by_q_nil:w #1 \q_nil { } -\cs_set:Npn \use_none_delimit_by_q_stop:w #1 \q_stop { } -\cs_set:Npn \use_none_delimit_by_q_recursion_stop:w #1 \q_recursion_stop { } +\cs_gset:Npn \use_none_delimit_by_q_nil:w #1 \q_nil { } +\cs_gset:Npn \use_none_delimit_by_q_stop:w #1 \q_stop { } +\cs_gset:Npn \use_none_delimit_by_q_recursion_stop:w #1 \q_recursion_stop { } % \end{macrocode} % \end{macro} % @@ -1788,9 +1788,9 @@ % when you need to skip the rest of a mapping sequence but want an % easy way to control what should be expanded next. % \begin{macrocode} -\cs_set:Npn \use_i_delimit_by_q_nil:nw #1#2 \q_nil {#1} -\cs_set:Npn \use_i_delimit_by_q_stop:nw #1#2 \q_stop {#1} -\cs_set:Npn \use_i_delimit_by_q_recursion_stop:nw +\cs_gset:Npn \use_i_delimit_by_q_nil:nw #1#2 \q_nil {#1} +\cs_gset:Npn \use_i_delimit_by_q_stop:nw #1#2 \q_stop {#1} +\cs_gset:Npn \use_i_delimit_by_q_recursion_stop:nw #1#2 \q_recursion_stop {#1} % \end{macrocode} % \end{macro} @@ -1817,15 +1817,15 @@ % who will assume that expanding such a function once takes care % of gobbling all the tokens in one go. % \begin{macrocode} -\cs_set:Npn \use_none:n #1 { } -\cs_set:Npn \use_none:nn #1#2 { } -\cs_set:Npn \use_none:nnn #1#2#3 { } -\cs_set:Npn \use_none:nnnn #1#2#3#4 { } -\cs_set:Npn \use_none:nnnnn #1#2#3#4#5 { } -\cs_set:Npn \use_none:nnnnnn #1#2#3#4#5#6 { } -\cs_set:Npn \use_none:nnnnnnn #1#2#3#4#5#6#7 { } -\cs_set:Npn \use_none:nnnnnnnn #1#2#3#4#5#6#7#8 { } -\cs_set:Npn \use_none:nnnnnnnnn #1#2#3#4#5#6#7#8#9 { } +\cs_gset:Npn \use_none:n #1 { } +\cs_gset:Npn \use_none:nn #1#2 { } +\cs_gset:Npn \use_none:nnn #1#2#3 { } +\cs_gset:Npn \use_none:nnnn #1#2#3#4 { } +\cs_gset:Npn \use_none:nnnnn #1#2#3#4#5 { } +\cs_gset:Npn \use_none:nnnnnn #1#2#3#4#5#6 { } +\cs_gset:Npn \use_none:nnnnnnn #1#2#3#4#5#6#7 { } +\cs_gset:Npn \use_none:nnnnnnnn #1#2#3#4#5#6#7#8 { } +\cs_gset:Npn \use_none:nnnnnnnnn #1#2#3#4#5#6#7#8#9 { } % \end{macrocode} % \end{macro} % @@ -1840,20 +1840,20 @@ % up with guards. We can also more easily change the logic in one % place then. This is needed primarily for deprecations. % \begin{macrocode} -\cs_set_protected:Npn \__kernel_if_debug:TF #1#2 {#2} +\cs_gset_protected:Npn \__kernel_if_debug:TF #1#2 {#2} % \end{macrocode} % \end{macro} % % \begin{macro}{\debug_on:n, \debug_off:n} % Stubs. % \begin{macrocode} -\cs_set_protected:Npn \debug_on:n #1 +\cs_gset_protected:Npn \debug_on:n #1 { \sys_load_debug: \cs_if_exist:NT \@@_all_on: { \debug_on:n {#1} } } -\cs_set_protected:Npn \debug_off:n #1 +\cs_gset_protected:Npn \debug_off:n #1 { \sys_load_debug: \cs_if_exist:NT \@@_all_on: @@ -1864,8 +1864,8 @@ % % \begin{macro}{\debug_suspend:, \debug_resume:} % \begin{macrocode} -\cs_set_protected:Npn \debug_suspend: { } -\cs_set_protected:Npn \debug_resume: { } +\cs_gset_protected:Npn \debug_suspend: { } +\cs_gset_protected:Npn \debug_resume: { } % \end{macrocode} % \end{macro} % @@ -1875,9 +1875,9 @@ % only make these into errors if the user requests it. This relies on % two token lists, filled up in \pkg{l3deprecation}. % \begin{macrocode} -\cs_set_nopar:Npn \g_@@_deprecation_on_tl { } -\cs_set_nopar:Npn \g_@@_deprecation_off_tl { } -\cs_set_protected:Npn \__kernel_deprecation_code:nn #1#2 +\cs_gset_nopar:Npn \g_@@_deprecation_on_tl { } +\cs_gset_nopar:Npn \g_@@_deprecation_off_tl { } +\cs_gset_protected:Npn \__kernel_deprecation_code:nn #1#2 { \tl_gput_right:Nn \g_@@_deprecation_on_tl {#1} \tl_gput_right:Nn \g_@@_deprecation_off_tl {#2} @@ -1923,9 +1923,9 @@ % at least two tokens: see how the logical tests are actually implemented % to see this. % \begin{macrocode} -\cs_set:Npn \prg_return_true: +\cs_gset:Npn \prg_return_true: { \exp_after:wN \use_i:nn \exp:w } -\cs_set:Npn \prg_return_false: +\cs_gset:Npn \prg_return_false: { \exp_after:wN \use_ii:nn \exp:w} % \end{macrocode} % An extended state space could be implemented by including a more @@ -1936,7 +1936,7 @@ % \begin{macro}[EXP]{\@@_use_none_delimit_by_q_recursion_stop:w} % Private version of \cs{use_none_delimit_by_q_recursion_stop:w}. % \begin{macrocode} -\cs_set:Npn \@@_use_none_delimit_by_q_recursion_stop:w +\cs_gset:Npn \@@_use_none_delimit_by_q_recursion_stop:w #1 \q_@@_recursion_stop { } % \end{macrocode} % \end{macro} @@ -1962,19 +1962,19 @@ % conditionals. % Note that |e| stands for expandable and |p| for protected. % \begin{macrocode} -\cs_set_protected:Npn \prg_set_conditional:Npnn +\cs_gset_protected:Npn \prg_set_conditional:Npnn { \@@_generate_conditional_parm:NNNpnn \cs_set:Npn e } -\cs_set_protected:Npn \prg_gset_conditional:Npnn +\cs_gset_protected:Npn \prg_gset_conditional:Npnn { \@@_generate_conditional_parm:NNNpnn \cs_gset:Npn e } -\cs_set_protected:Npn \prg_new_conditional:Npnn +\cs_gset_protected:Npn \prg_new_conditional:Npnn { \@@_generate_conditional_parm:NNNpnn \cs_new:Npn e } -\cs_set_protected:Npn \prg_set_protected_conditional:Npnn +\cs_gset_protected:Npn \prg_set_protected_conditional:Npnn { \@@_generate_conditional_parm:NNNpnn \cs_set_protected:Npn p } -\cs_set_protected:Npn \prg_gset_protected_conditional:Npnn +\cs_gset_protected:Npn \prg_gset_protected_conditional:Npnn { \@@_generate_conditional_parm:NNNpnn \cs_gset_protected:Npn p } -\cs_set_protected:Npn \prg_new_protected_conditional:Npnn +\cs_gset_protected:Npn \prg_new_protected_conditional:Npnn { \@@_generate_conditional_parm:NNNpnn \cs_new_protected:Npn p } -\cs_set_protected:Npn \@@_generate_conditional_parm:NNNpnn #1#2#3#4# +\cs_gset_protected:Npn \@@_generate_conditional_parm:NNNpnn #1#2#3#4# { \use:e { @@ -2014,19 +2014,19 @@ % erroneous case where the function name contains no colon is captured % later. % \begin{macrocode} -\cs_set_protected:Npn \prg_set_conditional:Nnn +\cs_gset_protected:Npn \prg_set_conditional:Nnn { \@@_generate_conditional_count:NNNnn \cs_set:Npn e } -\cs_set_protected:Npn \prg_gset_conditional:Nnn +\cs_gset_protected:Npn \prg_gset_conditional:Nnn { \@@_generate_conditional_count:NNNnn \cs_set:Npn e } -\cs_set_protected:Npn \prg_new_conditional:Nnn +\cs_gset_protected:Npn \prg_new_conditional:Nnn { \@@_generate_conditional_count:NNNnn \cs_new:Npn e } -\cs_set_protected:Npn \prg_set_protected_conditional:Nnn +\cs_gset_protected:Npn \prg_set_protected_conditional:Nnn { \@@_generate_conditional_count:NNNnn \cs_set_protected:Npn p } -\cs_set_protected:Npn \prg_gset_protected_conditional:Nnn +\cs_gset_protected:Npn \prg_gset_protected_conditional:Nnn { \@@_generate_conditional_count:NNNnn \cs_gset_protected:Npn p } -\cs_set_protected:Npn \prg_new_protected_conditional:Nnn +\cs_gset_protected:Npn \prg_new_protected_conditional:Nnn { \@@_generate_conditional_count:NNNnn \cs_new_protected:Npn p } -\cs_set_protected:Npn \@@_generate_conditional_count:NNNnn #1#2#3 +\cs_gset_protected:Npn \@@_generate_conditional_count:NNNnn #1#2#3 { \use:e { @@ -2035,7 +2035,7 @@ } #1 #2 } -\cs_set_protected:Npn \@@_generate_conditional_count:nnNNNnn #1#2#3#4#5 +\cs_gset_protected:Npn \@@_generate_conditional_count:nnNNNnn #1#2#3#4#5 { \__kernel_cs_parm_from_arg_count:nnF { \@@_generate_conditional:nnNNNnnn {#1} {#2} #3 #4 #5 } @@ -2076,7 +2076,7 @@ % \cs{use_i:nn} instead of \cs{use_i_ii:nnn} to functions such as % \cs{@@_generate_p_form:wNNnnnnN}. % \begin{macrocode} -\cs_set_protected:Npn \@@_generate_conditional:nnNNNnnn #1#2#3#4#5#6#7#8 +\cs_gset_protected:Npn \@@_generate_conditional:nnNNNnnn #1#2#3#4#5#6#7#8 { \if_meaning:w \c_false_bool #3 \msg_error:nne { kernel } { missing-colon } @@ -2097,10 +2097,10 @@ \exp_not:n { , \q_@@_recursion_tail , \q_@@_recursion_stop } } } -\cs_set:Npn \@@_generate_conditional_test:w +\cs_gset:Npn \@@_generate_conditional_test:w #1 \prg_return_true: \else: \prg_return_false: \fi: \s_@@_mark #2 { #2 {#1} } -\cs_set:Npn \@@_generate_conditional_fast:nw #1#2 \exp_not:n #3 +\cs_gset:Npn \@@_generate_conditional_fast:nw #1#2 \exp_not:n #3 { \exp_not:n { {#1} \use_i:nn } } % \end{macrocode} % Looping through the list of desired forms. First are six arguments @@ -2111,7 +2111,7 @@ % then \cs{use_none:nnnnnnnn} cleans up. Otherwise, the % error message is removed by the variant form. % \begin{macrocode} -\cs_set_protected:Npn \@@_generate_conditional:NNnnnnNw #1#2#3#4#5#6#7#8 , +\cs_gset_protected:Npn \@@_generate_conditional:NNnnnnNw #1#2#3#4#5#6#7#8 , { \if_meaning:w \q_@@_recursion_tail #8 \exp_after:wN \@@_use_none_delimit_by_q_recursion_stop:w @@ -2158,7 +2158,7 @@ % but if those are actually missing, the recovery from the runaway argument % would not insert \cs{fi:} back, messing up nesting of conditionals. % \begin{macrocode} -\cs_set_protected:Npn \@@_generate_p_form:wNNnnnnN +\cs_gset_protected:Npn \@@_generate_p_form:wNNnnnnN #1 \s_@@_stop #2#3#4#5#6#7#8 { \if_meaning:w e #3 @@ -2177,7 +2177,7 @@ { \token_to_str:c { #4 _p: #5 } } } } -\cs_set_protected:Npn \@@_generate_T_form:wNNnnnnN +\cs_gset_protected:Npn \@@_generate_T_form:wNNnnnnN #1 \s_@@_stop #2#3#4#5#6#7#8 { #8 @@ -2185,7 +2185,7 @@ { { #7 \exp_end: \use:n \use_none:n } } { #7 \@@_T_true:w \fi: \use_none:n } } -\cs_set_protected:Npn \@@_generate_F_form:wNNnnnnN +\cs_gset_protected:Npn \@@_generate_F_form:wNNnnnnN #1 \s_@@_stop #2#3#4#5#6#7#8 { #8 @@ -2193,7 +2193,7 @@ { { #7 \exp_end: { } } } { #7 \@@_F_true:w \fi: \use:n } } -\cs_set_protected:Npn \@@_generate_TF_form:wNNnnnnN +\cs_gset_protected:Npn \@@_generate_TF_form:wNNnnnnN #1 \s_@@_stop #2#3#4#5#6#7#8 { #8 @@ -2201,10 +2201,10 @@ { { #7 \exp_end: } } { #7 \@@_TF_true:w \fi: \use_ii:nn } } -\cs_set:Npn \@@_p_true:w \fi: \c_false_bool { \fi: \c_true_bool } -\cs_set:Npn \@@_T_true:w \fi: \use_none:n { \fi: \use:n } -\cs_set:Npn \@@_F_true:w \fi: \use:n { \fi: \use_none:n } -\cs_set:Npn \@@_TF_true:w \fi: \use_ii:nn { \fi: \use_i:nn } +\cs_gset:Npn \@@_p_true:w \fi: \c_false_bool { \fi: \c_true_bool } +\cs_gset:Npn \@@_T_true:w \fi: \use_none:n { \fi: \use:n } +\cs_gset:Npn \@@_F_true:w \fi: \use:n { \fi: \use_none:n } +\cs_gset:Npn \@@_TF_true:w \fi: \use_ii:nn { \fi: \use_i:nn } % \end{macrocode} % \end{macro} % \end{macro} @@ -2223,13 +2223,13 @@ % |,| \cs{q_@@_recursion_stop} % to a first auxiliary. % \begin{macrocode} -\cs_set_protected:Npn \prg_set_eq_conditional:NNn +\cs_gset_protected:Npn \prg_set_eq_conditional:NNn { \@@_set_eq_conditional:NNNn \cs_set_eq:cc } -\cs_set_protected:Npn \prg_gset_eq_conditional:NNn +\cs_gset_protected:Npn \prg_gset_eq_conditional:NNn { \@@_set_eq_conditional:NNNn \cs_gset_eq:cc } -\cs_set_protected:Npn \prg_new_eq_conditional:NNn +\cs_gset_protected:Npn \prg_new_eq_conditional:NNn { \@@_set_eq_conditional:NNNn \cs_new_eq:cc } -\cs_set_protected:Npn \@@_set_eq_conditional:NNNn #1#2#3#4 +\cs_gset_protected:Npn \@@_set_eq_conditional:NNNn #1#2#3#4 { \use:e { @@ -2268,7 +2268,7 @@ % step in the loop, make sure that the conditional form we copy is % defined, and copy it, otherwise abort. % \begin{macrocode} -\cs_set_protected:Npn \@@_set_eq_conditional:nnNnnNNw #1#2#3#4#5#6 +\cs_gset_protected:Npn \@@_set_eq_conditional:nnNnnNNw #1#2#3#4#5#6 { \if_meaning:w \c_false_bool #3 \msg_error:nne { kernel } { missing-colon } @@ -2282,7 +2282,7 @@ \fi: \@@_set_eq_conditional_loop:nnnnNw {#1} {#2} {#4} {#5} } -\cs_set_protected:Npn \@@_set_eq_conditional_loop:nnnnNw #1#2#3#4#5#6 , +\cs_gset_protected:Npn \@@_set_eq_conditional_loop:nnnnNw #1#2#3#4#5#6 , { \if_meaning:w \q_@@_recursion_tail #6 \exp_after:wN \@@_use_none_delimit_by_q_recursion_stop:w @@ -2299,13 +2299,13 @@ #5 {#1} {#2} {#3} {#4} \@@_set_eq_conditional_loop:nnnnNw {#1} {#2} {#3} {#4} #5 } -\cs_set:Npn \@@_set_eq_conditional_p_form:wNnnnn #1 \s_@@_stop #2#3#4#5#6 +\cs_gset:Npn \@@_set_eq_conditional_p_form:wNnnnn #1 \s_@@_stop #2#3#4#5#6 { #2 { #3 _p : #4 } { #5 _p : #6 } } -\cs_set:Npn \@@_set_eq_conditional_TF_form:wNnnnn #1 \s_@@_stop #2#3#4#5#6 +\cs_gset:Npn \@@_set_eq_conditional_TF_form:wNnnnn #1 \s_@@_stop #2#3#4#5#6 { #2 { #3 : #4 TF } { #5 : #6 TF } } -\cs_set:Npn \@@_set_eq_conditional_T_form:wNnnnn #1 \s_@@_stop #2#3#4#5#6 +\cs_gset:Npn \@@_set_eq_conditional_T_form:wNnnnn #1 \s_@@_stop #2#3#4#5#6 { #2 { #3 : #4 T } { #5 : #6 T } } -\cs_set:Npn \@@_set_eq_conditional_F_form:wNnnnn #1 \s_@@_stop #2#3#4#5#6 +\cs_gset:Npn \@@_set_eq_conditional_F_form:wNnnnn #1 \s_@@_stop #2#3#4#5#6 { #2 { #3 : #4 F } { #5 : #6 F } } % \end{macrocode} % \end{macro} @@ -2323,8 +2323,8 @@ % \begin{variable}{\c_true_bool, \c_false_bool} % Here are the canonical boolean values. % \begin{macrocode} -\tex_chardef:D \c_true_bool = 1 ~ -\tex_chardef:D \c_false_bool = 0 ~ +\tex_global:D \tex_chardef:D \c_true_bool = 1 ~ +\tex_global:D \tex_chardef:D \c_false_bool = 0 ~ % \end{macrocode} % \end{variable} % @@ -2392,7 +2392,7 @@ % In all three cases, \cs{cs_to_str:N} takes two expansion steps % to be fully expanded. % \begin{macrocode} -\cs_set:Npn \cs_to_str:N +\cs_gset:Npn \cs_to_str:N { % \end{macrocode} % We implement the expansion scheme using \cs{tex_romannumeral:D} @@ -2405,8 +2405,8 @@ \if:w \token_to_str:N \ \@@_to_str:w \fi: \exp_after:wN \@@_to_str:N \token_to_str:N } -\cs_set:Npn \@@_to_str:N #1 { \c_zero_int } -\cs_set:Npn \@@_to_str:w #1 \@@_to_str:N +\cs_gset:Npn \@@_to_str:N #1 { \c_zero_int } +\cs_gset:Npn \@@_to_str:w #1 \@@_to_str:N { - \int_value:w \fi: \exp_after:wN \c_zero_int } % \end{macrocode} % If speed is a concern we could use \tn{csstring} in \LuaTeX{}. For @@ -2436,19 +2436,19 @@ % auxiliary trims the trailing \cs{s_@@_mark} from the function name if % present (that is, if the original function had no colon). % \begin{macrocode} -\cs_set_protected:Npn \@@_tmp:w #1 +\cs_gset_protected:Npn \@@_tmp:w #1 { - \cs_set:Npn \cs_split_function:N ##1 + \cs_gset:Npn \cs_split_function:N ##1 { \exp_after:wN \exp_after:wN \exp_after:wN \@@_split_function_auxi:w \cs_to_str:N ##1 \s_@@_mark \c_true_bool #1 \s_@@_mark \c_false_bool \s_@@_stop } - \cs_set:Npn \@@_split_function_auxi:w + \cs_gset:Npn \@@_split_function_auxi:w ##1 #1 ##2 \s_@@_mark ##3##4 \s_@@_stop { \@@_split_function_auxii:w ##1 \s_@@_mark \s_@@_stop {##2} ##3 } - \cs_set:Npn \@@_split_function_auxii:w ##1 \s_@@_mark ##2 \s_@@_stop + \cs_gset:Npn \@@_split_function_auxii:w ##1 \s_@@_mark ##2 \s_@@_stop { {##1} } } \exp_after:wN \@@_tmp:w \token_to_str:N : @@ -2476,7 +2476,7 @@ % \cs{else:} in the top level functions will be removed by the optimization, % and this usage of \cs{else:} will be fine). % \begin{macrocode} -\prg_set_conditional:Npnn \cs_if_exist:N #1 { p , T , F , TF } +\prg_gset_conditional:Npnn \cs_if_exist:N #1 { p , T , F , TF } { \if_meaning:w #1 \scan_stop: \use_i:nnnn @@ -2498,7 +2498,7 @@ % \begin{macrocode} \cs_if_exist:NTF \tex_lastnamedcs:D { - \prg_set_conditional:Npnn \cs_if_exist:c #1 { p , T , F , TF } + \prg_gset_conditional:Npnn \cs_if_exist:c #1 { p , T , F , TF } { \if_cs_exist:w #1 \cs_end: \@@_if_exist_c_aux: @@ -2507,11 +2507,11 @@ \prg_return_false: \fi: } - \cs_set:Npn \@@_if_exist_c_aux: + \cs_gset:Npn \@@_if_exist_c_aux: { \fi: \exp_after:wN \if_meaning:w \tex_lastnamedcs:D \scan_stop: \else: } } { - \prg_set_conditional:Npnn \cs_if_exist:c #1 { p , T , F , TF } + \prg_gset_conditional:Npnn \cs_if_exist:c #1 { p , T , F , TF } { \if_cs_exist:w #1 \cs_end: \@@_if_exist_c_aux:w @@ -2523,7 +2523,7 @@ \prg_return_false: \fi: } - \cs_set:Npn \@@_if_exist_c_aux:w \fi: \use_none:n #1 \if_false: + \cs_gset:Npn \@@_if_exist_c_aux:w \fi: \use_none:n #1 \if_false: { \fi: \exp_after:wN \if_meaning:w \cs:w #1 \cs_end: \scan_stop: \else: } } % \end{macrocode} @@ -2533,7 +2533,7 @@ % \begin{macro}[pTF, EXP]{\cs_if_free:N, \cs_if_free:c} % The logical reversal of the above. % \begin{macrocode} -\prg_set_conditional:Npnn \cs_if_free:N #1 { p , T , F , TF } +\prg_gset_conditional:Npnn \cs_if_free:N #1 { p , T , F , TF } { \if_cs_exist:N #1 \else: @@ -2547,7 +2547,7 @@ } \cs_if_exist:NTF \tex_lastnamedcs:D { - \prg_set_conditional:Npnn \cs_if_free:c #1 { p , T , F , TF } + \prg_gset_conditional:Npnn \cs_if_free:c #1 { p , T , F , TF } { \if_cs_exist:w #1 \cs_end: \@@_if_free_c_aux:w @@ -2558,11 +2558,11 @@ \prg_return_false: \fi: } - \cs_set:Npn \@@_if_free_c_aux:w \fi: \if_true: + \cs_gset:Npn \@@_if_free_c_aux:w \fi: \if_true: { \fi: \exp_after:wN \if_meaning:w \tex_lastnamedcs:D \scan_stop: } } { - \prg_set_conditional:Npnn \cs_if_free:c #1 { p , T , F , TF } + \prg_gset_conditional:Npnn \cs_if_free:c #1 { p , T , F , TF } { \if_cs_exist:w #1 \cs_end: \@@_if_free_c_aux:w @@ -2574,7 +2574,7 @@ \prg_return_false: \fi: } - \cs_set:Npn \@@_if_free_c_aux:w \fi: \use_none:n #1 \if_true: + \cs_gset:Npn \@@_if_free_c_aux:w \fi: \use_none:n #1 \if_true: { \fi: \exp_after:wN \if_meaning:w \cs:w #1 \cs_end: \scan_stop: } } % \end{macrocode} @@ -2591,49 +2591,49 @@ % sequence in the hash table if it does not exist. % If available we use the \tn{lastnamedcs} primitive. % \begin{macrocode} -\cs_set:Npn \cs_if_exist_use:NTF #1#2 +\cs_gset:Npn \cs_if_exist_use:NTF #1#2 { \cs_if_exist:NTF #1 { #1 #2 } } -\cs_set:Npn \cs_if_exist_use:NF #1 +\cs_gset:Npn \cs_if_exist_use:NF #1 { \cs_if_exist:NTF #1 #1 } -\cs_set:Npn \cs_if_exist_use:NT #1 #2 +\cs_gset:Npn \cs_if_exist_use:NT #1 #2 { \cs_if_exist:NT #1 { #1 #2 } } -\cs_set:Npn \cs_if_exist_use:N #1 +\cs_gset:Npn \cs_if_exist_use:N #1 { \cs_if_exist:NT #1 #1 } \cs_if_exist:NTF \tex_lastnamedcs:D { - \cs_set:Npn \cs_if_exist_use:cTF #1 + \cs_gset:Npn \cs_if_exist_use:cTF #1 { \if_cs_exist:w #1 \cs_end: \@@_if_exist_use_aux:w \fi: \use_ii:nn } - \cs_set:Npn \@@_if_exist_use_aux:w \fi: \use_ii:nn + \cs_gset:Npn \@@_if_exist_use_aux:w \fi: \use_ii:nn { \fi: \exp_after:wN \@@_if_exist_use_aux:Nnn \tex_lastnamedcs:D } } { - \cs_set:Npn \cs_if_exist_use:cTF #1 + \cs_gset:Npn \cs_if_exist_use:cTF #1 { \if_cs_exist:w #1 \cs_end: \@@_if_exist_use_aux:w \fi: \use_iii:nnn {#1} } - \cs_set:Npn \@@_if_exist_use_aux:w \fi: \use_iii:nnn #1 + \cs_gset:Npn \@@_if_exist_use_aux:w \fi: \use_iii:nnn #1 { \fi: \exp_after:wN \@@_if_exist_use_aux:Nnn \cs:w #1 \cs_end: } } -\cs_set:Npn \@@_if_exist_use_aux:Nnn #1#2 +\cs_gset:Npn \@@_if_exist_use_aux:Nnn #1#2 { \if_meaning:w #1 \scan_stop: \exp_after:wN \use_iii:nnn \fi: \use_i:nn { #1 #2 } } -\cs_set:Npn \cs_if_exist_use:cF #1 +\cs_gset:Npn \cs_if_exist_use:cF #1 { \cs_if_exist_use:cTF {#1} {} } -\cs_set:Npn \cs_if_exist_use:cT #1#2 +\cs_gset:Npn \cs_if_exist_use:cT #1#2 { \cs_if_exist_use:cTF {#1} {#2} {} } -\cs_set:Npn \cs_if_exist_use:c #1 +\cs_gset:Npn \cs_if_exist_use:c #1 { \cs_if_exist_use:cTF {#1} {} {} } % \end{macrocode} % \end{macro} @@ -2659,7 +2659,7 @@ % a reasonable response. Setting the \tn{newlinechar} is needed, to % turn |^^J| into a proper line break in plain \TeX{}. % \begin{macrocode} -\cs_set_protected:Npn \msg_error:nnee #1#2#3#4 +\cs_gset_protected:Npn \msg_error:nnee #1#2#3#4 { \tex_newlinechar:D = `\^^J \scan_stop: \tex_errmessage:D @@ -2672,9 +2672,9 @@ } \tex_end:D } -\cs_set_protected:Npn \msg_error:nne #1#2#3 +\cs_gset_protected:Npn \msg_error:nne #1#2#3 { \msg_error:nnee {#1} {#2} {#3} { } } -\cs_set_protected:Npn \msg_error:nn #1#2 +\cs_gset_protected:Npn \msg_error:nn #1#2 { \msg_error:nnee {#1} {#2} { } { } } % \end{macrocode} % \end{macro} @@ -2682,7 +2682,7 @@ % \begin{macro}[rEXP]{\msg_line_context:} % Another one from \pkg{l3msg} which will be altered later. % \begin{macrocode} -\cs_set:Npn \msg_line_context: +\cs_gset:Npn \msg_line_context: { on~line~ \tex_the:D \tex_inputlineno:D } % \end{macrocode} % \end{macro} @@ -2692,9 +2692,9 @@ % similar one for writing to both the log file and the terminal. % These will be redefined later by \pkg{l3file}. % \begin{macrocode} -\cs_set_protected:Npn \iow_log:e +\cs_gset_protected:Npn \iow_log:e { \tex_immediate:D \tex_write:D -1 } -\cs_set_protected:Npn \iow_term:e +\cs_gset_protected:Npn \iow_term:e { \tex_immediate:D \tex_write:D 16 } % \end{macrocode} % \end{macro} @@ -2708,7 +2708,7 @@ % issued. We have to make sure we don't put the argument into the % conditional processing since it may be an |\if...| type function! % \begin{macrocode} -\cs_set_protected:Npn \__kernel_chk_if_free_cs:N #1 +\cs_gset_protected:Npn \__kernel_chk_if_free_cs:N #1 { \cs_if_free:NF #1 { @@ -2716,7 +2716,7 @@ { \token_to_str:N #1 } { \token_to_meaning:N #1 } } } -\cs_set_protected:Npn \__kernel_chk_if_free_cs:c +\cs_gset_protected:Npn \__kernel_chk_if_free_cs:c { \exp_args:Nc \__kernel_chk_if_free_cs:N } % \end{macrocode} % \end{macro} @@ -2740,7 +2740,7 @@ % \begin{macrocode} \cs_set:Npn \@@_tmp:w #1#2 { - \cs_set_protected:Npn #1 ##1 + \cs_gset_protected:Npn #1 ##1 { \__kernel_chk_if_free_cs:N ##1 #2 ##1 @@ -2838,7 +2838,7 @@ % \begin{macro}[documented-as=\cs_set_protected:Npn] % { % \cs_set_protected:cpn , \cs_set_protected:cpe , \cs_set_protected:cpx , -% \cs_gset_protected:cpn , \cs_gset_protected:cpe , \cs_gset_protected:cpx , +% \cs_gset_protected:cpn , \cs_gset_protected:cpe , \cs_gset_protected:cpx , % \cs_new_protected:cpn , \cs_new_protected:cpe , \cs_new_protected:cpx % } % Variants of the \cs{cs_set_protected:Npn} versions which make a csname @@ -2940,7 +2940,7 @@ % the functions use here are not defined yet, but will be defined % before this function is called. % \begin{macrocode} -\cs_set_protected:Npn \__kernel_cs_parm_from_arg_count:nnF #1#2 +\cs_new_protected:Npn \__kernel_cs_parm_from_arg_count:nnF #1#2 { \exp_args:Ne \@@_parm_from_arg_count_test:nnF { @@ -2961,7 +2961,7 @@ } {#1} } -\cs_set_protected:Npn \@@_parm_from_arg_count_test:nnF #1#2 +\cs_new_protected:Npn \@@_parm_from_arg_count_test:nnF #1#2 { \if_meaning:w \c_false_bool #1 \exp_after:wN \use_ii:nn diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx index ece9fbfa6cb..3100c284637 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx index 9583f2548dd..5ff0c2e68d4 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -302,7 +302,7 @@ Type H for immediate help}\def~{\errmessage{% % \begin{variable}{\l_@@_expl_bool} % The status for code syntax: this is on at present. % \begin{macrocode} -\chardef\l_@@_expl_bool = 1\relax +\global\chardef\l_@@_expl_bool = 1\relax % \end{macrocode} %\end{variable} % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx index df79b10cc7a..08463db56d7 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -849,7 +849,8 @@ % \begin{syntax} % \cs{box_rotate:Nn} \meta{box} \Arg{angle} % \end{syntax} -% Rotates the \meta{box} by \meta{angle} (in degrees) anti-clockwise about +% Rotates the \meta{box} by \meta{angle} (a \meta{fp expr} in degrees) +% anti-clockwise about % its reference point. The reference point of the updated box is moved % horizontally such that it is at the left side of the smallest rectangle % enclosing the rotated material. The updated \meta{box} is an |hbox|, @@ -866,7 +867,7 @@ % \end{syntax} % Scales the \meta{box} by factors \meta{x-scale} and \meta{y-scale} in % the horizontal and vertical directions, respectively (both scales are -% integer expressions). The updated \meta{box} is an |hbox|, irrespective +% \meta{fp expr}). The updated \meta{box} is an |hbox|, irrespective % of the nature of the \meta{box} before the scaling is applied. Negative % scalings cause the material in the \meta{box} to be reversed in % direction, but the reference point of the \meta{box} is unchanged. @@ -2296,8 +2297,9 @@ { #5 #1 { - \fp_set:Nn \l_@@_scale_x_fp { ( #2 ) / \box_wd:N #1 } - \fp_set:Nn \l_@@_scale_y_fp { ( #3 ) / ( #4 ) } + \fp_set:Nn \l_@@_scale_x_fp { ( \dim_to_fp:n {#2} ) / \box_wd:N #1 } + \fp_set:Nn \l_@@_scale_y_fp + { ( \dim_to_fp:n {#3} ) / ( \dim_to_fp:n {#4} ) } \fp_compare:nNnTF \l_@@_scale_x_fp > \l_@@_scale_y_fp { \fp_set_eq:NN \l_@@_scale_x_fp \l_@@_scale_y_fp } { \fp_set_eq:NN \l_@@_scale_y_fp \l_@@_scale_x_fp } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx b/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx index 311b9cc88b5..5cdaa3dc920 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx index 9f2eda4560f..ad65a4b1749 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx index 8ba7b27aa98..ad41224aa0d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -1302,7 +1302,7 @@ % y = s ( x - a ) + b % \] % \begin{macrocode} -\cs_set_protected:Npn \@@_calculate_intersection:nnnnnn #1#2#3#4#5#6 +\cs_new_protected:Npn \@@_calculate_intersection:nnnnnn #1#2#3#4#5#6 { \fp_compare:nNnTF {#1} = {#2} { \bool_set_true:N \l_@@_error_bool } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3color.dtx b/Master/texmf-dist/source/latex/l3kernel/l3color.dtx index f3537307b2a..514ff326a4e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3color.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3color.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx b/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx index 82c95f7ff87..6654b6d4cd7 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -69,7 +69,7 @@ % % Standard file identification. % \begin{macrocode} -\ProvidesExplFile{l3debug.def}{2024-02-20}{}{L3 Debugging support} +\ProvidesExplFile{l3debug.def}{2024-03-14}{}{L3 Debugging support} % \end{macrocode} % % \begin{variable}{\s_@@_stop} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx index 25dd05fb0c8..3906c6786ef 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -220,7 +220,7 @@ % up: one for Fall 2022. % \begin{macrocode} %\__kernel_patch_deprecation:nnNNpn { 2022-06-24 } { \cs_parameter_spec:N } -\cs_gset:Npn \cs_argument_spec:N { \cs_parameter_spec:N } +\cs_new:Npn \cs_argument_spec:N { \cs_parameter_spec:N } % \end{macrocode} % \end{macro} % @@ -300,13 +300,13 @@ % too long. % \begin{macrocode} %\__kernel_patch_deprecation:nnNNpn { 2024-01-10 } { \keys_set_exclude_groups:nnn } -\cs_set_protected:Npn \keys_set_filter:nnn { \keys_set_exclude_groups:nnn } +\cs_new_protected:Npn \keys_set_filter:nnn { \keys_set_exclude_groups:nnn } \cs_generate_variant:Nn \keys_set_filter:nnn { nnV , nnv , nno } %\__kernel_patch_deprecation:nnNNpn { 2024-01-10 } { \keys_set_exclude_groups:nnnN } -\cs_set_protected:Npn \keys_set_filter:nnnN { \keys_set_exclude_groups:nnnN } +\cs_new_protected:Npn \keys_set_filter:nnnN { \keys_set_exclude_groups:nnnN } \cs_generate_variant:Nn \keys_set_filter:nnnN { nnV , nnv , nno } %\__kernel_patch_deprecation:nnNNpn { 2024-01-10 } { \keys_set_exclude_groups:nnnnN } -\cs_set_protected:Npn \keys_set_filter:nnnnN { \keys_set_exclude_groups:nnnnN } +\cs_new_protected:Npn \keys_set_filter:nnnnN { \keys_set_exclude_groups:nnnnN } \cs_generate_variant:Nn \keys_set_filter:nnnnN { nnV , nnv , nno } % \end{macrocode} % \end{macro} @@ -370,13 +370,13 @@ % \begin{macro}[EXP, noTF, deprecated]{\bool_case_true:n} % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case:n } -\cs_gset:Npn \bool_case_true:n { \bool_case:n } +\cs_new:Npn \bool_case_true:n { \bool_case:n } \__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case:nT } -\cs_gset:Npn \bool_case_true:nT { \bool_case:nT } +\cs_new:Npn \bool_case_true:nT { \bool_case:nT } \__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case:nF } -\cs_gset:Npn \bool_case_true:nF { \bool_case:nF } +\cs_new:Npn \bool_case_true:nF { \bool_case:nF } \__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case:nTF } -\cs_gset:Npn \bool_case_true:nTF { \bool_case:nTF } +\cs_new:Npn \bool_case_true:nTF { \bool_case:nTF } % \end{macrocode} % \end{macro} % @@ -394,17 +394,17 @@ % } % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_lowercase:n } -\cs_gset:Npn \str_lower_case:n { \str_lowercase:n } +\cs_new:Npn \str_lower_case:n { \str_lowercase:n } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_lowercase:f } -\cs_gset:Npn \str_lower_case:f { \str_lowercase:f } +\cs_new:Npn \str_lower_case:f { \str_lowercase:f } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_uppercase:n } -\cs_gset:Npn \str_upper_case:n { \str_uppercase:n } +\cs_new:Npn \str_upper_case:n { \str_uppercase:n } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_uppercase:f } -\cs_gset:Npn \str_upper_case:f { \str_uppercase:f } +\cs_new:Npn \str_upper_case:f { \str_uppercase:f } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_casefold:n } -\cs_gset:Npn \str_fold_case:n { \str_casefold:n } +\cs_new:Npn \str_fold_case:n { \str_casefold:n } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_casefold:V } -\cs_gset:Npn \str_fold_case:V { \str_casefold:V } +\cs_new:Npn \str_fold_case:V { \str_casefold:V } % \end{macrocode} % \end{macro} % @@ -412,9 +412,9 @@ % {\str_foldcase:n, \str_foldcase:V} % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2020-10-17 } { \str_casefold:n } -\cs_gset:Npn \str_foldcase:n { \str_casefold:n } +\cs_new:Npn \str_foldcase:n { \str_casefold:n } \__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \str_casefold:V } -\cs_gset:Npn \str_foldcase:V { \str_casefold:V } +\cs_new:Npn \str_foldcase:V { \str_casefold:V } % \end{macrocode} % \end{macro} % @@ -425,7 +425,7 @@ % take a value that is big enough to accommodate all of Unicode. % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2020-08-20 } { } -\cs_gset_protected:Npn \str_declare_eight_bit_encoding:nnn #1 +\cs_new_protected:Npn \str_declare_eight_bit_encoding:nnn #1 { \@@_declare_eight_bit_encoding:nnnn {#1} { 1114112 } } % \end{macrocode} % \end{macro} @@ -440,9 +440,9 @@ % \begin{macro}[EXP, deprecated]{ \seq_indexed_map_function:NN} % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2020-06-18 } { \seq_map_indexed_inline:Nn } -\cs_gset_protected:Npn \seq_indexed_map_inline:Nn { \seq_map_indexed_inline:Nn } +\cs_new_protected:Npn \seq_indexed_map_inline:Nn { \seq_map_indexed_inline:Nn } \__kernel_patch_deprecation:nnNNpn { 2020-06-18 } { \seq_map_indexed_function:NN } -\cs_gset:Npn \seq_indexed_map_function:NN { \seq_map_indexed_function:NN } +\cs_new:Npn \seq_indexed_map_function:NN { \seq_map_indexed_function:NN } % \end{macrocode} % \end{macro} % \end{macro} @@ -450,16 +450,16 @@ % \begin{macro}[deprecated]{\seq_mapthread_function:NNN} % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2023-05-10 } { \seq_map_pairwise_function:NNN } -\cs_gset:Npn \seq_mapthread_function:NNN { \seq_map_pairwise_function:NNN } +\cs_new:Npn \seq_mapthread_function:NNN { \seq_map_pairwise_function:NNN } % \end{macrocode} % \end{macro} % % \begin{macro}[deprecated]{\seq_set_map_x:NNn, \seq_gset_map_x:NNn} % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2023-10-26 } { \seq_set_map_e:NNn } -\cs_gset_protected:Npn \seq_set_map_x:NNn { \seq_set_map_e:NNn } +\cs_new_protected:Npn \seq_set_map_x:NNn { \seq_set_map_e:NNn } \__kernel_patch_deprecation:nnNNpn { 2023-10-26 } { \seq_gset_map_e:NNn } -\cs_gset_protected:Npn \seq_gset_map_x:NNn { \seq_gset_map_e:NNn } +\cs_new_protected:Npn \seq_gset_map_x:NNn { \seq_gset_map_e:NNn } % \end{macrocode} % \end{macro} % @@ -472,7 +472,7 @@ % \begin{macro}[deprecated]{\sys_load_deprecation:} % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2021-01-11 } { (no~longer~required) } -\cs_gset_protected:Npn \sys_load_deprecation: { } +\cs_new_protected:Npn \sys_load_deprecation: { } % \end{macrocode} % \end{macro} % @@ -486,10 +486,10 @@ % \begin{macro}[EXP, deprecated]{\text_titlecase:nn} % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2023-07-08 } { \text_titlecase_first:n } -\cs_gset:Npn \text_titlecase:n #1 +\cs_new:Npn \text_titlecase:n #1 { \text_titlecase_first:n { \text_lowercase:n {#1} } } \__kernel_patch_deprecation:nnNNpn { 2023-07-08 } { \text_titlecase_first:nn } -\cs_gset:Npn \text_titlecase:nn #1#2 +\cs_new:Npn \text_titlecase:nn #1#2 { \text_titlecase_first:nn {#1} { \text_lowercase:n {#2} } } % \end{macrocode} % \end{macro} @@ -509,22 +509,22 @@ % } % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_lowercase:n } -\cs_gset:Npn \tl_lower_case:n #1 +\cs_new:Npn \tl_lower_case:n #1 { \text_lowercase:n {#1} } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_lowercase:nn } -\cs_gset:Npn \tl_lower_case:nn #1#2 +\cs_new:Npn \tl_lower_case:nn #1#2 { \text_lowercase:nn {#1} {#2} } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_uppercase:n } -\cs_gset:Npn \tl_upper_case:n #1 +\cs_new:Npn \tl_upper_case:n #1 { \text_uppercase:n {#1} } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_uppercase:nn } -\cs_gset:Npn \tl_upper_case:nn #1#2 +\cs_new:Npn \tl_upper_case:nn #1#2 { \text_uppercase:nn {#1} {#2} } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_titlecase_first:n } -\cs_gset:Npn \tl_mixed_case:n #1 +\cs_new:Npn \tl_mixed_case:n #1 { \text_titlecase_first:n {#1} } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_titlecase_first:nn } -\cs_gset:Npn \tl_mixed_case:nn #1#2 +\cs_new:Npn \tl_mixed_case:nn #1#2 { \text_titlecase_first:nn {#1} {#2} } % \end{macrocode} % \end{macro} @@ -532,13 +532,13 @@ % \begin{macro}[noTF, deprecated]{\tl_case:Nn, \tl_case:cn} % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:Nn } -\cs_gset:Npn \tl_case:Nn { \token_case_meaning:Nn } +\cs_new:Npn \tl_case:Nn { \token_case_meaning:Nn } \__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:NnT } -\cs_gset:Npn \tl_case:NnT { \token_case_meaning:NnT } +\cs_new:Npn \tl_case:NnT { \token_case_meaning:NnT } \__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:NnF } -\cs_gset:Npn \tl_case:NnF { \token_case_meaning:NnF } +\cs_new:Npn \tl_case:NnF { \token_case_meaning:NnF } \__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:NnTF } -\cs_gset:Npn \tl_case:NnTF { \token_case_meaning:NnTF } +\cs_new:Npn \tl_case:NnTF { \token_case_meaning:NnTF } \cs_generate_variant:Nn \tl_case:Nn { c } \prg_generate_conditional_variant:Nnn \tl_case:Nn { c } { T , F , TF } @@ -570,16 +570,16 @@ % \begin{macro}[EXP, deprecated]{\char_to_utfviii_bytes:n} % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2022-10-09 } { [ \codepoint_generate:nn ] } -\cs_gset:Npn \char_to_utfviii_bytes:n { \__kernel_codepoint_to_bytes:n } +\cs_new:Npn \char_to_utfviii_bytes:n { \__kernel_codepoint_to_bytes:n } % \end{macrocode} % \end{macro} % % \begin{macro}[EXP, deprecated]{\char_to_nfd:N, \char_to_nfd:n} % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2022-10-09 } { \codepoint_to_nfd:n } -\cs_gset:Npn \char_to_nfd:N #1 { \codepoint_to_nfd:n {`#1} } +\cs_new:Npn \char_to_nfd:N #1 { \codepoint_to_nfd:n {`#1} } \__kernel_patch_deprecation:nnNNpn { 2022-10-09 } { \codepoint_to_nfd:n } -\cs_gset:Npn \char_to_nfd:n { \codepoint_to_nfd:n } +\cs_new:Npn \char_to_nfd:n { \codepoint_to_nfd:n } % \end{macrocode} % \end{macro} % @@ -592,21 +592,21 @@ % } % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_lowercase:n } -\cs_gset:Npn \char_lower_case:N { \text_lowercase:n } +\cs_new:Npn \char_lower_case:N { \text_lowercase:n } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_uppercase:n } -\cs_gset:Npn \char_upper_case:N { \text_uppercase:n } +\cs_new:Npn \char_upper_case:N { \text_uppercase:n } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_titlecase_first:n } -\cs_gset:Npn \char_mixed_case:N { \text_titlecase_first:n } +\cs_new:Npn \char_mixed_case:N { \text_titlecase_first:n } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_casefold:n } -\cs_gset:Npn \char_fold_case:N { \str_casefold:n } +\cs_new:Npn \char_fold_case:N { \str_casefold:n } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_lowercase:n } -\cs_gset:Npn \char_str_lower_case:N { \str_lowercase:n } +\cs_new:Npn \char_str_lower_case:N { \str_lowercase:n } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_uppercase:n } -\cs_gset:Npn \char_str_upper_case:N { \str_uppercase:n } +\cs_new:Npn \char_str_upper_case:N { \str_uppercase:n } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_titlecase:n } -\cs_gset:Npn \char_str_mixed_case:N { \str_titlecase:n } +\cs_new:Npn \char_str_mixed_case:N { \str_titlecase:n } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_casefold:n } -\cs_gset:Npn \char_str_fold_case:N { \str_casefold:n } +\cs_new:Npn \char_str_fold_case:N { \str_casefold:n } % \end{macrocode} % \end{macro} % @@ -619,23 +619,23 @@ % } % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \text_lowercase:n } -\cs_gset:Npn \char_lowercase:N { \text_lowercase:n } +\cs_new:Npn \char_lowercase:N { \text_lowercase:n } \__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \text_uppercase:n } -\cs_gset:Npn \char_uppercase:N { \text_uppercase:n } +\cs_new:Npn \char_uppercase:N { \text_uppercase:n } \__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \text_titlecase_first:n } -\cs_gset:Npn \char_titlecase:N { \text_titlecase_first:n } +\cs_new:Npn \char_titlecase:N { \text_titlecase_first:n } \__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \str_casefold:n } -\cs_gset:Npn \char_foldcase:N { \str_casefold:n } +\cs_new:Npn \char_foldcase:N { \str_casefold:n } \__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \str_lowercase:n } -\cs_gset:Npn \char_str_lowercase:N { \str_lowercase:n } +\cs_new:Npn \char_str_lowercase:N { \str_lowercase:n } \__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \tl_to_str:e { \text_titlecase_first:n } } -\cs_gset:Npn \char_str_titlecase:N #1 +\cs_new:Npn \char_str_titlecase:N #1 { \tl_to_str:e { \text_titlecase_first:n {#1} } } \__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \str_uppercase:n } -\cs_gset:Npn \char_str_uppercase:N { \str_uppercase:n } +\cs_new:Npn \char_str_uppercase:N { \str_uppercase:n } \__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \str_casefold:n } -\cs_gset:Npn \char_str_foldcase:N { \str_casefold:n } +\cs_new:Npn \char_str_foldcase:N { \str_casefold:n } % \end{macrocode} % \end{macro} % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx index 695e47a444a..a48a24df238 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx @@ -71,7 +71,7 @@ and all files in that bundle must be distributed together. % This isn't included in the typeset documentation because it's a bit % ugly: %<*class> -\ProvidesExplClass{l3doc}{2024-02-20}{} +\ProvidesExplClass{l3doc}{2024-03-14}{} {L3 Experimental documentation class} % % \fi @@ -84,7 +84,7 @@ and all files in that bundle must be distributed together. % require you to do updates, if the class changes.}} % % \author{\Team} -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % \maketitle % \tableofcontents % @@ -1655,7 +1655,7 @@ and all files in that bundle must be distributed together. % % \begin{macro}{\l@section, \l@subsection} % Customise the table of contents (as we have so many sections). -% Different design and/or structure is called for). +% Different design and/or structure is called for. % \begin{macrocode} \@addtoreset{section}{part} \cs_gset:Npn \l@section #1#2 @@ -2127,11 +2127,9 @@ and all files in that bundle must be distributed together. { \hyperlink { explTF } } { \mbox } { - \color{black} \itshape TF \makebox[0pt][r] { - \cs_if_exist:NT \Codedoc@explTF { \color{red} } \underline { \phantom{\itshape TF} \kern-0.1em } } } @@ -3206,18 +3204,22 @@ and all files in that bundle must be distributed together. \tl_set:Nn \l_@@_tmpa_tl {#1} \tl_replace_all:NnV \l_@@_tmpa_tl { ~ } \c_catcode_other_space_tl - \@@_macroname_prefix:o \l_@@_tmpa_tl - \@@_macroname_suffix:N #2 + \@@_print_macroname_aux:on + \l_@@_tmpa_tl { \bool_if:NT #2 { \@@_typeset_TF: } } } } -\cs_new_protected:Npn \@@_macroname_prefix:n #1 +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_print_macroname_aux:nn} +% |#1| is prefix, |#2| is optional |TF| suffix. +% \begin{macrocode} +\cs_new_protected:Npn \@@_print_macroname_aux:nn #1#2 { \@@_if_macro_internal:nTF {#1} - { \@@_typeset_aux:n {#1} } {#1} + { \@@_typeset_aux:n { #1 #2 } } { #1 #2 } } -\cs_generate_variant:Nn \@@_macroname_prefix:n { o } -\cs_new_protected:Npn \@@_macroname_suffix:N #1 - { \bool_if:NTF #1 { \@@_typeset_TF: } { } } +\cs_generate_variant:Nn \@@_print_macroname_aux:nn { o } % \end{macrocode} % \end{macro} % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx index fe60a6f312e..c973d593c52 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx index aaf0d04d29f..7e507b75984 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx index 1159101ca5f..3a4d1c06dc3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx index 7604c2c2ba5..40614c7348c 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx index cb209349049..6d00047e4da 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % \maketitle % % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx index fd75e1bb5a1..1f4ea5d34dc 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx index 76b7a8cdb28..a7401407cd0 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx index 5b95dc543e9..0459331326a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx index 571cb9864a9..5b5f947c384 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx index 51e747a7449..bcd16a4b683 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx index efedd0fffba..b26d8e7f265 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx index a0984d5f362..c95704085cb 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx index a313f9b0bef..53b85a7cc83 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx index a2c8eb81db8..cdbdf38ee1d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx index a19ce341958..bddb146be7d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx index f2073b5e52d..26a084733da 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx index 70e41d5a4d3..e1a3dd89a03 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % \maketitle % % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx index 98cf15b281f..21cefc166c1 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx index 23c7f6ac4e7..0d589c9549f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx index 5983dc2f481..11dbcdceeff 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx index 97ebfe22953..1517840431b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -58,7 +58,7 @@ % close to that of \pkg{l3intarray}. The size of the array is fixed and % must be given at point of initialisation % -% \begin{function}[added = 2018-05-05]{\fparray_new:Nn} +% \begin{function}[added = 2018-05-05]{\fparray_new:Nn, \fparray_new:cn} % \begin{syntax} % \cs{fparray_new:Nn} \meta{fparray~var} \Arg{size} % \end{syntax} @@ -68,7 +68,7 @@ % assignments are always global. % \end{function} % -% \begin{function}[EXP, added = 2018-05-05]{\fparray_count:N} +% \begin{function}[EXP, added = 2018-05-05]{\fparray_count:N, \fparray_count:c} % \begin{syntax} % \cs{fparray_count:N} \meta{fparray~var} % \end{syntax} @@ -76,7 +76,7 @@ % variable}. This is performed in constant time. % \end{function} % -% \begin{function}[added = 2018-05-05]{\fparray_gset:Nnn} +% \begin{function}[added = 2018-05-05]{\fparray_gset:Nnn, \fparray_gset:cnn} % \begin{syntax} % \cs{fparray_gset:Nnn} \meta{fparray~var} \Arg{position} \Arg{value} % \end{syntax} @@ -87,7 +87,7 @@ % Assignments are always global. % \end{function} % -% \begin{function}[added = 2018-05-05]{\fparray_gzero:N} +% \begin{function}[added = 2018-05-05]{\fparray_gzero:N, \fparray_gzero:c} % \begin{syntax} % \cs{fparray_gzero:N} \meta{fparray~var} % \end{syntax} @@ -96,7 +96,10 @@ % \end{function} % % \begin{function}[EXP, added = 2018-05-05] -% {\fparray_item:Nn, \fparray_item_to_tl:Nn} +% { +% \fparray_item:Nn, \fparray_item:cn +% \fparray_item_to_tl:Nn, \fparray_item_to_tl:cn +% } % \begin{syntax} % \cs{fparray_item:Nn} \meta{fparray~var} \Arg{position} % \end{syntax} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx index 0eacdb25e7f..9fa2a547ffd 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -1215,7 +1215,7 @@ } \cs_new:Npn \@@_abs:N #1 { \if_meaning:w - #1 \else: \exp_after:wN #1 \fi: } -\cs_set:Npn \int_max:nn #1#2 +\cs_new:Npn \int_max:nn #1#2 { \int_value:w \exp_after:wN \@@_maxmin:wwN \int_value:w \@@_eval:w #1 \exp_after:wN ; @@ -1223,7 +1223,7 @@ > \exp_stop_f: } -\cs_set:Npn \int_min:nn #1#2 +\cs_new:Npn \int_min:nn #1#2 { \int_value:w \exp_after:wN \@@_maxmin:wwN \int_value:w \@@_eval:w #1 \exp_after:wN ; @@ -1395,10 +1395,10 @@ \cs_if_exist:NTF \tex_omathchardef:D { \cs_new_eq:NN \@@_constdef:Nw \tex_omathchardef:D } { \cs_new_eq:NN \@@_constdef:Nw \tex_chardef:D } - \@@_constdef:Nw \c_@@_max_constdef_int 1114111 ~ + \tex_global:D \@@_constdef:Nw \c_@@_max_constdef_int 1114111 ~ \else: \cs_new_eq:NN \@@_constdef:Nw \tex_mathchardef:D - \tex_mathchardef:D \c_@@_max_constdef_int 32767 ~ + \tex_global:D \@@_constdef:Nw \c_@@_max_constdef_int 32767 ~ \fi: % \end{macrocode} % \end{variable} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx index 4dd308a5c5c..5704a2ab756 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx index be8aed20d9e..480425d7306 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx index 9000132775f..5ea436176f4 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx index e7970a7e2fa..bd56f1ed3a8 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx index f112b99215a..3d177f63452 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -267,7 +267,7 @@ \lua_now:n , \lua_now:e } { - \cs_set:Npn #1 ##1 + \cs_gset:Npn #1 ##1 { \msg_expandable_error:nnn { luatex } { luatex-required } { #1 } @@ -276,7 +276,7 @@ \clist_map_inline:nn { \lua_shipout_e:n , \lua_shipout:n, \lua_load_module:n } { - \cs_set_protected:Npn #1 ##1 + \cs_gset_protected:Npn #1 ##1 { \msg_error:nnn { luatex } { luatex-required } { #1 } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx index 75ba84a6ff3..3acae8d111d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx index 0782a08aa6c..3e78d86acfd 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx b/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx index 0310e7c6ad6..7ffd0c1c056 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx index e596e4cfb7c..8bbdd6a5870 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx index dcf14be5367..878b9eb7586 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx index c465fa251c8..000063bc005 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -820,43 +820,46 @@ % \begin{macro}{ % \@@_new_conditional_n:Nnnn, % \@@_new_conditional_N:Nnnn, +% \@@_new_conditional_n_aux:NNNn, +% \@@_new_conditional_N_aux:NNNn % } % These macros implement the two possibilities for branching quark -% conditionals, passing -% the right arguments to \cs{@@_new_conditional_aux_do:NNnnn}, -% which defines some auxiliaries and defines the -% main conditionals. +% conditionals. To avoid constructing without defining the +% \cs[no-index]{__\meta{type}_if_quark_\meta{name}:w} helper, +% \texttt{N}-type function accepts a \cs{prg_do_nothing:} as +% a placeholder. % \begin{macrocode} -\cs_new_protected:Npn \@@_new_conditional_n:Nnnn - { \@@_new_conditional_aux_do:NNnnn \use_i:nn } -\cs_new_protected:Npn \@@_new_conditional_N:Nnnn - { \@@_new_conditional_aux_do:NNnnn \use_ii:nn } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{ -% \@@_new_conditional_aux_do:NNnnn, -% \@@_new_conditional_define:NNNNn, -% } -% Similar to the previous macros, but branching conditionals only -% require one auxiliary, so we take a shortcut. In -% \cs{@@_new_conditional_define:NNNNn}, |#4| is \cs{use_i:nn} to -% define the \texttt{n}-type function (which needs an auxiliary) and -% is \cs{use_ii:nn} to define the \texttt{N}-type function. -% \begin{macrocode} -\cs_new_protected:Npn \@@_new_conditional_aux_do:NNnnn #1 #2 #3 #4 +\cs_new_protected:Npn \@@_new_conditional_n:Nnnn #1 #2 #3 + { + \exp_args:Ncc \@@_new_conditional_n_aux:NNNn + { __ #3 _if_quark_ #2 :w } { q__ #3 _ #2 } #1 + } +\cs_new_protected:Npn \@@_new_conditional_N:Nnnn #1 #2 #3 { - \exp_args:Ncc \@@_new_conditional_define:NNNNn - { __ #4 _if_quark_ #3 :w } { q__ #4 _ #3 } #2 #1 + \exp_args:NNc \@@_new_conditional_N_aux:NNNn + \prg_do_nothing: { q__ #3 _ #2 } #1 } -\cs_new_protected:Npn \@@_new_conditional_define:NNNNn #1 #2 #3 #4 #5 +\cs_new_protected:Npn \@@_new_conditional_n_aux:NNNn #1 #2 #3 #4 { - #4 { \cs_gset:Npn #1 ##1 #2 ##2 ? ##3 ?! { ##1 ##2 } } { } - \exp_args:Nno \use:n { \prg_new_conditional:Npnn #3 ##1 {#5} } + \cs_gset:Npn #1 ##1 #2 ##2 ? ##3 ?! { ##1##2 } + \prg_new_conditional:Npnn #3 ##1 {#4} { - #4 { \@@_if_empty_if:o { #1 {} ##1 {} ?! #2 ??! } } - { \if_meaning:w #2 ##1 } - \prg_return_true: \else: \prg_return_false: \fi: + \@@_if_empty_if:o { #1 {} ##1 {} ?! #2 ??! } + \prg_return_true: + \else: + \prg_return_false: + \fi: + } + } +\cs_new_protected:Npn \@@_new_conditional_N_aux:NNNn #1 #2 #3 #4 + { + \prg_new_conditional:Npnn #3 ##1 {#4} + { + \if_meaning:w #2 ##1 + \prg_return_true: + \else: + \prg_return_false: + \fi: } } % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx index 428870c4534..395be76907a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -4155,7 +4155,7 @@ % incorrect). That's clunky, but not too expensive, since it's only % one test. % \begin{macrocode} -\cs_set:Npn \@@_show_class:NnnnN #1#2#3#4#5 +\cs_new:Npn \@@_show_class:NnnnN #1#2#3#4#5 { \group_begin: \tl_build_begin:N \l_@@_build_tl diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx index c200bf21f9e..5334e8fd888 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx index c0dfc22a37b..1839c8a2e56 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx index b96e3f3b2bd..818f605e076 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx index e7b7ecf44dd..be850b31099 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx index 827cc994f5b..88ad33c74b1 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx index 9a0fb8dcf3f..feec1232fd0 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -324,6 +324,58 @@ % Execute \meta{tokens} through shell escape at shipout. % \end{function} % +% \section{System queries} +% +% Some queries can be made about the file system, etc., without needing to +% use unrestricted shell escape. This is carried out using the script +% \texttt{l3sys-query}, which is documented separately. The wrappers here +% use this script, if available, to obtain system information that is +% not directly available within the \TeX{} run. Note that if restricted +% shell escape is disabled, no results can be obtained. +% +% \begin{function}[added = 2024-03-08] +% {\sys_get_query:nN, \sys_get_query:nnN, \sys_get_query:nnnN} +% \begin{syntax} +% \cs{sys_get_query:nN} \Arg{cmd} \Arg{tl var} +% \cs{sys_get_query:nnN} \Arg{cmd} \Arg{spec} \Arg{tl var} +% \cs{sys_get_query:nnnN} \Arg{cmd} \Arg{options} \Arg{spec} \Arg{tl var} +% \end{syntax} +% Sets the \meta{tl var} to the information returned by the +% \texttt{l3sys-query} \meta{cmd}, potentially supplying the \meta{options} +% and \meta{spec} to the query call. The valid \meta{cmd} names are at present +% \begin{itemize} +% \item \texttt{pwd} Returns the present working directory +% \item \texttt{ls} Returns a directory listing, using the \meta{spec} to +% select files and applying the \meta{options} if given +% \end{itemize} +% The \meta{spec} is likely to contain the wildcards |*| or |?|, +% and will automatically be passed to +% the script without shell expansion. In a glob is needed within the +% \meta{options}, this will need to be protected from shell expansion +% using |'| tokens. +% +% The \meta{spec} and \meta{options}, if given, are expanded fully +% before passing to the underlying script. +% +% If more than one line of text is returned by the \meta{cmd}, these will be +% separated by character~13 (|^^M|) tokens of category code~12. In most +% cases, \cs{sys_split_query:nnnN} should be preferred when multi-line +% output is expected. +% \end{function} +% +% \begin{function}[added = 2024-03-08] +% {\sys_split_query:nN, \sys_split_query:nnN, \sys_split_query:nnnN} +% \begin{syntax} +% \cs{sys_split_query:nN} \Arg{cmd} \Arg{seq} +% \cs{sys_split_query:nnN} \Arg{cmd} \Arg{spec} \Arg{seq} +% \cs{sys_split_query:nnnN} \Arg{cmd} \Arg{options} \Arg{spec} \Arg{seq} +% \end{syntax} +% Works as described for \cs{sys_split_query:nnnN}, but sets the \meta{seq} +% to contain one entry for each line returned by \texttt{l3sys-query}. +% This function should therefore be preferred where multi-line return is +% expected, e.g.~for the \texttt{ls} command. +% \end{function} +% % \section{Loading configuration data} % % \begin{function}[added = 2019-09-12]{\sys_load_backend:n} @@ -390,6 +442,12 @@ %<*tex> % \end{macrocode} % +% \begin{macro}{\l_@@_tmp_tl} +% \begin{macrocode} +\tl_new:N \l_@@_tmp_tl +% \end{macrocode} +% \end{macro} +% % \subsubsection{Detecting the engine} % % \begin{macro}{\@@_const:nn} @@ -1083,6 +1141,107 @@ end % \end{macrocode} % \end{macro} % +% \subsection{System queries} +% +% \begin{macro}{\sys_get_query:nN} +% \begin{macro}{\sys_get_query:nnN} +% \begin{macro} +% { +% \sys_get_query:nnnN, +% \@@_get_query_auxi:nnnN, \@@_get_query_auxi:neeN, +% \@@_get_query_auxii:nnnN, \@@_get_query_auxii:neeN +% } +% Calling the query system is quite straight-forward: most of the effort is +% in making the read-back catcode-safe. We also want to trim off the trailing +% |^^M| from the last line. +% \begin{macrocode} +\cs_new_protected:Npn \sys_get_query:nN #1#2 + { \sys_get_query:nnnN {#1} { } { } #2 } +\cs_new_protected:Npn \sys_get_query:nnN #1#2#3 + { \sys_get_query:nnnN {#1} { } {#2} #3 } +\cs_new_protected:Npn \sys_get_query:nnnN #1#2#3#4 + { + \str_clear:N #4 + \@@_get_query_auxi:neeN {#1} {#2} {#3} #4 + } +\cs_new:Npn \@@_get_query_auxi:nnnN #1#2#3#4 + { + \@@_get_query_auxii:neeN {#1} + { \tl_if_blank:nF {#2} { \tl_to_str:n { ~ #2 } } } + { + \tl_if_blank:nF {#3} + { + \c_space_tl + \sys_if_shell_restricted:F ' + \tl_to_str:n {#3} + \sys_if_shell_restricted:F ' + } + } + #4 + } +\cs_generate_variant:Nn \@@_get_query_auxi:nnnN { nee } +\cs_new_protected:Npn \@@_get_query_auxii:nnnN #1#2#3#4 + { + \sys_if_shell:T + { + \sys_get_shell:nnN + { l3sys-query~#1 #2 #3 } + { + \int_step_inline:nnn { 0 } { `a - 1 } + { \char_set_catcode_other:n {##1} } + \int_step_inline:nnn { `Z + 1 } { 127 } + { \char_set_catcode_other:n {##1} } + \tex_endlinechar:D 13 \scan_stop: + } + \l_@@_tmp_tl + \tl_if_empty:NF \l_@@_tmp_tl + { + \exp_after:wN \@@_get_query:Nw \exp_after:wN #4 + \l_@@_tmp_tl \q_stop + } + } + } +\cs_generate_variant:Nn \@@_get_query_auxii:nnnN { nee } +\group_begin: + \tex_lccode:D `\* = 13 \scan_stop: + \tex_lowercase:D + { + \group_end: + \cs_new_protected:Npn \@@_get_query:Nw #1#2 * \q_stop + } + { \tl_set:Nn #1 {#2} } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\sys_split_query:nN} +% \begin{macro}{\sys_split_query:nnN} +% \begin{macro}{\sys_split_query:nnnN} +% A wrapper for convenience. +% \begin{macrocode} +\cs_new_protected:Npn \sys_split_query:nN #1#2 + { \sys_split_query:nnnN {#1} { } { } #2 } +\cs_new_protected:Npn \sys_split_query:nnN #1#2#3 + { \sys_split_query:nnnN {#1} { } {#2} #3 } +\group_begin: + \tex_lccode:D `\* = 13 \scan_stop: + \tex_lowercase:D + { + \group_end: + \cs_new_protected:Npn \sys_split_query:nnnN #1#2#3#4 + { + \seq_clear:N #4 + \sys_get_query:nnnN {#1} {#2} {#3} \l_@@_tmp_tl + \tl_if_empty:NF \l_@@_tmp_tl + { \seq_set_split:NnV #4 * \l_@@_tmp_tl } + } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% % \subsubsection{Held over from \pkg{l3file}} % % \begin{variable}{\g_file_curr_name_str} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx index 8a5677806c3..0547db28b1d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx index fff01a52551..d364c321994 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx index 6de37faa622..8f92c1eae95 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text.dtx index bdbd7c8d278..5feff565b9c 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3text.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3text.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -889,12 +889,12 @@ % {\c_@@_chardef_group_end_token, \c_@@_mathchardef_group_end_token} % Markers for implict char handling. % \begin{macrocode} -\tex_chardef:D \c_@@_chardef_space_token = `\ % -\tex_mathchardef:D \c_@@_mathchardef_space_token = `\ % -\tex_chardef:D \c_@@_chardef_group_begin_token = `\{ % `\} -\tex_mathchardef:D \c_@@_mathchardef_group_begin_token = `\{ % `\} `\{ -\tex_chardef:D \c_@@_chardef_group_end_token = `\} % `\{ -\tex_mathchardef:D \c_@@_mathchardef_group_end_token = `\} % +\tex_global:D \tex_chardef:D \c_@@_chardef_space_token = `\ % +\tex_global:D \tex_mathchardef:D \c_@@_mathchardef_space_token = `\ % +\tex_global:D \tex_chardef:D \c_@@_chardef_group_begin_token = `\{ % `\} +\tex_global:D \tex_mathchardef:D \c_@@_mathchardef_group_begin_token = `\{ % `\} `\{ +\tex_global:D \tex_chardef:D \c_@@_chardef_group_end_token = `\} % `\{ +\tex_global:D \tex_mathchardef:D \c_@@_mathchardef_group_end_token = `\} % % \end{macrocode} % \end{variable} % \end{variable} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx index 776b360434b..d965050c76a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx index 1fc841ca783..175b7bc24fe 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx index ed83e3bc815..0938e7cd5e6 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx index b11e4859db0..cd538ee6d05 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % @@ -2376,7 +2376,7 @@ end } } { - \tex_chardef:D \c_@@_A_int = `A ~ % + \tex_global:D \tex_chardef:D \c_@@_A_int = `A ~ % \use:e { \prg_new_conditional:Npnn \exp_not:N \token_if_primitive:N #1 diff --git a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx index b4a70b24adb..cd552800b07 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-02-20} +% \date{Released 2024-03-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx index a65b0239dda..817d37a46c1 100644 --- a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx +++ b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx @@ -62,7 +62,7 @@ % }^^A % } % -% \date{Released 2024-02-18} +% \date{Released 2024-03-14} % % \maketitle % @@ -154,7 +154,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3keys2e}{2024-02-18}{} +\ProvidesExplPackage{l3keys2e}{2024-03-14}{} {LaTeX2e option processing using LaTeX3 keys} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx b/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx index 3a97e469031..8baebbfc190 100644 --- a/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2024-02-18} +% \date{Released 2024-03-14} % % \maketitle % @@ -171,7 +171,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xfp}{2024-02-18}{} +\ProvidesExplPackage{xfp}{2024-03-14}{} {L3 Floating point unit} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx index 6dba694d397..4b731d1e0f6 100644 --- a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx @@ -67,12 +67,27 @@ % }^^A % } % -% \date{Released 2024-02-18} +% \date{Released 2024-03-14} % % \maketitle % % \begin{documentation} % +% \section{Introduction} +% +% \begin{center} +% \bfseries This package is obsolete with the October 2020 \LaTeX{} release. +% \end{center} +% +% With new formats, \cs{NewDocumentCommand}, etc., are available in +% the format. Other than for a small number of now-deprecated +% argument types and support functions, package authors should transition +% their code to avoid loading \pkg{xparse}. An updated version of the +% documentation covering the full set of functionality available in +% the kernel is available in \texttt{usrguide}. +% +% \section{Old introduction} +% % The \pkg{xparse} package provides a high-level interface for % producing document-level commands. In that way, it is intended as % a replacement for the \LaTeXe{} \cs{newcommand} macro. However, @@ -1064,7 +1079,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xparse}{2024-02-18}{} +\ProvidesExplPackage{xparse}{2024-03-14}{} {L3 Experimental document command parser} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx index 7a956d82bf8..4aac33434a4 100644 --- a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx @@ -5,7 +5,7 @@ % Copyright (C) 1999 Frank Mittelbach, Chris Rowley, David Carlisle % (C) 2004-2010 Frank Mittelbach, The LaTeX Project % (C) 2011-2024 The LaTeX Project -%\ +% % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this % license or (at your option) any later version. The latest version @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2024-02-18} +% \date{Released 2024-03-14} % % \maketitle % @@ -695,8 +695,8 @@ % % \begin{macro}{\DeclareRestrictedTemplate} % \begin{macro}{\DeclareObjectType} -% If the new kernel code is not loaded, make a couple of compatibility -% additions. Otherwise, hand over to the frozen version. +% If the new kernel code is not loaded, hand over to the frozen version. +% Otherwise, make a couple of compatibility additions. % \begin{macrocode} \@ifundefined{NewTemplateType} {% @@ -704,12 +704,12 @@ \endinput } {% - \ProvidesExplPackage{xtemplate}{2023-10-10}{} + \ProvidesExplPackage{xtemplate}{2024-03-14}{} {L3 Experimental prototype document functions} \long\protected\def\DeclareRestrictedTemplate#1#2#3#4{% - \DeclareTemplateCopy{#1}{#3}{#2}% - \EditTemplateDefaults{#1}{#3}{#4}% - }% + \DeclareTemplateCopy{#1}{#3}{#2}% + \EditTemplateDefaults{#1}{#3}{#4}% + }% } \ExplSyntaxOn \cs_new_protected:Npn \DeclareObjectType #1#2 -- cgit v1.2.3