texlive[67294] Master/texmf-dist: l3kernel (6jun23)

commits+karl at tug.org commits+karl at tug.org
Tue Jun 6 22:06:24 CEST 2023


Revision: 67294
          http://tug.org/svn/texlive?view=revision&revision=67294
Author:   karl
Date:     2023-06-06 22:06:24 +0200 (Tue, 06 Jun 2023)
Log Message:
-----------
l3kernel (6jun23)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
    trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3doc.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
    trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2023-06-06 20:06:24 UTC (rev 67294)
@@ -7,6 +7,24 @@
 
 ## [Unreleased]
 
+## [2023-06-05]
+
+### Added
+- `\cctab_gsave_current:N`, `\g_tmpa_cctab` and `\g_tmpb_cctab` (issue \#1089)
+- `\prg_gset_eq_conditional:NNn` (issue \#1212)
+- `\iow_shell_open:Nn` (issue \#1122)
+
+## Deprecated
+- `\tl_case:Nn(TF)`
+- `expl3` package option `enable-debug` (no longer required)
+
+### Fixed
+- Set `\l_keys_value_tl` in `.initial:n` (issue \#1013)
+- Support for boolean values in `expl3` package options
+  `check-declarations` and `log-functions` (issue \#978)
+- Allow for optional `/` at end of `\input at path` entries
+  (see latex3/latex2e\#1076)
+
 ## [2023-05-22]
 
 ### Added
@@ -15,6 +33,7 @@
 - `\coffin_(g)reset_poles:N`
 -  `\dim_to_decimal_in_<unit>:n`, for `<unit>` types
     `cc`, `cm`, `dd`, `in`, `mm` and `pc`
+- `\file_input_raw:n`
 - `\int_if_zero:n(TF)`
 - `\str_mdfive_hash:n`
 
@@ -1432,7 +1451,8 @@
 - Step functions have been added for dim variables,
   e.g. `\dim_step_inline:nnnn`
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2023-05-22...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2023-06-05...HEAD
+[2023-06-05]: https://github.com/latex3/latex3/compare/2023-05-22...2023-06-05
 [2023-05-22]: https://github.com/latex3/latex3/compare/2023-05-15...2023-05-22
 [2023-05-15]: https://github.com/latex3/latex3/compare/2023-05-11...2023-05-15
 [2023-05-11]: https://github.com/latex3/latex3/compare/2023-05-05...2023-05-11

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2023-06-06 20:06:24 UTC (rev 67294)
@@ -1,7 +1,7 @@
 LaTeX3 Programming Conventions
 ==============================
 
-Release 2023-05-22
+Release 2023-06-05
 
 Overview
 --------

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex	2023-06-06 20:06:24 UTC (rev 67294)
@@ -62,7 +62,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2023-05-22}
+\date{Released 2023-06-05}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt	2023-06-06 20:06:24 UTC (rev 67294)
@@ -53,6 +53,14 @@
 \seq_indexed_map_inline:Nn               2020-06-18
 \seq_indexed_map_function:NN             2020-06-18
 \sys_load_deprecation:                   2021-01-11
+\tl_case:cn                              2023-05-23
+\tl_case:cnF                             2023-05-23
+\tl_case:cnT                             2023-05-23
+\tl_case:cnTF                            2023-05-23
+\tl_case:Nn                              2023-05-23
+\tl_case:NnF                             2023-05-23
+\tl_case:NnT                             2023-05-23
+\tl_case:NnTF                            2023-05-23
 \tl_lower_case:n                         2020-01-03
 \tl_lower_case:nn                        2020-01-03
 \tl_mixed_case:n                         2020-01-03

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex	2023-06-06 20:06:24 UTC (rev 67294)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2023-05-22}
+\date{Released 2023-06-05}
 
 \begin{document}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex	2023-06-06 20:06:24 UTC (rev 67294)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2023-05-22}
+\date{Released 2023-06-05}
 
 \newcommand{\TF}{\textit{(TF)}}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex	2023-06-06 20:06:24 UTC (rev 67294)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2023-05-22}
+\date{Released 2023-06-05}
 
 \newcommand{\TF}{\textit{(TF)}}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex	2023-06-06 20:06:24 UTC (rev 67294)
@@ -53,7 +53,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2023-05-22}
+\date{Released 2023-06-05}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex	2023-06-06 20:06:24 UTC (rev 67294)
@@ -2,7 +2,7 @@
 
 File: source3body.tex
 
-Copyright (C) 1990-2012,2014-2021 The LaTeX Project
+Copyright (C) 1990-2012,2014-2023 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
@@ -607,6 +607,7 @@
 
 \ExplSyntaxOn
 \clist_gput_right:Nn \g_docinput_clist { l3deprecation.dtx }
+\clist_gput_right:Nn \g_docinput_clist { l3debug.dtx }
 \ExplSyntaxOff
 
 \endinput

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -24,7 +24,7 @@
 %
 %<*driver|generic|package|2ekernel>
 %</driver|generic|package|2ekernel>
-\def\ExplFileDate{2023-05-22}%
+\def\ExplFileDate{2023-06-05}%
 %<*driver>
 \documentclass[full]{l3doc}
 \usepackage{graphicx}
@@ -51,7 +51,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -643,8 +643,8 @@
 %     as the argument, be it an integer, a length-type register, a token
 %     list variable or similar. The value is passed to the function as a
 %     braced token list.  Can be applied to variables which have a
-%     \cs{\meta{var}_use:N} function (other than floating points and
-%     boxes), and which therefore deliver a single \enquote{value}.
+%     \cs{\meta{var}_use:N} function (other than boxes),
+%     and which therefore deliver a single \enquote{value}.
 %   \item[v] Value of a register, constructed from a character string
 %     used as a command name.\\
 %     This is a combination of |c| and |V| which first constructs a
@@ -651,7 +651,7 @@
 %     control sequence from the argument and then passes the value of
 %     the resulting register to the function.  Can be applied to
 %     variables which have a \cs{\meta{var}_use:N} function (other than
-%     floating points and boxes), and which therefore deliver a single
+%     boxes), and which therefore deliver a single
 %     \enquote{value}.
 %   \item[x]  Fully-expanded token or braced token list.\\
 %     This means that the argument is expanded as in the replacement
@@ -914,14 +914,6 @@
 % required by the bootstrap code).  See also \cs{debug_on:n}
 % \texttt{\{log-functions\}} in \pkg{l3candidates} for finer control.
 %
-% \DescribeOption{enable-debug}
-% To allow more localized checking and logging than provided by
-% \texttt{check-declarations} and \texttt{log-functions}, \pkg{expl3}
-% provides a few \cs[no-index]{debug_\ldots{}} functions (described
-% elsewhere) that turn on the corresponding checks within a group.
-% These functions can only be used if \pkg{expl3} is loaded with the
-% \texttt{enable-debug} option.
-%
 % \DescribeOption{backend}
 % Selects the backend to be used for color, graphics and related operations that
 % are backend-dependent. Options available are
