texlive[71140] Master/texmf-dist: l3kernel (30apr24)

commits+karl at tug.org commits+karl at tug.org
Tue Apr 30 22:03:09 CEST 2024


Revision: 71140
          https://tug.org/svn/texlive?view=revision&revision=71140
Author:   karl
Date:     2024-04-30 22:03:09 +0200 (Tue, 30 Apr 2024)
Log Message:
-----------
l3kernel (30apr24)

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/source/latex/l3kernel/expl3.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins
    trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3bitset.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/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-functions.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-symbolic.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-types.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-build.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.lua
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def
    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	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2024-04-30 20:03:09 UTC (rev 71140)
@@ -7,6 +7,30 @@
 
 ## [Unreleased]
 
+## [2024-04-11]
+
+### Added
+- `\prop_(g)put_if_not_in:Nnn` (renamed from `\prop_(g)put_if_new:Nnn`)
+- `\intarray_if_exist:N(TF)`
+- `\fparray_if_exist:N(TF)`
+- Support for 'indexed' PDF objects
+
+### Changed
+- Expand object names in `\pdf_object_...` functions (issue \#1521)
+- Adapt `l3doc` for `ltcmd` change to handling of newlines
+  (see latex3/latex2e\#1304)
+- Return active spaces from `\sys_get_query:n(nn)N` (issue \#1529)
+
+### Fixed
+- False `debug` error raised by `\cctab_const:Nn` (issue \#1508)
+- Undefined `\__kernel_iwo_open:Nn` used in `\iow_shell_open:Nn`
+  (issue \#1515)
+- Naming of register functions in LuaMetaTeX 2.11+ (issue \#1518)
+- Catcode applied to letters by `\sys_get_query:n(nn)N`
+
+### Deprecated
+- `\prop_(g)put_if_new:Nnn` (renamed to `\prop_(g)put_if_not_in:Nnn`)
+
 ## [2024-03-14]
 
 ### Added
@@ -20,6 +44,7 @@
 ### Fixed
 - Typeset `TF` of internal conditionals in current color (issue \#730)
 - Some functions and variables were defined locally
+
 ## [2024-02-20]
 
 ### Changed
@@ -1700,7 +1725,8 @@
 - Step functions have been added for dim variables,
   e.g. `\dim_step_inline:nnnn`
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2024-03-14...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2024-04-11...HEAD
+[2024-04-11]: https://github.com/latex3/latex3/compare/2024-03-14...2024-04-11
 [2024-03-14]: https://github.com/latex3/latex3/compare/2024-02-20...2024-03-14
 [2024-02-20]: https://github.com/latex3/latex3/compare/2024-02-18...2024-02-20
 [2024-02-18]: https://github.com/latex3/latex3/compare/2024-02-13...2024-02-18

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2024-04-30 20:03:09 UTC (rev 71140)
@@ -1,7 +1,7 @@
 LaTeX3 Programming Conventions
 ==============================
 
-Release 2024-03-14
+Release 2024-04-11
 
 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	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex	2024-04-30 20:03:09 UTC (rev 71140)
@@ -58,7 +58,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2024-03-14}
+\date{Released 2024-04-11}
 
 \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	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt	2024-04-30 20:03:09 UTC (rev 71140)
@@ -64,6 +64,18 @@
 \pdf_object_new:nn                       2022-08-23
 \pdf_object_write:nn                     2022-08-23
 \pdf_object_write:nx                     2022-08-23
+\prop_gput_if_new:cnn                    2024-03-30
+\prop_gput_if_new:cnV                    2024-03-30
+\prop_gput_if_new:cVn                    2024-03-30
+\prop_gput_if_new:Nnn                    2024-03-30
+\prop_gput_if_new:NnV                    2024-03-30
+\prop_gput_if_new:NVn                    2024-03-30
+\prop_put_if_new:cnn                     2024-03-30
+\prop_put_if_new:cnV                     2024-03-30
+\prop_put_if_new:cVn                     2024-03-30
+\prop_put_if_new:Nnn                     2024-03-30
+\prop_put_if_new:NnV                     2024-03-30
+\prop_put_if_new:NVn                     2024-03-30
 \str_declare_eight_bit_encoding:nnn      2020-08-20
 \str_fold_case:n                         2020-01-03
 \str_fold_case:V                         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	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex	2024-04-30 20:03:09 UTC (rev 71140)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2024-03-14}
+\date{Released 2024-04-11}
 
 \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	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex	2024-04-30 20:03:09 UTC (rev 71140)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2024-03-14}
+\date{Released 2024-04-11}
 
 \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	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex	2024-04-30 20:03:09 UTC (rev 71140)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2024-03-14}
+\date{Released 2024-04-11}
 
 \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	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex	2024-04-30 20:03:09 UTC (rev 71140)
@@ -57,7 +57,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2024-03-14}
+\date{Released 2024-04-11}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -24,7 +24,7 @@
 %
 %<*driver|generic|package|2ekernel>
 %</driver|generic|package|2ekernel>
-\def\ExplFileDate{2024-03-14}%
+\def\ExplFileDate{2024-04-11}%
 %<*driver>
 \documentclass[full]{l3doc}
 \usepackage{graphicx}
@@ -51,7 +51,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins	2024-04-30 20:03:09 UTC (rev 71140)
@@ -105,7 +105,7 @@
         \from{l3regex.dtx}      {package}
         \from{l3box.dtx}        {package}
         \from{l3color.dtx}      {package}
-        \from{l3pdf.dtx}        {package}
+        \from{l3pdf.dtx}        {package,tex}
         \from{l3coffins.dtx}    {package}
         \from{l3luatex.dtx}     {package,tex}
         \from{l3unicode.dtx}    {package}
@@ -176,6 +176,7 @@
   \from{l3sys.dtx}{package,lua}
   \from{l3token.dtx}{package,lua}
   \from{l3intarray.dtx}{package,lua}
+  \from{l3pdf.dtx}{package,lua}
 }}
 
 \endbatchfile

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %
@@ -1340,8 +1340,9 @@
 %       only locally/globally assigned;
 %     \item \texttt{check-expressions} that checks integer, dimension,
 %       skip, and muskip expressions are not terminated prematurely;
-%     \item \texttt{deprecation} that makes soon-to-be-deprecated commands produce errors;
-%     \item \texttt{log-functions} that logs function definitions;
+%     \item \texttt{deprecation} that makes deprecated commands produce errors;
+%     \item \texttt{log-functions} that logs function definitions and
+%       variable declarations;
 %     \item \texttt{all} that does all of the above.
 %   \end{itemize}
 %   Providing these as switches rather than options allows testing code
@@ -1355,10 +1356,10 @@
 %     \cs{debug_suspend:} \ldots{} \cs{debug_resume:}
 %   \end{syntax}
 %   Suppress (locally) errors and logging from \texttt{debug} commands,
-%   except for the \texttt{deprecation} errors or warnings.  These pairs
+%   except for the \texttt{deprecation} errors.  These pairs
 %   of commands can be nested.  This can be used around pieces of code
 %   that are known to fail checks, if such failures should be ignored.
-%   See for instance \pkg{l3coffins}.
+%   See for instance \pkg{l3cctab} and \pkg{l3coffins}.
 % \end{function}
 %
 % \end{documentation}
@@ -1871,9 +1872,8 @@
 %
 % \begin{macro}{\__kernel_deprecation_code:nn}
 % \begin{variable}{\g_@@_deprecation_on_tl, \g_@@_deprecation_off_tl}
-%   Some commands were more recently deprecated and not yet removed;
-%   only make these into errors if the user requests it.  This relies on
-%   two token lists, filled up in \pkg{l3deprecation}.
+%   Make deprecated commands throw errors if the user requests it.
+%   This relies on two token lists, filled up in \pkg{l3deprecation}.
 %    \begin{macrocode}
 \cs_gset_nopar:Npn \g_@@_deprecation_on_tl { }
 \cs_gset_nopar:Npn \g_@@_deprecation_off_tl { }

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %
@@ -286,15 +286,23 @@
 %    \end{macrocode}
 %   Now the case for other engines. Here, each table is an integer
 %   array.  Following the \LuaTeX{} pattern, a new table starts with
