summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/l3experimental
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/l3experimental')
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx43
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins4
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx591
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.ins (renamed from Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.ins)10
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx556
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx904
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins58
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx12
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx26
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx12
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx26
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx61
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx14
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx66
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins4
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx33
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins4
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx337
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins60
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx60
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins4
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx49
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins4
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx11
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins4
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx59
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx17
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins4
30 files changed, 842 insertions, 2211 deletions
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx
index 5383ac46247..1771ac26668 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx
@@ -2,7 +2,7 @@
%
%% File: l3benchmark.dtx
%
-% Copyright (C) 2011,2012,2014-2020 The LaTeX3 Project
+% Copyright (C) 2011,2012,2014-2021 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
@@ -38,7 +38,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -125,14 +125,12 @@
% Our working unit is the scaled second, namely $2^{-16}$ seconds.
%
% \begin{macrocode}
-%<*initex|package>
+%<*package>
% \end{macrocode}
%
% \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3benchmark}{2020-01-12}{}
+\ProvidesExplPackage{l3benchmark}{2021-02-18}{}
{L3 Experimental benchmarking}
-%</package>
% \end{macrocode}
%
% \subsection{Additions to \pkg{l3sys}: elapsed time}
@@ -141,7 +139,7 @@
%<@@=sys>
% \end{macrocode}
%
-% \begin{macro}[EXP]{\sys_timer:}
+% \begin{macro}[EXP]{\sys_timer:, \@@_elapsedtime:, \@@_resettimer:}
% \begin{macro}[EXP,pTF]{\sys_if_timer_exist:}
% In \LuaTeX{}, use emulation (see \pkg{l3luatex}),
% otherwise try to locate the primitive. The
@@ -149,8 +147,27 @@
% \begin{macrocode}
\sys_if_engine_luatex:TF
{
+ \cs_new:Npn \@@_elapsedtime: { }
+ \cs_new:Npn \@@_resettimer: { }
+ \lua_now:n
+ {
+ local~gettimeofday = os.gettimeofday~
+ local~epoch = gettimeofday() - os.clock()~
+ local~write = tex.write~
+ local~tointeger = math.tointeger~
+ local~id = luatexbase.new_luafunction'@@_elapsedtime:'
+ lua.get_functions_table()[id] = function()
+ write(tointeger((gettimeofday() - epoch)*65536 // 1))
+ end~
+ token.set_lua('@@_elapsedtime:', id, 'global')
+ id = luatexbase.new_luafunction'@@_resettimer:'
+ lua.get_functions_table()[id] = function()
+ epoch = gettimeofday()
+ end~
+ token.set_lua('@@_resettimer:', id, 'global', 'protected')
+ }
\cs_new:Npn \sys_timer:
- { \lua_now:n { l3kernel.elapsedtime() } }
+ { \@@_elapsedtime: }
}
{
\cs_if_exist:NT \tex_elapsedtime:D
@@ -165,8 +182,7 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\sys_gzero_timer:, \@@_timer_fp:}
-% \begin{variable}{\g_@@_timer_base_fp}
+% \begin{macro}{\sys_gzero_timer:}
% Three case, and in each case we define \cs{sys_gzero_timer:}.
% \begin{macrocode}
\cs_if_exist:NTF \sys_timer:
@@ -174,7 +190,7 @@
\sys_if_engine_luatex:TF
{
\cs_new_protected:Npn \sys_gzero_timer:
- { \lua_now:n { l3kernel.resettimer() } }
+ { \@@_resettimer: }
}
{ \cs_new_protected:Npn \sys_gzero_timer: { \tex_resettimer:D } }
}
@@ -200,7 +216,6 @@
}
}
% \end{macrocode}
-% \end{variable}
% \end{macro}
%
% \subsection{Benchmarking code}
@@ -576,7 +591,7 @@
% \end{macro}
%
% \begin{macrocode}
-%</initex|package>
+%</package>
% \end{macrocode}
%
% \end{implementation}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins
index ca4c280f820..4b72b69db33 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins
+++ b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins
@@ -2,7 +2,7 @@
File: l3benchmark.ins
-Copyright (C) 2011,2018-2020 The LaTeX3 Project
+Copyright (C) 2011,2018-2021 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
@@ -34,7 +34,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2018-2020 The LaTeX3 Project
+Copyright (C) 2018-2021 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
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx b/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx
new file mode 100644
index 00000000000..686df60ccd4
--- /dev/null
+++ b/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx
@@ -0,0 +1,591 @@
+% \iffalse meta-comment
+%
+%% File: l3bitset.dtx
+%
+% Copyright (C) 2020,2021 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 "l3bitset 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>
+\documentclass[full]{l3doc}
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+% \title{^^A
+% The \pkg{l3bitset} package \\ Experimental bitsets ^^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 2021-02-18}
+%
+% \maketitle
+% \begin{documentation}
+%
+% This package defines and implements the data type \texttt{bitset}, a vector of
+% bits. The size of the vector may grow dynamically.
+% Individual bits can be set and unset by names pointing to an index position.
+% The names |1|, |2|, |3|, \ldots\ are predeclared and point to the
+% index positions $1$, $2$, $3$,\ldots. More names can be added and existing names can
+% be changed.
+% The index is like all other indices in \pkg{expl3} modules \emph{1-based}.
+% A \texttt{bitset} can be output as binary number or---as needed e.g. in a
+% PDF dictionary---as decimal (arabic) number.
+% Currently only a small subset of the functions provided by the \pkg{bitset}
+% package are implemented here, mainly the functions needed to use bitsets in
+% PDF dictionaries.
+%
+% The bitset is stored as a string (but one shouldn't rely on the internal
+% representation) and so the vector size is theoretically
+% unlimited, only restricted by \TeX-memory. But the functions to set and clear
+% bits uses integer functions for the index so bitsets can't be longer
+% than $2^{31} - 1$.
+% The export function
+% \cs{bitset_to_arabic:N} can use functions from the \texttt{int} module only if
+% the largest index used for this bitset is smaller then $32$, for longer
+% bitsets \texttt{fp} is used and this is slower.
+%
+% \section{Creating bitsets}
+% \begin{function}[added = 2021-01-26,updated=2020-12-29]
+% {\bitset_new:N,\bitset_new:c,\bitset_new:Nn, \bitset_new:cn}
+% \begin{syntax}
+% \cs{bitset_new:N} \meta{bitset var} \\
+% \cs{bitset_new:Nn} \meta{bitset var}
+% \{
+% \meta{name1} |=| \meta{index1} |,|
+% \meta{name2} |=| \meta{index2} |,| \ldots{}
+% \}
+% \end{syntax}
+% Creates a new \meta{bitset var} or raises an error if the name is already taken.
+% The declaration is global. The \meta{bitset var} is initially $0$.
+%
+% Bitsets are implemented as string variables consisting of
+% \texttt{1}'s and \texttt{0}'s.
+% The rightmost number is the index position $1$, so
+% the string variable can be viewed directly as the binary number.
+% But one shouldn't rely on the internal representation, but use the
+% dedicated \cs{bitset_to_bin:N} instead to get the binary number.
+%
+% The name--index pairs given in the second
+% argument of \cs{bitset_new:Nn} declares names for some indices,
+% which can be used to set and unset bits.
+% The names |1|, |2|, |3|, \ldots\ are predeclared and point to the
+% index positions $1$, $2$, $3$, \ldots.
+%
+% \meta{index\ldots} should be a positive number or an
+% \meta{integer expression} which evaluates to a positive number.
+% The expression is evaluated when the index is used, not a declaration time.
+% The names \meta{name\ldots}
+% should be unique. Using a number as name, e.g.~|10=1|, is allowed, it
+% then overwrites the predeclared name |10|,
+% but the index position $10$ can then only be reached if some other
+% name for it exists, e.g. |ten=10|.
+% It is not necessary to give every index
+% a name, and an index can have more than one name. The named index
+% can be extended or changed with the next function.
+%
+% \end{function}
+% \begin{function}[added = 2021-01-26]
+% {\bitset_addto_named_index:Nn}
+% \begin{syntax}
+% \cs{bitset_addto_named_index:Nn} \meta{bitset var}
+% \{
+% \meta{name1} |=| \meta{index1} |,|
+% \meta{name2} |=| \meta{index2} |,| \ldots{}
+% \}
+% \end{syntax}
+% This extends or changes the name--index pairs for \meta{bitset var}
+% globally as described for \cs{bitset_new:Nn}.
+%
+% For example after these settings
+%
+% \begin{verbatim}
+% \bitset_new:Nn \l_pdfannot_F_bitset
+% {
+% Invisible = 1,
+% Hidden = 2,
+% Print = 3,
+% NoZoom = 4,
+% NoRotate = 5,
+% NoView = 6,
+% ReadOnly = 7,
+% Locked = 8,
+% ToggleNoView = 9,
+% LockedContents = 10
+% }
+% \bitset_addto_named_index:Nn \l_pdfannot_F_bitset
+% {
+% print = 3
+% }
+% \end{verbatim}
+% it is possible to set bit $3$ by using any of this alternatives:
+% \begin{verbatim}
+% \bitset_set_true:Nn \l_pdfannot_F_bitset {Print}
+% \bitset_set_true:Nn \l_pdfannot_F_bitset {print}
+% \bitset_set_true:Nn \l_pdfannot_F_bitset {3}
+% \end{verbatim}
+% \end{function}
+%
+% \begin{function}[EXP, pTF,added = 2021-01-26]
+% { \bitset_if_exist:N, \bitset_if_exist:c }
+% \begin{syntax}
+% \cs{bitset_if_exist_p:N} \meta{bitset var}
+% \cs{bitset_if_exist:NTF} \meta{bitset var} \Arg{true code} \Arg{false code}%
+% \end{syntax}
+% Tests whether the \meta{bitset var} exist.
+% \end{function}
+%
+% \section{Setting and unsetting bits}
+%
+% \begin{function}[added = 2021-01-26]
+% { \bitset_set_true:Nn, \bitset_set_true:cn, \bitset_gset_true:Nn, \bitset_gset_true:cn }
+% \begin{syntax}
+% \cs{bitset_set_true:Nn} \meta{bitset var} \Arg{name}\\
+% \cs{bitset_gset_true:Nn} \meta{bitset var} \Arg{name}
+% \end{syntax}
+% This sets the bit of the index position represented by \Arg{name} to $1$.
+% \Arg{name} should be either one of the predeclared names
+% |1|, |2|, |3|, \ldots, or one of the names added manually.
+% Index position are 1-based.
+% If needed the length of the bit vector is enlarged.
+% \end{function}
+%
+% \begin{function}[added = 2021-01-26]
+% { \bitset_set_false:Nn, \bitset_set_false:cn, \bitset_gset_false:Nn, \bitset_set_false:cn }
+% \begin{syntax}
+% \cs{bitset_set_false:Nn} \meta{bitset var} \Arg{name}\\
+% \cs{bitset_gset_false:Nn} \meta{bitset var} \Arg{name}
+% \end{syntax}
+% This unsets the bit of the index position represented by \Arg{name} (sets
+% it to $0$).
+% \Arg{name} should be either one of the predeclared names
+% |1|, |2|, |3|, \ldots, or one of the names added manually.
+% The index is $1$-based. If the index position is larger
+% than the current length of the bit vector
+% nothing happens. If the leading (left most) bit is unset,
+% zeros are not trimmed but stay in the bit vector and are still shown
+% by \cs{bitset_show:N}.
+% \end{function}
+%
+% \begin{function}[added = 2021-01-26]
+% {\bitset_clear:N,\bitset_clear:c,\bitset_gclear:N,\bitset_gclear:c}
+% \begin{syntax}
+% \cs{bitset_clear:N} \meta{bitset var} \\
+% \cs{bitset_gclear:N} \meta{bitset var}
+% \end{syntax}
+% This resets the bitset to the initial state. The declared names are not changed.
+% \end{function}
+%
+% \section{Using bitsets}
+%
+% \begin{function}[EXP,added = 2021-01-26]
+% { \bitset_item:Nn, \bitset_item:cn }
+% \begin{syntax}
+% \cs{bitset_item:Nn} \meta{bitset var} \Arg{name}
+% \end{syntax}
+% \cs{bitset_item:Nn} outputs \texttt{1} if the bit with
+% the index number represented by \Arg{name} is set and \texttt{0} otherwise.
+% \Arg{name} is either one of the predeclared names
+% |1|, |2|, |3|, \ldots, or one of the names added manually.
+% \end{function}
+%
+% \begin{function}[EXP,added = 2021-01-26]
+% {\bitset_to_bin:N, \bitset_to_bin:c}
+% \begin{syntax}
+% \cs{bitset_to_bin:N} \meta{bitset var}
+% \end{syntax}
+% This leaves the current value of the bitset expressed as
+% a binary (string) number in the input stream.
+% If no bit has been set yet, the output is zero.
+% \end{function}
+% \begin{function}[EXP,added = 2021-01-26]
+% {\bitset_to_arabic:N, \bitset_to_arabic:c}
+% \begin{syntax}
+% \cs{bitset_to_arabic:N} \meta{bitset var}
+% \end{syntax}
+% This leaves the current value of the bitset expressed as
+% a decimal number in the input stream. If no bit has been set yet,
+% the output is zero. The function uses \cs{int_from_bin:n} if the largest
+% index that have been set or unset is smaller then $32$, and a slower implementation
+% based on \cs{fp_eval:n} otherwise.
+% \end{function}
+%
+% \begin{function}[added = 2021-01-26]
+% {\bitset_show:N, \bitset_show:c}
+% \begin{syntax}
+% \cs{bitset_show:N} \meta{bitset var}
+% \end{syntax}
+% Displays the binary and decimal value of the \meta{bitset var} on the terminal,
+% \end{function}
+%
+% \begin{function}[added = 2021-01-26]
+% {\bitset_log:N, \bitset_log:c}
+% \begin{syntax}
+% \cs{bitset_log:N} \meta{bitset var}
+% \end{syntax}
+% Writes the value of the \meta{bitset var} in the log file.
+% \end{function}
+%
+% \end{documentation}
+%
+% \begin{implementation}
+% \section{\pkg{l3bitset} implementation}
+% \TestFiles{m3bitset001,m3bitset002}
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<@@=bitset>
+% \end{macrocode}
+% \begin{macrocode}
+\ProvidesExplPackage{l3bitset}{2021-02-18}{}
+ {L3 Experimental bitset support}
+% \end{macrocode}
+% A bitset is a string variable.
+% \begin{macro}
+% {
+% \bitset_new:N, \bitset_new:c
+% }
+% \begin{macrocode}
+\cs_new_protected:Npn \bitset_new:N #1
+ {
+ \__kernel_chk_if_free_cs:N #1
+ \cs_gset_eq:NN #1 \c_zero_str
+ \prop_new:c { g__bitset_ \cs_to_str:N #1 _name_prop }
+ }
+
+\cs_new_protected:Npn \bitset_new:Nn #1 #2
+ {
+ \__kernel_chk_if_free_cs:N #1
+ \cs_gset_eq:NN #1 \c_zero_str
+ \prop_new:c { g__bitset_ \cs_to_str:N #1 _name_prop }
+ \prop_gset_from_keyval:cn
+ { g__bitset_ \cs_to_str:N #1 _name_prop }
+ {#2}
+ }
+\cs_generate_variant:Nn \bitset_new:N { c }
+% \end{macrocode}
+% \end{macro}
+% \begin{variable}{\l_@@_tmpa_prop}
+% A scratch prop to be able to extend the names properties.
+% \begin{macrocode}
+\prop_new:N \l_@@_tmpa_prop
+% \end{macrocode}
+% \end{variable}
+% \begin{macro}
+% {
+% \bitset_addto_named_index:Nn
+% }
+% \begin{macrocode}
+\cs_new_protected:Npn \bitset_addto_named_index:Nn #1#2
+ {
+ \prop_set_from_keyval:Nn \l_@@_tmpa_prop {#2}
+ \prop_map_inline:Nn \l_@@_tmpa_prop
+ {
+ \prop_gput:cnn
+ { g_@@_ \cs_to_str:N #1 _name_prop }
+ {##1}
+ {##2}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[EXP,pTF]
+% {
+% \bitset_if_exist:N, \bitset_if_exist:c
+% }
+% Existence tests.
+% \begin{macrocode}
+\prg_new_eq_conditional:NNn
+ \bitset_if_exist:N \str_if_exist:N { p , T , F , TF }
+\prg_new_eq_conditional:NNn
+ \bitset_if_exist:c \str_if_exist:c
+ { p , T , F , TF }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_set_true:Nn, \@@_gset_true:Nn, \@@_set_false:Nn, \@@_gset_false:Nn}
+% \begin{macro}{\@@_set:NNnN}
+% The internal command uses only numbers (integer expressions) for the
+% position.
+% A bit is set by either extending the string or by splitting it and
+% then inserting an $1$. It is not checked if the value was already $1$.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_set_true:Nn #1#2
+ { \@@_set:NNnN \str_set:Nx #1 {#2} 1 }
+\cs_new_protected:Npn \@@_gset_true:Nn #1#2
+ { \@@_set:NNnN \str_gset:Nx #1 {#2} 1 }
+\cs_new_protected:Npn \@@_set_false:Nn #1#2
+ { \@@_set:NNnN \str_set:Nx #1 {#2} 0 }
+\cs_new_protected:Npn \@@_gset_false:Nn #1#2
+ { \@@_set:NNnN \str_gset:Nx #1 {#2} 0 }
+\cs_new_protected:Npn \@@_set:NNnN #1#2#3#4
+ {
+ \int_compare:nNnT {#3} > { 0 }
+ {
+ \int_compare:nNnTF { \str_count:N #2 } < {#3}
+ {
+ #1 #2
+ {
+ #4
+ \prg_replicate:nn { #3 - \str_count:N #2 - 1 } { 0 }
+ #2
+ }
+ }
+ {
+ #1 #2
+ {
+ \str_range:Nnn #2 { 1 } { -1 - (#3) }
+ #4
+ \str_range:Nnn #2 { 1 - (#3) } { -1 }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{variable}{\l_@@_internal_int}
+% \begin{macrocode}
+\int_new:N \l_@@_internal_int
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}[TF]{\@@_test_digits:n}
+% \begin{macro}{\@@_test_digits_end:n}
+% \begin{macro}{\@@_test_digits:wn}
+% \url{https://chat.stackexchange.com/transcript/message/56878159#56878159}
+% \begin{macrocode}
+\prg_new_protected_conditional:Npnn \@@_test_digits:n #1 { TF }
+ {
+ \tex_afterassignment:D \@@_test_digits:w
+ \l_@@_internal_int = 0 \tl_trim_spaces_apply:nN {#1} \tl_to_str:n
+ \@@_test_digits_end:
+ \use_i:nnn \if_false:
+ \@@_test_digits_end:
+ \if_int_compare:w \c_zero_int < \l_@@_internal_int
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+\cs_new_eq:NN \@@_test_digits_end: \exp_stop_f:
+\cs_new_protected:Npn \@@_test_digits:w #1 \@@_test_digits_end: { }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}
+% {
+% \bitset_set_true:Nn, \bitset_set_true:cn,
+% \bitset_gset_true:Nn, \bitset_gset_true:cn,
+% }
+% \begin{macro}{\@@_set_aux:NNn}
+% The user commands must first translate the argument to an index number.
+% \begin{macrocode}
+\cs_new_protected:Npn \bitset_set_true:Nn #1#2
+ { \@@_set:NNn \@@_set_true:Nn #1 {#2} }
+\cs_new_protected:Npn \bitset_gset_true:Nn #1#2
+ { \@@_set:NNn \@@_gset_true:Nn #1 {#2} }
+\cs_new_protected:Npn \bitset_set_false:Nn #1#2
+ { \@@_set:NNn \@@_set_false:Nn #1 {#2} }
+\cs_new_protected:Npn \bitset_gset_false:Nn #1#2
+ { \@@_set:NNn \@@_gset_false:Nn #1 {#2} }
+\cs_new_protected:Npn \@@_set:NNn #1#2#3
+ {
+ \prop_if_in:cnTF { g_@@_ \cs_to_str:N #2 _name_prop } {#3}
+ {
+ #1 #2
+ {
+ \prop_item:cn { g_@@_ \cs_to_str:N #2 _name_prop } {#3}
+ }
+ }
+ {
+ \@@_test_digits:nTF {#3}
+ {
+ #1 #2 {#3}
+ \prop_gput:cnn { g_@@_ \cs_to_str:N #2 _name_prop } {#3} {#3}
+ }
+ {
+ \__kernel_msg_warning:nnxx { bitset } { bitset-unknown-name }
+ { \token_to_str:N #2 }
+ { \tl_to_str:n {#3} }
+ }
+ }
+ }
+\cs_generate_variant:Nn \bitset_set_true:Nn { c }
+\cs_generate_variant:Nn \bitset_gset_true:Nn { c }
+\cs_generate_variant:Nn \bitset_set_false:Nn { c }
+\cs_generate_variant:Nn \bitset_gset_false:Nn { c }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}
+% {
+% \bitset_clear:N, \bitset_clear:c,
+% \bitset_gclear:N, \bitset_gclear:c
+% }
+% \begin{macrocode}
+\cs_new_protected:Npn \bitset_clear:N #1
+ {
+ \str_set_eq:NN #1 \c_zero_str
+ }
+\cs_new_protected:Npn \bitset_gclear:N #1
+ {
+ \str_gset_eq:NN #1 \c_zero_str
+ }
+\cs_generate_variant:Nn \bitset_clear:N { c }
+\cs_generate_variant:Nn \bitset_gclear:N { c }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}
+% {
+% \bitset_to_arabic:N, \bitset_to_arabic:c,
+% \bitset_to_bin:N, \bitset_to_bin:c,
+% }
+% The naming of the commands follow the names in the \texttt{int} module.
+% \cs{bitset_to_arabic:N} uses \cs{int_from_bin:n} if the string is shorter
+% then $32$ and the slower \cs{fp_eval} for larger bitsets.
+% \begin{macrocode}
+\cs_new:Npn \bitset_to_arabic:N #1
+ {
+ \int_compare:nNnTF { \str_count:N #1 } < { 32 }
+ { \exp_args:No \int_from_bin:n {#1} }
+ {
+ \exp_after:wN \@@_to_int:nN \exp_after:wN 0
+ #1 \q_recursion_tail \q_recursion_stop
+ }
+ }
+
+\cs_new:Npn \@@_to_int:nN #1#2
+ {
+ \quark_if_recursion_tail_stop_do:Nn #2 {#1}
+ \exp_args:Nf \@@_to_int:nN { \fp_eval:n { #1 * 2 + #2 } }
+ }
+
+\cs_new:Npn \bitset_to_bin:N #1
+ {
+ #1
+ }
+\cs_generate_variant:Nn \bitset_to_arabic:N { c }
+\cs_generate_variant:Nn \bitset_to_bin:N { c }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}
+% {
+% \bitset_item:Nn, \bitset_item:cn
+% }
+% All bits that have been set at anytime have an entry in the prop,
+% so we can take everything else as $0$.
+% \begin{macrocode}
+\cs_new:Npn \bitset_item:Nn #1#2
+ {
+ \prop_if_in:cnTF { g_@@_ \cs_to_str:N #1 _name_prop } {#2}
+ {
+ \int_eval:n
+ {
+ \str_item:Nn #1
+ { 0 - ( \prop_item:cn { g_@@_ \cs_to_str:N #1 _name_prop } {#2} ) }
+ +0
+ }
+ }
+ {
+ 0
+ }
+ }
+\cs_generate_variant:Nn \bitset_item:Nn { c }
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}
+% {
+% \bitset_show:N, \bitset_show:c,
+% \bitset_log:N, \bitset_log:c
+% }
+% \begin{macrocode}
+\cs_new_protected:Npn \bitset_show:N { \@@_show:NN \msg_show:nnxxxx }
+\cs_generate_variant:Nn \bitset_show:N { c }
+\cs_new_protected:Npn \bitset_log:N { \@@_show:NN \msg_log:nnxxxx }
+\cs_generate_variant:Nn \bitset_log:N { c }
+\cs_new_protected:Npn \bitset_show_named_index:N { \@@_show_named_index:NN \msg_show:nnxxxx }
+\cs_generate_variant:Nn \bitset_show_named_index:N { c }
+\cs_new_protected:Npn \@@_show:NN #1#2
+ {
+ \__kernel_chk_defined:NT #2
+ {
+ #1 { LaTeX/bitset } { show-bitset }
+ { \token_to_str:N #2 }
+ { \bitset_to_bin:N #2 }
+ { \bitset_to_arabic:N #2 }
+ { }
+ }
+ }
+\cs_new_protected:Npn \@@_show_named_index:NN #1#2
+ {
+ \__kernel_chk_defined:NT #2
+ {
+ #1 { LaTeX/bitset } { show-names }
+ { \token_to_str:N #2 }
+ { \prop_map_function:cN { g_@@_ \cs_to_str:N #2 _name_prop } \msg_show_item:nn }
+ { }
+ { }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Messages}
+% \begin{macrocode}
+ \__kernel_msg_new:nnn { bitset } { show-bitset }
+ {
+ The~bitset~#1~has~the~representation: \\
+ >~binary:~#2 \\
+ >~arabic:~#3 .
+ }
+\__kernel_msg_new:nnn { bitset } { show-names }
+ {
+ The~bitset~#1~
+ \tl_if_empty:nTF {#2}
+ { knows~no~names~yet \\>~ . }
+ { knows~the~name/index~pairs~(without~outer~braces): #2 . }
+ }
+\__kernel_msg_new:nnn { bitset } { bitset-unknown-name }
+ { The~name~'#2'~is~unknown~for~bitset~\tl_to_str:n {#1} }
+
+% \end{macrocode}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+% \end{macro}
+%
+% \end{implementation}
+%
+% \PrintIndex
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.ins b/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.ins
index e968f1bf838..1f693d29569 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.ins
+++ b/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.ins
@@ -1,8 +1,8 @@
\iffalse meta-comment
-File: l3cctab.ins
+File: l3bitset.ins
-Copyright (C) 2018-2020 The LaTeX3 Project
+Copyright (C) 2020 The LaTeX3 Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -34,7 +34,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2018-2020 The LaTeX3 Project
+Copyright (C) 2020 The LaTeX3 Project
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -53,9 +53,9 @@ and all files in that bundle must be distributed together.
\keepsilent
-\generate{\file{l3cctab.sty}
+\generate{\file{l3bitset.sty}
{
- \from{l3cctab.dtx}{package}
+ \from{l3bitset.dtx} {package}
}
}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx b/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx
deleted file mode 100644
index f7418e117f6..00000000000
--- a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx
+++ /dev/null
@@ -1,556 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3cctab.dtx
-%
-% Copyright (C) 2018-2020 The LaTeX3 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|package>
-%<*driver>
-\documentclass[full]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3cctab} package\\ Experimental category code tables^^A
-% }
-%
-% \author{^^A
-% The \LaTeX3 Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2020-01-12}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \section{\pkg{l3cctab} documentation}
-%
-% A category code table enables rapid switching of all category codes in
-% one operation. For \LuaTeX{}, this is possible over the entire Unicode
-% range. For other engines, only the $8$-bit range ($0$-$255$) is covered by
-% such tables.
-%
-% \subsection{Creating and initialising category code tables}
-%
-% \begin{function}{\cctab_new:N,\cctab_new:c}
-% \begin{syntax}
-% \cs{cctab_new:N} \meta{category code table}
-% \end{syntax}
-% Creates a new \meta{category code table} variable or raises an error if
-% the name is already taken. The declaration is global. The
-% \meta{category code table} is initialised with the codes
-% as used by \IniTeX{}.
-% \end{function}
-%
-% \begin{function}{\cctab_const:Nn,\cctab_const:cn}
-% \begin{syntax}
-% \cs{cctab_const:Nn} \meta{category code table} \Arg{category code set up}
-% \end{syntax}
-% Creates a new \meta{category code table} with the category code settings in
-% force at the time the function is called, and applies the
-% \meta{category code set up} on top of prevailing settings, then saves
-% as a constant table.
-% \end{function}
-%
-% \begin{function}{\cctab_gset:Nn,\cctab_gset:cn}
-% \begin{syntax}
-% \cs{cctab_gset:Nn} \meta{category code table} \Arg{category code set up}
-% \end{syntax}
-% Sets the \meta{category code table} to apply the category codes
-% which apply when the prevailing régime is modified by the
-% \meta{category code set up}. Thus within a standard code block
-% the starting point will be the code applied by \cs{c_code_cctab}.
-% The assignment of the table is global: the underlying primitive does
-% not respect grouping.
-% \end{function}
-%
-% \subsection{Using category code tables}
-%
-% \begin{function}{\cctab_begin:N,\cctab_begin:c}
-% \begin{syntax}
-% \cs{cctab_begin:N} \meta{category code table}
-% \end{syntax}
-% Switches the category codes in force to those stored in the
-% \meta{category code table}. The prevailing codes before the
-% function is called are added to a stack, for use with
-% \cs{cctab_end:}. This function does not start a \TeX{} group.
-% \end{function}
-%
-% \begin{function}{\cctab_end:}
-% \begin{syntax}
-% \cs{cctab_end:}
-% \end{syntax}
-% Ends the scope of a \meta{category code table} started using
-% \cs{cctab_begin:N}, retuning the codes to those in force before
-% the matching \cs{cctab_begin:N} was used.
-% \end{function}
-%
-% \subsection{Category code table conditionals}
-%
-% \begin{function}[pTF]{\cctab_if_exist:N,\cctab_if_exist:c}
-% \begin{syntax}
-% \cs{cctab_if_exist_p:N} \meta{category code table}
-% \cs{cctab_if_exist:NTF} \meta{category code table} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{category code table} is currently defined.
-% This does not check that the \meta{category code table} really is a
-% category code table.
-% \end{function}
-%
-% \subsection{Constant category code tables}
-%
-% \begin{variable}{\c_code_cctab}
-% Category code table for the code environment. This does not include
-% setting the behaviour of the line-end character, which is only
-% altered by \cs{ExplSyntaxOn}.
-% \end{variable}
-%
-% \begin{variable}{\c_document_cctab}
-% Category code table for a standard \LaTeX{} document. This does not
-% include setting the behaviour of the line-end character, which is
-% only altered by \cs{ExplSyntaxOff}.
-% \end{variable}
-%
-% \begin{variable}{\c_initex_cctab}
-% Category code table as set up by \IniTeX{}.
-% \end{variable}
-%
-% \begin{variable}{\c_other_cctab}
-% Category code table where all characters have category code $12$
-% (other).
-% \end{variable}
-%
-% \begin{variable}{\c_str_cctab}
-% Category code table where all characters have category code $12$
-% (other) with the exception of spaces, which have category code
-% $10$ (space).
-% \end{variable}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3cctab} implementation}
-%
-% \begin{macrocode}
-%<*initex|package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=cctab>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3cctab}{2020-01-12}{}
- {L3 Experimental category code tables}
-%</package>
-% \end{macrocode}
-%
-% \begin{variable}{\g_@@_allocate_int}
-% \begin{variable}{\g_@@_stack_int}
-% \begin{variable}{\g_@@_stack_seq}
-% To allocate category code tables, both the read-only and stack
-% tables need to be followed. There is also a sequence stack for the
-% dynamic tables themselves.
-% \begin{macrocode}
-\int_new:N \g_@@_allocate_int
-\int_gset:Nn \g_@@_allocate_int { -1 }
-\int_new:N \g_@@_stack_int
-\seq_new:N \g_@@_stack_seq
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_tmp_tl}
-% Scratch space.
-% \begin{macrocode}
-\tl_new:N \l_@@_tmp_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\cctab_new:N,\cctab_new:c}
-% \begin{macro}{\@@_begin:N,\@@_begin:c}
-% \begin{macro}{\@@_end:}
-% \begin{macro}{\cctab_gset:Nn,\cctab_gset:cn}
-% As \LuaTeX{} offers engine support for category code tables, and this is
-% entirely lacking from the other engines, we need two complementary
-% approaches here. Rather than intermix them, we split the set up based on
-% engine. (Some future \XeTeX{} may add support, at which point the
-% conditional here would be subtly different.)
-%
-% First, the \LuaTeX{} case.
-% \begin{macrocode}
-\sys_if_engine_luatex:TF
- {
-% \end{macrocode}
-% Creating a new category code table is done slightly differently
-% from other registers. Low-numbered tables are more efficiently-stored
-% than high-numbered ones. There is also a need to have a stack of
-% flexible tables as well as the set of read-only ones. To satisfy both
-% of these requirements, odd numbered tables are used for read-only
-% tables, and even ones for the stack. Here, therefore, the odd numbers
-% are allocated.
-% \begin{macrocode}
- \cs_new_protected:Npn \cctab_new:N #1
- {
- \__kernel_chk_if_free_cs:N #1
-%<*initex>
- \int_gadd:Nn \g_@@_allocate_int { 2 }
- \int_compare:nNnTF
- \g_@@_allocate_int < { \c_max_register_int + 1 }
- {
- \tex_global:D \tex_chardef:D #1 \g_@@_allocate_int
- \tex_initcatcodetable:D #1
- }
- {
- \__kernel_msg_fatal:nnx
- { kernel } { out-of-registers } { cctab }
- }
-%</initex>
-%<*package>
- \newcatcodetable #1
-%</package>
- }
-% \end{macrocode}
-% The aim here is to ensure that the saved tables are read-only. This is
-% done by using a stack of tables which are not read only, and actually
-% having them as \enquote{in use} copies.
-% \begin{macrocode}
- \cs_new_protected:Npn \@@_begin:N #1
- {
- \seq_gpush:Nx \g_@@_stack_seq { \tex_the:D \tex_catcodetable:D }
- \tex_catcodetable:D #1
- \int_gadd:Nn \g_@@_stack_int { 2 }
- \int_compare:nNnT \g_@@_stack_int > \c_max_register_int
- { \__kernel_msg_fatal:nn { kernel } { cctab-stack-full } }
- \tex_savecatcodetable:D \g_@@_stack_int
- \tex_catcodetable:D \g_@@_stack_int
- }
- \cs_new_protected:Npn \@@_end:
- {
- \int_gsub:Nn \g_@@_stack_int { 2 }
- \seq_if_empty:NTF \g_@@_stack_seq
- { \tl_set:Nn \l_@@_tmp_tl { 0 } }
- { \seq_gpop:NN \g_@@_stack_seq \l_@@_tmp_tl }
- \tex_catcodetable:D \l_@@_tmp_tl \scan_stop:
- }
-% \end{macrocode}
-% Category code tables are always global, so only one version is needed.
-% The set up here is simple, and means that at the point of use there is
-% no need to worry about escaping category codes.
-% \begin{macrocode}
- \cs_new_protected:Npn \cctab_gset:Nn #1#2
- {
- \group_begin:
- #2 \scan_stop:
- \tex_savecatcodetable:D #1
- \group_end:
- }
- }
-% \end{macrocode}
-% Now the case for other engines. Here, we use an integer array for each
-% table. The index base is out-by-one, so we have an internal function to
-% handle that. The rest of the approach here is pretty simple: use a stack
-% of tables, and save to them at each |begin|. Unlike the \LuaTeX{} case,
-% we can't accidentally alter a saved table, which makes life a little
-% easier.
-% \begin{macrocode}
- {
- \cs_new_protected:Npn \@@_gstore:Nnn #1#2#3
- {
- \intarray_gset:cnn
- { g_@@_ \int_use:N #1 _cctab } { #2 + 1 } {#3}
- }
-% \end{macrocode}
-% Following the \LuaTeX{} pattern, a new table starts with \IniTeX{} codes.
-% \begin{macrocode}
- \cs_new_protected:Npn \cctab_new:N #1
- {
- \int_gadd:Nn \g_@@_allocate_int { 2 }
- \int_const:Nn #1 { \g_@@_allocate_int }
- \intarray_new:cn { g_@@_ \int_use:N #1 _cctab } { 256 }
- \int_step_inline:nn { 256 }
- {
- \intarray_gset:cnn
- { g_@@_ \int_use:N #1 _cctab } {##1} { 12 }
- }
- \@@_gstore:Nnn #1 { 0 } { 9 }
- \@@_gstore:Nnn #1 { 13 } { 5 }
- \@@_gstore:Nnn #1 { 32 } { 10 }
- \@@_gstore:Nnn #1 { 37 } { 14 }
- \int_step_inline:nnn { 65 } { 90 }
- { \@@_gstore:Nnn #1 {##1} { 11 } }
- \@@_gstore:Nnn #1 { 92 } { 0 }
- \int_step_inline:nnn { 97 } { 122 }
- { \@@_gstore:Nnn #1 {##1} { 11 } }
- \@@_gstore:Nnn #1 { 127 } { 15 }
- }
- \cs_new_protected:Npn \@@_begin:N #1
- {
- \int_gadd:Nn \g_@@_stack_int { 2 }
- \int_compare:nNnT \g_@@_stack_int > \c_max_register_int
- { \__kernel_msg_fatal:nn { kernel } { cctab-stack-full } }
- \cs_if_exist:cF { g_@@_ \int_use:N \g_@@_stack_int _cctab }
- {
- \intarray_new:cn
- { g_@@_ \int_use:N \g_@@_stack_int _cctab }
- { 256 }
- }
- \int_step_inline:nn { 256 }
- {
- \intarray_gset:cnn
- { g_@@_ \int_use:N \g_@@_stack_int _cctab }
- {##1}
- { \char_value_catcode:n { ##1 - 1 } }
- }
- \int_step_inline:nn { 256 }
- {
- \char_set_catcode:nn { ##1 - 1 }
- {
- \intarray_item:cn
- { g_@@_ \int_use:N #1 _cctab } {##1}
- }
- }
- }
- \cs_generate_variant:Nn \intarray_new:Nn { c }
- \cs_generate_variant:Nn \intarray_gset:Nnn { c }
- \cs_new_protected:Npn \@@_end:
- {
- \int_step_inline:nn { 256 }
- {
- \char_set_catcode:nn { ##1 - 1 }
- {
- \intarray_item:cn
- { g_@@_ \int_use:N \g_@@_stack_int _cctab }
- {##1}
- }
- }
- \int_gsub:Nn \g_@@_stack_int { 2 }
- }
- \cs_generate_variant:Nn \intarray_item:Nn { c }
- \cs_new_protected:Npn \cctab_gset:Nn #1#2
- {
- \group_begin:
- #2 \scan_stop:
- \int_step_inline:nn { 256 }
- {
- \intarray_gset:cnn { g_@@_ \int_use:N #1 _cctab } {##1}
- { \char_value_catcode:n { ##1 - 1 } }
- }
- \group_end:
- }
- }
-\cs_generate_variant:Nn \cctab_new:N { c }
-\cs_generate_variant:Nn \cctab_gset:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\cctab_begin:N,\cctab_end:}
-% These functions perform a few sanity checks before calling the
-% functions which will do the heavy-lifting.
-% \cs{cctab_begin:N} checks if a \meta{cctab~var} exists before trying
-% to use it. \cs{cctab_end:} checks if a \cs{cctab_begin:N} was used
-% some time earlier.
-%
-% Skipping these checks would result in an \enquote{Undefined control
-% sequence} error for \cs{cctab_begin:N} with an undefined
-% \meta{cctab~var}, and a \enquote{Missing font identifier} for an extra
-% \cs{cctab_end:}.
-% \begin{macrocode}
-\cs_new_protected:Npn \cctab_begin:N #1
- { \@@_chk_if_valid:NT #1 { \__cctab_begin:N #1 } }
-\cs_generate_variant:Nn \cctab_begin:N { c }
-\cs_new_protected:Npn \cctab_end:
- {
- \int_compare:nNnTF { \g_@@_stack_int } = { \c_zero_int }
- { \__kernel_msg_error:nn { kernel } { cctab-extra-end } }
- { \@@_end: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\cctab_if_exist:N,\cctab_if_exist:c}
-% Checks whether a \meta{cctab~var} is defined.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \cctab_if_exist:N \cs_if_exist:N
- { TF , T , F , p }
-\prg_new_eq_conditional:NNn \cctab_if_exist:c \cs_if_exist:c
- { TF , T , F , p }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_chk_if_valid:N}
-% Checks whether the argument is defined and whether it is a valid
-% \meta{cctab~var}. In \LuaTeX{} the validity of the \meta{cctab~var}
-% is checked by the engine, which complains if the argument is not
-% a \cs{chardef}'ed constant. In other engines, check if the
-% underlying \cs[no-index]{g_@@_\meta{integer}_cctab}
-% \meta{intarray~var} exists.
-% \begin{macrocode}
-\sys_if_engine_luatex:TF
- {
- \prg_new_protected_conditional:Npnn \@@_chk_if_valid:N #1
- { TF , T , F }
- {
- \cctab_if_exist:NTF #1
- {
-%<*initex>
- \bool_lazy_and:nnTF
- { \int_if_odd_p:n {#1} }
- { \int_compare_p:nNn {#1-1} < { \g_@@_allocate_int } }
-%</initex>
-%<*package>
- \int_compare:nNnTF {#1-1} < { \e@alloc@ccodetable@count }
-%</package>
- { \prg_return_true: }
- {
- \__kernel_msg_error:nnx { kernel } { invalid-cctab }
- { \token_to_str:N #1 }
- \prg_return_false:
- }
- }
- {
- \__kernel_msg_error:nnx { kernel } { command-not-defined }
- { \token_to_str:N #1 }
- \prg_return_false:
- }
- }
- }
- {
- \prg_new_protected_conditional:Npnn \@@_chk_if_valid:N #1
- { TF , T , F }
- {
- \cctab_if_exist:NTF #1
- {
- \cs_if_exist:cTF { g_@@_ \int_use:N #1 _cctab }
- { \prg_return_true: }
- {
- \__kernel_msg_error:nnx { kernel } { invalid-cctab }
- { \token_to_str:N #1 }
- \prg_return_false:
- }
- }
- {
- \__kernel_msg_error:nnx { kernel } { command-not-defined }
- { \token_to_str:N #1 }
- \prg_return_false:
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\cctab_const:Nn,\cctab_const:cn}
-% Creates a new \meta{cctab~var} then sets it with the current and
-% user-supplied codes.
-% \begin{macrocode}
-\cs_new_protected:Npn \cctab_const:Nn #1#2
- {
- \cctab_new:N #1
- \cctab_gset:Nn #1 {#2}
- }
-\cs_generate_variant:Nn \cctab_const:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}
-% {
-% \c_initex_cctab ,
-% \c_code_cctab ,
-% \c_document_cctab ,
-% \c_other_cctab ,
-% \c_str_cctab
-% }
-% Creating category code tables is easy using the function above.
-% The \texttt{other} and \texttt{string} ones are done by completely
-% ignoring the existing codes as this makes life a lot less complex.
-% \begin{macrocode}
-\cctab_new:N \c_initex_cctab
-\cctab_const:Nn \c_code_cctab { }
-\cctab_const:Nn \c_document_cctab
- {
- \char_set_catcode_space:n { 9 }
- \char_set_catcode_space:n { 32 }
- \char_set_catcode_other:n { 58 }
- \char_set_catcode_math_subscript:n { 95 }
- \char_set_catcode_active:n { 126 }
- }
-\cctab_const:Nn \c_other_cctab
- {
- \int_step_inline:nnn { 0 } { 127 }
- { \char_set_catcode_other:n {#1} }
- }
-\cctab_const:Nn \c_str_cctab
- {
- \int_step_inline:nnn { 0 } { 127 }
- { \char_set_catcode_other:n {#1} }
- \char_set_catcode_space:n { 32 }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Messages}
-%
-% \begin{macrocode}
-\__kernel_msg_new:nnnn { kernel } { cctab-stack-full }
- { The~category~code~table~stack~is~exhausted. }
- {
- LaTeX~has~been~asked~to~switch~to~a~new~category~code~table,~
- but~there~is~no~more~space~to~do~this!
- }
-\__kernel_msg_new:nnnn { kernel } { cctab-extra-end }
- { Extra~\iow_char:N\\cctab_end:~ignored~\msg_line_context:. }
- {
- LaTeX~came~across~a~\iow_char:N\\cctab_end:~without~a~matching~
- \iow_char:N\\cctab_begin:N.~This~command~will~be~ignored.
- }
-\__kernel_msg_new:nnnn { kernel } { invalid-cctab }
- { Invalid~\iow_char:N\\catcode~table. }
- {
- You~can~only~switch~to~a~\iow_char:N\\catcode~table~that~is~
- initialized~using~\iow_char:N\\cctab_new:N~or~
- \iow_char:N\\cctab_const:Nn.
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</initex|package>
-% \end{macrocode}
-%
-%\end{implementation}
-%
-%\PrintIndex
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx
deleted file mode 100644
index de6616acf3d..00000000000
--- a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx
+++ /dev/null
@@ -1,904 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3color.dtx
-%
-% Copyright (C) 2017-2020 The LaTeX3 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|package>
-%<*driver>
-\documentclass[full]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \textsf{l3color} package\\ Experimental color support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX3 Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2020-01-12}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \section{Color models}
-%
-% A color \emph{model} is a way to represent sets of colors. Different models
-% are particularly suitable for different output methods, \emph{e.g.}~screen
-% or print. Parameter-based models can describe a very large number of unique
-% colors, and have a varying number of \emph{axes} which define a color
-% space. In contrast, various proprietary models are available which define
-% \emph{spot} colors.
-%
-% The models supported here are
-% \begin{itemize}
-% \item \texttt{gray} Grayscale color, with a single axis running from
-% $0$ (fully black) to $1$ (fully white)
-% \item \texttt{rgb} Red-green-blue color, with three axes, one for each of
-% the components
-% \item \texttt{cmyk} Cyan-magenta-yellow-black color, with four axes, one for
-% each of the components
-% \item \texttt{spot} Spot color, with one value, the name of the color
-% (see \url{https://helpx.adobe.com/indesign/using/spot-process-colors.html}
-% for details of the use of spot colors in print)
-% \end{itemize}
-%
-% Additional models may be created to allow mixing of spot colors
-% with each other or with those from other models. See
-% Section~\ref{l3color:sec:spot} for more detail of spot color support.
-%
-% When color is selected by model, the \meta{values} given are specified as
-% a comma-separated list. The length of the list will therefore be determined
-% by the detail of the model involved.
-%
-% Color models (and interconversion) are complex, and more details are given
-% in the manual to the \LaTeXe{} \pkg{xcolor} package and in the
-% \emph{PostScript Language Reference Manual}, published by Addison--Wesley.
-%
-% \section{Color expressions}
-%
-% In addition to allowing specification of color by model and values,
-% \pkg{l3color} also supports color expressions. These are created
-% by combining one or more color names, with the amount of each specified
-% as a percentage. The latter is given between |!| symbols in the expression.
-% Thus for example
-% \begin{verbatim}
-% red!50!green
-% \end{verbatim}
-% is a mixture of $50\,\%$ red and $50\,\%$ green. A trailing percentage is
-% interpreted as implicitly followed by |white|, and so
-% \begin{verbatim}
-% red!25
-% \end{verbatim}
-% specifies $25\,\%$ red mixed with $75\,\%$ white.
-%
-% Where the models for the mixed colors are different, the model of the first
-% color is used. Thus
-% \begin{verbatim}
-% red!50!cyan
-% \end{verbatim}
-% will result in a color specification using the |rgb| model, made up of
-% $50\,\%$ red and $50\,\%$ of cyan \emph{expressed in \texttt{rgb}}. As color
-% model interconversion is not exact.
-%
-% The one exception to the above is where the first model in an expression is
-% |gray|. In this case, the order of mixing is \enquote{swapped} internally, so
-% that for example
-% \begin{verbatim}
-% black!50!red
-% \end{verbatim}
-% has the same result as
-% \begin{verbatim}
-% red!50!black
-% \end{verbatim}
-% (the predefined colors |black| and |white| use the |gray| model).
-%
-% Where more than two colors are mixed in an expression, evaluation takes place
-% in a stepwise fashion. Thus in
-% \begin{verbatim}
-% cyan!50!magenta!10!yellow
-% \end{verbatim}
-% the sub-expression
-% \begin{verbatim}
-% cyan!50!magenta
-% \end{verbatim}
-% is first evaluated to give an intermediate color specification, before
-% the second step
-% \begin{verbatim}
-% <intermediate>!10!yellow
-% \end{verbatim}
-% where |<intermediate>| represents this transitory calculated value.
-%
-% Within a color expression, |.| may be used to represent the color active
-% for typesetting (the current color). This allows for example
-% \begin{verbatim}
-% .!50
-% \end{verbatim}
-% to mean a mixture of $50\,\%$ of current color with white.
-%
-% (Color expressions supported here are a subset of those provided by
-% the \LaTeXe{} \pkg{xcolor} package. At present, only such features as are
-% clearly useful have been added here.)
-%
-% \section{Named colors}
-%
-% Color names are stored in a single namespace, which makes them accessible
-% as part of color expressions. Whilst they are not reserved in a technical
-% sense, the names |black|, |white|, |red|, |green|, |blue|, |cyan|, |magenta|
-% and |yellow| have special meaning and should not be redefined. Color names
-% should be made up of letters, numbers and spaces only: other characters are
-% reserved for use in color expressions. In particular, |.| represents the
-% current color at the start of a color expression.
-%
-% \begin{function}{\color_set:nn}
-% \begin{syntax}
-% \cs{color_set:nn} \Arg{name} \Arg{color expression}
-% \end{syntax}
-% Evaluates the \meta{color expression} and stores the resulting
-% color specification as the \meta{name}.
-% \end{function}
-%
-% \begin{function}{\color_set:nnn}
-% \begin{syntax}
-% \cs{color_set:nnn} \Arg{name} \Arg{model} \Arg{value(s)}
-% \end{syntax}
-% Stores the color specification equivalent to the \meta{model} and
-% \meta{values} as the \meta{name}.
-% \end{function}
-%
-% \begin{function}{\color_set_eq:nn}
-% \begin{syntax}
-% \cs{color_set_eq:nn} \Arg{name1} \Arg{name2}
-% \end{syntax}
-% Copies the color specification in \meta{name2} to \meta{name1}. The
-% special name |.| may be used to represent the current color, allowing
-% it to be saved to a name.
-% \end{function}
-%
-% \begin{function}{\color_show:n}
-% \begin{syntax}
-% \cs{color_show:n} \Arg{name}
-% \end{syntax}
-% Displays the color specification stored in the \meta{name} on the
-% terminal.
-% \end{function}
-%
-% \section{Selecting colors}
-%
-% \begin{function}{\color_select:n}
-% \begin{syntax}
-% \cs{color_select:n} \Arg{color expression}
-% \end{syntax}
-% Parses the \meta{color expression} and then activates the resulting
-% color specification for typeset material.
-% \end{function}
-%
-% \begin{function}{\color_select:nn}
-% \begin{syntax}
-% \cs{color_select:nn} \Arg{model} \Arg{value(s)}
-% \end{syntax}
-% Activates the color specification equivalent to the \meta{model} and
-% \meta{value(s)} for typeset material.
-% \end{function}
-%
-% \begin{variable}{\l_color_fixed_model_tl}
-% When this is set to a non-empty value, colors will be converted to
-% the specified model when they are selected. Note that included images
-% and similar are not influenced by this setting.
-% \end{variable}
-%
-% \section{Core color representation}
-%
-% To allow data to be handled internally, \pkg{l3color} uses a simple
-% representation of color, based on that used by the \pkg{dvips} program.
-% This is a token list made up of the model name followed by one or more
-% data entries, each separated by a \emph{space}. The valid forms are thus
-% \begin{itemize}
-% \item \texttt{gray \meta{gray}} Grayscale color with the \meta{gray}
-% value running from $0$ (fully black) to $1$ (fully white)
-% \item \texttt{cmyk \meta{cyan} \meta{magenta} \meta{yellow} \meta{black}},
-% each of which falls in the range $[0,1]$
-% \item \texttt{rgb \meta{red} \meta{green} \meta{blue}},
-% each of which falls in the range $[0,1]$
-% \item \texttt{spot \meta{name} \meta{tint}} A pre-defined spot color,
-% where the \meta{name} should be a pre-defined string color name and the
-% \meta{tint} should be in the range $[0,1]$.
-% \end{itemize}
-%
-% This core representation is produced when parsing color expressions.
-%
-% \begin{function}{\color_parse:nN}
-% \begin{syntax}
-% \cs{color_parse:nN} \Arg{color expression} \Arg{tl}
-% \end{syntax}
-% Parses the \meta{color expression} as described above, and sets the
-% \meta{tl} the the equivalent \meta{core color representation}
-% (used at the backend level and based on \texttt{dvips} color
-% representation).
-% \end{function}
-%
-% \section{Spot colors}
-% \label{l3color:sec:spot}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3color} Implementation}
-%
-% \begin{macrocode}
-%<*initex|package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=color>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3color}{2020-01-12}{}
- {L3 Experimental color support}
-%</package>
-% \end{macrocode}
-%
-% \subsection{Predefined color names}
-%
-% The ability to predefine colors with a name is a key part of this module and
-% means there has to be a method for storing the results. At first sight, it
-% seems natural to follow the usual \pkg{expl3} model and create a
-% \texttt{color} variable type for the process. That would then allow both
-% local and global colors, constant colors and the like. However, these names
-% need to be accessible in some form at the user level, for selection of colors
-% either simply by name or as part of a more complex expression. This does not
-% require that the full name is exposed but does require that they can be
-% looked up in a predictable way. As such, it is more useful to expose just the
-% color names as part of the interface, with the result that only local color
-% names can be created. (This is also seen for example in key creation in
-% \pkg{l3keys}.) As a result, color names are declarative (no \texttt{new}
-% functions).
-%
-% Since there is no need to manipulate colors \emph{en masse}, each is stored
-% in a separate token list variable, rather than the alternative of using a
-% single property list for all names.
-%
-% \subsection{Setup}
-%
-% \begin{variable}{\l_@@_internal_tl}
-% \begin{macrocode}
-\tl_new:N \l_@@_internal_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Utility functions}
-%
-% \begin{macro}[int, TF, EXP]{\@@_if_defined:n}
-% A simple wrapper to avoid needing to have the lookup repeated in too many
-% places.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_if_defined:n #1 { T, F, TF }
- {
- \tl_if_exist:cTF { l_@@_named_ #1 _tl }
- \prg_return_true:
- \prg_return_false:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_extract:nNN, \@@_extract:VNN}
-% \begin{macro}{\@@_extract:NNw}
-% Split the model and color from a named color, and store the two. No test
-% for the existence of the color: that is assumed to be the case (this
-% is internal only). Somewhat \enquote{old-fashioned} but should be quite
-% fast.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_extract:nNN #1#2#3
- {
- \exp_after:wN \exp_after:wN \exp_after:wN
- \@@_extract:NNw
- \exp_after:wN \exp_after:wN \exp_after:wN #2
- \exp_after:wN \exp_after:wN \exp_after:wN #3
- \cs:w l_@@_named_ #1 _tl \cs_end: \q_stop
- }
-\cs_generate_variant:Nn \@@_extract:nNN { V }
-\cs_new_protected:Npn \@@_extract:NNw #1#2 #3 ~ #4 \q_stop
- {
- \tl_set:Nn #1 {#3}
- \tl_set:Nn #2 {#4}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Model conversion}
-%
-% \begin{macro}{\@@_convert:nnN, \@@_convert:VVN}
-% \begin{macro}{\@@_convert:nnnN}
-% \begin{macro}[aux, EXP]
-% {
-% \@@_convert_gray_rgb:w
-% \@@_convert_gray_cmyk:w
-% \@@_convert_cmyk_gray:w
-% \@@_convert_cmyk_rgb:w
-% \@@_convert_rgb_gray:w
-% \@@_convert_rgb_cmyk:w
-% }
-% \begin{macro}[aux, EXP]{\@@_convert_rgb_cmyk:nnnn}
-% Model conversion is carried out using standard formulae, as described in
-% the manual for \pkg{xcolor} (see also the \emph{PostScript Language
-% Reference Manual}).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_convert:nnN #1#2#3
- { \@@_convert:nnVN {#1} {#2} #3 #3 }
-\cs_generate_variant:Nn \@@_convert:nnN { VV }
-\cs_new_protected:Npn \@@_convert:nnnN #1#2#3#4
- {
- \str_if_eq:nnT {#1} { spot } % TO DO!!!
- { }
- \tl_set:Nx #4
- { \use:c { @@_convert_ #1 _ #2 :w } #3 ~ 0 ~ 0 ~ 0 \q_stop }
- }
-\cs_generate_variant:Nn \@@_convert:nnnN { nnV }
-\cs_new:Npn \@@_convert_gray_rgb:w #1 ~ #2 \q_stop
- { #1 ~ #1 ~ #1 }
-\cs_new:Npn \@@_convert_gray_cmyk:w #1 ~ #2 \q_stop
- { 0 ~ 0 ~ 0 ~ \fp_eval:n { 1 - #1 } }
-% \end{macrocode}
-% These rather odd values are based on \textsc{ntsc} television: the set are
-% used for the |cmyk| conversion.
-% \begin{macrocode}
-\cs_new:Npn \@@_convert_rgb_gray:w #1 ~ #2 ~ #3 ~ #4 \q_stop
- { \fp_eval:n { 0.3 * #1 + 0.59 * #2 + 0.11 * #3 } }
-% \end{macrocode}
-% The conversion from |rgb| to |cmyk| is the most complex: a two-step
-% procedure which requires \emph{black generation} and \emph{undercolor
-% removal} functions. The PostScript reference describes them as
-% device-dependent, but following \pkg{xcolor} we assume they are linear.
-% Moreover, as the likelihood of anyone using a non-unitary matrix here is
-% tiny, we simplify and treat those two concepts as no-ops.
-% \begin{macrocode}
-\cs_new:Npn \@@_convert_rgb_cmyk:w #1 ~ #2 ~ #3 ~ #4 \q_stop
- {
- \exp_args:Nf \@@_convert_rgb_cmyk:nnnn
- { \fp_eval:n { min ( 1 - #1 , 1 - #2 , 1 - #3 ) } } {#1} {#2} {#3}
- }
-\cs_new:Npn \@@_convert_rgb_cmyk:nnnn #1#2#3#4
- {
- \fp_eval:n { min ( 1 , max ( 0 , 1 - #2 - #1 ) ) } \c_space_tl
- \fp_eval:n { min ( 1 , max ( 0 , 1 - #3 - #1 ) ) } \c_space_tl
- \fp_eval:n { min ( 1 , max ( 0 , 1 - #4 - #1 ) ) } \c_space_tl
- #1
- }
-\cs_new:Npn \@@_convert_cmyk_gray:w #1 ~ #2 ~ #3 ~ #4 ~ #5 \q_stop
- { \fp_eval:n { 1 - min ( 1 , 0.3 * #1 + 0.59 * #2 + 0.11 * #3 + #4 ) } }
-\cs_new:Npn \@@_convert_cmyk_rgb:w #1 ~ #2 ~ #3 ~ #4 ~ #5 \q_stop
- {
- \fp_eval:n { 1 - min ( 1 , #1 + #4 ) } \c_space_tl
- \fp_eval:n { 1 - min ( 1 , #2 + #4 ) } \c_space_tl
- \fp_eval:n { 1 - min ( 1 , #3 + #4 ) }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Color expressions}
-%
-% \begin{variable}
-% {\l_@@_model_tl, \l_@@_value_tl, \l_@@_next_model_tl, \l_@@_next_value_tl}
-% Working space to store the color data whilst doing calculations: keeping
-% it on the stack is attractive but gets tricky (return is non-trivial).
-% \begin{macrocode}
-\tl_new:N \l_@@_model_tl
-\tl_new:N \l_@@_value_tl
-\tl_new:N \l_@@_next_model_tl
-\tl_new:N \l_@@_next_value_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\color_parse:nN}
-% \begin{macro}{\@@_parse:nN}
-% \begin{macro}{\@@_parse:Nw}
-% \begin{macro}{\@@_parse_loop_init:Nnn}
-% \begin{macro}{\@@_parse_loop:w}
-% \begin{macro}{\@@_parse_loop:nn}
-% \begin{macro}{\@@_parse_break:w}
-% \begin{macro}{\@@_parse_end:}
-% \begin{macro}[aux, EXP]{\@@_parse_mix:Nnnn, \@@_parse_mix:NVVn}
-% \begin{macro}[aux, EXP]{\@@_parse_mix:nNnn}
-% \begin{macro}[aux, EXP]
-% {
-% \@@_parse_mix_gray:nw ,
-% \@@_parse_mix_rgb:nw ,
-% \@@_parse_mix_cmyk:nw
-% }
-% The main function for parsing color expressions removes actives but
-% otherwise expands, then starts working through the expression itself.
-% At the end, we apply the payload.
-% \begin{macrocode}
-\cs_new_protected:Npn \color_parse:nN #1#2
- {
-%<*package>
- \@@_backend_pickup:N \l_@@_current_tl
- \tl_set_eq:cN { l_@@_named_ . _tl } \l_@@_current_tl
-%</package>
- \exp_args:Ne \@@_parse:nN { \tl_to_str:n {#1} } #2
- }
-% \end{macrocode}
-% Before going to all of the effort of parsing an expression, these two
-% precursor functions look for a pre-defined name, either on its own or
-% with a trailing |!| (which is the same thing).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_parse:nN #1#2
- {
- \tl_if_exist:cTF { l_@@_named_ #1 _tl }
- { \tl_set_eq:Nc #2 { l_@@_named_ #1 _tl } }
- { \@@_parse:Nw #2#1 ! \q_stop }
- \@@_check_model:N #2
- }
-\cs_new_protected:Npn \@@_parse:Nw #1#2 ! #3 \q_stop
- {
- \@@_if_defined:nTF {#2}
- {
- \tl_if_blank:nTF {#3}
- { \tl_set_eq:Nc #1 { l_@@_named_ #2 _tl } }
- { \@@_parse_loop_init:Nnn #1 {#2} {#3} }
- }
- {
- \__kernel_msg_error:nnn { color } { unknown-color } {#2}
- \tl_set_eq:NN \l_@@_current_tl \l_@@_named_black_tl
- }
- }
-% \end{macrocode}
-% Once we establish that a full parse is needed, the next job is to get the
-% detail of the first color. That will determine the model we use for the
-% calculation: splitting here makes checking that a bit easier.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_parse_loop_init:Nnn #1#2#3
- {
- \group_begin:
- \@@_extract:nNN {#2} \l_@@_model_tl \l_@@_value_tl
- \@@_parse_loop:w #3 ! ! ! ! \q_stop
- \tl_set:Nx \l_@@_internal_tl
- { \l_@@_model_tl \c_space_tl \l_@@_value_tl }
- \exp_args:NNNV \group_end:
- \tl_set:Nn #1 \l_@@_internal_tl
- }
-% \end{macrocode}
-% This is the loop proper: there can be an open-ended set of colors to parse,
-% separated by |!| tokens. There are a few cases to look out for. At the end
-% of the expression and with we find a mix of $100$ then we simply skip the
-% next color entirely (we can't stop the loop as there might be a further
-% valid color to mix in). On the other hand, if we get a mix of $0$ then
-% drop everything so far and start again. There is also a trailing
-% |white| to \enquote{read in} if the final explicit data is a mix.
-% Those conditions are separate from actually looping, which is therefore
-% sorted out by checking if we have further data to process: in contrast
-% to \pkg{xcolor}, we don't allow |!!| so the test can be simplified.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_parse_loop:w #1 ! #2 ! #3 ! #4 ! #5 \q_stop
- {
- \bool_lazy_or:nnF
- { \tl_if_blank_p:n {#1} }
- { \int_compare_p:nNn {#1} = { 100 } }
- {
- \int_compare:nNnTF {#1} = { 0 }
- {
- \tl_if_blank:nTF {#2}
- { \@@_extract:nNN { white } }
- { \@@_extract:nNN {#2} }
- \l_@@_model_tl \l_@@_value_tl
- }
- {
- \use:x
- {
- \@@_parse_loop:nn {#1}
- { \tl_if_blank:nTF {#2} { white } {#2} }
- }
- }
- }
- \tl_if_blank:nF {#3}
- { \@@_parse_loop:w #3 ! #4 ! #5 \q_stop }
- \@@_parse_end:
- }
-% \end{macrocode}
-% The \enquote{payload} of calculation in the loop first. If the model for
-% the upcoming color is different from that of the existing (partial) color,
-% convert the model. For |gray| the two are flipped round so that the outcome
-% is something with \enquote{real} color. We are then in a position to do the
-% actual calculation itself. The two auxiliaries here give us a way to break
-% the loop should an invalid name be found.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_parse_loop:nn #1#2
- {
- \@@_if_defined:nTF {#2}
- {
- \@@_extract:nNN {#2} \l_@@_next_model_tl \l_@@_next_value_tl
- \tl_if_eq:NNF \l_@@_model_tl \l_@@_next_model_tl
- {
- \str_if_eq:VnT \l_@@_model_tl { gray }
- {
- \use:x
- {
- \tl_set:Nn \exp_not:N \l_@@_model_tl
- { \l_@@_next_model_tl }
- \tl_set:Nn \exp_not:N \l_@@_value_tl
- { \l_@@_next_value_tl }
- \tl_set:Nn \exp_not:N \l_next_@@_model_tl
- { \l_@@_model_tl }
- \tl_set:Nn \exp_not:N \l_next_@@_value_tl
- { \l_@@_value_tl }
- }
- }
- \@@_convert:VVN
- \l_@@_next_model_tl
- \l_@@_model_tl
- \l_@@_next_value_tl
- }
- \tl_set:Nx \l_@@_value_tl
- {
- \@@_parse_mix:NVVn
- \l_@@_model_tl \l_@@_value_tl \l_@@_next_value_tl {#1}
- }
- }
- {
- \__kernel_msg_error:nnn { color } { unknown-color } {#2}
- \@@_extract:nNN { black } \l_@@_model_tl \l_@@_value_tl
- \@@_parse_break:w
- }
- }
-\cs_new_protected:Npn \@@_parse_break:w #1 \@@_parse_end: { }
-\cs_new_protected:Npn \@@_parse_end: { }
-% \end{macrocode}
-% Do the vector arithmetic: mainly a question of shuffling input, along
-% with one pre-calculation to keep down the use of division.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_mix:Nnnn #1#2#3#4
- {
- \exp_args:Nf \@@_parse_mix:nNnn
- { \fp_eval:n { #4 / 100 } }
- #1 {#2} {#3}
- }
-\cs_generate_variant:Nn \@@_parse_mix:Nnnn { NVV }
-\cs_new:Npn \@@_parse_mix:nNnn #1#2#3#4
- {
- \use:c { @@_parse_mix_ #2 :nw } {#1}
- #3 \q_mark #4 \q_stop
- }
-\cs_new:Npn \@@_parse_mix_gray:nw #1#2 \q_mark #3 \q_stop
- { \fp_eval:n { #2 * #1 + #3 * ( 1 - #1 ) } }
-\cs_new:Npn \@@_parse_mix_rgb:nw
- #1#2 ~ #3 ~ #4 \q_mark #5 ~ #6 ~ #7 \q_stop
- {
- \fp_eval:n { #2 * #1 + #5 * ( 1 - #1 ) } \c_space_tl
- \fp_eval:n { #3 * #1 + #6 * ( 1 - #1 ) } \c_space_tl
- \fp_eval:n { #4 * #1 + #7 * ( 1 - #1 ) }
- }
-\cs_new:Npn \@@_parse_mix_cmyk:nw
- #1#2 ~ #3 ~ #4 ~ #5 \q_mark #6 ~ #7 ~ #8 ~ #9 \q_stop
- {
- \fp_eval:n { #2 * #1 + #6 * ( 1 - #1 ) } \c_space_tl
- \fp_eval:n { #3 * #1 + #7 * ( 1 - #1 ) } \c_space_tl
- \fp_eval:n { #4 * #1 + #8 * ( 1 - #1 ) } \c_space_tl
- \fp_eval:n { #5 * #1 + #9 * ( 1 - #1 ) }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_model_gray:w, \@@_parse_model_rgb:w,
-% \@@_parse_model_cmyk:w, \@@_parse_model_spot:w
-% }
-% \begin{macro}[EXP]{\@@_parse_number:n}
-% \begin{macro}[EXP]{\@@_parse_number:w}
-% \begin{macro}[EXP]{\@@_parse_spot_aux:w}
-% Turn the input into internal form, also tidying up the number quickly.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_model_gray:w #1 , #2 \q_stop { \@@_parse_number:n {#1} }
-\cs_new:Npn \@@_parse_model_rgb:w #1 , #2 , #3 , #4 \q_stop
- {
- \@@_parse_number:n {#1} ~
- \@@_parse_number:n {#2} ~
- \@@_parse_number:n {#3}
- }
-\cs_new:Npn \@@_parse_model_cmyk:w #1 , #2 , #3 , #4 , #5 \q_stop
- {
- \@@_parse_number:n {#1} ~
- \@@_parse_number:n {#2} ~
- \@@_parse_number:n {#3} ~
- \@@_parse_number:n {#4}
- }
-\cs_new:Npn \@@_parse_model_spot:w #1 , #2 \q_stop
- { \@@_parse_spot_aux:w #1 ! 100 ! \q_stop }
-\cs_new:Npn \@@_parse_spot_aux:w #1 ! #2 ! #3 \q_stop
- { #1 ~ \fp_eval:n { #2 / 100 } }
-\cs_new:Npn \@@_parse_number:n #1
- { \@@_parse_number:w #1 . 0 . \q_stop }
-\cs_new:Npn \@@_parse_number:w #1 . #2 . #3 \q_stop
- { \tl_if_blank:nTF {#1} { 0 } {#1} . #2 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Selecting colors (and color models)}
-%
-% \begin{variable}{\l_color_fixed_model_tl}
-% For selecting a single fixed model.
-% \begin{macrocode}
-\tl_new:N \l_color_fixed_model_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_check_model:N}
-% \begin{macro}{\@@_check_model:w}
-% Check that the model in use is the one required.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_check_model:N #1
- {
- \tl_if_empty:NF \l_color_fixed_model_tl
- {
- \exp_after:wN \@@_check_model:w #1 \q_stop
- \tl_if_eq:NNF \l_@@_model_tl \l_color_fixed_model_tl
- {
- \@@_convert:VVN \l_@@_model_tl \l_color_fixed_model_tl
- \l_@@_value_tl
- }
- \tl_set:Nx #1
- { \l_color_fixed_model_tl \c_space_tl \l_@@_value_tl }
- }
- }
-\cs_new_protected:Npn \@@_check_model:w #1 ~ #2 \q_stop
- {
- \tl_set:Nn \l_@@_model_tl {#1}
- \tl_set:Nn \l_@@_value_tl {#2}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_select:}
-% A backend-neutral location for \enquote{last minute} manipulations before
-% handing off to the backend code. We set the special |.| syntax here: this
-% will therefore always be available. The finalisation is separate from the
-% main function so it can also be applied to \emph{e.g.}~page color.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_select:
- {
- \tl_set_eq:cN { l_@@_named_ . _tl } \l_@@_current_tl
- \@@_select:V \l_@@_current_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\color_select:n}
-% \begin{macro}{\color_select:nn}
-% Parse the input expressions then get the backend to actually activate
-% them.
-% \begin{macrocode}
-\cs_new_protected:Npn \color_select:n #1
- {
- \color_parse:nN {#1} \l_@@_current_tl
- \@@_select:
- }
-\cs_new_protected:Npn \color_select:nn #1#2
- {
- \@@_direct:nnN {#1} {#2} \l_@@_current_tl
- \@@_select:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Direct model use}
-%
-% \begin{macro}{\@@_direct:nnN}
-% Directly set a color based on a model/value combination.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_direct:nnN #1#2#3
- {
- \cs_if_exist:cTF { @@_parse_model_ #1 :w }
- {
- \tl_set:Nx #3
- { #1 ~ \use:c { @@_parse_model_ #1 :w } #2 , 0 , 0 , 0 , 0 \q_stop }
- \@@_check_model:N #3
- }
- {
- \__kernel_msg_error:nnn { color } { invalid-model } {#1}
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Defining named colors}
-%
-% \begin{variable}{\l_@@_named_tl}
-% Space to store the detail of the named color.
-% \begin{macrocode}
-\tl_new:N \l_@@_named_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_store:Nn}
-% Store the named color unless it has an invalid name.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_store:Nn #1#2
- {
- \str_if_eq:nnF {#2} { . }
- {
- \tl_clear_new:c { l_@@_named_ #2 _tl }
- \tl_set_eq:cN { l_@@_named_ #2 _tl } #1
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\color_set:nn}
-% \begin{macro}{\color_set:nnn}
-% \begin{macro}{\color_set_eq:nn}
-% Defining named colors has to include a step to force creation of the
-% underlying token list to avoid errors when checking is enabled.
-% \begin{macrocode}
-\cs_new_protected:Npn \color_set:nn #1#2
- {
- \color_parse:nN {#2} \l_@@_named_tl
- \@@_store:Nn \l_@@_named_tl {#1}
- }
-\cs_new_protected:Npn \color_set:nnn #1#2#3
- {
- \@@_direct:nnN {#2} {#3} \l_@@_named_tl
- \@@_store:Nn \l_@@_named_tl {#1}
- }
-\cs_new_protected:Npn \color_set_eq:nn #1#2
- {
- \@@_if_defined:nTF {#2}
- {
- \tl_clear_new:c { l_@@_named_ #1 _tl }
- \str_if_eq:nnTF {#2} { . }
- { \tl_set_eq:cN { l_@@_named_ #1 _tl } \l_@@_current_tl }
- { \tl_set_eq:cc { l_@@_named_ #1 _tl } { l_@@_named_ #2 _tl } }
- }
- {
- \__kernel_msg_error:nnn { color } { unknown-color } {#2}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% A small set of colors are always defined.
-% \begin{macrocode}
-\color_set:nnn { black } { gray } { 0 }
-\color_set:nnn { white } { gray } { 1 }
-\color_set:nnn { cyan } { cmyk } { 1 , 0 , 0 , 0 }
-\color_set:nnn { magenta } { cmyk } { 0 , 1 , 0 , 0 }
-\color_set:nnn { yellow } { cmyk } { 0 , 0 , 1 , 0 }
-\color_set:nnn { red } { rgb } { 1 , 0 , 0 }
-\color_set:nnn { green } { rgb } { 0 , 1 , 0 }
-\color_set:nnn { blue } { rgb } { 0 , 0 , 1 }
-% \end{macrocode}
-%
-% \begin{variable}{\l_@@_named_._tl}
-% A special named color: this is always defined though not fixed in
-% definition.
-% \begin{macrocode}
-\tl_new:c { l_@@_named_._tl }
-\tl_set_eq:cN { l_@@_named_._tl } \l_@@_current_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Diagnostics}
-%
-% \begin{macro}{\color_show:n}
-% \begin{macro}{\@@_show:w}
-% \begin{macro}{\@@_show_gray:w, \@@_show_rgb:w, \@@_show_cmyk:w}
-% Extract the information about a color and format for the user: the approach
-% is similar to the keys module here.
-% \begin{macrocode}
-\cs_new_protected:Npn \color_show:n #1
- {
- \msg_show:nnxxxx { LaTeX / color } { show }
- {#1}
- {
- \@@_if_defined:nTF {#1}
- { \exp_last_unbraced:Nv \@@_show:w { l_@@_named_ #1 _tl } \q_stop }
- { }
- }
- { }
- { }
- }
-\cs_new:Npn \@@_show:w #1 ~ #2 \q_stop
- {
- \msg_show_item_unbraced:nn { model } {#1}
- \exp_args:Nnf \msg_show_item_unbraced:nn { value }
- { \use:c { @@_show_ #1 :w } #2 \q_stop }
- }
-\cs_new:Npn \@@_show_gray:w #1 \q_stop { #1 }
-\cs_new:Npn \@@_show_rgb:w #1 ~ #2 ~ #3 \q_stop { #1 ,~ #2 ,~ #3 }
-\cs_new:Npn \@@_show_cmyk:w #1 ~ #2 ~ #3 ~ #4 \q_stop { #1 ,~ #2 ,~ #3 ,~ #4 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Messages}
-%
-% \begin{macrocode}
-\__kernel_msg_new:nnnn { color } { invalid-model }
- { Invalid~color~model~'#1'. }
- {
- LaTeX~has~been~asked~to~use~a~color~model~called~'#1',~
- but~this~model~is~not~set~up.
- }
-\__kernel_msg_new:nnnn { color } { unknown-color }
- { Unknown~color~'#1'. }
- {
- LaTeX~has~been~asked~to~use~a~color~named~'#1',~
- but~this~has~never~been~defined.
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\__kernel_msg_new:nnn { color } { show }
- {
- The~color~#1~
- \tl_if_empty:nTF {#2}
- { is~undefined. }
- { has~the~properties: #2 }
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</initex|package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins
deleted file mode 100644
index a2601a4fde1..00000000000
--- a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins
+++ /dev/null
@@ -1,58 +0,0 @@
-\iffalse meta-comment
-
-File: l3color.ins
-
-Copyright (C) 2017-2020 The LaTeX3 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 l3docstrip.tex
-\askforoverwritefalse
-
-\preamble
-
-Copyright (C) 2017-2020 The LaTeX3 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{l3color.sty}{\from{l3color.dtx}{package}}}
-
-\endbatchfile
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 572b4f2192a..64bc0cfa646 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-boxes.dtx
%
-% Copyright (C) 2018-2020 The LaTeX3 Project
+% Copyright (C) 2018-2021 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
@@ -36,7 +36,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -53,7 +53,7 @@
% \section{\pkg{l3draw-boxes} implementation}
%
% \begin{macrocode}
-%<*initex|package>
+%<*package>
% \end{macrocode}
%
% \begin{macrocode}
@@ -113,7 +113,7 @@
}
\hbox_set:Nn \l_@@_tmp_box
{
- \tex_kern:D \l_@@_xshift_dim
+ \__kernel_kern:n { \l_@@_xshift_dim }
\box_move_up:nn { \l_@@_yshift_dim }
{ \box_use_drop:N \l_@@_tmp_box }
}
@@ -147,7 +147,7 @@
% \end{macro}
%
% \begin{macrocode}
-%</initex|package>
+%</package>
% \end{macrocode}
%
% \end{implementation}
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 53c221d69e2..f193ceb4d64 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-layers.dtx
%
-% Copyright (C) 2019,2020 The LaTeX3 Project
+% Copyright (C) 2019-2021 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
@@ -36,7 +36,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -53,7 +53,7 @@
% \section{\pkg{l3draw-layers} implementation}
%
% \begin{macrocode}
-%<*initex|package>
+%<*package>
% \end{macrocode}
%
% \begin{macrocode}
@@ -208,7 +208,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-%</initex|package>
+%</package>
% \end{macrocode}
%
% \end{implementation}
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 846043faa45..a846d4046a2 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-paths.dtx
%
-% Copyright (C) 2018-2020 The LaTeX3 Project
+% Copyright (C) 2018-2021 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
@@ -36,7 +36,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -53,7 +53,7 @@
% \section{\pkg{l3draw-paths} implementation}
%
% \begin{macrocode}
-%<*initex|package>
+%<*package>
% \end{macrocode}
%
% \begin{macrocode}
@@ -1030,7 +1030,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-%</initex|package>
+%</package>
% \end{macrocode}
%
% \end{implementation}
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 dccb1fb6772..70e088d0cf7 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-points.dtx
%
-% Copyright (C) 2018-2020 The LaTeX3 Project
+% Copyright (C) 2018-2021 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
@@ -36,7 +36,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -53,7 +53,7 @@
% \section{\pkg{l3draw-points} implementation}
%
% \begin{macrocode}
-%<*initex|package>
+%<*package>
% \end{macrocode}
%
% \begin{macrocode}
@@ -116,8 +116,8 @@
{#1}
}
\cs_new:Npn \@@_point_process_auxi:nn #1#2
- { \@@_point_process_auxii:nw {#2} #1 \q_stop }
-\cs_new:Npn \@@_point_process_auxii:nw #1 #2 , #3 \q_stop
+ { \@@_point_process_auxii:nw {#2} #1 \s_@@_stop }
+\cs_new:Npn \@@_point_process_auxii:nw #1 #2 , #3 \s_@@_stop
{ #1 {#2} {#3} }
\cs_new:Npn \@@_point_process:nnn #1#2#3
{
@@ -127,8 +127,8 @@
{#1}
}
\cs_new:Npn \@@_point_process_auxiii:nnn #1#2#3
- { \@@_point_process_auxiv:nw {#3} #1 \q_mark #2 \q_stop }
-\cs_new:Npn \@@_point_process_auxiv:nw #1 #2 , #3 \q_mark #4 , #5 \q_stop
+ { \@@_point_process_auxiv:nw {#3} #1 \s_@@_mark #2 \s_@@_stop }
+\cs_new:Npn \@@_point_process_auxiv:nw #1 #2 , #3 \s_@@_mark #4 , #5 \s_@@_stop
{ #1 {#2} {#3} {#4} {#5} }
\cs_new:Npn \@@_point_process:nnnn #1#2#3#4
{
@@ -139,9 +139,9 @@
{#1}
}
\cs_new:Npn \@@_point_process_auxv:nnnn #1#2#3#4
- { \@@_point_process_auxvi:nw {#4} #1 \q_mark #2 \q_mark #3 \q_stop }
+ { \@@_point_process_auxvi:nw {#4} #1 \s_@@_mark #2 \s_@@_mark #3 \s_@@_stop }
\cs_new:Npn \@@_point_process_auxvi:nw
- #1 #2 , #3 \q_mark #4 , #5 \q_mark #6 , #7 \q_stop
+ #1 #2 , #3 \s_@@_mark #4 , #5 \s_@@_mark #6 , #7 \s_@@_stop
{ #1 {#2} {#3} {#4} {#5} {#6} {#7} }
\cs_new:Npn \@@_point_process:nnnnn #1#2#3#4#5
{
@@ -155,10 +155,10 @@
\cs_new:Npn \@@_point_process_auxvii:nnnnn #1#2#3#4#5
{
\@@_point_process_auxviii:nw
- {#5} #1 \q_mark #2 \q_mark #3 \q_mark #4 \q_stop
+ {#5} #1 \s_@@_mark #2 \s_@@_mark #3 \s_@@_mark #4 \s_@@_stop
}
\cs_new:Npn \@@_point_process_auxviii:nw
- #1 #2 , #3 \q_mark #4 , #5 \q_mark #6 , #7 \q_mark #8 , #9 \q_stop
+ #1 #2 , #3 \s_@@_mark #4 , #5 \s_@@_mark #6 , #7 \s_@@_mark #8 , #9 \s_@@_stop
{ #1 {#2} {#3} {#4} {#5} {#6} {#7} {#8} {#9} }
% \end{macrocode}
% \end{macro}
@@ -963,7 +963,7 @@
% \end{macro}
%
% \begin{macrocode}
-%</initex|package>
+%</package>
% \end{macrocode}
%
% \end{implementation}
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 704d80652ff..60792f27ed0 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-scopes.dtx
%
-% Copyright (C) 2018-2020 The LaTeX3 Project
+% Copyright (C) 2018-2021 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
@@ -36,7 +36,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -53,7 +53,7 @@
% \section{\pkg{l3draw-scopes} implementation}
%
% \begin{macrocode}
-%<*initex|package>
+%<*package>
% \end{macrocode}
%
% \begin{macrocode}
@@ -132,7 +132,7 @@
\draw_transform_shift_reset:
\@@_softpath_clear:
\draw_linewidth:n { \l_draw_default_linewidth_dim }
- \draw_color:n { . }
+ \color_select:n { . }
\draw_nonzero_rule:
\draw_cap_butt:
\draw_join_miter:
@@ -262,7 +262,7 @@
% \end{macro}
%
% \begin{macrocode}
-%</initex|package>
+%</package>
% \end{macrocode}
%
% \end{implementation}
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 ce3b8b1ac80..9d70d5d7e2c 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-softpath.dtx
%
-% Copyright (C) 2018-2020 The LaTeX3 Project
+% Copyright (C) 2018-2021 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
@@ -36,7 +36,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -53,7 +53,7 @@
% \section{\pkg{l3draw-softpath} implementation}
%
% \begin{macrocode}
-%<*initex|package>
+%<*package>
% \end{macrocode}
%
% \begin{macrocode}
@@ -326,8 +326,8 @@
\tl_build_get:NN \g_@@_softpath_main_tl \l_@@_softpath_internal_tl
\exp_after:wN \@@_softpath_round_loop:Nnn
\l_@@_softpath_internal_tl
- \q_recursion_tail ? ?
- \q_recursion_stop
+ \q_@@_recursion_tail ? ?
+ \q_@@_recursion_stop
\group_end:
}
\bool_gset_false:N \g_@@_softpath_corners_bool
@@ -342,7 +342,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_softpath_round_loop:Nnn #1#2#3
{
- \quark_if_recursion_tail_stop_do:Nn #1 { \@@_softpath_round_end: }
+ \@@_if_recursion_tail_stop_do:Nn #1 { \@@_softpath_round_end: }
\token_if_eq_meaning:NNTF #1 \@@_softpath_roundpoint_op:nn
{ \@@_softpath_round_action:nn {#2} {#3} }
{
@@ -505,7 +505,7 @@
\cs_new:Npn \@@_softpath_round_calc:nnnnnn #1#2#3#4#5#6
{
\@@_softpath_round_calc:nnnnw {#3} {#4} {#5} {#6}
- #1 \q_mark #2 \q_stop
+ #1 \s_@@_mark #2 \s_@@_stop
}
\cs_generate_variant:Nn \@@_softpath_round_calc:nnnnnn { fV }
% \end{macrocode}
@@ -513,7 +513,7 @@
% quadratic Bézier curve.
% \begin{macrocode}
\cs_new:Npn \@@_softpath_round_calc:nnnnw
- #1#2#3#4 #5 , #6 \q_mark #7 , #8 \q_stop
+ #1#2#3#4 #5 , #6 \s_@@_mark #7 , #8 \s_@@_stop
{
{#5} {#6}
\exp_not:N \@@_softpath_curveto_opi:nn
@@ -556,7 +556,7 @@
\exp_not:N \exp_after:wN
\exp_not:N \@@_softpath_round_close:w
\exp_not:N \l_@@_softpath_curve_end_tl
- \exp_not:N \q_stop
+ \s_@@_stop
}
\use:x
{
@@ -567,7 +567,7 @@
\exp_not:N \exp_after:wN
\exp_not:N \@@_softpath_round_close:w
\exp_not:N \l_@@_softpath_curve_end_tl
- \exp_not:N \q_stop
+ \s_@@_stop
}
}
}
@@ -576,7 +576,7 @@
\exp_after:wN \use_none:n \l_@@_softpath_move_tl
}
}
-\cs_new:Npn \@@_softpath_round_close:w #1 , #2 \q_stop { {#1} {#2} }
+\cs_new:Npn \@@_softpath_round_close:w #1 , #2 \s_@@_stop { {#1} {#2} }
% \end{macrocode}
% Tidy up the parts of the path, complete the built token list and put
% it back into action.
@@ -607,7 +607,7 @@
% \end{macro}
%
% \begin{macrocode}
-%</initex|package>
+%</package>
% \end{macrocode}
%
% \end{implementation}
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 658982a49b9..105120a391d 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-state.dtx
%
-% Copyright (C) 2018-2020 The LaTeX3 Project
+% Copyright (C) 2018-2021 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
@@ -36,7 +36,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -53,7 +53,7 @@
% \section{\pkg{l3draw-state} implementation}
%
% \begin{macrocode}
-%<*initex|package>
+%<*package>
% \end{macrocode}
%
% \begin{macrocode}
@@ -124,7 +124,7 @@
% Pass through to the driver layer.
% \begin{macrocode}
\cs_new_protected:Npn \draw_miterlimit:n #1
- { \@@_backend_miterlimit:n { \fp_eval:n {#1} } }
+ { \exp_args:Nx \@@_backend_miterlimit:n { \fp_eval:n {#1} } }
% \end{macrocode}
% \end{macro}
%
@@ -147,57 +147,8 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{variable}{\l_@@_color_tmp_tl}
-% Scratch space.
% \begin{macrocode}
-\tl_new:N \l_@@_color_tmp_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\draw_color:n, \draw_color_fill:n, \draw_color_stroke:n}
-% \begin{macro}{\@@_color:nn}
-% \begin{macro}{\@@_color_aux:nn, \@@_color_aux:Vn}
-% \begin{macro}{\@@_color:nw}
-% \begin{macro}
-% {
-% \@@_select_cmyk:nw, \@@_select_gray:nw,
-% \@@_select_rgb:nw, \@@_split_select:nw
-% }
-% Much the same as for core color support but calling the relevant
-% driver-level function.
-% \begin{macrocode}
-\cs_new_eq:NN \draw_color:n \color_select:n
-\cs_new_protected:Npn \draw_color_fill:n #1
- { \@@_color:nn { fill } {#1} }
-\cs_new_protected:Npn \draw_color_stroke:n #1
- { \@@_color:nn { stroke } {#1} }
-\cs_new_protected:Npn \@@_color:nn #1#2
- {
- \color_parse:nN {#2} \l_@@_color_tmp_tl
- \@@_color_aux:Vn \l_@@_color_tmp_tl {#1}
- }
-\cs_new_protected:Npn \@@_color_aux:nn #1#2
- { \@@_color:nw {#2} #1 \q_stop }
-\cs_generate_variant:Nn \@@_color_aux:nn { V }
-\cs_new_protected:Npn \@@_color:nw #1#2 ~ #3 \q_stop
- { \use:c { @@_color_ #2 :nw } {#1} #3 \q_stop }
-\cs_new_protected:Npn \@@_color_cmyk:nw #1#2 ~ #3 ~ #4 ~ #5 \q_stop
- { \use:c { @@_backend_color_ #1 _cmyk:nnnn } {#2} {#3} {#4} {#5} }
-\cs_new_protected:Npn \@@_color_gray:nw #1#2 \q_stop
- { \use:c { @@_backend_color_ #1 _gray:n } {#2} }
-\cs_new_protected:Npn \@@_color_rgb:nw #1#2 ~ #3 ~ #4 \q_stop
- { \use:c { @@_backend_color_ #1 _rgb:nnn } {#2} {#3} {#4} }
-\cs_new_protected:Npn \@@_color_spot:nw #1#2 ~ #3 \q_stop
- { \use:c { @@_backend_color_ #1 _spot:nn } {#2} {#3} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</initex|package>
+%</package>
% \end{macrocode}
%
% \end{implementation}
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 bcfed707879..839fce91a61 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw-transforms.dtx
%
-% Copyright (C) 2018-2020 The LaTeX3 Project
+% Copyright (C) 2018-2021 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
@@ -36,7 +36,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -53,7 +53,7 @@
% \section{\pkg{l3draw-transforms} implementation}
%
% \begin{macrocode}
-%<*initex|package>
+%<*package>
% \end{macrocode}
%
% \begin{macrocode}
@@ -70,8 +70,12 @@
% these to fully understand them.
% \item \cs{pgftransformarrow}: Likely to be done when other arrow functions
% are added.
+% \item \cs{pgftransformationadjustments}: Used mainly by CircuiTi\textit{k}Z
+% although also for shapes, likely needs more use cases before addressing.
% \item \cs{pgflowlevelsynccm}, \cs{pgflowlevel}: Likely to be added when
% use cases are encountered in other parts of the code.
+% \item \cs{pgfviewboxscope}: Seems very speicalied, need to understand the
+% requirements here.
% \end{itemize}
%
% \begin{variable}{\l_@@_matrix_active_bool}
@@ -331,7 +335,7 @@
% \end{macro}
%
% \begin{macrocode}
-%</initex|package>
+%</package>
% \end{macrocode}
%
% \end{implementation}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx
index 0ce74688f42..1b6cdd8ab9f 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx
@@ -2,7 +2,7 @@
%
%% File: l3draw.dtx
%
-% Copyright(C) 2018-2020 The LaTeX3 Project
+% Copyright(C) 2018-2021 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
@@ -102,7 +102,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -110,7 +110,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -231,7 +231,7 @@
% \begin{syntax}
% \cs{draw_linewidth:n} \Arg{width}
% \end{syntax}
-% Sets the width to be used for stroking to the \meta{width} (an
+% Sets the width to be used for stroking to the \meta{width} (an
% \meta{fp expr}).
% \end{function}
%
@@ -268,7 +268,7 @@
% \draw_end:
% \end{demo}
% Setting an empty pattern will produce a solid line.
-%
+%
% Note the \meta{pattern} interface here is different from that in \pkg{pgf}:
% the list is comma-separated not given in brace groups.
% \end{function}
@@ -410,7 +410,7 @@
% Gives the co-ordinates of the point at \meta{angle} (an \meta{fp expr} in
% \emph{degrees}) and \meta{radius}. The three-argument version accepts
% two radii of different lengths.
-%
+%
% Note the interface here is somewhat different from that in \pkg{pgf}:
% the one- and two-radii versions in \pkg{l3draw} use separate functions,
% whilst in \pkg{pgf} they use the same function and a keyword.
@@ -470,7 +470,7 @@
% \emph{degrees}) and \meta{radius}, relative to the prevailing
% $x$- and $y$-vectors. The three-argument version accepts two radii of
% different lengths.
-%
+%
% Note the interface here is somewhat different from that in \pkg{pgf}:
% the one- and two-radii versions in \pkg{l3draw} use separate functions,
% whilst in \pkg{pgf} they use the same function and a keyword.
@@ -650,7 +650,7 @@
% \draw_path_lineto:n { 2cm , 1cm }
% \draw_path_lineto:n { 3cm , 0.5cm }
% \draw_path_lineto:n { 3cm , 0cm }
-% \draw_color_fill:n { yellow!80!black }
+% \color_fill:n { yellow!80!black }
% \draw_path_use_clear:n { fill , stroke }
% \draw_end:
% \end{demo}
@@ -662,7 +662,7 @@
% \draw_path_moveto:n { 2cm , 1cm } % Begins a new part
% \draw_path_lineto:n { 3cm , 0.5cm }
% \draw_path_lineto:n { 3cm , 0cm }
-% \draw_color_fill:n { yellow!80!black }
+% \color_fill:n { yellow!80!black }
% \draw_path_use_clear:n { fill , stroke }
% \draw_end:
% \end{demo}
@@ -684,7 +684,7 @@
% { 1cm , 1cm } % First control
% { 2cm , 1cm } % Second control
% { 3cm , 0cm } % End
-% \draw_color_fill:n { yellow!80!black }
+% \color_fill:n { yellow!80!black }
% \draw_path_use_clear:n { fill , stroke }
% \draw_end:
% \end{demo}
@@ -705,7 +705,7 @@
% \draw_path_curveto:nn
% { 1cm , 1cm }
% { 2cm , 0cm }
-% \draw_color_fill:n { yellow!80!black }
+% \color_fill:n { yellow!80!black }
% \draw_path_use_clear:n { fill , stroke }
% \draw_end:
% \end{demo}
@@ -778,7 +778,7 @@
% { 1.5cm , 0cm }
% { 0cm , 1cm }
% \draw_path_use_clear:n { stroke }
-% \draw_color:n { red }
+% \color_select:n { red }
% \draw_path_ellipse:nnn
% { 1cm , 0cm }
% { 1cm , 1cm }
@@ -795,7 +795,7 @@
% \begin{syntax}
% \cs{draw_path_circle:nn} \Arg{center} \Arg{radius}
% \end{syntax}
-% Appends a circle of \meta{radius} at \meta{center} to the current path.
+% Appends a circle of \meta{radius} at \meta{center} to the current path.
% This is a shortcut for \cs{draw_path_ellipse:nnn}.
% \end{function}
%
@@ -977,15 +977,6 @@
% \end{demo}
% \end{function}
%
-% \subsection{Color}
-%
-% \begin{function}{\draw_color:n, \draw_color_fill:n, \draw_color_stroke:n}
-% \begin{syntax}
-% \cs{draw_color:n} \Arg{color expression}
-% \end{syntax}
-% Evaluates the \meta{color expression} as described for \pkg{l3color}.
-% \end{function}
-%
% \subsection{Transformations}
%
% Points are normally used unchanged relative to the canvas axes. This can
@@ -1137,7 +1128,7 @@
% \section{\pkg{l3draw} implementation}
%
% \begin{macrocode}
-%<*initex|package>
+%<*package>
% \end{macrocode}
%
% \begin{macrocode}
@@ -1145,20 +1136,39 @@
% \end{macrocode}
%
% \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3draw}{2020-01-12}{}
+\ProvidesExplPackage{l3draw}{2021-02-18}{}
{L3 Experimental core drawing support}
-%</package>
% \end{macrocode}
%
+% \subsection{Internal auxiliaries}
+%
+% \begin{variable}{\s_@@_mark,\s_@@_stop}
+% Internal scan marks.
+% \begin{macrocode}
+\scan_new:N \s_@@_mark
+\scan_new:N \s_@@_stop
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\q_@@_recursion_tail,\q_@@_recursion_stop}
+% Internal recursion quarks.
% \begin{macrocode}
-\RequirePackage { l3color }
+\quark_new:N \q_@@_recursion_tail
+\quark_new:N \q_@@_recursion_stop
% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}[EXP]{\@@_if_recursion_tail_stop_do:Nn}
+% Functions to query recursion quarks.
+% \begin{macrocode}
+\__kernel_quark_new_test:N \@@_if_recursion_tail_stop_do:Nn
+% \end{macrocode}
+% \end{macro}
%
% Everything else is in the sub-files!
%
% \begin{macrocode}
-%</initex|package>
+%</package>
% \end{macrocode}
%
% \end{implementation}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins
index 9b72ca17fd6..ba54fc41322 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins
@@ -2,7 +2,7 @@
File: l3draw.ins
-Copyright (C) 2018-2020 The LaTeX3 Project
+Copyright (C) 2018-2021 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
@@ -34,7 +34,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2018-2020 The LaTeX3 Project
+Copyright (C) 2018-2021 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
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx
index e877b69ca5f..5b4144c062e 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx
@@ -2,7 +2,7 @@
%
%% File: l3graphics.dtx
%
-% Copyright (C) 2017-2020 The LaTeX3 Project
+% Copyright (C) 2017-2021 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
@@ -38,7 +38,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -232,7 +232,7 @@
% \section{\pkg{l3graphics} implementation}
%
% \begin{macrocode}
-%<*initex|package>
+%<*package>
% \end{macrocode}
%
% \begin{macrocode}
@@ -240,10 +240,8 @@
% \end{macrocode}
%
% \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3graphics}{2020-01-12}{}
+\ProvidesExplPackage{l3graphics}{2021-02-18}{}
{L3 Experimental graphics inclusion support}
-%</package>
% \end{macrocode}
%
% \begin{variable}{\l_@@_tmp_ior, \l_@@_tmp_tl}
@@ -254,6 +252,13 @@
% \end{macrocode}
% \end{variable}
%
+% \begin{variable}{\s_@@_stop}
+% Internal scan marks.
+% \begin{macrocode}
+\scan_new:N \s_@@_stop
+% \end{macrocode}
+% \end{variable}
+%
% \subsection{Image feature support}
%
% \begin{macro}
@@ -408,7 +413,7 @@
\ior_str_map_inline:Nn \exp_not:N \l_@@_tmp_ior
{
\exp_not:N \@@_read_bb_auxiii:w
- ##1 ~ \c_colon_str \exp_not:N \q_stop
+ ##1 ~ \c_colon_str \s_@@_stop
}
}
\exp_not:n
@@ -425,12 +430,12 @@
\use:x
{
\cs_new_protected:Npn \exp_not:N \@@_read_bb_auxiii:w
- ##1 \c_colon_str ##2 \exp_not:N \q_stop
+ ##1 \c_colon_str ##2 \s_@@_stop
{
\exp_not:N \str_if_eq:nnT
{ \c_percent_str \c_percent_str BoundingBox }
{##1}
- { \exp_not:N \@@_read_bb_auxiv:w ##2 ( ) \exp_not:N \q_stop }
+ { \exp_not:N \@@_read_bb_auxiv:w ##2 ( ) \s_@@_stop }
}
}
% \end{macrocode}
@@ -441,7 +446,7 @@
% whitespace. \TeX{} will then tidy up for us, with just a leading space to
% worry about: that is taken out by the |\use:n| here.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_read_bb_auxiv:w #1 ( #2 ) #3 \q_stop
+\cs_new_protected:Npn \@@_read_bb_auxiv:w #1 ( #2 ) #3 \s_@@_stop
{
\str_if_eq:nnF {#2} { atend }
{
@@ -451,14 +456,14 @@
\char_set_catcode_space:n { 32 }
}
{ \use:n #1 }
- \exp_after:wN \@@_read_bb_auxv:w \l_@@_tmp_tl \q_stop
+ \exp_after:wN \@@_read_bb_auxv:w \l_@@_tmp_tl \s_@@_stop
}
}
% \end{macrocode}
% A trailing space was deliberately added earlier so we know that the final
% data point is terminated by a space.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_read_bb_auxv:w #1~#2~#3~#4~#5 \q_stop
+\cs_new_protected:Npn \@@_read_bb_auxv:w #1~#2~#3~#4~#5 \s_@@_stop
{
\dim_set:Nn \l_graphics_llx_dim { #1 bp }
\dim_set:Nn \l_graphics_lly_dim { #2 bp }
@@ -708,7 +713,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-%</initex|package>
+%</package>
% \end{macrocode}
%
% \end{implementation}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins
index ef345b5969d..92af3d8915a 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins
+++ b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins
@@ -1,6 +1,6 @@
\iffalse meta-comment
-File l3graphics.ins Copyright (C) 2017,2019,2020 The LaTeX3 Project
+File l3graphics.ins Copyright (C) 2017,2019-2021 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
@@ -32,7 +32,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2019,2020 The LaTeX3 Project
+Copyright (C) 2019-2021 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
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx b/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx
deleted file mode 100644
index dc36f172faa..00000000000
--- a/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx
+++ /dev/null
@@ -1,337 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3pdf.dtx
-%
-% Copyright(C) 2019,2020 The LaTeX3 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|package>
-%<*driver>
-\documentclass[full]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3pdf} package\\ Core PDF support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX3 Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2020-01-12}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \section{\pkg{l3pdf} documentation}
-%
-% \subsection{Objects}
-%
-% \begin{function}[added = 2019-06-02]{\pdf_object_new:nn}
-% \begin{syntax}
-% \cs{pdf_object_new:nn} \Arg{object} \Arg{type}
-% \end{syntax}
-% Declares \meta{object} as a PDF object of \meta{type}, which should be
-% one of
-% \begin{itemize}
-% \item \texttt{array}
-% \item \texttt{dict}
-% \item \texttt{fstream}
-% \item \texttt{stream}
-% \end{itemize}
-% The object may be referenced from this point on, and written later
-% using \cs{pdf_object_write:nn}.
-% \end{function}
-%
-% \begin{function}[added = 2019-06-02]
-% {\pdf_object_write:nn, \pdf_object_write:nx}
-% \begin{syntax}
-% \cs{pdf_object_write:nn} \Arg{object} \Arg{content}
-% \end{syntax}
-% Writes the \meta{content} as content of the \meta{object}. Depending on the
-% \meta{type} declared for the object, the format required for the
-% \meta{data} will vary
-% \begin{itemize}
-% \item[\texttt{array}] A space-separated list of values
-% \item[\texttt{dict}] Key--value pairs in the form
-% \texttt{/\meta{key} \meta{value}}
-% \item[\texttt{fstream}] Two brace groups: \meta{file name} and
-% \meta{file content}
-% \item[\texttt{stream}] Two brace groups: \meta{attributes (dictionary)}
-% and \meta{stream contents}
-% \end{itemize}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2019-06-02]{\pdf_object_ref:n}
-% \begin{syntax}
-% \cs{pdf_object_ref:n} \Arg{object}
-% \end{syntax}
-% Inserts the appropriate information to reference the \meta{object}
-% in for example page resource allocation
-% \end{function}
-%
-% \begin{function}[added = 2019-06-02]
-% {\pdf_object_now:nn, \pdf_object_now:nx}
-% \begin{syntax}
-% \cs{pdf_object_now:nn} \Arg{type} \Arg{content}
-% \end{syntax}
-% Writes the \meta{content} as content of an anonymous object. Depending on the
-% \meta{type}, the format required for the \meta{data} will vary
-% \begin{itemize}
-% \item[\texttt{array}] A space-separated list of values
-% \item[\texttt{dict}] Key--value pairs in the form
-% \texttt{/\meta{key} \meta{value}}
-% \item[\texttt{fstream}] Two brace groups: \meta{file name} and
-% \meta{file content}
-% \item[\texttt{stream}] Two brace groups: \meta{attributes (dictionary)}
-% and \meta{stream contents}
-% \end{itemize}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2019-06-02]{\pdf_object_last:}
-% \begin{syntax}
-% \cs{pdf_object_last:}
-% \end{syntax}
-% Inserts the appropriate information to reference the last \meta{object}
-% created. This is particularly useful for anonymous objects.
-% \end{function}
-%
-% \subsection{Version}
-%
-% \begin{function}[pTF, EXP, added = 2019-06-02]{\pdf_version_compare:Nn}
-% \begin{syntax}
-% \cs{pdf_version_compare:NnTF} \meta{comparator} \Arg{version} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Compares the version of the PDF being created with the \meta{version}
-% string specified, using the \meta{comparator}. Either the \meta{true code}
-% or \meta{false code} will be left in the output stream.
-% \end{function}
-%
-% \begin{function}[added = 2019-06-02]
-% {\pdf_version_gset:n, \pdf_version_min_gset:n}
-% \begin{syntax}
-% \cs{pdf_version_gset:n} \Arg{version}
-% \end{syntax}
-% Sets the \meta{version} of the PDF being created. The |min| version will
-% not alter the output version unless it is currently lower than the
-% \meta{version} requested.
-%
-% This function may only be used up to the point where the PDF file is
-% initialised.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2019-06-02]
-% {\pdf_version:, \pdf_version_major:, \pdf_version_minor:}
-% \begin{syntax}
-% \cs{pdf_version:}
-% \end{syntax}
-% Expands to the currently-active PDF version.
-% \end{function}
-%
-% \subsection{Compression}
-%
-% \begin{function}[added = 2019-06-02]{\pdf_uncompress:}
-% \begin{syntax}
-% \cs{pdf_uncompress:}
-% \end{syntax}
-% Disables any compression of the PDF, where possible.
-%
-% This function may only be used up to the point where the PDF file is
-% initialised.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3pdf} implementation}
-%
-% \begin{macrocode}
-%<*initex|package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=pdf>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3pdf}{2020-01-12}{}
- {L3 Experimental core PDF support}
-%</package>
-% \end{macrocode}
-%
-% \begin{variable}{\g_@@_init_bool}
-% A flag so we have some chance of avoiding setting things we are not
-% allowed to.
-% \begin{macrocode}
-\bool_new:N \g_@@_init_bool
-%<*package>
-\cs_if_exist:NT \documentclass
- {
- \AtBeginDocument
- { \bool_gset_true:N \g_@@_init_bool }
- }
-%</package>
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Compression}
-%
-% \begin{macro}{\pdf_uncompress:}
-% Simple to do.
-% \begin{macrocode}
-\cs_new_protected:Npn \pdf_uncompress:
- {
- \bool_if:NF \g_@@_init_bool
- {
- \@@_backend_compresslevel:n { 0 }
- \@@_backend_compress_objects:n { \c_false_bool }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Objects}
-%
-% \begin{macro}{\pdf_object_new:nn, \pdf_object_write:nn, \pdf_object_write:nx}
-% \begin{macro}{\pdf_object_ref:n}
-% \begin{macro}{\pdf_object_now:nn, \pdf_object_now:nx}
-% \begin{macro}{\pdf_object_last:}
-% Simple to do.
-% \begin{macrocode}
-\cs_new_protected:Npn \pdf_object_new:nn #1#2
- { \@@_backend_object_new:nn {#1} {#2} }
-\cs_new_protected:Npn \pdf_object_write:nn #1#2
- { \@@_backend_object_write:nn {#1} {#2} }
-\cs_generate_variant:Nn \pdf_object_write:nn { nx }
-\cs_new:Npn \pdf_object_ref:n #1 { \@@_backend_object_ref:n {#1} }
-\cs_new_protected:Npn \pdf_object_now:nn #1#2
- { \@@_backend_object_now:nn {#1} {#2} }
-\cs_generate_variant:Nn \pdf_object_now:nn { nx }
-\cs_new:Npn \pdf_object_last: { \@@_backend_object_last: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Version}
-%
-% \begin{macro}{\pdf_version_compare:Nn}
-% \begin{macro}
-% {
-% @@_version_compare_=:w ,
-% @@_version_compare_<:w ,
-% @@_version_compare_>:w
-% }
-% \begin{macrocode}
-% To compare version, we need to split the given value then deal with both
-% major and minor version
-\prg_new_conditional:Npnn \pdf_version_compare:Nn #1#2 { p , T , F , TF }
- { \use:c { @@_version_compare_ #1 :w } #2 . . \q_stop }
-\cs_new:cpn { @@_version_compare_=:w } #1 . #2 . #3 \q_stop
- {
- \bool_lazy_and:nnTF
- { \int_compare_p:nNn \@@_backend_version_major: = {#1} }
- { \int_compare_p:nNn \@@_backend_version_minor: = {#2} }
- { \prg_return_true: }
- { \prg_return_false: }
- }
-\cs_new:cpn { @@_version_compare_<:w } #1 . #2 . #3 \q_stop
- {
- \bool_lazy_or:nnTF
- { \int_compare_p:nNn \@@_backend_version_major: < {#1} }
- {
- \bool_lazy_and_p:nn
- { \int_compare_p:nNn \@@_backend_version_major: = {#1} }
- { \int_compare_p:nNn \@@_backend_version_minor: < {#2} }
- }
- { \prg_return_true: }
- { \prg_return_false: }
- }
-\cs_new:cpn { @@_version_compare_>:w } #1 . #2 . #3 \q_stop
- {
- \bool_lazy_or:nnTF
- { \int_compare_p:nNn \@@_backend_version_major: > {#1} }
- {
- \bool_lazy_and_p:nn
- { \int_compare_p:nNn \@@_backend_version_major: = {#1} }
- { \int_compare_p:nNn \@@_backend_version_minor: > {#2} }
- }
- { \prg_return_true: }
- { \prg_return_false: }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\pdf_version_gset:n, \pdf_version_min_gset:n}
-% \begin{macro}{\@@_version_gset:w}
-% Split the version and set.
-% \begin{macrocode}
-\cs_new_protected:Npn \pdf_version_gset:n #1
- { \@@_version_gset:w #1 . . \q_stop }
-\cs_new_protected:Npn \pdf_version_min_gset:n #1
- {
- \pdf_version_compare:NnT < {#1}
- { \@@_version_gset:w #1 . . \q_stop }
- }
-\cs_new_protected:Npn \@@_version_gset:w #1 . #2 . #3\q_stop
- {
- \bool_if:NF \g_@@_init_bool
- {
- \@@_backend_version_major_gset:n {#1}
- \@@_backend_version_minor_gset:n {#2}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\pdf_version:, \pdf_version_major:, \pdf_version_minor:}
-% Wrappers.
-% \begin{macrocode}
-\cs_new:Npn \pdf_version:
- { \@@_backend_version_major: . \@@_backend_version_minor: }
-\cs_new:Npn \pdf_version_major: { \@@_backend_version_major: }
-\cs_new:Npn \pdf_version_minor: { \@@_backend_version_minor: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</initex|package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins b/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins
deleted file mode 100644
index e325be4520a..00000000000
--- a/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins
+++ /dev/null
@@ -1,60 +0,0 @@
-\iffalse meta-comment
-
-File: l3pdf.ins
-
-Copyright (C) 2019,2020 The LaTeX3 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 l3docstrip.tex
-\askforoverwritefalse
-
-\preamble
-
-Copyright (C) 2019,2020 The LaTeX3 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 "l3pdf 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{l3pdf.sty}
- {\from{l3pdf.dtx}{package}}
-}
-
-\endbatchfile
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 af34128e5b7..9b0cf4a5a4d 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
@@ -2,7 +2,7 @@
%
%% File: l3str-format.dtx
%
-% Copyright (C) 2012-2020 The LaTeX3 Project
+% Copyright (C) 2012-2021 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
@@ -40,7 +40,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -158,7 +158,7 @@
% \section{\pkg{l3str-format} implementation}
%
% \begin{macrocode}
-%<*initex|package>
+%<*package>
% \end{macrocode}
%
% \begin{macrocode}
@@ -166,10 +166,8 @@
% \end{macrocode}
%
% \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3str-format}{2020-01-12}{}
+\ProvidesExplPackage{l3str-format}{2021-02-18}{}
{L3 Experimental string formatting}
-%</package>
% \end{macrocode}
%
% \subsection{Helpers}
@@ -191,7 +189,7 @@
%
% \begin{macro}[EXP]{\@@_format_if_digit:NTF}
% Here we expect |#1| to be a character with category other, or
-% \cs{s_stop}.
+% \cs{s_@@_stop}.
% \begin{macrocode}
\prg_new_conditional:Npnn \@@_format_if_digit:N #1 { TF }
{
@@ -203,9 +201,9 @@
%
% \begin{macro}[EXP]
% {\@@_format_put:nw, \@@_format_put:ow, \@@_format_put:fw}
-% Put |#1| after an \cs{s_stop} delimiter.
+% Put |#1| after an \cs{s_@@_stop} delimiter.
% \begin{macrocode}
-\cs_new:Npn \@@_format_put:nw #1 #2 \s_stop { #2 \s_stop #1 }
+\cs_new:Npn \@@_format_put:nw #1 #2 \s_@@_stop { #2 \s_@@_stop #1 }
\cs_generate_variant:Nn \@@_format_put:nw { o , f }
% \end{macrocode}
% \end{macro}
@@ -256,7 +254,7 @@
\cs_new:Npn \@@_format_parse:n #1
{
\exp_last_unbraced:Nf \@@_format_parse_auxi:NN
- { \__kernel_str_to_other:n {#1} } \s_stop \s_stop {#1}
+ { \__kernel_str_to_other:n {#1} } \s_@@_stop \s_@@_stop {#1}
}
\cs_new:Npx \@@_format_parse_auxi:NN #1#2
{
@@ -301,11 +299,11 @@
}
\cs_new:Npn \@@_format_parse_auxvii:nN #1#2
{
- \token_if_eq_meaning:NNTF \s_stop #2
+ \token_if_eq_meaning:NNTF \s_@@_stop #2
{ \@@_format_parse_end:nwn { #1 ? } #2 }
{ \@@_format_parse_end:nwn { #1 #2 } }
}
-\cs_new:Npn \@@_format_parse_end:nwn #1 #2 \s_stop \s_stop #3
+\cs_new:Npn \@@_format_parse_end:nwn #1 #2 \s_@@_stop \s_@@_stop #3
{
\tl_if_empty:nF {#2}
{ \__kernel_msg_expandable_error:nnn { str } { invalid-format } {#3} }
@@ -455,9 +453,9 @@
% \end{quote}
% First check that the \meta{alignment} is not |=|, and set the
% default alignment |?| to |<|. Place the modified information after
-% a trailing \cs{s_stop} for later retrieval. Then check that there
+% a trailing \cs{s_@@_stop} for later retrieval. Then check that there
% was no \meta{sign}. The width will be useful later, store it after
-% \cs{s_stop}. Afterwards, store the precision, and the function
+% \cs{s_@@_stop}. Afterwards, store the precision, and the function
% \cs{@@_range:nnn} that will be used to extract the first
% |#5| characters of the string.
% There is a need to use the internal function, as otherwise
@@ -495,14 +493,14 @@
}
}
\@@_format_tl_s:NNnnNNn
- \s_stop
+ \s_@@_stop
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}[EXP]{\@@_format_tl_s:NNnnNNn}
% \begin{quote}
-% \cs{@@_format_tl_s:NNnnNNn} \cs{s_stop} \meta{function}
+% \cs{@@_format_tl_s:NNnnNNn} \cs{s_@@_stop} \meta{function}
% \Arg{arguments} \Arg{width} \meta{fill} \meta{alignment}
% \Arg{token list}
% \end{quote}
@@ -617,12 +615,12 @@
% \end{quote}
% First set the
% default alignment |?| to |>|. Place the modified information after
-% a trailing \cs{s_stop} for later retrieval. Then check the
+% a trailing \cs{s_@@_stop} for later retrieval. Then check the
% \meta{sign}: if the integer is negative, always put~|-|. Otherwise,
% if the format's \meta{sign} is |~|, put a space (with category
% \enquote{other}); if it is~|+| put |+|; if it is |-| (default), put
% nothing, represented as a brace group. The width |#4| will be
-% useful later, store it after \cs{s_stop}. Afterwards, check that
+% useful later, store it after \cs{s_@@_stop}. Afterwards, check that
% the \meta{precision} was absent. Finally, dispatch depending on the
% \meta{style}.
% \begin{macrocode}
@@ -660,14 +658,14 @@
{ str } { invalid-style-format } {#6} { int }
\@@_format_int:NwnnNNn \use:n
}
- \s_stop {#7}
+ \s_@@_stop {#7}
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}[EXP]{\@@_format_int:NwnnNNn}
% \begin{quote}
-% \cs{@@_format_int:NwnnNNn} \meta{function} \cs{s_stop}
+% \cs{@@_format_int:NwnnNNn} \meta{function} \cs{s_@@_stop}
% \Arg{width} \Arg{sign} \meta{fill} \meta{alignment} \Arg{integer}
% \end{quote}
% Use the |format_align| function corresponding to the
@@ -680,7 +678,7 @@
% \item the \meta{fill} character.
% \end{itemize}
% \begin{macrocode}
-\cs_new:Npn \@@_format_int:NwnnNNn #1#2 \s_stop #3#4#5#6#7
+\cs_new:Npn \@@_format_int:NwnnNNn #1#2 \s_@@_stop #3#4#5#6#7
{
\exp_args:Nc \exp_args:Nf
{ @@_format_align_#6:nnnN }
@@ -728,13 +726,13 @@
% \Arg{floating point}
% \end{quote}
% First set the default alignment |?| to |>|. Place the modified
-% information after a trailing \cs{s_stop} for later retrieval. Then
+% information after a trailing \cs{s_@@_stop} for later retrieval. Then
% check the \meta{format sign} and the \meta{fp sign}: if the floating
% point is negative, always put~|-|. Otherwise (including
% \texttt{nan}), if the format's \meta{sign} is |~|, put a space (with
% category \enquote{other}); if it is~|+| put |+|; if it is |-|
% (default), put nothing, represented as a brace group. The width
-% |#4| will be useful later, store it after \cs{s_stop}. Afterwards,
+% |#4| will be useful later, store it after \cs{s_@@_stop}. Afterwards,
% check the \meta{precision}: if it was not given, replace it by $6$
% (default precision) unless no \meta{style} was given: in that case
% we want to use whatever precision is needed to fully describe the
@@ -776,20 +774,20 @@
{ str } { invalid-style-format } {#6} { fp }
\@@_format_fp:wnnnNNn \@@_format_fp_g:nn
}
- \s_stop {#7}
+ \s_@@_stop {#7}
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}[EXP]{\@@_format_fp:wnnnNNn}
% \begin{quote}
-% \cs{@@_format_fp:wnnnNNn} \meta{formatting function} \cs{s_stop}
+% \cs{@@_format_fp:wnnnNNn} \meta{formatting function} \cs{s_@@_stop}
% \Arg{precision} \Arg{width} \Arg{sign} \meta{fill}
% \meta{alignment} \Arg{floating point}
% \end{quote}
% \begin{macrocode}
\cs_new:Npn \@@_format_fp:wnnnNNn
- #1 \s_stop #2 #3 #4 #5#6 #7
+ #1 \s_@@_stop #2 #3 #4 #5#6 #7
{
\exp_args:Nc \exp_args:Nf
{ @@_format_align_#6:nnnN }
@@ -850,7 +848,7 @@
{ \prg_replicate:nn { #4 - \c__fp_prec_int + 1 } { 0 } }
\@@_format_put:nw { #1 . #2 }
}
- \use_none:n \s_stop
+ \use_none:n \s_@@_stop
}
% \end{macrocode}
% \end{macro}
@@ -947,11 +945,11 @@
\cs_new:Npn \@@_format_fp_trim:w #1 e
{
\@@_format_fp_trim_loop:w #1
- ; \@@_format_fp_trim_loop:w 0; \@@_format_fp_trim_dot:w .; \s_stop e
+ ; \@@_format_fp_trim_loop:w 0; \@@_format_fp_trim_dot:w .; \s_@@_stop e
}
\cs_new:Npn \@@_format_fp_trim_loop:w #1 0; #2 { #2 #1 ; #2 }
\cs_new:Npn \@@_format_fp_trim_dot:w #1 .; { \@@_format_fp_trim_end:w #1 ; }
-\cs_new:Npn \@@_format_fp_trim_end:w #1 ; #2 \s_stop { #1 }
+\cs_new:Npn \@@_format_fp_trim_end:w #1 ; #2 \s_@@_stop { #1 }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -974,7 +972,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-%</initex|package>
+%</package>
% \end{macrocode}
%
% \end{implementation}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins
index 76fc36a116c..4c2b0df987c 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins
@@ -2,7 +2,7 @@
File l3str.ins
-Copyright (C) 2011-2017,2019,2020 The LaTeX3 Project
+Copyright (C) 2011-2017,2019-2021 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
@@ -34,7 +34,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2011-2020 The LaTeX3 Project
+Copyright (C) 2011-2021 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
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
index c166811e114..9a7920fe3f3 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx
@@ -2,7 +2,7 @@
%
%% File: l3sys-shell.dtx
%
-% Copyright (C) 2018-2020 The LaTeX3 Project
+% Copyright (C) 2018-2021 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
@@ -38,7 +38,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -67,7 +67,7 @@
% \begin{syntax}
% \cs{sys_shell_mkdir:n} \Arg{directory}
% \end{syntax}
-% Creates the \meta{directory}, which should should be specified using |/| as
+% 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}
@@ -95,7 +95,7 @@
% \begin{syntax}
% \cs{sys_shell_rmdir:n} \Arg{directory}
% \end{syntax}
-% Removes the \meta{directory}, which should should be specified using |/| as
+% 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}
@@ -127,7 +127,7 @@
% \section{\pkg{l3sys-shell} implementation}
%
% \begin{macrocode}
-%<*initex|package>
+%<*package>
% \end{macrocode}
%
% \begin{macrocode}
@@ -135,12 +135,31 @@
% \end{macrocode}
%
% \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3sys-shell}{2020-01-12}{}
+\ProvidesExplPackage{l3sys-shell}{2021-02-18}{}
{L3 Experimental system shell functions}
-%</package>
% \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}
@@ -148,20 +167,20 @@
% \begin{macrocode}
\cs_new:Npn \@@_path_to_win:n #1
{
- \exp_after:wN \@@_path_to_win:w \tl_to_str:n {#1} ~ \q_stop
+ \exp_after:wN \@@_path_to_win:w \tl_to_str:n {#1} ~ \s_@@_stop
}
-\cs_new:Npn \@@_path_to_win:w #1 ~ #2 \q_stop
+\cs_new:Npn \@@_path_to_win:w #1 ~ #2 \s_@@_stop
{
- \@@_path_to_win:N #1 \q_nil
+ \@@_path_to_win:N #1 \q_@@_nil
\tl_if_empty:nF {#2}
{
\c_space_tl
- \@@_path_to_win:w #2 \q_stop
+ \@@_path_to_win:w #2 \s_@@_stop
}
}
\cs_new:Npn \@@_path_to_win:N #1
{
- \quark_if_nil:NF #1
+ \@@_quark_if_nil:NF #1
{
\token_if_eq_meaning:NNTF #1 /
{ \c_backslash_str }
@@ -364,7 +383,7 @@
% \end{macro}
%
% \begin{macrocode}
-%</initex|package>
+%</package>
% \end{macrocode}
%
% \end{implementation}
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
index 9ee35460cbd..025c282b726 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins
+++ b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins
@@ -2,7 +2,7 @@
File: l3sys-shell.ins
-Copyright (C) 2018-2020 The LaTeX3 Project
+Copyright (C) 2018-2021 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
@@ -34,7 +34,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2018-2020 The LaTeX3 Project
+Copyright (C) 2018-2021 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
diff --git a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
index 9f4aec0bcd9..86d3add8ae5 100644
--- a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
@@ -2,7 +2,7 @@
%
%% File: xcoffins.dtx
%
-% Copyright (C) 2010-2012,2014,2016-2020 The LaTeX3 Project
+% Copyright (C) 2010-2012,2014,2016-2021 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
@@ -22,9 +22,6 @@
%
% for those people who are interested.
%
-%<*driver|package>
-\RequirePackage{xparse}
-%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
\usepackage{xcoffins} % Not yet part of expl3, so not in l3doc
@@ -48,7 +45,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -56,7 +53,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -675,7 +672,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xcoffins}{2020-01-12}{}
+\ProvidesExplPackage{xcoffins}{2021-02-18}{}
{L3 Experimental design level coffins}
% \end{macrocode}
%
diff --git a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins
index 52d5c24a449..218e38dec37 100644
--- a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins
+++ b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins
@@ -2,7 +2,7 @@
File: xcoffins.ins
-Copyright (C) 2010,2011,2012,2016,2017,2019,2020 The LaTeX3 Project
+Copyright (C) 2010,2011,2012,2016,2017,2019-2021 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
@@ -34,7 +34,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2010-2020 The LaTeX3 Project
+Copyright (C) 2010-2021 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
diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
index 14d9fc9e099..1c7c9bd9418 100644
--- a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
@@ -3,7 +3,7 @@
%% File: l3galley.dtx
%
% Copyright (C) 1999-2001,2004-2009 Frank Mittelbach
-% (C) 2010-2020 The LaTeX3 Project
+% (C) 2010-2021 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
@@ -53,7 +53,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -61,7 +61,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -678,7 +678,7 @@
% level both of these need to be correctly saved.
%
% \begin{macrocode}
-%<*initex|package>
+%<*package>
% \end{macrocode}
%
% \begin{macrocode}
@@ -686,23 +686,8 @@
% \end{macrocode}
%
% \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3galley}{2020-01-12}{}
+\ProvidesExplPackage{l3galley}{2021-02-18}{}
{L3 Experimental galley code}
-%</package>
-% \end{macrocode}
-%
-% \subsection{Support items}
-%
-% Functions or settings which are needed by the galley but perhaps also
-% elsewhere.
-%
-% The default hyphenation character should be set and hyphenation should be
-% enabled.
-% \begin{macrocode}
-%<*initex>
-\tex_defaulthyphenchar:D 45 \scan_stop:
-%</initex>
% \end{macrocode}
%
% \subsection{Scratch variables}
@@ -767,12 +752,7 @@
% The width of the current measure: the \enquote{running} setting can be
% inherited from \LaTeXe{}.
% \begin{macrocode}
-%<*initex>
-\dim_new:N \l_galley_text_width_dim
-%</initex>
-%<*package>
\cs_new_eq:NN \l_galley_text_width_dim \linewidth
-%</package>
% \end{macrocode}
% \end{variable}
%
@@ -782,12 +762,7 @@
% width are one way to define the measure width. See also the text width,
% which is an alternative view (and should be in sync with this one!).
% \begin{macrocode}
-%<*initex>
-\dim_new:N \l_galley_total_left_margin_dim
-%</initex>
-%<*package>
\cs_new_eq:NN \l_galley_total_left_margin_dim \@totalleftmargin
-%</package>
\dim_new:N \l_galley_total_right_margin_dim
% \end{macrocode}
% \end{variable}
@@ -1453,18 +1428,11 @@
% \LaTeXe{} \cs{@nodocument} is never removed from the register.
% This precaution is not be needed for a stand-alone format.
% \begin{macrocode}
-%<*initex>
-\tex_everypar:D % TEMP
- {
- \bool_if:NTF \g_@@_begin_level_bool
- { \@@_start_paragraph_first: }
- { \@@_start_paragraph_std: }
- }
-%</initex>
-%<*package>
\cs_undefine:N \everypar
\newtoks \everypar
-\AtBeginDocument
+\cs_if_exist:NTF \AtBeginDocument
+ { \AtBeginDocument }
+ { \use:n }
{
\tex_everypar:D
{
@@ -1474,7 +1442,6 @@
\tex_the:D \everypar
}
}
-%</package>
% \end{macrocode}
% \end{macro}
%
@@ -1751,7 +1718,7 @@
\cs_new_protected:Npn \galley_cutout_right:nn
{ \@@_cutout:nnn { right } }
% \end{macrocode}
-% The cutout information needs to be saved in in the appropriate sequence.
+% The cutout information needs to be saved in the appropriate sequence.
% First, the input is converted to a (temporary) sequence. If there is
% no existing cutout defined, this is simply stored. On the other hand,
% if there is a cutout already active, the new one needs to be added to
@@ -2497,10 +2464,6 @@
%
% \subsection{\LaTeXe{} functions}
%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
% \begin{macro}{\clearpage}
% The \tn{clearpage} macro needs to place material into the correct
% structures rather than directly onto the main vertical list. Other
@@ -2653,10 +2616,6 @@
%</package>
% \end{macrocode}
%
-% \begin{macrocode}
-%</initex|package>
-% \end{macrocode}
-%
% \end{implementation}
%
% \PrintIndex
diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx
index 5cd043a5e61..680e288fe37 100644
--- a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx
@@ -3,7 +3,7 @@
%% File: xgalley.dtx
%
% Copyright (C) 1999-2001,2004-2009 Frank Mittelbach
-% (C) 2010-2012,2014,2016-2020 The LaTeX3 Project
+% (C) 2010-2012,2014,2016-2021 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
@@ -23,9 +23,6 @@
%
% for those people who are interested.
%
-%<*driver|package>
-\RequirePackage{xparse}
-%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
\begin{document}
@@ -39,7 +36,7 @@
% }
%
% \author{^^A
-% The \LaTeX3 Project\thanks
+% The \LaTeX{} Project\thanks
% {^^A
% E-mail:
% \href{mailto:latex-team@latex-project.org}
@@ -47,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-01-12}
+% \date{Released 2021-02-18}
%
% \maketitle
%
@@ -121,7 +118,7 @@
% \subsection{Layer two: internal dimensions}
%
% \begin{TemplateInterfaceDescription}{measure}
-% \TemplateArgument{}{} ^^A A hack
+% \TemplateArgument{}{} ^^A Some hack
% \TemplateSemantics
% Sets the width available to typeset material within the galley.
% The \meta{left margin} and \meta{right margin} values are used in the
@@ -192,7 +189,7 @@
% \subsection{Layer three: paragraph shape}
%
% \begin{TemplateInterfaceDescription}{parshape}
-% \TemplateArgument{}{}^^A A hack
+% \TemplateArgument{}{}^^A Some hack
% \TemplateSemantics
% Template of this type define any shaping of the paragraph within the
% current measure of the galley. Thus they are used to generate
@@ -734,9 +731,9 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xgalley}{2020-01-12}{}
+\ProvidesExplPackage{xgalley}{2021-02-18}{}
{L3 Experimental galley}
-\RequirePackage{xparse,xtemplate,l3galley}
+\RequirePackage{xtemplate,l3galley}
% \end{macrocode}
%
% \subsection{Variables}
diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins
index d0c89bcd2c9..8b5690d0799 100644
--- a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins
+++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins
@@ -2,7 +2,7 @@
File: xgalley.ins
-Copyright (C) 2010-2012,2016,2017,2019,2020 The LaTeX3 Project
+Copyright (C) 2010-2012,2016,2017,2019-2021 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
@@ -34,7 +34,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2010-2020 The LaTeX3 Project
+Copyright (C) 2010-2021 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