@@ -1392,19 +1384,28 @@
     backend .choices:nn =
       { dvipdfmx , dvips , dvisvgm , luatex , pdftex , pdfmode , xdvipdfmx , xetex }
       { \sys_load_backend:n {#1} } ,
-    check-declarations .code:n =
+    check-declarations .choice: ,
+    check-declarations / true .code:n =
+      { \debug_on:n { check-declarations } } ,
+    check-declarations / false .code:n =
       {
-        \sys_load_debug:
-        \debug_on:n { check-declarations }
+        \__kernel_if_debug:TF
+          { \debug_off:n { check-declarations } }
+          { }
       } ,
+    check-declarations .default:n = true ,
     driver .meta:n = { backend = #1 } ,
-    enable-debug .code:n =
-      \sys_load_debug: ,
-    log-functions .code:n =
+    enable-debug .code:n = {} , % A stub
+    log-functions .choice: ,
+    log-functions / true .code:n =
+      { \debug_on:n { log-functions } } ,
+    log-functions / false .code:n =
       {
-        \sys_load_debug:
-        \debug_on:n { log-functions }
+        \__kernel_if_debug:TF
+          { \debug_off:n { log-functions } }
+          { }
       } ,
+    log-functions .default:n = true ,
     suppress-backend-headers .bool_gset_inverse:N
       = \g__kernel_backend_header_bool ,
     suppress-backend-headers .initial:n = false ,

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -601,6 +601,7 @@
 % \begin{function}[updated = 2012-01-14]
 %   {
 %     \cs_generate_from_arg_count:NNnn,
+%     \cs_generate_from_arg_count:NNno,
 %     \cs_generate_from_arg_count:cNnn,
 %     \cs_generate_from_arg_count:Ncnn
 %   }
@@ -870,7 +871,7 @@
 %   \end{texnote}
 % \end{function}
 %
-% \begin{function}[EXP, added = 2019-02-27]{\cs_replacement_spec:N}
+% \begin{function}[EXP, added = 2019-02-27]{\cs_replacement_spec:N, \cs_replacement_spec:c}
 %   \begin{syntax}
 %     \cs{cs_replacement_spec:N} \meta{token}
 %   \end{syntax}
@@ -1148,11 +1149,6 @@
 %      conditionals described above.
 % \end{description}
 %
-% \begin{variable}{\c_true_bool, \c_false_bool}
-%   Constants that represent |true| and |false|, respectively. Used to
-%   implement predicates.
-% \end{variable}
-%
 % \subsection{Tests on control sequences}
 %
 % \begin{function}[EXP,pTF]{\cs_if_eq:NN}
@@ -1291,7 +1287,7 @@
 %
 % \section{Debugging support}
 %
-% \begin{function}[added = 2017-07-16, updated = 2017-08-02]{\debug_on:n, \debug_off:n}
+% \begin{function}[added = 2017-07-16, updated = 2023-05-23]{\debug_on:n, \debug_off:n}
 %   \begin{syntax}
 %     \cs{debug_on:n} |{| \meta{comma-separated list} |}|
 %     \cs{debug_off:n} |{| \meta{comma-separated list} |}|
@@ -1313,8 +1309,7 @@
 %   Providing these as switches rather than options allows testing code
 %   even if it relies on other packages: load all other packages, call
 %   \cs{debug_on:n}, and load the code that one is interested in
-%   testing.  These functions can only be used in \LaTeXe{} package mode
-%   loaded with \texttt{enable-debug} or another option implying it.
+%   testing.
 % \end{function}
 %
 % \begin{function}[added = 2017-11-28]{\debug_suspend:, \debug_resume:}
@@ -1803,13 +1798,13 @@
 %    \begin{macrocode}
 \cs_set_protected:Npn \debug_on:n #1
   {
-    \msg_error:nnx { debug } { enable-debug }
-      { \tl_to_str:n { \debug_on:n {#1} } }
+    \sys_load_debug: 
+    \debug_on:n {#1}
   }
 \cs_set_protected:Npn \debug_off:n #1
   {
-    \msg_error:nnx { debug } { enable-debug }
-       { \tl_to_str:n { \debug_off:n {#1} } }
+    \sys_load_debug:
+    \debug_off:n {#1}
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2161,7 +2156,12 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}{\prg_set_eq_conditional:NNn, \prg_new_eq_conditional:NNn}
+% \begin{macro}
+%   {
+%     \prg_set_eq_conditional:NNn ,
+%     \prg_gset_eq_conditional:NNn,
+%     \prg_new_eq_conditional:NNn
+%   }
 % \begin{macro}{\@@_set_eq_conditional:NNNn}
 %   The setting-equal functions.  Split both functions and feed
 %   \Arg{name_1} \Arg{signature_1} \meta{boolean_1}
@@ -2172,6 +2172,8 @@
 %    \begin{macrocode}
 \cs_set_protected:Npn \prg_set_eq_conditional:NNn
   { \@@_set_eq_conditional:NNNn \cs_set_eq:cc }
+\cs_set_protected:Npn \prg_gset_eq_conditional:NNn
+  { \@@_set_eq_conditional:NNNn \cs_gset_eq:cc }
 \cs_set_protected:Npn \prg_new_eq_conditional:NNn
   { \@@_set_eq_conditional:NNNn \cs_new_eq:cc }
 \cs_set_protected:Npn \@@_set_eq_conditional:NNNn #1#2#3#4
@@ -3343,8 +3345,8 @@
 %   The approach here is different to that used by \LaTeXe{} or plain \TeX{},
 %   which unbox a void box to force horizontal mode. That inserts the
 %   \tn{everypar} tokens \emph{before} the re-inserted unboxing tokens. The
-%   approach here uses either the \tn{quitvmode} primitive or the equivalent
-%   protected macro. In vertical mode, the \tn{indent} primitive is inserted:
+%   approach here uses a protected macro, equivalent to the \tn{quitvmode}
+%   primitive. In vertical mode, the \tn{indent} primitive is inserted:
 %   this will switch to horizontal mode and insert \tn{everypar} tokens and
 %   nothing else. Unlike the \LaTeXe{} version, the availability of \eTeX{}
 %   means using a mode test can be done at for example the start of an

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -52,7 +52,9 @@
 % 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.
+% such tables. The implementation of category code tables in \pkg{expl3}
+% also saves and restores the \TeX{} \tn{endlinechar} primitive value, meaning
+% they could be used for example to implement \cs{ExplSyntaxOn}.
 %
 % \section{Creating and initialising category code tables}
 %
@@ -87,6 +89,15 @@
 %   can include a call to \cs{cctab_select:N}.
 % \end{function}
 %
+% \begin{function}[added = 2023-05-26]
+%   {\cctab_gsave_current:N,\cctab_gsave_current:c}
+%   \begin{syntax}
+%     \cs{cctab_gsave_current:N} \meta{category code table}
+%   \end{syntax}
+%   Saves the current prevailing category codes in the
+%   \meta{category code table}.
+% \end{function}
+%
 % \section{Using category code tables}
 %
 % \begin{function}[updated = 2020-07-02]{\cctab_begin:N,\cctab_begin:c}
@@ -141,12 +152,12 @@
 %   category code table.
 % \end{function}
 %
-% \section{Constant category code tables}
+% \section{Constant and scratch category code tables}
 %
 % \begin{variable}[updated = 2020-07-10]{\c_code_cctab}
 %   Category code table for the \pkg{expl3} code environment; this does
 %   \emph{not} include \texttt{@}, which is retained as an \enquote{other}
-%   character.
+%   character.  Sets the \tn{endlinechar} value to $32$ (a space).
 % \end{variable}
 %
 % \begin{variable}[updated = 2020-07-08]{\c_document_cctab}
@@ -153,7 +164,8 @@
 %   Category code table for a standard \LaTeX{} document, as set by the \LaTeX{}
 %   kernel. In particular, the upper-half of the $8$-bit range will be set to
 %   \enquote{active} with \pdfTeX{} \emph{only}. No \pkg{babel} shorthands
-%   will be activated.
+%   will be activated.  Sets the \tn{endlinechar} value to $13$ (normal
+%   line ending).
 % \end{variable}
 %
 % \begin{variable}[updated = 2020-07-02]{\c_initex_cctab}
@@ -162,15 +174,19 @@
 %
 % \begin{variable}[updated = 2020-07-02]{\c_other_cctab}
 %   Category code table where all characters have category code $12$
-%   (other).
+%   (other). Sets the \tn{endlinechar} value to $-1$.
 % \end{variable}
 %
 % \begin{variable}[updated = 2020-07-02]{\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).
+%   $10$ (space).  Sets the \tn{endlinechar} value to $-1$.
 % \end{variable}
 %
+% \begin{variable}[added = 2023-05-26]{\g_tmpa_cctab, \g_tmpb_cctab}
+%   Scratch category code tables.
+% \end{variable}
+%
 % \end{documentation}
 %
 % \begin{implementation}
@@ -363,6 +379,18 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\cctab_gsave_current:N, \cctab_gsave_current:c}
+%   Very simple.
+%    \begin{macrocode}
+\cs_new_protected:Npn \cctab_gsave_current:N #1
+  {
+    \@@_chk_if_valid:NT #1
+      { \@@_gset:n {#1} }
+  }
+\cs_generate_variant:Nn \cctab_gsave_current:N { c }
+%    \end{macrocode}
+% \end{macro}
+%
 % \subsection{Using category code tables}
 %
 % \begin{variable}{\g_@@_internal_cctab}
@@ -864,6 +892,13 @@
 %    \end{macrocode}
 % \end{variable}
 %
+% \begin{variable}{\g_tmpa_cctab, \g_tmpb_cctab}
+%    \begin{macrocode}
+\cctab_new:N \g_tmpa_cctab
+\cctab_new:N \g_tmpb_cctab
+%    \end{macrocode}
+% \end{variable}
+%
 % \subsection{Messages}
 %
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -241,12 +241,16 @@
 % \begin{function}[updated = 2011-09-05]
 %   {
 %     \clist_put_left:Nn,  \clist_put_left:NV,
+%     \clist_put_left:Nv,
 %     \clist_put_left:No,  \clist_put_left:Nx,
 %     \clist_put_left:cn,  \clist_put_left:cV,
+%     \clist_put_left:cv,
 %     \clist_put_left:co,  \clist_put_left:cx,
 %     \clist_gput_left:Nn, \clist_gput_left:NV,
+%     \clist_gput_left:Nv,
 %     \clist_gput_left:No, \clist_gput_left:Nx,
 %     \clist_gput_left:cn, \clist_gput_left:cV,
+%     \clist_gput_left:cv,
 %     \clist_gput_left:co, \clist_gput_left:cx
 %   }
 %   \begin{syntax}
@@ -264,12 +268,16 @@
 % \begin{function}[updated = 2011-09-05]
 %   {
 %     \clist_put_right:Nn,  \clist_put_right:NV,
+%     \clist_put_right:Nv,
 %     \clist_put_right:No,  \clist_put_right:Nx,
 %     \clist_put_right:cn,  \clist_put_right:cV,
+%     \clist_put_right:cv,
 %     \clist_put_right:co,  \clist_put_right:cx,
 %     \clist_gput_right:Nn, \clist_gput_right:NV,
+%     \clist_gput_right:Nv,
 %     \clist_gput_right:No, \clist_gput_right:Nx,
 %     \clist_gput_right:cn, \clist_gput_right:cV,
+%     \clist_gput_right:cv,
 %     \clist_gput_right:co, \clist_gput_right:cx
 %   }
 %   \begin{syntax}
@@ -1158,8 +1166,10 @@
 % \begin{macro}
 %   {
 %     \clist_put_left:Nn, \clist_put_left:NV,
+%     \clist_put_left:Nv,
 %     \clist_put_left:No, \clist_put_left:Nx,
 %     \clist_put_left:cn, \clist_put_left:cV,
+%     \clist_put_left:cv,
 %     \clist_put_left:co, \clist_put_left:cx
 %   }
 % \UnitTested
@@ -1166,8 +1176,10 @@
 % \begin{macro}
 %   {
 %     \clist_gput_left:Nn, \clist_gput_left:NV,
+%     \clist_gput_left:Nv,
 %     \clist_gput_left:No, \clist_gput_left:Nx,
 %     \clist_gput_left:cn, \clist_gput_left:cV,
+%     \clist_gput_left:cv,
 %     \clist_gput_left:co, \clist_gput_left:cx
 %   }
 % \UnitTested
@@ -1185,10 +1197,10 @@
     #2 \l_@@_internal_clist {#4}
     #1 #3 \l_@@_internal_clist #3
   }
-\cs_generate_variant:Nn \clist_put_left:Nn  {     NV , No , Nx }
-\cs_generate_variant:Nn \clist_put_left:Nn  { c , cV , co , cx }
-\cs_generate_variant:Nn \clist_gput_left:Nn {     NV , No , Nx }
-\cs_generate_variant:Nn \clist_gput_left:Nn { c , cV , co , cx }
+\cs_generate_variant:Nn \clist_put_left:Nn  {     NV , Nv , No , Nx }
+\cs_generate_variant:Nn \clist_put_left:Nn  { c , cV , cv , co , cx }
+\cs_generate_variant:Nn \clist_gput_left:Nn {     NV , Nv , No , Nx }
+\cs_generate_variant:Nn \clist_gput_left:Nn { c , cV , cv , co , cx }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -1197,8 +1209,10 @@
 % \begin{macro}
 %   {
 %     \clist_put_right:Nn, \clist_put_right:NV,
+%     \clist_put_right:Nv,
 %     \clist_put_right:No, \clist_put_right:Nx,
 %     \clist_put_right:cn, \clist_put_right:cV,
+%     \clist_put_right:cv,
 %     \clist_put_right:co, \clist_put_right:cx
 %   }
 % \UnitTested
@@ -1205,8 +1219,10 @@
 % \begin{macro}
 %   {
 %     \clist_gput_right:Nn, \clist_gput_right:NV,
+%     \clist_gput_right:Nv,
 %     \clist_gput_right:No, \clist_gput_right:Nx,
 %     \clist_gput_right:cn, \clist_gput_right:cV,
+%     \clist_gput_right:cv,
 %     \clist_gput_right:co, \clist_gput_right:cx
 %   }
 % \UnitTested
@@ -1221,10 +1237,10 @@
     #2 \l_@@_internal_clist {#4}
     #1 #3 #3 \l_@@_internal_clist
   }
-\cs_generate_variant:Nn \clist_put_right:Nn  {     NV , No , Nx }
-\cs_generate_variant:Nn \clist_put_right:Nn  { c , cV , co , cx }
-\cs_generate_variant:Nn \clist_gput_right:Nn {     NV , No , Nx }
-\cs_generate_variant:Nn \clist_gput_right:Nn { c , cV , co , cx }
+\cs_generate_variant:Nn \clist_put_right:Nn  {     NV , Nv , No , Nx }
+\cs_generate_variant:Nn \clist_put_right:Nn  { c , cV , cv , co , cx }
+\cs_generate_variant:Nn \clist_gput_right:Nn {     NV , Nv , No , Nx }
+\cs_generate_variant:Nn \clist_gput_right:Nn { c , cV , cv , co , cx }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,12 +43,18 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
 % \begin{documentation}
 %
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{\pkg{l3debug} implementation}
+%
 % \begin{function}{\__kernel_chk_var_local:N, \__kernel_chk_var_global:N}
 %   \begin{syntax}
 %     \cs{__kernel_chk_var_local:N} \meta{var}
@@ -112,12 +118,6 @@
 %   This function is only created if debugging is enabled.
 % \end{function}
 %
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3debug} implementation}
-%
 %    \begin{macrocode}
 %<*package>
 %    \end{macrocode}
@@ -602,7 +602,8 @@
 \cs_new:Npn \@@_arg_return:N #1
   { \exp_after:wN #1 \exp:w \exp_end_continue_f:w }
 %    \end{macrocode}
-% \end{variable}
+% \end{macro}
+% \end{macro}
 %
 % \begin{macro}{
 %     \__kernel_patch:nnn,
@@ -1471,7 +1472,7 @@
     \\
     LaTeX~will~create~the~variable~and~continue.
   }
-% \end{macrocode}
+%    \end{macrocode}
 %
 % \begin{macro}{\__kernel_if_debug:TF}
 %   Flip the switch for deprecated code.

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -583,6 +583,22 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}[noTF]{\tl_case:Nn, \tl_case:cn}
+%    \begin{macrocode}
+\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:Nn }
+\cs_gset:Npn \tl_case:Nn { \token_case_meaning:Nn }
+\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:NnT }
+\cs_gset:Npn \tl_case:NnT { \token_case_meaning:NnT }
+\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:NnF }
+\cs_gset:Npn \tl_case:NnF { \token_case_meaning:NnF }
+\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:NnTF }
+\cs_gset:Npn \tl_case:NnTF { \token_case_meaning:NnTF }
+\cs_generate_variant:Nn \tl_case:Nn   { c }
+\prg_generate_conditional_variant:Nnn \tl_case:Nn
+  { c } { T , F , TF }
+%    \end{macrocode}
+% \end{macro}
+%
 % \subsection{Deprecated \pkg{l3token} functions}
 %
 % \begin{macro}[EXP]{\char_to_utfviii_bytes:n}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -85,7 +85,7 @@
 %    require you to do updates, if the class changes.}}
 %
 % \author{\Team}
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 % \maketitle
 % \tableofcontents
 %
@@ -3374,7 +3374,7 @@
     \seq_set_map:NNn \l_@@_tmpa_seq
       \g_@@_nested_names_seq
       { \@@_macro_end_wrap_item:n {##1} }
-    End~ definition~ for~
+    End~ of~ definition~ for~
     \int_compare:nTF { \seq_count:N \l_@@_tmpa_seq <= 3 }
       {
         \seq_use:Nnnn \l_@@_tmpa_seq

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -63,7 +63,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -134,7 +134,8 @@
 %   comma-separated list of \meta{variant argument specifiers} is
 %   then used to define variants of the
 %   \meta{original argument specifier} if these are not already
-%   defined. For each \meta{variant} given, a function is created
+%   defined; entries which correspond to existing functions are silently
+%   ingored. For each \meta{variant} given, a function is created
 %   that expands its arguments as detailed and passes them
 %   to the \meta{parent control sequence}. So for example
 %   \begin{verbatim}
@@ -150,7 +151,7 @@
 %   generates the functions |\foo:NV| and |\foo:cV| in the same
 %   way. The \cs{cs_generate_variant:Nn} function should only be applied if
 %   the \meta{parent control sequence} is already defined. (This is only
-%   enforced if debugging support is enabled.)
+%   enforced if debugging support \texttt{check-declarations} is enabled.)
 %   If the \meta{parent
 %   control sequence} is protected or if the \meta{variant} involves any
 %   |x|~argument, then the \meta{variant control sequence} is also
@@ -158,7 +159,9 @@
 %   \cs[no-index]{exp_args:N\meta{variant}} function needed to carry out the
 %   expansion. There is no need to re-apply \cs{cs_generate_variant:Nn} after
 %   changing the definition of the parent function: the variant will always
-%   use the current definition of the parent.
+%   use the current definition of the parent. Providing variants repeatedly is
+%   safe as \cs{cs_generate_variant:Nn} will only create new definitions if
+%   there is not already one available.
 %
 %   Only |n|~and |N| arguments can be changed to other types.  The only
 %   allowed changes are
@@ -1729,7 +1732,7 @@
 %
 %   The other case where variants should be protected is when the parent
 %   function is a protected macro: then |protected| appears in the
-%   meaning before the fist occurrence of |macro|.  The |ww| auxiliary
+%   meaning before the first occurrence of |macro|.  The |ww| auxiliary
 %   removes everything in the meaning string after the first |ma|.  We
 %   use |ma| rather than the full |macro| because the meaning of the
 %   \tn{firstmark} primitive (and four others) can contain an arbitrary
@@ -2387,7 +2390,19 @@
 % \end{macro}
 % \end{macro}
 %
+% \subsection{Held-over variant generation}
+%
+% \begin{macro}{\cs_generate_from_arg_count:NNno}
+% \begin{macro}{\cs_replacement_spec:c}
+%   A couple of variants that are from early functions.
 %    \begin{macrocode}
+\cs_generate_variant:Nn \cs_generate_from_arg_count:NNnn { NNno }
+\cs_generate_variant:Nn \cs_replacement_spec:N { c }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
 %</package>
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -157,6 +157,23 @@
 %   \cs{sys_get_shell:nnNTF}.
 % \end{function}
 %
+% \begin{function}[added = 2023-05-25]{\iow_shell_open:Nn}
+%   \begin{syntax}
+%     \cs{iow_shell_open:Nn} \meta{stream} \Arg{shell~command}
+%   \end{syntax}
+%   Opens the \emph{pseudo}-file created by the output of the
+%   \meta{shell command} for writing using \meta{stream} as the
+%   control sequence for access. If the \meta{stream} was already
+%   open it is closed before the new operation begins. The
+%   \meta{stream} is available for access immediately and will remain
+%   allocated to \meta{shell command} until a \cs{iow_close:N} instruction
+%   is given or the \TeX{} run ends.
+%   If piped system calls are disabled an error is raised.
+%
+%   For details of handling of the \meta{shell command}, see
+%   \cs{sys_get_shell:nnNTF}.
+% \end{function}
+%
 % \begin{function}[updated = 2012-07-31]
 %   {\ior_close:N, \ior_close:c, \iow_close:N, \iow_close:c}
 %   \begin{syntax}
@@ -917,6 +934,21 @@
 %   function. An error is raised if the file is not found.
 % \end{function}
 %
+% \begin{function}[added = 2023-05-18, EXP]{\file_input_raw:n}
+%   \begin{syntax}
+%     \cs{file_input_raw:n} \Arg{file name}
+%   \end{syntax}
+%   Searches for \meta{file name} in the path as detailed for
+%   \cs{file_if_exist:nTF}, and if found reads in the file as
+%   additional \TeX{} source. No data concerning the file is
+%   tracked. If the file is not found, no action is taken.
+%   \begin{texnote}
+%     This function is intended only for contexts where files must
+%     be read purely by expansion, for example at the start of a
+%     table cell in an \tn{halign}.
+%   \end{texnote}
+% \end{function}
+%
 % \begin{function}[added = 2014-07-02]{\file_if_exist_input:n, \file_if_exist_input:nF}
 %   \begin{syntax}
 %     \cs{file_if_exist_input:n} \Arg{file name}
@@ -1169,7 +1201,7 @@
   {
     \sys_if_shell:TF
       { \exp_args:No \@@_shell_open:nN { \tl_to_str:n {#2} } #1 }
-      { \msg_error:nn { ior } { pipe-failed } }
+      { \msg_error:nn { kernel } { pipe-failed } }
   }
 \cs_new_protected:Npn \@@_shell_open:nN #1#2
   {
@@ -1180,7 +1212,7 @@
       }
       { \__kernel_ior_open:Nn #2 { |#1 } }
   }
-\msg_new:nnnn { ior } { pipe-failed }
+\msg_new:nnnn { kernel } { pipe-failed }
   { Cannot~run~piped~system~commands. }
   {
     LaTeX~tried~to~call~a~system~process~but~this~was~not~possible.\\
@@ -1634,6 +1666,29 @@
 % \end{macro}
 % \end{macro}
 %
+% \begin{macro}{\iow_shell_open:Nn}
+% \begin{macro}{\@@_shell_open:nN}
+%   Very similar to the \texttt{ior} version
+%    \begin{macrocode}
+\cs_new_protected:Npn \iow_shell_open:Nn #1#2
+  {
+    \sys_if_shell:TF
+      { \exp_args:No \@@_shell_open:nN { \tl_to_str:n {#2} } #1 }
+      { \msg_error:nn { kernel } { pipe-failed } }
+  }
+\cs_new_protected:Npn \@@_shell_open:nN #1#2
+  {
+    \tl_if_in:nnTF {#1} { " }
+      {
+        \msg_error:nnx
+          { kernel } { quote-in-shell } {#1}
+      }
+      { \__kernel_iow_open:Nn #2 { |#1 } }
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
 % \begin{macro}{\iow_close:N, \iow_close:c}
 %   Closing a stream is not quite the reverse of opening one. First,
 %   the close operation is easier than the open one, and second as the
@@ -2818,7 +2873,9 @@
 %
 % \begin{macro}[EXP]{\file_full_name:n, \@@_full_name:n, \@@_full_name_aux:n}
 % \begin{macro}[EXP]{\@@_full_name_auxi:nn, \@@_full_name_auxii:nn}
-% \begin{macro}[EXP]{\@@_full_name_aux:Nnnn}
+% \begin{macro}[EXP]{\@@_full_name_aux:Nnn}
+% \begin{macro}[EXP]{\@@_full_name_slash:n}
+% \begin{macro}[EXP]{\@@_full_name_slash:w}
 % \begin{macro}[EXP]{\@@_full_name_aux:nN}
 % \begin{macro}[EXP]{\@@_full_name_aux:nnN}
 % \begin{macro}[EXP]{\@@_name_cleanup:w}
@@ -2888,11 +2945,11 @@
     \tl_if_blank:nTF {#2}
       {
         \seq_map_tokens:Nn \l_file_search_path_seq
-          { \@@_full_name_aux:Nnnn \seq_map_break:n {#1} { / } }
+          { \@@_full_name_aux:Nnn \seq_map_break:n {#1} }
         \cs_if_exist:NT \input at path
           {
             \tl_map_tokens:Nn \input at path
-              { \@@_full_name_aux:Nnnn \tl_map_break:n {#1} { } }
+              { \@@_full_name_aux:Nnn \tl_map_break:n {#1} }
           }
         \@@_name_end:
       }
@@ -2902,8 +2959,25 @@
 %   Two pars to the auxiliary here so we can avoid doing quoting
 %   twice in the event we find the right file.
 %    \begin{macrocode}
-\cs_new:Npn \@@_full_name_aux:Nnnn #1#2#3#4
-  { \exp_args:Ne \@@_full_name_aux:nN { \tl_to_str:n {#4} #3 #2 } #1 }
+\cs_new:Npn \@@_full_name_aux:Nnn #1#2#3
+  {
+    \exp_args:Ne \@@_full_name_aux:nN
+      {
+        \exp_args:Ne \@@_full_name_slash:n
+          { \tl_to_str:n {#3} } #2
+      }
+      #1
+  }
+\cs_new:Npn \@@_full_name_slash:n #1
+  {
+    \@@_full_name_slash:nw {#1} #1 \q_nil / \q_nil / \q_nil \q_stop
+  }
+\cs_new:Npn \@@_full_name_slash:nw #1#2 / \q_nil / #3 \q_stop
+  {
+    \quark_if_nil:nTF {#3}
+      { #1 / }
+      { #2 / }
+  }
 \cs_new:Npn \@@_full_name_aux:nN #1
   { \exp_args:Nne \@@_full_name_aux:nnN {#1} { \@@_full_name_aux:n {#1} } }
 \cs_new:Npn \@@_full_name_aux:nnN #1 #2 #3
@@ -2971,6 +3045,8 @@
 % \end{macro}
 % \end{macro}
 % \end{macro}
+% \end{macro}
+% \end{macro}
 %
 % \begin{macro}{\file_get_full_name:nN, \file_get_full_name:VN}
 % \begin{macro}[TF]{\file_get_full_name:nN, \file_get_full_name:VN}
@@ -3355,6 +3431,30 @@
 % \end{macro}
 % \end{macro}
 %
+% \begin{macro}{\file_input_raw:n, \@@_input_raw:nn}
+%   No error checking, no tracking.
+%    \begin{macrocode}
+\cs_new:Npn \file_input_raw:n #1
+  { \exp_args:Ne \@@_input_raw:nn { \file_full_name:n {#1} } {#1} }
+\cs_new:Npx \@@_input_raw:nn #1#2
+  {
+    \exp_not:N \tl_if_blank:nTF {#1}
+      {
+        \exp_not:N \exp_args:Nnne \exp_not:N \msg_expandable_error:nnn
+          { kernel } { file-not-found }
+          { \exp_not:N \__kernel_file_name_sanitize:n {#2} }
+      }
+      {
+        \exp_not:N \tex_input:D
+          \sys_if_engine_luatex:TF
+            { {#1} }
+            { \exp_not:N \__kernel_file_name_quote:n {#1} \scan_stop: }
+        }
+  }
+\exp_args_generate:n { nne }
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\file_parse_full_name:n, \file_parse_full_name_apply:nN}
 %   The main parsing macro \cs{file_parse_full_name_apply:nN} passes the
 %   file name |#1| through \cs{__kernel_file_name_sanitize:n} so that we

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 % \maketitle
 %
 % \begin{documentation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -172,10 +172,10 @@
 % \subsection{Multiplying a fixed point number by a short one}
 %
 % \begin{macro}[EXP]{\@@_fixed_mul_short:wwn}
-%   \begin{syntax}
+%   \begin{syntax}\parskip=0pt\obeylines
 %     \cs{@@_fixed_mul_short:wwn}
-%     \ \ \Arg{a_1} \Arg{a_2} \Arg{a_3} \Arg{a_4} \Arg{a_5} \Arg{a_6} |;|
-%     \ \ \Arg{b_0} \Arg{b_1} \Arg{b_2} |;| \Arg{continuation}
+%     |  |\Arg{a_1} \Arg{a_2} \Arg{a_3} \Arg{a_4} \Arg{a_5} \Arg{a_6} |;|
+%     |  |\Arg{b_0} \Arg{b_1} \Arg{b_2} |;| \Arg{continuation}
 %   \end{syntax}
 %   Computes the product $c=ab$ of $a=\sum_i \meta{a_i} 10^{-4i}$ and
 %   $b=\sum_i \meta{b_i} 10^{-4i}$, rounds it to the closest multiple of

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 % \maketitle
 %
 % \begin{documentation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -189,7 +189,8 @@
 %   explict integers, and this may terminate the expression: for
 %   instance, \cs{int_eval:w} \verb*|1 + 1 9| (with explicit space
 %   tokens inserted using |~| in a code setting) expands to \texttt{29}
-%   since the digit~\texttt{9} is not part of the expression.
+%   since the digit~\texttt{9} is not part of the expression. Expansion
+%   details, etc., are as given for \cs{int_eval:n}.
 % \end{function}
 %
 % \begin{function}[EXP, added = 2018-11-03]{\int_sign:n}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -93,9 +93,9 @@
 % \end{function}
 %
 % \begin{function}{\__kernel_chk_tl_type:NnnT}
-%   \begin{syntax}
+%   \begin{syntax}\parskip=0pt\obeylines
 %     \cs{__kernel_chk_tl_type:NnnT} \meta{control sequence} \Arg{specific type} \\
-%     \ \ \Arg{reconstruction} \Arg{true code}
+%     |  |\Arg{reconstruction} \Arg{true code}
 %   \end{syntax}
 %   Helper to test that the \meta{control sequence} is a variable of the
 %   given \meta{specific type} of token list.  Produces suitable error

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -286,6 +286,12 @@
 %   forbidden. Thus a required value cannot be supplied by a default
 %   value, and giving a default value for a key which cannot take a value
 %   does not trigger an error.
+%
+%   When no value is given for a key as part of \cs{keys_set:nn}, the
+%   \texttt{.default:n} value provides the value before key properties are
+%   considered. The only exception is when the \texttt{.value_required:n}
+%   property is active: a required value cannot be supplied by the default,
+%   and must be explicitly given as part of \cs{keys_set:nn}.
 % \end{function}
 %
 % \begin{function}[updated = 2020-01-17]
@@ -717,7 +723,7 @@
 % \section{Setting keys}
 %
 % \begin{function}[updated = 2017-11-14]
-%   {\keys_set:nn, \keys_set:nV, \keys_set:nv, \keys_set:no}
+%   {\keys_set:nn, \keys_set:nV, \keys_set:nv, \keys_set:no, \keys_set:nx}
 %   \begin{syntax}
 %     \cs{keys_set:nn} \Arg{module} \Arg{keyval list}
 %   \end{syntax}
@@ -731,8 +737,8 @@
 %   {\l_keys_key_str, \l_keys_path_str, \l_keys_value_tl}
 %   For each key processed, information of the full \emph{path} of the
 %   key, the \emph{name} of the key and the \emph{value} of the key is
-%   available within three token list variables. These may be used within
-%   the code of the key.
+%   available within two string and one token list variables.
+%   These may be used within the code of the key.
 %
 %   The \emph{value} is everything after the \texttt{=}, which may be
 %   empty if no value was given. This is stored in \cs{l_keys_value_tl}, and
@@ -2079,7 +2085,8 @@
               \l_keys_path_str \s_@@_stop
                 \l_keys_key_tl \l_keys_key_str
             \tl_set_eq:NN \l_keys_key_tl \l_keys_key_str
-            \@@_execute:nn \l_keys_path_str {#1}
+            \tl_set:Nn \l_keys_value_tl {#1}
+            \@@_execute:no \l_keys_path_str \l_keys_value_tl
           }
       }
   }
@@ -2716,7 +2723,7 @@
 %
 % \begin{macro}
 %   {
-%     \keys_set:nn, \keys_set:nV, \keys_set:nv, \keys_set:no,
+%     \keys_set:nn, \keys_set:nV, \keys_set:nv, \keys_set:no, \keys_set:nx,
 %     \@@_set:nn
 %   }
 % \begin{macro}{\@@_set:nnn}
@@ -2742,7 +2749,7 @@
           { \exp_not:o \l_@@_relative_tl }
       }
   }
-\cs_generate_variant:Nn \keys_set:nn { nV , nv , no }
+\cs_generate_variant:Nn \keys_set:nn { nV , nv , no , nx }
 \cs_new_protected:Npn \@@_set:nn #1#2
   { \exp_args:No \@@_set:nnn \l_@@_module_str {#1} {#2} }
 \cs_new_protected:Npn \@@_set:nnn #1#2#3

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -2056,22 +2056,6 @@
   }
 %    \end{macrocode}
 %
-% Some errors are only needed in package mode if debugging is enabled by
-% one of the options \texttt{enable-debug}, \texttt{check-declarations},
-% \texttt{log-functions}, or on the contrary if debugging is turned off.
-% In format mode the error is somewhat different.
-%    \begin{macrocode}
-\msg_new:nnnn { debug } { enable-debug }
-  { To~use~'#1'~set~the~'enable-debug'~option. }
-  {
-    The~function~'#1'~will~be~ignored~because~it~can~only~work~if~
-    some~internal~functions~in~expl3~have~been~appropriately~
-    defined.~This~only~happens~if~one~of~the~options~
-    'enable-debug',~'check-declarations'~or~'log-functions'~was~
-    given~as~an~option:~see~the~main~expl3~documentation.
-  }
-%    \end{macrocode}
-%
 % Some errors only appear in expandable settings,
 % hence don't need a \enquote{more-text} argument.
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -171,7 +171,12 @@
 % state. There must be a return statement for each branch; failing to do
 % so will result in erroneous output if that branch is executed.
 %
-% \begin{function}{\prg_new_eq_conditional:NNn, \prg_set_eq_conditional:NNn}
+% \begin{function}[updated = 2023-05-26]
+%   {
+%     \prg_new_eq_conditional:NNn,
+%     \prg_set_eq_conditional:NNn,
+%     \prg_gset_eq_conditional:NNn
+%   }
 %   \begin{syntax}
 %     \cs{prg_new_eq_conditional:NNn} \cs[no-index]{\meta{name_1}:\meta{arg spec_1}} \cs[no-index]{\meta{name_2}:\meta{arg spec_2}} \Arg{conditions}
 %   \end{syntax}
@@ -375,8 +380,13 @@
 %   check that the \meta{boolean} really is a boolean variable.
 % \end{function}
 %
-% \subsection{Scratch booleans}
+% \subsection{Constant and scratch booleans}
 %
+% \begin{variable}{\c_true_bool, \c_false_bool}
+%   Constants that represent |true| and |false|, respectively. Used to
+%   implement predicates.
+% \end{variable}
+%
 % \begin{variable}{\l_tmpa_bool, \l_tmpb_bool}
 %   A scratch boolean for local assignment. It is never used by
 %   the kernel code, and so is safe for use with any \LaTeX3-defined

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -165,16 +165,16 @@
 %
 % \begin{function}[updated = 2012-07-09]
 %   {
-%     \prop_put:Nnn,  \prop_put:NnV,  \prop_put:Nno,  \prop_put:Nnx,
+%     \prop_put:Nnn,  \prop_put:NnV,  \prop_put:Nno,  \prop_put:Nne, \prop_put:Nnx,
 %     \prop_put:NVn,  \prop_put:NVV,  \prop_put:NVx,  \prop_put:Nvx,
 %     \prop_put:Non,  \prop_put:Noo,  \prop_put:Nxx,
-%     \prop_put:cnn,  \prop_put:cnV,  \prop_put:cno,  \prop_put:cnx,
+%     \prop_put:cnn,  \prop_put:cnV,  \prop_put:cno,  \prop_put:cne, \prop_put:cnx,
 %     \prop_put:cVn,  \prop_put:cVV,  \prop_put:cVx,  \prop_put:cvx,
 %     \prop_put:con,  \prop_put:coo,  \prop_put:cxx,
-%     \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nno, \prop_gput:Nnx,
+%     \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nno, \prop_gput:Nne, \prop_gput:Nnx,
 %     \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVx, \prop_gput:Nvx,
 %     \prop_gput:Non, \prop_gput:Noo, \prop_gput:Nxx,
-%     \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cno, \prop_gput:cnx,
+%     \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cno, \prop_gput:cne, \prop_gput:cnx,
 %     \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVx, \prop_gput:cvx,
 %     \prop_gput:con, \prop_gput:coo, \prop_gput:cxx
 %   }
@@ -1152,19 +1152,19 @@
 %
 % \begin{macro}[tested = m3prop002]
 %   {
-%     \prop_put:Nnn, \prop_put:NnV, \prop_put:Nno, \prop_put:Nnx,
+%     \prop_put:Nnn, \prop_put:NnV, \prop_put:Nno, \prop_put:Nne, \prop_put:Nnx,
 %     \prop_put:NVn, \prop_put:NVV, \prop_put:NVx, \prop_put:Nvx,
 %     \prop_put:Non, \prop_put:Noo, \prop_put:Nxx,
-%     \prop_put:cnn, \prop_put:cnV, \prop_put:cno, \prop_put:cnx,
+%     \prop_put:cnn, \prop_put:cnV, \prop_put:cno, \prop_put:cne, \prop_put:cnx,
 %     \prop_put:cVn, \prop_put:cVV, \prop_put:cVx, \prop_put:cvx,
 %     \prop_put:con, \prop_put:coo, \prop_put:cxx
 %   }
 % \begin{macro}[tested = m3prop002]
 %   {
-%     \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nno, \prop_gput:Nnx,
+%     \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nno, \prop_gput:Nne, \prop_gput:Nnx,
 %     \prop_gput:NVn, \prop_gput:NVV, \prop_hput:NVx, \prop_hput:Nvx,
 %     \prop_gput:Non, \prop_gput:Noo, \prop_gput:Nxx,
-%     \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cno, \prop_gput:cnx,
+%     \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cno, \prop_gput:cne, \prop_gput:cnx,
 %     \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVx, \prop_gput:cvx,
 %     \prop_gput:con, \prop_gput:coo, \prop_gput:cxx
 %   }
@@ -1196,13 +1196,13 @@
       { #1 #2 { \exp_not:o {#2} \l_@@_internal_tl } }
   }
 \cs_generate_variant:Nn \prop_put:Nnn
-  {     NnV , Nno , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
+  {     NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
 \cs_generate_variant:Nn \prop_put:Nnn
-  { c , cnV , cno , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
+  { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
 \cs_generate_variant:Nn \prop_gput:Nnn
-  {     NnV , Nno , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
+  {     NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
 \cs_generate_variant:Nn \prop_gput:Nnn
-  { c , cnV , cno , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
+  { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -931,9 +931,9 @@
 %
 % Adding an \meta{item} to a set \meta{seq~var} can be done by appending
 % it to the \meta{seq~var} if it is not already in the \meta{seq~var}:
-% \begin{quote}\ttfamily
-%   \cs{seq_if_in:NnF} \meta{seq~var} \Arg{item} \\
-%   \ \ \{ \cs{seq_put_right:Nn} \meta{seq~var} \Arg{item} \}
+% \begin{quote}\ttfamily\parskip=0pt\obeylines
+%   \cs{seq_if_in:NnF} \meta{seq~var} \Arg{item}
+%   |  |\{ \cs{seq_put_right:Nn} \meta{seq~var} \Arg{item} \}
 % \end{quote}
 % Removing an \meta{item} from a set \meta{seq~var} can be done using
 % \cs{seq_remove_all:Nn},
@@ -944,13 +944,13 @@
 % The intersection of two sets \meta{seq~var_1} and \meta{seq~var_2} can
 % be stored into \meta{seq~var_3} by collecting items of
 % \meta{seq~var_1} which are in \meta{seq~var_2}.
-% \begin{quote}\ttfamily
-%   \cs{seq_clear:N} \meta{seq~var_3} \\
-%   \cs{seq_map_inline:Nn} \meta{seq~var_1} \\
-%   \ \ \{ \\
-%   \ \ \ \ \cs{seq_if_in:NnT} \meta{seq~var_2} \{\#1\} \\
-%   \ \ \ \ \ \ \{ \cs{seq_put_right:Nn} \meta{seq~var_3} \{\#1\} \} \\
-%   \ \ \}
+% \begin{quote}\ttfamily\parskip=0pt\obeylines
+%   \cs{seq_clear:N} \meta{seq~var_3}
+%   \cs{seq_map_inline:Nn} \meta{seq~var_1}
+%   |  |\{
+%   |    |\cs{seq_if_in:NnT} \meta{seq~var_2} \{\#1\}
+%   |      |\{ \cs{seq_put_right:Nn} \meta{seq~var_3} \{\#1\} \}
+%   |  |\}
 % \end{quote}
 % The code as written here only works if \meta{seq~var_3} is different
 % from the other two sequence variables.  To cover all cases, items
@@ -966,13 +966,13 @@
 %   \cs{seq_remove_duplicates:N} \meta{seq~var_3}
 % \end{quote}
 % or by adding items to (a copy of) \meta{seq~var_1} one by one
-% \begin{quote}\ttfamily
-%   \cs{seq_set_eq:NN} \meta{seq~var_3} \meta{seq~var_1} \\
-%   \cs{seq_map_inline:Nn} \meta{seq~var_2} \\
-%   \ \ \{ \\
-%   \ \ \ \ \cs{seq_if_in:NnF} \meta{seq~var_3} \{\#1\} \\
-%   \ \ \ \ \ \ \{ \cs{seq_put_right:Nn} \meta{seq~var_3} \{\#1\} \} \\
-%   \ \ \}
+% \begin{quote}\ttfamily\parskip=0pt\obeylines
+%   \cs{seq_set_eq:NN} \meta{seq~var_3} \meta{seq~var_1}
+%   \cs{seq_map_inline:Nn} \meta{seq~var_2}
+%   |  |\{
+%   |    |\cs{seq_if_in:NnF} \meta{seq~var_3} \{\#1\}
+%   |      |\{ \cs{seq_put_right:Nn} \meta{seq~var_3} \{\#1\} \}
+%   |  |\}
 % \end{quote}
 % The second approach is faster than the first when the \meta{seq~var_2}
 % is short compared to \meta{seq~var_1}.
@@ -980,10 +980,10 @@
 % The difference of two sets \meta{seq~var_1} and \meta{seq~var_2} can
 % be stored into \meta{seq~var_3} by removing items of the
 % \meta{seq~var_2} from (a copy of) the \meta{seq~var_1} one by one.
-% \begin{quote}\ttfamily
-%   \cs{seq_set_eq:NN} \meta{seq~var_3} \meta{seq~var_1} \\
-%   \cs{seq_map_inline:Nn} \meta{seq~var_2} \\
-%   \ \ \{ \cs{seq_remove_all:Nn} \meta{seq~var_3} \{\#1\} \}
+% \begin{quote}\ttfamily\parskip=0pt\obeylines
+%   \cs{seq_set_eq:NN} \meta{seq~var_3} \meta{seq~var_1}
+%   \cs{seq_map_inline:Nn} \meta{seq~var_2}
+%   |  |\{ \cs{seq_remove_all:Nn} \meta{seq~var_3} \{\#1\} \}
 % \end{quote}
 %
 % The symmetric difference of two sets \meta{seq~var_1} and
@@ -992,13 +992,13 @@
 % the result as |\l__|\meta{pkg}|_internal_seq|, then the difference
 % between \meta{seq~var_2} and \meta{seq~var_1}, and finally
 % concatenating the two differences to get the symmetric differences.
-% \begin{quote}\ttfamily
-%   \cs{seq_set_eq:NN} |\l__|\meta{pkg}|_internal_seq| \meta{seq~var_1} \\
-%   \cs{seq_map_inline:Nn} \meta{seq~var_2} \\
-%   \ \ \{ \cs{seq_remove_all:Nn} |\l__|\meta{pkg}|_internal_seq| \{\#1\} \} \\
-%   \cs{seq_set_eq:NN} \meta{seq~var_3} \meta{seq~var_2} \\
-%   \cs{seq_map_inline:Nn} \meta{seq~var_1} \\
-%   \ \ \{ \cs{seq_remove_all:Nn} \meta{seq~var_3} \{\#1\} \} \\
+% \begin{quote}\ttfamily\parskip=0pt\obeylines
+%   \cs{seq_set_eq:NN} |\l__|\meta{pkg}|_internal_seq| \meta{seq~var_1}
+%   \cs{seq_map_inline:Nn} \meta{seq~var_2}
+%   |  |\{ \cs{seq_remove_all:Nn} |\l__|\meta{pkg}|_internal_seq| \{\#1\} \}
+%   \cs{seq_set_eq:NN} \meta{seq~var_3} \meta{seq~var_2}
+%   \cs{seq_map_inline:Nn} \meta{seq~var_1}
+%   |  |\{ \cs{seq_remove_all:Nn} \meta{seq~var_3} \{\#1\} \}
 %   \cs{seq_concat:NNN} \meta{seq~var_3} \meta{seq~var_3} |\l__|\meta{pkg}|_internal_seq|
 % \end{quote}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -491,7 +491,7 @@
 %   \end{syntax}
 %   Evaluates the \meta{dim expr}, and leaves the result,
 %   expressed in points (\texttt{pt}) in the input stream, with \emph{no
-%     units}.  The result is rounded by \TeX{} to four or five decimal
+%   units}.  The result is rounded by \TeX{} to at most five decimal
 %   places.  If the decimal part of the result is zero, it is omitted,
 %   together with the decimal marker.
 %
@@ -510,7 +510,7 @@
 %   \end{syntax}
 %   Evaluates the \meta{dim expr}, and leaves the result,
 %   expressed in big points (\texttt{bp}) in the input stream, with \emph{no
-%   units}.  The result is rounded by \TeX{} to four or five decimal
+%   units}.  The result is rounded by \TeX{} to at most five decimal
 %   places.  If the decimal part of the result is zero, it is omitted,
 %   together with the decimal marker.
 %
@@ -521,11 +521,14 @@
 %   leaves |0.99628| in the input stream, \emph{i.e.}~the magnitude of
 %   one (\TeX{}) point when converted to big points.
 %   \begin{texnote}
-%      The implementation of this functions is re-entrant: the result of
+%      The implementation of this function is re-entrant: the result of
 %      \begin{verbatim}
-%        \dim_to_decimal_in_bp:n { <n>bp }
+%        \dim_compare:nNnTF
+%          { <x>bp } =
+%            { \dim_to_decimal_in_bp:n { <x>bp } bp }
 %      \end{verbatim}
-%      will be the value \meta{n}.
+%      will be logically \texttt{true}. The decimal representations may
+%      differ provided they produce the same \TeX{} dimension.
 %   \end{texnote}
 % \end{function}
 %
@@ -550,28 +553,33 @@
 %   The maximum \TeX{} allowable dimension value (available as
 %   \tn{maxdimen} in plain \TeX{} and \LaTeX{} and \cs{c_max_dim} in
 %   \pkg{expl3}) can only be expressed exactly in the units
-%   \texttt{pt}, \texttt{bp} and \texttt{sp}. Expressed in different units,
-%   the maximum allowable input value to five decimal places is\\
+%   \texttt{pt}, \texttt{bp} and \texttt{sp}. The maximum allowable
+%   input values to five decimal places are\\
 %   \begin{center}
 %     \begin{tabular}{@{}>{$}r<{$}@{\,}l@{}}
 %      1276.00215 & cc \\
 %       575.83174 & cm \\
+%     15312.02584 & dd \\
 %       226.70540 & in \\
-%     15312.02584 & dd \\
 %      5758.31742 & mm \\
 %      1365.33333 & pc \\
 %     \end{tabular}
 %   \end{center}
+%   (Note that these are not all equal, but rather any larger value will overflow
+%   due to the way \TeX{} converts to \texttt{sp}.)
 %   Values given to five decimal places larger that these will result in \TeX{}
 %   errors; the behavior if additional decimal places are given depends on the
 %   \TeX{} internals and thus larger values are \emph{not} supported by
 %   \pkg{expl3}.
 %   \begin{texnote}
-%      The implementation of this functions is re-entrant: the result of
+%      The implementation of these functions is re-entrant: the result of
 %      \begin{verbatim}
-%        \dim_to_decimal_in_<unit>:n { <n><unit> }
+%        \dim_compare:nNnTF
+%          { <x><unit> } =
+%            { \dim_to_decimal_in_<unit>:n { <x><unit> } <unit> }
 %      \end{verbatim}
-%      will be the value \meta{n}.
+%      will be logically \texttt{true}. The decimal representations may
+%      differ provided they produce the same \TeX{} dimension.
 %   \end{texnote}
 % \end{function}
 %
@@ -584,7 +592,7 @@
 %   units}.  The result is necessarily an integer.
 % \end{function}
 %
-% \begin{function}[added = 2014-07-15, EXP]
+% \begin{function}[added = 2014-07-15, updated = 2023-05-20, EXP]
 %   {\dim_to_decimal_in_unit:nn}
 %   \begin{syntax}
 %     \cs{dim_to_decimal_in_unit:nn} \Arg{dim expr_1} \Arg{dim expr_2}
@@ -603,11 +611,11 @@
 %   leaves |0.35278| in the input stream, \emph{i.e.}~the magnitude of
 %   one big point when expressed in millimetres. The conversions do
 %   \emph{not} guarantee that \TeX{} would yield identical results
-%   for the direct input in an equality test, hence
+%   for the direct input in an equality test, thus for instance
 %   \begin{verbatim}
 %     \dim_compare:nNnTF
-%       { \dim_to_decimal_in_unit:nn { 1bp } { 1mm } mm }
-%       { 1bp }
+%       { 1bp } =
+%         { \dim_to_decimal_in_unit:nn { 1bp } { 1mm } mm }
 %   \end{verbatim}
 %   will take the \texttt{false} branch.
 % \end{function}
@@ -1754,7 +1762,7 @@
 % The code to do this is contributed by Ruixi Zhang.
 %
 % \begin{macro}[EXP]{\dim_to_decimal_in_sp:n}
-%   The one eeasy case: the only requirement here is that we avoid an
+%   The one easy case: the only requirement here is that we avoid an
 %   overflow.
 %    \begin{macrocode}
 \cs_new:Npn \dim_to_decimal_in_sp:n #1
@@ -1798,7 +1806,7 @@
 %   (1)~$\hbox{midpoint}+\frac{1}{2}>N$ and
 %   (2)~$\hbox{midpoint}+\frac{1}{2}<N+1$. In other words,
 %   $N=\lfloor\hbox{midpoint}+\frac{1}{2}\rfloor$. As long as we can
-%   rewrite the midpoint as the result of a ``scaling operation'' of \eTeX,
+%   rewrite the midpoint as the result of a \enquote{scaling operation} of \eTeX,
 %   the $\lfloor\ldots+\frac{1}{2}\rfloor$ part will follow naturally.
 %   Indeed we can: $\hbox{midpoint}=(2X+1)\times(\frac{1}{2}\delta^{-1})$.
 %
@@ -1825,7 +1833,9 @@
 %   Conversions to other units are now coded.
 %   Consult the pdf\/\TeX{} source for each conversion factor~$\delta$.
 %   Each factor $\frac{1}{2}\delta^{-1}$ is hand-coded
-%   for accuracy (and speed).
+%   for accuracy (and speed). As the units \texttt{nc} and \texttt{nd}
+%   are not supported by \XeTeX{} or (u)p\TeX{}, they are not included
+%   here.
 %    \begin{macrocode}
   \@@_tmp:w { in } {   50 /  7227 } % delta = 7227/100
   \@@_tmp:w { pc } {    1 /    24 } % delta = 12/1
@@ -1887,7 +1897,7 @@
 %   |<number2>;{<dimexpr1>}|, where |<number2>| represents |<dimexpr2>| in
 %   |sp| unit.
 %   If |#1| is~|0|$_{12}$, the \enquote{unit} |<dimexpr2>| must also be zero.
-%   So we throw out a ``division by zero'' error message at this point.
+%   So we throw out a \enquote{division by zero} error message at this point.
 %   Otherwise, if |#1| is~|-|$_{12}$, we shall negate both |<dimexpr1>| and
 %   |<dimexpr2>| for later procedures.
 %    \begin{macrocode}
@@ -1950,8 +1960,8 @@
 %   output $q+R'/65536$ in decimal.
 %
 %   Note: $q=\lfloor X/n\rfloor=\lfloor\frac{2X-n}{2n}+\frac{1}{2}\rfloor$
-%   represents the ``integer'' part, while $0\le R'\le65536$ represents the
-%   ``fractional'' part. (Can $R'=65536$ really happen? Didn't investigate.)
+%   represents the \enquote{integer} part, while $0\le R'\le65536$ represents the
+%   \enquote{fractional} part. (Can $R'=65536$ really happen? Didn't investigate.)
 %    \begin{macrocode}
 \cs_new:Npn \@@_branch_unit:w #1;#2;
   {
@@ -1991,12 +2001,12 @@
         \token_if_eq_charcode:NNTF #1 -
           {
             \exp_after:wN \exp_after:wN \exp_after:wN \@@_get_remainder:w
-              \int_eval:w ( 2 * #2 - #3 ) / ( 2 * #3 ) ;
+              \int_eval:n {  ( 2 * #2 - #3 ) / ( 2 * #3 ) } ;
               #2 ; #3 ; - ;
           }
           {
             \exp_after:wN \exp_after:wN \exp_after:wN \@@_get_remainder:w
-              \int_eval:w ( 2 * #1#2 - #3 ) / ( 2 * #3 ) ;
+              \int_eval:n { ( 2 * #1#2 - #3 ) / ( 2 * #3 ) } ;
               #1#2 ; #3 ; ;
           }
       }
@@ -2012,7 +2022,7 @@
 \cs_new:Npn \@@_get_remainder:w #1;#2;#3;
   {
     \exp_after:wN \exp_after:wN \exp_after:wN \@@_convert_remainder:w
-      \int_eval:w #2 - #1 * #3 ;
+      \int_eval:n { #2 - #1 * #3 } ;
       #3 ; #1 ;
   }
 %    \end{macrocode}
@@ -2025,7 +2035,7 @@
 \cs_new:Npn \@@_convert_remainder:w #1;#2;
   {
     \exp_after:wN \exp_after:wN \exp_after:wN \@@_test_candidate:w
-      \int_eval:w #1 * 65536 / #2 ;
+      \int_eval:n { #1 * 65536 / #2 } ;
       #1 ; #2 ;
   }
 %    \end{macrocode}
@@ -2046,8 +2056,7 @@
       { \dim_to_decimal:n { #1sp } \@@_eval:w #3sp \@@_eval_end: }
       { \@@_parse_decimal:w #1 ; }
       {
-        \exp_after:wN \@@_parse_decimal:w
-          \int_eval:w #1 + 1 ;
+        \@@_parse_decimal:w \int_eval:n { #1 + 1 } ;
       }
   }
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -161,12 +161,12 @@
 %
 % \begin{function}
 %   {
-%     \tl_set:Nn, \tl_set:NV, \tl_set:Nv, \tl_set:No, \tl_set:Nf, \tl_set:Nx,
-%     \tl_set:cn, \tl_set:cV, \tl_set:cv, \tl_set:co, \tl_set:cf, \tl_set:cx,
+%     \tl_set:Nn, \tl_set:NV, \tl_set:Nv, \tl_set:No, \tl_set:Ne, \tl_set:Nf, \tl_set:Nx,
+%     \tl_set:cn, \tl_set:cV, \tl_set:cv, \tl_set:co, \tl_set:ce, \tl_set:cf, \tl_set:cx,
 %     \tl_gset:Nn, \tl_gset:NV, \tl_gset:Nv,
-%     \tl_gset:No, \tl_gset:Nf, \tl_gset:Nx,
+%     \tl_gset:No, \tl_gset:Ne, \tl_gset:Nf, \tl_gset:Nx,
 %     \tl_gset:cn, \tl_gset:cV, \tl_gset:cv,
-%     \tl_gset:co, \tl_gset:cf, \tl_gset:cx
+%     \tl_gset:co, \tl_gset:ce, \tl_gset:cf, \tl_gset:cx
 %   }
 %   \begin{syntax}
 %     \cs{tl_set:Nn} \meta{tl~var} \Arg{tokens}
@@ -350,30 +350,6 @@
 %   Token groups (|{|\ldots|}|) are not single tokens.
 % \end{function}
 %
-% \begin{function}[added = 2013-07-24, EXP, noTF]{\tl_case:Nn, \tl_case:cn}
-%   \begin{syntax}
-%     \cs{tl_case:NnTF} \meta{test token list variable} \\
-%     ~~"{" \\
-%     ~~~~\meta{token list variable case_1} \Arg{code case_1} \\
-%     ~~~~\meta{token list variable case_2} \Arg{code case_2} \\
-%     ~~~~\ldots \\
-%     ~~~~\meta{token list variable case_n} \Arg{code case_n} \\
-%     ~~"}" \\
-%     ~~\Arg{true code}
-%     ~~\Arg{false code}
-%   \end{syntax}
-%   This function compares the \meta{test token list variable} in turn
-%   with each of the \meta{token list variable cases}. If the two
-%   are equal (as described for \cs{tl_if_eq:NNTF})
-%   then the associated \meta{code} is left in the input
-%   stream and other cases are discarded. If any of the
-%   cases are matched, the \meta{true code} is also inserted into the
-%   input stream (after the code for the appropriate case), while if none
-%   match then the \meta{false code} is inserted. The function
-%   \cs{tl_case:Nn}, which does nothing if there is no match, is also
-%   available.
-% \end{function}
-%
 % \subsection{Testing the first token}
 %
 % \begin{function}[updated = 2012-07-09, EXP, pTF]
@@ -462,7 +438,7 @@
 %
 % \subsection{Using token lists}
 %
-% \begin{function}[EXP]{\tl_to_str:n, \tl_to_str:V, \tl_to_str:v}
+% \begin{function}[EXP]{\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v}
 %   \begin{syntax}
 %     \cs{tl_to_str:n} \Arg{token list}
 %   \end{syntax}
@@ -670,7 +646,7 @@
 %   \end{texnote}
 % \end{function}
 %
-% \begin{function}[updated = 2015-08-07]{\tl_show:n}
+% \begin{function}[updated = 2015-08-07]{\tl_show:n, \tl_show:x}
 %   \begin{syntax}
 %     \cs{tl_show:n} \Arg{token list}
 %   \end{syntax}
@@ -689,7 +665,7 @@
 %   \cs{tl_show:N} which displays the result in the terminal.
 % \end{function}
 %
-% \begin{function}[added = 2014-08-22, updated = 2015-08-07]{\tl_log:n}
+% \begin{function}[added = 2014-08-22, updated = 2015-08-07]{\tl_log:n, \tl_log:x}
 %   \begin{syntax}
 %     \cs{tl_log:n} \Arg{token list}
 %   \end{syntax}
@@ -1097,8 +1073,10 @@
 %
 % \begin{function}[updated = 2011-08-11]
 %   {
-%     \tl_replace_once:Nnn,  \tl_replace_once:cnn,
-%     \tl_greplace_once:Nnn, \tl_greplace_once:cnn
+%     \tl_replace_once:Nnn,  \tl_replace_once:Nxx,
+%     \tl_replace_once:cnn,  \tl_replace_once:cxx,
+%     \tl_greplace_once:Nnn, \tl_greplace_once:Nxx
+%     \tl_greplace_once:cnn, \tl_greplace_once:cxx
 %   }
 %   \begin{syntax}
 %     \cs{tl_replace_once:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens}
@@ -1112,8 +1090,10 @@
 %
 % \begin{function}[updated = 2011-08-11]
 %   {
-%     \tl_replace_all:Nnn, \tl_replace_all:cnn,
-%     \tl_greplace_all:Nnn, \tl_greplace_all:cnn
+%     \tl_replace_all:Nnn, \tl_replace_all:Nxx,
+%     \tl_replace_all:cnn, \tl_replace_all:cxx
+%     \tl_greplace_all:Nnn, \tl_greplace_all:Nxx,
+%     \tl_greplace_all:cnn, \tl_greplace_all:cxx
 %   }
 %   \begin{syntax}
 %     \cs{tl_replace_all:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens}
@@ -1131,8 +1111,10 @@
 %
 % \begin{function}[updated = 2011-08-11]
 %   {
-%     \tl_remove_once:Nn,  \tl_remove_once:cn,
-%     \tl_gremove_once:Nn, \tl_gremove_once:cn
+%     \tl_remove_once:Nn,  \tl_remove_once:Nx,
+%     \tl_remove_once:cn,  \tl_remove_once:cx,
+%     \tl_gremove_once:Nn, \tl_gremove_once:Nx
+%     \tl_gremove_once:cn, \tl_gremove_once:cx
 %   }
 %   \begin{syntax}
 %     \cs{tl_remove_once:Nn} \meta{tl~var} \Arg{tokens}
@@ -1145,8 +1127,10 @@
 %
 % \begin{function}[updated = 2011-08-11]
 %   {
-%     \tl_remove_all:Nn,  \tl_remove_all:cn,
-%     \tl_gremove_all:Nn, \tl_gremove_all:cn
+%     \tl_remove_all:Nn,  \tl_remove_all:Nx,
+%     \tl_remove_all:cn,  \tl_remove_all:cx,
+%     \tl_gremove_all:Nn, \tl_gremove_all:Nx
+%     \tl_gremove_all:cn, \tl_gremove_all:cx
 %   }
 %   \begin{syntax}
 %     \cs{tl_remove_all:Nn} \meta{tl~var} \Arg{tokens}
@@ -1211,7 +1195,7 @@
 %   \end{texnote}
 % \end{function}
 %
-% \begin{function}[updated = 2015-08-11]{\tl_rescan:nn}
+% \begin{function}[updated = 2015-08-11]{\tl_rescan:nn, \tl_rescan:nV}
 %   \begin{syntax}
 %     \cs{tl_rescan:nn} \Arg{setup} \Arg{tokens}
 %   \end{syntax}
@@ -1463,15 +1447,15 @@
 %
 % \begin{macro}
 %   {
-%     \tl_set:Nn, \tl_set:NV, \tl_set:Nv, \tl_set:No, \tl_set:Nf, \tl_set:Nx,
-%     \tl_set:cn, \tl_set:cV, \tl_set:cv, \tl_set:co, \tl_set:cf, \tl_set:cx
+%     \tl_set:Nn, \tl_set:NV, \tl_set:Nv, \tl_set:No, \tl_set:Ne, \tl_set:Nf, \tl_set:Nx,
+%     \tl_set:cn, \tl_set:cV, \tl_set:cv, \tl_set:co, \tl_set:ce, \tl_set:cf, \tl_set:cx
 %   }
 % \begin{macro}
 %   {
 %     \tl_gset:Nn, \tl_gset:NV, \tl_gset:Nv,
-%     \tl_gset:No, \tl_gset:Nf, \tl_gset:Nx,
+%     \tl_gset:No, \tl_gset:Ne, \tl_gset:Nf, \tl_gset:Nx,
 %     \tl_gset:cn, \tl_gset:cV, \tl_gset:cv,
-%     \tl_gset:co, \tl_gset:cf, \tl_gset:cx
+%     \tl_gset:co, \tl_gset:ce, \tl_gset:cf, \tl_gset:cx
 %   }
 %   By using \cs{exp_not:n} token list variables can contain |#| tokens,
 %   which makes the token list registers provided by \TeX{}
@@ -1490,12 +1474,12 @@
   { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
 \cs_new_protected:Npn \tl_gset:Nx #1#2
   { \__kernel_tl_gset:Nx #1 {#2} }
-\cs_generate_variant:Nn \tl_set:Nn  {    NV , Nv , Nf }
-\cs_generate_variant:Nn \tl_set:Nn  { c, cV , cv , cf }
+\cs_generate_variant:Nn \tl_set:Nn  {    NV , Nv , Ne , Nf }
+\cs_generate_variant:Nn \tl_set:Nn  { c, cV , cv , ce , cf }
 \cs_generate_variant:Nn \tl_set:Nx  { c }
 \cs_generate_variant:Nn \tl_set:No  { c }
-\cs_generate_variant:Nn \tl_gset:Nn {    NV , Nv , Nf }
-\cs_generate_variant:Nn \tl_gset:Nn { c, cV , cv , cf }
+\cs_generate_variant:Nn \tl_gset:Nn {    NV , Nv , Ne , Nf }
+\cs_generate_variant:Nn \tl_gset:Nn { c, cV , cv , ce , cf }
 \cs_generate_variant:Nn \tl_gset:Nx { c }
 \cs_generate_variant:Nn \tl_gset:No { c }
 %    \end{macrocode}
@@ -1677,7 +1661,7 @@
 %     \tl_gset_rescan:Nnn, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx,
 %     \tl_gset_rescan:cnn, \tl_gset_rescan:cno, \tl_gset_rescan:cnx
 %   }
-% \begin{macro}{\tl_rescan:nn}
+% \begin{macro}{\tl_rescan:nn, \tl_rescan:nV}
 % \begin{macro}{\@@_rescan_aux:}
 % \begin{macro}{\@@_set_rescan:NNnn, \@@_set_rescan_multi:nNN}
 % \begin{macro}[EXP]{\@@_rescan:NNw}
@@ -1740,6 +1724,7 @@
     \exp_after:wN \@@_rescan_aux:
     \l_@@_internal_a_tl
   }
+\cs_generate_variant:Nn \tl_rescan:nn { nV }
 \exp_args:NNo \cs_new_protected:Npn \@@_rescan_aux:
   { \tl_clear:N \l_@@_internal_a_tl }
 \cs_new_protected:Npn \tl_set_rescan:Nnn
@@ -1917,10 +1902,10 @@
   { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_set:Nx  }
 \cs_new_protected:Npn \tl_greplace_all:Nnn
   { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_gset:Nx }
-\cs_generate_variant:Nn \tl_replace_once:Nnn  { c }
-\cs_generate_variant:Nn \tl_greplace_once:Nnn { c }
-\cs_generate_variant:Nn \tl_replace_all:Nnn   { c }
-\cs_generate_variant:Nn \tl_greplace_all:Nnn  { c }
+\cs_generate_variant:Nn \tl_replace_once:Nnn  { Nxx , c , cxx }
+\cs_generate_variant:Nn \tl_greplace_once:Nnn { Nxx , c , cxx }
+\cs_generate_variant:Nn \tl_replace_all:Nnn   { Nxx , c , cxx }
+\cs_generate_variant:Nn \tl_greplace_all:Nnn  { Nxx , c , cxx }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -2113,8 +2098,8 @@
   { \tl_replace_once:Nnn #1 {#2} { } }
 \cs_new_protected:Npn \tl_gremove_once:Nn #1#2
   { \tl_greplace_once:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \tl_remove_once:Nn  { c }
-\cs_generate_variant:Nn \tl_gremove_once:Nn { c }
+\cs_generate_variant:Nn \tl_remove_once:Nn  { Nx , c , cx }
+\cs_generate_variant:Nn \tl_gremove_once:Nn { Nx , c , cx }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -2127,8 +2112,8 @@
   { \tl_replace_all:Nnn #1 {#2} { } }
 \cs_new_protected:Npn \tl_gremove_all:Nn #1#2
   { \tl_greplace_all:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \tl_remove_all:Nn  { c }
-\cs_generate_variant:Nn \tl_gremove_all:Nn { c }
+\cs_generate_variant:Nn \tl_remove_all:Nn  { Nx , c , cx }
+\cs_generate_variant:Nn \tl_gremove_all:Nn { Nx , c , cx }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -2234,14 +2219,7 @@
 %   Returns \cs{c_true_bool} if and only if the two token list variables are
 %   equal.
 %    \begin{macrocode}
-\prg_new_conditional:Npnn \tl_if_eq:NN #1#2 { p , T , F , TF }
-  {
-    \if_meaning:w #1 #2
-      \prg_return_true:
-    \else:
-      \prg_return_false:
-    \fi:
-  }
+\prg_new_eq_conditional:NNn \tl_if_eq:NN \cs_if_eq:NN { p , T , F , TF }
 \prg_generate_conditional_variant:Nnn \tl_if_eq:NN
   { Nc , c , cc } { p , TF , T , F }
 %    \end{macrocode}
@@ -2437,69 +2415,6 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[EXP, noTF]{\tl_case:Nn, \tl_case:cn}
-% \begin{macro}[EXP]{\@@_case:nnTF}
-% \begin{macro}[EXP]{\@@_case:Nw}
-% \begin{macro}[EXP]{\@@_case_end:nw}
-%   The aim here is to allow the case statement to be evaluated
-%   using a known number of expansion steps (two), and without
-%   needing to use an explicit \enquote{end of recursion} marker.
-%   That is achieved by using the test input as the final case,
-%   as this is always true. The trick is then to tidy up
-%   the output such that the appropriate case code plus either
-%   the \texttt{true} or \texttt{false} branch code is inserted.
-%    \begin{macrocode}
-\cs_new:Npn \tl_case:Nn #1#2
-  {
-    \exp:w
-    \@@_case:NnTF #1 {#2} { } { }
-  }
-\cs_new:Npn \tl_case:NnT #1#2#3
-  {
-    \exp:w
-    \@@_case:NnTF #1 {#2} {#3} { }
-  }
-\cs_new:Npn \tl_case:NnF #1#2#3
-  {
-    \exp:w
-    \@@_case:NnTF #1 {#2} { } {#3}
-  }
-\cs_new:Npn \tl_case:NnTF #1#2
-  {
-    \exp:w
-    \@@_case:NnTF #1 {#2}
-  }
-\cs_new:Npn \@@_case:NnTF #1#2#3#4
-  { \@@_case:Nw #1 #2 #1 { } \s_@@_mark {#3} \s_@@_mark {#4} \s_@@_stop }
-\cs_new:Npn \@@_case:Nw #1#2#3
-  {
-    \tl_if_eq:NNTF #1 #2
-      { \@@_case_end:nw {#3} }
-      { \@@_case:Nw #1 }
-  }
-\cs_generate_variant:Nn \tl_case:Nn   { c }
-\prg_generate_conditional_variant:Nnn \tl_case:Nn
-  { c } { T , F , TF }
-%    \end{macrocode}
-%   To tidy up the recursion, there are two outcomes. If there was a hit to
-%   one of the cases searched for, then |#1| is the code to insert,
-%   |#2| is the \emph{next} case to check on and |#3| is all of
-%   the rest of the cases code. That means that |#4| is the \texttt{true}
-%   branch code, and |#5| tidies up the spare \cs{s_@@_mark} and the
-%   \texttt{false} branch. On the other hand, if none of the cases matched
-%   then we arrive here using the \enquote{termination} case of comparing
-%   the search with itself. That means that |#1| is empty, |#2| is
-%   the first \cs{s_@@_mark} and so |#4| is the \texttt{false} code (the
-%   \texttt{true} code is mopped up by |#3|).
-%    \begin{macrocode}
-\cs_new:Npn \@@_case_end:nw #1#2#3 \s_@@_mark #4#5 \s_@@_stop
-  { \exp_end: #1 #4 }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
 % \subsection{Mapping over token lists}
 %
 % \begin{macro}
@@ -2642,10 +2557,10 @@
 %
 % \subsection{Using token lists}
 %
-% \begin{macro}{\tl_to_str:n, \tl_to_str:V, \tl_to_str:v}
+% \begin{macro}{\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v}
 %   Another name for a primitive: defined in \pkg{l3basics}.
 %    \begin{macrocode}
-\cs_generate_variant:Nn \tl_to_str:n { V , v }
+\cs_generate_variant:Nn \tl_to_str:n { o , V , v }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -3578,7 +3493,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\tl_show:n, \@@_show:n}
+% \begin{macro}{\tl_show:n, \tl_show:x, \@@_show:n}
 % \begin{macro}[EXP]{\@@_show:w}
 %   Many |show| functions are based on \cs{tl_show:n}.
 %   The argument of \cs{tl_show:n} is line-wrapped using
@@ -3598,6 +3513,7 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \tl_show:n #1
   { \iow_wrap:nnnN { >~ \tl_to_str:n {#1} . } { } { } \@@_show:n }
+\cs_generate_variant:Nn \tl_show:n { x }
 \cs_new_protected:Npn \@@_show:n #1
   {
     \tl_set:Nf \l_@@_internal_a_tl { \@@_show:w #1 \s_@@_stop }
@@ -3615,12 +3531,13 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}{\tl_log:n}
+% \begin{macro}{\tl_log:n, \tl_log:x}
 %   Logging is much easier, simply line-wrap.  The |>~| and trailing
 %   period is there to match the output of \cs{tl_show:n}.
 %    \begin{macrocode}
 \cs_new_protected:Npn \tl_log:n #1
   { \iow_wrap:nnnN { > ~ \tl_to_str:n {#1} . } { } { } \iow_log:n }
+\cs_generate_variant:Nn \tl_log:n { x }
 %    \end{macrocode}
 % \end{macro}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %
@@ -2071,11 +2071,8 @@
 % \begin{macro}[pTF]{\token_if_eq_meaning:NN}
 %   Check if the tokens |#1| and |#2| have same meaning.
 %    \begin{macrocode}
-\prg_new_conditional:Npnn \token_if_eq_meaning:NN #1#2 { p , T ,  F , TF }
-  {
-    \if_meaning:w  #1  #2
-      \prg_return_true: \else: \prg_return_false: \fi:
-  }
+\prg_new_eq_conditional:NNn \token_if_eq_meaning:NN \cs_if_eq:NN
+  { p , T , F , TF }
 %    \end{macrocode}
 % \end{macro}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-05-22}
+% \date{Released 2023-06-05}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2023-06-06 20:06:24 UTC (rev 67294)
@@ -71,7 +71,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2023-05-22}%
+\def\ExplFileDate{2023-06-05}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -1586,13 +1586,13 @@
 \cs_set_protected:Npn \__kernel_if_debug:TF #1#2 {#2}
 \cs_set_protected:Npn \debug_on:n #1
   {
-    \msg_error:nnx { debug } { enable-debug }
-      { \tl_to_str:n { \debug_on:n {#1} } }
+    \sys_load_debug:
+    \debug_on:n {#1}
   }
 \cs_set_protected:Npn \debug_off:n #1
   {
-    \msg_error:nnx { debug } { enable-debug }
-       { \tl_to_str:n { \debug_off:n {#1} } }
+    \sys_load_debug:
+    \debug_off:n {#1}
   }
 \cs_set_protected:Npn \debug_suspend: { }
 \cs_set_protected:Npn \debug_resume: { }
@@ -1755,6 +1755,8 @@
 \cs_set:Npn \__prg_TF_true:w \fi: \use_ii:nn    { \fi: \use_i:nn }
 \cs_set_protected:Npn \prg_set_eq_conditional:NNn
   { \__prg_set_eq_conditional:NNNn \cs_set_eq:cc }
+\cs_set_protected:Npn \prg_gset_eq_conditional:NNn
+  { \__prg_set_eq_conditional:NNNn \cs_gset_eq:cc }
 \cs_set_protected:Npn \prg_new_eq_conditional:NNn
   { \__prg_set_eq_conditional:NNNn \cs_new_eq:cc }
 \cs_set_protected:Npn \__prg_set_eq_conditional:NNNn #1#2#3#4
@@ -3003,6 +3005,8 @@
 \__cs_tmp:w { ccx }
 \__cs_tmp:w { cnx }
 \__cs_tmp:w { oox }
+\cs_generate_variant:Nn \cs_generate_from_arg_count:NNnn { NNno }
+\cs_generate_variant:Nn \cs_replacement_spec:N { c }
 %% File: l3quark.dtx
 \cs_new_protected:Npn \quark_new:N #1
   {
@@ -3376,12 +3380,12 @@
   { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
 \cs_new_protected:Npn \tl_gset:Nx #1#2
   { \__kernel_tl_gset:Nx #1 {#2} }
-\cs_generate_variant:Nn \tl_set:Nn  {    NV , Nv , Nf }
-\cs_generate_variant:Nn \tl_set:Nn  { c, cV , cv , cf }
+\cs_generate_variant:Nn \tl_set:Nn  {    NV , Nv , Ne , Nf }
+\cs_generate_variant:Nn \tl_set:Nn  { c, cV , cv , ce , cf }
 \cs_generate_variant:Nn \tl_set:Nx  { c }
 \cs_generate_variant:Nn \tl_set:No  { c }
-\cs_generate_variant:Nn \tl_gset:Nn {    NV , Nv , Nf }
-\cs_generate_variant:Nn \tl_gset:Nn { c, cV , cv , cf }
+\cs_generate_variant:Nn \tl_gset:Nn {    NV , Nv , Ne , Nf }
+\cs_generate_variant:Nn \tl_gset:Nn { c, cV , cv , ce , cf }
 \cs_generate_variant:Nn \tl_gset:Nx { c }
 \cs_generate_variant:Nn \tl_gset:No { c }
 \cs_new_protected:Npn \tl_put_left:Nn #1#2
@@ -3488,6 +3492,7 @@
     \exp_after:wN \__tl_rescan_aux:
     \l__tl_internal_a_tl
   }
+\cs_generate_variant:Nn \tl_rescan:nn { nV }
 \exp_args:NNo \cs_new_protected:Npn \__tl_rescan_aux:
   { \tl_clear:N \l__tl_internal_a_tl }
 \cs_new_protected:Npn \tl_set_rescan:Nnn
@@ -3588,10 +3593,10 @@
   { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_next:w \__kernel_tl_set:Nx  }
 \cs_new_protected:Npn \tl_greplace_all:Nnn
   { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_next:w \__kernel_tl_gset:Nx }
-\cs_generate_variant:Nn \tl_replace_once:Nnn  { c }
-\cs_generate_variant:Nn \tl_greplace_once:Nnn { c }
-\cs_generate_variant:Nn \tl_replace_all:Nnn   { c }
-\cs_generate_variant:Nn \tl_greplace_all:Nnn  { c }
+\cs_generate_variant:Nn \tl_replace_once:Nnn  { Nxx , c , cxx }
+\cs_generate_variant:Nn \tl_greplace_once:Nnn { Nxx , c , cxx }
+\cs_generate_variant:Nn \tl_replace_all:Nnn   { Nxx , c , cxx }
+\cs_generate_variant:Nn \tl_greplace_all:Nnn  { Nxx , c , cxx }
 \cs_new_protected:Npn \__tl_replace:NnNNNnn #1#2#3#4#5#6#7
   {
     \tl_if_empty:nTF {#6}
@@ -3652,14 +3657,14 @@
   { \tl_replace_once:Nnn #1 {#2} { } }
 \cs_new_protected:Npn \tl_gremove_once:Nn #1#2
   { \tl_greplace_once:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \tl_remove_once:Nn  { c }
-\cs_generate_variant:Nn \tl_gremove_once:Nn { c }
+\cs_generate_variant:Nn \tl_remove_once:Nn  { Nx , c , cx }
+\cs_generate_variant:Nn \tl_gremove_once:Nn { Nx , c , cx }
 \cs_new_protected:Npn \tl_remove_all:Nn #1#2
   { \tl_replace_all:Nnn #1 {#2} { } }
 \cs_new_protected:Npn \tl_gremove_all:Nn #1#2
   { \tl_greplace_all:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \tl_remove_all:Nn  { c }
-\cs_generate_variant:Nn \tl_gremove_all:Nn { c }
+\cs_generate_variant:Nn \tl_remove_all:Nn  { Nx , c , cx }
+\cs_generate_variant:Nn \tl_gremove_all:Nn { Nx , c , cx }
 \prg_new_conditional:Npnn \tl_if_empty:N #1 { p , T , F , TF }
   {
     \if_meaning:w #1 \c_empty_tl
@@ -3704,14 +3709,7 @@
   }
 \prg_generate_conditional_variant:Nnn \tl_if_blank:n
   { e , V , o } { p , T , F , TF }
-\prg_new_conditional:Npnn \tl_if_eq:NN #1#2 { p , T , F , TF }
-  {
-    \if_meaning:w #1 #2
-      \prg_return_true:
-    \else:
-      \prg_return_false:
-    \fi:
-  }
+\prg_new_eq_conditional:NNn \tl_if_eq:NN \cs_if_eq:NN { p , T , F , TF }
 \prg_generate_conditional_variant:Nnn \tl_if_eq:NN
   { Nc , c , cc } { p , TF , T , F }
 \tl_new:N \l__tl_internal_a_tl
@@ -3801,39 +3799,6 @@
       \prg_return_false:
     \fi:
   }
-\cs_new:Npn \tl_case:Nn #1#2
-  {
-    \exp:w
-    \__tl_case:NnTF #1 {#2} { } { }
-  }
-\cs_new:Npn \tl_case:NnT #1#2#3
-  {
-    \exp:w
-    \__tl_case:NnTF #1 {#2} {#3} { }
-  }
-\cs_new:Npn \tl_case:NnF #1#2#3
-  {
-    \exp:w
-    \__tl_case:NnTF #1 {#2} { } {#3}
-  }
-\cs_new:Npn \tl_case:NnTF #1#2
-  {
-    \exp:w
-    \__tl_case:NnTF #1 {#2}
-  }
-\cs_new:Npn \__tl_case:NnTF #1#2#3#4
-  { \__tl_case:Nw #1 #2 #1 { } \s__tl_mark {#3} \s__tl_mark {#4} \s__tl_stop }
-\cs_new:Npn \__tl_case:Nw #1#2#3
-  {
-    \tl_if_eq:NNTF #1 #2
-      { \__tl_case_end:nw {#3} }
-      { \__tl_case:Nw #1 }
-  }
-\cs_generate_variant:Nn \tl_case:Nn   { c }
-\prg_generate_conditional_variant:Nnn \tl_case:Nn
-  { c } { T , F , TF }
-\cs_new:Npn \__tl_case_end:nw #1#2#3 \s__tl_mark #4#5 \s__tl_stop
-  { \exp_end: #1 #4 }
 \cs_new:Npn \tl_map_function:nN #1#2
   {
     \__tl_map_function:Nnnnnnnnn #2 #1
@@ -3909,7 +3874,7 @@
   { \prg_map_break:Nn \tl_map_break: { } }
 \cs_new:Npn \tl_map_break:n
   { \prg_map_break:Nn \tl_map_break: }
-\cs_generate_variant:Nn \tl_to_str:n { V , v }
+\cs_generate_variant:Nn \tl_to_str:n { o , V , v }
 \cs_new:Npn \tl_to_str:N #1 { \__kernel_tl_to_str:w \exp_after:wN {#1} }
 \cs_generate_variant:Nn \tl_to_str:N { c }
 \cs_new:Npn \tl_use:N #1
@@ -4402,6 +4367,7 @@
   }
 \cs_new_protected:Npn \tl_show:n #1
   { \iow_wrap:nnnN { >~ \tl_to_str:n {#1} . } { } { } \__tl_show:n }
+\cs_generate_variant:Nn \tl_show:n { x }
 \cs_new_protected:Npn \__tl_show:n #1
   {
     \tl_set:Nf \l__tl_internal_a_tl { \__tl_show:w #1 \s__tl_stop }
@@ -4417,6 +4383,7 @@
 \cs_new:Npn \__tl_show:w #1 > #2 . \s__tl_stop {#2}
 \cs_new_protected:Npn \tl_log:n #1
   { \iow_wrap:nnnN { > ~ \tl_to_str:n {#1} . } { } { } \iow_log:n }
+\cs_generate_variant:Nn \tl_log:n { x }
 \cs_new_protected:Npn \__kernel_chk_tl_type:NnnT #1#2#3#4
   {
     \__kernel_chk_defined:NT #1
@@ -7803,10 +7770,10 @@
     #2 \l__clist_internal_clist {#4}
     #1 #3 \l__clist_internal_clist #3
   }
-\cs_generate_variant:Nn \clist_put_left:Nn  {     NV , No , Nx }
-\cs_generate_variant:Nn \clist_put_left:Nn  { c , cV , co , cx }
-\cs_generate_variant:Nn \clist_gput_left:Nn {     NV , No , Nx }
-\cs_generate_variant:Nn \clist_gput_left:Nn { c , cV , co , cx }
+\cs_generate_variant:Nn \clist_put_left:Nn  {     NV , Nv , No , Nx }
+\cs_generate_variant:Nn \clist_put_left:Nn  { c , cV , cv , co , cx }
+\cs_generate_variant:Nn \clist_gput_left:Nn {     NV , Nv , No , Nx }
+\cs_generate_variant:Nn \clist_gput_left:Nn { c , cV , cv , co , cx }
 \cs_new_protected:Npn \clist_put_right:Nn
   { \__clist_put_right:NNNn \clist_concat:NNN \clist_set:Nn }
 \cs_new_protected:Npn \clist_gput_right:Nn
@@ -7816,10 +7783,10 @@
     #2 \l__clist_internal_clist {#4}
     #1 #3 #3 \l__clist_internal_clist
   }
-\cs_generate_variant:Nn \clist_put_right:Nn  {     NV , No , Nx }
-\cs_generate_variant:Nn \clist_put_right:Nn  { c , cV , co , cx }
-\cs_generate_variant:Nn \clist_gput_right:Nn {     NV , No , Nx }
-\cs_generate_variant:Nn \clist_gput_right:Nn { c , cV , co , cx }
+\cs_generate_variant:Nn \clist_put_right:Nn  {     NV , Nv , No , Nx }
+\cs_generate_variant:Nn \clist_put_right:Nn  { c , cV , cv , co , cx }
+\cs_generate_variant:Nn \clist_gput_right:Nn {     NV , Nv , No , Nx }
+\cs_generate_variant:Nn \clist_gput_right:Nn { c , cV , cv , co , cx }
 \cs_new_protected:Npn \clist_get:NN #1#2
   {
     \if_meaning:w #1 \c_empty_clist
@@ -8777,11 +8744,8 @@
     \if_catcode:w \exp_not:N #1 \c_catcode_active_tl
       \prg_return_true: \else: \prg_return_false: \fi:
   }
-\prg_new_conditional:Npnn \token_if_eq_meaning:NN #1#2 { p , T ,  F , TF }
-  {
-    \if_meaning:w  #1  #2
-      \prg_return_true: \else: \prg_return_false: \fi:
-  }
+\prg_new_eq_conditional:NNn \token_if_eq_meaning:NN \cs_if_eq:NN
+  { p , T , F , TF }
 \prg_new_conditional:Npnn \token_if_eq_catcode:NN #1#2 { p , T ,  F , TF }
   {
     \if_catcode:w \exp_not:N #1 \exp_not:N #2
@@ -9433,13 +9397,13 @@
       { #1 #2 { \exp_not:o {#2} \l__prop_internal_tl } }
   }
 \cs_generate_variant:Nn \prop_put:Nnn
-  {     NnV , Nno , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
+  {     NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
 \cs_generate_variant:Nn \prop_put:Nnn
-  { c , cnV , cno , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
+  { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
 \cs_generate_variant:Nn \prop_gput:Nnn
-  {     NnV , Nno , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
+  {     NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
 \cs_generate_variant:Nn \prop_gput:Nnn
-  { c , cnV , cno , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
+  { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
 \cs_new_protected:Npn \prop_put_if_new:Nnn
   { \__prop_put_if_new:NNnn \__kernel_tl_set:Nx }
 \cs_new_protected:Npn \prop_gput_if_new:Nnn
@@ -10405,15 +10369,6 @@
     should~be~a~clist~variable,~but~it~includes~empty~or~blank~items~
     without~braces.
   }
-\msg_new:nnnn { debug } { enable-debug }
-  { To~use~'#1'~set~the~'enable-debug'~option. }
-  {
-    The~function~'#1'~will~be~ignored~because~it~can~only~work~if~
-    some~internal~functions~in~expl3~have~been~appropriately~
-    defined.~This~only~happens~if~one~of~the~options~
-    'enable-debug',~'check-declarations'~or~'log-functions'~was~
-    given~as~an~option:~see~the~main~expl3~documentation.
-  }
 \msg_new:nnn { kernel } { bad-exp-end-f }
   { Misused~\exp_end_continue_f:w or~:nw }
 \msg_new:nnn { kernel } { bad-variable }
@@ -10601,7 +10556,7 @@
   {
     \sys_if_shell:TF
       { \exp_args:No \__ior_shell_open:nN { \tl_to_str:n {#2} } #1 }
-      { \msg_error:nn { ior } { pipe-failed } }
+      { \msg_error:nn { kernel } { pipe-failed } }
   }
 \cs_new_protected:Npn \__ior_shell_open:nN #1#2
   {
@@ -10612,7 +10567,7 @@
       }
       { \__kernel_ior_open:Nn #2 { |#1 } }
   }
-\msg_new:nnnn { ior } { pipe-failed }
+\msg_new:nnnn { kernel } { pipe-failed }
   { Cannot~run~piped~system~commands. }
   {
     LaTeX~tried~to~call~a~system~process~but~this~was~not~possible.\\
@@ -10840,6 +10795,21 @@
         #1 \__kernel_file_name_quote:n {#2} \scan_stop:
   }
 \cs_generate_variant:Nn \__iow_open_stream:Nn { NV }
+\cs_new_protected:Npn \iow_shell_open:Nn #1#2
+  {
+    \sys_if_shell:TF
+      { \exp_args:No \__iow_shell_open:nN { \tl_to_str:n {#2} } #1 }
+      { \msg_error:nn { kernel } { pipe-failed } }
+  }
+\cs_new_protected:Npn \__iow_shell_open:nN #1#2
+  {
+    \tl_if_in:nnTF {#1} { " }
+      {
+        \msg_error:nnx
+          { kernel } { quote-in-shell } {#1}
+      }
+      { \__kernel_iow_open:Nn #2 { |#1 } }
+  }
 \cs_new_protected:Npn \iow_close:N #1
   {
     \int_compare:nT { \c_log_iow < #1 < \c_term_iow }
@@ -11435,18 +11405,35 @@
     \tl_if_blank:nTF {#2}
       {
         \seq_map_tokens:Nn \l_file_search_path_seq
-          { \__file_full_name_aux:Nnnn \seq_map_break:n {#1} { / } }
+          { \__file_full_name_aux:Nnn \seq_map_break:n {#1} }
         \cs_if_exist:NT \input at path
           {
             \tl_map_tokens:Nn \input at path
-              { \__file_full_name_aux:Nnnn \tl_map_break:n {#1} { } }
+              { \__file_full_name_aux:Nnn \tl_map_break:n {#1} }
           }
         \__file_name_end:
       }
       { \__file_ext_check:nn {#1} {#2} }
   }
-\cs_new:Npn \__file_full_name_aux:Nnnn #1#2#3#4
-  { \exp_args:Ne \__file_full_name_aux:nN { \tl_to_str:n {#4} #3 #2 } #1 }
+\cs_new:Npn \__file_full_name_aux:Nnn #1#2#3
+  {
+    \exp_args:Ne \__file_full_name_aux:nN
+      {
+        \exp_args:Ne \__file_full_name_slash:n
+          { \tl_to_str:n {#3} } #2
+      }
+      #1
+  }
+\cs_new:Npn \__file_full_name_slash:n #1
+  {
+    \__file_full_name_slash:nw {#1} #1 \q_nil / \q_nil / \q_nil \q_stop
+  }
+\cs_new:Npn \__file_full_name_slash:nw #1#2 / \q_nil / #3 \q_stop
+  {
+    \quark_if_nil:nTF {#3}
+      { #1 / }
+      { #2 / }
+  }
 \cs_new:Npn \__file_full_name_aux:nN #1
   { \exp_args:Nne \__file_full_name_aux:nnN {#1} { \__file_full_name_aux:n {#1} } }
 \cs_new:Npn \__file_full_name_aux:nnN #1 #2 #3
@@ -11746,6 +11733,24 @@
     \str_gset:Nn \g_file_curr_name_str {#2}
     \str_gset:Nn \g_file_curr_ext_str  {#3}
   }
+\cs_new:Npn \file_input_raw:n #1
+  { \exp_args:Ne \__file_input_raw:nn { \file_full_name:n {#1} } {#1} }
+\cs_new:Npx \__file_input_raw:nn #1#2
+  {
+    \exp_not:N \tl_if_blank:nTF {#1}
+      {
+        \exp_not:N \exp_args:Nnne \exp_not:N \msg_expandable_error:nnn
+          { kernel } { file-not-found }
+          { \exp_not:N \__kernel_file_name_sanitize:n {#2} }
+      }
+      {
+        \exp_not:N \tex_input:D
+          \sys_if_engine_luatex:TF
+            { {#1} }
+            { \exp_not:N \__kernel_file_name_quote:n {#1} \scan_stop: }
+        }
+  }
+\exp_args_generate:n { nne }
 \cs_new:Npn \file_parse_full_name:n #1
   {
     \file_parse_full_name_apply:nN {#1}
@@ -12384,12 +12389,12 @@
         \token_if_eq_charcode:NNTF #1 -
           {
             \exp_after:wN \exp_after:wN \exp_after:wN \__dim_get_remainder:w
-              \int_eval:w ( 2 * #2 - #3 ) / ( 2 * #3 ) ;
+              \int_eval:n {  ( 2 * #2 - #3 ) / ( 2 * #3 ) } ;
               #2 ; #3 ; - ;
           }
           {
             \exp_after:wN \exp_after:wN \exp_after:wN \__dim_get_remainder:w
-              \int_eval:w ( 2 * #1#2 - #3 ) / ( 2 * #3 ) ;
+              \int_eval:n { ( 2 * #1#2 - #3 ) / ( 2 * #3 ) } ;
               #1#2 ; #3 ; ;
           }
       }
@@ -12397,13 +12402,13 @@
 \cs_new:Npn \__dim_get_remainder:w #1;#2;#3;
   {
     \exp_after:wN \exp_after:wN \exp_after:wN \__dim_convert_remainder:w
-      \int_eval:w #2 - #1 * #3 ;
+      \int_eval:n { #2 - #1 * #3 } ;
       #3 ; #1 ;
   }
 \cs_new:Npn \__dim_convert_remainder:w #1;#2;
   {
     \exp_after:wN \exp_after:wN \exp_after:wN \__dim_test_candidate:w
-      \int_eval:w #1 * 65536 / #2 ;
+      \int_eval:n { #1 * 65536 / #2 } ;
       #1 ; #2 ;
   }
 \cs_new:Npn \__dim_test_candidate:w #1;#2;#3;
@@ -12412,8 +12417,7 @@
       { \dim_to_decimal:n { #1sp } \__dim_eval:w #3sp \__dim_eval_end: }
       { \__dim_parse_decimal:w #1 ; }
       {
-        \exp_after:wN \__dim_parse_decimal:w
-          \int_eval:w #1 + 1 ;
+        \__dim_parse_decimal:w \int_eval:n { #1 + 1 } ;
       }
   }
 \cs_new:Npn \__dim_parse_decimal:w #1;#2;#3;
@@ -13081,7 +13085,8 @@
               \l_keys_path_str \s__keys_stop
                 \l_keys_key_tl \l_keys_key_str
             \tl_set_eq:NN \l_keys_key_tl \l_keys_key_str
-            \__keys_execute:nn \l_keys_path_str {#1}
+            \tl_set:Nn \l_keys_value_tl {#1}
+            \__keys_execute:no \l_keys_path_str \l_keys_value_tl
           }
       }
   }
@@ -13456,7 +13461,7 @@
           { \exp_not:o \l__keys_relative_tl }
       }
   }
-\cs_generate_variant:Nn \keys_set:nn { nV , nv , no }
+\cs_generate_variant:Nn \keys_set:nn { nV , nv , no , nx }
 \cs_new_protected:Npn \__keys_set:nn #1#2
   { \exp_args:No \__keys_set:nnn \l__keys_module_str {#1} {#2} }
 \cs_new_protected:Npn \__keys_set:nnn #1#2#3
@@ -20690,6 +20695,12 @@
       }
   }
 \cs_generate_variant:Nn \cctab_gset:Nn { c }
+\cs_new_protected:Npn \cctab_gsave_current:N #1
+  {
+    \__cctab_chk_if_valid:NT #1
+      { \__cctab_gset:n {#1} }
+  }
+\cs_generate_variant:Nn \cctab_gsave_current:N { c }
 \sys_if_engine_luatex:T
   {
     \__cctab_new:N \g__cctab_internal_cctab
@@ -20949,6 +20960,8 @@
         \char_set_catcode_active:n         { 126 }
       }
   }
+\cctab_new:N \g_tmpa_cctab
+\cctab_new:N \g_tmpb_cctab
 \msg_new:nnnn { cctab } { stack-full }
   { The~category~code~table~stack~is~exhausted. }
   {
@@ -35642,6 +35655,17 @@
 \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_titlecase:nn }
 \cs_gset:Npn \tl_mixed_case:nn #1#2
   { \text_titlecase:nn {#1} {#2} }
+\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:Nn }
+\cs_gset:Npn \tl_case:Nn { \token_case_meaning:Nn }
+\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:NnT }
+\cs_gset:Npn \tl_case:NnT { \token_case_meaning:NnT }
+\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:NnF }
+\cs_gset:Npn \tl_case:NnF { \token_case_meaning:NnF }
+\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:NnTF }
+\cs_gset:Npn \tl_case:NnTF { \token_case_meaning:NnTF }
+\cs_generate_variant:Nn \tl_case:Nn   { c }
+\prg_generate_conditional_variant:Nnn \tl_case:Nn
+  { c } { T , F , TF }
 \__kernel_patch_deprecation:nnNNpn { 2022-10-09 } { [ \codepoint_generate:n ] }
 \cs_gset:Npn \char_to_utfviii_bytes:n { \__kernel_codepoint_to_bytes:n }
 \__kernel_patch_deprecation:nnNNpn { 2022-10-09 } { \codepoint_to_nfd:n }

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2023-06-06 20:06:24 UTC (rev 67294)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2023-05-22}%
+\def\ExplFileDate{2023-06-05}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx	2023-06-06 20:06:24 UTC (rev 67294)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2023-05-22}%
+\def\ExplFileDate{2023-06-05}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11
@@ -90,19 +90,28 @@
     backend .choices:nn =
       { dvipdfmx , dvips , dvisvgm , luatex , pdftex , pdfmode , xdvipdfmx , xetex }
       { \sys_load_backend:n {#1} } ,
-    check-declarations .code:n =
+    check-declarations .choice: ,
+    check-declarations / true .code:n =
+      { \debug_on:n { check-declarations } } ,
+    check-declarations / false .code:n =
       {
-        \sys_load_debug:
-        \debug_on:n { check-declarations }
+        \__kernel_if_debug:TF
+          { \debug_off:n { check-declarations } }
+          { }
       } ,
+    check-declarations .default:n = true ,
     driver .meta:n = { backend = #1 } ,
-    enable-debug .code:n =
-      \sys_load_debug: ,
-    log-functions .code:n =
+    enable-debug .code:n = {} , % A stub
+    log-functions .choice: ,
+    log-functions / true .code:n =
+      { \debug_on:n { log-functions } } ,
+    log-functions / false .code:n =
       {
-        \sys_load_debug:
-        \debug_on:n { log-functions }
+        \__kernel_if_debug:TF
+          { \debug_off:n { log-functions } }
+          { }
       } ,
+    log-functions .default:n = true ,
     suppress-backend-headers .bool_gset_inverse:N
       = \g__kernel_backend_header_bool ,
     suppress-backend-headers .initial:n = false ,

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2023-06-06 20:06:24 UTC (rev 67294)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2023-05-22}%
+\def\ExplFileDate{2023-06-05}%
 \let\ExplLoaderFileDate\ExplFileDate
 \ProvidesPackage{expl3}
   [%
@@ -107,19 +107,28 @@
     backend .choices:nn =
       { dvipdfmx , dvips , dvisvgm , luatex , pdftex , pdfmode , xdvipdfmx , xetex }
       { \sys_load_backend:n {#1} } ,
-    check-declarations .code:n =
+    check-declarations .choice: ,
+    check-declarations / true .code:n =
+      { \debug_on:n { check-declarations } } ,
+    check-declarations / false .code:n =
       {
-        \sys_load_debug:
-        \debug_on:n { check-declarations }
+        \__kernel_if_debug:TF
+          { \debug_off:n { check-declarations } }
+          { }
       } ,
+    check-declarations .default:n = true ,
     driver .meta:n = { backend = #1 } ,
-    enable-debug .code:n =
-      \sys_load_debug: ,
-    log-functions .code:n =
+    enable-debug .code:n = {} , % A stub
+    log-functions .choice: ,
+    log-functions / true .code:n =
+      { \debug_on:n { log-functions } } ,
+    log-functions / false .code:n =
       {
-        \sys_load_debug:
-        \debug_on:n { log-functions }
+        \__kernel_if_debug:TF
+          { \debug_off:n { log-functions } }
+          { }
       } ,
+    log-functions .default:n = true ,
     suppress-backend-headers .bool_gset_inverse:N
       = \g__kernel_backend_header_bool ,
     suppress-backend-headers .initial:n = false ,

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls	2023-06-06 20:05:59 UTC (rev 67293)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls	2023-06-06 20:06:24 UTC (rev 67294)
@@ -1607,7 +1607,7 @@
     \seq_set_map:NNn \l__codedoc_tmpa_seq
       \g__codedoc_nested_names_seq
       { \__codedoc_macro_end_wrap_item:n {##1} }
-    End~ definition~ for~
+    End~ of~ definition~ for~
     \int_compare:nTF { \seq_count:N \l__codedoc_tmpa_seq <= 3 }
       {
         \seq_use:Nnnn \l__codedoc_tmpa_seq



More information about the tex-live-commits mailing list.