-%   \IniTeX{} codes.  The index base is out-by-one, so we have an
+%   \IniTeX{} codes.  The \cs{debug_suspend:} and \cs{debug_resume:}
+%   functions prevent errors and logging from \texttt{debug} commands
+%   which are either duplicate or false when \cs{@@_new:N} is used
+%   by \cs{cctab_new:N} or \cs{cctab_const:Nn}.
+%   The index base is out-by-one, so we have an
 %   internal function to handle that.  The \IniTeX{} \tn{endlinechar} is
 %   $13$.
 %    \begin{macrocode}
   {
     \cs_new_protected:Npn \@@_new:N #1
-      { \intarray_new:Nn #1 { 257 } }
+      {
+        \debug_suspend:
+        \intarray_new:Nn #1 { 257 }
+        \debug_resume:
+      }
     \cs_new_protected:Npn \@@_gstore:Nnn #1#2#3
-      { \intarray_gset:Nnn #1 { \int_eval:n { #2 + 1 } } {#3} }
+      { \intarray_gset:Nnn #1 { #2 + 1 } {#3} }
     \cs_new_protected:Npn \cctab_new:N #1
       {
         \__kernel_chk_if_free_cs:N #1
@@ -796,13 +804,22 @@
 % \subsection{Constant category code tables}
 %
 % \begin{macro}{\cctab_const:Nn,\cctab_const:cn}
-%  Creates a new \meta{cctab~var} then sets it with the current and
-%  user-supplied codes.
+%  Creates a new \meta{cctab~var} then sets it with the \IniTeX{} and
+%  user-supplied codes. To avoid false \texttt{debug} errors, we write
+%  out implementation of \cs{cctab_new:N} and \cs{cctab_gset:Nn}
+%  instead of directly using them here. The initialization part in
+%  \cs{cctab_new:N} in non-\LuaTeX{} is omitted as it's covered by
+%  the \IniTeX{} settings.
 %    \begin{macrocode}
 \cs_new_protected:Npn \cctab_const:Nn #1#2
   {
-    \cctab_new:N #1
-    \cctab_gset:Nn #1 {#2}
+    \__kernel_chk_if_free_cs:N #1
+    \@@_new:N #1
+    \group_begin:
+      \cctab_select:N \c_initex_cctab
+      #2 \scan_stop:
+      \@@_gset:n {#1}
+    \group_end:
   }
 \cs_generate_variant:Nn \cctab_const:Nn { c }
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %
@@ -69,7 +69,7 @@
 %
 % Standard file identification.
 %    \begin{macrocode}
-\ProvidesExplFile{l3debug.def}{2024-03-14}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2024-04-11}{}{L3 Debugging support}
 %    \end{macrocode}
 %
 % \begin{variable}{\s_@@_stop}
@@ -389,10 +389,9 @@
 % \end{macro}
 %
 % \begin{macro}{\@@_deprecation_on:, \@@_deprecation_off:}
-%   Some commands were more recently deprecated and not yet removed;
-%   only make these into errors if the user requests it.  This relies on
-%   two token lists, filled up in \pkg{l3deprecation} by calls to
-%   \cs{__kernel_deprecation_code:nn}.
+%   Make deprecated commands throw errors if the user requests it.
+%   This relies on two token lists, filled up in \pkg{l3deprecation} by
+%   calls to \cs{__kernel_deprecation_code:nn}.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_deprecation_on:
   { \g_@@_deprecation_on_tl }
@@ -781,7 +780,7 @@
       \prop_pop:NnNF
       \prop_pop:NnNTF
       \prop_put:Nnn
-      \prop_put_if_new:Nnn
+      \prop_put_if_not_in:Nnn
       \prop_put_from_keyval:Nn
       \prop_remove:Nn
       \prop_set_eq:NN
@@ -862,7 +861,7 @@
       \prop_gpop:NnNF
       \prop_gpop:NnNTF
       \prop_gput:Nnn
-      \prop_gput_if_new:Nnn
+      \prop_gput_if_not_in:Nnn
       \prop_gput_from_keyval:Nn
       \prop_gremove:Nn
       \prop_gset_eq:NN

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %
@@ -51,8 +51,10 @@
 %
 % \section{\pkg{l3deprecation} documentation}
 %
-% A few commands have had to be deprecated over the years.  This module
-% defines deprecated and deleted commands to produce an error.
+% A few commands have had to be deprecated over the years.
+% All commands deprecated before release 2022-01-12 were already
+% removed; commands deprecated since then will no longer be removed.
+% Instead, this module defines them to produce errors.
 %
 % \end{documentation}
 %
@@ -74,31 +76,12 @@
 %   \cs{__kernel_patch_deprecation:nnNNpn} \Arg{date} \Arg{replacement}
 %   \meta{definition} \meta{function} \meta{parameters} \Arg{code}
 % \end{quote}
-% defines the \meta{function} to produce a warning and run its
-% \meta{code}, or to produce an error and not run any \meta{code},
-% depending on the \pkg{expl3} date.
-% \begin{itemize}
-% \item If the \pkg{expl3} date is less than the \meta{date} (plus
-%   $6$~months in case \texttt{undo-recent-deprecations} is used) then
-%   we define the \meta{function} to produce a warning and run its code.
-%   The warning is actually suppressed in two cases:
-%   \begin{itemize}
-%   \item if neither \texttt{undo-recent-deprecations} nor
-%     \texttt{enable-debug} are in effect we may be in an end-user's
-%     document so it is suppressed;
-%   \item if the command is expandable then we cannot produce a warning.
-%   \end{itemize}
-% \item Otherwise, we define the \meta{function} to produce an error.
-% \end{itemize}
-% In both cases we additionally make \cs{debug_on:n} |{deprecation}|
-% turn the \meta{function} into an \tn{outer} error, and
-% \cs{debug_off:n} |{deprecation}| restore whatever the behaviour was
-% without \cs{debug_on:n} |{deprecation}|.
+% defines the \meta{function} to produce an error and run its
+% \meta{code}.
 %
-% In later sections we use the \pkg{l3doc} key \texttt{deprecated} with
-% a date equal to that \meta{date} plus $6$~months, so that \pkg{l3doc}
-% will complain if we forget to remove the stale \meta{parameters} and
-% \Arg{code}.
+% We make \cs{debug_on:n} |{deprecation}| turn the \meta{function} into
+% an \tn{outer} error, and \cs{debug_off:n} |{deprecation}| restore
+% whatever the behaviour was without \cs{debug_on:n} |{deprecation}|.
 %
 % In the explanations below, \meta{definition} \meta{function}
 % \meta{parameters} \Arg{code} or assignments that only differ in the
@@ -183,8 +166,7 @@
 %
 % \begin{macro}{\__kernel_deprecation_error:Nnn}
 %   The \tn{outer} definition here ensures the command cannot appear
-%   in an argument.  Use this auxiliary on all commands that have been
-%   removed since 2015.
+%   in an argument.
 %    \begin{macrocode}
 \cs_new_protected:Npn \__kernel_deprecation_error:Nnn #1#2#3
   {
@@ -679,7 +661,28 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \subsection{Deprecated \pkg{l3prop} functions}
+%
+% \begin{macro}[deprecated]
+%   {
+%     \prop_put_if_new:Nnn, \prop_put_if_new:NVn, \prop_put_if_new:NnV,
+%     \prop_put_if_new:cnn, \prop_put_if_new:cVn, \prop_put_if_new:cnV,
+%     \prop_gput_if_new:Nnn, \prop_gput_if_new:NVn, \prop_gput_if_new:NnV,
+%     \prop_gput_if_new:cnn, \prop_gput_if_new:cVn, \prop_gput_if_new:cnV
+%   }
 %    \begin{macrocode}
+%\__kernel_patch_deprecation:nnNNpn { 2024-03-30 } { \prop_put_if_not_in:Nnn }
+\cs_new_protected:Npn \prop_put_if_new:Nnn { \prop_put_if_not_in:Nnn }
+%\__kernel_patch_deprecation:nnNNpn { 2024-03-30 } { \prop_gput_if_not_in:Nnn }
+\cs_new_protected:Npn \prop_gput_if_new:Nnn { \prop_gput_if_not_in:Nnn }
+\cs_generate_variant:Nn \prop_put_if_new:Nnn
+  { NnV , NV , c , cnV , cV }
+\cs_generate_variant:Nn \prop_gput_if_new:Nnn
+  { NnV , NV , c , cnV , cV }
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
 %</package>
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -71,7 +71,7 @@
 % This isn't included in the typeset documentation because it's a bit
 % ugly:
 %<*class>
-\ProvidesExplClass{l3doc}{2024-03-14}{}
+\ProvidesExplClass{l3doc}{2024-04-11}{}
   {L3 Experimental documentation class}
 %</class>
 % \fi
@@ -84,7 +84,7 @@
 %    require you to do updates, if the class changes.}}
 %
 % \author{\Team}
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 % \maketitle
 % \tableofcontents
 %
@@ -2181,6 +2181,8 @@
       {
         \tl_remove_all:Ne \l_@@_tmpa_tl
           { \iow_char:N \^^M \c_percent_str }
+        \tl_remove_all:Ne \l_@@_tmpa_tl
+          { \token_to_str:N \obeyedline \c_space_tl \c_percent_str }
         \tl_remove_all:Ne \l_@@_tmpa_tl { \tl_to_str:n { ^ ^ A } }
         \tl_remove_all:Ne \l_@@_tmpa_tl { \iow_char:N \^^I }
         \tl_remove_all:Ne \l_@@_tmpa_tl { \iow_char:N \^^M }

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -63,7 +63,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %
@@ -107,7 +107,7 @@
 %   control sequence for file 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{file name} until a \cs{ior_close:N} instruction
+%   allocated to \meta{file name} until an \cs{ior_close:N} instruction
 %   is given or the \TeX{} run ends.
 %   If the file is not found, an error is raised.
 % \end{function}
@@ -167,7 +167,7 @@
 %   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
+%   allocated to \meta{shell command} until an \cs{iow_close:N} instruction
 %   is given or the \TeX{} run ends.
 %   If piped system calls are disabled an error is raised.
 %
@@ -1679,6 +1679,7 @@
 % \end{variable}
 %
 % \begin{macro}{\iow_open:Nn, \iow_open:NV, \iow_open:cn, \iow_open:cV}
+% \begin{macro}{\__kernel_iow_open:Nn, \__kernel_iow_open:No}
 % \begin{macro}{\@@_open_stream:Nn, \@@_open_stream:NV}
 %   The same idea as for reading, but without the path and without the need
 %   to allow for a conditional version.
@@ -1687,16 +1688,21 @@
   {
     \__kernel_tl_set:Nx \l_@@_file_name_tl
       { \__kernel_file_name_sanitize:n {#2} }
+    \__kernel_iow_open:No #1 \l_@@_file_name_tl
+  }
+\cs_generate_variant:Nn \iow_open:Nn { NV , c , cV }
+\cs_new_protected:Npn \__kernel_iow_open:Nn #1#2
+  {
     \iow_close:N #1
     \seq_gpop:NNTF \g_@@_streams_seq \l_@@_stream_tl
-      { \@@_open_stream:NV #1 \l_@@_file_name_tl }
+      { \@@_open_stream:Nn #1 {#2} }
       {
         \@@_new:N #1
         \__kernel_tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} }
-        \@@_open_stream:NV #1 \l_@@_file_name_tl
+        \@@_open_stream:Nn #1 {#2}
       }
   }
-\cs_generate_variant:Nn \iow_open:Nn { NV , c , cV }
+\cs_generate_variant:Nn \__kernel_iow_open:Nn { No }
 \cs_new_protected:Npn \@@_open_stream:Nn #1#2
   {
     \tex_global:D \tex_chardef:D #1 = \l_@@_stream_tl \scan_stop:
@@ -1708,6 +1714,7 @@
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
+% \end{macro}
 %
 % \begin{macro}{\iow_shell_open:Nn}
 % \begin{macro}{\@@_shell_open:nN, \@@_shell_open:oN}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 % \maketitle
 %
 % \begin{documentation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 % \maketitle
 %
 % \begin{documentation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -44,14 +44,12 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %
 % \begin{documentation}
 %
-% \section{\pkg{l3fparray} documentation}
-%
 % For applications requiring heavy use of floating points, this module
 % provides arrays which can be accessed in constant time (contrast
 % \pkg{l3seq}, where access time is linear).  The interface is very
@@ -58,6 +56,8 @@
 % close to that of \pkg{l3intarray}.  The size of the array is fixed and
 % must be given at point of initialisation
 %
+% \section{Creating and initialising floating point array variables}
+%
 % \begin{function}[added = 2018-05-05]{\fparray_new:Nn, \fparray_new:cn}
 %   \begin{syntax}
 %     \cs{fparray_new:Nn} \meta{fparray~var} \Arg{size}
@@ -68,14 +68,16 @@
 %   assignments are always global.
 % \end{function}
 %
-% \begin{function}[EXP, added = 2018-05-05]{\fparray_count:N, \fparray_count:c}
+% \begin{function}[added = 2018-05-05]{\fparray_gzero:N, \fparray_gzero:c}
 %   \begin{syntax}
-%     \cs{fparray_count:N} \meta{fparray~var}
+%     \cs{fparray_gzero:N} \meta{fparray~var}
 %   \end{syntax}
-%   Expands to the number of entries in the \meta{floating point array
-%   variable}.  This is performed in constant time.
+%   Sets all entries of the \meta{floating point array variable} to
+%   $+0$.  Assignments are always global.
 % \end{function}
 %
+% \section{Adding data to floating point arrays}
+%
 % \begin{function}[added = 2018-05-05]{\fparray_gset:Nnn, \fparray_gset:cnn}
 %   \begin{syntax}
 %     \cs{fparray_gset:Nnn} \meta{fparray~var} \Arg{position} \Arg{value}
@@ -87,17 +89,21 @@
 %   Assignments are always global.
 % \end{function}
 %
-% \begin{function}[added = 2018-05-05]{\fparray_gzero:N, \fparray_gzero:c}
+% \section{Couting entries in floating point arrays}
+%
+% \begin{function}[EXP, added = 2018-05-05]{\fparray_count:N, \fparray_count:c}
 %   \begin{syntax}
-%     \cs{fparray_gzero:N} \meta{fparray~var}
+%     \cs{fparray_count:N} \meta{fparray~var}
 %   \end{syntax}
-%   Sets all entries of the \meta{floating point array variable} to
-%   $+0$.  Assignments are always global.
+%   Expands to the number of entries in the \meta{floating point array
+%   variable}.  This is performed in constant time.
 % \end{function}
 %
+% \section{Using a single entry}
+%
 % \begin{function}[EXP, added = 2018-05-05]
 %   {
-%     \fparray_item:Nn, \fparray_item:cn
+%     \fparray_item:Nn, \fparray_item:cn,
 %     \fparray_item_to_tl:Nn, \fparray_item_to_tl:cn
 %   }
 %   \begin{syntax}
@@ -106,10 +112,23 @@
 %   Applies \cs{fp_use:N} or \cs{fp_to_tl:N} (respectively) to the
 %   floating point entry stored at the (integer expression)
 %   \meta{position} in the \meta{floating point array variable}.  If the
-%   \meta{position} is not between $1$ and the \cs{fparray_count:N}, an
-%   error occurs.
+%   \meta{position} is not between $1$ and the
+%   \cs{fparray_count:N} \meta{fparray~var}, an error occurs.
 % \end{function}
 %
+% \section{Floating point array conditional}
+%
+% \begin{function}[pTF, added = 2024-03-31]
+%   {\fparray_if_exist:N, \fparray_if_exist:c}
+%   \begin{syntax}
+%     \cs{fparray_if_exist_p:N} \meta{fparray~var}
+%     \cs{fparray_if_exist:NTF} \meta{fparray~var} \Arg{true code} \Arg{false code}
+%   \end{syntax}
+%   Tests whether the \meta{fparray~var} is currently defined. This
+%   does not check that the \meta{fparray~var} really is a floating
+%   point array variable.
+% \end{function}
+%
 % \end{documentation}
 %
 % \begin{implementation}
@@ -389,7 +408,17 @@
 % \end{macro}
 % \end{macro}
 %
+% \begin{macro}[pTF]{\fparray_if_exist:N, \fparray_if_exist:c}
+%   Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
 %    \begin{macrocode}
+\prg_new_eq_conditional:NNn \fparray_if_exist:N \cs_if_exist:N
+  { TF , T , F , p }
+\prg_new_eq_conditional:NNn \fparray_if_exist:c \cs_if_exist:c
+  { TF , T , F , p }
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
 %</package>
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -44,14 +44,12 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %
 % \begin{documentation}
 %
-% \section{\pkg{l3intarray} documentation}
-%
 % For applications requiring heavy use of integers, this module provides
 % arrays which can be accessed in constant time (contrast \pkg{l3seq},
 % where access time is linear). These arrays have several important
@@ -66,6 +64,8 @@
 % The use of \texttt{intarray} data is therefore recommended for cases where
 % the need for fast access is of paramount importance.
 %
+% \section{Creating and initialising integer array variables}
+%
 % \begin{function}[added = 2018-03-29]{\intarray_new:Nn, \intarray_new:cn}
 %   \begin{syntax}
 %     \cs{intarray_new:Nn} \meta{intarray~var} \Arg{size}
@@ -76,14 +76,27 @@
 %   always global.
 % \end{function}
 %
-% \begin{function}[EXP, added = 2018-03-29]{\intarray_count:N, \intarray_count:c}
+% \begin{function}[added = 2018-05-04]
+%   {\intarray_const_from_clist:Nn, \intarray_const_from_clist:cn}
 %   \begin{syntax}
-%     \cs{intarray_count:N} \meta{intarray~var}
+%     \cs{intarray_const_from_clist:Nn} \meta{intarray~var} \meta{int expr clist}
 %   \end{syntax}
-%   Expands to the number of entries in the \meta{integer array variable}.
-%   Contrarily to \cs{seq_count:N} this is performed in constant time.
+%   Creates a new constant \meta{integer array variable} or raises an
+%   error if the name is already taken.  The \meta{integer array
+%   variable} is set (globally) to contain as its items the results of
+%   evaluating each \meta{integer expression} in the \meta{comma list}.
 % \end{function}
 %
+% \begin{function}[added = 2018-05-04]{\intarray_gzero:N, \intarray_gzero:c}
+%   \begin{syntax}
+%     \cs{intarray_gzero:N} \meta{intarray~var}
+%   \end{syntax}
+%   Sets all entries of the \meta{integer array variable} to zero.
+%   Assignments are always global.
+% \end{function}
+%
+% \section{Adding data to integer arrays}
+%
 % \begin{function}[added = 2018-03-29]{\intarray_gset:Nnn, \intarray_gset:cnn}
 %   \begin{syntax}
 %     \cs{intarray_gset:Nnn} \meta{intarray~var} \Arg{position} \Arg{value}
@@ -96,25 +109,18 @@
 %   global.
 % \end{function}
 %
-% \begin{function}[added = 2018-05-04]
-%   {\intarray_const_from_clist:Nn, \intarray_const_from_clist:cn}
-%   \begin{syntax}
-%     \cs{intarray_const_from_clist:Nn} \meta{intarray~var} \meta{int expr clist}
-%   \end{syntax}
-%   Creates a new constant \meta{integer array variable} or raises an
-%   error if the name is already taken.  The \meta{integer array
-%   variable} is set (globally) to contain as its items the results of
-%   evaluating each \meta{integer expression} in the \meta{comma list}.
-% \end{function}
+% \section{Couting entries in integer arrays}
 %
-% \begin{function}[added = 2018-05-04]{\intarray_gzero:N, \intarray_gzero:c}
+% \begin{function}[EXP, added = 2018-03-29]{\intarray_count:N, \intarray_count:c}
 %   \begin{syntax}
-%     \cs{intarray_gzero:N} \meta{intarray~var}
+%     \cs{intarray_count:N} \meta{intarray~var}
 %   \end{syntax}
-%   Sets all entries of the \meta{integer array variable} to zero.
-%   Assignments are always global.
+%   Expands to the number of entries in the \meta{integer array variable}.
+%   Contrarily to \cs{seq_count:N} this is performed in constant time.
 % \end{function}
 %
+% \section{Using a single entry}
+%
 % \begin{function}[EXP, added = 2018-03-29]{\intarray_item:Nn, \intarray_item:cn}
 %   \begin{syntax}
 %     \cs{intarray_item:Nn} \meta{intarray~var} \Arg{position}
@@ -134,6 +140,21 @@
 %   \meta{integer array} is empty, produce an error.
 % \end{function}
 %
+% \section{Integer array conditional}
+%
+% \begin{function}[pTF, added = 2024-03-31]
+%   {\intarray_if_exist:N, \intarray_if_exist:c}
+%   \begin{syntax}
+%     \cs{intarray_if_exist_p:N} \meta{intarray~var}
+%     \cs{intarray_if_exist:NTF} \meta{intarray~var} \Arg{true code} \Arg{false code}
+%   \end{syntax}
+%   Tests whether the \meta{intarray~var} is currently defined. This
+%   does not check that the \meta{intarray~var} really is an integer
+%   array variable.
+% \end{function}
+%
+% \section{Viewing integer arrays}
+%
 % \begin{function}[added = 2018-05-04]
 %   {\intarray_show:N, \intarray_show:c, \intarray_log:N, \intarray_log:c}
 %   \begin{syntax}
@@ -144,7 +165,7 @@
 %   terminal or writes them in the log file.
 % \end{function}
 %
-% \subsection{Implementation notes}
+% \section{Implementation notes}
 %
 % It is a wrapper around the \tn{fontdimen} primitive, used to store
 % arrays of integers (with a restricted range: absolute value at most
@@ -912,6 +933,16 @@
 %
 % \subsection{Common parts}
 %
+% \begin{macro}[pTF]{\intarray_if_exist:N, \intarray_if_exist:c}
+%   Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
+%    \begin{macrocode}
+\prg_new_eq_conditional:NNn \intarray_if_exist:N \cs_if_exist:N
+  { TF , T , F , p }
+\prg_new_eq_conditional:NNn \intarray_if_exist:c \cs_if_exist:c
+  { TF , T , F , p }
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\intarray_show:N, \intarray_show:c, \intarray_log:N, \intarray_log:c}
 %   Convert the list to a comma list (with spaces after each comma)
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %
@@ -333,9 +333,23 @@
 %   higher-level
 %   functions which have already fully expanded the \meta{file name} and which
 %   need to perform multiple open or close operations. See for example the
-%   implementation of \cs{file_get_full_name:nN},
+%   implementation of \cs{ior_shell_open:Nn}.
 % \end{function}
 %
+% \begin{function}{\__kernel_iow_open:Nn, \__kernel_iow_open:No}
+%   \begin{syntax}
+%     \cs{__kernel_iow_open:Nn} \meta{stream} \Arg{file name}
+%   \end{syntax}
+%   This function has identical syntax to the public version. However,
+%   is does not take precautions against active characters in the
+%   \meta{file name}, and it does not attempt to add a \meta{path} to
+%   the \meta{file name}: it is therefore intended to be used by
+%   higher-level
+%   functions which have already fully expanded the \meta{file name} and which
+%   need to perform multiple open or close operations. See for example the
+%   implementation of \cs{iow_shell_open:Nn}.
+% \end{function}
+%
 % \begin{function}{\__kernel_iow_with:Nnn}
 %   \begin{syntax}
 %     \cs{__kernel_iow_with:Nnn} \meta{integer} \Arg{value} \Arg{code}
@@ -367,6 +381,17 @@
 %   |1+2| then this logs |> 1+2=3.|
 % \end{function}
 %
+% \begin{function}[EXP]{\__kernel_pdf_object_id:n, \__kernel_pdf_object_id_indexed:nn}
+%   \begin{syntax}
+%     \cs{__kernel_pdf_object_id:n} \Arg{object}
+%     \cs{__kernel_pdf_object_id_indexed:nn} \Arg{class} \Arg{number}
+%   \end{syntax}
+%   Expands to the ID of \meta{object} (or object of \meta{number} within
+%   the \meta{class}), in for example page resource allocation. Depending on
+%   the backend, the result may be the same as
+%   \cs{pdf_object_id:n}/\cs{pdf_object_id_indexed:nn}.
+% \end{function}
+%
 % \begin{variable}{\g__kernel_prg_map_int}
 %   This integer is used by non-expandable mapping functions to track
 %   the level of nesting in force.  The functions

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %
@@ -51,6 +51,11 @@
 %
 % \section{Objects}
 %
+% \subsection{Named objects}
+%
+% An \meta{object} name should fully expand to tokens suitable for use in a
+% label-like context.
+%
 % \begin{function}[added = 2022-08-23]{\pdf_object_new:n}
 %   \begin{syntax}
 %     \cs{pdf_object_new:n} \Arg{object}
@@ -62,7 +67,7 @@
 % \begin{function}[added = 2022-08-23]
 %   {\pdf_object_write:nnn, \pdf_object_write:nne}
 %   \begin{syntax}
-%     \cs{pdf_object_write:nn} \Arg{object} \Arg{type} \Arg{content}
+%     \cs{pdf_object_write:nnn} \Arg{object} \Arg{type} \Arg{content}
 %   \end{syntax}
 %   Writes the \meta{content} as content of the \meta{object}. Depending on the
 %   \meta{type} declared for the object, the format required for the
@@ -83,9 +88,71 @@
 %     \cs{pdf_object_ref:n} \Arg{object}
 %   \end{syntax}
 %   Inserts the appropriate information to reference the \meta{object}
-%   in for example page resource allocation
+%   in for example page resource allocation. If the \meta{object} does
+%   not exist then the function expands to a reference to object zero;
+%   no PDF indirect object ever has this number, so this is a marker for
+%   error.
 % \end{function}
 %
+% \begin{function}[EXP, pTF, added = 2020-05-15]{\pdf_object_if_exist:n}
+%   \begin{syntax}
+%    \cs{pdf_object_if_exist_p:n} \Arg{object}
+%    \cs{pdf_object_if_exist:nTF} \Arg{object} \Arg{true code} \Arg{false code}
+%   \end{syntax}
+%   Tests whether an object with name \Arg{object} has been defined.
+% \end{function}
+%
+% \subsection{Indexed objects}
+%
+% Objects can also be created using a pair of \meta{class} and \emph{index};
+% the \meta{class} argument should expand to character tokens, whilst the
+% \meta{index} is an \meta{int expr} and starts at $1$. For large
+% families of objects, this approach is more efficient than using
+% individual names.
+%
+% \begin{function}[added = 2024-04-01]{\pdf_object_new_indexed:nn}
+%   \begin{syntax}
+%     \cs{pdf_object_new_indexed:nn}  \Arg{class} \Arg{index}
+%   \end{syntax}
+%   Declares a PDF object of \meta{class} and \meta{index}. The object may be
+%   referenced from this point on, and written later using
+%   \cs{pdf_object_write_indexed:nnnn}.
+% \end{function}
+%
+% \begin{function}[added = 2024-04-01]
+%   {\pdf_object_write_indexed:nnnn, \pdf_object_write_indexed:nnne}
+%   \begin{syntax}
+%     \cs{pdf_object_write_indexed:nnnn}  \Arg{class} \Arg{index} \Arg{type} \Arg{content}
+%   \end{syntax}
+%   Writes the \meta{content} as content of the object of \meta{class} and
+%   \meta{index}. Depending on the
+%   \meta{type} declared for the object, the format required for the
+%   \meta{content} will vary
+%   \begin{itemize}
+%     \item[\texttt{array}] A space-separated list of values
+%     \item[\texttt{dict}] Key--value pairs in the form
+%       \texttt{/\meta{key} \meta{value}}
+%     \item[\texttt{fstream}] Two brace groups: \meta{file name} and
+%       \meta{file content}
+%     \item[\texttt{stream}] Two brace groups: \meta{attributes (dictionary)}
+%       and \meta{stream contents}
+%   \end{itemize}
+% \end{function}
+%
+% \begin{function}[EXP, added = 2024-04-01]{\pdf_object_ref_indexed:nn}
+%   \begin{syntax}
+%     \cs{pdf_object_ref_indexed:nn} \Arg{class} \Arg{index}
+%   \end{syntax}
+%   Inserts the appropriate information to reference the object of \meta{class}
+%   and \meta{index} in for example page resource allocation. If the
+%   \meta{class}/\meta{index} combination does
+%   not exist then the function expands to a reference to object zero;
+%   no PDF indirect object ever has this number, so this is a marker for
+%   error.
+% \end{function}
+%
+% \subsection{General functions}
+%
 % \begin{function}[added = 2021-02-10]
 %   {\pdf_object_unnamed_write:nn, \pdf_object_unnamed_write:ne}
 %   \begin{syntax}
@@ -119,14 +186,6 @@
 %   Inserts the appropriate information to reference the \meta{pageobject}.
 % \end{function}
 %
-% \begin{function}[EXP, pTF, added = 2020-05-15]{\pdf_object_if_exist:n}
-%   \begin{syntax}
-%    \cs{pdf_object_if_exist_p:n} \Arg{object}
-%    \cs{pdf_object_if_exist:nTF} \Arg{object}
-%   \end{syntax}
-%   Tests whether an object with name \Arg{object} has been defined.
-% \end{function}
-%
 % \section{Version}
 %
 % \begin{function}[pTF, EXP, added = 2021-02-10]{\pdf_version_compare:Nn}
@@ -267,6 +326,10 @@
 %<@@=pdf>
 %    \end{macrocode}
 %
+%    \begin{macrocode}
+%<*tex>
+%    \end{macrocode}
+%
 % \begin{variable}{\s_@@_stop}
 %   Internal scan marks.
 %    \begin{macrocode}
@@ -311,55 +374,288 @@
 %
 % \subsection{Objects}
 %
+% \begin{variable}{\g_@@_backend_object_int}
+%   For returning object numbers.
+%    \begin{macrocode}
+\int_new:N \g_@@_backend_object_int
+%    \end{macrocode}
+% \end{variable}
+%
 % \begin{macro}{\pdf_object_new:n}
 % \begin{macro}
 %   {\pdf_object_write:nnn, \pdf_object_write:nne, \pdf_object_write:nnx}
 % \begin{macro}{\pdf_object_ref:n}
-% \begin{macro}
-%   {
-%     \pdf_object_unnamed_write:nn, \pdf_object_unnamed_write:ne,
-%     \pdf_object_unnamed_write:nx
-%   }
-% \begin{macro}{\pdf_object_ref_last:}
-% \begin{macro}[pTF]{\pdf_object_if_exist:n}
+% \begin{macro}{\__kernel_pdf_object_id:n}
 %   Simple to do: all objects create a constant |int| so it is not a
 %   backend-specific name.
 %    \begin{macrocode}
 \cs_new_protected:Npn \pdf_object_new:n #1
   {
-    \@@_backend_object_new:n {#1}
-    \cs_new_eq:cc
-      { c_@@_backend_object_ \tl_to_str:n {#1} _int }
-      { c_@@_object_ \tl_to_str:n {#1} _int }
+    \@@_backend_object_new:
+    \@@_object_record:nN {#1} \g_@@_backend_object_int
   }
 \cs_new_protected:Npn \pdf_object_write:nnn #1#2#3
   {
-    \@@_backend_object_write:nnn {#1} {#2} {#3}
+    \exp_args:Ne \@@_backend_object_write:nnn
+      { \@@_object_retrieve:n {#1} } {#2} {#3}
     \bool_gset_true:N \g_@@_init_bool
   }
 \cs_generate_variant:Nn \pdf_object_write:nnn { nne , nnx }
-\cs_new:Npn \pdf_object_ref:n #1 { \@@_backend_object_ref:n {#1} }
-\cs_new_protected:Npn \pdf_object_unnamed_write:nn #1#2
+\cs_new:Npn \pdf_object_ref:n #1
   {
-    \@@_backend_object_now:nn {#1} {#2}
-    \bool_gset_true:N \g_@@_init_bool
+    \exp_args:Ne \@@_backend_object_ref:n
+      { \@@_object_retrieve:n {#1} }
   }
-\cs_generate_variant:Nn \pdf_object_unnamed_write:nn { ne , nx }
-\cs_new:Npn \pdf_object_ref_last: { \@@_backend_object_last: }
+\cs_new:Npn \__kernel_pdf_object_id:n #1
+  {
+    \exp_args:Ne \@@_backend_object_id:n
+      { \@@_object_retrieve:n {#1} }
+  }
+%</tex>
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\@@_object_record:nN}
+% \begin{macro}[EXP]{\@@_object_retrieve:n}
+% \begin{macro}{ltx.pdf.object_id}
+%   Object mappings are tracked in Lua for \LuaTeX{} as this makes retrieving
+%   them much easier; as a result, there is a split in approaches. In Lua we
+%   store values in a table indexed by name. The Lua function here is set up
+%   to deal with both named and indexed objects: fits the Lua idiom well.
+%    \begin{macrocode}
+%<*lua>
+
+local scan_int = token.scan_int
+local scan_string = token.scan_string
+local cprint = tex.cprint
+
+local @@_objects_named = {}
+local @@_objects_indexed = {}
+
+luacmd('@@_object_record:nN', function()
+  local name = scan_string()
+  local n = scan_int()
+  @@_objects_named[name] = n
+end,'protected','global')
+
+local function object_id(name,index)
+  if index then
+    return @@_objects_indexed[name][index] or 0
+  else
+    return @@_objects_named[name] or 0
+  end
+end
+
+luacmd('@@_object_retrieve:n', function()
+  local name = scan_string()
+  return cprint(12,tostring(object_id(name)))
+end,'global')
+
+ltx.pdf = ltx.pdf or {}
+ltx.pdf.object_id = object_id
+
+%</lua>
+%    \end{macrocode}
+%  Whereas in \TeX{} we use integer constants.
+%    \begin{macrocode}
+%<*tex>
+\sys_if_engine_luatex:F
+  {
+    \cs_new_protected:Npn \@@_object_record:nN #1#2
+      {
+        \int_const:cn
+          { c_@@_object_ #1 _int } {#2}
+      }
+    \cs_new:Npn \@@_object_retrieve:n #1
+      {
+        \int_if_exist:cTF { c_@@_object_ #1 _int }
+          {
+            \int_use:c
+              { c_@@_object_ #1 _int }
+          }
+          { 0 }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}[pTF,EXP]{\pdf_object_if_exist:n}
+%    \begin{macrocode}
 \prg_new_conditional:Npnn \pdf_object_if_exist:n #1 { p , T , F , TF }
   {
-    \int_if_exist:cTF { c_@@_object_ \tl_to_str:n {#1} _int }
+    \int_compare:nNnTF { \@@_object_retrieve:n {#1} } = 0
+      \prg_return_false:
       \prg_return_true:
-      \prg_return_false:
   }
 %    \end{macrocode}
 % \end{macro}
+%
+% \begin{macro}{\pdf_object_new_indexed:nn}
+% \begin{macro}{\pdf_object_write_indexed:nnnn, \pdf_object_write_indexed:nnne}
+% \begin{macro}[EXP]{\pdf_object_ref_indexed:nn}
+% \begin{macro}[EXP]{\__kernel_pdf_object_id_indexed:nn}
+%   Again we split between the common code and the macro- or Lua-based
+%   implementation. To make life easier for the Lua route, all of the
+%   potential expressions are expanded to braced numbers.
+%    \begin{macrocode}
+\cs_new_protected:Npn \pdf_object_new_indexed:nn #1#2
+  {
+    \@@_backend_object_new:
+    \@@_object_record:neN {#1}
+      { \int_eval:n {#2} } \g_@@_backend_object_int
+  }
+\cs_new_protected:Npn \pdf_object_write_indexed:nnnn #1#2#3#4
+  {
+    \exp_args:Ne \@@_backend_object_write:nnn
+      { \@@_object_retrieve:ne {#1} { \int_eval:n {#2} } } {#3} {#4}
+    \bool_gset_true:N \g_@@_init_bool
+  }
+\cs_generate_variant:Nn \pdf_object_write_indexed:nnnn { nnne }
+\cs_new:Npn \pdf_object_ref_indexed:nn #1#2
+  {
+    \exp_args:Ne \@@_backend_object_ref:n
+      { \@@_object_retrieve:ne {#1} { \int_eval:n {#2} } }
+  }
+\cs_new:Npn \__kernel_pdf_object_id_indexed:nn #1#2
+  {
+    \exp_args:Ne \@@_backend_object_id:n
+      { \@@_object_retrieve:ne {#1} { \int_eval:n {#2} } }
+  }
+%</tex>
+%    \end{macrocode}
 % \end{macro}
 % \end{macro}
 % \end{macro}
 % \end{macro}
+% \begin{macro}{\@@_object_record:nnN, \@@_object_record:neN}
+% \begin{macro}[EXP]{\@@_object_retrieve:nn}
+% \begin{macro}{\@@_object_record:NnN}
+% \begin{macro}[EXP]{\@@_object_retrieve:Nn}
+%   Again we split for Lua: the same idea as above but with nested tables.
+%   As we've arranged above that the \TeX{} code passes a braced number,
+%   we can use |tonumber(scan_string())| rather than |scan_int()|
+%   for the index.
+%    \begin{macrocode}
+%<*lua>
+
+luacmd('@@_object_record:nnN', function()
+  local name = scan_string()
+  local index = tonumber(scan_string())
+  local n = scan_int()
+  @@_objects_indexed[name] = @@_objects_indexed[name] or {}
+  @@_objects_indexed[name][index] = n
+end,'protected','global')
+
+luacmd('@@_object_retrieve:nn', function()
+  local name = scan_string()
+  local index = tonumber(scan_string())
+  return cprint(12,tostring(object_id(name,index)))
+end,'global')
+
+%</lua>
+%    \end{macrocode}
+% The non-Lua approach is to divide the range into blocks, and store in integer
+% arrays that can simulate dynamic assignment.
+%    \begin{macrocode}
+%<*tex>
+\sys_if_engine_luatex:F
+  {
+    \cs_new_protected:Npn \@@_object_record:nnN #1#2#3
+      {
+        \use:e
+          {
+            \@@_object_record:NnN
+               \@@_object_index_split:nn {#1} {#2}
+               \exp_not:N #3
+          }
+      }
+    \cs_new_protected:Npn \@@_object_record:NnN #1#2#3
+      {
+        \intarray_if_exist:NF #1
+          { \intarray_new:Nn #1 \c_@@_object_block_size_int }
+        \intarray_gset:Nnn #1 {#2} #3
+      }
+    \cs_new:Npn \@@_object_retrieve:nn #1#2
+      {
+        \use:e
+          {
+            \exp_not:N \@@_object_retrieve:Nn
+              \@@_object_index_split:nn {#1} {#2}
+          }
+      }
+    \cs_new:Npn \@@_object_retrieve:Nn #1#2
+      { \intarray_item:Nn #1 {#2} }
+%    \end{macrocode}
+%   As we want blocks to start from one, and within the block for the top value
+%   to be \enquote{in} the block, we do a little bit of manipulation. By shifting
+%   down by one, we keep the values \enquote{in} the block, then we adjust the
+%   block/index number to get back on track.
+%    \begin{macrocode}
+    \cs_new:Npn \@@_object_index_split:nn #1#2
+      {
+        \exp_not:c
+          {
+            g_@@_object_ #1 _
+            \int_eval:n
+              {
+                \int_div_truncate:nn { #2 - 1 }
+                  \c_@@_object_block_size_int + 1
+              }
+            _intarray
+          }
+          {
+            \int_eval:n
+              { \int_mod:nn { #2 - 1 } \c_@@_object_block_size_int + 1 }
+          }
+      }
+%    \end{macrocode}
 % \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{variable}{\c_@@_object_block_size_int}
+%   Sets the block size used for managing indexed objects.
+%    \begin{macrocode}
+    \int_const:Nn \c_@@_object_block_size_int { 10000 }
+  }
+%    \end{macrocode}
+% \end{variable}
+% \begin{macro}{\@@_object_record:neN}
+% \begin{macro}[EXP]{\@@_object_retrieve:ne}
+%   Common variants.
+%    \begin{macrocode}
+\cs_generate_variant:Nn \@@_object_record:nnN { ne }
+\cs_generate_variant:Nn \@@_object_retrieve:nn { ne }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
 %
+% \begin{macro}
+%   {
+%     \pdf_object_unnamed_write:nn, \pdf_object_unnamed_write:ne,
+%     \pdf_object_unnamed_write:nx
+%   }
+%   No tracking needed here.
+%    \begin{macrocode}
+\cs_new_protected:Npn \pdf_object_unnamed_write:nn #1#2
+  {
+    \exp_args:Ne \@@_backend_object_now:nn {#1} {#2}
+    \bool_gset_true:N \g_@@_init_bool
+  }
+\cs_generate_variant:Nn \pdf_object_unnamed_write:nn { ne , nx }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pdf_object_ref_last:}
+%   A one-step wrapper for consistency.
+%    \begin{macrocode}
+\cs_new:Npn \pdf_object_ref_last: { \@@_backend_object_last: }
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\pdf_pageobject_ref:n}
 %    \begin{macrocode}
 \cs_new:Npn \pdf_pageobject_ref:n #1
@@ -523,6 +819,10 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
+%</tex>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 %</package>
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %
@@ -299,15 +299,15 @@
 %   codes are ignored.
 % \end{function}
 %
-% \begin{function}
+% \begin{function}[added = 2024-03-30]
 %   {
-%     \prop_put_if_new:Nnn, \prop_put_if_new:NVn, \prop_put_if_new:NnV,
-%     \prop_put_if_new:cnn, \prop_put_if_new:cVn, \prop_put_if_new:cnV,
-%     \prop_gput_if_new:Nnn, \prop_gput_if_new:NVn, \prop_gput_if_new:NnV,
-%     \prop_gput_if_new:cnn, \prop_gput_if_new:cVn, \prop_gput_if_new:cnV
+%     \prop_put_if_not_in:Nnn, \prop_put_if_not_in:NVn, \prop_put_if_not_in:NnV,
+%     \prop_put_if_not_in:cnn, \prop_put_if_not_in:cVn, \prop_put_if_not_in:cnV,
+%     \prop_gput_if_not_in:Nnn, \prop_gput_if_not_in:NVn, \prop_gput_if_not_in:NnV,
+%     \prop_gput_if_not_in:cnn, \prop_gput_if_not_in:cVn, \prop_gput_if_not_in:cnV
 %   }
 %   \begin{syntax}
-%     \cs{prop_put_if_new:Nnn} \meta{property list} \Arg{key} \Arg{value}
+%     \cs{prop_put_if_not_in:Nnn} \meta{property list} \Arg{key} \Arg{value}
 %   \end{syntax}
 %   If the \meta{key} is present in the \meta{property list} then no
 %   action is taken. Otherwise, a new entry is added as described for
@@ -1358,7 +1358,7 @@
 %   in the linked case.  If |#5| is |#3| itself we have to be careful
 %   not to lose the data, and we even take the opportunity to skip the
 %   copying step completely.  To keep the correct version of the
-%   duplicate keys we use the code underlying \cs{prop_put_if_new:Nnn},
+%   duplicate keys we use the code underlying \cs{prop_put_if_not_in:Nnn},
 %   which involves passing \cs{use_none:nnn} to the auxiliary instead of
 %   nothing.
 %   There is no need to check for the case where |#3| is equal to~|#4|
@@ -1940,10 +1940,10 @@
 %   }
 % \begin{macro}[tested = m3prop002]
 %   {
-%     \prop_put_if_new:Nnn, \prop_put_if_new:NVn, \prop_put_if_new:NnV,
-%     \prop_put_if_new:cnn, \prop_put_if_new:cVn, \prop_put_if_new:cnV,
-%     \prop_gput_if_new:Nnn, \prop_gput_if_new:NVn, \prop_gput_if_new:NnV,
-%     \prop_gput_if_new:cnn, \prop_gput_if_new:cVn, \prop_gput_if_new:cnV
+%     \prop_put_if_not_in:Nnn, \prop_put_if_not_in:NVn, \prop_put_if_not_in:NnV,
+%     \prop_put_if_not_in:cnn, \prop_put_if_not_in:cVn, \prop_put_if_not_in:cnV,
+%     \prop_gput_if_not_in:Nnn, \prop_gput_if_not_in:NVn, \prop_gput_if_not_in:NnV,
+%     \prop_gput_if_not_in:cnn, \prop_gput_if_not_in:cVn, \prop_gput_if_not_in:cnV
 %   }
 % \begin{macro}[tested = m3prop002]
 %   {
@@ -1965,17 +1965,17 @@
 %   auxiliary to skip this checking step and avoid getting multiple
 %   error messages for the same error.
 %   The \meta{code} (empty for |put| and \cs{use_none:nnn} for
-%   |put_if_new|) is placed before the assignment in cases where the key
+%   |put_if_not_in|) is placed before the assignment in cases where the key
 %   is already present, in order to suppress the assignment in the
-%   |put_if_new| case.
+%   |put_if_not_in| case.
 %    \begin{macrocode}
 \cs_new_protected:Npn \prop_put:Nnn
   { \@@_put:nNNnn { } \cs_set_nopar:Npe }
 \cs_new_protected:Npn \prop_gput:Nnn
   { \@@_put:nNNnn { } \cs_gset_nopar:Npe }
-\cs_new_protected:Npn \prop_put_if_new:Nnn
+\cs_new_protected:Npn \prop_put_if_not_in:Nnn
   { \@@_put:nNNnn \use_none:nnn \cs_set_nopar:Npe }
-\cs_new_protected:Npn \prop_gput_if_new:Nnn
+\cs_new_protected:Npn \prop_gput_if_not_in:Nnn
   { \@@_put:nNNnn \use_none:nnn \cs_gset_nopar:Npe }
 \cs_generate_variant:Nn \prop_put:Nnn
   {
@@ -2005,10 +2005,10 @@
   }
 \cs_generate_variant:Nn \prop_gput:Nnn
   { cno , co , coo , cnx , cVx , cxV , cxx }
-\cs_generate_variant:Nn \prop_put_if_new:Nnn
-  { NnV , NV , cnV , cV }
-\cs_generate_variant:Nn \prop_gput_if_new:Nnn
-  { NnV , NV , cnV , cV }
+\cs_generate_variant:Nn \prop_put_if_not_in:Nnn
+  { NnV , NV , c , cnV , cV }
+\cs_generate_variant:Nn \prop_gput_if_not_in:Nnn
+  { NnV , NV , c , cnV , cV }
 %    \end{macrocode}
 %   Since the true branch of \cs{@@_split:NnTFn} is used as the
 %   replacement text of an internal macro, and since the \meta{key} and

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %
@@ -333,7 +333,7 @@
 % not directly available within the \TeX{} run. Note that if restricted
 % shell escape is disabled, no results can be obtained.
 %
-% \begin{function}[added = 2024-03-08]
+% \begin{function}[added = 2024-03-08, updated = 2024-04-08]
 %   {\sys_get_query:nN, \sys_get_query:nnN, \sys_get_query:nnnN}
 %   \begin{syntax}
 %     \cs{sys_get_query:nN} \Arg{cmd} \Arg{tl var}
@@ -357,6 +357,14 @@
 %   The \meta{spec} and \meta{options}, if given, are expanded fully
 %   before passing to the underlying script.
 %
+%   Spaces in the output are stored as active tokens, allowing them to be
+%   replaced by for example a visible space easily. Other non-letter
+%   characters in the ASCII range are set to category code~12.  The category
+%   codes for characters out of the ASCII range are left unchanged: typically
+%   this will mean that with an 8-bit engine, accented values can be typeset
+%   directly whilst in Unicode engines, standard category code setup will
+%   apply.
+%
 %   If more than one line of text is returned by the \meta{cmd}, these will be
 %   separated by character~13 (|^^M|) tokens of category code~12. In most
 %   cases, \cs{sys_split_query:nnnN} should be preferred when multi-line
@@ -1161,7 +1169,7 @@
   { \sys_get_query:nnnN {#1} { } {#2} #3 }
 \cs_new_protected:Npn \sys_get_query:nnnN #1#2#3#4
   {
-    \str_clear:N #4
+    \tl_clear:N #4
     \@@_get_query_auxi:neeN {#1} {#2} {#3} #4
   }
 \cs_new:Npn \@@_get_query_auxi:nnnN #1#2#3#4
@@ -1187,10 +1195,13 @@
         \sys_get_shell:nnN
           { l3sys-query~#1 #2 #3 }
           {
-            \int_step_inline:nnn { 0 } { `a - 1 }
+            \int_step_inline:nnn { 0 } { `A - 1 }
               { \char_set_catcode_other:n {##1} }
-            \int_step_inline:nnn { `Z + 1 } { 127 }
+            \int_step_inline:nnn { `Z + 1 } { `a - 1 }
               { \char_set_catcode_other:n {##1} }
+            \int_step_inline:nnn { `z + 1 } { 127 }
+              { \char_set_catcode_other:n {##1} }
+            \char_set_catcode_active:n { `\  }
             \tex_endlinechar:D 13 \scan_stop:
           }
         \l_@@_tmp_tl

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %
@@ -73,7 +73,8 @@
 %   \end{syntax}
 %   Clears the \meta{tl~var} and sets it up to support other
 %   \cs[no-index]{tl_build_\ldots{}} functions.  Until \cs{tl_build_end:N}
-%   \meta{tl~var} is called, applying any function from \pkg{l3tl} other
+%   \meta{tl~var} or \cs{tl_build_gend:N} \meta{tl~var} is called,
+%   applying any function from \pkg{l3tl} other
 %   than \cs[no-index]{tl_build_\ldots{}} will lead to incorrect
 %   results.  The |begin| and |gbegin| functions must be used for local
 %   and global \meta{tl~var} respectively.

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %
@@ -2298,7 +2298,7 @@
 %   is not a primitive.
 %
 %   For \LuaTeX{} we use a different implementation which just looks at the
-%   command code for the token and compaes it to a list of non-primitives.
+%   command code for the token and compares it to a list of non-primitives.
 %   Again, \tn{nullfont} is a special case because it is the only primitive
 %   with the normally non-primitive |set_font| command code.
 %
@@ -2345,11 +2345,11 @@
     [cmd'outer_call' or cmd'tolerant_call'] = true,
     [cmd'long_outer_call' or cmd'tolerant_protected_call'] = true,
     [cmd'assign_glue' or cmd'register_glue'] = index_not_nil,
-    [cmd'assign_mu_glue' or cmd'register_mu_glue'] = index_not_nil,
+    [cmd'assign_mu_glue' or cmd'register_mu_glue' or cmd'register_muglue'] = index_not_nil,
     [cmd'assign_toks' or cmd'register_toks'] = index_not_nil,
-    [cmd'assign_int' or cmd'register_int'] = index_not_nil,
+    [cmd'assign_int' or cmd'register_int' or cmd'register_integer'] = index_not_nil,
     [cmd'assign_attr' or cmd'register_attribute'] = true,
-    [cmd'assign_dimen' or cmd'register_dimen'] = index_not_nil,
+    [cmd'assign_dimen' or cmd'register_dimen' or cmd'register_dimension'] = index_not_nil,
   }
 
   luacmd("@@_if_primitive_lua:N", function()

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
 %
 % \maketitle
 %
@@ -82,7 +82,7 @@
 %   range, the generated character tokens will be active (category code
 %   $13$); for codepoints in the ASCII range, the given \meta{catcode}
 %   will be used. To allow the result of this function to be used
-%   inside a expansion context, the result is protected by \cs{exp_not:n}.
+%   inside an expansion context, the result is protected by \cs{exp_not:n}.
 %
 %   \begin{texnote}
 %     Users of (u)p\TeX{} note that these engines are treated as $8$-bit in

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2024-04-30 20:03:09 UTC (rev 71140)
@@ -51,7 +51,7 @@
 %% l3regex.dtx  (with options: `package')
 %% l3box.dtx  (with options: `package')
 %% l3color.dtx  (with options: `package')
-%% l3pdf.dtx  (with options: `package')
+%% l3pdf.dtx  (with options: `package,tex')
 %% l3coffins.dtx  (with options: `package')
 %% l3luatex.dtx  (with options: `package,tex')
 %% l3unicode.dtx  (with options: `package')
@@ -75,7 +75,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2024-03-14}%
+\def\ExplFileDate{2024-04-11}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -7960,7 +7960,7 @@
   { \sys_get_query:nnnN {#1} { } {#2} #3 }
 \cs_new_protected:Npn \sys_get_query:nnnN #1#2#3#4
   {
-    \str_clear:N #4
+    \tl_clear:N #4
     \__sys_get_query_auxi:neeN {#1} {#2} {#3} #4
   }
 \cs_new:Npn \__sys_get_query_auxi:nnnN #1#2#3#4
@@ -7986,10 +7986,13 @@
         \sys_get_shell:nnN
           { l3sys-query~#1 #2 #3 }
           {
-            \int_step_inline:nnn { 0 } { `a - 1 }
+            \int_step_inline:nnn { 0 } { `A - 1 }
               { \char_set_catcode_other:n {##1} }
-            \int_step_inline:nnn { `Z + 1 } { 127 }
+            \int_step_inline:nnn { `Z + 1 } { `a - 1 }
               { \char_set_catcode_other:n {##1} }
+            \int_step_inline:nnn { `z + 1 } { 127 }
+              { \char_set_catcode_other:n {##1} }
+            \char_set_catcode_active:n { `\  }
             \tex_endlinechar:D 13 \scan_stop:
           }
         \l__sys_tmp_tl
@@ -10042,9 +10045,9 @@
   { \__prop_put:nNNnn { } \cs_set_nopar:Npe }
 \cs_new_protected:Npn \prop_gput:Nnn
   { \__prop_put:nNNnn { } \cs_gset_nopar:Npe }
-\cs_new_protected:Npn \prop_put_if_new:Nnn
+\cs_new_protected:Npn \prop_put_if_not_in:Nnn
   { \__prop_put:nNNnn \use_none:nnn \cs_set_nopar:Npe }
-\cs_new_protected:Npn \prop_gput_if_new:Nnn
+\cs_new_protected:Npn \prop_gput_if_not_in:Nnn
   { \__prop_put:nNNnn \use_none:nnn \cs_gset_nopar:Npe }
 \cs_generate_variant:Nn \prop_put:Nnn
   {
@@ -10074,10 +10077,10 @@
   }
 \cs_generate_variant:Nn \prop_gput:Nnn
   { cno , co , coo , cnx , cVx , cxV , cxx }
-\cs_generate_variant:Nn \prop_put_if_new:Nnn
-  { NnV , NV , cnV , cV }
-\cs_generate_variant:Nn \prop_gput_if_new:Nnn
-  { NnV , NV , cnV , cV }
+\cs_generate_variant:Nn \prop_put_if_not_in:Nnn
+  { NnV , NV , c , cnV , cV }
+\cs_generate_variant:Nn \prop_gput_if_not_in:Nnn
+  { NnV , NV , c , cnV , cV }
 \cs_new_protected:Npn \__prop_put:nNNnn #1#2#3#4#5
   {
     \tl_set:Nn \l__prop_internal_tl
@@ -11633,16 +11636,21 @@
   {
     \__kernel_tl_set:Nx \l__iow_file_name_tl
       { \__kernel_file_name_sanitize:n {#2} }
+    \__kernel_iow_open:No #1 \l__iow_file_name_tl
+  }
+\cs_generate_variant:Nn \iow_open:Nn { NV , c , cV }
+\cs_new_protected:Npn \__kernel_iow_open:Nn #1#2
+  {
     \iow_close:N #1
     \seq_gpop:NNTF \g__iow_streams_seq \l__iow_stream_tl
-      { \__iow_open_stream:NV #1 \l__iow_file_name_tl }
+      { \__iow_open_stream:Nn #1 {#2} }
       {
         \__iow_new:N #1
         \__kernel_tl_set:Nx \l__iow_stream_tl { \int_eval:n {#1} }
-        \__iow_open_stream:NV #1 \l__iow_file_name_tl
+        \__iow_open_stream:Nn #1 {#2}
       }
   }
-\cs_generate_variant:Nn \iow_open:Nn { NV , c , cV }
+\cs_generate_variant:Nn \__kernel_iow_open:Nn { No }
 \cs_new_protected:Npn \__iow_open_stream:Nn #1#2
   {
     \tex_global:D \tex_chardef:D #1 = \l__iow_stream_tl \scan_stop:
@@ -15196,6 +15204,10 @@
         \__intarray_gset_range:Nw #1
       }
   }
+\prg_new_eq_conditional:NNn \intarray_if_exist:N \cs_if_exist:N
+  { TF , T , F , p }
+\prg_new_eq_conditional:NNn \intarray_if_exist:c \cs_if_exist:c
+  { TF , T , F , p }
 \cs_new_protected:Npn \intarray_show:N { \__intarray_show:NN \msg_show:nneeee }
 \cs_generate_variant:Nn \intarray_show:N { c }
 \cs_new_protected:Npn \intarray_log:N { \__intarray_show:NN \msg_log:nneeee }
@@ -22131,6 +22143,10 @@
   }
 \cs_new:Npn \__fp_array_item_normal:w #1 #2#3#4#5 #6 ; #7 ; #8 ; #9
   { #9 \s__fp \__fp_chk:w 1 #1 {#8} #7 {#2#3#4#5} {#6} ; }
+\prg_new_eq_conditional:NNn \fparray_if_exist:N \cs_if_exist:N
+  { TF , T , F , p }
+\prg_new_eq_conditional:NNn \fparray_if_exist:c \cs_if_exist:c
+  { TF , T , F , p }
 %% File: l3bitset.dtx
 \cs_if_exist:NT \@expl at finalise@setup@@
   {
@@ -22361,9 +22377,13 @@
   }
   {
     \cs_new_protected:Npn \__cctab_new:N #1
-      { \intarray_new:Nn #1 { 257 } }
+      {
+        \debug_suspend:
+        \intarray_new:Nn #1 { 257 }
+        \debug_resume:
+      }
     \cs_new_protected:Npn \__cctab_gstore:Nnn #1#2#3
-      { \intarray_gset:Nnn #1 { \int_eval:n { #2 + 1 } } {#3} }
+      { \intarray_gset:Nnn #1 { #2 + 1 } {#3} }
     \cs_new_protected:Npn \cctab_new:N #1
       {
         \__kernel_chk_if_free_cs:N #1
@@ -22622,8 +22642,13 @@
   }
 \cs_new_protected:Npn \cctab_const:Nn #1#2
   {
-    \cctab_new:N #1
-    \cctab_gset:Nn #1 {#2}
+    \__kernel_chk_if_free_cs:N #1
+    \__cctab_new:N #1
+    \group_begin:
+      \cctab_select:N \c_initex_cctab
+      #2 \scan_stop:
+      \__cctab_gset:n {#1}
+    \group_end:
   }
 \cs_generate_variant:Nn \cctab_const:Nn { c }
 \cctab_new:N \c_initex_cctab
@@ -31784,33 +31809,130 @@
         \__pdf_backend_compress_objects:n { \c_false_bool }
       }
   }
+\int_new:N \g__pdf_backend_object_int
 \cs_new_protected:Npn \pdf_object_new:n #1
   {
-    \__pdf_backend_object_new:n {#1}
-    \cs_new_eq:cc
-      { c__pdf_backend_object_ \tl_to_str:n {#1} _int }
-      { c__pdf_object_ \tl_to_str:n {#1} _int }
+    \__pdf_backend_object_new:
+    \__pdf_object_record:nN {#1} \g__pdf_backend_object_int
   }
 \cs_new_protected:Npn \pdf_object_write:nnn #1#2#3
   {
-    \__pdf_backend_object_write:nnn {#1} {#2} {#3}
+    \exp_args:Ne \__pdf_backend_object_write:nnn
+      { \__pdf_object_retrieve:n {#1} } {#2} {#3}
     \bool_gset_true:N \g__pdf_init_bool
   }
 \cs_generate_variant:Nn \pdf_object_write:nnn { nne , nnx }
-\cs_new:Npn \pdf_object_ref:n #1 { \__pdf_backend_object_ref:n {#1} }
+\cs_new:Npn \pdf_object_ref:n #1
+  {
+    \exp_args:Ne \__pdf_backend_object_ref:n
+      { \__pdf_object_retrieve:n {#1} }
+  }
+\cs_new:Npn \__kernel_pdf_object_id:n #1
+  {
+    \exp_args:Ne \__pdf_backend_object_id:n
+      { \__pdf_object_retrieve:n {#1} }
+  }
+\sys_if_engine_luatex:F
+  {
+    \cs_new_protected:Npn \__pdf_object_record:nN #1#2
+      {
+        \int_const:cn
+          { c__pdf_object_ #1 _int } {#2}
+      }
+    \cs_new:Npn \__pdf_object_retrieve:n #1
+      {
+        \int_if_exist:cTF { c__pdf_object_ #1 _int }
+          {
+            \int_use:c
+              { c__pdf_object_ #1 _int }
+          }
+          { 0 }
+      }
+  }
+\prg_new_conditional:Npnn \pdf_object_if_exist:n #1 { p , T , F , TF }
+  {
+    \int_compare:nNnTF { \__pdf_object_retrieve:n {#1} } = 0
+      \prg_return_false:
+      \prg_return_true:
+  }
+\cs_new_protected:Npn \pdf_object_new_indexed:nn #1#2
+  {
+    \__pdf_backend_object_new:
+    \__pdf_object_record:neN {#1}
+      { \int_eval:n {#2} } \g__pdf_backend_object_int
+  }
+\cs_new_protected:Npn \pdf_object_write_indexed:nnnn #1#2#3#4
+  {
+    \exp_args:Ne \__pdf_backend_object_write:nnn
+      { \__pdf_object_retrieve:ne {#1} { \int_eval:n {#2} } } {#3} {#4}
+    \bool_gset_true:N \g__pdf_init_bool
+  }
+\cs_generate_variant:Nn \pdf_object_write_indexed:nnnn { nnne }
+\cs_new:Npn \pdf_object_ref_indexed:nn #1#2
+  {
+    \exp_args:Ne \__pdf_backend_object_ref:n
+      { \__pdf_object_retrieve:ne {#1} { \int_eval:n {#2} } }
+  }
+\cs_new:Npn \__kernel_pdf_object_id_indexed:nn #1#2
+  {
+    \exp_args:Ne \__pdf_backend_object_id:n
+      { \__pdf_object_retrieve:ne {#1} { \int_eval:n {#2} } }
+  }
+\sys_if_engine_luatex:F
+  {
+    \cs_new_protected:Npn \__pdf_object_record:nnN #1#2#3
+      {
+        \use:e
+          {
+            \__pdf_object_record:NnN
+               \__pdf_object_index_split:nn {#1} {#2}
+               \exp_not:N #3
+          }
+      }
+    \cs_new_protected:Npn \__pdf_object_record:NnN #1#2#3
+      {
+        \intarray_if_exist:NF #1
+          { \intarray_new:Nn #1 \c__pdf_object_block_size_int }
+        \intarray_gset:Nnn #1 {#2} #3
+      }
+    \cs_new:Npn \__pdf_object_retrieve:nn #1#2
+      {
+        \use:e
+          {
+            \exp_not:N \__pdf_object_retrieve:Nn
+              \__pdf_object_index_split:nn {#1} {#2}
+          }
+      }
+    \cs_new:Npn \__pdf_object_retrieve:Nn #1#2
+      { \intarray_item:Nn #1 {#2} }
+    \cs_new:Npn \__pdf_object_index_split:nn #1#2
+      {
+        \exp_not:c
+          {
+            g__pdf_object_ #1 _
+            \int_eval:n
+              {
+                \int_div_truncate:nn { #2 - 1 }
+                  \c__pdf_object_block_size_int + 1
+              }
+            _intarray
+          }
+          {
+            \int_eval:n
+              { \int_mod:nn { #2 - 1 } \c__pdf_object_block_size_int + 1 }
+          }
+      }
+    \int_const:Nn \c__pdf_object_block_size_int { 10000 }
+  }
+\cs_generate_variant:Nn \__pdf_object_record:nnN { ne }
+\cs_generate_variant:Nn \__pdf_object_retrieve:nn { ne }
 \cs_new_protected:Npn \pdf_object_unnamed_write:nn #1#2
   {
-    \__pdf_backend_object_now:nn {#1} {#2}
+    \exp_args:Ne \__pdf_backend_object_now:nn {#1} {#2}
     \bool_gset_true:N \g__pdf_init_bool
   }
 \cs_generate_variant:Nn \pdf_object_unnamed_write:nn { ne , nx }
 \cs_new:Npn \pdf_object_ref_last: { \__pdf_backend_object_last: }
-\prg_new_conditional:Npnn \pdf_object_if_exist:n #1 { p , T , F , TF }
-  {
-    \int_if_exist:cTF { c__pdf_object_ \tl_to_str:n {#1} _int }
-      \prg_return_true:
-      \prg_return_false:
-  }
 \cs_new:Npn \pdf_pageobject_ref:n #1
   { \__pdf_backend_pageobject_ref:n {#1} }
 \prg_new_conditional:Npnn \pdf_version_compare:Nn #1#2 { p , T , F , TF }
@@ -37365,6 +37487,12 @@
           }
       }
   }
+\cs_new_protected:Npn \prop_put_if_new:Nnn { \prop_put_if_not_in:Nnn }
+\cs_new_protected:Npn \prop_gput_if_new:Nnn { \prop_gput_if_not_in:Nnn }
+\cs_generate_variant:Nn \prop_put_if_new:Nnn
+  { NnV , NV , c , cnV , cV }
+\cs_generate_variant:Nn \prop_gput_if_new:Nnn
+  { NnV , NV , c , cnV , cV }
 %% 
 %%
 %% End of file `expl3-code.tex'.

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2024-04-30 20:03:09 UTC (rev 71140)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2024-03-14}%
+\def\ExplFileDate{2024-04-11}%
 \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	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx	2024-04-30 20:03:09 UTC (rev 71140)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2024-03-14}%
+\def\ExplFileDate{2024-04-11}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua	2024-04-30 20:03:09 UTC (rev 71140)
@@ -9,6 +9,7 @@
 -- l3sys.dtx  (with options: `package,lua')
 -- l3token.dtx  (with options: `package,lua')
 -- l3intarray.dtx  (with options: `package,lua')
+-- l3pdf.dtx  (with options: `package,lua')
 -- 
 -- Copyright (C) 1990-2024 The LaTeX Project
 -- 
@@ -418,11 +419,11 @@
     [cmd'outer_call' or cmd'tolerant_call'] = true,
     [cmd'long_outer_call' or cmd'tolerant_protected_call'] = true,
     [cmd'assign_glue' or cmd'register_glue'] = index_not_nil,
-    [cmd'assign_mu_glue' or cmd'register_mu_glue'] = index_not_nil,
+    [cmd'assign_mu_glue' or cmd'register_mu_glue' or cmd'register_muglue'] = index_not_nil,
     [cmd'assign_toks' or cmd'register_toks'] = index_not_nil,
-    [cmd'assign_int' or cmd'register_int'] = index_not_nil,
+    [cmd'assign_int' or cmd'register_int' or cmd'register_integer'] = index_not_nil,
     [cmd'assign_attr' or cmd'register_attribute'] = true,
-    [cmd'assign_dimen' or cmd'register_dimen'] = index_not_nil,
+    [cmd'assign_dimen' or cmd'register_dimen' or cmd'register_dimension'] = index_not_nil,
   }
 
   luacmd("__token_if_primitive_lua:N", function()
@@ -569,3 +570,49 @@
     from = from + 1
   end
   end, 'global', 'protected')
+-- File: l3pdf.dtx
+
+local scan_int = token.scan_int
+local scan_string = token.scan_string
+local cprint = tex.cprint
+
+local __pdf_objects_named = {}
+local __pdf_objects_indexed = {}
+
+luacmd('__pdf_object_record:nN', function()
+  local name = scan_string()
+  local n = scan_int()
+  __pdf_objects_named[name] = n
+end,'protected','global')
+
+local function object_id(name,index)
+  if index then
+    return __pdf_objects_indexed[name][index] or 0
+  else
+    return __pdf_objects_named[name] or 0
+  end
+end
+
+luacmd('__pdf_object_retrieve:n', function()
+  local name = scan_string()
+  return cprint(12,tostring(object_id(name)))
+end,'global')
+
+ltx.pdf = ltx.pdf or {}
+ltx.pdf.object_id = object_id
+
+
+luacmd('__pdf_object_record:nnN', function()
+  local name = scan_string()
+  local index = tonumber(scan_string())
+  local n = scan_int()
+  __pdf_objects_indexed[name] = __pdf_objects_indexed[name] or {}
+  __pdf_objects_indexed[name][index] = n
+end,'protected','global')
+
+luacmd('__pdf_object_retrieve:nn', function()
+  local name = scan_string()
+  local index = tonumber(scan_string())
+  return cprint(12,tostring(object_id(name,index)))
+end,'global')
+

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2024-04-30 20:03:09 UTC (rev 71140)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2024-03-14}%
+\def\ExplFileDate{2024-04-11}%
 \let\ExplLoaderFileDate\ExplFileDate
 \ProvidesPackage{expl3}
   [%

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def	2024-04-30 20:03:09 UTC (rev 71140)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: l3debug.dtx
-\ProvidesExplFile{l3debug.def}{2024-03-14}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2024-04-11}{}{L3 Debugging support}
 \scan_new:N \s__debug_stop
 \cs_new:Npn \__debug_use_i_delimit_by_s_stop:nw #1 #2 \s__debug_stop {#1}
 \quark_new:N \q__debug_recursion_tail
@@ -470,7 +470,7 @@
       \prop_pop:NnNF
       \prop_pop:NnNTF
       \prop_put:Nnn
-      \prop_put_if_new:Nnn
+      \prop_put_if_not_in:Nnn
       \prop_put_from_keyval:Nn
       \prop_remove:Nn
       \prop_set_eq:NN
@@ -551,7 +551,7 @@
       \prop_gpop:NnNF
       \prop_gpop:NnNTF
       \prop_gput:Nnn
-      \prop_gput_if_new:Nnn
+      \prop_gput_if_not_in:Nnn
       \prop_gput_from_keyval:Nn
       \prop_gremove:Nn
       \prop_gset_eq:NN

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls	2024-04-30 20:02:48 UTC (rev 71139)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls	2024-04-30 20:03:09 UTC (rev 71140)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3doc.dtx
 \RequirePackage{calc}
-\ProvidesExplClass{l3doc}{2024-03-14}{}
+\ProvidesExplClass{l3doc}{2024-04-11}{}
   {L3 Experimental documentation class}
 \clist_new:N \g_docinput_clist
 \seq_new:N \g_doc_functions_seq
@@ -798,6 +798,8 @@
       {
         \tl_remove_all:Ne \l__codedoc_tmpa_tl
           { \iow_char:N \^^M \c_percent_str }
+        \tl_remove_all:Ne \l__codedoc_tmpa_tl
+          { \token_to_str:N \obeyedline \c_space_tl \c_percent_str }
         \tl_remove_all:Ne \l__codedoc_tmpa_tl { \tl_to_str:n { ^ ^ A } }
         \tl_remove_all:Ne \l__codedoc_tmpa_tl { \iow_char:N \^^I }
         \tl_remove_all:Ne \l__codedoc_tmpa_tl { \iow_char:N \^^M }



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