texlive[56067] trunk: l3 (7aug20)

commits+karl at tug.org commits+karl at tug.org
Fri Aug 7 23:37:40 CEST 2020


Revision: 56067
          http://tug.org/svn/texlive?view=revision&revision=56067
Author:   karl
Date:     2020-08-07 23:37:39 +0200 (Fri, 07 Aug 2020)
Log Message:
-----------
l3 (7aug20)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl
    trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3backend/README.md
    trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3experimental/README.md
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
    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/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/l3prefixes.csv
    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/dvips/l3backend/l3backend-dvips.pro
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx
    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/l3bootstrap.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/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-purify.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
    trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def
    trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def
    trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def
    trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def
    trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xdvipdfmx.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty

Removed Paths:
-------------
    trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3format.ins

Modified: trunk/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl	2020-08-07 21:37:39 UTC (rev 56067)
@@ -1,12 +1,12 @@
 #!/usr/bin/env perl
-# $Id: tlmgr.pl 55369 2020-06-01 00:32:00Z preining $
+# $Id: tlmgr.pl 56058 2020-08-06 01:41:42Z preining $
 #
 # Copyright 2008-2020 Norbert Preining
 # This file is licensed under the GNU General Public License version 2
 # or any later version.
 
-my $svnrev = '$Revision: 55369 $';
-my $datrev = '$Date: 2020-06-01 02:32:00 +0200 (Mon, 01 Jun 2020) $';
+my $svnrev = '$Revision: 56058 $';
+my $datrev = '$Date: 2020-08-06 03:41:42 +0200 (Thu, 06 Aug 2020) $';
 my $tlmgrrevision;
 my $tlmgrversion;
 my $prg;
@@ -2736,14 +2736,13 @@
   } else {
     @todo = @ARGV;
   }
+  if ($opts{"self"} && !@critical) {
+    info("$prg: no self-updates for tlmgr available\n");
+  }
   # don't do anything if we have been invoked in a strange way
-  if (!@todo) {
-    if ($opts{"self"}) {
-      info("$prg: no self-updates for tlmgr available.\n");
-    } else {
-      tlwarn("$prg update: please specify a list of packages, --all, or --self.\n");
-      return ($F_ERROR);
-    }
+  if (!@todo && !$opts{"self"}) {
+    tlwarn("$prg update: please specify a list of packages, --all, or --self.\n");
+    return ($F_ERROR);
   }
 
   if (!($opts{"self"} && @critical) || ($opts{"self"} && $opts{"list"})) {
@@ -3585,7 +3584,9 @@
   # if a real update from default disk location didn't find anything,
   # warn if nothing is updated.  Unless they said --self, in which case
   # we've already reported it.
-  if (!(@new || @updated) && ! $opts{"self"}) {
+  # But if --self --all was given, and *no* update available for
+  # critical packages, then we should report it, too!
+  if (!(@new || @updated) && ( !$opts{"self"} || @todo )) {
     if (!$::machinereadable) {
       info("$prg: no updates available\n");
       if ($remotetlpdb->media ne "NET"
@@ -10064,7 +10065,7 @@
 distribution (L<https://tug.org/texlive>) and both are licensed under the
 GNU General Public License Version 2 or later.
 
-$Id: tlmgr.pl 55369 2020-06-01 00:32:00Z preining $
+$Id: tlmgr.pl 56058 2020-08-06 01:41:42Z preining $
 =cut
 
 # test HTML version: pod2html --cachedir=/tmp tlmgr.pl >/tmp/tlmgr.html

Modified: trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md	2020-08-07 21:37:39 UTC (rev 56067)
@@ -6,6 +6,12 @@
 
 ## [Unreleased]
 
+## [2020-08-07]
+
+### Changed
+- Color selection implementation
+- Improved support for Separation colors
+
 ## [2020-06-29]
 
 ### Fixed
@@ -96,7 +102,8 @@
 - Include `l3backend` in file names
 - Moved backend code to internal for each 'parent' module
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2020-06-29...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2020-08-07...HEAD
+[2020-08-07]: https://github.com/latex3/latex3/compare/2020-06-29...2020-08-07
 [2020-06-29]: https://github.com/latex3/latex3/compare/2020-06-23...2020-06-29
 [2020-06-23]: https://github.com/latex3/latex3/compare/2020-06-18...2020-06-23
 [2020-06-18]: https://github.com/latex3/latex3/compare/2020-06-03...2020-06-18

Modified: trunk/Master/texmf-dist/doc/latex/l3backend/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3backend/README.md	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/doc/latex/l3backend/README.md	2020-08-07 21:37:39 UTC (rev 56067)
@@ -1,7 +1,7 @@
 LaTeX3 Backend Drivers
 ======================
 
-Release 2020-06-29
+Release 2020-08-07
 
 This package forms parts of `expl3`, and contains the code used to interface
 with backends (drivers) across the `expl3` codebase. The functions here are

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md	2020-08-07 21:37:39 UTC (rev 56067)
@@ -7,6 +7,12 @@
 
 ## [Unreleased]
 
+## [2020-08-07]
+
+### Changed
+- Move drawing color functions to `l3color`, generalising the approach
+  with better `dvips` support
+
 ## [2020-07-17]
 
 ### Added
@@ -149,7 +155,8 @@
 - New `l3color` module using `xcolor`-like expression syntax
 - New `l3draw` module, based on `pgf` layer of the TikZ system
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2020-07-17...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2020-08-07...HEAD
+[2020-08-07]: https://github.com/latex3/latex3/compare/2020-07-17...2020-08-07
 [2020-07-17]: https://github.com/latex3/latex3/compare/2020-06-18...2020-07-17
 [2020-06-18]: https://github.com/latex3/latex3/compare/2020-06-03...2020-06-18
 [2020-06-03]: https://github.com/latex3/latex3/compare/2020-05-18...2020-06-03

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3experimental/README.md	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/doc/latex/l3experimental/README.md	2020-08-07 21:37:39 UTC (rev 56067)
@@ -1,7 +1,7 @@
 Experimental LaTeX3 Concepts
 ============================
 
-Release 2020-07-17
+Release 2020-08-07
 
 Overview
 --------

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

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

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf
===================================================================
(Binary files differ)

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

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

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdf
===================================================================
(Binary files differ)

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

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf
===================================================================
(Binary files differ)

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

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
===================================================================
(Binary files differ)

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

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2020-08-07 21:37:39 UTC (rev 56067)
@@ -7,6 +7,15 @@
 
 ## [Unreleased]
 
+## [2020-08-07]
+
+### Changed
+- Color selection implementation
+- Performance enhancements for `\keys_set:nn`
+
+### Fixed
+- Loading generically on ConTeXt (issue #783)
+
 ## [2020-07-17]
 
 ### Added
@@ -725,7 +734,8 @@
 - Step func­tions have been added for dim vari­ables,
   e.g. `\dim_step_in­line:nnnn`
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2020-07-17...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2020-08-07...HEAD
+[2020-08-07]: https://github.com/latex3/latex3/compare/2020-07-17...2020-08-07
 [2020-07-17]: https://github.com/latex3/latex3/compare/2020-06-18...2020-07-17
 [2020-06-18]: https://github.com/latex3/latex3/compare/2020-06-03...2020-06-18
 [2020-06-03]: https://github.com/latex3/latex3/compare/2020-05-15...2020-06-03

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2020-08-07 21:37:39 UTC (rev 56067)
@@ -1,7 +1,7 @@
 LaTeX3 Programming Conventions
 ==============================
 
-Release 2020-07-17
+Release 2020-08-07
 
 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	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex	2020-08-07 21:37:39 UTC (rev 56067)
@@ -54,7 +54,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2020-07-17}
+\date{Released 2020-08-07}
 
 \pagenumbering{roman}
 \maketitle

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/l3prefixes.csv
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.csv	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.csv	2020-08-07 21:37:39 UTC (rev 56067)
@@ -20,6 +20,7 @@
 bool,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 box,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 bxjh,BXjaholiday,Takuto Asakura,https://github.com/wtsnjp/BXjaholiday,https://github.com/wtsnjp/BXjaholiday.git,https://github.com/wtsnjp/BXjaholiday/issues,2018-02-02,2019-02-02,
+cascade,cascade,F. Pantigny,,,,2020-07-21,2020-07-21,
 catcode,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 cctab,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
 cellprops,cellprops,Julien Rivaud,,,,2018-06-13,2018-06-13,

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	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex	2020-08-07 21:37:39 UTC (rev 56067)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2020-07-17}
+\date{Released 2020-08-07}
 
 \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	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex	2020-08-07 21:37:39 UTC (rev 56067)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2020-07-17}
+\date{Released 2020-08-07}
 
 \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	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex	2020-08-07 21:37:39 UTC (rev 56067)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2020-07-17}
+\date{Released 2020-08-07}
 
 \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	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex	2020-08-07 21:37:39 UTC (rev 56067)
@@ -53,7 +53,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2020-07-17}
+\date{Released 2020-08-07}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro
===================================================================
--- trunk/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro	2020-08-07 21:37:39 UTC (rev 56067)
@@ -19,10 +19,11 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: l3backend-header.dtx
+/color.sc { } def
+/color.fc { } def
 true setglobal
 /pdf.globaldict 4 dict def
 false setglobal
-
 /pdf.cvs { 65534 string cvs } def
 /pdf.dvi.pt { 72.27 mul Resolution div } def
 /pdf.pt.dvi { 72.27 div Resolution mul } def
@@ -221,7 +222,7 @@
         /x
           {
             0 exch rmoveto
-            SDict~
+            SDict
             begin
             currentpoint
             pdf.originy ne exch pdf.originx ne or

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-06-29}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -56,7 +56,7 @@
 % \section{\pkg{l3backend-basics} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 % Whilst there is a reasonable amount of code overlap between backends,
@@ -71,23 +71,23 @@
 %<*package>
 \ProvidesExplFile
 %<*dvipdfmx>
-  {l3backend-dvipdfmx.def}{2020-06-29}{}
+  {l3backend-dvipdfmx.def}{2020-08-07}{}
   {L3 backend support: dvipdfmx}
 %</dvipdfmx>
 %<*dvips>
-  {l3backend-dvips.def}{2020-06-29}{}
+  {l3backend-dvips.def}{2020-08-07}{}
   {L3 backend support: dvips}
 %</dvips>
 %<*dvisvgm>
-  {l3backend-dvisvgm.def}{2020-06-29}{}
+  {l3backend-dvisvgm.def}{2020-08-07}{}
   {L3 backend support: dvisvgm}
 %</dvisvgm>
 %<*pdfmode>
-  {l3backend-pdfmode.def}{2020-06-29}{}
+  {l3backend-pdfmode.def}{2020-08-07}{}
   {L3 backend support: PDF mode}
 %</pdfmode>
 %<*xdvipdfmx>
-  {l3backend-xdvipdfmx.def}{2020-06-29}{}
+  {l3backend-xdvipdfmx.def}{2020-08-07}{}
   {L3 backend support: xdvipdfmx}
 %</xdvipdfmx>
 %</package>
@@ -358,29 +358,64 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\__kernel_backend_scope_begin:, \__kernel_backend_scope_end:}
-%   A scope in SVG terms is slightly different to the other backends as
-%   operations have to be \enquote{tied} to these not simply inside them.
+% \begin{variable}{\g__kernel_backend_scope_int, \l__kernel_backend_scope_int}
+%   In SVG, we need to track scope nesting as properties attach to scopes; that
+%   requires a pair of \texttt{int} registers.
 %    \begin{macrocode}
-\cs_new_protected:Npn \__kernel_backend_scope_begin:
-  { \__kernel_backend_literal_svg:n { <g> } }
-\cs_new_protected:Npn \__kernel_backend_scope_end:
-  { \__kernel_backend_literal_svg:n { </g> } }
+\int_new:N \g__kernel_backend_scope_int
+\int_new:N \l__kernel_backend_scope_int
 %    \end{macrocode}
-% \end{macro}
+% \end{variable}
 %
+% \begin{macro}{\__kernel_backend_scope_begin:, \__kernel_backend_scope_end:}
 % \begin{macro}{\__kernel_backend_scope_begin:n, \__kernel_backend_scope_begin:x}
-%   In SVG transformations, clips and so on are attached directly to scopes so
-%   we need a way or allowing for that. This is rather more useful than
-%   \cs{__kernel_backend_scope_begin:} as a result.
-%   No assumptions are made about the nature
-%   of the scoped operation(s).
+% \begin{macro}{\__kernel_backend_scope:n, \__kernel_backend_scope:x}
+%   In SVG, the need to attach concepts to a scope means we need to be sure we
+%   will close all of the open scopes. That is easiest done if we only need
+%   an outer \enquote{wrapper} \texttt{begin}/\texttt{end} pair, and within
+%   that we apply operations as a simple scoped statements. To keep down the
+%   non-productive groups, we also have a \texttt{begin} version that does take
+%   an argument.
 %    \begin{macrocode}
+\cs_new_protected:Npn \__kernel_backend_scope_begin:
+  {
+    \__kernel_backend_literal_svg:n { <g> }
+    \int_set_eq:NN
+      \l__kernel_backend_scope_int
+      \g__kernel_backend_scope_int
+    \group_begin:
+      \int_gset:Nn \g__kernel_backend_scope_int { 1 }
+  }
+\cs_new_protected:Npn \__kernel_backend_scope_end:
+  {
+      \prg_replicate:nn
+        { \g__kernel_backend_scope_int }
+        { \__kernel_backend_literal_svg:n { </g> } }
+    \group_end:
+    \int_gset_eq:NN
+      \g__kernel_backend_scope_int
+      \l__kernel_backend_scope_int
+  }
 \cs_new_protected:Npn \__kernel_backend_scope_begin:n #1
-  { \__kernel_backend_literal_svg:n { <g~ #1 > } }
+  {
+    \__kernel_backend_literal_svg:n { <g ~ #1 > }
+    \int_set_eq:NN
+      \l__kernel_backend_scope_int
+      \g__kernel_backend_scope_int
+    \group_begin:
+      \int_gset:Nn \g__kernel_backend_scope_int { 1 }
+  }
 \cs_generate_variant:Nn \__kernel_backend_scope_begin:n { x }
+\cs_new_protected:Npn \__kernel_backend_scope:n #1
+  {
+    \__kernel_backend_literal_svg:n { <g ~ #1 > }
+    \int_gincr:N \g__kernel_backend_scope_int
+  }
+\cs_generate_variant:Nn \__kernel_backend_scope:n { x }
 %    \end{macrocode}
 % \end{macro}
+% \end{macro}
+% \end{macro}
 %
 %    \begin{macrocode}
 %</dvisvgm>
@@ -387,7 +422,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-06-29}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -56,7 +56,7 @@
 % \section{\pkg{l3backend-box} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %<@@=box>
 %    \end{macrocode}
 %
@@ -387,12 +387,12 @@
             scale ( 1 , -1 )
           "
       }
-    \__kernel_backend_scope_begin:x
+    \__kernel_backend_scope:x
       {
         clip-path =
           "url ( \c_hash_str l3cp \int_use:N \g_@@_clip_path_int ) "
       }
-    \__kernel_backend_scope_begin:n
+    \__kernel_backend_scope:n
       {
         transform =
           "
@@ -403,9 +403,6 @@
       }
     \box_use:N #1
     \__kernel_backend_scope_end:
-    \__kernel_backend_scope_end:
-    \__kernel_backend_scope_end:
-%    \skip_horizontal:n { \box_wd:N #1 }
   }
 \int_new:N \g_@@_clip_path_int
 %    \end{macrocode}
@@ -465,7 +462,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-06-29}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -56,7 +56,7 @@
 % \section{\pkg{l3backend-color} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %<@@=color>
 %    \end{macrocode}
 %
@@ -81,32 +81,27 @@
 %   spot ones (here we need a model and a tint). The \texttt{x}-type expansion
 %   is there to cover the case where \pkg{xcolor} is in use.
 %    \begin{macrocode}
-%<*package>
 \cs_new_protected:Npn \@@_backend_pickup:N #1 { }
-\AtBeginDocument
+\cs_if_exist:cT { ver at color.sty }
   {
-    \cs_if_exist:cT { ver at color.sty }
+     \cs_set_protected:Npn \@@_backend_pickup:N #1
       {
-        \cs_set_protected:Npn \@@_backend_pickup:N #1
+        \exp_args:NV \tl_if_head_is_space:nTF \current at color
           {
-            \exp_args:NV \tl_if_head_is_space:nTF \current at color
-              {
-                \tl_set:Nx #1
-                   {
-                     { spot }
-                     { \exp_after:wN \use:n \current at color \c_space_tl 1 }
-                   }
-              }
-              {
-                \exp_last_unbraced:Nx \@@_backend_pickup:w
-                  { \current at color } \s_@@_stop #1
-              }
+            \tl_set:Nx #1
+               {
+                 { \exp_after:wN \use:n \current at color }
+                 { 1 }
+               }
           }
-        \cs_new_protected:Npn \@@_backend_pickup:w #1 ~ #2 \s_@@_stop #3
-          { \tl_set:Nn #3 { {#1} {#2} } }
+          {
+            \exp_last_unbraced:Nx \@@_backend_pickup:w
+              { \current at color } \s_@@_stop #1
+          }
       }
+    \cs_new_protected:Npn \@@_backend_pickup:w #1 ~ #2 \s_@@_stop #3
+      { \tl_set:Nn #3 { {#1} {#2} } }
   }
-%</package>
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -113,30 +108,28 @@
 %
 % \begin{macro}
 %   {
-%     \@@_backend_cmyk:n  ,
-%     \@@_backend_gray:n  ,
-%     \@@_backend_rgb:n   ,
-%     \@@_backend_spot:n  ,
+%     \@@_backend_select_cmyk:n  ,
+%     \@@_backend_select_gray:n  ,
+%     \@@_backend_select_rgb:n   ,
 %     \@@_backend_select:n
 %   }
 % \begin{macro}{\@@_backend_reset:}
-% \begin{macro}{color.fc}
-%    Push the data to the stack. In the case of \texttt{dvips} also reset the
-%    drawing fill color in raw PostScript.
+% \begin{macro}{color.sc, color.fc}
+%    Push the data to the stack. In the case of \texttt{dvips} also saves the
+%    drawing color in raw PostScript.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_cmyk:n #1
+\cs_new_protected:Npn \@@_backend_select_cmyk:n #1
   { \@@_backend_select:n { cmyk ~ #1 } }
-\cs_new_protected:Npn \@@_backend_gray:n #1
+\cs_new_protected:Npn \@@_backend_select_gray:n #1
   { \@@_backend_select:n { gray ~ #1 } }
-\cs_new_protected:Npn \@@_backend_rgb:n #1
+\cs_new_protected:Npn \@@_backend_select_rgb:n #1
   { \@@_backend_select:n { rgb ~ #1 } }
-\cs_new_protected:Npn \@@_backend_spot:n #1
-  { \@@_backend_select:n {#1} }
 \cs_new_protected:Npn \@@_backend_select:n #1
   {
     \__kernel_backend_literal:n { color~push~ #1 }
 %<*dvips>
-    \__kernel_backend_postscript:n { /color.fc~{ }~def }
+    \__kernel_backend_postscript:n { /color.sc~ { ~ } ~def }
+    \__kernel_backend_postscript:n { /color.fc~ { ~ } ~def }
 %</dvips>
     \group_insert_after:N \@@_backend_reset:
   }
@@ -147,7 +140,14 @@
 % \end{macro}
 % \end{macro}
 %
+% \begin{macro}{\@@_backend_select_separation:nn}
 %    \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_select_separation:nn #1#2
+  { \@@_backend_select:n {#1} }
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
 %</dvisvgm|dvipdfmx|dvips|xdvipdfmx>
 %    \end{macrocode}
 %
@@ -166,43 +166,38 @@
 %   \cs{@@_backend_pickup:w} breaks it apart, because for instance
 %   \pkg{xcolor} sets it to be instructions to generate a color
 %    \begin{macrocode}
-%<*package>
 \cs_new_protected:Npn \@@_backend_pickup:N #1 { }
-\AtBeginDocument
+\cs_if_exist:cT { ver at color.sty }
   {
-    \cs_if_exist:cT { ver at color.sty }
+    \cs_set_protected:Npn \@@_backend_pickup:N #1
       {
-        \cs_set_protected:Npn \@@_backend_pickup:N #1
+        \exp_last_unbraced:Nx \@@_backend_pickup:w
+          { \current at color } ~ 0 ~ 0 ~ 0 \s_@@_stop #1
+      }
+    \cs_new_protected:Npn \@@_backend_pickup:w
+      #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 \s_@@_stop #7
+      {
+        \str_if_eq:nnTF {#2} { g }
+          { \tl_set:Nn #7 { { gray } {#1} } }
           {
-            \exp_last_unbraced:Nx \@@_backend_pickup:w
-              { \current at color } ~ 0 ~ 0 ~ 0 \s_@@_stop #1
-          }
-        \cs_new_protected:Npn \@@_backend_pickup:w
-          #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 \s_@@_stop #7
-          {
-            \str_if_eq:nnTF {#2} { g }
-              { \tl_set:Nn #7 { { gray } {#1} } }
+            \str_if_eq:nnTF {#4} { rg }
+              { \tl_set:Nn #7 { { rgb } { #1 ~ #2 ~ #3 } } }
               {
-                \str_if_eq:nnTF {#4} { rg }
-                  { \tl_set:Nn #7 { { rgb } { #1 ~ #2 ~ #3 } } }
-                  {
-                     \str_if_eq:nnTF {#5} { k }
-                       { \tl_set:Nn #7 { { cmyk } { #1 ~ #2 ~ #3 ~ #4 } } }
+                 \str_if_eq:nnTF {#5} { k }
+                   { \tl_set:Nn #7 { { cmyk } { #1 ~ #2 ~ #3 ~ #4 } } }
+                   {
+                     \str_if_eq:nnTF {#2} { cs }
                        {
-                         \str_if_eq:nnTF {#2} { cs }
-                           {
-                             \tl_set:Nx #7 { { spot } { \use_none:n #1 ~ #5 } }
-                           }
-                           {
-                             \tl_set:Nn #7 { { gray } { 0 } }
-                           }
+                         \tl_set:Nx #7 { { \use:n #1 } { #5 } }
                        }
-                  }
+                       {
+                         \tl_set:Nn #7 { { gray } { 0 } }
+                       }
+                   }
               }
           }
       }
   }
-%</package>
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -217,26 +212,19 @@
 %
 % \begin{macro}
 %   {
-%     \@@_backend_cmyk:n ,
-%     \@@_backend_gray:n ,
-%     \@@_backend_rgb:n  ,
-%     \@@_backend_spot:n
+%     \@@_backend_select_cmyk:n ,
+%     \@@_backend_select_gray:n ,
+%     \@@_backend_select_rgb:n
 %   }
-% \begin{macro}{\@@_backend_spot:w}
-% \begin{macro}{\@@_backend_select:n}
 % \begin{macro}{\@@_backend_reset:}
 %   Simply dump the data, but allowing for \LuaTeX{}.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_cmyk:n #1
+\cs_new_protected:Npn \@@_backend_select_cmyk:n #1
   { \@@_backend_select:n { #1 ~ k ~ #1 ~ K } }
-\cs_new_protected:Npn \@@_backend_gray:n #1
+\cs_new_protected:Npn \@@_backend_select_gray:n #1
   { \@@_backend_select:n { #1 ~ g ~ #1 ~ G } }
-\cs_new_protected:Npn \@@_backend_rgb:n #1
+\cs_new_protected:Npn \@@_backend_select_rgb:n #1
   { \@@_backend_select:n { #1 ~ rg ~ #1 ~ RG } }
-\cs_new_protected:Npn \@@_backend_spot:n #1
-  { \@@_backend_spot:w #1 \s_@@_stop }
-\cs_new_protected:Npn \@@_backend_spot:w #1 ~ #2 \s_@@_stop
-  { \@@_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } }
 \cs_new_protected:Npx \@@_backend_select:n #1
   {
     \cs_if_exist:NTF \tex_pdfextension:D
@@ -255,17 +243,242 @@
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
+%
+% \begin{macro}{\@@_backend_select_separation:nn}
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_select_separation:nn #1#2
+  { \@@_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } }
+%    \end{macrocode}
 % \end{macro}
-% \end{macro}
 %
 %    \begin{macrocode}
 %</pdfmode>
 %    \end{macrocode}
 %
+% \subsection{Fill and stroke color}
+%
+% Here, \texttt{(x)dvipdfmx} follows \texttt{pdfmode}, while for \texttt{dvips}
+% we have to manage fill and stroke color ourselves. We also handle
+% \texttt{dvisvgm} independently, as there we can create SVG directly.
+%
 %    \begin{macrocode}
-%</initex|package>
+%<*dvipdfmx|pdfmode|xdvipdfmx>
 %    \end{macrocode}
 %
+% \begin{macro}
+%   {
+%     \@@_backend_fill_cmyk:n   ,
+%     \@@_backend_fill_gray:n   ,
+%     \@@_backend_fill_rgb:n    ,
+%     \@@_backend_stroke_cmyk:n ,
+%     \@@_backend_stroke_gray:n ,
+%     \@@_backend_stroke_rgb:n
+%   }
+%   Drawing (fill/stroke) color is handled in \texttt{(x)dvipdfmx} in the
+%   same way as \texttt{pdfmode}. We use the same approach as earlier, except the
+%   color stack is not involved so the generic direct PDF operation is used.
+%   There is no worry about the nature of strokes: everything is handled
+%   automatically.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_fill_cmyk:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ k } }
+\cs_new_protected:Npn \@@_backend_fill_gray:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ g } }
+\cs_new_protected:Npn \@@_backend_fill_rgb:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ rg } }
+  \cs_new_protected:Npn \@@_backend_stroke_cmyk:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ K } }
+\cs_new_protected:Npn \@@_backend_stroke_gray:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ G } }
+\cs_new_protected:Npn \@@_backend_stroke_rgb:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ RG } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+%   {
+%     \@@_backend_fill_separation:nn,
+%     \@@_backend_stroke_separation:nn
+%   }
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_fill_separation:nn #1#2
+  { \__kernel_backend_literal_pdf:n { /#1 ~ cs ~ #2 ~ scn } }
+\cs_new_protected:Npn \@@_backend_stroke_separation:nn #1#2
+  { \__kernel_backend_literal_pdf:n { /#1 ~ CS ~ #2 ~ SCN } }
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+%</dvipdfmx|pdfmode|xdvipdfmx>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<*dvips>
+%    \end{macrocode}
+%
+% \begin{macro}
+%   {
+%     \@@_backend_fill_cmyk:n   ,
+%     \@@_backend_fill_gray:n   ,
+%     \@@_backend_fill_rgb:n    ,
+%     \@@_backend_stroke_cmyk:n ,
+%     \@@_backend_stroke_gray:n ,
+%     \@@_backend_stroke_rgb:n
+%   }
+%   All questions of saving the non-stacked data.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_fill_cmyk:n #1
+  { \__kernel_backend_postscript:n { /color.fc { #1 ~ setcmykcolor } def } }
+\cs_new_protected:Npn \@@_backend_fill_gray:n #1
+  { \__kernel_backend_postscript:n { /color.fc { #1 ~ setgray } def } }
+\cs_new_protected:Npn \@@_backend_fill_rgb:n #1
+  { \__kernel_backend_postscript:n { /color.fc { #1 ~ setrgbcolor } def } }
+  \cs_new_protected:Npn \@@_backend_stroke_cmyk:n #1
+  { \__kernel_backend_postscript:n { /color.sc { #1 ~ setcmykcolor } def } }
+\cs_new_protected:Npn \@@_backend_stroke_gray:n #1
+  { \__kernel_backend_postscript:n { /color.sc { #1 ~ setgray } def } }
+\cs_new_protected:Npn \@@_backend_stroke_rgb:n #1
+  { \__kernel_backend_postscript:n { /color.sc { #1 ~ setrgbcolor } def } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+%   {
+%     \@@_backend_fill_separation:nn,
+%     \@@_backend_stroke_separation:nn
+%   }
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_fill_separation:nn #1#2
+  { \__kernel_backend_postscript:n { /color.fc { #1 } def } }
+\cs_new_protected:Npn \@@_backend_stroke_separation:nn #1#2
+  { \__kernel_backend_postscript:n { /color.sc { #1 } def } }
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+%</dvips>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<*dvisvgm>
+%    \end{macrocode}
+%
+% \begin{macro}
+%   {
+%     \@@_backend_fill_cmyk:n   ,
+%     \@@_backend_stroke_cmyk:n
+%   }
+% \begin{macro}{\@@_backend_cmyk:nw}
+% \begin{macro}
+%   {
+%     \@@_backend_fill_gray:n   ,
+%     \@@_backend_stroke_gray:n
+%   }
+% \begin{macro}{\@@_backend_gray:nn, \@@_backend_gray_aux:n}
+% \begin{macro}
+%   {
+%     \@@_backend_fill_rgb:n   ,
+%     \@@_backend_stroke_rgb:n
+%   }
+% \begin{macro}{\@@_backend_rgb:nw}
+% \begin{macro}{\@@_backend:nnnn}
+%   For drawings in SVG, we use scopes for all colors. That
+%   requires using \texttt{RGB} values, which luckily are easy to
+%   convert here (|cmyk| to |RGB| is a fixed function).
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_fill_cmyk:n #1
+  { \@@_backend_cmyk:nw { fill } #1 \s_@@_stop }
+\cs_new_protected:Npn \@@_backend_stroke_cmyk:n #1
+  { \@@_backend_cmyk:nw { stroke } #1 \s_@@_stop }
+\cs_new_protected:Npn \@@_backend_cmyk:nw
+  #1#2 ~ #3 ~ #4 ~ #5 \s_@@_stop
+  {
+    \use:x
+      {
+        \@@_backend:nnnn
+          {#1}
+          { \fp_eval:n { -100 * ( 1 - min ( 1 , #2 + #5 ) ) } }
+          { \fp_eval:n { -100 * ( 1 - min ( 1 , #3 + #5 ) ) } }
+          { \fp_eval:n { -100 * ( 1 - min ( 1 , #4 + #5 ) ) } }
+      }
+  }
+\cs_new_protected:Npn \@@_backend_fill_gray:n #1
+  { \@@_backend_grab:nn { fill } {#1} }
+\cs_new_protected:Npn \@@_backend_stroke_gray:n #1
+  { \@@_backend_grab:nn { stroke } {#1} }
+\cs_new_protected:Npn \@@_backend_gray:nn #1#2
+  {
+    \use:x
+      {
+        \@@_backend_gray_aux:nn
+          {#1}
+          { \fp_eval:n { 100 * (#2) } }
+      }
+  }
+\cs_new_protected:Npn \@@_backend_gray_aux:nn #1#2
+  { \@@_backend:nnn {#1} {#2} {#2} {#2} }
+\cs_new_protected:Npn \@@_backend_fill_rgb:n #1
+  { \@@_backend_rgb:nw { fill } #1 \s_@@_stop }
+\cs_new_protected:Npn \@@_backend_stroke_rgb:n #1
+  { \@@_backend_rgb:nw { stroke } #1 \s_@@_stop }
+\cs_new_protected:Npn \@@_backend_rgb:nw
+  #1#2 ~ #3 ~ #4\s_@@_stop
+  {
+    \use:x
+      {
+        \@@_backend:nnnn
+          { fill }
+          { \fp_eval:n { 100 * (#2) } }
+          { \fp_eval:n { 100 * (#3) } }
+          { \fp_eval:n { 100 * (#4) } }
+      }
+  }
+\cs_new_protected:Npx \@@_backend:nnnn #1#2#3#4
+  {
+    \__kernel_backend_scope:n
+      {
+        #1 =
+         "
+           rgb
+             (
+               #2 \c_percent_str ,
+               #3 \c_percent_str ,
+               #4 \c_percent_str
+             )
+         "
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}
+%   {
+%     \@@_backend_fill_separation:nn,
+%     \@@_backend_stroke_separation:nn
+%   }
+%   At present, these are no-ops.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_fill_separation:nn #1#2
+  { }
+\cs_new_protected:Npn \@@_backend_stroke_separation:nn #1#2
+  { }
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+%</dvisvgm>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%</package>
+%    \end{macrocode}
+%
 % \end{implementation}
 %
 % \PrintIndex

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-06-29}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -56,7 +56,7 @@
 % \section{\pkg{l3backend-draw} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %<@@=draw>
 %    \end{macrocode}
 %
@@ -76,13 +76,12 @@
 % \end{macro}
 %
 % \begin{macro}{\@@_backend_begin:, \@@_backend_end:}
-% \begin{macro}{color.fc}
 %   The |ps::[begin]| special here deals with positioning but allows us to
 %   continue on to a matching |ps::[end]|: contrast with |ps:|, which positions
 %   but where we can't split material between separate calls. The
 %   |@beginspecial|/|@endspecial| pair are from |special.pro| and correct the
-%   scale and $y$-axis direction. The definition of |/color.fc| deals with fill
-%   color in paths. In contrast to \pkg{pgf}, we don't save the current point:
+%   scale and $y$-axis direction.
+%   In contrast to \pkg{pgf}, we don't save the current point:
 %   discussion with Tom Rokici suggested a better way to handle the necessary
 %   translations (see \cs{@@_backend_box_use:Nnnnn}). (Note that
 %   |@beginspecial|/|@endspecial| forms a backend scope.) The  |[begin]|/^^A
@@ -94,7 +93,6 @@
   {
     \__kernel_backend_literal:n { ps::[begin] }
     \@@_backend_literal:n { @beginspecial }
-    \@@_backend_literal:n { SDict ~ begin ~ /color.fc ~ { } ~ def ~ end }
   }
 \cs_new_protected:Npn \@@_backend_end:
   {
@@ -103,7 +101,6 @@
   }
 %    \end{macrocode}
 % \end{macro}
-% \end{macro}
 %
 % \begin{macro}{\@@_backend_scope_begin:, \@@_backend_scope_end:}
 %   Scope here may need to contain saved definitions, so the entire memory
@@ -202,7 +199,10 @@
   { \@@_backend_literal:n { closepath } }
 \cs_new_protected:Npn \@@_backend_stroke:
   {
+    \@@_backend_literal:n { gsave }
+    \@@_backend_literal:n { color.sc }
     \@@_backend_literal:n { stroke }
+    \@@_backend_literal:n { grestore }
     \bool_if:NT \g_@@_draw_clip_bool
       {
         \@@_backend_literal:x
@@ -243,6 +243,7 @@
 \cs_new_protected:Npn \@@_backend_fillstroke:
   {
     \@@_backend_literal:n { gsave }
+    \@@_backend_literal:n { color.sc }
     \@@_backend_literal:n { color.fc }
     \@@_backend_literal:x
       {
@@ -333,54 +334,6 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}
-%   {
-%     \@@_backend_color_fill_cmyk:n   ,
-%     \@@_backend_color_stroke_cmyk:n
-%   }
-% \begin{macro}
-%   {
-%     \@@_backend_color_fill_gray:n   ,
-%     \@@_backend_color_stroke_gray:n
-%   }
-% \begin{macro}
-%   {
-%     \@@_backend_color_fill_rgb:n   ,
-%     \@@_backend_color_stroke_rgb:n
-%   }
-% \begin{macro}{\@@_backend_color_fill:n, \@@_backend_color_stroke:n}
-%   For \texttt{dvips}, we can use the standard color stack to deal with
-%   stroke color, but for fills have to switch to raw PostScript. This is
-%   thus not handled by the stack, but the context is very restricted. See
-%   also how fills are implemented.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_color_fill_cmyk:n #1
-  { \@@_backend_color_fill:n { #1 ~ setcmykcolor } }
-\cs_new_protected:Npn \@@_backend_color_stroke_cmyk:n #1
-  { \@@_backend_color_stroke:n { cmyk ~ #1 } }
-\cs_new_protected:Npn \@@_backend_color_stroke_gray:n #1
-  { \@@_backend_color_fill:n { #1 ~ setgray } }
-\cs_new_protected:Npn \@@_backend_color_fill_gray:n #1
-  { \@@_backend_color_stroke:n { gray ~ #1 } }
-\cs_new_protected:Npn \@@_backend_color_fill_rgb:n #1
-  { \@@_backend_color_fill:n { #1 ~ setrgbcolor } }
-\cs_new_protected:Npn \@@_backend_color_stroke_rgb:n #1
-  { \@@_backend_color_stroke:n { rgb ~ #1 } }
-\cs_new_protected:Npn \@@_backend_color_fill:n #1
-  { 
-    \__kernel_backend_postscript:n
-      { /color.fc ~ { #1 } ~ def }
-  }
-\cs_new_protected:Npn \@@_backend_color_stroke:n #1
-  {
-    \__kernel_backend_literal:n { color~push~#1 } 
-    \group_insert_after:N \@@_color_reset:
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
 %
 % \begin{macro}{\@@_backend_cm:nnnn}
 %   In \texttt{dvips}, keeping the transformations in line with the engine
@@ -620,66 +573,6 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}
-%   {
-%     \@@_backend_color_fill_cmyk:n   ,
-%     \@@_backend_color_stroke_cmyk:n
-%   }
-% \begin{macro}
-%   {
-%     \@@_backend_color_fill_gray:n   ,
-%     \@@_backend_color_stroke_gray:n
-%   }
-% \begin{macro}
-%   {
-%     \@@_backend_color_fill_rgb:n   ,
-%     \@@_backend_color_stroke_rgb:n
-%   }
-% \begin{macro}{\@@_backend_color_select:n, \@@_backend_color_select:x}
-% \begin{macro}{\@@_backend_color_reset:}
-%    Color has to be split between \texttt{(x)dvipdfmx} and the PDF engines
-%    as there is no color stack for fill/stroke separation in the former.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_color_fill_cmyk:n #1
-  { \@@_backend_color_select:n { #1 ~ k } }
-\cs_new_protected:Npn \@@_backend_color_stroke_cmyk:n #1
-  { \@@_backend_color_select:n { #1 ~ K } }
-\cs_new_protected:Npn \@@_backend_color_fill_gray:n #1
-  { \@@_backend_color_select:n { #1 ~ g } }
-\cs_new_protected:Npn \@@_backend_color_stroke_gray:n #1
-  { \@@_backend_color_select:n { #1 ~ G } }
-\cs_new_protected:Npn \@@_backend_color_fill_rgb:n #1
-  { \@@_backend_color_select:n { #1 ~ rg } }
-\cs_new_protected:Npn \@@_backend_color_stroke_rgb:n #1
-  { \@@_backend_color_select:n { #1 ~ RG } }
-%<*pdfmode>
-\cs_new_protected:Npx \@@_backend_color_select:n #1
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D colorstack }
-      { \tex_pdfcolorstack:D }
-        \exp_not:N \l__kernel_color_stack_int push {#1}
-      \group_insert_after:N \exp_not:N \@@_backend_color_reset:
-  }
-\cs_new_protected:Npx \@@_backend_color_reset:
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D colorstack }
-      { \tex_pdfcolorstack:D }
-        \exp_not:N \l__kernel_color_stack_int pop \scan_stop:
-  }
-%</pdfmode>
-%<*dvipdfmx|xdvipdfmx>
-\cs_new_eq:NN \@@_backend_color_select:n \__kernel_backend_literal_pdf:n
-%</dvipdfmx|xdvipdfmx>
-\cs_generate_variant:Nn \@@_backend_color_select:n { x }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
 % \begin{macro}{\@@_backend_cm:nnnn}
 % \begin{macro}{\@@_backend_cm_aux:nnnn}
 %   Another split here between \texttt{pdfmode} and \texttt{(x)dvipdfmx}.
@@ -883,56 +776,13 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_backend_begin:
   {
-    \@@_backend_scope_begin:
-    \@@_backend_scope:n { transform="translate({?x},{?y})~scale(1,-1)" }
+    \__kernel_backend_scope_begin:
+    \__kernel_backend_scope:n { transform="translate({?x},{?y})~scale(1,-1)" }
   }
-\cs_new_protected:Npn \@@_backend_end:
-  { \@@_backend_scope_end: }
+\cs_new_eq:NN \@@_backend_end: \__kernel_backend_scope_end:
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\@@_backend_scope_begin:, \@@_backend_scope_end:}
-% \begin{macro}{\@@_backend_scope:n, \@@_backend_scope:x}
-% \begin{variable}{\g_@@_draw_scope_int, \l_@@_draw_scope_int}
-%   Several settings that with other backends are \enquote{stand alone} have
-%   to be given as part of a scope in SVG. As a result, there is a need to
-%   provide a mechanism to automatically close these extra scopes. That is
-%   done using a dedicated function and a pair of tracking variables. Within
-%   each graphics scope we use a global variable to do the work, with a group
-%   used to save the value between scopes. The result is that no direct action
-%   is needed when creating a scope.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_scope_begin:
-  {
-    \int_set_eq:NN
-      \l_@@_draw_scope_int
-      \g_@@_draw_scope_int
-    \group_begin:
-      \int_gzero:N \g_@@_draw_scope_int
-  }
-\cs_new_protected:Npn \@@_backend_scope_end:
-  {
-      \prg_replicate:nn
-        { \g_@@_draw_scope_int }
-        { \@@_backend_literal:n { </g> } }
-    \group_end:
-    \int_gset_eq:NN
-      \g_@@_draw_scope_int
-      \l_@@_draw_scope_int
-  }
-\cs_new_protected:Npn \@@_backend_scope:n #1
-  {
-    \@@_backend_literal:n { <g~ #1 > }
-    \int_gincr:N \g_@@_draw_scope_int
-  }
-\cs_generate_variant:Nn \@@_backend_scope:n { x }
-\int_new:N \g_@@_draw_scope_int
-\int_new:N \l_@@_draw_scope_int
-%    \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-%
 % \begin{macro}{\@@_backend_moveto:nn, \@@_backend_lineto:nn}
 % \begin{macro}{\@@_backend_rectangle:nnnn}
 % \begin{macro}{\@@_backend_curveto:nnnnnn}
@@ -1158,100 +1008,6 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}
-%   {
-%     \@@_backend_color_fill_cmyk:n   ,
-%     \@@_backend_color_stroke_cmyk:n
-%   }
-% \begin{macro}{\@@_backend_color_cmyk:nw}
-% \begin{macro}
-%   {
-%     \@@_backend_color_fill_gray:n   ,
-%     \@@_backend_color_stroke_gray:n
-%   }
-% \begin{macro}{\@@_backend_color_gray:nn, \@@_backend_color_gray_aux:n}
-% \begin{macro}
-%   {
-%     \@@_backend_color_fill_rgb:n   ,
-%     \@@_backend_color_stroke_rgb:n
-%   }
-% \begin{macro}{\@@_backend_color_rgb:nw}
-% \begin{macro}{\@@_backend_color:nnnn}
-%   For drawings in SVG, we use scopes for all colors. That
-%   requires using \texttt{RGB} values, which luckily are easy to
-%   convert here (|cmyk| to |RGB| is a fixed function).
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_color_fill_cmyk:n #1
-  { \@@_backend_color_cmyk:nw { fill } #1 \s_@@_stop }
-\cs_new_protected:Npn \@@_backend_color_stroke_cmyk:n #1
-  { \@@_backend_color_cmyk:nw { stroke } #1 \s_@@_stop }
-\cs_new_protected:Npn \@@_backend_color_cmyk:nw
-  #1#2 ~ #3 ~ #4 ~ #5 \s_@@_stop
-  {
-    \use:x
-      {
-        \@@_backend_color:nnnn
-          {#1}
-          { \fp_eval:n { -100 * ( 1 - min ( 1 , #2 + #5 ) ) } }
-          { \fp_eval:n { -100 * ( 1 - min ( 1 , #3 + #5 ) ) } }
-          { \fp_eval:n { -100 * ( 1 - min ( 1 , #4 + #5 ) ) } }
-      }
-  }
-\cs_new_protected:Npn \@@_backend_color_fill_gray:n #1
-  { \@@_backend_color_grab:nn { fill } {#1} }
-\cs_new_protected:Npn \@@_backend_color_stroke_gray:n #1
-  { \@@_backend_color_grab:nn { stroke } {#1} }
-\cs_new_protected:Npn \@@_backend_color_gray:nn #1#2
-  {
-    \use:x
-      {
-        \@@_backend_color_gray_aux:nn
-          {#1}
-          { \fp_eval:n { 100 * (#2) } }
-      }
-  }
-\cs_new_protected:Npn \@@_backend_color_gray_aux:nn #1#2
-  { \@@_backend_color:nnn {#1} {#2} {#2} {#2} }
-\cs_new_protected:Npn \@@_backend_color_fill_rgb:n #1
-  { \@@_backend_color_rgb:nw { fill } #1 \s_@@_stop }
-\cs_new_protected:Npn \@@_backend_color_stroke_rgb:n #1
-  { \@@_backend_color_rgb:nw { stroke } #1 \s_@@_stop }
-\cs_new_protected:Npn \@@_backend_color_rgb:nw
-  #1#2 ~ #3 ~ #4\s_@@_stop
-  {
-    \use:x
-      {
-        \@@_backend_color:nnnn
-          { fill }
-          { \fp_eval:n { 100 * (#2) } }
-          { \fp_eval:n { 100 * (#3) } }
-          { \fp_eval:n { 100 * (#4) } }
-      }
-  }
-\cs_new_protected:Npx \@@_backend_color:nnnn #1#2#3#4
-  {
-    \@@_backend_scope:n
-      {
-        #1 =
-         "
-           rgb
-             (
-               #2 \c_percent_str ,
-               #3 \c_percent_str ,
-               #4 \c_percent_str
-             )
-         "
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
 % \begin{macro}{\@@_backend_cm:nnnn}
 %   The four arguments here are floats (the affine matrix), the last
 %   two are a displacement vector. 
@@ -1298,7 +1054,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-06-29}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -56,7 +56,7 @@
 % \section{\pkg{l3backend-graphics} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %<@@=graphics>
 %    \end{macrocode}
 %
@@ -69,13 +69,7 @@
 % \begin{macro}{\@@_backend_getbb_eps:n}
 %   Simply use the generic function.
 %    \begin{macrocode}
-%<*initex>
-\use:n
-%</initex>
-%<*package>
-\AtBeginDocument
-%</package>
-  { \cs_new_eq:NN \@@_backend_getbb_eps:n \graphics_read_bb:n }
+\cs_new_eq:NN \@@_backend_getbb_eps:n \graphics_read_bb:n
 %    \end{macrocode}
 % \end{macro}
 %
@@ -297,13 +291,7 @@
 %   Simply use the generic functions: only for \texttt{dvipdfmx} in the
 %   extraction cases.
 %    \begin{macrocode}
-%<*initex>
-\use:n
-%</initex>
-%<*package>
-\AtBeginDocument
-%</package>
-  { \cs_new_eq:NN \@@_backend_getbb_eps:n \graphics_read_bb:n }
+\cs_new_eq:NN \@@_backend_getbb_eps:n \graphics_read_bb:n
 %<*dvipdfmx>
 \cs_new_protected:Npn \@@_backend_getbb_jpg:n #1
   {
@@ -560,13 +548,7 @@
 % \begin{macro}{\@@_backend_getbb_eps:n}
 %   Simply use the generic function.
 %    \begin{macrocode}
-%<*initex>
-\use:n
-%</initex>
-%<*package>
-\AtBeginDocument
-%</package>
-  { \cs_new_eq:NN \@@_backend_getbb_eps:n \graphics_read_bb:n }
+\cs_new_eq:NN \@@_backend_getbb_eps:n \graphics_read_bb:n
 %    \end{macrocode}
 % \end{macro}
 %
@@ -650,7 +632,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-06-29}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -59,6 +59,14 @@
 %<*dvips&header>
 %    \end{macrocode}
 %
+% \begin{macro}{color.sc, color.fc}
+%   Empty definitions for color at the top level.
+%    \begin{macrocode}	
+/color.sc { } def
+/color.fc { } def
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{pdf.globaldict}
 %   A small global dictionary for backend use.
 %    \begin{macrocode}
@@ -79,7 +87,6 @@
 %   is done here to allow for |Resolution|. The total height of a rectangle
 %   (an array) needs a little maths, in contrast to simply extracting a value.
 %    \begin{macrocode}
-
 /pdf.cvs { 65534 string cvs } def
 /pdf.dvi.pt { 72.27 mul Resolution div } def
 /pdf.pt.dvi { 72.27 div Resolution mul } def
@@ -351,7 +358,7 @@
         /x
           {
             0 exch rmoveto
-            SDict~
+            SDict
             begin
             currentpoint
             pdf.originy ne exch pdf.originx ne or

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-06-29}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -56,7 +56,7 @@
 % \section{\pkg{l3backend-pdf} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %<@@=pdf>
 %    \end{macrocode}
 %
@@ -458,14 +458,9 @@
     \hbox_set:Nn \l_@@_backend_model_box { Gg }
     \exp_args:Nx \@@_backend_link_outerbox:n
       {
-%<*initex>
-         \l_galley_total_left_margin_dim
-%</initex>
-%<*package>
          \int_if_odd:nTF { \value { page } }
            { \oddsidemargin }
            { \evensidemargin }
-%</package>
       }
     \box_move_down:nn { \box_dp:N \l_@@_backend_content_box }
       { \hbox:n { \__kernel_backend_postscript:n { pdf.save.linkll } } }
@@ -527,12 +522,7 @@
           [
             \dim_to_decimal:n {#1} ~
             \dim_to_decimal:n { -\box_dp:N \l_@@_backend_model_box } ~
-%<*initex>
-            \dim_to_decimal:n { #1 + \l_galley_text_width_dim } ~
-%</initex>
-%<*package>
             \dim_to_decimal:n { #1 + \textwidth } ~
-%</package>
             \dim_to_decimal:n { \box_ht:N \l_@@_backend_model_box }
           ]
           [ exch { pdf.pt.dvi } forall ] def
@@ -1314,18 +1304,13 @@
 %   not rotate. As such, we need to know if landscape is active.
 %    \begin{macrocode}
 \bool_new:N \g_@@_landscape_bool
-%<*package>
-\AtBeginDocument
+\cs_if_exist:NT \landscape
   {
-    \cs_if_exist:NT \landscape
-      {
-        \tl_put_right:Nn \landscape
-          { \bool_gset_true:N \g_@@_landscape_bool }
-        \tl_put_left:Nn \endlandscape
-          { \bool_gset_false:N \g_@@_landscape_bool }
-      }
+    \tl_put_right:Nn \landscape
+      { \bool_gset_true:N \g_@@_landscape_bool }
+    \tl_put_left:Nn \endlandscape
+      { \bool_gset_false:N \g_@@_landscape_bool }
   }
-%</package>
 %    \end{macrocode}
 % \end{variable}
 %
@@ -1628,7 +1613,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -125,14 +125,12 @@
 % Our working unit is the scaled second, namely $2^{-16}$ seconds.
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3benchmark}{2020-07-17}{}
+\ProvidesExplPackage{l3benchmark}{2020-08-07}{}
   {L3 Experimental benchmarking}
-%</package>
 %    \end{macrocode}
 %
 % \subsection{Additions to \pkg{l3sys}: elapsed time}
@@ -576,7 +574,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -95,7 +95,7 @@
 % 
 % Additional models may be created to allow mixing of spot colors
 % with each other or with those from other models. See
-% Section~\ref{l3color:sec:spot} for more detail of spot color support.
+% Section~\ref{l3color:sec:new-models} for more detail of spot color support.
 %
 % When color is selected by model, the \meta{values} given are specified as
 % a comma-separated list. The length of the list will therefore be determined
@@ -215,6 +215,9 @@
 %
 % \section{Selecting colors}
 %
+% General selection of color is safe when split across pages: a stack is
+% used to ensure that the correct color is re-selected on the new page.
+%
 % \begin{function}{\color_select:n}
 %   \begin{syntax}
 %     \cs{color_select:n} \Arg{color expression}
@@ -237,6 +240,37 @@
 %   and similar are not influenced by this setting.
 % \end{variable}
 %
+% \section{Colors for drawing: fills and strokes}
+%
+% Colors for drawing operations and so forth are split into strokes and fills
+% (the latter may also be referred to as non-stroke color). These operations
+% \emph{may} apply to text, but this is backend-depended and the general
+% \cs{color_select:n(n)} should be used for typeset text. In contrast to
+% general color, these operations are \emph{not} stacked and thus must
+% \emph{not} split across pages. Also, an appropriate scope must be applied
+% to the color change, for example \cs{draw_begin:}/\cs{draw_end:}.
+%
+% \begin{function}{\color_fill:n, \color_stroke:n}
+%   \begin{syntax}
+%     \cs{color_fill:n} \Arg{color expression}
+%   \end{syntax}
+%   Parses the \meta{color expression} and then activates the resulting
+%   color specification for filling or stroking.
+% \end{function}
+%
+% \begin{function}{\color_fill:nn, \color_stroke:nn}
+%   \begin{syntax}
+%     \cs{color_fill:nn} \Arg{model(s)} \Arg{value(s)}
+%   \end{syntax}
+%   Activates the color specification equivalent to the \meta{model(s)} and
+%   \meta{value(s)} for filling or stroking.
+% \end{function}
+%
+% \begin{variable}{color.fc, color.sc}
+%   When using \texttt{dvips}, these PostScript variables hold the fill and
+%   stroke color, respectively.
+% \end{variable}
+%
 % \section{Multiple color models}
 %
 % When selecting or setting a color with an explicit model, it is possible
@@ -302,9 +336,60 @@
 %   assigns the data to the \meta{tl}.
 % \end{function}
 %
-% \section{Spot colors}
-% \label{l3color:sec:spot}
+% \section{Creating new color models}
+% \label{l3color:sec:new-models}
 %
+% Additional color models are required to support specialist workflows, for
+% example those involving separations (see
+% \url{https://helpx.adobe.com/indesign/using/spot-process-colors.html}
+% for details of the use of separations in print). Color models may be split
+% into families; in the case of the basic \texttt{cmyk}, \texttt{gray}
+% and \texttt{rgb} models, the family and the model itself are synonymous. This
+% is not generally the case: see the PDF reference for more details. 
+% 
+% \begin{function}{\color_model_new:nnn}
+%   \begin{syntax}
+%     \cs{color_model_new:nnn} \Arg{model} \Arg{family} \Arg{params}
+%   \end{syntax}
+%   Creates a new \meta{model} which is derived from the color model \meta{family}.
+%   The latter should be one of
+%   \begin{itemize}
+%     \item \texttt{Separation}
+%   \end{itemize}
+%   (The \meta{family} may be given in mixed case as-in the PDF reference:
+%   internally, case of these strings is folded.)
+%   Depending on the \meta{family}, one or more \meta{params} are mandatory or
+%   optional.
+% \end{function}
+%
+% For a \texttt{Separation} space, there are three \emph{compulsory} keys.
+% \begin{itemize}
+%   \item \texttt{name} The name of the Separation, for example the formal
+%     name of a spot color ink. Such a \meta{name} may contain spaces, etc.,
+%     which are not permitted in the \meta{model}.
+%   \item \texttt{alternative-model} An alternative device colorspace, one of
+%     \texttt{cmyk}, \texttt{rgb}, \texttt{gray} or \texttt{cielab}. The three
+%     parameter-based models work as described above; see below for
+%     details of CIELAB colors.
+%   \item \texttt{alternative-values} A comma-separated list of values
+%     appropriate to the \texttt{alternative-model}. This information is used by
+%     the PDF application if the \texttt{Separation} is not available.
+% \end{itemize}
+%
+% CIELAB color separations are created using the
+% \texttt{alternative-model = cielab} setting. These colors must also have an
+% \texttt{illuminant} key, one of \texttt{a}, \texttt{c}, \texttt{e},
+% \texttt{d50}, \texttt{d55}, \texttt{d65} or \texttt{d75}. The
+% \texttt{alternative-values} in this case are the three parameters $L*$, $a*$
+% and $b*$ of the CIELAB model. Full details of this device-independent color
+% approach are given in the documentation to the \pkg{colorspace} package.
+%
+% CIELAB colors \emph{cannot} be converted into other device-dependent color
+% spaces, and as such, mixing can only occur if colors set up using the CIELAB
+% model are also given with an alternative parameter-based model. If that is
+% not the case, \pkg{l3color} will fallback to using black as the colorant in
+% any mixing.
+%
 % \end{documentation}
 %
 % \begin{implementation}
@@ -312,7 +397,7 @@
 % \section{\pkg{l3color} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -320,10 +405,8 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3color}{2020-07-17}{}
+\ProvidesExplPackage{l3color}{2020-08-07}{}
   {L3 Experimental color support}
-%</package>
 %    \end{macrocode}
 %
 % \subsection{Predefined color names}
@@ -419,10 +502,12 @@
 \cs_generate_variant:Nn \@@_convert:nnN { VV }
 \cs_new_protected:Npn \@@_convert:nnnN #1#2#3#4
   {
-    \str_if_eq:nnT {#1} { spot } % TO DO!!!
-      { }
     \tl_set:Nx #4
-      { \use:c { @@_convert_ #1 _ #2 :w } #3 ~ 0 ~ 0 ~ 0 \s_@@_stop }
+      {
+        \cs_if_exist:cTF { @@_convert_ #1 _ #2 :w }
+          { \use:c { @@_convert_ #1 _ #2 :w } #3 ~ 0 ~ 0 ~ 0 \s_@@_stop }
+          { \use:c { c_@@_fallback_ #2 _tl } }
+      }
   }
 \cs_generate_variant:Nn \@@_convert:nnnN { nV , nnV }
 \cs_new:Npn \@@_convert_gray_rgb:w #1 ~ #2 \s_@@_stop
@@ -993,6 +1078,41 @@
 % \end{macro}
 % \end{macro}
 %
+% \subsection{Fill and stroke color}
+%
+% \begin{macro}{\color_fill:n, \color_stroke:n}
+% \begin{macro}{\color_fill:nn, \color_stroke:nn}
+% \begin{macro}{\@@_draw:nnn}
+%    \begin{macrocode}
+\cs_new_protected:Npn \color_fill:n #1
+  {
+    \@@_parse:nN {#1} \l_@@_current_tl
+    \exp_after:wN \@@_draw:nnn \l_@@_current_tl { fill }
+  }
+\cs_new_protected:Npn \color_stroke:n #1
+  {
+    \@@_parse:nN {#1} \l_@@_current_tl
+    \exp_after:wN \@@_draw:nnn \l_@@_current_tl { stroke }
+  }
+\cs_new_protected:Npn \color_fill:nn #1#2
+  {
+    \@@_select_main:Nw \l_@@_current_tl
+      #1 / / \s_@@_mark #2 / / \s_@@_stop
+    \exp_after:wN \@@_draw:nnn \l_@@_current_tl { fill }
+  }
+\cs_new_protected:Npn \color_stroke:nn #1#2
+  {
+    \@@_select_main:Nw \l_@@_current_tl
+      #1 / / \s_@@_mark #2 / / \s_@@_stop
+    \exp_after:wN \@@_draw:nnn \l_@@_current_tl { stroke }
+  }
+\cs_new_protected:Npn \@@_draw:nnn #1#2#3
+  { \use:c { @@_backend_ #3 _ #1 :n } {#2} }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
 % \subsection{Defining named colors}
 %
 % \begin{variable}{\l_@@_named_tl}
@@ -1279,6 +1399,357 @@
 % \end{macro}
 % \end{macro}
 %
+% \subsection{Additional color models}
+%
+% \begin{variable}{\l_@@_internal_prop}
+%    \begin{macrocode}
+\prop_new:N \l_@@_internal_prop
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\g_@@_separation_int}
+%   A tracker for the total number of separations.
+%    \begin{macrocode}
+\int_new:N \g_@@_separation_int
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}
+%   {
+%     \c_@@_model_whitepoint_cielab_a_tl   ,
+%     \c_@@_model_whitepoint_cielab_b_tl   ,
+%     \c_@@_model_whitepoint_cielab_e_tl   ,
+%     \c_@@_model_whitepoint_cielab_d50_tl ,
+%     \c_@@_model_whitepoint_cielab_d55_tl ,
+%     \c_@@_model_whitepoint_cielab_d65_tl ,
+%     \c_@@_model_whitepoint_cielab_d75_tl
+%   }
+%   Whitepoint data for the CIELAB profiles. 
+%    \begin{macrocode}
+\tl_const:Nn \c_@@_model_whitepoint_cielab_a_tl      { 1.0985 ~ 1 ~ 0.3558 }
+\tl_const:Nn \c_@@_model_whitepoint_cielab_b_tl      { 0.9807~ 1 ~ 1.1822 }
+\tl_const:Nn \c_@@_model_whitepoint_cielab_e_tl      { 1 ~ 1 ~ 1 }
+\tl_const:cn { c_@@_model_whitepoint_cielab_d50_tl } { 0.9642 ~, 1 ~ 0.8251 }
+\tl_const:cn { c_@@_model_whitepoint_cielab_d55_tl } { 0.9568 ~ 1 ~ 0.9214 }
+\tl_const:cn { c_@@_model_whitepoint_cielab_d65_tl } { 0.9504 ~ 1 ~ 1.0888 }
+\tl_const:cn { c_@@_model_whitepoint_cielab_d75_tl } { 0.9497 ~ 1 ~ 1.2261 }
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\c_@@_model_range_cielab_tl}
+%   The range for CIELAB color spaces.
+%    \begin{macrocode}
+\tl_const:Nn \c_@@_model_range_cielab_tl { -128 ~ 127 ~ -128 ~ 127 }
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\color_model_new:nnn, \@@_model_new:nnn}
+% \begin{macro}{\@@_model_separation:n}
+% \begin{macro}{\@@_model_separation:nn}
+% \begin{macro}{\@@_model_separation:nnn}
+% \begin{macro}{\@@_model_separation:w}
+% \begin{macro}
+%   {
+%     \@@_model_separation_cmyk:nnnnnn ,
+%     \@@_model_separation_gray:nnnnnn ,
+%     \@@_model_separation_rgb:nnnnnn
+%   }
+% \begin{macro}{\@@_model_convert:nnn}
+% \begin{macro}{\@@_model_separation_cielab:nnnnnn}
+% \begin{macro}{\@@_model_separation_cielab:nnnnnnn}
+% \begin{macro}{\@@_model_separation_init:nnnnn}
+% \begin{macro}{\@@_model_separation_init_cielab:n}
+% \begin{macro}{\@@_model_separation_init_cielab:nnnnn}
+%   Set up a new model: in general this has to be handled by a family-dependent
+%   function. To avoid some \enquote{interesting} questions with casing, we
+%   fold the case of the family name. The key--value list should always be
+%   present, so we convert it up-front to a |prop|, then deal with the detail
+%   on a per-family basis.
+%    \begin{macrocode}
+\cs_new_protected:Npn \color_model_new:nnn #1#2#3
+  {
+    \exp_args:Nee \@@_model_new:nnn
+      { \tl_to_str:n {#1} }
+      { \str_foldcase:n {#2} } {#3}
+  }
+\cs_new_protected:Npn \@@_model_new:nnn #1#2#3
+  {
+    \cs_if_exist:cTF { @@_parse_model_ #1 :w }
+      {
+        \__kernel_msg_error:nnn { color } { model-already-defined } {#1}
+      }
+      {
+        \cs_if_exist:cTF { @@_model_ #2 :n }
+          {
+            \prop_set_from_keyval:Nn \l_@@_internal_prop {#3}
+            \use:c { @@_model_ #2 :n } {#1}
+          }
+          {
+            \__kernel_msg_error:nnn { color } { unknown-model-type } {#2}
+          }
+      }
+  }
+%    \end{macrocode}
+%   Separations must have a \enquote{real} name, which is pretty easy to find.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_model_separation:n #1
+  {
+    \prop_get:NnNTF \l_@@_internal_prop { name }
+      \l_@@_internal_tl
+      {
+        \exp_args:NV \@@_model_separation:nn
+          \l_@@_internal_tl {#1}
+      }
+      {
+        \__kernel_msg_error:nnn { color }
+          { separation-requires-name } {#1}
+      }
+  }
+%    \end{macrocode}
+%   We have two keys to find at this stage: the alternative space model
+%   and linked values.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_model_separation:nn #1#2
+  {
+    \prop_get:NnNTF \l_@@_internal_prop { alternative-model }
+      \l_@@_internal_tl
+      {
+        \exp_args:NV \@@_model_separation:nnn
+          \l_@@_internal_tl {#2} {#1}
+      }
+      {
+        \__kernel_msg_error:nnn { color }
+          { separation-alternative-model } {#2}
+      }
+  }
+\cs_new_protected:Npn \@@_model_separation:nnn #1#2#3
+  {
+    \cs_if_exist:cTF { @@_model_separation_ #1 :nnnnnn }
+      {
+        \prop_get:NnNTF \l_@@_internal_prop { alternative-values }
+          \l_@@_internal_tl
+          {
+            \exp_after:wN \@@_model_separation:w \l_@@_internal_tl
+              , 0 , 0 , 0 , 0 \s_@@_stop {#2} {#3} {#1}
+          }
+          {
+            \__kernel_msg_error:nnn { color }
+              { separation-alternative-values } {#2}
+          }
+      }
+      {
+        \__kernel_msg_error:nnn { color }
+          { unknown-alternative-model } {#1}
+      }
+  }
+%    \end{macrocode}
+%   As each alternative space leads to a different requirement for conversion,
+%   and as there are only a small number of choices, we manually split the data
+%   and then set up. Notice that mixing tints is really just the same
+%   as mixing \texttt{gray}. The \texttt{white} color is special, as it allows
+%   tints to be adjusted without an additional color space. To make sure the
+%   data is set for that at all group levels, we need to work on a per-level
+%   basis. Within the output, only the set-up needs the \enquote{real} name
+%   of the colorspace: we use a simple tracking number for general usage
+%   as this is a clear namespace without issues of escaping chars.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_model_separation:w
+  #1 , #2 , #3 , #4 , #5 \s_@@_stop #6#7#8
+  {
+    \int_gincr:N \g_@@_separation_int
+    \tl_const:cn { c_@@_fallback_ #6 _tl } { 1 }
+    \cs_new_eq:cN { @@_parse_mix_ #6 :nw } \@@_parse_mix_gray:nw
+    \cs_new:cpn { @@_parse_model_ #6 :w } ##1 , ##2 \s_@@_stop
+      { {#6} { \@@_parse_number:n {##1} } }
+    \clist_map_inline:nn { fill , stroke , select }
+      {
+        \cs_new_protected:cpx { @@_backend_ ##1 _ #6 :n } ####1
+          {
+            \exp_not:c { @@_backend_ ##1 _ separation:nn }
+              { color \int_use:N \g_@@_separation_int } {####1}
+          }
+      }
+    \use:c { @@_model_separation_ #8 :nnnnnn }
+      {#6} {#7} {#1} {#2} {#3} {#4}
+    \cs_new_protected:cpx { @@_model_ #6 _white: }
+      {
+        \prop_put:Nnn \exp_not:N \l_@@_named_white_prop {#6} { 0 }
+        \exp_not:N \int_compare:nNnF { \tex_currentgrouplevel:D } = 0
+          { \group_insert_after:N \exp_not:c { @@_model_ #6 _ white: } }
+      }
+    \use:c { @@_model_ #6 _white: }
+  }
+\cs_new_protected:Npn \@@_model_separation_cmyk:nnnnnn #1#2#3#4#5#6
+  {
+    \cs_new:cpn { @@_convert_ #1 _cmyk:w } ##1 ~ ##2 \s_@@_stop
+      {
+         \fp_eval:n {##1 * #3} ~
+         \fp_eval:n {##1 * #4} ~
+         \fp_eval:n {##1 * #5} ~
+         \fp_eval:n {##1 * #6}
+      }
+    \@@_model_convert:nnn {#1} { cmyk } { rgb }
+    \@@_model_convert:nnn {#1} { cmyk } { gray }
+    \@@_model_separation_init:nnnnn {#2} { /DeviceCMYK } { }
+      { 0 ~ 0 ~ 0 ~ 0 } { #3 ~ #4 ~ #5 ~ #6 }
+  }
+\cs_new_protected:Npn \@@_model_separation_rgb:nnnnnn #1#2#3#4#5#6
+  {
+    \cs_new:cpn { @@_convert_ #1 _rgb:w } ##1 ~ ##2 \s_@@_stop
+      {
+         \fp_eval:n {##1 * #3} ~
+         \fp_eval:n {##1 * #4} ~
+         \fp_eval:n {##1 * #5}
+      }
+    \@@_model_convert:nnn {#1} { rgb } { cmyk }
+    \@@_model_convert:nnn {#1} { rgb } { gray }
+    \@@_model_separation_init:nnnnn {#2} { /DeviceRGB } { }
+      { 0 ~ 0 ~ 0 } { #3 ~ #4 ~ #5 }
+  }
+\cs_new_protected:Npn \@@_model_separation_gray:nnnnnn #1#2#3#4#5#6
+  {
+    \cs_new:cpn { @@_convert_ #1 _cmyk:w } ##1 ~ ##2 \s_@@_stop
+      {
+        \fp_eval:n {##1 * #3} ~
+        \fp_eval:n {##1 * #3} ~
+        \fp_eval:n {##1 * #3} ~
+        \fp_eval:n {##1 * #3}
+      }
+    \cs_new:cpn { @@_convert_ #1 _gray:w } ##1 ~ ##2 \s_@@_stop
+      { \fp_eval:n {##1 * #3} }
+    \cs_new:cpn { @@_convert_ #1 _rgb:w } ##1 ~ ##2 \s_@@_stop
+      {
+        \fp_eval:n {##1 * #3} ~
+        \fp_eval:n {##1 * #3} ~
+        \fp_eval:n {##1 * #3}
+      }
+    \@@_model_separation_init:nnnnn {#2} { /DeviceGray } { } { 0 } {#3}
+  }
+%    \end{macrocode}
+%   Generic model conversion \emph{via} an alternative intermediate.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_model_convert:nnn #1#2#3
+  {
+    \cs_new:cpx { @@_convert_ #1 _ #3 :w } ##1 ~ ##2 \s_@@_stop
+      {
+        \exp_not:N \exp_args:NNe \exp_not:N \use:nn
+        \exp_not:c { @@_convert_  #2 _ #3 :w }
+          { \exp_not:c { @@_convert_ #1 _ #2 :w } ##1 ~ ##2 \s_@@_stop }
+          \c_space_tl \exp_not:N \s_@@_stop
+      }
+  }
+%    \end{macrocode}
+%   Setting up for CIELAB needs a bit more work: there is the illuminant and
+%   the need for an appropriate object.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_model_separation_cielab:nnnnnn #1#2#3#4#5#6
+  {
+    \prop_get:NnNF \l_@@_internal_prop { illuminant }
+      \l_@@_internal_tl
+      {
+        \__kernel_msg_error:nnn { color }
+          { cielab-requires-illuminant } {#1}
+        \tl_set:Nn \l_@@_internal_tl { d50 }
+      }
+    \exp_args:NV \@@_model_separation_cielab:nnnnnnn
+      \l_@@_internal_tl {#1} {#2} {#3} {#4} {#5} {#6}
+  }
+%    \end{macrocode}
+%   If a CIELAB space is being set up, we need the illuminant, then create
+%   the appropriate set up. At present, this doesn't include \texttt{BlackPoint}
+%   or \texttt{Range} data, but that may be added later. As CIELAB colors
+%   cannot be converted to anything else, we fallback to producing black: the
+%   user should set up a second model for colors set up this way.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_model_separation_cielab:nnnnnnn #1#2#3#4#5#6#7
+  {
+    \tl_if_exist:cTF { c_@@_model_whitepoint_cielab_ #1 _tl }
+      {
+        \@@_model_separation_init_cielab:n {#1}
+        \@@_model_separation_init_cielab:nnnnn {#2} {#3} {#4} {#5} {#6}
+        \cs_new:cpn { @@_convert_ #2 _cmyk:w } ##1 ~ ##2 \s_@@_stop
+          { 0 ~ 0 ~ 0 ~ 1 }
+        \cs_new:cpn { @@_convert_ #2 _rgb:w } ##1 ~ ##2 \s_@@_stop
+          { 1 ~ 1 ~ 1 }
+        \cs_new:cpn { @@_convert_ #2 _gray:w } ##1 ~ ##2 \s_@@_stop
+          { 1 }
+      }
+      {
+        \__kernel_msg_error:nnn { color }
+          { unknown-cielab-illuminant } {#1}
+      }
+  }
+%    \end{macrocode}
+%   Initialising the PDF structures needs two parts: creating an object
+%   containing the \enquote{real} name of the Separation, then adding a reference
+%   to that to each page. The latter uses the internal name of the \texttt{cs}.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_model_separation_init:nnnnn #1#2#3#4#5
+  {
+    \pdf_object_now:nx { array }
+      {
+        /Separation
+        / \str_convert_pdfname:n {#1} ~ #2 ~
+        <<
+          /FunctionType ~ 2
+          /Domain ~ [0 ~ 1]
+          \tl_if_blank:nF {#3} { /Range ~ [#3] }
+          /C0 ~ [#4] ~
+          /C1 ~ [#5] /N ~ 1
+        >>
+      }
+    \use:x
+      {
+        \pdfcoredict_gput:nnn
+          { Page / Resources / ColorSpace }
+          { color \int_use:N \g_@@_separation_int }
+          { \pdf_object_last: }
+      }
+  }
+\cs_if_exist:NF \pdf_object_now:nn
+  { \cs_gset_protected:Npn \@@_model_separation_init:nnnnn #1#2#3#4#5 { } }
+%    \end{macrocode}
+%   For CIELAB colors, we need one object per document for the illuminant,
+%   plus initialisation of the color space referencing that object.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_model_separation_init_cielab:n #1
+  {
+    \pdf_object_new:nn { @@_illuminant_cielab_ #1 } { array }
+    \pdf_object_write:nx { @@_illuminant_cielab_ #1 }
+      {
+        /Lab ~
+        <<
+         /WhitePoint ~
+           [ \tl_use:c { c_@@_model_whitepoint_cielab_ #1 _tl } ]
+         /Range ~ [ \c_@@_model_range_lab_tl ]
+        >>
+     }
+  }
+\cs_if_exist:NF \pdf_object_new:nn
+  { \cs_gset_protected:Npn \@@_model_separation_init_cielab:n #1 { } }
+\cs_new_protected:Npn \@@_model_separation_init_cielab:nnnnn #1#2#3#4#5
+  {
+    \@@_model_separation_init:nnnnn
+      {#2}
+      { \pdf_object_ref:n { @@_illuminant_cielab_ #1 } }
+      { \c_@@_model_range_lab_tl }
+      { 100 ~ 0 ~ 0 }
+      { #3 ~ #4 ~ #5 }
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
 % \subsection{Diagnostics}
 %
 % \begin{macro}{\color_show:n}
@@ -1313,6 +1784,55 @@
 % \subsection{Messages}
 %
 % \begin{macrocode}
+\__kernel_msg_new:nnnn { color } { cielab-requires-illuminant }
+  { CIELAB~color~space~'#1'~require~an~illuminant. }
+  {
+    LaTeX~has~been~asked~to~create~a~separation~color~space~using~
+    CIELAB~specifications,~but~no~\\ \\
+    \iow_indent:n { illuminant = <basis> }
+    \\ \\
+    key~was~given~with~the~correct~information.~LaTeX~will~use~illuminant~
+    'd50'~for~recovery.
+  }
+\__kernel_msg_new:nnnn { color } { conversion-not-available }
+  { No~model~conversion~available~from~'#1'~to~'#2'. }
+  {
+    LaTeX~has~been~asked~to~convert~a~color~from~model~'#1'~
+    to~model'#2',~but~there~is~no~method~available~to~do~that.
+  }
+\__kernel_msg_new:nnnn { color } { model-already-defined }
+  { Color~model~'#1'~already~defined. }
+  {
+    LaTeX~was~asked~to~define~a~new~color~model~called~'#1',~but~
+    this~color~model~already~exists.
+  }
+\__kernel_msg_new:nnnn { color } { separation-alternative-model }
+  { Separation~color~space~'#1'~require~an~alternative~model. }
+  {
+    LaTeX~has~been~asked~to~create~a~separation~color~space,~
+    but~no~\\ \\
+    \iow_indent:n { alternative-model = <model> }
+    \\ \\
+    key~was~given~with~the~correct~information.
+  }
+\__kernel_msg_new:nnnn { color } { separation-alternative-values }
+  { Separation~color~space~'#1'~require~values~for~the~alternative~space. }
+  {
+    LaTeX~has~been~asked~to~create~a~separation~color~space,~
+    but~no~\\ \\
+    \iow_indent:n { alternative-values = <model> }
+    \\ \\
+    key~was~given~with~the~correct~information.
+  }
+\__kernel_msg_new:nnnn { color } { separation-requires-name }
+  { Separation~color~space~'#1'~require~a~formal~name. }
+  {
+    LaTeX~has~been~asked~to~create~a~separation~color~space,~
+    but~no~\\ \\
+    \iow_indent:n { name = <formal~name> }
+    \\ \\
+    key~was~given~with~the~correct~information.
+  }
 \__kernel_msg_new:nnnn { color } { unknown-color }
   { Unknown~color~'#1'. }
   {
@@ -1319,6 +1839,15 @@
     LaTeX~has~been~asked~to~use~a~color~named~'#1',~
     but~this~has~never~been~defined.
   }
+\__kernel_msg_new:nnnn { color } { unknown-alternative-model }
+  { Separation~color~space~'#1'~require~an~valid~alternative~space. }
+  {
+    LaTeX~has~been~asked~to~create~a~separation~color~space,~
+    but~the~model~given~as\\ \\
+    \iow_indent:n { alternative-model = <model> }
+    \\ \\
+    is~unknown.
+  }
 \__kernel_msg_new:nnnn { color } { unknown-export-format }
   { Unknown~export~format~'#1'. }
   {
@@ -1325,6 +1854,12 @@
     LaTeX~has~been~asked~to~export~a~color~in~format~'#1',~
     but~this~has~never~been~defined.
   }
+\__kernel_msg_new:nnnn { color } { unknown-cielab-illuminant }
+  { Unknown~illuminant~model~'#1'. }
+  {
+    LaTeX~has~been~asked~to~use~create~a~color~space~using~CIELAB~
+    illuminant~'#1',~but~this~does~not~exist.
+  }
 \__kernel_msg_new:nnnn { color } { unknown-model }
   { Unknown~color~model~'#1'. }
   {
@@ -1331,6 +1866,12 @@
     LaTeX~has~been~asked~to~use~a~color~model~called~'#1',~
     but~this~model~is~not~set~up.
   }
+\__kernel_msg_new:nnnn { color } { unknown-model-type }
+  { Unknown~color~model~type~'#1'. }
+  {
+    LaTeX~has~been~asked~to~create~a~new~color~model~called~'#1',~
+    but~this~type~of~model~was~never~set~up.
+  }
 % \end{macrocode}
 %
 % \begin{macrocode}
@@ -1344,7 +1885,7 @@
 % \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,7 +53,7 @@
 % \section{\pkg{l3draw-boxes} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -147,7 +147,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,7 +53,7 @@
 % \section{\pkg{l3draw-layers} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -208,7 +208,7 @@
 % \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,7 +53,7 @@
 % \section{\pkg{l3draw-paths} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -1030,7 +1030,7 @@
 % \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,7 +53,7 @@
 % \section{\pkg{l3draw-points} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -963,7 +963,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,7 +53,7 @@
 % \section{\pkg{l3draw-scopes} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -132,7 +132,7 @@
         \draw_transform_shift_reset:
         \@@_softpath_clear:
         \draw_linewidth:n { \l_draw_default_linewidth_dim }
-        \draw_color:n { . }
+        \color_select:n { . }
         \draw_nonzero_rule:
         \draw_cap_butt:
         \draw_join_miter:
@@ -262,7 +262,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,7 +53,7 @@
 % \section{\pkg{l3draw-softpath} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -607,7 +607,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,7 +53,7 @@
 % \section{\pkg{l3draw-state} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -147,40 +147,10 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{variable}{\l_@@_color_tmp_tl}
-%   Scratch space.
 %    \begin{macrocode}
-\tl_new:N \l_@@_color_tmp_tl
+%</package>
 %    \end{macrocode}
-% \end{variable}
 %
-% \begin{macro}{\draw_color:n, \draw_color_fill:n, \draw_color_stroke:n}
-% \begin{macro}{\@@_color:nn}
-% \begin{macro}{\@@_color:nnn}
-%   Much the same as for core color support but calling the relevant
-%   driver-level function.
-%    \begin{macrocode}
-\cs_new_eq:NN \draw_color:n \color_select:n
-\cs_new_protected:Npn \draw_color_fill:n #1
-  { \@@_color:nn { fill } {#1} }
-\cs_new_protected:Npn \draw_color_stroke:n #1
-  { \@@_color:nn { stroke } {#1} }
-\cs_new_protected:Npn \@@_color:nn #1#2
-  {
-    \color_export:nnN {#2} { backend } \l_@@_color_tmp_tl
-    \exp_after:wN \@@_color:nnn \l_@@_color_tmp_tl {#1}
-  }
-\cs_new_protected:Npn \@@_color:nnn #1#2#3
-  { \use:c { @@_backend_color_ #3 _ #1 :n } {#2} }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%    \begin{macrocode}
-%</initex|package>
-%    \end{macrocode}
-%
 % \end{implementation}
 %
 % \PrintIndex

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,7 +53,7 @@
 % \section{\pkg{l3draw-transforms} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -331,7 +331,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -110,7 +110,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -650,7 +650,7 @@
 %       \draw_path_lineto:n { 2cm , 1cm }
 %       \draw_path_lineto:n { 3cm , 0.5cm }
 %       \draw_path_lineto:n { 3cm , 0cm }
-%       \draw_color_fill:n {  yellow!80!black }
+%       \color_fill:n { yellow!80!black }
 %       \draw_path_use_clear:n { fill , stroke }
 %     \draw_end:
 %   \end{demo}
@@ -662,7 +662,7 @@
 %       \draw_path_moveto:n { 2cm , 1cm }  % Begins a new part
 %       \draw_path_lineto:n { 3cm , 0.5cm }
 %       \draw_path_lineto:n { 3cm , 0cm }
-%       \draw_color_fill:n {  yellow!80!black }
+%       \color_fill:n {  yellow!80!black }
 %       \draw_path_use_clear:n { fill , stroke }
 %     \draw_end:
 %   \end{demo}
@@ -684,7 +684,7 @@
 %         { 1cm , 1cm } % First control
 %         { 2cm , 1cm } % Second control
 %         { 3cm , 0cm } % End
-%       \draw_color_fill:n {  yellow!80!black }
+%       \color_fill:n {  yellow!80!black }
 %       \draw_path_use_clear:n { fill , stroke }
 %     \draw_end:
 %   \end{demo}
@@ -705,7 +705,7 @@
 %       \draw_path_curveto:nn
 %         { 1cm , 1cm }
 %         { 2cm , 0cm }
-%       \draw_color_fill:n {  yellow!80!black }
+%       \color_fill:n {  yellow!80!black }
 %       \draw_path_use_clear:n { fill , stroke }
 %     \draw_end:
 %   \end{demo}
@@ -778,7 +778,7 @@
 %         { 1.5cm , 0cm }
 %         { 0cm , 1cm }
 %       \draw_path_use_clear:n { stroke }
-%       \draw_color:n { red }
+%       \color_select:n { red }
 %       \draw_path_ellipse:nnn
 %         { 1cm , 0cm }
 %         { 1cm , 1cm }
@@ -977,15 +977,6 @@
 %   \end{demo}
 % \end{function}
 %
-% \subsection{Color}
-%
-% \begin{function}{\draw_color:n, \draw_color_fill:n, \draw_color_stroke:n}
-%   \begin{syntax}
-%     \cs{draw_color:n} \Arg{color expression}
-%   \end{syntax}
-%   Evaluates the \meta{color expression} as described for \pkg{l3color}.
-% \end{function}
-%
 % \subsection{Transformations}
 %
 % Points are normally used unchanged relative to the canvas axes. This can
@@ -1137,7 +1128,7 @@
 % \section{\pkg{l3draw} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -1145,10 +1136,8 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3draw}{2020-07-17}{}
+\ProvidesExplPackage{l3draw}{2020-08-07}{}
   {L3 Experimental core drawing support}
-%</package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -1183,7 +1172,7 @@
 % Everything else is in the sub-files!
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -232,7 +232,7 @@
 % \section{\pkg{l3graphics} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -240,10 +240,8 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3graphics}{2020-07-17}{}
+\ProvidesExplPackage{l3graphics}{2020-08-07}{}
   {L3 Experimental graphics inclusion support}
-%</package>
 %    \end{macrocode}
 %
 % \begin{variable}{\l_@@_tmp_ior, \l_@@_tmp_tl}
@@ -715,7 +713,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -182,7 +182,7 @@
 % \section{\pkg{l3pdf} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -190,10 +190,8 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3pdf}{2020-07-17}{}
+\ProvidesExplPackage{l3pdf}{2020-08-07}{}
   {L3 Experimental core PDF support}
-%</package>
 %    \end{macrocode}
 %
 % \begin{variable}{\s_@@_stop}
@@ -350,7 +348,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -48,7 +48,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -158,7 +158,7 @@
 % \section{\pkg{l3str-format} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -166,10 +166,8 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3str-format}{2020-07-17}{}
+\ProvidesExplPackage{l3str-format}{2020-08-07}{}
   {L3 Experimental string formatting}
-%</package>
 %    \end{macrocode}
 %
 % \subsection{Helpers}
@@ -974,7 +972,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -127,7 +127,7 @@
 % \section{\pkg{l3sys-shell} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -135,10 +135,8 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3sys-shell}{2020-07-17}{}
+\ProvidesExplPackage{l3sys-shell}{2020-08-07}{}
   {L3 Experimental system shell functions}
-%</package>
 %    \end{macrocode}
 %
 % \begin{variable}{\s_@@_stop}
@@ -385,7 +383,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -56,7 +56,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -675,7 +675,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xcoffins}{2020-07-17}{}
+\ProvidesExplPackage{xcoffins}{2020-08-07}{}
   {L3 Experimental design level coffins}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -61,7 +61,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -678,7 +678,7 @@
 % level both of these need to be correctly saved.
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -686,25 +686,10 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%<*package>
-\ProvidesExplPackage{l3galley}{2020-07-17}{}
+\ProvidesExplPackage{l3galley}{2020-08-07}{}
   {L3 Experimental galley code}
-%</package>
 %    \end{macrocode}
 %
-% \subsection{Support items}
-%
-% Functions or settings which are needed by the galley but perhaps also
-% elsewhere.
-%
-% The default hyphenation character should be set and hyphenation should be
-% enabled.
-%    \begin{macrocode}
-%<*initex>
-\tex_defaulthyphenchar:D 45 \scan_stop:
-%</initex>
-%    \end{macrocode}
-%
 % \subsection{Scratch variables}
 %
 % \begin{variable}{\l_@@_tmp_int}
@@ -767,12 +752,7 @@
 %   The width of the current measure: the \enquote{running} setting can be
 %   inherited from \LaTeXe{}.
 %    \begin{macrocode}
-%<*initex>
-\dim_new:N \l_galley_text_width_dim
-%</initex>
-%<*package>
 \cs_new_eq:NN \l_galley_text_width_dim \linewidth
-%</package>
 %    \end{macrocode}
 % \end{variable}
 %
@@ -782,12 +762,7 @@
 %   width are one way to define the measure width. See also the text width,
 %   which is an alternative view (and should be in sync with this one!).
 %    \begin{macrocode}
-%<*initex>
-\dim_new:N \l_galley_total_left_margin_dim
-%</initex>
-%<*package>
 \cs_new_eq:NN \l_galley_total_left_margin_dim \@totalleftmargin
-%</package>
 \dim_new:N \l_galley_total_right_margin_dim
 %    \end{macrocode}
 % \end{variable}
@@ -1453,18 +1428,11 @@
 %   \LaTeXe{} \cs{@nodocument} is never removed from the register.
 %   This precaution is not be needed for a stand-alone format.
 %    \begin{macrocode}
-%<*initex>
-\tex_everypar:D % TEMP
-  {
-    \bool_if:NTF \g_@@_begin_level_bool
-      { \@@_start_paragraph_first: }
-      { \@@_start_paragraph_std: }
-  }
-%</initex>
-%<*package>
 \cs_undefine:N \everypar
 \newtoks \everypar
-\AtBeginDocument
+\cs_if_exist:NTF \AtBeginDocument
+  { \AtBeginDocument }
+  { \use:n }
   {
     \tex_everypar:D
       {
@@ -1474,7 +1442,6 @@
         \tex_the:D \everypar
       }
   }
-%</package>
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2497,10 +2464,6 @@
 %
 % \subsection{\LaTeXe{} functions}
 %
-%    \begin{macrocode}
-%<*package>
-%    \end{macrocode}
-%
 % \begin{macro}{\clearpage}
 %   The \tn{clearpage} macro needs to place material into the correct
 %   structures rather than directly onto the main vertical list. Other
@@ -2653,10 +2616,6 @@
 %</package>
 %    \end{macrocode}
 %
-%    \begin{macrocode}
-%</initex|package>
-%    \end{macrocode}
-%
 % \end{implementation}
 %
 % \PrintIndex

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -47,7 +47,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -734,7 +734,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xgalley}{2020-07-17}{}
+\ProvidesExplPackage{xgalley}{2020-08-07}{}
   {L3 Experimental galley}
 \RequirePackage{xparse,xtemplate,l3galley}
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -24,7 +24,7 @@
 %
 %<*driver|generic|package|2ekernel>
 %</driver|generic|package|2ekernel>
-\def\ExplFileDate{2020-07-17}%
+\def\ExplFileDate{2020-08-07}%
 %<*driver>
 \documentclass[full]{l3doc}
 \usepackage{graphicx}
@@ -51,7 +51,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -798,16 +798,14 @@
 %
 % \section{The distribution}
 %
-% At present, the \pkg{expl3} modules are designed to be loaded on top
-% of \LaTeXe{}. In time, a \LaTeX3 format may be produced based on this
-% code.
+% The \pkg{expl3} modules are designed to be loaded on top of \LaTeXe{}.
 %
 % \begin{bfseries}
-%   While \pkg{expl3} is still experimental, the bundle is now regarded
-%   as broadly stable. The syntax conventions and functions provided
+%   The core \pkg{expl3} language is broadly stable, and thus
+%   the syntax conventions and functions provided
 %   are now ready for wider use. There may still be changes to some
 %   functions, but these will be minor when compared to the scope of
-%   \pkg{expl3}.
+%   \pkg{expl3}. A robust mechanism is in place for such deprecations.
 % \end{bfseries}
 %
 % The distribution of \pkg{expl3} is split up into three packages on
@@ -821,7 +819,9 @@
 % and any changes in this code are very limited. This material is
 % therefore suitable for use in third-party packages without concern
 % about changes in support. All of this code is documented in
-% \texttt{interface3.pdf}.
+% \texttt{interface3.pdf}. With an up-to-date \LaTeXe{} kernel, this
+% code is built into the format file and therefore can be used
+% without any further steps.
 %
 % The material in \pkg{l3packages} is also stable, but is not always
 % at a programming level: most notably, \pkg{xparse} is stable and
@@ -834,9 +834,9 @@
 % in terms of interface and functionality detail. Feedback on these
 % modules is extremely valuable.
 %
-% \section{Moving from \LaTeXe{} to \LaTeX3}
+% \section{Moving from \LaTeXe{} to \pkg{expl3}}
 %
-% To help programmers to use \LaTeX3 code in existing \LaTeXe{} package,
+% To help programmers to use \pkg{expl3} code in existing \LaTeXe{} package,
 % some short notes on making the change are probably desirable.
 % Suggestions for inclusion here are welcome! Some of the following
 % is concerned with code, and some with coding style.
@@ -845,11 +845,10 @@
 %   \item \pkg{expl3} is mainly focused on programming. This means that
 %     some areas still require the use of \LaTeXe{} internal macros.
 %     For example, you may well need \tn{@ifpackageloaded}, as there
-%     is currently no native \LaTeX3 package loading module.
+%     is currently no native \pkg{expl3} package loading module.
 %   \item User level macros should be generated using the mechanism
 %     available in the \pkg{xparse} package, which is part of the
-%     \texttt{l3package} bundle, available from CTAN or the \LaTeX3 SVN
-%     repository.
+%     \texttt{l3package} bundle.
 %   \item At an internal level, most functions should be generated
 %     \tn{long} (using \cs{cs_new:Npn}) rather than \enquote{short} (using
 %     \cs{cs_new_nopar:Npn}).
@@ -894,7 +893,7 @@
 % updated in time.
 %
 % \DescribeOption{check-declarations}
-% All variables used in \LaTeX3 code should be declared. This is enforced
+% All variables used in \pkg{expl3} code should be declared. This is enforced
 % by \TeX{} for variable types based on \TeX{} registers, but not for those
 % which are constructed using macros as the underlying storage system. The
 % \texttt{check-declarations} option enables checking for all variable
@@ -907,7 +906,7 @@
 % function name in the \texttt{.log} file. This is useful for debugging
 % purposes, as it means that there is a complete list of all functions
 % created by each module loaded (with the exceptions of a very small number
-% required by the bootstrap code for \LaTeX3).  See also \cs{debug_on:n}
+% required by the bootstrap code).  See also \cs{debug_on:n}
 % \texttt{\{log-functions\}} in \pkg{l3candidates} for finer control.
 %
 % \DescribeOption{enable-debug}
@@ -936,6 +935,12 @@
 % This option is available to support DVI-based routes that do not
 % support the |header| line used by \texttt{dvips}.
 %
+% The debugging options may also be given using
+% \verb|\keys_set:nn { sys } { ... }|; the \texttt{backend} option can be
+% given in this way \emph{only} if a backend has not already been loaded.
+% This method of setting options is useful where \pkg{expl3} is pre-loaded
+% by the \LaTeXe{} format.
+%
 % \section{Using \pkg{expl3} with formats other than \LaTeXe{}}
 %
 % As well as the \LaTeXe{} package \pkg{expl3}, there is also a
@@ -1047,6 +1052,24 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\c__kernel_expl_date_tl}
+%   The \LaTeXe{} loader stores a private copy of \cs{ExplFileDate},
+%   which is fixed when the format is build and cannot be changed later.
+%   While \cs{ExplFileDate} ensures that the loader (either
+%   \texttt{2ekernel} or \texttt{package}) version matches the version
+%   of \file{expl3-code.tex}, this one ensures that the version of an
+%   eventual |\usepackage{expl3}| matches the version from the format.
+%   It seems to be common to have stray format files in the user tree
+%   which trigger errors due to mismatched versions (\emph{e.g.}
+%   \url{https://github.com/latex3/latex3/issues/781}).
+%    \begin{macrocode}
+%<*2ekernel>
+\global\expandafter\let\csname\detokenize
+  {c__kernel_expl_date_tl}\endcsname\ExplFileDate
+%</2ekernel>
+%    \end{macrocode}
+% \end{macro}
+%
 % The interlock test itself is simple: \cs{ExplLoaderFileDate} must be
 % defined and identical to \cs{ExplFileDate}. As this has to work for
 % both \LaTeXe{} and other formats, there is some auto-detection involved.
@@ -1220,6 +1243,88 @@
 %<@@=expl>
 %    \end{macrocode}
 %
+% Several times users reported this error when loading \pkg{expl3}:
+% \begin{verbatim}
+% ! Undefined control sequence.
+% l.67   \bool
+%             _new:N \g__expl_reload_bool
+% \end{verbatim}
+% raised in the reload block below.  This happens because the reload
+% check below assumes that if the boolean \cs{g_@@_reload_bool} doesn't
+% exist, this file is being loaded for the first time, and \pkg{expl3}
+% syntax is on.  This is a bit of a stretch for assumptions, but it's
+% valid as long as everything's in sync.  However the problem reported
+% happened because of a stray format file in the user tree which didn't
+% have the reload code defined here (commit \texttt{1d16336}), so the
+% \cs{g_@@_reload_bool} doesn't exist, but \pkg{expl3} syntax is off,
+% thus the error.
+%
+% At this point, if we have \cs{c__kernel_expl_date_tl} defined, the
+% situation is straightforward:  if it matches \cs{ExplLoaderFileDate},
+% then everything's as expected, so no need to worry.  If it doesn't,
+% then the current version of \pkg{expl3} differs from the one in the
+% format, so raise a fatal error:  the bahaviour is too unpredictable to
+% continue safely.  Also, if the error is to be raised, then we're
+% reloading, which means that \pkg{expl3} syntax is off, so we turn it
+% on for the message.
+%    \begin{macrocode}
+\ifcsname\detokenize{c__kernel_expl_date_tl}\endcsname
+  \expandafter\ifx\csname\detokenize
+      {c__kernel_expl_date_tl}\endcsname\ExplLoaderFileDate
+  \else
+    \ExplSyntaxOn
+    \__kernel_msg_set:nnn { kernel } { mismatched-expl3 }
+      {
+        Mismatched~expl3~detected!~Loading~expl3~will~abort.
+        \\ \\
+        The~version~of~expl3~preloaded~in~LaTeX~is~
+        \c__kernel_expl_date_tl,~but~the~version~of~expl3~you~are~
+        trying~to~load~is~dated~\ExplLoaderFileDate.~This~is~most~
+        likely~due~to~a~stray~format~file~in~the~user~tree.~Please~
+        make~sure~that~your~LaTeX~format~is~updated.
+      }
+    \exp_after:wN \ExplSyntaxOff \use:n
+      {
+        \__kernel_msg_critical:nn { kernel } { mismatched-expl3 }
+        \use:c { fi: } \use:c { fi: }
+      }
+  \fi
+%    \end{macrocode}
+% If \cs{c__kernel_expl_date_tl} does \emph{not} exist, then we're on
+% uncharted lands (that is, any time prior to the version that
+% introduced this token list :-).  Two cases might be here, depending
+% whether \pkg{expl3} is loaded into the kernel or not. If we're loading
+% \pkg{expl3} \enquote{normally} as a package, \pkg{expl3} syntax is on.
+% Otherwise it's already loaded in the kernel and we're reloading
+% \file{expl3.sty} so (\file{expl3-code.tex} doesn't load again and)
+% \pkg{expl3} syntax is off.
+%    \begin{macrocode}
+\else
+  \ifodd\csname\detokenize{l__kernel_expl_bool}\endcsname
+%    \end{macrocode}
+%   Package mode; all should be fine, since \file{expl3.sty} and
+%   \file{expl3-code.tex} are both loaded in one go, so versions should
+%   match (if they don't, it's detected above).
+%   Also, we've just tested that \pkg{expl3} syntax is on, so the reload
+%   test below will return false and \cs{bool_new:N} will run correctly.
+%    \begin{macrocode}
+  \else
+%    \end{macrocode}
+%   In this branch we're reloading, but there are still two cases to
+%   consider (sigh\ldots); whether the version preloaded in the format
+%   is recent enough to have \cs{g_@@_reload_bool} (2020-06-18 and
+%   later) or not.  If the boolean is there, we have to do nothing
+%   because right ahead we deal with this case.
+%   If it is not, we just have to create it:
+%    \begin{macrocode}
+    \ExplSyntaxOn
+    \bool_if_exist:NF \g_@@_reload_bool
+      { \bool_new:N \g_@@_reload_bool }
+    \ExplSyntaxOff
+  \fi
+\fi
+%    \end{macrocode}
+%
 % Here we can also detect whether we're reloading.  This code goes into
 % \texttt{expl3.ltx} and \texttt{expl3.sty}, the former loaded into the
 % \LaTeXe{} format.  When this code is loaded for the first time, the

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins	2020-08-07 21:37:39 UTC (rev 56067)
@@ -58,9 +58,7 @@
   {
     \file{expl3-code.tex}
       {
-        % ======== PACKAGE ONLY ========
         \from{expl3.dtx}        {package}
-        % ==============================
         \from{l3bootstrap.dtx}  {package}
         \from{l3names.dtx}      {package}
         \from{l3basics.dtx}     {package}

Deleted: trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -1,195 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3alloc.dtx
-%
-% Copyright (C) 1990-2012,2014-2020 The LaTeX3 Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version.  The latest version
-% of this license is in the file
-%
-%    https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-%    https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
-  \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-%   The \pkg{l3alloc} package\\ Register allocation^^A
-% }
-%
-% \author{^^A
-%  The \LaTeX3 Project\thanks
-%    {^^A
-%      E-mail:
-%        \href{mailto:latex-team at latex-project.org}
-%          {latex-team at latex-project.org}^^A
-%    }^^A
-% }
-%
-% \date{Released 2020-07-17}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% This module provides the basic mechanism for allocating \TeX{}'s
-% registers when operating in format mode. When loaded as a package on
-% an existing format, the mechanisms from the latter are used.
-%
-% The approach used here is informed by the mechanisms used in plain
-% \TeX{}/\LaTeX{} but noting that newer engines provide us much more
-% flexibility. In addition to this, we do not need allocators for all
-% register types: for example \texttt{toks} are not used by \LaTeX3 whilst
-% reads/writes are handled using a pool and thus do not need a classical
-% allocator.
-%
-% In classical (non-\LuaTeX{}) engines, there are various restriction on
-% registers, for example |\box255| is hard-coded as the output box and
-% inserts have to be allocated below this (not in the extended pool). Rather
-% than worry about this, allocations for the registers affected (\TeX{}
-% |box|, |count|, |dimen| and |skip| types) are simply made only from the
-% extended pool. (There is a performance impact in engines other than
-% \LuaTeX{} but the free use of registers in \pkg{expl3} means that code
-% cannot be sure of obtaining a low-numbered register in any case.)
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3alloc} implementation}
-%
-%    \begin{macrocode}
-%<*initex>
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-%<@@=alloc>
-%    \end{macrocode}
-%
-% \begin{variable}
-%   {
-%     \g_@@_int_int    ,
-%     \g_@@_dim_int    ,
-%     \g_@@_muskip_int ,
-%     \g_@@_int_int    ,
-%     \g_@@_box_int
-%   }
-%   The core register tracking is done using the same raw \TeX{} count
-%   registers as reserved by plain \TeX{} and \LaTeXe{}, as there may be the
-%   odd piece of generic code that needs to work by number. However, as not
-%   all of our variables work the same way, some of the older registers are
-%   simply ignored. For the same reason, there is no special status for the
-%   low-numbers registers other than counts. To avoid having to worry about
-%   inserts and reflecting the register availability in \eTeX{}, the lower
-%   register space is unused here (though is available for hard-coded
-%   use).
-%    \begin{macrocode}
-\tex_countdef:D \g_@@_int_int    = 10 ~
-\tex_countdef:D \g_@@_dim_int    = 11 ~
-\tex_countdef:D \g_@@_skip_int   = 12 ~
-\tex_countdef:D \g_@@_muskip_int = 13 ~
-\tex_countdef:D \g_@@_box_int    = 14 ~
-\g_@@_int_int    = 255 ~
-\g_@@_dim_int    = 255 ~
-\g_@@_skip_int   = 255 ~
-\g_@@_muskip_int =   0 ~
-\g_@@_box_int    = 255 ~
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-%   {
-%     \g_@@_attribute_int ,
-%     \g_@@_bytecode_int  ,
-%     \g_@@_chunkname_int ,
-%     \g_@@_whatsit_int
-%   }
-%   To allow \LuaTeX{} to load |ltluatex.lua| for generic \Lua{} support, a
-%   small number of counts have to be correctly named at the \TeX{} level.
-%   At present there are no \pkg{expl3} allocators for these concepts so the
-%   names and numbers of the tracking variables may change.
-%    \begin{macrocode}
-\tex_ifdefined:D \tex_luatexversion:D
-  \tex_global:D \tex_countdef:D \g_@@_attribute_int  = 21 ~
-  \tex_global:D \tex_countdef:D \g_@@_bytecode_int   = 22 ~
-  \tex_global:D \tex_countdef:D \g_@@_chunkname_int  = 23 ~
-  \tex_global:D \tex_countdef:D \g_@@_whatsit_int    = 24 ~
-\tex_fi:D
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-%   {\box_new:N, \dim_new:N, \int_new:N, \muskip_new:N \skip_new:N}
-%   Each of the public allocators is a wrapper around the one internal
-%   function needed here.
-%    \begin{macrocode}
-\cs_new_protected:Npx \box_new:N #1
-  {
-    \exp_not:N \@@_reg:nNnN { box }
-      \cs_if_exist:NTF \tex_luatexversion:D
-        { \tex_chardef:D }
-        {
-          \cs_if_exist:NTF \tex_omathchardef:D
-            { \tex_omathchardef:D }
-            { \tex_mathchardef:D }
-        }
-      \c_max_register_int
-      #1
-  }
-\cs_new_protected:Npn \dim_new:N #1
-  { \@@_reg:nNnN { dim } \tex_dimendef:D \c_max_register_int #1 }
-\cs_new_protected:Npn \int_new:N #1
-  { \@@_reg:nNnN { int } \tex_countdef:D \c_max_register_int #1 }
-\cs_new_protected:Npn \muskip_new:N #1
-  { \@@_reg:nNnN { muskip } \tex_muskipdef:D \c_max_register_int #1 }
-\cs_new_protected:Npn \skip_new:N #1
-  { \@@_reg:nNnN { skip } \tex_skipdef:D \c_max_register_int #1 }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_reg:nNNN}
-%   The allocator itself is modelled somewhat on \LaTeXe{}'s \tn{e at alloc},
-%   though there is no need to set \tn{allocationnumber}.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_reg:nNnN #1#2#3#4
-  {
-    \__kernel_chk_if_free_cs:N #4
-    \int_compare:nNnTF { \int_use:c { g_@@_ #1 _int } } < {#3}
-      {
-        \int_gincr:c { g_@@_ #1 _int }
-        \tex_global:D #2 #4 \int_use:c { g_@@_ #1 _int }
-        \iow_log:x
-          {
-            \token_to_str:N #4 ~=~ #1 ~register~
-            \int_use:c { g_@@_ #1 _int }
-          }
-      }
-      { \__kernel_msg_fatal:nnx { kernel } { out-of-registers } {#1} }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-%    \begin{macrocode}
-%</initex>
-%    \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -1339,7 +1339,7 @@
 % \section{\pkg{l3basics} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 % \subsection{Renaming some \TeX{} primitives (again)}
@@ -3277,7 +3277,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,9 +53,7 @@
 %
 % The modules documented in \file{source3} are designed to be used on top of
 % \LaTeXe{} and are loaded all as one with the usual |\usepackage{expl3}| or
-% |\RequirePackage{expl3}| instructions. These modules will also form the
-% basis of the \LaTeX3 format, but work in this area is incomplete and not
-% included in this documentation at present.
+% |\RequirePackage{expl3}| instructions.
 %
 % As the modules use a coding syntax different from standard
 % \LaTeXe{} it provides a few functions for setting it up.
@@ -123,44 +121,12 @@
 % \section{\pkg{l3bootstrap} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %<@@=kernel>
 %    \end{macrocode}
 %
-% \subsection{Format-specific code}
+% \subsection{\LuaTeX{}-specific code}
 %
-% The very first thing to do is to bootstrap the \IniTeX{} system so
-% that everything else will actually work. \TeX{} does not start with
-% some pretty basic character codes set up.
-%    \begin{macrocode}
-%<*initex>
-\catcode `\{ = 1 %
-\catcode `\} = 2 %
-\catcode `\# = 6 %
-\catcode `\^ = 7 %
-%</initex>
-%    \end{macrocode}
-%
-% Tab characters should not show up in the code, but to be on the
-% safe side.
-%    \begin{macrocode}
-%<*initex>
-\catcode `\^^I = 10 %
-%</initex>
-%    \end{macrocode}
-%
-% For \LuaTeX{}, the extra primitives need to be enabled. This is not needed
-% in package mode: common formats have the primitives enabled.
-%    \begin{macrocode}
-%<*initex>
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname directlua\endcsname\relax
-\else
-  \directlua{tex.enableprimitives("", tex.extraprimitives())}%
-\fi
-%</initex>
-%    \end{macrocode}
-%
 % Depending on the versions available, the \LaTeX{} format may not have
 % the raw |\Umath| primitive names available. We fix that globally:
 % it should cause no issues. Older \LuaTeX{} versions do not have
@@ -169,7 +135,6 @@
 % a newer format anyway and as they all start |\U| this should be
 % reasonably safe.
 %    \begin{macrocode}
-%<*package>
 \begingroup
   \expandafter\ifx\csname directlua\endcsname\relax
   \else
@@ -187,7 +152,6 @@
     }%
   \fi
 \endgroup
-%</package>
 %    \end{macrocode}
 %
 % \subsection{The \tn{pdfstrcmp} primitive in \XeTeX{}}
@@ -215,15 +179,13 @@
   \ifnum\luatexversion<95 %
   \else
 %    \end{macrocode}
-%   In package mode for \LuaTeX{} we make sure the basic support is loaded:
+%   For \LuaTeX{} we make sure the basic support is loaded:
 %   this is only necessary in plain.
 %    \begin{macrocode}
-%<*package>
     \begingroup\expandafter\expandafter\expandafter\endgroup
     \expandafter\ifx\csname newcatcodetable\endcsname\relax
       \input{ltluatex}%
     \fi
-%</package>
     \directlua{require("expl3")}%
 %    \end{macrocode}
 %   As the user might be making a custom format, no assumption is made about
@@ -289,24 +251,6 @@
     \fi
     =0 %
       \newlinechar`\^^J %
-%<*initex>
-      \def\LineBreak{^^J}%
-      \edef\next
-        {%
-          \errhelp
-            {%
-              \LongText
-              For pdfTeX and XeTeX the '-etex' command-line switch is also
-              needed.\LineBreak
-              \LineBreak
-              Format building will abort!\LineBreak
-            }%
-          \errmessage{\ShortText}%
-          \endgroup
-          \noexpand\end
-        }%
-%</initex>
-%<*package>
       \def\LineBreak{\noexpand\MessageBreak}%
       \expandafter\ifx\csname PackageError\endcsname\relax
         \def\LineBreak{^^J}%
@@ -323,7 +267,6 @@
           \endgroup
           \noexpand\endinput
         }%
-%</package>
   \fi
 \next
 %    \end{macrocode}
@@ -330,11 +273,8 @@
 %
 % \subsection{Extending allocators}
 %
-% In format mode, allocating registers is handled by \pkg{l3alloc}. However, in
-% package mode it's much safer to rely on more general code. For example,
-% the ability to extend \TeX{}'s allocation routine to allow for \eTeX{} has
+% The ability to extend \TeX{}'s allocation routine to allow for \eTeX{} has
 % been around since 1997 in the \pkg{etex} package.
-%
 % Loading this support is delayed until here as we are now sure that the
 % \eTeX{} extensions and \tn{pdfstrcmp} or equivalent are available. Thus
 % there is no danger of an \enquote{uncontrolled} error if the engine
@@ -353,7 +293,6 @@
 % here is done using a group and \tn{ifx} test as we are not quite in the
 % position to have a single name for \tn{pdfstrcmp} just yet.
 %    \begin{macrocode}
-%<*package>
 \begingroup
   \def\@tempa{LaTeX2e}%
   \def\next{}%
@@ -368,100 +307,8 @@
   \fi
 \expandafter\endgroup
 \next
-%</package>
 %    \end{macrocode}
 %
-% \subsection{Character data}
-%
-% \TeX{} needs various pieces of data to be set about characters, in particular
-% which ones to treat as letters and which \tn{lccode} values apply as these
-% affect hyphenation. It makes most sense to set this and related information
-% up in one place. Whilst for \LuaTeX{} hyphenation patterns can be read
-% anywhere, other engines have to build them into the format and so we
-% \emph{must} do this set up before reading the patterns. For the Unicode
-% engines, there are shared loaders available to obtain the relevant
-% information directly from the Unicode Consortium data files. These need
-% standard (Ini)\TeX{} category codes and primitive availability and must
-% therefore loaded \emph{very} early. This has a knock-on effect on the
-% $8$-bit set up: it makes sense to do the definitions for those here as
-% well so it is all in one place.
-%
-% For \XeTeX{} and \LuaTeX{}, which are natively Unicode engines, simply
-% load the Unicode data.
-%    \begin{macrocode}
-%<*initex>
-\ifdefined\Umathcode
-  \input load-unicode-data %
-  \input load-unicode-math-classes %
-\else
-%    \end{macrocode}
-% For the $8$-bit engines a font encoding scheme must be chosen. At present,
-% this is the EC (|T1|) scheme, with the assumption that languages for which
-% this is not appropriate will be used with one of the Unicode engines.
-%    \begin{macrocode}
-  \begingroup
-%    \end{macrocode}
-% Lower case chars: map to themselves when lower casing and down by |"20| when
-% upper casing. (The characters |a|--|z| are set up correctly by \IniTeX{}.)
-%    \begin{macrocode}
-    \def\temp{%
-      \ifnum\count0>\count2 %
-      \else
-        \global\lccode\count0 = \count0 %
-        \global\uccode\count0 = \numexpr\count0 - "20\relax
-        \advance\count0 by 1 %
-        \expandafter\temp
-      \fi
-    }
-    \count0 = "A0 %
-    \count2 = "BC %
-    \temp
-    \count0 = "E0 %
-    \count2 = "FF %
-    \temp
-%    \end{macrocode}
-% Upper case chars: map up by |"20| when lower casing, to themselves when upper
-% casing and require an \tn{sfcode} of $999$. (The characters |A|--|Z| are set
-% up correctly by \IniTeX{}.)
-%    \begin{macrocode}
-    \def\temp{%
-      \ifnum\count0>\count2 %
-      \else
-        \global\lccode\count0 = \numexpr\count0 + "20\relax
-        \global\uccode\count0 = \count0 %
-        \global\sfcode\count0 = 999 %
-        \advance\count0 by 1 %
-        \expandafter\temp
-      \fi
-    }
-    \count0 = "80 %
-    \count2 = "9C %
-    \temp
-    \count0 = "C0 %
-    \count2 = "DF %
-    \temp
-%    \end{macrocode}
-% A few special cases where things are not as one might expect using the above
-% pattern: dotless-I, dotless-J, dotted-I and d-bar.
-%    \begin{macrocode}
-    \global\lccode`\^^Y = `\^^Y %
-    \global\uccode`\^^Y = `\I %
-    \global\lccode`\^^Z = `\^^Z %
-    \global\uccode`\^^Y = `\J %
-    \global\lccode"9D = `\i %
-    \global\uccode"9D = "9D %
-    \global\lccode"9E = "9E %
-    \global\uccode"9E = "D0 %
-%    \end{macrocode}
-% Allow hyphenation at a zero-width glyph (used to break up ligatures or
-% to place accents between characters).
-%    \begin{macrocode}
-    \global\lccode23 = 23 %
-  \endgroup
-\fi
-%</initex>
-%    \end{macrocode}
-%
 % \subsection{The \LaTeX3 code environment}
 %
 % The code environment is now set up.
@@ -470,14 +317,11 @@
 %   Before changing any category codes, in package mode we need to save
 %   the situation before loading. Note the set up here means that once applied
 %   \cs{ExplSyntaxOff} becomes a \enquote{do nothing} command until
-%   \cs{ExplSyntaxOn} is used. For format mode, there is no need to save
-%   category codes so that step is skipped.
+%   \cs{ExplSyntaxOn} is used.
 %    \begin{macrocode}
-\protected\def\ExplSyntaxOff{}%
-%<*package>
 \protected\edef\ExplSyntaxOff
   {%
-    \protected\def\ExplSyntaxOff{}%
+    \protected\def\noexpand\ExplSyntaxOff{}%
     \catcode   9 = \the\catcode   9\relax
     \catcode  32 = \the\catcode  32\relax
     \catcode  34 = \the\catcode  34\relax
@@ -490,7 +334,6 @@
     \endlinechar = \the\endlinechar\relax
     \chardef\csname\detokenize{l_@@_expl_bool}\endcsname = 0\relax
   }%
-%</package>
 %    \end{macrocode}
 % \end{macro}
 %
@@ -560,7 +403,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -887,7 +887,7 @@
 % \section{\pkg{l3box} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -917,13 +917,11 @@
 %   Defining a new \meta{box} register: remember that box $255$ is not
 %   generally available.
 %    \begin{macrocode}
-%<*package>
 \cs_new_protected:Npn \box_new:N #1
   {
     \__kernel_chk_if_free_cs:N #1
     \cs:w newbox \cs_end: #1
   }
-%</package>
 \cs_generate_variant:Nn \box_new:N { c }
 %    \end{macrocode}
 %
@@ -2238,7 +2236,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -690,7 +690,7 @@
 % \section{\pkg{l3candidates} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 % \subsection{Additions to \pkg{l3box}}
@@ -1638,7 +1638,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -169,7 +169,7 @@
 % \section{\pkg{l3cctab} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -242,6 +242,8 @@
 %
 %   First, the \LuaTeX{} case.
 %   Creating a new category code table is done like other registers.
+%   In Con\TeX{}t, \tn{newcatcodetable} does not include the initialisation,
+%   so that is added explicitly.
 %    \begin{macrocode}
 \sys_if_engine_luatex:TF
   {
@@ -250,25 +252,11 @@
         \__kernel_chk_if_free_cs:N #1
         \@@_new:N #1
       }
-%<*initex>
     \cs_new_protected:Npn \@@_new:N #1
       {
-        \int_gincr:N \g_@@_allocate_int
-        \int_compare:nNnTF
-          \g_@@_allocate_int > \c_max_register_int
-           {
-             \__kernel_msg_fatal:nnx
-               { kernel } { out-of-registers } { cctab }
-           }
-           {
-             \tex_global:D \tex_chardef:D #1 \g_@@_allocate_int
-             \tex_initcatcodetable:D #1
-           }
+        \newcatcodetable #1
+        \tex_initcatcodetable:D #1
       }
-%</initex>
-%<*package>
-    \cs_new_eq:NN \@@_new:N \newcatcodetable
-%</package>
   }
 %    \end{macrocode}
 %   Now the case for other engines. Here, each table is an integer
@@ -716,15 +704,15 @@
   {
     \cs_new_protected:Npn \@@_chk_if_valid_aux:NTF #1
       {
-%<*initex>
-        \bool_lazy_and:nnTF
-          { \int_if_odd_p:n {#1} }
-          { \int_compare_p:nNn {#1-1} < { \g_@@_allocate_int } }
-%</initex>
-%<*package>
         \int_compare:nNnTF {#1-1} < { \e at alloc@ccodetable at count }
-%</package>
       }
+    \cs_if_exist:NT \c_syst_catcodes_n
+      {
+        \cs_gset_protected:Npn \@@_chk_if_valid_aux:NTF #1
+          {
+            \int_compare:nTF { #1 <= \c_syst_catcodes_n }
+          }
+      }
   }
   {
     \cs_new_protected:Npn \@@_chk_if_valid_aux:NTF #1
@@ -883,7 +871,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -762,7 +762,7 @@
 % \TestFiles{m3clist002}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -2058,7 +2058,7 @@
 % \end{variable}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -408,7 +408,7 @@
 % \section{\pkg{l3coffins} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -667,6 +667,7 @@
 %     \vcoffin_gset:Nnn, \vcoffin_gset:cnn
 %   }
 %  \begin{macro}{\@@_set_vertical:NnnNN}
+%  \begin{macro}{\@@_set_vertical_aux:}
 %   Setting vertical coffins is more complex. First, the material is
 %   typeset with a given width. The default handles and poles are set as
 %   for a horizontal coffin, before finding the top baseline using a
@@ -694,10 +695,7 @@
         #4 #1
           {
             \dim_set:Nn \tex_hsize:D {#2}
-%<*package>
-            \dim_set_eq:NN \linewidth   \tex_hsize:D
-            \dim_set_eq:NN \columnwidth \tex_hsize:D
-%</package>
+            \@@_set_vertical_aux:
             #3
           }
         #5 #1
@@ -715,9 +713,17 @@
         \box_clear:N \l_@@_internal_box
       }
   }
+\cs_new_protected:Npx \@@_set_vertical_aux:
+  {
+    \cs_if_exist:NT \linewidth
+      { \dim_set_eq:NN \linewidth \tex_hsize:D }
+    \cs_if_exist:NT \columnwidth
+      { \dim_set_eq:NN \columnwidth \tex_hsize:D }
+  }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
+% \end{macro}
 %
 % \begin{macro}
 %   {\hcoffin_set:Nw, \hcoffin_set:cw, \hcoffin_gset:Nw, \hcoffin_gset:cw}
@@ -783,10 +789,7 @@
       {
         #3 #1
           \dim_set:Nn \tex_hsize:D {#2}
-%<*package>
-            \dim_set_eq:NN \linewidth   \tex_hsize:D
-            \dim_set_eq:NN \columnwidth \tex_hsize:D
-%</package>
+          \@@_set_vertical_aux:
           \cs_set_protected:Npn #4
             {
               #5
@@ -2233,9 +2236,16 @@
 %   flexible.
 %    \begin{macrocode}
 \tl_new:N  \l_@@_display_font_tl
-%<*package>
-\tl_set:Nn \l_@@_display_font_tl { \sffamily \tiny }
-%</package>
+\cs_if_exist:NTF \AtBeginDocument
+  { \AtBeginDocument }
+  { \use:n }
+  {
+    \tl_set:Nx \l_@@_display_font_tl
+      {
+        \cs_if_exist:NT \sffamily { \exp_not:N \sffamily }
+        \cs_if_exist:NT \tiny { \exp_not:N \tiny }
+      }
+  }
 %    \end{macrocode}
 % \end{variable}
 %
@@ -2242,11 +2252,35 @@
 % \begin{macro}{\@@_color:n}
 %   Calls \tn{color}, and otherwise does nothing if \tn{color} is not defined.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_color:n #1
-  { \cs_if_exist:NT \color { \color {#1} } }
+\cs_if_exist:NTF \AtBeginDocument
+  { \AtBeginDocument }
+  { \use:n }
+  {
+    \cs_new_protected:Npx \@@_color:n #1
+      {
+        \cs_if_exist:NTF \color_select:n
+          { \color_select:n {#1} }
+          {
+            \cs_if_exist:NT \color
+              { \exp_not:N \color {#1} }
+          }
+      }
+  }
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\@@_rule:nn}
+%   Abstract out creation of rules here until there is a higher-level interface.
+%    \begin{macrocode}
+\cs_new_protected:Npx \@@_rule:nn #1#2
+  {
+    \cs_if_exist:NTF \rule
+      { \exp_not:N \rule {#1} {#2} }
+      { \hbox:n { \tex_vrule:D width #1 height #2 \scan_stop: } }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\coffin_mark_handle:Nnnn, \coffin_mark_handle:cnnn}
 % \begin{macro}{\@@_mark_handle_aux:nnnnNnn}
 %   Marking a single handle is relatively easy. The standard attachment
@@ -2259,21 +2293,14 @@
   {
     \hcoffin_set:Nn \l_@@_display_pole_coffin
       {
-%<*initex>
-        \hbox:n { \tex_vrule:D width 1pt height 1pt \scan_stop: }
-%</initex>
-%<*package>
         \@@_color:n {#4}
-        \rule { 1pt } { 1pt }
-%</package>
+        \@@_rule:nn { 1pt } { 1pt }
       }
     \@@_attach_mark:NnnNnnnn #1 {#2} {#3}
       \l_@@_display_pole_coffin { hc } { vc } { 0pt } { 0pt }
     \hcoffin_set:Nn \l_@@_display_coord_coffin
       {
-%<*package>
         \@@_color:n {#4}
-%</package>
         \l_@@_display_font_tl
         ( \tl_to_str:n { #2 , #3 } )
       }
@@ -2325,13 +2352,8 @@
   {
     \hcoffin_set:Nn \l_@@_display_pole_coffin
       {
-%<*initex>
-        \hbox:n { \tex_vrule:D width 1pt height 1pt \scan_stop: }
-%</initex>
-%<*package>
         \@@_color:n {#2}
-        \rule { 1pt } { 1pt }
-%</package>
+        \@@_rule:nn { 1pt } { 1pt }
       }
     \prop_set_eq:Nc \l_@@_display_poles_prop
       { coffin ~ \@@_to_value:N #1 ~ poles }
@@ -2371,9 +2393,7 @@
               { 0pt } { 0pt }
             \hcoffin_set:Nn \l_@@_display_coord_coffin
               {
-%<*package>
                 \@@_color:n {#6}
-%</package>
                 \l_@@_display_font_tl
                 ( \tl_to_str:n { #1 , ##1 } )
               }
@@ -2511,7 +2531,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -85,7 +85,7 @@
 % \section{\pkg{l3color-base} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -138,9 +138,7 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \color_ensure_current:
   {
-%<*package>
     \@@_backend_pickup:N \l_@@_current_tl
-%</package>
     \@@_select:N \l_@@_current_tl
   }
 %    \end{macrocode}
@@ -162,7 +160,7 @@
 \cs_new_protected:Npn \@@_select:N #1
   { \exp_after:wN \@@_select:nn #1 }
 \cs_new_protected:Npn \@@_select:nn #1#2
-  { \use:c { @@_backend_ #1 :n } {#2} }
+  { \use:c { @@_backend_select_ #1 :n } {#2} }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -176,7 +174,7 @@
 % \end{variable}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -119,7 +119,7 @@
 % \section{\pkg{l3debug} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -1476,7 +1476,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -86,7 +86,7 @@
 % \section{\pkg{l3deprecation} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -836,7 +836,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -79,7 +79,7 @@
 %
 % \title{The \cls{l3doc} class}
 % \author{\Team}
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 % \maketitle
 % \tableofcontents
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -63,7 +63,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -937,7 +937,7 @@
 % \section{\pkg{l3expan} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -2909,7 +2909,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -910,7 +910,7 @@
 % \TestFiles{m3file001}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 % \subsection{Input operations}
@@ -939,16 +939,9 @@
 %
 % \begin{variable}{\g_@@_streams_seq}
 %   A list of the currently-available input streams to be used as a
-%   stack.  In format mode, all streams (from $0$ to~$15$) are
-%   available, while the package requests streams to \LaTeXe{} as they
-%   are needed (initially none are needed), so the starting point
-%   varies!
+%   stack.
 %    \begin{macrocode}
 \seq_new:N \g_@@_streams_seq
-%<*initex>
-\seq_gset_split:Nnn \g_@@_streams_seq { , }
-  { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 }
-%</initex>
 %    \end{macrocode}
 % \end{variable}
 %
@@ -970,7 +963,6 @@
 %   it holds the value of the \emph{last} stream allocated.
 %    \begin{macrocode}
 \prop_new:N \g_@@_streams_prop
-%<*package>
 \int_step_inline:nnn
   { 0 }
   {
@@ -984,7 +976,6 @@
   {
     \prop_gput:Nnn \g_@@_streams_prop {#1} { Reserved~by~format }
   }
-%</package>
 %    \end{macrocode}
 % \end{variable}
 %
@@ -1043,7 +1034,7 @@
 % \end{macro}
 %
 % \begin{macro}{\@@_new:N}
-%   In package mode, streams are reserved using \tn{newread} before they
+%   Streams are reserved using \tn{newread} before they
 %   can be managed by \pkg{ior}.  To prevent \pkg{ior} from being
 %   affected by redefinitions of \tn{newread} (such as done by the
 %   third-party package \pkg{morewrites}), this macro is saved here
@@ -1053,7 +1044,6 @@
 %   that \tn{newread} works like our own: it actually checks before
 %   altering definition.
 %    \begin{macrocode}
-%<*package>
 \exp_args:NNf \cs_new_protected:Npn \@@_new:N
   { \exp_args:NNc \exp_after:wN \exp_stop_f: { newread } }
 \cs_if_exist:NT \normalend
@@ -1065,7 +1055,6 @@
         \@@_new_aux:N #1
       }
   }
-%</package>
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1072,8 +1061,7 @@
 % \begin{macro}{\__kernel_ior_open:Nn, \__kernel_ior_open:No}
 % \begin{macro}{\@@_open_stream:Nn}
 %   The stream allocation itself uses the fact that there is a list of all of
-%   those available, so allocation is simply a question of using the number at
-%   the top of the list. In package mode, life gets more complex as it's
+%   those available. Life gets more complex as it's
 %   important to keep things in sync. That is done using a two-part approach:
 %   any streams that have already been taken up by \pkg{ior} but are now free
 %   are tracked, so we first try those. If that fails, ask plain \TeX{} or \LaTeXe{}
@@ -1084,16 +1072,11 @@
     \ior_close:N #1
     \seq_gpop:NNTF \g_@@_streams_seq \l_@@_stream_tl
       { \@@_open_stream:Nn #1 {#2} }
-%<*initex>
-      { \__kernel_msg_fatal:nn { kernel } { input-streams-exhausted } }
-%</initex>
-%<*package>
       {
         \@@_new:N #1
         \tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} }
         \@@_open_stream:Nn #1 {#2}
       }
-%</package>
   }
 \cs_generate_variant:Nn \__kernel_ior_open:Nn { No }
 %    \end{macrocode}
@@ -1392,20 +1375,9 @@
 %
 % \begin{variable}{\g_@@_streams_seq}
 %   A list of the currently-available output streams to be used as a
-%   stack.  The stream $18$ is special, as \tn{write}18 is used to
-%   denote commands to be sent to the OS\@.
+%   stack.
 %    \begin{macrocode}
 \seq_new:N \g_@@_streams_seq
-%<*initex>
-\exp_args:Nnx \use:n
-  { \seq_gset_split:Nnn \g_@@_streams_seq { } }
-  {
-    \int_step_function:nnN { 0 } { \c_term_iow }
-      \prg_do_nothing:
-  }
-\int_compare:nNnF \c_term_iow < { 18 }
-  { \seq_gremove_all:Nn \g_@@_streams_seq { 18 } }
-%</initex>
 %    \end{macrocode}
 % \end{variable}
 %
@@ -1421,7 +1393,6 @@
 %   check on.
 %    \begin{macrocode}
 \prop_new:N \g_@@_streams_prop
-%<*package>
 \int_step_inline:nnn
   { 0 }
   {
@@ -1435,7 +1406,6 @@
   {
     \prop_gput:Nnn \g_@@_streams_prop {#1} { Reserved~by~format }
   }
-%</package>
 %    \end{macrocode}
 % \end{variable}
 %
@@ -1483,13 +1453,11 @@
 % \end{variable}
 %
 % \begin{macro}{\@@_new:N}
-%   As for read streams, copy \tn{newwrite} in package mode, making sure
+%   As for read streams, copy \tn{newwrite}, making sure
 %   that it is not \tn{outer}.
 %    \begin{macrocode}
-%<*package>
 \exp_args:NNf \cs_new_protected:Npn \@@_new:N
   { \exp_args:NNc \exp_after:wN \exp_stop_f: { newwrite } }
-%</package>
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1512,16 +1480,11 @@
     \iow_close:N #1
     \seq_gpop:NNTF \g_@@_streams_seq \l_@@_stream_tl
       { \@@_open_stream:NV #1 \l_@@_file_name_tl }
-%<*initex>
-      { \__kernel_msg_fatal:nn { kernel } { output-streams-exhausted } }
-%</initex>
-%<*package>
       {
         \@@_new:N #1
         \tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} }
         \@@_open_stream:NV #1 \l_@@_file_name_tl
       }
-%</package>
   }
 \cs_generate_variant:Nn \iow_open:Nn { c }
 \cs_new_protected:Npn \@@_open_stream:Nn #1#2
@@ -1876,7 +1839,7 @@
 \cs_new_protected:Npn \iow_wrap:nnnN #1#2#3#4
   {
     \group_begin:
-%<package>      \cs_if_exist_use:N \conditionally at traceoff
+      \cs_if_exist_use:N \conditionally at traceoff
       \int_set:Nn \tex_escapechar:D { -1 }
       \cs_set:Npx \{ { \token_to_str:N \{ }
       \cs_set:Npx \# { \token_to_str:N \# }
@@ -1897,7 +1860,7 @@
 %   definition: it only works in the first argument of
 %   \cs{iow_wrap:nnnN}.
 %    \begin{macrocode}
-%<package>      \cs_set_eq:NN \protect \token_to_str:N
+      \cs_set_eq:NN \protect \token_to_str:N
       \tl_set:Nx \l_@@_wrap_tl {#1}
       \cs_set_eq:NN \iow_allow_break: \@@_allow_break_error:
       \cs_set_eq:NN \iow_indent:n \@@_indent_error:n
@@ -2351,7 +2314,6 @@
 %   \tn{@currnamestack} is empty so is skipped.
 %    \begin{macrocode}
 \seq_new:N \g_@@_stack_seq
-%<*package>
 \group_begin:
   \cs_set_protected:Npn \@@_tmp:w #1#2#3
     {
@@ -2376,7 +2338,6 @@
         { \exp_after:wN \@@_tmp:w \@currnamestack }
     }
 \group_end:
-%</package>
 %    \end{macrocode}
 % \end{variable}
 %
@@ -2383,18 +2344,10 @@
 % \begin{variable}{\g_@@_record_seq}
 %   The total list of files used is recorded separately from the current
 %   file stack, as nothing is ever popped from this list.  The current
-%   file name should be included in the file list!  In format mode, this
-%   is done at the very start of the \TeX{} run.  In package mode we
+%   file name should be included in the file list! We
 %   will eventually copy the contents of \cs{@filelist}.
 %    \begin{macrocode}
 \seq_new:N \g_@@_record_seq
-%<*initex>
-\tex_everyjob:D \exp_after:wN
-  {
-    \tex_the:D \tex_everyjob:D
-    \seq_gput_right:NV \g_@@_record_seq \g_file_curr_name_str
-  }
-%</initex>
 %    \end{macrocode}
 % \end{variable}
 %
@@ -2424,11 +2377,9 @@
 % \end{variable}
 %
 % \begin{variable}{\l_@@_tmp_seq}
-%   Scratch space for comma list conversion in package mode.
+%   Scratch space for comma list conversion.
 %    \begin{macrocode}
-%<*package>
 \seq_new:N \l_@@_tmp_seq
-%</package>
 %    \end{macrocode}
 % \end{variable}
 %
@@ -2734,13 +2685,11 @@
           {
             \seq_map_tokens:Nn \l_file_search_path_seq
               { \@@_full_name_aux:Nnn \seq_map_break:n {#1} }
-%<*package>
             \cs_if_exist:NT \input at path
               {
                 \tl_map_tokens:Nn \input at path
                   { \@@_full_name_aux:Nnn \tl_map_break:n {#1} }
               }
-%</package>
             \@@_name_end:
           }
           { \@@_ext_check:n {#1} }
@@ -2879,13 +2828,11 @@
         \@@_get_full_name_search:nN { } \use:n
         \seq_map_inline:Nn \l_file_search_path_seq
           { \@@_get_full_name_search:nN { ##1 / } \seq_map_break:n }
-%<*package>
         \cs_if_exist:NT \input at path
           {
             \tl_map_inline:Nn \input at path
               { \@@_get_full_name_search:nN { ##1 } \tl_map_break:n }
           }
-%</package>
         \tl_set:Nn \l_@@_full_name_tl { \q_no_value }
         \prg_break_point:
         \quark_if_no_value:NTF \l_@@_full_name_tl
@@ -3319,14 +3266,9 @@
   }
 \cs_new_protected:Npx \@@_input:n #1
   {
-%<*initex>
-    \seq_gput_right:Nn \exp_not:N \g_@@_record_seq {#1}
-%</initex>
-%<*package>
     \exp_not:N \clist_if_exist:NTF \exp_not:N \@filelist
       { \exp_not:N \@addtofilelist {#1} }
       { \seq_gput_right:Nn \exp_not:N \g_@@_record_seq {#1} }
-%</package>
     \exp_not:N \@@_input_push:n {#1}
     \exp_not:N \tex_input:D
     \sys_if_engine_luatex:TF
@@ -3353,17 +3295,13 @@
     \str_gset_eq:NN \g_file_curr_name_str \l_@@_name_str
     \str_gset_eq:NN \g_file_curr_ext_str  \l_@@_ext_str
   }
-%<*package>
 \cs_new_eq:NN \__kernel_file_input_push:n \@@_input_push:n
-%</package>
 \cs_new_protected:Npn \@@_input_pop:
   {
     \seq_gpop:NN \g_@@_stack_seq \l_@@_internal_tl
     \exp_after:wN \@@_input_pop:nnn \l_@@_internal_tl
   }
-%<*package>
 \cs_new_eq:NN \__kernel_file_input_pop: \@@_input_pop:
-%</package>
 \cs_new_protected:Npn \@@_input_pop:nnn #1#2#3
   {
     \str_gset:Nn \g_file_curr_dir_str  {#1}
@@ -3498,13 +3436,11 @@
 \cs_new_protected:Npn \@@_list:N #1
   {
     \seq_clear:N \l_@@_tmp_seq
-%<*package>
     \clist_if_exist:NT \@filelist
       {
         \exp_args:NNx \seq_set_from_clist:Nn \l_@@_tmp_seq
           { \tl_to_str:N \@filelist }
       }
-%</package>
     \seq_concat:NNN \l_@@_tmp_seq \l_@@_tmp_seq \g_@@_record_seq
     \seq_remove_duplicates:N \l_@@_tmp_seq
     #1 { LaTeX/kernel } { file-list }
@@ -3521,7 +3457,6 @@
 % \cs{@filelist} must be turned to strings before being added to
 % \cs{g_@@_record_seq}.
 %    \begin{macrocode}
-%<*package>
 \cs_if_exist:NT \@filelist
   {
     \AtBeginDocument
@@ -3534,7 +3469,6 @@
           \l_@@_tmp_seq
       }
   }
-%</package>
 %    \end{macrocode}
 %
 % \subsection{GetIfInfo}
@@ -3626,20 +3560,6 @@
     #1 \\
     .............
   }
-\__kernel_msg_new:nnnn { kernel } { input-streams-exhausted }
-  { Input~streams~exhausted }
-  {
-    TeX~can~only~open~up~to~16~input~streams~at~one~time.\\
-    All~16~are~currently~in~use,~and~something~wanted~to~open~
-    another~one.
-  }
-\__kernel_msg_new:nnnn { kernel } { output-streams-exhausted }
-  { Output~streams~exhausted }
-  {
-    TeX~can~only~open~up~to~16~output~streams~at~one~time.\\
-    All~16~are~currently~in~use,~and~something~wanted~to~open~
-    another~one.
-  }
 \__kernel_msg_new:nnnn { kernel } { unbalanced-quote-in-filename }
   { Unbalanced~quotes~in~file~name~'#1'. }
   {
@@ -3699,7 +3619,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Deleted: trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -1,389 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3final.dtx
-%
-% Copyright (C) 1990-2020 The LaTeX3 Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version.  The latest version
-% of this license is in the file
-%
-%    https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-%    https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
-  \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-%   The \pkg{l3final} package\\ Format finalisation^^A
-% }
-%
-% \author{^^A
-%  The \LaTeX3 Project\thanks
-%    {^^A
-%      E-mail:
-%        \href{mailto:latex-team at latex-project.org}
-%          {latex-team at latex-project.org}^^A
-%    }^^A
-% }
-%
-% \date{Released 2020-07-17}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% This module is the end of the \LaTeX3 format file. Currently, a lot of this
-% is copy-pasted from the \LaTeXe{} format or is highly unstable (essentially
-% hacks which need revisiting later).
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3final} Implementation}
-%
-%    \begin{macrocode}
-%<*initex>
-%    \end{macrocode}
-%
-% \subsection{Input encoding}
-%
-%    \begin{macrocode}
-%<@@=char>
-%    \end{macrocode}
-%
-% The letters |a|--|z| and |A|--|Z| have the correct catcode directly from \IniTeX{}
-% while for Unicode engines (almost) all characters to be treated as letters
-% are defined by the automatic data parsing. Thus the changes here are to
-% deal with the additional cases.
-%
-% All the characters in the range $0$--$31$ \emph{except} tab (|^^I|), nl
-% (|^^J|), ff (|^^L|) and cr (|^^M|).
-%    \begin{macrocode}
-\int_step_inline:nnn { 0 } { `\^^H }
-  { \char_set_catcode_invalid:n {#1} }
-\char_set_catcode_invalid:n { `\^^K }
-\int_step_inline:nnn { `\^^N } { 31 }
-  { \char_set_catcode_invalid:n {#1} }
-%    \end{macrocode}
-% The same is true for the top of the $7$-bit range.
-%    \begin{macrocode}
-\char_set_catcode_invalid:n { 127 }
-%    \end{macrocode}
-% For the $8$-bit engines dotless-I and dotless-J need to be valid,
-% and these therefore appear in some following code. To avoid an issue
-% when those lines are read, the chars are made valid here and that is
-% reversed for Unicode engines below.
-%    \begin{macrocode}
-\char_set_catcode_letter:n { `\^^Y }
-\char_set_catcode_letter:n { `\^^Z }
-%    \end{macrocode}
-%
-% For non-Unicode engine we now need to convert from UTF-$8$ to $8$-bit
-% for pattern reading and document use. The set up here is copied from
-% the file |conv-utf8-ec.tex| maintained by \textsc{tug} for hyphenation
-% pattern use. As some of the relevant primitives have been moved and to
-% allow for self-contained code that is copied here with minor adjustments.
-% (The primitives have to be available at point of use not just at point of
-% definition so a compatibility layer is hard to arrange here.)
-%    \begin{macrocode}
-\bool_lazy_or:nnTF
-  { \sys_if_engine_luatex_p: }
-  { \sys_if_engine_xetex_p: }
-%    \end{macrocode}
-% Unicode engines: make these two invalid (this happens after \TeX{}
-% has read and thrown away their use in the following).
-%    \begin{macrocode}
-  {
-    \char_set_catcode_invalid:n { `\^^Y }
-    \char_set_catcode_invalid:n { `\^^Z }
-  }
-%    \end{macrocode}
-% Now for $8$-bit engines.
-%    \begin{macrocode}
-  {
-%    \end{macrocode}
-% At least for the present, make \upTeX{} behave like \pdfTeX{} so
-% the set up is easier.
-%    \begin{macrocode}
-    \sys_if_engine_uptex:T
-      { \tex_disablecjktoken:D }
-%    \end{macrocode}
-% The actual mappings: these are kept low-level for performance reasons.
-%    \begin{macrocode}
-    \cs_new:cpn { @@_active_C3:N } #1
-      {
-        \if_meaning:w #1 ^^9f ^^ff \else: % ß - U+00DF - germandbls
-        \if_meaning:w #1 ^^a0 ^^e0 \else: % à - U+00E0 - agrave
-        \if_meaning:w #1 ^^a1 ^^e1 \else: % á - U+00E1 - aacute
-        \if_meaning:w #1 ^^a2 ^^e2 \else: % â - U+00E2 - acircumflex
-        \if_meaning:w #1 ^^a3 ^^e3 \else: % ã - U+00E3 - atilde
-        \if_meaning:w #1 ^^a4 ^^e4 \else: % ä - U+00E4 - adieresis
-        \if_meaning:w #1 ^^a5 ^^e5 \else: % å - U+00E5 - aring
-        \if_meaning:w #1 ^^a6 ^^e6 \else: % æ - U+00E6 - ae
-        \if_meaning:w #1 ^^a7 ^^e7 \else: % ç - U+00E7 - ccedilla
-        \if_meaning:w #1 ^^a8 ^^e8 \else: % è - U+00E8 - egrave
-        \if_meaning:w #1 ^^a9 ^^e9 \else: % é - U+00E9 - eacute
-        \if_meaning:w #1 ^^aa ^^ea \else: % ê - U+00EA - ecircumflex
-        \if_meaning:w #1 ^^ab ^^eb \else: % ë - U+00EB - edieresis
-        \if_meaning:w #1 ^^ac ^^ec \else: % ì - U+00EC - igrave
-        \if_meaning:w #1 ^^ad ^^ed \else: % í - U+00ED - iacute
-        \if_meaning:w #1 ^^ae ^^ee \else: % î - U+00EE - icircumflex
-        \if_meaning:w #1 ^^af ^^ef \else: % ï - U+00EF - idieresis
-        \if_meaning:w #1 ^^b0 ^^f0 \else: % ð - U+00F0 - eth
-        \if_meaning:w #1 ^^b1 ^^f1 \else: % ñ - U+00F1 - ntilde
-        \if_meaning:w #1 ^^b2 ^^f2 \else: % ò - U+00F2 - ograve
-        \if_meaning:w #1 ^^b3 ^^f3 \else: % ó - U+00F3 - oacute
-        \if_meaning:w #1 ^^b4 ^^f4 \else: % ô - U+00F4 - ocircumflex
-        \if_meaning:w #1 ^^b5 ^^f5 \else: % õ - U+00F5 - otilde
-        \if_meaning:w #1 ^^b6 ^^f6 \else: % ö - U+00F6 - odieresis
-        \if_meaning:w #1 ^^b8 ^^f8 \else: % ø - U+00F8 - oslash
-        \if_meaning:w #1 ^^b9 ^^f9 \else: % ù - U+00F9 - ugrave
-        \if_meaning:w #1 ^^ba ^^fa \else: % ú - U+00FA - uacute
-        \if_meaning:w #1 ^^bb ^^fb \else: % û - U+00FB - ucircumflex
-        \if_meaning:w #1 ^^bc ^^fc \else: % ü - U+00FC - udieresis
-        \if_meaning:w #1 ^^bd ^^fd \else: % ý - U+00FD - yacute
-        \if_meaning:w #1 ^^be ^^fe \else: % þ - U+00FE - thorn
-        \if_meaning:w #1 ^^bf ^^b8 \else: % ÿ - U+00FF - ydieresis
-        \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi:
-        \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi:
-        \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi:
-      }
-    \cs_new:cpn { @@_active_C4:N } #1
-      {
-        \if_meaning:w #1 ^^83 ^^a0 \else: % ă - U+0103 - abreve
-        \if_meaning:w #1 ^^85 ^^a1 \else: % ą - U+0105 - aogonek
-        \if_meaning:w #1 ^^87 ^^a2 \else: % ć - U+0107 - cacute
-        \if_meaning:w #1 ^^8d ^^a3 \else: % č - U+010D - ccaron
-        \if_meaning:w #1 ^^8f ^^a4 \else: % ď - U+010F - dcaron
-        \if_meaning:w #1 ^^91 ^^9e \else: % đ - U+0111 - dcroat
-        \if_meaning:w #1 ^^99 ^^a6 \else: % ę - U+0119 - eogonek
-        \if_meaning:w #1 ^^9b ^^a5 \else: % ě - U+011B - ecaron
-        \if_meaning:w #1 ^^9f ^^a7 \else: % ğ - U+011F - gbreve
-        \if_meaning:w #1 ^^b1 ^^19 \else: % ı - U+0131 - dotlessi
-        \if_meaning:w #1 ^^b3 ^^bc \else: % ij - U+0133 - ij
-        \if_meaning:w #1 ^^ba ^^a8 \else: % ĺ - U+013A - lacute
-        \if_meaning:w #1 ^^be ^^a9 \else: % ľ - U+013E - lcaron
-          \__kernel_msg_expandable_error:nn { kernel } { encoding-failure }
-        \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi:
-      }
-    \cs_new:cpn { @@_active_C5:N } #1
-      {
-        \if_meaning:w #1 ^^82 ^^aa \else: % ł - U+0142 - lslash
-        \if_meaning:w #1 ^^84 ^^ab \else: % ń - U+0144 - nacute
-        \if_meaning:w #1 ^^88 ^^ac \else: % ň - U+0148 - ncaron
-        \if_meaning:w #1 ^^8b ^^ad \else: % ŋ - U+014B - eng
-        \if_meaning:w #1 ^^91 ^^ae \else: % ő - U+0151 - ohungarumlaut
-        \if_meaning:w #1 ^^93 ^^f7 \else: % œ - U+0153 - oe
-        \if_meaning:w #1 ^^95 ^^af \else: % ŕ - U+0155 - racute
-        \if_meaning:w #1 ^^99 ^^b0 \else: % ř - U+0159 - rcaron
-        \if_meaning:w #1 ^^9b ^^b1 \else: % ś - U+015B - sacute
-        \if_meaning:w #1 ^^9f ^^b3 \else: % ş - U+015F - scedilla
-        \if_meaning:w #1 ^^a1 ^^b2 \else: % š - U+0161 - scaron
-        \if_meaning:w #1 ^^a5 ^^b4 \else: % ť - U+0165 - tcaron
-        \if_meaning:w #1 ^^af ^^b7 \else: % ů - U+016F - uring
-        \if_meaning:w #1 ^^b1 ^^b6 \else: % ű - U+0171 - uhungarumlaut
-        \if_meaning:w #1 ^^ba ^^b9 \else: % ź - U+017A - zacute
-        \if_meaning:w #1 ^^bc ^^bb \else: % ż - U+017C - zdotaccent
-        \if_meaning:w #1 ^^be ^^ba \else: % ž - U+017E - zcaron
-          \__kernel_msg_expandable_error:nn { kernel } { encoding-failure }
-        \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi:
-        \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi:
-      }
-    \cs_new:cpn { @@_active_C8:N } #1
-      {
-        \if_meaning:w #1 ^^99 ^^b3 \else: % ș - U+0219 - scommaaccent
-        \if_meaning:w #1 ^^9b ^^b5 \else: % ț - U+021B - tcommaaccent
-        \if_meaning:w #1 ^^b7 ^^1a \else: % ȷ - U+0237 - dotlessj
-          \__kernel_msg_expandable_error:nn { kernel } { encoding-failure }
-        \fi: \fi: \fi:
-      }
-%    \end{macrocode}
-% Install and record the active characters.
-%    \begin{macrocode}
-    \clist_map_inline:nn { C3 , C4 , C5 , C8 }
-      {
-        \char_set_catcode_active:n { "#1 }
-        \char_set_active_eq:nc { "#1 } { @@_active_ #1 :N }
-        \seq_put_right:Nx \l_char_special_seq
-          { \exp_not:c { \char_generate:nn { "#1 } { 12 } } }
-        \seq_put_right:Nx \l_char_active_seq
-          { \exp_not:c { \char_generate:nn { "#1 } { 12 } } }
-      }
-    \__kernel_msg_new:nnn { kernel } { encoding-failure }
-      { Unknown~UTF-8~char }
-%    \end{macrocode}
-% All of the chars are lower case so give them the correct \tn{lccode}
-% values.
-%    \begin{macrocode}
-    \clist_map_inline:nn
-      {
-        19 , 1A , 9E , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 ,
-        AA , AB , AC , AD , AE , AF , B0 , B1 , B2 , B3 , B3 , B4 , B5 ,
-        B6 , B7 , B8 , B9 , BA , BB , BC , E0 , E1 , E2 , E3 , E4 , E5 ,
-        E6 , E7 , E8 , E9 , EA , EB , EC , ED , EE , EF , F0 , F1 , F2 ,
-        F3 , F4 , F5 , F6 , F7 , F8 , F9 , FA , FB , FC , FD , FE , FF
-      }
-      { \char_set_lccode:nn { "#1 } { "#1 } }
-  }
-%    \end{macrocode}
-%
-% \subsection{Temporary hacks}
-%
-% \begin{macro}{\T1/lmr/m/n/10, \TU/lmr/m/n/10}
-%   For \emph{testing only} provide some kind of output: for that we
-%   need a font. At present, select Latin Modern Roman at 10\,pt:
-%   entirely arbitrary but at least usable.
-%    \begin{macrocode}
-\sys_if_engine_luatex:T
-  {
-    \tex_everyjob:D \exp_after:wN
-      {
-        \tex_the:D \tex_everyjob:D
-        \lua_now:n { require("l3format.lua") }
-      }
-  }
-\use:x
-  {
-    \tex_everyjob:D
-      {
-        \tex_the:D \tex_everyjob:D
-        \bool_lazy_or:nnTF
-          { \sys_if_engine_luatex_p: }
-          { \sys_if_engine_xetex_p: }
-          {
-            \tex_font:D \exp_not:c { TU/lmr/m/n/10 }
-              = "[lmroman10-regular.otf]/OT" \scan_stop:
-            \exp_not:c { TU/lmr/m/n/10 }
-            \tex_font:D \exp_not:c { TU/lmm/m/n/10 }
-              = "[latinmodern-math.otf]/OT:mode=base;script=math;" \scan_stop:
-            \tex_font:D \exp_not:c { TU/lmm/m/n/7 }
-              = "[latinmodern-math.otf]/OT:mode=base;script=math;+ssty=0;"~at~7pt \scan_stop:
-            \tex_font:D \exp_not:c { TU/lmm/m/n/5 }
-              = "[latinmodern-math.otf]/OT:mode=base;script=math;+ssty=1;"~at~5pt \scan_stop:
-            \exp_not:N \int_step_inline:nnn { 0 } { 3 }
-              {
-                \tex_textfont:D         ##1 = \exp_not:c { TU/lmm/m/n/10 }
-                \tex_scriptfont:D       ##1 = \exp_not:c { TU/lmm/m/n/7 }
-                \tex_scriptscriptfont:D ##1 = \exp_not:c { TU/lmm/m/n/5 }
-              }
-          }
-          {
-            \tex_font:D \exp_not:c { T1/lmr/m/n/10 }
-              = ec-lmr10 \scan_stop:
-            \exp_not:c { T1/lmr/m/n/10 }
-            \tex_font:D \exp_not:c { OT1/lmr/m/n/10 }
-              = rm-lmr10 \scan_stop:
-            \tex_font:D \exp_not:c { OML/lmm/m/it/10 }
-              = lmmi10 \scan_stop:
-            \tex_font:D \exp_not:c { OMS/lmsy/m/n/10 }
-              = lmsy10 \scan_stop:
-            \tex_font:D \exp_not:c { OMX/lmex/m/n/10 }
-              = lmex10 \scan_stop:
-            \tex_font:D \exp_not:c { OT1/lmr/m/n/7 }
-              = rm-lmr7 \scan_stop:
-            \tex_font:D \exp_not:c { OML/lmm/m/it/7 }
-              = lmmi7 \scan_stop:
-            \tex_font:D \exp_not:c { OMS/lmsy/m/n/7 }
-              = lmsy7 \scan_stop:
-            \tex_font:D \exp_not:c { OMX/lmex/m/n/7 }
-              = lmex10~at~7pt \scan_stop:
-            \tex_font:D \exp_not:c { OT1/lmr/m/n/5 }
-              = rm-lmr5 \scan_stop:
-            \tex_font:D \exp_not:c { OML/lmm/m/it/5 }
-              = lmmi5 \scan_stop:
-            \tex_font:D \exp_not:c { OMS/lmsy/m/n/5 }
-              = lmsy5 \scan_stop:
-            \tex_font:D \exp_not:c { OMX/lmex/m/n/5 }
-              = lmex10~at~5pt \scan_stop:
-            \tex_textfont:D         0 = \exp_not:c { OT1/lmr/m/n/10 }
-            \tex_textfont:D         1 = \exp_not:c { OML/lmm/m/it/10 }
-            \tex_textfont:D         2 = \exp_not:c { OMS/lmsy/m/n/10 }
-            \tex_textfont:D         3 = \exp_not:c { OMX/lmex/m/n/10 }
-            \tex_scriptfont:D       0 = \exp_not:c { OT1/lmr/m/n/7 }
-            \tex_scriptfont:D       1 = \exp_not:c { OML/lmm/m/it/7 }
-            \tex_scriptfont:D       2 = \exp_not:c { OMS/lmsy/m/n/7 }
-            \tex_scriptfont:D       3 = \exp_not:c { OMX/lmex/m/n/7 }
-            \tex_scriptscriptfont:D 0 = \exp_not:c { OT1/lmr/m/n/5 }
-            \tex_scriptscriptfont:D 1 = \exp_not:c { OML/lmm/m/it/5 }
-            \tex_scriptscriptfont:D 2 = \exp_not:c { OMS/lmsy/m/n/5 }
-            \tex_scriptscriptfont:D 3 = \exp_not:c { OMX/lmex/m/n/5 }
-          }
-      }
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-%  Produce PDF output if possible (easier testing) and set some kind of
-%  horizontal width: the one here is the \LaTeXe{} default. A parfill is
-%  also useful so we get some kind of sensible paragraphs.
-%    \begin{macrocode}
-\dim_set:Nn \tex_hsize:D { 345pt }
-\skip_set:Nn \tex_parfillskip:D { 0pt plus 1fil }
-\cs_if_exist:NT \tex_pdfoutput:D
-  { \int_set:Nn \tex_pdfoutput:D { 1 } }
-%    \end{macrocode}
-%
-% \begin{macro}{\stop}
-%   A way out of the run without needing to switch to the code environment.
-%    \begin{macrocode}
-\cs_set_eq:NN \stop \tex_end:D
-%    \end{macrocode}
-% \end{macro}
-%
-% \subsection{Final tasks}
-%
-% \begin{macro}{\par}
-%   \TeX{} has a nasty habit of inserting a command with the name \cs{par}
-%   so we had better make sure that \cs{par} has a definition.
-%    \begin{macrocode}
-\cs_set_eq:NN \par \tex_par:D
-%    \end{macrocode}
-% \end{macro}
-%
-% The very last job is to dump the format, taking care to first leave
-% the code environment and set the appropriate flag.
-%    \begin{macrocode}
-\use:n
-  {
-    \bool_set_false:N \l__kernel_expl_bool
-    \char_set_catcode_space:n  { 9 }   % tab
-    \char_set_catcode_space:n  { 32 }  % space
-    \char_set_catcode_active:n { 34 }  % double quote
-    \char_set_catcode_active:n { 36 }  % dollar
-    \char_set_catcode_active:n { 38 }  % ampersand
-    \char_set_catcode_other:n  { 58 }  % colon
-    \char_set_catcode_active:n { 94 }  % circumflex
-    \char_set_catcode_active:n { 95 }  % underscore
-    \char_set_catcode_other:n  { 124 } % pipe
-    \char_set_catcode_active:n { 126 } % tilde
-    \tex_endlinechar:D = 13 \scan_stop:
-    \tex_newlinechar:D = 10 \scan_stop:
-    \tex_dump:D
-  }
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-%</initex>
-%    \end{macrocode}
-%
-% \end{implementation}
-%
-%\PrintIndex

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -159,7 +159,7 @@
 % \section{\pkg{l3flag} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -300,7 +300,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Deleted: trunk/Master/texmf-dist/source/latex/l3kernel/l3format.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3format.ins	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3format.ins	2020-08-07 21:37:39 UTC (rev 56067)
@@ -1,164 +0,0 @@
-\iffalse meta-comment
-
-File l3format.ins
-
-Copyright (C) 2011,2012,2014-2020 The LaTeX3 Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version.  The latest version
-of this license is in the file
-
-   https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
------------------------------------------------------------------------
-
-The development version of the bundle can be found at
-
-   https://github.com/latex3/latex3
-
-for those people who are interested.
-
------------------------------------------------------------------------
-
-Any modification of this file should ensure that the copyright and
-license information is placed in the derived files.
-
-\fi
-
-\let\jobname\relax
-\input l3docstrip.dtx
-\askforoverwritefalse
-
-\preamble
-
-Copyright (C) 1990-2020 The LaTeX3 Project
-
-It may be distributed and/or modified under the conditions of
-the LaTeX Project Public License (LPPL), either version 1.3c of
-this license or (at your option) any later version.  The latest
-version of this license is in the file:
-
-   https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-\endpreamble
-% stop docstrip adding \endinput
-\postamble
-\endpostamble
-
-\keepsilent
-
-\generate
-  {
-    \file{l3format.ltx}
-      {
-        \from{l3bootstrap.dtx}  {initex}
-        \from{l3names.dtx}      {initex}
-        \from{l3basics.dtx}     {initex}
-        \from{l3expan.dtx}      {initex}
-        \from{l3quark.dtx}      {initex}
-        \from{l3tl.dtx}         {initex}
-        \from{l3str.dtx}        {initex}
-        \from{l3seq.dtx}        {initex}
-        % ======== FORMAT ONLY =========
-        \from{l3alloc.dtx}      {initex}
-        % ==============================
-        \from{l3int.dtx}        {initex}
-        \from{l3flag.dtx}       {initex}
-        \from{l3prg.dtx}        {initex}
-        \from{l3sys.dtx}        {initex}
-        \from{l3clist.dtx}      {initex}
-        \from{l3token.dtx}      {initex}
-        \from{l3prop.dtx}       {initex}
-        \from{l3msg.dtx}        {initex}
-        \from{l3file.dtx}       {initex}
-        \from{l3skip.dtx}       {initex}
-        \from{l3keys.dtx}       {initex}
-        \from{l3intarray.dtx}   {initex}
-        \from{l3fp.dtx}         {initex}
-        \from{l3fp-aux.dtx}     {initex}
-        \from{l3fp-traps.dtx}   {initex}
-        \from{l3fp-round.dtx}   {initex}
-        \from{l3fp-parse.dtx}   {initex}
-        \from{l3fp-assign.dtx}  {initex}
-        \from{l3fp-logic.dtx}   {initex}
-        \from{l3fp-basics.dtx}  {initex}
-        \from{l3fp-extended.dtx}{initex}
-        \from{l3fp-expo.dtx}    {initex}
-        \from{l3fp-trig.dtx}    {initex}
-        \from{l3fp-convert.dtx} {initex}
-        \from{l3fp-random.dtx}  {initex}
-        \from{l3fparray.dtx}    {initex}
-        \from{l3cctab.dtx}      {initex}
-        \from{l3sort.dtx}       {initex}
-        \from{l3str-convert.dtx}{initex}
-        \from{l3tl-analysis.dtx}{initex}
-        \from{l3regex.dtx}      {initex}
-        \from{l3box.dtx}        {initex}
-        \from{l3color-base.dtx} {initex}
-        \from{l3coffins.dtx}    {initex}
-        \from{l3luatex.dtx}     {initex,tex}
-        \from{l3unicode.dtx}    {initex}
-        \from{l3text.dtx}       {initex}
-        \from{l3text-case.dtx}  {initex}
-        \from{l3text-purify.dtx}{initex}
-        \from{l3candidates.dtx} {initex}
-        % ======== FORMAT ONLY =========
-        \from{l3final.dtx}      {initex}
-        % ==============================
-      }
-  }
-
-% ISO-8859 encodings.
-\generate{%
-  \file{l3str-enc-iso88591.def}  {\from{l3str-convert.dtx}{iso88591}}%
-  \file{l3str-enc-iso88592.def}  {\from{l3str-convert.dtx}{iso88592}}%
-  \file{l3str-enc-iso88593.def}  {\from{l3str-convert.dtx}{iso88593}}%
-  \file{l3str-enc-iso88594.def}  {\from{l3str-convert.dtx}{iso88594}}%
-  \file{l3str-enc-iso88595.def}  {\from{l3str-convert.dtx}{iso88595}}%
-  \file{l3str-enc-iso88596.def}  {\from{l3str-convert.dtx}{iso88596}}%
-  \file{l3str-enc-iso88597.def}  {\from{l3str-convert.dtx}{iso88597}}%
-  \file{l3str-enc-iso88598.def}  {\from{l3str-convert.dtx}{iso88598}}%
-  \file{l3str-enc-iso88599.def}  {\from{l3str-convert.dtx}{iso88599}}%
-  \file{l3str-enc-iso885910.def} {\from{l3str-convert.dtx}{iso885910}}%
-  \file{l3str-enc-iso885911.def} {\from{l3str-convert.dtx}{iso885911}}%
-  \file{l3str-enc-iso885913.def} {\from{l3str-convert.dtx}{iso885913}}%
-  \file{l3str-enc-iso885914.def} {\from{l3str-convert.dtx}{iso885914}}%
-  \file{l3str-enc-iso885915.def} {\from{l3str-convert.dtx}{iso885915}}%
-  \file{l3str-enc-iso885916.def} {\from{l3str-convert.dtx}{iso885916}}%
-}
-
-\generate{\file{l3debug.def}{\from{l3debug.dtx}{initex}}}
-\generate{\file{l3deprecation.def}{\from{l3deprecation.dtx}{initex,patches}}}
-
-\generate{\file{l3docstrip.tex}{\from{l3docstrip.dtx}{program}}}
-
-% Lua code (currently identical to the package-mode version)
-
-\def\MetaPrefix{--}
-\preamble
-
-Copyright (C) 1990-2020 The LaTeX3 Project
-
-It may be distributed and/or modified under the conditions of
-the LaTeX Project Public License (LPPL), either version 1.3c of
-this license or (at your option) any later version.  The latest
-version of this license is in the file:
-
-   https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-\endpreamble
-\nopostamble
-\generate{\file{expl3.lua}   {\from{l3luatex.dtx}{lua,package}}}
-\generate{\file{l3format.lua}{\from{l3luatex.dtx}{lua,initex}}}
-
-\endbatchfile

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 % \maketitle
 %
 % \begin{documentation}
@@ -52,7 +52,7 @@
 % \section{\pkg{l3fp-assign} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -219,7 +219,7 @@
 % \end{variable}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -56,7 +56,7 @@
 % \section{\pkg{l3fp-aux} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -1296,7 +1296,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,7 +53,7 @@
 % \section{\pkg{l3fp-basics} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -2168,7 +2168,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -56,7 +56,7 @@
 % \section{\texttt{l3fp-convert} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -620,7 +620,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,7 +53,7 @@
 % \section{\pkg{l3fp-expo} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -1369,7 +1369,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,7 +53,7 @@
 % \section{\pkg{l3fp-extended} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -1263,7 +1263,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,7 +53,7 @@
 % \section{\pkg{l3fp-logic} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -727,7 +727,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,7 +53,7 @@
 % \section{\pkg{l3fp-parse} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -800,7 +800,6 @@
       {#2}
     \exp_after:wN \c_nan_fp \exp:w \exp_end_continue_f:w #1
   }
-%<*package>
 \cs_set_protected:Npn \@@_tmp:w #1
   {
     \cs_if_exist:NT #1
@@ -824,7 +823,6 @@
       }
   }
 \exp_args:Nc \@@_tmp:w { @unexpandable at protect }
-%</package>
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2889,17 +2887,15 @@
   { Arguments~in~#1#2~are~invalid. }
 \__kernel_msg_new:nnn { kernel } { fp-infty-pi }
   { Math~command~#1 is~not~an~fp }
-%<*package>
 \cs_if_exist:cT { @unexpandable at protect }
   {
     \__kernel_msg_new:nnn { kernel } { fp-robust-cmd }
       { Robust~command~#1 invalid~in~fp~expression! }
   }
-%</package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,7 +53,7 @@
 % \section{\pkg{l3fp-random} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -654,7 +654,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -56,7 +56,7 @@
 % \section{\pkg{l3fp-round} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -582,7 +582,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 % \maketitle
 %
 % \begin{documentation}
@@ -52,7 +52,7 @@
 % \section{\pkg{l3fp-traps} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -390,7 +390,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -53,7 +53,7 @@
 % \section{\pkg{l3fp-trig} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -1688,7 +1688,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -115,7 +115,7 @@
 % \section{\pkg{l3fparray} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -388,7 +388,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -1010,7 +1010,7 @@
 % \section{\pkg{l3int} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -1272,13 +1272,11 @@
 %   this is therefore accessed by name. (The same applies to \cs{newbox},
 %   \cs{newdimen} and so on.)
 %    \begin{macrocode}
-%<*package>
 \cs_new_protected:Npn \int_new:N #1
   {
     \__kernel_chk_if_free_cs:N #1
     \cs:w newcount \cs_end: #1
   }
-%</package>
 \cs_generate_variant:Nn \int_new:N { c }
 %    \end{macrocode}
 % \end{macro}
@@ -2581,7 +2579,7 @@
 % \end{variable}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -166,7 +166,7 @@
 % \section{\pkg{l3intarray} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -579,7 +579,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -265,6 +265,27 @@
 %
 % \begin{function}
 %   {
+%     \__kernel_msg_critical:nnnnnn ,
+%     \__kernel_msg_critical:nnnnn  ,
+%     \__kernel_msg_critical:nnnn   ,
+%     \__kernel_msg_critical:nnn    ,
+%     \__kernel_msg_critical:nn     ,
+%     \__kernel_msg_critical:nnxxxx ,
+%     \__kernel_msg_critical:nnxxx  ,
+%     \__kernel_msg_critical:nnxx   ,
+%     \__kernel_msg_critical:nnx
+%   }
+%   \begin{syntax}
+%     \cs{__kernel_msg_critical:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four}
+%   \end{syntax}
+%   Issues kernel \meta{module} error \meta{message}, passing \meta{arg one}
+%   to \meta{arg four} to the text-creating functions.  After issuing a
+%   critical error, \TeX{} stops reading the current input file.
+%   Cannot be redirected.
+% \end{function}
+%
+% \begin{function}
+%   {
 %     \__kernel_msg_error:nnnnnn ,
 %     \__kernel_msg_error:nnnnn  ,
 %     \__kernel_msg_error:nnnn   ,

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -934,7 +934,7 @@
 % \section{\pkg{l3keys} Implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 % \subsection{Low-level interface}
@@ -1493,44 +1493,29 @@
 %
 % \subsubsection{Internal auxiliaries}
 %
-% \begin{variable}{\s_@@_stop}
+% \begin{variable}{\s_@@_nil,\s_@@_mark,\s_@@_stop}
 %   Internal scan marks.
 %    \begin{macrocode}
+\scan_new:N \s_@@_nil
+\scan_new:N \s_@@_mark
 \scan_new:N \s_@@_stop
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{variable}{\q_@@_nil,\q_@@_no_value}
+% \begin{variable}{\q_@@_no_value}
 %   Internal quarks.
 %    \begin{macrocode}
-\quark_new:N \q_@@_nil
 \quark_new:N \q_@@_no_value
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{macro}[pTF]{\@@_quark_if_nil:n}
+% \begin{macro}[pTF]{\@@_quark_if_no_value:N}
 %   Branching quark conditional.
 %    \begin{macrocode}
-\__kernel_quark_new_conditional:Nn \@@_quark_if_nil:n { TF }
 \__kernel_quark_new_conditional:Nn \@@_quark_if_no_value:N { TF }
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{variable}{\q_@@_recursion_tail,\q_@@_recursion_stop}
-%   Internal recursion quarks.
-%    \begin{macrocode}
-\quark_new:N \q_@@_recursion_tail
-\quark_new:N \q_@@_recursion_stop
-%    \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_if_recursion_tail_stop:n}
-%   Functions to query recursion quarks.
-%    \begin{macrocode}
-\__kernel_quark_new_test:N \@@_if_recursion_tail_stop:n
-%    \end{macrocode}
-% \end{macro}
-%
 % \subsection{The key defining mechanism}
 %
 % \begin{macro}{\keys_define:nn}
@@ -1580,7 +1565,7 @@
         \str_if_empty:NF \l_@@_property_str
           {
             \__kernel_msg_error:nnxx { kernel } { key-property-unknown }
-              { \l_@@_property_str } { \l_keys_path_str }
+              \l_@@_property_str \l_keys_path_str
           }
       }
   }
@@ -1590,54 +1575,60 @@
 % \end{macro}
 %
 % \begin{macro}{\@@_property_find:n}
-% \begin{macro}{\@@_property_find:w}
+% \begin{macro}
+%   {
+%     \@@_property_find_auxi:w   ,
+%     \@@_property_find_auxii:w  ,
+%     \@@_property_find_auxiii:w ,
+%     \@@_property_find_auxiv:w
+%   }
 %   Searching for a property means finding the last |.| in the input,
 %   and storing the text before and after it. Everything is turned into
-%   strings, so there is no problem using an \texttt{x}-type expansion.
+%   strings, so there is no problem using an \texttt{x}-type expansion. Since
+%   |\__keys_trim_spaces:n| will turn its argument into a string anyway, this
+%   function uses \cs{cs_set_nopar:Npx} instead of \cs{tl_set:Nx} to gain some
+%   speed.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_property_find:n #1
   {
-    \str_set:Nx \l_@@_property_str { \@@_trim_spaces:n {#1} }
-    \exp_after:wN \@@_property_find:w \l_@@_property_str . .
-      \s_@@_stop {#1}
+    \cs_set_nopar:Npx \l__keys_property_str { \__keys_trim_spaces:n { #1 } }
+    \exp_after:wN \@@_property_find_auxi:w \l__keys_property_str
+      \s_@@_nil \@@_property_find_auxii:w
+      . \s_@@_nil \@@_property_find_err:w
   }
-\cs_new_protected:Npn \@@_property_find:w #1 . #2 . #3 \s_@@_stop #4
+\cs_new_protected:Npn \@@_property_find_auxi:w #1 . #2 \s_@@_nil #3
   {
-    \tl_if_blank:nTF {#3}
-      {
-        \str_clear:N \l_@@_property_str
-        \__kernel_msg_error:nnn { kernel } { key-no-property } {#4}
-      }
-      {
-        \str_if_eq:nnTF {#3} { . }
-          {
-            \str_set:Nx \l_keys_path_str
-              {
-                \str_if_empty:NF \l_@@_module_str
-                  { \l_@@_module_str  / }
-                \tl_trim_spaces:n {#1}
-              }
-            \str_set:Nn \l_@@_property_str { . #2 }
-          }
-          {
-            \str_set:Nx \l_keys_path_str { \l_@@_module_str / #1 . #2 }
-            \@@_property_search:w #3 \s_@@_stop
-          }
-        \tl_set_eq:NN \l_keys_path_tl \l_keys_path_str
-      }
+    #3 #1 \s_@@_mark #2 \s_@@_nil #3
   }
-\cs_new_protected:Npn \@@_property_search:w #1 . #2 \s_@@_stop
+\cs_new_protected:Npn \@@_property_find_auxii:w
+    #1 \s_@@_mark #2 \s_@@_nil \@@_property_find_auxii:w . \s_@@_nil
+    \@@_property_find_err:w
   {
-    \str_if_eq:nnTF {#2} { . }
-      {
-        \str_set:Nx \l_keys_path_str { \l_keys_path_str }
-        \str_set:Nn \l_@@_property_str { . #1 }
-      }
-      {
-        \str_set:Nx \l_keys_path_str { \l_keys_path_str . #1 }
-        \@@_property_search:w #2 \s_@@_stop
-      }
+    \cs_set_nopar:Npx \l_keys_path_str
+      { \str_if_empty:NF \l__keys_module_str { \l__keys_module_str / } #1 }
+    \@@_property_find_auxi:w #2 \s_@@_nil \@@_property_find_auxiii:w . \s_@@_nil
+      \@@_property_find_auxiv:w
   }
+\cs_new_protected:Npn \@@_property_find_auxiii:w #1 \s_@@_mark
+  {
+    \cs_set_nopar:Npx \l_keys_path_str { \l_keys_path_str . #1 }
+    \@@_property_find_auxi:w
+  }
+\cs_new_protected:Npn \@@_property_find_auxiv:w
+    #1 \s_@@_nil \@@_property_find_auxiii:w
+    \s_@@_mark \s_@@_nil \@@_property_find_auxiv:w
+  {
+    \cs_set_nopar:Npx \l__keys_property_str { . #1 }
+    \cs_set_nopar:Npx \l_keys_path_str
+      { \exp_after:wN \__keys_trim_spaces:n \exp_after:wN { \l_keys_path_str } }
+    \tl_set_eq:NN \l_keys_path_tl \l_keys_path_str
+  }
+\cs_new_protected:Npn \@@_property_find_err:w
+    #1 \s_@@_nil #2 \@@_property_find_err:w
+  {
+    \str_clear:N \l__keys_property_str
+    \__kernel_msg_error:nnn { kernel } { key-no-property } {#1}
+  }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -1658,9 +1649,8 @@
           \l_@@_property_str \s_@@_stop
           { \use:c { \c_@@_props_root_str \l_@@_property_str } }
           {
-            \__kernel_msg_error:nnxx { kernel }
-              { key-property-requires-value } { \l_@@_property_str }
-              { \l_keys_path_str }
+            \__kernel_msg_error:nnxx { kernel } { key-property-requires-value }
+              \l_@@_property_str \l_keys_path_str
           }
       }
       { \use:c { \c_@@_props_root_str \l_@@_property_str } {#1} }
@@ -1690,7 +1680,7 @@
     \@@_cmd_set:nn { \l_keys_path_str / unknown }
       {
         \__kernel_msg_error:nnx { kernel } { boolean-values-only }
-          { \l_keys_key_str }
+          \l_keys_key_str
       }
     \@@_default_set:n { true }
   }
@@ -1712,7 +1702,7 @@
     \@@_cmd_set:nn { \l_keys_path_str / unknown }
       {
         \__kernel_msg_error:nnx { kernel } { boolean-values-only }
-          { \l_keys_key_str }
+          \l_keys_key_str
       }
     \@@_default_set:n { true }
   }
@@ -1741,7 +1731,7 @@
           { choice }
           {
             \__kernel_msg_error:nnxx { kernel } { nested-choice-key }
-              { \l_keys_path_tl } { \@@_parent:o \l_keys_path_str }
+              \l_keys_path_tl { \@@_parent:o \l_keys_path_str }
           }
           { \@@_choice_make_aux:N #1 }
       }
@@ -1751,11 +1741,11 @@
   {
     \cs_set_nopar:cpn { \c_@@_type_root_str \l_keys_path_str }
       { choice }
-    \@@_cmd_set:nn { \l_keys_path_str } { #1 {##1} }
+    \@@_cmd_set:nn \l_keys_path_str { #1 {##1} }
     \@@_cmd_set:nn { \l_keys_path_str / unknown }
       {
         \__kernel_msg_error:nnxx { kernel } { key-choice-unknown }
-          { \l_keys_path_str } {##1}
+          \l_keys_path_str {##1}
       }
   }
 %    \end{macrocode}
@@ -1886,7 +1876,8 @@
       { \@@_execute_inherit: }
       {
         \str_clear:N \l_@@_inherit_str
-        \cs_if_exist_use:cT { \c_@@_code_root_str \l_keys_path_str } { {#1} }
+        \cs_if_exist:cT { \c_@@_code_root_str \l_keys_path_str }
+          { \@@_execute:nn \l_keys_path_str {#1} }
       }
   }
 %    \end{macrocode}
@@ -1900,8 +1891,7 @@
   {
     \@@_cmd_set:Vo \l_keys_path_str
       {
-        \exp_after:wN \keys_set:nn
-        \exp_after:wN { \l_@@_module_str } {#1}
+        \exp_after:wN \keys_set:nn \exp_after:wN { \l_@@_module_str } {#1}
       }
   }
 \cs_new_protected:Npn \@@_meta_make:nn #1#2
@@ -1916,11 +1906,9 @@
 \cs_new_protected:Npn \@@_prop_put:Nn #1#2
   {
     \prop_if_exist:NF #1 { \prop_new:N #1 }
-    \exp_after:wN \@@_find_key_module:NNw
-      \exp_after:wN \l_@@_tmpa_tl
-      \exp_after:wN \l_@@_tmpb_tl
-      \l_keys_path_str / \s_@@_stop
-    \@@_cmd_set:nx { \l_keys_path_str }
+    \exp_after:wN \@@_find_key_module:wNN \l_keys_path_str \s_@@_stop
+      \l_@@_tmpa_tl \l_@@_tmpb_tl
+    \@@_cmd_set:nx \l_keys_path_str
       {
         \exp_not:c { prop_ #2 put:Nnn }
         \exp_not:N #1
@@ -1951,7 +1939,6 @@
 %
 % \begin{macro}{\@@_value_requirement:nn}
 % \begin{macro}{\@@_validate_forbidden:, \@@_validate_required:}
-% \begin{macro}{\@@_validate_cleanup:w}
 %   Validating key input is done using a second function which runs before
 %   the main key code. Setting that up means setting it equal to a generic
 %   stub which does the check. This approach makes the lookup very fast at
@@ -1991,8 +1978,8 @@
     \bool_if:NF \l_@@_no_value_bool
       {
         \__kernel_msg_error:nnxx { kernel } { value-forbidden }
-          { \l_keys_path_str } { \l_keys_value_tl }
-        \@@_validate_cleanup:w
+          \l_keys_path_str \l_keys_value_tl
+        \use_none:nnn
       }
   }
 \cs_new_protected:Npn \@@_validate_required:
@@ -2000,15 +1987,13 @@
     \bool_if:NT \l_@@_no_value_bool
       {
         \__kernel_msg_error:nnx { kernel } { value-required }
-          { \l_keys_path_str }
-        \@@_validate_cleanup:w
+          \l_keys_path_str
+        \use_none:nnn
       }
   }
-\cs_new_protected:Npn \@@_validate_cleanup:w #1 \cs_end: #2#3 { }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
-% \end{macro}
 %
 % \begin{macro}{\@@_variable_set:NnnN, \@@_variable_set:cnnN}
 % \begin{macro}{\@@_variable_set_required:NnnN, \@@_variable_set_required:cnnN}
@@ -2018,7 +2003,7 @@
 \cs_new_protected:Npn \@@_variable_set:NnnN #1#2#3#4
   {
     \use:c { #2_if_exist:NF } #1 { \use:c { #2 _new:N } #1 }
-    \@@_cmd_set:nx { \l_keys_path_str }
+    \@@_cmd_set:nx \l_keys_path_str
       {
         \exp_not:c { #2 _ #3 set:N #4 }
         \exp_not:N #1
@@ -2110,7 +2095,7 @@
 %   \texttt{set} function.
 %    \begin{macrocode}
 \cs_new_protected:cpn { \c_@@_props_root_str .code:n } #1
-  { \@@_cmd_set:nn { \l_keys_path_str } {#1} }
+  { \@@_cmd_set:nn \l_keys_path_str {#1} }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2447,7 +2432,7 @@
 \cs_new_protected:Npn \keys_set_known:nnN #1#2#3
   {
     \exp_args:No \@@_set_known:nnnnN
-      \l_@@_unused_clist { \q_@@_no_value } {#1} {#2} #3
+      \l_@@_unused_clist \q_@@_no_value {#1} {#2} #3
   }
 \cs_generate_variant:Nn \keys_set_known:nnN { nV , nv , no }
 \cs_new_protected:Npn \keys_set_known:nnnN #1#2#3#4
@@ -2460,11 +2445,11 @@
   {
     \clist_clear:N \l_@@_unused_clist
     \@@_set_known:nnn {#2} {#3} {#4}
-    \tl_set:Nx #5 { \exp_not:o { \l_@@_unused_clist } }
+    \tl_set:Nx #5 { \exp_not:o \l_@@_unused_clist }
     \tl_set:Nn \l_@@_unused_clist {#1}
   }
 \cs_new_protected:Npn \keys_set_known:nn #1#2
-  { \@@_set_known:nnn { \q_@@_no_value } {#1} {#2} }
+  { \@@_set_known:nnn \q_@@_no_value {#1} {#2} }
 \cs_generate_variant:Nn \keys_set_known:nn { nV , nv , no }
 \cs_new_protected:Npn \@@_set_known:nnn #1#2#3
   {
@@ -2525,7 +2510,7 @@
   {
     \exp_args:No \@@_set_filter:nnnnnN
       \l_@@_unused_clist
-        { \q_@@_no_value } {#1} {#2} {#3} #4
+        \q_@@_no_value {#1} {#2} {#3} #4
   }
 \cs_generate_variant:Nn \keys_set_filter:nnnN { nnV , nnv , nno }
 \cs_new_protected:Npn \keys_set_filter:nnnnN #1#2#3#4#5
@@ -2538,11 +2523,11 @@
   {
     \clist_clear:N \l_@@_unused_clist
     \@@_set_filter:nnnn {#2} {#3} {#4} {#5}
-    \tl_set:Nx #6 { \exp_not:o { \l_@@_unused_clist } }
+    \tl_set:Nx #6 { \exp_not:o \l_@@_unused_clist }
     \tl_set:Nn \l_@@_unused_clist {#1}
   }
 \cs_new_protected:Npn \keys_set_filter:nnn #1#2#3
-  {\@@_set_filter:nnnn { \q_@@_no_value } {#1} {#2} {#3} }
+  {\@@_set_filter:nnnn \q_@@_no_value {#1} {#2} {#3} }
 \cs_generate_variant:Nn \keys_set_filter:nnn { nnV , nnv , nno }
 \cs_new_protected:Npn \@@_set_filter:nnnn #1#2#3#4
   {
@@ -2604,7 +2589,14 @@
 %
 % \begin{macro}{\@@_set_keyval:n, \@@_set_keyval:nn}
 % \begin{macro}{\@@_set_keyval:nnn, \@@_set_keyval:onn}
-% \begin{macro}{\@@_find_key_module:NNw}
+% \begin{macro}{\@@_find_key_module:wNN}
+% \begin{macro}
+%   {
+%     \@@_find_key_module_auxi:Nw   ,
+%     \@@_find_key_module_auxii:Nw  ,
+%     \@@_find_key_module_auxiii:Nn ,
+%     \@@_find_key_module_auxiv:Nw
+%   }
 % \begin{macro}{\@@_set_selective:}
 %   A shared system once again. First, set the current path and add a
 %   default if needed. There are then checks to see if the a value is
@@ -2638,31 +2630,47 @@
       }
     \str_clear:N \l_@@_module_str
     \str_clear:N \l_@@_inherit_str
-    \exp_after:wN \@@_find_key_module:NNw
-      \exp_after:wN \l_@@_module_str
-      \exp_after:wN \l_keys_key_str
-      \l_keys_path_str / \s_@@_stop
+    \exp_after:wN \@@_find_key_module:wNN \l_keys_path_str \s_@@_stop
+      \l_@@_module_str \l_keys_key_str
     \tl_set_eq:NN \l_keys_key_tl \l_keys_key_str
     \@@_value_or_default:n {#3}
     \bool_if:NTF \l_@@_selective_bool
-      { \@@_set_selective: }
-      { \@@_execute: }
+      \@@_set_selective:
+      \@@_execute:
     \str_set:Nn \l_@@_module_str {#1}
   }
 \cs_generate_variant:Nn \@@_set_keyval:nnn { o }
-\cs_new_protected:Npn \@@_find_key_module:NNw #1#2#3 / #4 \s_@@_stop
+%    \end{macrocode}
+%   This function uses \cs{cs_set_nopar:Npx} internally for performance reasons,
+%   the argument |#1| is already a string in every usage, so turning it into a
+%   string again seems unnecessary.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_find_key_module:wNN #1 \s_@@_stop #2 #3
   {
-    \tl_if_blank:nTF {#4}
-      { \str_set:Nn #2 {#3} }
-      {
-        \str_put_right:Nx #1
-          {
-            \str_if_empty:NF #1 { / }
-            #3
-          }
-        \@@_find_key_module:NNw #1#2 #4 \s_@@_stop
-      }
+    \@@_find_key_module_auxi:Nw #2 #1 \s_@@_nil \@@_find_key_module_auxii:Nw
+      / \s_@@_nil \@@_find_key_module_auxiv:Nw #3
   }
+\cs_new_protected:Npn \@@_find_key_module_auxi:Nw #1 #2 / #3 \s_@@_nil #4
+  {
+    #4 #1 #2 \s_@@_mark #3 \s_@@_nil #4
+  }
+\cs_new_protected:Npn \@@_find_key_module_auxii:Nw
+    #1 #2 \s_@@_mark #3 \s_@@_nil \@@_find_key_module_auxii:Nw
+  {
+    \cs_set_nopar:Npx #1 { \tl_if_empty:NF #1 { #1 / } #2 }
+    \@@_find_key_module_auxi:Nw #1 #3 \s_@@_nil \@@_find_key_module_auxiii:Nw
+  }
+\cs_new_protected:Npn \@@_find_key_module_auxiii:Nw #1 #2 \s_@@_mark
+  {
+    \cs_set_nopar:Npx #1 { \tl_if_empty:NF #1 { #1 / } #2 }
+    \@@_find_key_module_auxi:Nw #1
+  }
+\cs_new_protected:Npn \@@_find_key_module_auxiv:Nw
+    #1 #2 \s_@@_nil #3 \s_@@_mark
+    \s_@@_nil \@@_find_key_module_auxiv:Nw #4
+  {
+    \cs_set_nopar:Npn #4 { #2 }
+  }
 %    \end{macrocode}
 %  If selective setting is active, there are a number of possible sub-cases
 %  to consider. The key name may not be known at all or if it is, it may not
@@ -2679,8 +2687,8 @@
       }
       {
         \bool_if:NTF \l_@@_filtered_bool
-          { \@@_execute: }
-          { \@@_store_unused: }
+          \@@_execute:
+          \@@_store_unused:
       }
   }
 %    \end{macrocode}
@@ -2699,7 +2707,7 @@
             \str_if_eq:nnT {##1} {####1}
               {
                 \bool_set_true:N \l_@@_tmp_bool
-                \clist_map_break:n { \seq_map_break: }
+                \clist_map_break:n \seq_map_break:
               }
           }
       }
@@ -2706,13 +2714,13 @@
     \bool_if:NTF \l_@@_tmp_bool
       {
         \bool_if:NTF \l_@@_filtered_bool
-          { \@@_store_unused: }
-          { \@@_execute: }
+          \@@_store_unused:
+          \@@_execute:
       }
       {
         \bool_if:NTF \l_@@_filtered_bool
-          { \@@_execute: }
-          { \@@_store_unused: }
+          \@@_execute:
+          \@@_store_unused:
       }
   }
 %    \end{macrocode}
@@ -2720,6 +2728,7 @@
 % \end{macro}
 % \end{macro}
 % \end{macro}
+% \end{macro}
 %
 % \begin{macro}{\@@_value_or_default:n}
 % \begin{macro}{\@@_default_inherit:}
@@ -2765,7 +2774,7 @@
 % \end{macro}
 %
 % \begin{macro}{\@@_execute:, \@@_execute_inherit:, \@@_execute_unknown:}
-% \begin{macro}[EXP]{\@@_execute:nn}
+% \begin{macro}[EXP]{\@@_execute:nn, \@@_execute:no}
 % \begin{macro}{\@@_store_unused:,\@@_store_unused_aux:}
 %   Actually executing a key is done in two parts. First, look for the
 %   key itself, then look for the \texttt{unknown} key with the same
@@ -2778,8 +2787,7 @@
     \cs_if_exist:cTF { \c_@@_code_root_str \l_keys_path_str }
       {
         \cs_if_exist_use:c { \c_@@_validate_root_str \l_keys_path_str }
-        \cs:w \c_@@_code_root_str \l_keys_path_str \exp_after:wN \cs_end:
-          \exp_after:wN { \l_keys_value_tl }
+        \@@_execute:no \l_keys_path_str \l_keys_value_tl
       }
       {
         \cs_if_exist:cTF
@@ -2803,10 +2811,8 @@
           {
             \str_set:Nn \l_@@_inherit_str {##1}
             \cs_if_exist_use:c { \c_@@_validate_root_str ##1 / \l_keys_key_str }
-            \cs:w \c_@@_code_root_str ##1 / \l_keys_key_str
-              \exp_after:wN \cs_end: \exp_after:wN
-              { \l_keys_value_tl }
-            \clist_map_break:n { \use_none:n }
+            \@@_execute:no { ##1 / \l_keys_key_str } \l_keys_value_tl
+            \clist_map_break:n \use_none:n
           }
       }
     \@@_execute_unknown:
@@ -2818,24 +2824,35 @@
       {
         \cs_if_exist:cTF
           { \c_@@_code_root_str \l_@@_module_str / unknown }
+          { \@@_execute:no { \l_@@_module_str / unknown } \l_keys_value_tl }
           {
-            \cs:w \c_@@_code_root_str \l_@@_module_str / unknown
-              \exp_after:wN \cs_end: \exp_after:wN { \l_keys_value_tl }
-          }
-          {
             \__kernel_msg_error:nnxx { kernel } { key-unknown }
-              { \l_keys_path_str } { \l_@@_module_str }
+              \l_keys_path_str \l_@@_module_str
           }
       }
   }
+%    \end{macrocode}
+%   A key's code is in the control sequence with csname
+%   \cs{c_@@_code_root_str} |#1|.  We expand it once to get the
+%   replacement text (with argument |#2|) and call \cs{use:n}
+%   with this replacement as its argument.  This ensures that any
+%   undefined control sequence error in the key's code will lead to an
+%   error message of the form |<argument>|\ldots{}\meta{control
+%   sequence} in which one can read the (undefined) \meta{control
+%   sequence} in full, rather than an error message that starts with the
+%   potentially very long key name, which would make the (undefined)
+%   \meta{control sequence} be truncated or sometimes completely hidden.
+%   See \url{https://github.com/latex3/latex2e/issues/351}.
+%    \begin{macrocode}
 \cs_new:Npn \@@_execute:nn #1#2
+  { \@@_execute:no {#1} { \prg_do_nothing: #2 } }
+\cs_new:Npn \@@_execute:no #1#2
   {
-    \cs_if_exist:cTF { \c_@@_code_root_str #1 }
+    \exp_args:NNo \exp_args:No \use:n
       {
         \cs:w \c_@@_code_root_str #1 \exp_after:wN \cs_end:
-          \exp_after:wN { \l_keys_value_tl }
+        \exp_after:wN {#2}
       }
-      {#2}
   }
 %    \end{macrocode}
 %   When there is no relative path, things here are easy: just save the key
@@ -2850,7 +2867,7 @@
       {
         \clist_put_right:Nx \l_@@_unused_clist
           {
-            \exp_not:o \l_keys_key_str
+            \l_keys_key_str
             \bool_if:NF \l_@@_no_value_bool
               { = { \exp_not:o \l_keys_value_tl } }
           }
@@ -2860,7 +2877,7 @@
           {
             \clist_put_right:Nx \l_@@_unused_clist
               {
-                \exp_not:o \l_keys_path_str
+                \l_keys_path_str
                 \bool_if:NF \l_@@_no_value_bool
                   { = { \exp_not:o \l_keys_value_tl } }
               }
@@ -2917,7 +2934,7 @@
 \cs_new:Npn \@@_choice_find:n #1
   {
     \str_if_empty:NTF \l_@@_inherit_str
-      { \@@_choice_find:nn { \l_keys_path_str } {#1} }
+      { \@@_choice_find:nn \l_keys_path_str {#1} }
       {
         \@@_choice_find:nn
           { \l_@@_inherit_str / \l_keys_key_str } {#1}
@@ -2926,8 +2943,8 @@
 \cs_new:Npn \@@_choice_find:nn #1#2
   {
     \cs_if_exist:cTF { \c_@@_code_root_str #1 / \@@_trim_spaces:n {#2} }
-      { \use:c { \c_@@_code_root_str #1 / \@@_trim_spaces:n {#2} } {#2} }
-      { \use:c { \c_@@_code_root_str #1 / unknown } {#2} }
+      { \@@_execute:nn { #1 / \@@_trim_spaces:n {#2} } {#2} }
+      { \@@_execute:nn { #1 / unknown } {#2} }
   }
 \cs_new:Npn \@@_multichoice_find:n #1
   { \clist_map_function:nN {#1} \@@_choice_find:n }
@@ -2938,24 +2955,36 @@
 %
 % \subsection{Utilities}
 %
-% \begin{macro}[EXP]{\@@_parent:n, \@@_parent:o}
-% \begin{macro}[EXP]{\@@_parent:w}
+% \begin{macro}[EXP]{\@@_parent:o}
+% \begin{macro}[EXP]
+%   {
+%     \@@_parent_auxi:w   ,
+%     \@@_parent_auxii:w  ,
+%     \@@_parent_auxiii:n ,
+%     \@@_parent_auxiv:w
+%   }
 %   Used to strip off the ending part of the key path after the last~|/|.
 %    \begin{macrocode}
-\cs_new:Npn \@@_parent:n #1
-  { \@@_parent:w #1 / / \s_@@_stop { } }
-\cs_generate_variant:Nn \@@_parent:n { o }
-\cs_new:Npn \@@_parent:w #1 / #2 / #3 \s_@@_stop #4
+\cs_new:Npn \@@_parent:o #1
   {
-    \tl_if_blank:nTF {#2}
-      {
-        \tl_if_blank:nF {#4}
-          { \use_none:n #4 }
-      }
-      {
-        \@@_parent:w #2 / #3 \s_@@_stop { #4 / #1 }
-      }
+    \exp_after:wN \@@_parent_auxi:w #1 \q_nil \@@_parent_auxii:w
+      / \q_nil \@@_parent_auxiv:w
   }
+\cs_new:Npn \@@_parent_auxi:w #1 / #2 \q_nil #3
+  {
+    #3 { #1 } #2 \q_nil #3
+  }
+\cs_new:Npn \@@_parent_auxii:w #1 #2 \q_nil \@@_parent_auxii:w
+  {
+    #1 \@@_parent_auxi:w #2 \q_nil \@@_parent_auxiii:n
+  }
+\cs_new:Npn \@@_parent_auxiii:n #1
+  {
+    / #1 \@@_parent_auxi:w
+  }
+\cs_new:Npn \@@_parent_auxiv:w #1 \q_nil \@@_parent_auxiv:w
+  {
+  }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -2968,30 +2997,44 @@
 %     \@@_trim_spaces_auxiii:w
 %   }
 %   Space stripping has to allow for the fact that the key here might have
-%   several parts, and spaces need to be stripped from each part.
+%   several parts, and spaces need to be stripped from each part. Since the key
+%   name is turned into a string groups can't be stripped accidentally and the
+%   precautions of \cs{tl_trim_spaces:n} aren't necessary, in this case it is
+%   much faster to just directly strip spaces around |/|.
 %    \begin{macrocode}
-\cs_new:Npn \@@_trim_spaces:n #1
+\group_begin:
+  \cs_set:Npn \@@_tmp:n #1
+    {
+      \cs_new:Npn \@@_trim_spaces:n ##1
+        {
+          \exp_after:wN \@@_trim_spaces_auxi:w \tl_to_str:n { / ##1 } /
+            \s_@@_nil  \@@_trim_spaces_auxi:w
+            \s_@@_mark \@@_trim_spaces_auxii:w
+            #1 / #1
+            \s_@@_nil  \@@_trim_spaces_auxii:w
+            \s_@@_mark \@@_trim_spaces_auxiii:w
+        }
+    }
+  \@@_tmp:n { ~ }
+\group_end:
+\cs_new:Npn \@@_trim_spaces_auxi:w #1 ~ / #2 \s_@@_nil #3
   {
-    \exp_after:wN \@@_trim_spaces_auxi:w \tl_to_str:n {#1}
-      / \q_@@_nil \s_@@_stop
+    #3 #1 / #2 \s_@@_nil #3
   }
-\cs_new:Npn \@@_trim_spaces_auxi:w #1 / #2 \s_@@_stop
+\cs_new:Npn \@@_trim_spaces_auxii:w #1 / ~ #2 \s_@@_mark #3
   {
-    \@@_quark_if_nil:nTF {#2}
-      { \tl_trim_spaces:n {#1} }
-      { \@@_trim_spaces_auxii:w #1 / #2 }
+    #3 #1 / #2 \s_@@_mark #3
   }
-\cs_new:Npn \@@_trim_spaces_auxii:w #1 / #2 / \q_@@_nil
+\cs_new:Npn \@@_trim_spaces_auxiii:w
+    / #1 /
+    \s_@@_nil  \@@_trim_spaces_auxi:w
+    \s_@@_mark \@@_trim_spaces_auxii:w
+    /
+    \s_@@_nil  \@@_trim_spaces_auxii:w
+    \s_@@_mark \@@_trim_spaces_auxiii:w
   {
-    \tl_trim_spaces:n {#1}
-    \@@_trim_spaces_auxiii:w #2 / \q_@@_recursion_tail / \q_@@_recursion_stop
+    #1
   }
-\cs_set:Npn \@@_trim_spaces_auxiii:w #1 /
-  {
-    \@@_if_recursion_tail_stop:n {#1}
-    / \tl_trim_spaces:n { #1 }
-    \@@_trim_spaces_auxiii:w
-  }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -3102,7 +3145,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 %\end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -216,7 +216,7 @@
 % \section{\pkg{l3luatex} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 % \subsection{Breaking out to \Lua{}}
@@ -556,43 +556,12 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \subsection{Generic \Lua{} and font support}
-%
 %    \begin{macrocode}
-%<*initex>
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-%<@@=alloc>
-%    \end{macrocode}
-%
-% A small amount of generic code is used by almost all \LuaTeX{} material so
-% needs to be loaded by the format.
-%    \begin{macrocode}
-attribute_count_name = "g_@@_attribute_int"
-bytecode_count_name  = "g_@@_bytecode_int"
-chunkname_count_name = "g_@@_chunkname_int"
-whatsit_count_name   = "g_@@_whatsit_int"
-require("ltluatex")
-%    \end{macrocode}
-%
-% With the above available the font loader code used by plain \TeX{} and
-% \LaTeXe{} when used with \LuaTeX{} can be loaded here. This is thus being
-% treated more-or-less as part of the engine itself.
-%    \begin{macrocode}
-require("luaotfload-main")
-local _void = luaotfload.main()
-%    \end{macrocode}
-%    \begin{macrocode}
-%</initex>
-%    \end{macrocode}
-%
-%    \begin{macrocode}
 %</lua>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 %\end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -564,7 +564,7 @@
 % \section{\pkg{l3msg} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -901,12 +901,8 @@
 % \subsection{Displaying messages}
 %
 % \LaTeX{} is handling error messages and so the \TeX{} ones are disabled.
-% This is already done by the \LaTeXe{} kernel, so to avoid messing up any
-% deliberate change by a user this is only set in format mode.
 %    \begin{macrocode}
-%<*initex>
 \int_gset:Nn \tex_errorcontextlines:D { -1 }
-%</initex>
 %    \end{macrocode}
 %
 % \begin{macro}[EXP]
@@ -974,12 +970,7 @@
   {
     \prop_if_in:NnTF \g_msg_module_type_prop {#1}
       { \prop_item:Nn \g_msg_module_type_prop {#1} }
-%<*initex>
-      { Module }
-%</initex>
-%<*package>
       { Package }
-%</package>
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1404,7 +1395,7 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_use:nnnnnnn #1#2#3#4#5#6#7
   {
-%<package>    \cs_if_exist_use:N \conditionally at traceoff
+    \cs_if_exist_use:N \conditionally at traceoff
     \msg_if_exist:nnTF {#2} {#3}
       {
         \@@_class_chk_exist:nT {#1}
@@ -1422,7 +1413,7 @@
           }
       }
       { \__kernel_msg_error:nnxx { kernel } { message-unknown } {#2} {#3} }
-%<package>    \cs_if_exist_use:N \conditionally at traceon
+    \cs_if_exist_use:N \conditionally at traceon
   }
 \cs_new_protected:Npn \@@_use_code: { }
 %    \end{macrocode}
@@ -1665,23 +1656,32 @@
 %
 % \begin{macro}
 %   {
-%     \__kernel_msg_fatal:nnnnnn ,
-%     \__kernel_msg_fatal:nnnnn  ,
-%     \__kernel_msg_fatal:nnnn   ,
-%     \__kernel_msg_fatal:nnn    ,
-%     \__kernel_msg_fatal:nn     ,
-%     \__kernel_msg_fatal:nnxxxx ,
-%     \__kernel_msg_fatal:nnxxx  ,
-%     \__kernel_msg_fatal:nnxx   ,
-%     \__kernel_msg_fatal:nnx    ,
-%     \__kernel_msg_error:nnnnnn ,
-%     \__kernel_msg_error:nnnnn  ,
-%     \__kernel_msg_error:nnnn   ,
-%     \__kernel_msg_error:nnn    ,
-%     \__kernel_msg_error:nn     ,
-%     \__kernel_msg_error:nnxxxx ,
-%     \__kernel_msg_error:nnxxx  ,
-%     \__kernel_msg_error:nnxx   ,
+%     \__kernel_msg_fatal:nnnnnn    ,
+%     \__kernel_msg_fatal:nnnnn     ,
+%     \__kernel_msg_fatal:nnnn      ,
+%     \__kernel_msg_fatal:nnn       ,
+%     \__kernel_msg_fatal:nn        ,
+%     \__kernel_msg_fatal:nnxxxx    ,
+%     \__kernel_msg_fatal:nnxxx     ,
+%     \__kernel_msg_fatal:nnxx      ,
+%     \__kernel_msg_fatal:nnx       ,
+%     \__kernel_msg_critical:nnnnnn ,
+%     \__kernel_msg_critical:nnnnn  ,
+%     \__kernel_msg_critical:nnnn   ,
+%     \__kernel_msg_critical:nnn    ,
+%     \__kernel_msg_critical:nn     ,
+%     \__kernel_msg_critical:nnxxxx ,
+%     \__kernel_msg_critical:nnxxx  ,
+%     \__kernel_msg_critical:nnxx   ,
+%     \__kernel_msg_critical:nnx    ,
+%     \__kernel_msg_error:nnnnnn    ,
+%     \__kernel_msg_error:nnnnn     ,
+%     \__kernel_msg_error:nnnn      ,
+%     \__kernel_msg_error:nnn       ,
+%     \__kernel_msg_error:nn        ,
+%     \__kernel_msg_error:nnxxxx    ,
+%     \__kernel_msg_error:nnxxx     ,
+%     \__kernel_msg_error:nnxx      ,
 %     \__kernel_msg_error:nnx
 %   }
 %   Neither fatal kernel errors nor kernel errors can be redirected.  We
@@ -1691,6 +1691,7 @@
 %   errors.
 %    \begin{macrocode}
   \@@_kernel_class_new:nN { fatal } \@@_fatal_code:nnnnnn
+  \@@_kernel_class_new:nN { critical } \@@_critical_code:nnnnnn
   \cs_undefine:N \__kernel_msg_error:nnxx
   \cs_undefine:N \__kernel_msg_error:nnx
   \cs_undefine:N \__kernel_msg_error:nn
@@ -1977,28 +1978,15 @@
 % \texttt{log-functions}, or on the contrary if debugging is turned off.
 % In format mode the error is somewhat different.
 %    \begin{macrocode}
-%<*package>
 \__kernel_msg_new:nnnn { kernel } { enable-debug }
-  { To~use~'#1'~load~expl3~with~the~'enable-debug'~option. }
+  { To~use~'#1'~set~the~'enable-debug'~option. }
   {
-     The~function~'#1'~will~be~ignored~because~it~can~only~work~if~
+    The~function~'#1'~will~be~ignored~because~it~can~only~work~if~
     some~internal~functions~in~expl3~have~been~appropriately~
     defined.~This~only~happens~if~one~of~the~options~
-     'enable-debug',~'check-declarations'~or~'log-functions'~was~
-    given~when~loading~expl3.
+    'enable-debug',~'check-declarations'~or~'log-functions'~was~
+    given~as~an~option:~see~the~main~expl3~documentation.
   }
-%</package>
-%<*initex>
-\__kernel_msg_new:nnnn { kernel } { enable-debug }
-  { '#1'~cannot~be~used~in~format~mode. }
-  {
-    The~function~'#1'~will~be~ignored~because~it~can~only~work~if~
-    some~internal~functions~in~expl3~have~been~appropriately~
-    defined.~This~only~happens~in~package~mode~(and~only~if~one~of~
-    the~options~'enable-debug',~'check-declarations'~or~'log-functions'~
-    was~given~when~loading~expl3.
-  }
-%</initex>
 %    \end{macrocode}
 %
 % Some errors only appear in expandable settings,
@@ -2235,7 +2223,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -56,7 +56,6 @@
 % \begin{itemize}
 %   \item defines new names for all \TeX{} primitives;
 %   \item switches to the category code r{\'e}gime for programming;
-%   \item provides support settings for building the code as a \TeX{} format.
 % \end{itemize}
 %
 % This module is entirely dedicated to primitives, which should not be
@@ -76,7 +75,7 @@
 % \section{\pkg{l3names} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 % The prefix here is \texttt{kernel}.  A few places need |@@| to be left
@@ -86,8 +85,7 @@
 %    \end{macrocode}
 %
 % The code here simply renames all of the primitives to new, internal,
-% names. In format mode, it also deletes all of the existing names (although
-% some do come back later).
+% names.
 %
 % The \tn{let} primitive is renamed by hand first as it is essential for
 % the entire process to follow. This also uses \tn{global}, as that way
@@ -104,23 +102,17 @@
 %    \end{macrocode}
 %
 % \begin{macro}{\@@_primitive:NN}
-%   A temporary function to actually do the renaming. This also allows the
-%   original names to be removed in format mode.
+%   A temporary function to actually do the renaming.
 %    \begin{macrocode}
   \long \def \@@_primitive:NN #1#2
-    {
-      \tex_global:D \tex_let:D #2 #1
-%<*initex>
-      \tex_global:D \tex_let:D #1 \tex_undefined:D
-%</initex>
-    }
+    { \tex_global:D \tex_let:D #2 #1 }
 %    \end{macrocode}
 %\end{macro}
 %
 % To allow extracting \enquote{just the names}, a bit of DocStrip fiddling.
 %    \begin{macrocode}
-%</initex|package>
-%<*initex|names|package>
+%</package>
+%<*names|package>
 %    \end{macrocode}
 %
 % In the current incarnation of this package, all \TeX{} primitives
@@ -675,8 +667,8 @@
 % for \LuaTeX{} tracking all of that would be hard. Instead, we now check that
 % we only save primitives if they actually exist.
 %    \begin{macrocode}
-%</initex|names|package>
-%<*initex|package>
+%</names|package>
+%<*package>
   \tex_long:D \tex_def:D \use_ii:nn #1#2 {#2}
   \tex_long:D \tex_def:D \use_none:n #1 { }
   \tex_long:D \tex_def:D \@@_primitive:NN #1#2
@@ -685,12 +677,9 @@
         \tex_expandafter:D \use_ii:nn
       \tex_fi:D
         \use_none:n { \tex_global:D \tex_let:D #2 #1 }
-%<*initex>
-      \tex_global:D \tex_let:D #1 \tex_undefined:D
-%</initex>
     }
-%</initex|package>
-%<*initex|names|package>
+%</package>
+%<*names|package>
 %    \end{macrocode}
 % \XeTeX{}-specific primitives. Note that \XeTeX{}'s \tn{strcmp} is
 % handled earlier and is \enquote{rolled up} into \tn{pdfstrcmp}.
@@ -1197,8 +1186,8 @@
 %    \end{macrocode}
 % End of the \enquote{just the names} part of the source.
 %    \begin{macrocode}
-%</initex|names|package>
-%<*initex|package>
+%</names|package>
+%<*package>
 %    \end{macrocode}
 %
 % The job is done: close the group (using the primitive renamed!).
@@ -1212,7 +1201,6 @@
 % At the beginning of the \LaTeXe{} format, the primitives \tn{end} and
 % \tn{input} are renamed, and only later on the other ones.
 %    \begin{macrocode}
-%<*package>
 \tex_ifdefined:D \@@@@end
   \tex_let:D \tex_end:D                  \@@@@end
   \tex_let:D \tex_input:D                \@@@@input
@@ -1368,7 +1356,6 @@
   \tex_let:D \tex_mapfile:D \tex_undefined:D
   \tex_let:D \tex_mapline:D \tex_undefined:D
 \tex_fi:D
-%</package>
 %    \end{macrocode}
 % A few packages do unfortunate things to date-related primitives.
 %    \begin{macrocode}
@@ -1403,13 +1390,11 @@
 % confusing. Removing them means that \cs{tex_pdftexversion:D} is
 % a marker for \pdfTeX{} alone: useful in engine-dependent code later.
 %    \begin{macrocode}
-%<*initex|package>
 \tex_ifdefined:D \tex_luatexversion:D
   \tex_let:D \tex_pdftexbanner:D   \tex_undefined:D
   \tex_let:D \tex_pdftexrevision:D \tex_undefined:D
   \tex_let:D \tex_pdftexversion:D  \tex_undefined:D
 \tex_fi:D
-%</initex|package>
 %    \end{macrocode}
 %
 % For \ConTeXt{}, two tests are needed. Both Mark~II and Mark~IV move several
@@ -1417,7 +1402,6 @@
 % as a marker. For Mark~IV, a few more primitives are moved: they are
 % implemented using some Lua code in the current \ConTeXt{}.
 %    \begin{macrocode}
-%<*package>
 \tex_ifdefined:D \normalend
   \tex_let:D \tex_end:D         \normalend
   \tex_let:D \tex_everyjob:D    \normaleveryjob
@@ -1444,11 +1428,10 @@
   \tex_let:D \tex_middle:D \normalmiddle
   \tex_let:D \tex_right:D  \normalright
 \tex_fi:D
-%</package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -770,7 +770,7 @@
 % \TestFiles{m3prg001.lvt,m3prg002.lvt,m3prg003.lvt}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 % \subsection{Primitive conditionals}
@@ -1648,13 +1648,12 @@
 %
 % \begin{macro}{\prg_break_point:}
 % \begin{macro}{\prg_break:, \prg_break:n}
-%   Also done in \pkg{l3basics} as in format mode these are needed within
-%   \pkg{l3alloc}.
+%   Also done in \pkg{l3basics}.
 % \end{macro}
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -525,7 +525,7 @@
 % \TestFiles{m3prop001, m3prop002, m3prop003, m3prop004, m3show001}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -1369,7 +1369,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -354,7 +354,7 @@
 % \TestFiles{m3quark001.lvt}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 % \subsection{Quarks}
@@ -1003,7 +1003,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -811,7 +811,7 @@
 % \section{\pkg{l3regex} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -6716,7 +6716,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -988,7 +988,7 @@
 % \TestFiles{m3seq002,m3seq003}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -2357,7 +2357,7 @@
 % \end{variable}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -1065,7 +1065,7 @@
 % \section{\pkg{l3skip} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -1109,13 +1109,11 @@
 % \begin{macro}{\dim_new:N, \dim_new:c}
 %    Allocating \meta{dim} registers \ldots
 %    \begin{macrocode}
-%<*package>
 \cs_new_protected:Npn \dim_new:N #1
   {
     \__kernel_chk_if_free_cs:N #1
     \cs:w newdimen \cs_end: #1
   }
-%</package>
 \cs_generate_variant:Nn \dim_new:N { c }
 %    \end{macrocode}
 % \end{macro}
@@ -1793,13 +1791,11 @@
 % \begin{macro}{\skip_new:N, \skip_new:c}
 %    Allocation of a new internal registers.
 %    \begin{macrocode}
-%<*package>
 \cs_new_protected:Npn \skip_new:N #1
   {
     \__kernel_chk_if_free_cs:N #1
     \cs:w newskip \cs_end: #1
   }
-%</package>
 \cs_generate_variant:Nn \skip_new:N { c }
 %    \end{macrocode}
 % \end{macro}
@@ -2044,13 +2040,11 @@
 % \begin{macro}{\muskip_new:N, \muskip_new:c}
 % And then we add muskips.
 %    \begin{macrocode}
-%<*package>
 \cs_new_protected:Npn \muskip_new:N #1
   {
     \__kernel_chk_if_free_cs:N #1
     \cs:w newmuskip \cs_end: #1
   }
-%</package>
 \cs_generate_variant:Nn \muskip_new:N { c }
 %    \end{macrocode}
 % \end{macro}
@@ -2242,7 +2236,7 @@
 % \end{variable}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -112,7 +112,7 @@
 % \section{\pkg{l3sort} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -271,12 +271,8 @@
 %   In \ConTeXt{} MkIV the range is from
 %   $|\c_syst_last_allocated_toks|+1$ to \cs{c_max_register_int}, and in
 %   MkII it is from $|\lastallocatedtoks|+1$ to \cs{c_max_register_int}.
-%   In all these cases, call \cs{@@_shrink_range:}.  The \LaTeX3 format
-%   mode is easiest: no \tn{toks} are ever allocated so available
-%   \tn{toks} range from $0$ to \cs{c_max_register_int} and we
-%   precompute the result of \cs{@@_shrink_range:}.
+%   In all these cases, call \cs{@@_shrink_range:}.
 %    \begin{macrocode}
-%<*package>
 \cs_new_protected:Npn \@@_compute_range:
   {
     \int_set:Nn \l_@@_min_int { \tex_count:D 15 + 1 }
@@ -322,17 +318,6 @@
           }
       }
   }
-%</package>
-%<*initex>
-\int_const:Nn \c_@@_max_length_int
-  { ( \c_max_register_int + 1 ) * 3 / 4 }
-\cs_new_protected:Npn \@@_compute_range:
-  {
-    \int_set:Nn \l_@@_min_int { 0 }
-    \int_set:Nn \l_@@_true_max_int { \c_max_register_int + 1 }
-    \int_set:Nn \l_@@_max_int { \c_@@_max_length_int }
-  }
-%</initex>
 %    \end{macrocode}
 % \end{variable}
 % \end{macro}
@@ -352,7 +337,7 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_main:NNNn #1#2#3#4
   {
-%<package>    \@@_disable_toksdef:
+    \@@_disable_toksdef:
     \@@_compute_range:
     \int_set_eq:NN \l_@@_top_int \l_@@_min_int
     #1 #3
@@ -1036,7 +1021,6 @@
 %   \pkg{l3sort}.  In format mode, none of this is needed since there is
 %   no \tn{toks} allocator.
 %    \begin{macrocode}
-%<*package>
 \cs_new_protected:Npn \@@_disable_toksdef:
   { \cs_set_eq:NN \toksdef \@@_disabled_toksdef:n }
 \cs_new_protected:Npn \@@_disabled_toksdef:n #1
@@ -1054,7 +1038,6 @@
     \iow_char:N\\newtoks~
     or~a~similar~command.~The~list~will~not~be~sorted.
   }
-%</package>
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1103,7 +1086,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -249,7 +249,7 @@
 % \section{\pkg{l3str-convert} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -2654,7 +2654,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \subsubsection{\textsc{iso 8859} support}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -857,7 +857,7 @@
 % \section{\pkg{l3str} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -2022,7 +2022,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -300,7 +300,7 @@
 % \subsection{Kernel code}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 % \subsubsection{Detecting the engine}
@@ -874,7 +874,7 @@
 % \end{variable}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 %\end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -56,7 +56,7 @@
 % \section{\pkg{l3text-case} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -1584,7 +1584,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -56,7 +56,7 @@
 % \section{\pkg{l3text-purify} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -810,7 +810,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -270,7 +270,7 @@
 % \section{\pkg{l3text} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -515,7 +515,6 @@
 %   Special cases for accents and letter-like symbols, which in some cases will
 %   need to be converted further.
 %    \begin{macrocode}
-%<*package>
 \tl_new:N \l_text_accents_tl
 \tl_set:Nn \l_text_accents_tl
   { \` \' \^ \~ \= \u \. \" \r \H \v \d \c \k \b \t }
@@ -534,7 +533,6 @@
     \SS \ss
     \TH \th
   }
-%</package>
 %    \end{macrocode}
 % \end{variable}
 %
@@ -566,10 +564,8 @@
 %   Commands which need not to expand.
 %    \begin{macrocode}
 \tl_new:N \l_text_expand_exclude_tl
-%<*package>
 \tl_set:Nn \l_text_expand_exclude_tl
   { \begin \cite \end \label \ref }
-%</package>
 %    \end{macrocode}
 % \end{variable}
 %
@@ -862,13 +858,6 @@
 %    \begin{macrocode}
 \cs_new:Npn \@@_expand_exclude:N #1
   {
-%<*initex>
-    \exp_after:wN \@@_expand_exclude:NN
-      \l_text_math_arg_tl
-      #1
-      \q_@@_recursion_tail \q_@@_recursion_stop
-%</initex>
-%<*package>
     \exp_args:Ne \@@_expand_exclude:nN
       {
         \exp_not:V \l_text_math_arg_tl
@@ -876,24 +865,16 @@
         \exp_not:V \l_text_expand_exclude_tl
       }
     #1
-%</package>
   }
-%<*package>
 \cs_new:Npn \@@_expand_exclude:nN #1#2
   {
     \@@_expand_exclude:NN #2 #1
       \q_@@_recursion_tail \q_@@_recursion_stop
   }
-%</package>
 \cs_new:Npn \@@_expand_exclude:NN #1#2
   {
     \@@_if_recursion_tail_stop_do:Nn #2
-%<*initex>
-      { \@@_expand_cs:N #1 }
-%</initex>
-%<*package>
       { \@@_expand_letterlike:N #1 }
-%</package>
     \cs_if_eq:NNTF #2 #1
       {
         \@@_use_i_delimit_by_q_recursion_stop:nw
@@ -910,7 +891,6 @@
 %   Another list of exceptions: these ones take no arguments so are
 %   easier to handle.
 %    \begin{macrocode}
-%<*package>
 \cs_new:Npn \@@_expand_letterlike:N #1
   {
     \exp_after:wN \@@_expand_letterlike:NN \exp_after:wN
@@ -931,7 +911,6 @@
       }
       { \@@_expand_letterlike:NN #1 }
   }
-%</package>
 %    \end{macrocode}
 %   \LaTeXe{}'s \cs{protect} makes life interesting. Where possible, we
 %   simply remove it and replace with the \enquote{parent} command; of course,
@@ -1076,7 +1055,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -165,7 +165,7 @@
 % ^^A which does not add the <active char> in memory.
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 % \subsection{Variables and helper functions}
@@ -1098,7 +1098,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -1256,7 +1256,7 @@
 % \section{\pkg{l3tl} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -3460,7 +3460,7 @@
 % \end{variable}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -1108,7 +1108,7 @@
 % \section{\pkg{l3token} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -1448,10 +1448,8 @@
 %   auxiliaries reflects that.
 %    \begin{macrocode}
 \group_begin:
-%<*package>
   \char_set_catcode_active:N \^^L
   \cs_set:Npn ^^L { }
-%</package>
   \char_set_catcode_other:n { 0 }
   \if_int_odd:w 0
       \sys_if_engine_luatex:T { 1 }
@@ -1534,8 +1532,8 @@
 %   lists, one for each character code, using \tn{tex_lowercase:D} to
 %   convert |^^@| in each case. The \texttt{x}-type expansion ensures
 %   that \tn{tex_lowercase:D} receives the contents of the token list.
-%   In package mode, |^^L| is awkward hence this is done in three parts.
-%   Notice that at this stage |^^@| is active.
+%   |^^L| is awkward hence this is done in three parts: up to |^^L|, 
+%   |^^L| itslef and above |^L|. Notice that at this stage |^^@| is active.
 %    \begin{macrocode}
       \cs_set_protected:Npn \@@_tmp:n #1
         {
@@ -1548,7 +1546,6 @@
                 { \exp_not:o \l_@@_tmp_tl }
             }
         }
-%<*package>
       \int_step_function:nnN { 0 } { 11 }  \@@_tmp:n
       \group_begin:
         \tl_replace_once:Nnn \l_@@_tmp_tl { ^^@ } { \ERROR }
@@ -1555,10 +1552,6 @@
         \@@_tmp:n { 12 }
       \group_end:
       \int_step_function:nnN { 13 } { 255 } \@@_tmp:n
-%</package>
-%<*initex>
-      \int_step_function:nnN { 0 } { 255 }  \@@_tmp:n
-%</initex>
 %    \end{macrocode}
 %   As \TeX{} is very unhappy if it finds an alignment character inside
 %   a primitive \tn{halign} even when skipping false branches, some
@@ -2876,7 +2869,7 @@
 % \end{macro}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-07-17}
+% \date{Released 2020-08-07}
 %
 % \maketitle
 %
@@ -60,7 +60,7 @@
 % \section{\pkg{l3unicode} implementation}
 %
 %    \begin{macrocode}
-%<*initex|package>
+%<*package>
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -280,7 +280,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-%</initex|package>
+%</package>
 %    \end{macrocode}
 %
 % \end{implementation}

Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def	2020-08-07 21:37:39 UTC (rev 56067)
@@ -25,7 +25,7 @@
 %% 
 %% File: l3backend-basics.dtx
 \ProvidesExplFile
-  {l3backend-dvipdfmx.def}{2020-06-29}{}
+  {l3backend-dvipdfmx.def}{2020-08-07}{}
   {L3 backend support: dvipdfmx}
 \cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
 \cs_new_protected:Npn \__kernel_backend_literal:n #1
@@ -42,37 +42,32 @@
   { \__kernel_backend_literal:n { x:grestore } }
 %% File: l3backend-color.dtx
 \cs_new_protected:Npn \__color_backend_pickup:N #1 { }
-\AtBeginDocument
+\cs_if_exist:cT { ver at color.sty }
   {
-    \cs_if_exist:cT { ver at color.sty }
+     \cs_set_protected:Npn \__color_backend_pickup:N #1
       {
-        \cs_set_protected:Npn \__color_backend_pickup:N #1
+        \exp_args:NV \tl_if_head_is_space:nTF \current at color
           {
-            \exp_args:NV \tl_if_head_is_space:nTF \current at color
-              {
-                \tl_set:Nx #1
-                   {
-                     { spot }
-                     { \exp_after:wN \use:n \current at color \c_space_tl 1 }
-                   }
-              }
-              {
-                \exp_last_unbraced:Nx \__color_backend_pickup:w
-                  { \current at color } \s__color_stop #1
-              }
+            \tl_set:Nx #1
+               {
+                 { \exp_after:wN \use:n \current at color }
+                 { 1 }
+               }
           }
-        \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
-          { \tl_set:Nn #3 { {#1} {#2} } }
+          {
+            \exp_last_unbraced:Nx \__color_backend_pickup:w
+              { \current at color } \s__color_stop #1
+          }
       }
+    \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
+      { \tl_set:Nn #3 { {#1} {#2} } }
   }
-\cs_new_protected:Npn \__color_backend_cmyk:n #1
+\cs_new_protected:Npn \__color_backend_select_cmyk:n #1
   { \__color_backend_select:n { cmyk ~ #1 } }
-\cs_new_protected:Npn \__color_backend_gray:n #1
+\cs_new_protected:Npn \__color_backend_select_gray:n #1
   { \__color_backend_select:n { gray ~ #1 } }
-\cs_new_protected:Npn \__color_backend_rgb:n #1
+\cs_new_protected:Npn \__color_backend_select_rgb:n #1
   { \__color_backend_select:n { rgb ~ #1 } }
-\cs_new_protected:Npn \__color_backend_spot:n #1
-  { \__color_backend_select:n {#1} }
 \cs_new_protected:Npn \__color_backend_select:n #1
   {
     \__kernel_backend_literal:n { color~push~ #1 }
@@ -80,6 +75,24 @@
   }
 \cs_new_protected:Npn \__color_backend_reset:
   { \__kernel_backend_literal:n { color~pop } }
+\cs_new_protected:Npn \__color_backend_select_separation:nn #1#2
+  { \__color_backend_select:n {#1} }
+\cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ k } }
+\cs_new_protected:Npn \__color_backend_fill_gray:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ g } }
+\cs_new_protected:Npn \__color_backend_fill_rgb:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ rg } }
+  \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ K } }
+\cs_new_protected:Npn \__color_backend_stroke_gray:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ G } }
+\cs_new_protected:Npn \__color_backend_stroke_rgb:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ RG } }
+\cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2
+  { \__kernel_backend_literal_pdf:n { /#1 ~ cs ~ #2 ~ scn } }
+\cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2
+  { \__kernel_backend_literal_pdf:n { /#1 ~ CS ~ #2 ~ SCN } }
 %% File: l3backend-box.dtx
 \cs_new_protected:Npn \__box_backend_clip:N #1
   {
@@ -221,20 +234,6 @@
   { \__draw_backend_literal:n { 1 ~ j } }
 \cs_new_protected:Npn \__draw_backend_join_bevel:
   { \__draw_backend_literal:n { 2 ~ j } }
-\cs_new_protected:Npn \__draw_backend_color_fill_cmyk:n #1
-  { \__draw_backend_color_select:n { #1 ~ k } }
-\cs_new_protected:Npn \__draw_backend_color_stroke_cmyk:n #1
-  { \__draw_backend_color_select:n { #1 ~ K } }
-\cs_new_protected:Npn \__draw_backend_color_fill_gray:n #1
-  { \__draw_backend_color_select:n { #1 ~ g } }
-\cs_new_protected:Npn \__draw_backend_color_stroke_gray:n #1
-  { \__draw_backend_color_select:n { #1 ~ G } }
-\cs_new_protected:Npn \__draw_backend_color_fill_rgb:n #1
-  { \__draw_backend_color_select:n { #1 ~ rg } }
-\cs_new_protected:Npn \__draw_backend_color_stroke_rgb:n #1
-  { \__draw_backend_color_select:n { #1 ~ RG } }
-\cs_new_eq:NN \__draw_backend_color_select:n \__kernel_backend_literal_pdf:n
-\cs_generate_variant:Nn \__draw_backend_color_select:n { x }
 \cs_new_protected:Npn \__draw_backend_cm:nnnn #1#2#3#4
   {
     \__draw_backend_cm_decompose:nnnnN {#1} {#2} {#3} {#4}
@@ -315,8 +314,7 @@
     \__kernel_backend_scope_end:
   }
 %% File: l3backend-graphics.dtx
-\AtBeginDocument
-  { \cs_new_eq:NN \__graphics_backend_getbb_eps:n \graphics_read_bb:n }
+\cs_new_eq:NN \__graphics_backend_getbb_eps:n \graphics_read_bb:n
 \cs_new_protected:Npn \__graphics_backend_getbb_jpg:n #1
   {
     \int_zero:N \l_graphics_page_int
@@ -472,15 +470,12 @@
 \cs_new:Npn \__pdf_backend_pageobject_ref:n #1
   { @page #1 }
 \bool_new:N \g__pdf_landscape_bool
-\AtBeginDocument
+\cs_if_exist:NT \landscape
   {
-    \cs_if_exist:NT \landscape
-      {
-        \tl_put_right:Nn \landscape
-          { \bool_gset_true:N \g__pdf_landscape_bool }
-        \tl_put_left:Nn \endlandscape
-          { \bool_gset_false:N \g__pdf_landscape_bool }
-      }
+    \tl_put_right:Nn \landscape
+      { \bool_gset_true:N \g__pdf_landscape_bool }
+    \tl_put_left:Nn \endlandscape
+      { \bool_gset_false:N \g__pdf_landscape_bool }
   }
 \int_new:N \g__pdf_backend_annotation_int
 \cs_new_protected:Npn \__pdf_backend_annotation:nnnn #1#2#3#4

Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def	2020-08-07 21:37:39 UTC (rev 56067)
@@ -25,7 +25,7 @@
 %% 
 %% File: l3backend-basics.dtx
 \ProvidesExplFile
-  {l3backend-dvips.def}{2020-06-29}{}
+  {l3backend-dvips.def}{2020-08-07}{}
   {L3 backend support: dvips}
 \cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
 \cs_new_protected:Npn \__kernel_backend_literal:n #1
@@ -63,45 +63,59 @@
   { \__kernel_backend_literal:n { ps:grestore } }
 %% File: l3backend-color.dtx
 \cs_new_protected:Npn \__color_backend_pickup:N #1 { }
-\AtBeginDocument
+\cs_if_exist:cT { ver at color.sty }
   {
-    \cs_if_exist:cT { ver at color.sty }
+     \cs_set_protected:Npn \__color_backend_pickup:N #1
       {
-        \cs_set_protected:Npn \__color_backend_pickup:N #1
+        \exp_args:NV \tl_if_head_is_space:nTF \current at color
           {
-            \exp_args:NV \tl_if_head_is_space:nTF \current at color
-              {
-                \tl_set:Nx #1
-                   {
-                     { spot }
-                     { \exp_after:wN \use:n \current at color \c_space_tl 1 }
-                   }
-              }
-              {
-                \exp_last_unbraced:Nx \__color_backend_pickup:w
-                  { \current at color } \s__color_stop #1
-              }
+            \tl_set:Nx #1
+               {
+                 { \exp_after:wN \use:n \current at color }
+                 { 1 }
+               }
           }
-        \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
-          { \tl_set:Nn #3 { {#1} {#2} } }
+          {
+            \exp_last_unbraced:Nx \__color_backend_pickup:w
+              { \current at color } \s__color_stop #1
+          }
       }
+    \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
+      { \tl_set:Nn #3 { {#1} {#2} } }
   }
-\cs_new_protected:Npn \__color_backend_cmyk:n #1
+\cs_new_protected:Npn \__color_backend_select_cmyk:n #1
   { \__color_backend_select:n { cmyk ~ #1 } }
-\cs_new_protected:Npn \__color_backend_gray:n #1
+\cs_new_protected:Npn \__color_backend_select_gray:n #1
   { \__color_backend_select:n { gray ~ #1 } }
-\cs_new_protected:Npn \__color_backend_rgb:n #1
+\cs_new_protected:Npn \__color_backend_select_rgb:n #1
   { \__color_backend_select:n { rgb ~ #1 } }
-\cs_new_protected:Npn \__color_backend_spot:n #1
-  { \__color_backend_select:n {#1} }
 \cs_new_protected:Npn \__color_backend_select:n #1
   {
     \__kernel_backend_literal:n { color~push~ #1 }
-    \__kernel_backend_postscript:n { /color.fc~{ }~def }
+    \__kernel_backend_postscript:n { /color.sc~ { ~ } ~def }
+    \__kernel_backend_postscript:n { /color.fc~ { ~ } ~def }
     \group_insert_after:N \__color_backend_reset:
   }
 \cs_new_protected:Npn \__color_backend_reset:
   { \__kernel_backend_literal:n { color~pop } }
+\cs_new_protected:Npn \__color_backend_select_separation:nn #1#2
+  { \__color_backend_select:n {#1} }
+\cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
+  { \__kernel_backend_postscript:n { /color.fc { #1 ~ setcmykcolor } def } }
+\cs_new_protected:Npn \__color_backend_fill_gray:n #1
+  { \__kernel_backend_postscript:n { /color.fc { #1 ~ setgray } def } }
+\cs_new_protected:Npn \__color_backend_fill_rgb:n #1
+  { \__kernel_backend_postscript:n { /color.fc { #1 ~ setrgbcolor } def } }
+  \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1
+  { \__kernel_backend_postscript:n { /color.sc { #1 ~ setcmykcolor } def } }
+\cs_new_protected:Npn \__color_backend_stroke_gray:n #1
+  { \__kernel_backend_postscript:n { /color.sc { #1 ~ setgray } def } }
+\cs_new_protected:Npn \__color_backend_stroke_rgb:n #1
+  { \__kernel_backend_postscript:n { /color.sc { #1 ~ setrgbcolor } def } }
+\cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2
+  { \__kernel_backend_postscript:n { /color.fc { #1 } def } }
+\cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2
+  { \__kernel_backend_postscript:n { /color.sc { #1 } def } }
 %% File: l3backend-box.dtx
 \cs_new_protected:Npn \__box_backend_clip:N #1
   {
@@ -163,7 +177,6 @@
   {
     \__kernel_backend_literal:n { ps::[begin] }
     \__draw_backend_literal:n { @beginspecial }
-    \__draw_backend_literal:n { SDict ~ begin ~ /color.fc ~ { } ~ def ~ end }
   }
 \cs_new_protected:Npn \__draw_backend_end:
   {
@@ -218,7 +231,10 @@
   { \__draw_backend_literal:n { closepath } }
 \cs_new_protected:Npn \__draw_backend_stroke:
   {
+    \__draw_backend_literal:n { gsave }
+    \__draw_backend_literal:n { color.sc }
     \__draw_backend_literal:n { stroke }
+    \__draw_backend_literal:n { grestore }
     \bool_if:NT \g__draw_draw_clip_bool
       {
         \__draw_backend_literal:x
@@ -259,6 +275,7 @@
 \cs_new_protected:Npn \__draw_backend_fillstroke:
   {
     \__draw_backend_literal:n { gsave }
+    \__draw_backend_literal:n { color.sc }
     \__draw_backend_literal:n { color.fc }
     \__draw_backend_literal:x
       {
@@ -326,28 +343,6 @@
   { \__draw_backend_literal:n { 1 ~ setlinejoin } }
 \cs_new_protected:Npn \__draw_backend_join_bevel:
   { \__draw_backend_literal:n { 2 ~ setlinejoin } }
-\cs_new_protected:Npn \__draw_backend_color_fill_cmyk:n #1
-  { \__draw_backend_color_fill:n { #1 ~ setcmykcolor } }
-\cs_new_protected:Npn \__draw_backend_color_stroke_cmyk:n #1
-  { \__draw_backend_color_stroke:n { cmyk ~ #1 } }
-\cs_new_protected:Npn \__draw_backend_color_stroke_gray:n #1
-  { \__draw_backend_color_fill:n { #1 ~ setgray } }
-\cs_new_protected:Npn \__draw_backend_color_fill_gray:n #1
-  { \__draw_backend_color_stroke:n { gray ~ #1 } }
-\cs_new_protected:Npn \__draw_backend_color_fill_rgb:n #1
-  { \__draw_backend_color_fill:n { #1 ~ setrgbcolor } }
-\cs_new_protected:Npn \__draw_backend_color_stroke_rgb:n #1
-  { \__draw_backend_color_stroke:n { rgb ~ #1 } }
-\cs_new_protected:Npn \__draw_backend_color_fill:n #1
-  {
-    \__kernel_backend_postscript:n
-      { /color.fc ~ { #1 } ~ def }
-  }
-\cs_new_protected:Npn \__draw_backend_color_stroke:n #1
-  {
-    \__kernel_backend_literal:n { color~push~#1 }
-    \group_insert_after:N \__draw_color_reset:
-  }
 \cs_new_protected:Npn \__draw_backend_cm:nnnn #1#2#3#4
   {
     \__draw_backend_literal:n
@@ -374,8 +369,7 @@
     \__draw_backend_literal:n { @beginspecial }
   }
 %% File: l3backend-graphics.dtx
-\AtBeginDocument
-  { \cs_new_eq:NN \__graphics_backend_getbb_eps:n \graphics_read_bb:n }
+\cs_new_eq:NN \__graphics_backend_getbb_eps:n \graphics_read_bb:n
 \cs_new_protected:Npn \__graphics_backend_include_eps:n #1
   {
     \__kernel_backend_literal:x

Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def	2020-08-07 21:37:39 UTC (rev 56067)
@@ -25,7 +25,7 @@
 %% 
 %% File: l3backend-basics.dtx
 \ProvidesExplFile
-  {l3backend-dvisvgm.def}{2020-06-29}{}
+  {l3backend-dvisvgm.def}{2020-08-07}{}
   {L3 backend support: dvisvgm}
 \cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
 \cs_new_protected:Npn \__kernel_backend_literal:n #1
@@ -34,46 +34,71 @@
 \cs_new_protected:Npn \__kernel_backend_literal_svg:n #1
   { \__kernel_backend_literal:n { dvisvgm:raw~ #1 { ?nl } } }
 \cs_generate_variant:Nn \__kernel_backend_literal_svg:n { x }
+\int_new:N \g__kernel_backend_scope_int
+\int_new:N \l__kernel_backend_scope_int
 \cs_new_protected:Npn \__kernel_backend_scope_begin:
-  { \__kernel_backend_literal_svg:n { <g> } }
+  {
+    \__kernel_backend_literal_svg:n { <g> }
+    \int_set_eq:NN
+      \l__kernel_backend_scope_int
+      \g__kernel_backend_scope_int
+    \group_begin:
+      \int_gset:Nn \g__kernel_backend_scope_int { 1 }
+  }
 \cs_new_protected:Npn \__kernel_backend_scope_end:
-  { \__kernel_backend_literal_svg:n { </g> } }
+  {
+      \prg_replicate:nn
+        { \g__kernel_backend_scope_int }
+        { \__kernel_backend_literal_svg:n { </g> } }
+    \group_end:
+    \int_gset_eq:NN
+      \g__kernel_backend_scope_int
+      \l__kernel_backend_scope_int
+  }
 \cs_new_protected:Npn \__kernel_backend_scope_begin:n #1
-  { \__kernel_backend_literal_svg:n { <g~ #1 > } }
+  {
+    \__kernel_backend_literal_svg:n { <g ~ #1 > }
+    \int_set_eq:NN
+      \l__kernel_backend_scope_int
+      \g__kernel_backend_scope_int
+    \group_begin:
+      \int_gset:Nn \g__kernel_backend_scope_int { 1 }
+  }
 \cs_generate_variant:Nn \__kernel_backend_scope_begin:n { x }
+\cs_new_protected:Npn \__kernel_backend_scope:n #1
+  {
+    \__kernel_backend_literal_svg:n { <g ~ #1 > }
+    \int_gincr:N \g__kernel_backend_scope_int
+  }
+\cs_generate_variant:Nn \__kernel_backend_scope:n { x }
 %% File: l3backend-color.dtx
 \cs_new_protected:Npn \__color_backend_pickup:N #1 { }
-\AtBeginDocument
+\cs_if_exist:cT { ver at color.sty }
   {
-    \cs_if_exist:cT { ver at color.sty }
+     \cs_set_protected:Npn \__color_backend_pickup:N #1
       {
-        \cs_set_protected:Npn \__color_backend_pickup:N #1
+        \exp_args:NV \tl_if_head_is_space:nTF \current at color
           {
-            \exp_args:NV \tl_if_head_is_space:nTF \current at color
-              {
-                \tl_set:Nx #1
-                   {
-                     { spot }
-                     { \exp_after:wN \use:n \current at color \c_space_tl 1 }
-                   }
-              }
-              {
-                \exp_last_unbraced:Nx \__color_backend_pickup:w
-                  { \current at color } \s__color_stop #1
-              }
+            \tl_set:Nx #1
+               {
+                 { \exp_after:wN \use:n \current at color }
+                 { 1 }
+               }
           }
-        \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
-          { \tl_set:Nn #3 { {#1} {#2} } }
+          {
+            \exp_last_unbraced:Nx \__color_backend_pickup:w
+              { \current at color } \s__color_stop #1
+          }
       }
+    \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
+      { \tl_set:Nn #3 { {#1} {#2} } }
   }
-\cs_new_protected:Npn \__color_backend_cmyk:n #1
+\cs_new_protected:Npn \__color_backend_select_cmyk:n #1
   { \__color_backend_select:n { cmyk ~ #1 } }
-\cs_new_protected:Npn \__color_backend_gray:n #1
+\cs_new_protected:Npn \__color_backend_select_gray:n #1
   { \__color_backend_select:n { gray ~ #1 } }
-\cs_new_protected:Npn \__color_backend_rgb:n #1
+\cs_new_protected:Npn \__color_backend_select_rgb:n #1
   { \__color_backend_select:n { rgb ~ #1 } }
-\cs_new_protected:Npn \__color_backend_spot:n #1
-  { \__color_backend_select:n {#1} }
 \cs_new_protected:Npn \__color_backend_select:n #1
   {
     \__kernel_backend_literal:n { color~push~ #1 }
@@ -81,6 +106,74 @@
   }
 \cs_new_protected:Npn \__color_backend_reset:
   { \__kernel_backend_literal:n { color~pop } }
+\cs_new_protected:Npn \__color_backend_select_separation:nn #1#2
+  { \__color_backend_select:n {#1} }
+\cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
+  { \__color_backend_cmyk:nw { fill } #1 \s__color_stop }
+\cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1
+  { \__color_backend_cmyk:nw { stroke } #1 \s__color_stop }
+\cs_new_protected:Npn \__color_backend_cmyk:nw
+  #1#2 ~ #3 ~ #4 ~ #5 \s__color_stop
+  {
+    \use:x
+      {
+        \__color_backend:nnnn
+          {#1}
+          { \fp_eval:n { -100 * ( 1 - min ( 1 , #2 + #5 ) ) } }
+          { \fp_eval:n { -100 * ( 1 - min ( 1 , #3 + #5 ) ) } }
+          { \fp_eval:n { -100 * ( 1 - min ( 1 , #4 + #5 ) ) } }
+      }
+  }
+\cs_new_protected:Npn \__color_backend_fill_gray:n #1
+  { \__color_backend_grab:nn { fill } {#1} }
+\cs_new_protected:Npn \__color_backend_stroke_gray:n #1
+  { \__color_backend_grab:nn { stroke } {#1} }
+\cs_new_protected:Npn \__color_backend_gray:nn #1#2
+  {
+    \use:x
+      {
+        \__color_backend_gray_aux:nn
+          {#1}
+          { \fp_eval:n { 100 * (#2) } }
+      }
+  }
+\cs_new_protected:Npn \__color_backend_gray_aux:nn #1#2
+  { \__color_backend:nnn {#1} {#2} {#2} {#2} }
+\cs_new_protected:Npn \__color_backend_fill_rgb:n #1
+  { \__color_backend_rgb:nw { fill } #1 \s__color_stop }
+\cs_new_protected:Npn \__color_backend_stroke_rgb:n #1
+  { \__color_backend_rgb:nw { stroke } #1 \s__color_stop }
+\cs_new_protected:Npn \__color_backend_rgb:nw
+  #1#2 ~ #3 ~ #4\s__color_stop
+  {
+    \use:x
+      {
+        \__color_backend:nnnn
+          { fill }
+          { \fp_eval:n { 100 * (#2) } }
+          { \fp_eval:n { 100 * (#3) } }
+          { \fp_eval:n { 100 * (#4) } }
+      }
+  }
+\cs_new_protected:Npx \__color_backend:nnnn #1#2#3#4
+  {
+    \__kernel_backend_scope:n
+      {
+        #1 =
+         "
+           rgb
+             (
+               #2 \c_percent_str ,
+               #3 \c_percent_str ,
+               #4 \c_percent_str
+             )
+         "
+      }
+  }
+\cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2
+  { }
+\cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2
+  { }
 %% File: l3backend-box.dtx
 \cs_new_protected:Npn \__box_backend_clip:N #1
   {
@@ -114,12 +207,12 @@
             scale ( 1 , -1 )
           "
       }
-    \__kernel_backend_scope_begin:x
+    \__kernel_backend_scope:x
       {
         clip-path =
           "url ( \c_hash_str l3cp \int_use:N \g__box_clip_path_int ) "
       }
-    \__kernel_backend_scope_begin:n
+    \__kernel_backend_scope:n
       {
         transform =
           "
@@ -130,8 +223,6 @@
       }
     \box_use:N #1
     \__kernel_backend_scope_end:
-    \__kernel_backend_scope_end:
-    \__kernel_backend_scope_end:
   }
 \int_new:N \g__box_clip_path_int
 \cs_new_protected:Npn \__box_backend_rotate:Nn #1#2
@@ -171,37 +262,10 @@
 \cs_generate_variant:Nn \__draw_backend_literal:n { x }
 \cs_new_protected:Npn \__draw_backend_begin:
   {
-    \__draw_backend_scope_begin:
-    \__draw_backend_scope:n { transform="translate({?x},{?y})~scale(1,-1)" }
+    \__kernel_backend_scope_begin:
+    \__kernel_backend_scope:n { transform="translate({?x},{?y})~scale(1,-1)" }
   }
-\cs_new_protected:Npn \__draw_backend_end:
-  { \__draw_backend_scope_end: }
-\cs_new_protected:Npn \__draw_backend_scope_begin:
-  {
-    \int_set_eq:NN
-      \l__draw_draw_scope_int
-      \g__draw_draw_scope_int
-    \group_begin:
-      \int_gzero:N \g__draw_draw_scope_int
-  }
-\cs_new_protected:Npn \__draw_backend_scope_end:
-  {
-      \prg_replicate:nn
-        { \g__draw_draw_scope_int }
-        { \__draw_backend_literal:n { </g> } }
-    \group_end:
-    \int_gset_eq:NN
-      \g__draw_draw_scope_int
-      \l__draw_draw_scope_int
-  }
-\cs_new_protected:Npn \__draw_backend_scope:n #1
-  {
-    \__draw_backend_literal:n { <g~ #1 > }
-    \int_gincr:N \g__draw_draw_scope_int
-  }
-\cs_generate_variant:Nn \__draw_backend_scope:n { x }
-\int_new:N \g__draw_draw_scope_int
-\int_new:N \l__draw_draw_scope_int
+\cs_new_eq:NN \__draw_backend_end: \__kernel_backend_scope_end:
 \cs_new_protected:Npn \__draw_backend_moveto:nn #1#2
   {
     \__draw_backend_add_to_path:n
@@ -355,68 +419,6 @@
   { \__draw_backend_scope:n { stroke-linejoin="round" } }
 \cs_new_protected:Npn \__draw_backend_join_bevel:
   { \__draw_backend_scope:n { stroke-linejoin="bevel" } }
-\cs_new_protected:Npn \__draw_backend_color_fill_cmyk:n #1
-  { \__draw_backend_color_cmyk:nw { fill } #1 \s__draw_stop }
-\cs_new_protected:Npn \__draw_backend_color_stroke_cmyk:n #1
-  { \__draw_backend_color_cmyk:nw { stroke } #1 \s__draw_stop }
-\cs_new_protected:Npn \__draw_backend_color_cmyk:nw
-  #1#2 ~ #3 ~ #4 ~ #5 \s__draw_stop
-  {
-    \use:x
-      {
-        \__draw_backend_color:nnnn
-          {#1}
-          { \fp_eval:n { -100 * ( 1 - min ( 1 , #2 + #5 ) ) } }
-          { \fp_eval:n { -100 * ( 1 - min ( 1 , #3 + #5 ) ) } }
-          { \fp_eval:n { -100 * ( 1 - min ( 1 , #4 + #5 ) ) } }
-      }
-  }
-\cs_new_protected:Npn \__draw_backend_color_fill_gray:n #1
-  { \__draw_backend_color_grab:nn { fill } {#1} }
-\cs_new_protected:Npn \__draw_backend_color_stroke_gray:n #1
-  { \__draw_backend_color_grab:nn { stroke } {#1} }
-\cs_new_protected:Npn \__draw_backend_color_gray:nn #1#2
-  {
-    \use:x
-      {
-        \__draw_backend_color_gray_aux:nn
-          {#1}
-          { \fp_eval:n { 100 * (#2) } }
-      }
-  }
-\cs_new_protected:Npn \__draw_backend_color_gray_aux:nn #1#2
-  { \__draw_backend_color:nnn {#1} {#2} {#2} {#2} }
-\cs_new_protected:Npn \__draw_backend_color_fill_rgb:n #1
-  { \__draw_backend_color_rgb:nw { fill } #1 \s__draw_stop }
-\cs_new_protected:Npn \__draw_backend_color_stroke_rgb:n #1
-  { \__draw_backend_color_rgb:nw { stroke } #1 \s__draw_stop }
-\cs_new_protected:Npn \__draw_backend_color_rgb:nw
-  #1#2 ~ #3 ~ #4\s__draw_stop
-  {
-    \use:x
-      {
-        \__draw_backend_color:nnnn
-          { fill }
-          { \fp_eval:n { 100 * (#2) } }
-          { \fp_eval:n { 100 * (#3) } }
-          { \fp_eval:n { 100 * (#4) } }
-      }
-  }
-\cs_new_protected:Npx \__draw_backend_color:nnnn #1#2#3#4
-  {
-    \__draw_backend_scope:n
-      {
-        #1 =
-         "
-           rgb
-             (
-               #2 \c_percent_str ,
-               #3 \c_percent_str ,
-               #4 \c_percent_str
-             )
-         "
-      }
-  }
 \cs_new_protected:Npn \__draw_backend_cm:nnnn #1#2#3#4
   {
     \__draw_backend_scope:n
@@ -444,8 +446,7 @@
     \__kernel_backend_scope_end:
   }
 %% File: l3backend-graphics.dtx
-\AtBeginDocument
-  { \cs_new_eq:NN \__graphics_backend_getbb_eps:n \graphics_read_bb:n }
+\cs_new_eq:NN \__graphics_backend_getbb_eps:n \graphics_read_bb:n
 \cs_new_protected:Npn \__graphics_backend_getbb_jpg:n #1
   {
     \int_zero:N \l_graphics_page_int

Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def	2020-08-07 21:37:39 UTC (rev 56067)
@@ -25,7 +25,7 @@
 %% 
 %% File: l3backend-basics.dtx
 \ProvidesExplFile
-  {l3backend-pdfmode.def}{2020-06-29}{}
+  {l3backend-pdfmode.def}{2020-08-07}{}
   {L3 backend support: PDF mode}
 \cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
 \cs_new_protected:Npn \__kernel_backend_literal:n #1
@@ -69,51 +69,44 @@
 \cs_generate_variant:Nn \__kernel_backend_matrix:n { x }
 %% File: l3backend-color.dtx
 \cs_new_protected:Npn \__color_backend_pickup:N #1 { }
-\AtBeginDocument
+\cs_if_exist:cT { ver at color.sty }
   {
-    \cs_if_exist:cT { ver at color.sty }
+    \cs_set_protected:Npn \__color_backend_pickup:N #1
       {
-        \cs_set_protected:Npn \__color_backend_pickup:N #1
+        \exp_last_unbraced:Nx \__color_backend_pickup:w
+          { \current at color } ~ 0 ~ 0 ~ 0 \s__color_stop #1
+      }
+    \cs_new_protected:Npn \__color_backend_pickup:w
+      #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 \s__color_stop #7
+      {
+        \str_if_eq:nnTF {#2} { g }
+          { \tl_set:Nn #7 { { gray } {#1} } }
           {
-            \exp_last_unbraced:Nx \__color_backend_pickup:w
-              { \current at color } ~ 0 ~ 0 ~ 0 \s__color_stop #1
-          }
-        \cs_new_protected:Npn \__color_backend_pickup:w
-          #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 \s__color_stop #7
-          {
-            \str_if_eq:nnTF {#2} { g }
-              { \tl_set:Nn #7 { { gray } {#1} } }
+            \str_if_eq:nnTF {#4} { rg }
+              { \tl_set:Nn #7 { { rgb } { #1 ~ #2 ~ #3 } } }
               {
-                \str_if_eq:nnTF {#4} { rg }
-                  { \tl_set:Nn #7 { { rgb } { #1 ~ #2 ~ #3 } } }
-                  {
-                     \str_if_eq:nnTF {#5} { k }
-                       { \tl_set:Nn #7 { { cmyk } { #1 ~ #2 ~ #3 ~ #4 } } }
+                 \str_if_eq:nnTF {#5} { k }
+                   { \tl_set:Nn #7 { { cmyk } { #1 ~ #2 ~ #3 ~ #4 } } }
+                   {
+                     \str_if_eq:nnTF {#2} { cs }
                        {
-                         \str_if_eq:nnTF {#2} { cs }
-                           {
-                             \tl_set:Nx #7 { { spot } { \use_none:n #1 ~ #5 } }
-                           }
-                           {
-                             \tl_set:Nn #7 { { gray } { 0 } }
-                           }
+                         \tl_set:Nx #7 { { \use:n #1 } { #5 } }
                        }
-                  }
+                       {
+                         \tl_set:Nn #7 { { gray } { 0 } }
+                       }
+                   }
               }
           }
       }
   }
 \int_new:N \l__kernel_color_stack_int
-\cs_new_protected:Npn \__color_backend_cmyk:n #1
+\cs_new_protected:Npn \__color_backend_select_cmyk:n #1
   { \__color_backend_select:n { #1 ~ k ~ #1 ~ K } }
-\cs_new_protected:Npn \__color_backend_gray:n #1
+\cs_new_protected:Npn \__color_backend_select_gray:n #1
   { \__color_backend_select:n { #1 ~ g ~ #1 ~ G } }
-\cs_new_protected:Npn \__color_backend_rgb:n #1
+\cs_new_protected:Npn \__color_backend_select_rgb:n #1
   { \__color_backend_select:n { #1 ~ rg ~ #1 ~ RG } }
-\cs_new_protected:Npn \__color_backend_spot:n #1
-  { \__color_backend_spot:w #1 \s__color_stop }
-\cs_new_protected:Npn \__color_backend_spot:w #1 ~ #2 \s__color_stop
-  { \__color_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } }
 \cs_new_protected:Npx \__color_backend_select:n #1
   {
     \cs_if_exist:NTF \tex_pdfextension:D
@@ -129,6 +122,24 @@
       { \tex_pdfcolorstack:D }
         \exp_not:N \l__kernel_color_stack_int pop \scan_stop:
   }
+\cs_new_protected:Npn \__color_backend_select_separation:nn #1#2
+  { \__color_backend_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ scn ~ #2 ~ SCN } }
+\cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ k } }
+\cs_new_protected:Npn \__color_backend_fill_gray:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ g } }
+\cs_new_protected:Npn \__color_backend_fill_rgb:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ rg } }
+  \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ K } }
+\cs_new_protected:Npn \__color_backend_stroke_gray:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ G } }
+\cs_new_protected:Npn \__color_backend_stroke_rgb:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ RG } }
+\cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2
+  { \__kernel_backend_literal_pdf:n { /#1 ~ cs ~ #2 ~ scn } }
+\cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2
+  { \__kernel_backend_literal_pdf:n { /#1 ~ CS ~ #2 ~ SCN } }
 %% File: l3backend-box.dtx
 \cs_new_protected:Npn \__box_backend_clip:N #1
   {
@@ -283,34 +294,6 @@
   { \__draw_backend_literal:n { 1 ~ j } }
 \cs_new_protected:Npn \__draw_backend_join_bevel:
   { \__draw_backend_literal:n { 2 ~ j } }
-\cs_new_protected:Npn \__draw_backend_color_fill_cmyk:n #1
-  { \__draw_backend_color_select:n { #1 ~ k } }
-\cs_new_protected:Npn \__draw_backend_color_stroke_cmyk:n #1
-  { \__draw_backend_color_select:n { #1 ~ K } }
-\cs_new_protected:Npn \__draw_backend_color_fill_gray:n #1
-  { \__draw_backend_color_select:n { #1 ~ g } }
-\cs_new_protected:Npn \__draw_backend_color_stroke_gray:n #1
-  { \__draw_backend_color_select:n { #1 ~ G } }
-\cs_new_protected:Npn \__draw_backend_color_fill_rgb:n #1
-  { \__draw_backend_color_select:n { #1 ~ rg } }
-\cs_new_protected:Npn \__draw_backend_color_stroke_rgb:n #1
-  { \__draw_backend_color_select:n { #1 ~ RG } }
-\cs_new_protected:Npx \__draw_backend_color_select:n #1
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D colorstack }
-      { \tex_pdfcolorstack:D }
-        \exp_not:N \l__kernel_color_stack_int push {#1}
-      \group_insert_after:N \exp_not:N \__draw_backend_color_reset:
-  }
-\cs_new_protected:Npx \__draw_backend_color_reset:
-  {
-    \cs_if_exist:NTF \tex_pdfextension:D
-      { \tex_pdfextension:D colorstack }
-      { \tex_pdfcolorstack:D }
-        \exp_not:N \l__kernel_color_stack_int pop \scan_stop:
-  }
-\cs_generate_variant:Nn \__draw_backend_color_select:n { x }
 \cs_new_protected:Npn \__draw_backend_cm:nnnn #1#2#3#4
   {
     \__kernel_backend_matrix:n { #1 ~ #2 ~ #3 ~ #4 }

Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xdvipdfmx.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xdvipdfmx.def	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xdvipdfmx.def	2020-08-07 21:37:39 UTC (rev 56067)
@@ -25,7 +25,7 @@
 %% 
 %% File: l3backend-basics.dtx
 \ProvidesExplFile
-  {l3backend-xdvipdfmx.def}{2020-06-29}{}
+  {l3backend-xdvipdfmx.def}{2020-08-07}{}
   {L3 backend support: xdvipdfmx}
 \cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
 \cs_new_protected:Npn \__kernel_backend_literal:n #1
@@ -42,37 +42,32 @@
   { \__kernel_backend_literal:n { x:grestore } }
 %% File: l3backend-color.dtx
 \cs_new_protected:Npn \__color_backend_pickup:N #1 { }
-\AtBeginDocument
+\cs_if_exist:cT { ver at color.sty }
   {
-    \cs_if_exist:cT { ver at color.sty }
+     \cs_set_protected:Npn \__color_backend_pickup:N #1
       {
-        \cs_set_protected:Npn \__color_backend_pickup:N #1
+        \exp_args:NV \tl_if_head_is_space:nTF \current at color
           {
-            \exp_args:NV \tl_if_head_is_space:nTF \current at color
-              {
-                \tl_set:Nx #1
-                   {
-                     { spot }
-                     { \exp_after:wN \use:n \current at color \c_space_tl 1 }
-                   }
-              }
-              {
-                \exp_last_unbraced:Nx \__color_backend_pickup:w
-                  { \current at color } \s__color_stop #1
-              }
+            \tl_set:Nx #1
+               {
+                 { \exp_after:wN \use:n \current at color }
+                 { 1 }
+               }
           }
-        \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
-          { \tl_set:Nn #3 { {#1} {#2} } }
+          {
+            \exp_last_unbraced:Nx \__color_backend_pickup:w
+              { \current at color } \s__color_stop #1
+          }
       }
+    \cs_new_protected:Npn \__color_backend_pickup:w #1 ~ #2 \s__color_stop #3
+      { \tl_set:Nn #3 { {#1} {#2} } }
   }
-\cs_new_protected:Npn \__color_backend_cmyk:n #1
+\cs_new_protected:Npn \__color_backend_select_cmyk:n #1
   { \__color_backend_select:n { cmyk ~ #1 } }
-\cs_new_protected:Npn \__color_backend_gray:n #1
+\cs_new_protected:Npn \__color_backend_select_gray:n #1
   { \__color_backend_select:n { gray ~ #1 } }
-\cs_new_protected:Npn \__color_backend_rgb:n #1
+\cs_new_protected:Npn \__color_backend_select_rgb:n #1
   { \__color_backend_select:n { rgb ~ #1 } }
-\cs_new_protected:Npn \__color_backend_spot:n #1
-  { \__color_backend_select:n {#1} }
 \cs_new_protected:Npn \__color_backend_select:n #1
   {
     \__kernel_backend_literal:n { color~push~ #1 }
@@ -80,6 +75,24 @@
   }
 \cs_new_protected:Npn \__color_backend_reset:
   { \__kernel_backend_literal:n { color~pop } }
+\cs_new_protected:Npn \__color_backend_select_separation:nn #1#2
+  { \__color_backend_select:n {#1} }
+\cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ k } }
+\cs_new_protected:Npn \__color_backend_fill_gray:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ g } }
+\cs_new_protected:Npn \__color_backend_fill_rgb:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ rg } }
+  \cs_new_protected:Npn \__color_backend_stroke_cmyk:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ K } }
+\cs_new_protected:Npn \__color_backend_stroke_gray:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ G } }
+\cs_new_protected:Npn \__color_backend_stroke_rgb:n #1
+  { \__kernel_backend_literal_pdf:n { #1 ~ RG } }
+\cs_new_protected:Npn \__color_backend_fill_separation:nn #1#2
+  { \__kernel_backend_literal_pdf:n { /#1 ~ cs ~ #2 ~ scn } }
+\cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2
+  { \__kernel_backend_literal_pdf:n { /#1 ~ CS ~ #2 ~ SCN } }
 %% File: l3backend-box.dtx
 \cs_new_protected:Npn \__box_backend_clip:N #1
   {
@@ -221,20 +234,6 @@
   { \__draw_backend_literal:n { 1 ~ j } }
 \cs_new_protected:Npn \__draw_backend_join_bevel:
   { \__draw_backend_literal:n { 2 ~ j } }
-\cs_new_protected:Npn \__draw_backend_color_fill_cmyk:n #1
-  { \__draw_backend_color_select:n { #1 ~ k } }
-\cs_new_protected:Npn \__draw_backend_color_stroke_cmyk:n #1
-  { \__draw_backend_color_select:n { #1 ~ K } }
-\cs_new_protected:Npn \__draw_backend_color_fill_gray:n #1
-  { \__draw_backend_color_select:n { #1 ~ g } }
-\cs_new_protected:Npn \__draw_backend_color_stroke_gray:n #1
-  { \__draw_backend_color_select:n { #1 ~ G } }
-\cs_new_protected:Npn \__draw_backend_color_fill_rgb:n #1
-  { \__draw_backend_color_select:n { #1 ~ rg } }
-\cs_new_protected:Npn \__draw_backend_color_stroke_rgb:n #1
-  { \__draw_backend_color_select:n { #1 ~ RG } }
-\cs_new_eq:NN \__draw_backend_color_select:n \__kernel_backend_literal_pdf:n
-\cs_generate_variant:Nn \__draw_backend_color_select:n { x }
 \cs_new_protected:Npn \__draw_backend_cm:nnnn #1#2#3#4
   {
     \__draw_backend_cm_decompose:nnnnN {#1} {#2} {#3} {#4}
@@ -315,8 +314,7 @@
     \__kernel_backend_scope_end:
   }
 %% File: l3backend-graphics.dtx
-\AtBeginDocument
-  { \cs_new_eq:NN \__graphics_backend_getbb_eps:n \graphics_read_bb:n }
+\cs_new_eq:NN \__graphics_backend_getbb_eps:n \graphics_read_bb:n
 \int_new:N \g__graphics_track_int
 \cs_new_protected:Npn \__graphics_backend_include_eps:n #1
   {
@@ -518,15 +516,12 @@
 \cs_new:Npn \__pdf_backend_pageobject_ref:n #1
   { @page #1 }
 \bool_new:N \g__pdf_landscape_bool
-\AtBeginDocument
+\cs_if_exist:NT \landscape
   {
-    \cs_if_exist:NT \landscape
-      {
-        \tl_put_right:Nn \landscape
-          { \bool_gset_true:N \g__pdf_landscape_bool }
-        \tl_put_left:Nn \endlandscape
-          { \bool_gset_false:N \g__pdf_landscape_bool }
-      }
+    \tl_put_right:Nn \landscape
+      { \bool_gset_true:N \g__pdf_landscape_bool }
+    \tl_put_left:Nn \endlandscape
+      { \bool_gset_false:N \g__pdf_landscape_bool }
   }
 \int_new:N \g__pdf_backend_annotation_int
 \cs_new_protected:Npn \__pdf_backend_annotation:nnnn #1#2#3#4

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty	2020-08-07 21:37:39 UTC (rev 56067)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3benchmark.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3benchmark}{2020-07-17}{}
+\ProvidesExplPackage{l3benchmark}{2020-08-07}{}
   {L3 Experimental benchmarking}
 \sys_if_engine_luatex:TF
   {

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty	2020-08-07 21:37:39 UTC (rev 56067)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3color.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3color}{2020-07-17}{}
+\ProvidesExplPackage{l3color}{2020-08-07}{}
   {L3 Experimental color support}
 \tl_new:N \l__color_internal_tl
 \scan_new:N \s__color_mark
@@ -43,10 +43,12 @@
 \cs_generate_variant:Nn \__color_convert:nnN { VV }
 \cs_new_protected:Npn \__color_convert:nnnN #1#2#3#4
   {
-    \str_if_eq:nnT {#1} { spot } % TO DO!!!
-      { }
     \tl_set:Nx #4
-      { \use:c { __color_convert_ #1 _ #2 :w } #3 ~ 0 ~ 0 ~ 0 \s__color_stop }
+      {
+        \cs_if_exist:cTF { __color_convert_ #1 _ #2 :w }
+          { \use:c { __color_convert_ #1 _ #2 :w } #3 ~ 0 ~ 0 ~ 0 \s__color_stop }
+          { \use:c { c__color_fallback_ #2 _tl } }
+      }
   }
 \cs_generate_variant:Nn \__color_convert:nnnN { nV , nnV }
 \cs_new:Npn \__color_convert_gray_rgb:w #1 ~ #2 \s__color_stop
@@ -421,6 +423,30 @@
     \tl_set:Nx #1
       { { \l_color_fixed_model_tl } { \l__color_value_tl } }
   }
+\cs_new_protected:Npn \color_fill:n #1
+  {
+    \__color_parse:nN {#1} \l__color_current_tl
+    \exp_after:wN \__color_draw:nnn \l__color_current_tl { fill }
+  }
+\cs_new_protected:Npn \color_stroke:n #1
+  {
+    \__color_parse:nN {#1} \l__color_current_tl
+    \exp_after:wN \__color_draw:nnn \l__color_current_tl { stroke }
+  }
+\cs_new_protected:Npn \color_fill:nn #1#2
+  {
+    \__color_select_main:Nw \l__color_current_tl
+      #1 / / \s__color_mark #2 / / \s__color_stop
+    \exp_after:wN \__color_draw:nnn \l__color_current_tl { fill }
+  }
+\cs_new_protected:Npn \color_stroke:nn #1#2
+  {
+    \__color_select_main:Nw \l__color_current_tl
+      #1 / / \s__color_mark #2 / / \s__color_stop
+    \exp_after:wN \__color_draw:nnn \l__color_current_tl { stroke }
+  }
+\cs_new_protected:Npn \__color_draw:nnn #1#2#3
+  { \use:c { __color_backend_ #3 _ #1 :n } {#2} }
 \tl_new:N \l__color_named_tl
 \cs_new_protected:Npn \color_set:nn #1#2
   {
@@ -596,6 +622,245 @@
   }
 \cs_new_protected:cpn { __color_export_space-sep-rgb:Nw } #1#2 \s__color_stop
   { \tl_set:Nx #1 {#2} }
+\prop_new:N \l__color_internal_prop
+\int_new:N \g__color_separation_int
+\tl_const:Nn \c__color_model_whitepoint_cielab_a_tl      { 1.0985 ~ 1 ~ 0.3558 }
+\tl_const:Nn \c__color_model_whitepoint_cielab_b_tl      { 0.9807~ 1 ~ 1.1822 }
+\tl_const:Nn \c__color_model_whitepoint_cielab_e_tl      { 1 ~ 1 ~ 1 }
+\tl_const:cn { c__color_model_whitepoint_cielab_d50_tl } { 0.9642 ~, 1 ~ 0.8251 }
+\tl_const:cn { c__color_model_whitepoint_cielab_d55_tl } { 0.9568 ~ 1 ~ 0.9214 }
+\tl_const:cn { c__color_model_whitepoint_cielab_d65_tl } { 0.9504 ~ 1 ~ 1.0888 }
+\tl_const:cn { c__color_model_whitepoint_cielab_d75_tl } { 0.9497 ~ 1 ~ 1.2261 }
+\tl_const:Nn \c__color_model_range_cielab_tl { -128 ~ 127 ~ -128 ~ 127 }
+\cs_new_protected:Npn \color_model_new:nnn #1#2#3
+  {
+    \exp_args:Nee \__color_model_new:nnn
+      { \tl_to_str:n {#1} }
+      { \str_foldcase:n {#2} } {#3}
+  }
+\cs_new_protected:Npn \__color_model_new:nnn #1#2#3
+  {
+    \cs_if_exist:cTF { __color_parse_model_ #1 :w }
+      {
+        \__kernel_msg_error:nnn { color } { model-already-defined } {#1}
+      }
+      {
+        \cs_if_exist:cTF { __color_model_ #2 :n }
+          {
+            \prop_set_from_keyval:Nn \l__color_internal_prop {#3}
+            \use:c { __color_model_ #2 :n } {#1}
+          }
+          {
+            \__kernel_msg_error:nnn { color } { unknown-model-type } {#2}
+          }
+      }
+  }
+\cs_new_protected:Npn \__color_model_separation:n #1
+  {
+    \prop_get:NnNTF \l__color_internal_prop { name }
+      \l__color_internal_tl
+      {
+        \exp_args:NV \__color_model_separation:nn
+          \l__color_internal_tl {#1}
+      }
+      {
+        \__kernel_msg_error:nnn { color }
+          { separation-requires-name } {#1}
+      }
+  }
+\cs_new_protected:Npn \__color_model_separation:nn #1#2
+  {
+    \prop_get:NnNTF \l__color_internal_prop { alternative-model }
+      \l__color_internal_tl
+      {
+        \exp_args:NV \__color_model_separation:nnn
+          \l__color_internal_tl {#2} {#1}
+      }
+      {
+        \__kernel_msg_error:nnn { color }
+          { separation-alternative-model } {#2}
+      }
+  }
+\cs_new_protected:Npn \__color_model_separation:nnn #1#2#3
+  {
+    \cs_if_exist:cTF { __color_model_separation_ #1 :nnnnnn }
+      {
+        \prop_get:NnNTF \l__color_internal_prop { alternative-values }
+          \l__color_internal_tl
+          {
+            \exp_after:wN \__color_model_separation:w \l__color_internal_tl
+              , 0 , 0 , 0 , 0 \s__color_stop {#2} {#3} {#1}
+          }
+          {
+            \__kernel_msg_error:nnn { color }
+              { separation-alternative-values } {#2}
+          }
+      }
+      {
+        \__kernel_msg_error:nnn { color }
+          { unknown-alternative-model } {#1}
+      }
+  }
+\cs_new_protected:Npn \__color_model_separation:w
+  #1 , #2 , #3 , #4 , #5 \s__color_stop #6#7#8
+  {
+    \int_gincr:N \g__color_separation_int
+    \tl_const:cn { c__color_fallback_ #6 _tl } { 1 }
+    \cs_new_eq:cN { __color_parse_mix_ #6 :nw } \__color_parse_mix_gray:nw
+    \cs_new:cpn { __color_parse_model_ #6 :w } ##1 , ##2 \s__color_stop
+      { {#6} { \__color_parse_number:n {##1} } }
+    \clist_map_inline:nn { fill , stroke , select }
+      {
+        \cs_new_protected:cpx { __color_backend_ ##1 _ #6 :n } ####1
+          {
+            \exp_not:c { __color_backend_ ##1 _ separation:nn }
+              { color \int_use:N \g__color_separation_int } {####1}
+          }
+      }
+    \use:c { __color_model_separation_ #8 :nnnnnn }
+      {#6} {#7} {#1} {#2} {#3} {#4}
+    \cs_new_protected:cpx { __color_model_ #6 _white: }
+      {
+        \prop_put:Nnn \exp_not:N \l__color_named_white_prop {#6} { 0 }
+        \exp_not:N \int_compare:nNnF { \tex_currentgrouplevel:D } = 0
+          { \group_insert_after:N \exp_not:c { __color_model_ #6 _ white: } }
+      }
+    \use:c { __color_model_ #6 _white: }
+  }
+\cs_new_protected:Npn \__color_model_separation_cmyk:nnnnnn #1#2#3#4#5#6
+  {
+    \cs_new:cpn { __color_convert_ #1 _cmyk:w } ##1 ~ ##2 \s__color_stop
+      {
+         \fp_eval:n {##1 * #3} ~
+         \fp_eval:n {##1 * #4} ~
+         \fp_eval:n {##1 * #5} ~
+         \fp_eval:n {##1 * #6}
+      }
+    \__color_model_convert:nnn {#1} { cmyk } { rgb }
+    \__color_model_convert:nnn {#1} { cmyk } { gray }
+    \__color_model_separation_init:nnnnn {#2} { /DeviceCMYK } { }
+      { 0 ~ 0 ~ 0 ~ 0 } { #3 ~ #4 ~ #5 ~ #6 }
+  }
+\cs_new_protected:Npn \__color_model_separation_rgb:nnnnnn #1#2#3#4#5#6
+  {
+    \cs_new:cpn { __color_convert_ #1 _rgb:w } ##1 ~ ##2 \s__color_stop
+      {
+         \fp_eval:n {##1 * #3} ~
+         \fp_eval:n {##1 * #4} ~
+         \fp_eval:n {##1 * #5}
+      }
+    \__color_model_convert:nnn {#1} { rgb } { cmyk }
+    \__color_model_convert:nnn {#1} { rgb } { gray }
+    \__color_model_separation_init:nnnnn {#2} { /DeviceRGB } { }
+      { 0 ~ 0 ~ 0 } { #3 ~ #4 ~ #5 }
+  }
+\cs_new_protected:Npn \__color_model_separation_gray:nnnnnn #1#2#3#4#5#6
+  {
+    \cs_new:cpn { __color_convert_ #1 _cmyk:w } ##1 ~ ##2 \s__color_stop
+      {
+        \fp_eval:n {##1 * #3} ~
+        \fp_eval:n {##1 * #3} ~
+        \fp_eval:n {##1 * #3} ~
+        \fp_eval:n {##1 * #3}
+      }
+    \cs_new:cpn { __color_convert_ #1 _gray:w } ##1 ~ ##2 \s__color_stop
+      { \fp_eval:n {##1 * #3} }
+    \cs_new:cpn { __color_convert_ #1 _rgb:w } ##1 ~ ##2 \s__color_stop
+      {
+        \fp_eval:n {##1 * #3} ~
+        \fp_eval:n {##1 * #3} ~
+        \fp_eval:n {##1 * #3}
+      }
+    \__color_model_separation_init:nnnnn {#2} { /DeviceGray } { } { 0 } {#3}
+  }
+\cs_new_protected:Npn \__color_model_convert:nnn #1#2#3
+  {
+    \cs_new:cpx { __color_convert_ #1 _ #3 :w } ##1 ~ ##2 \s__color_stop
+      {
+        \exp_not:N \exp_args:NNe \exp_not:N \use:nn
+        \exp_not:c { __color_convert_  #2 _ #3 :w }
+          { \exp_not:c { __color_convert_ #1 _ #2 :w } ##1 ~ ##2 \s__color_stop }
+          \c_space_tl \exp_not:N \s__color_stop
+      }
+  }
+\cs_new_protected:Npn \__color_model_separation_cielab:nnnnnn #1#2#3#4#5#6
+  {
+    \prop_get:NnNF \l__color_internal_prop { illuminant }
+      \l__color_internal_tl
+      {
+        \__kernel_msg_error:nnn { color }
+          { cielab-requires-illuminant } {#1}
+        \tl_set:Nn \l__color_internal_tl { d50 }
+      }
+    \exp_args:NV \__color_model_separation_cielab:nnnnnnn
+      \l__color_internal_tl {#1} {#2} {#3} {#4} {#5} {#6}
+  }
+\cs_new_protected:Npn \__color_model_separation_cielab:nnnnnnn #1#2#3#4#5#6#7
+  {
+    \tl_if_exist:cTF { c__color_model_whitepoint_cielab_ #1 _tl }
+      {
+        \__color_model_separation_init_cielab:n {#1}
+        \__color_model_separation_init_cielab:nnnnn {#2} {#3} {#4} {#5} {#6}
+        \cs_new:cpn { __color_convert_ #2 _cmyk:w } ##1 ~ ##2 \s__color_stop
+          { 0 ~ 0 ~ 0 ~ 1 }
+        \cs_new:cpn { __color_convert_ #2 _rgb:w } ##1 ~ ##2 \s__color_stop
+          { 1 ~ 1 ~ 1 }
+        \cs_new:cpn { __color_convert_ #2 _gray:w } ##1 ~ ##2 \s__color_stop
+          { 1 }
+      }
+      {
+        \__kernel_msg_error:nnn { color }
+          { unknown-cielab-illuminant } {#1}
+      }
+  }
+\cs_new_protected:Npn \__color_model_separation_init:nnnnn #1#2#3#4#5
+  {
+    \pdf_object_now:nx { array }
+      {
+        /Separation
+        / \str_convert_pdfname:n {#1} ~ #2 ~
+        <<
+          /FunctionType ~ 2
+          /Domain ~ [0 ~ 1]
+          \tl_if_blank:nF {#3} { /Range ~ [#3] }
+          /C0 ~ [#4] ~
+          /C1 ~ [#5] /N ~ 1
+        >>
+      }
+    \use:x
+      {
+        \pdfcoredict_gput:nnn
+          { Page / Resources / ColorSpace }
+          { color \int_use:N \g__color_separation_int }
+          { \pdf_object_last: }
+      }
+  }
+\cs_if_exist:NF \pdf_object_now:nn
+  { \cs_gset_protected:Npn \__color_model_separation_init:nnnnn #1#2#3#4#5 { } }
+\cs_new_protected:Npn \__color_model_separation_init_cielab:n #1
+  {
+    \pdf_object_new:nn { __color_illuminant_cielab_ #1 } { array }
+    \pdf_object_write:nx { __color_illuminant_cielab_ #1 }
+      {
+        /Lab ~
+        <<
+         /WhitePoint ~
+           [ \tl_use:c { c__color_model_whitepoint_cielab_ #1 _tl } ]
+         /Range ~ [ \c__color_model_range_lab_tl ]
+        >>
+     }
+  }
+\cs_if_exist:NF \pdf_object_new:nn
+  { \cs_gset_protected:Npn \__color_model_separation_init_cielab:n #1 { } }
+\cs_new_protected:Npn \__color_model_separation_init_cielab:nnnnn #1#2#3#4#5
+  {
+    \__color_model_separation_init:nnnnn
+      {#2}
+      { \pdf_object_ref:n { __color_illuminant_cielab_ #1 } }
+      { \c__color_model_range_lab_tl }
+      { 100 ~ 0 ~ 0 }
+      { #3 ~ #4 ~ #5 }
+  }
 \cs_new_protected:Npn \color_show:n #1
   {
     \msg_show:nnxxxx { LaTeX / color } { show }
@@ -616,6 +881,55 @@
   {
     \msg_show_item_unbraced:nn { model } {#1}
   }
+\__kernel_msg_new:nnnn { color } { cielab-requires-illuminant }
+  { CIELAB~color~space~'#1'~require~an~illuminant. }
+  {
+    LaTeX~has~been~asked~to~create~a~separation~color~space~using~
+    CIELAB~specifications,~but~no~\\ \\
+    \iow_indent:n { illuminant = <basis> }
+    \\ \\
+    key~was~given~with~the~correct~information.~LaTeX~will~use~illuminant~
+    'd50'~for~recovery.
+  }
+\__kernel_msg_new:nnnn { color } { conversion-not-available }
+  { No~model~conversion~available~from~'#1'~to~'#2'. }
+  {
+    LaTeX~has~been~asked~to~convert~a~color~from~model~'#1'~
+    to~model'#2',~but~there~is~no~method~available~to~do~that.
+  }
+\__kernel_msg_new:nnnn { color } { model-already-defined }
+  { Color~model~'#1'~already~defined. }
+  {
+    LaTeX~was~asked~to~define~a~new~color~model~called~'#1',~but~
+    this~color~model~already~exists.
+  }
+\__kernel_msg_new:nnnn { color } { separation-alternative-model }
+  { Separation~color~space~'#1'~require~an~alternative~model. }
+  {
+    LaTeX~has~been~asked~to~create~a~separation~color~space,~
+    but~no~\\ \\
+    \iow_indent:n { alternative-model = <model> }
+    \\ \\
+    key~was~given~with~the~correct~information.
+  }
+\__kernel_msg_new:nnnn { color } { separation-alternative-values }
+  { Separation~color~space~'#1'~require~values~for~the~alternative~space. }
+  {
+    LaTeX~has~been~asked~to~create~a~separation~color~space,~
+    but~no~\\ \\
+    \iow_indent:n { alternative-values = <model> }
+    \\ \\
+    key~was~given~with~the~correct~information.
+  }
+\__kernel_msg_new:nnnn { color } { separation-requires-name }
+  { Separation~color~space~'#1'~require~a~formal~name. }
+  {
+    LaTeX~has~been~asked~to~create~a~separation~color~space,~
+    but~no~\\ \\
+    \iow_indent:n { name = <formal~name> }
+    \\ \\
+    key~was~given~with~the~correct~information.
+  }
 \__kernel_msg_new:nnnn { color } { unknown-color }
   { Unknown~color~'#1'. }
   {
@@ -622,6 +936,15 @@
     LaTeX~has~been~asked~to~use~a~color~named~'#1',~
     but~this~has~never~been~defined.
   }
+\__kernel_msg_new:nnnn { color } { unknown-alternative-model }
+  { Separation~color~space~'#1'~require~an~valid~alternative~space. }
+  {
+    LaTeX~has~been~asked~to~create~a~separation~color~space,~
+    but~the~model~given~as\\ \\
+    \iow_indent:n { alternative-model = <model> }
+    \\ \\
+    is~unknown.
+  }
 \__kernel_msg_new:nnnn { color } { unknown-export-format }
   { Unknown~export~format~'#1'. }
   {
@@ -628,6 +951,12 @@
     LaTeX~has~been~asked~to~export~a~color~in~format~'#1',~
     but~this~has~never~been~defined.
   }
+\__kernel_msg_new:nnnn { color } { unknown-cielab-illuminant }
+  { Unknown~illuminant~model~'#1'. }
+  {
+    LaTeX~has~been~asked~to~use~create~a~color~space~using~CIELAB~
+    illuminant~'#1',~but~this~does~not~exist.
+  }
 \__kernel_msg_new:nnnn { color } { unknown-model }
   { Unknown~color~model~'#1'. }
   {
@@ -634,6 +963,12 @@
     LaTeX~has~been~asked~to~use~a~color~model~called~'#1',~
     but~this~model~is~not~set~up.
   }
+\__kernel_msg_new:nnnn { color } { unknown-model-type }
+  { Unknown~color~model~type~'#1'. }
+  {
+    LaTeX~has~been~asked~to~create~a~new~color~model~called~'#1',~
+    but~this~type~of~model~was~never~set~up.
+  }
 \__kernel_msg_new:nnn { color } { show }
   {
     The~color~#1~

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty	2020-08-07 21:37:39 UTC (rev 56067)
@@ -28,7 +28,7 @@
 %% 
 %% File: l3draw.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3draw}{2020-07-17}{}
+\ProvidesExplPackage{l3draw}{2020-08-07}{}
   {L3 Experimental core drawing support}
 \RequirePackage { l3color }
 \scan_new:N \s__draw_mark
@@ -1242,7 +1242,7 @@
         \draw_transform_shift_reset:
         \__draw_softpath_clear:
         \draw_linewidth:n { \l_draw_default_linewidth_dim }
-        \draw_color:n { . }
+        \color_select:n { . }
         \draw_nonzero_rule:
         \draw_cap_butt:
         \draw_join_miter:
@@ -1686,19 +1686,6 @@
 \cs_new_protected:Npn \draw_join_bevel: { \__draw_backend_join_bevel: }
 \cs_new_protected:Npn \draw_join_miter: { \__draw_backend_join_miter: }
 \cs_new_protected:Npn \draw_join_round: { \__draw_backend_join_round: }
-\tl_new:N \l__draw_color_tmp_tl
-\cs_new_eq:NN \draw_color:n \color_select:n
-\cs_new_protected:Npn \draw_color_fill:n #1
-  { \__draw_color:nn { fill } {#1} }
-\cs_new_protected:Npn \draw_color_stroke:n #1
-  { \__draw_color:nn { stroke } {#1} }
-\cs_new_protected:Npn \__draw_color:nn #1#2
-  {
-    \color_export:nnN {#2} { backend } \l__draw_color_tmp_tl
-    \exp_after:wN \__draw_color:nnn \l__draw_color_tmp_tl {#1}
-  }
-\cs_new_protected:Npn \__draw_color:nnn #1#2#3
-  { \use:c { __draw_backend_color_ #3 _ #1 :n } {#2} }
 %% File: l3draw-transforms.dtx
 \bool_new:N \l__draw_matrix_active_bool
 \fp_new:N \l__draw_matrix_a_fp

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty	2020-08-07 21:37:39 UTC (rev 56067)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3graphics.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3graphics}{2020-07-17}{}
+\ProvidesExplPackage{l3graphics}{2020-08-07}{}
   {L3 Experimental graphics inclusion support}
 \ior_new:N \l__graphics_tmp_ior
 \tl_new:N  \l__graphics_tmp_tl

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty	2020-08-07 21:37:39 UTC (rev 56067)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3pdf.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3pdf}{2020-07-17}{}
+\ProvidesExplPackage{l3pdf}{2020-08-07}{}
   {L3 Experimental core PDF support}
 \scan_new:N \s__pdf_stop
 \bool_new:N \g__pdf_init_bool

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty	2020-08-07 21:37:39 UTC (rev 56067)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3str-format.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3str-format}{2020-07-17}{}
+\ProvidesExplPackage{l3str-format}{2020-08-07}{}
   {L3 Experimental string formatting}
 \cs_generate_variant:Nn \use:nn { nf }
 \cs_generate_variant:Nn \use:nnn { fnf }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty	2020-08-07 21:37:39 UTC (rev 56067)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3sys-shell.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3sys-shell}{2020-07-17}{}
+\ProvidesExplPackage{l3sys-shell}{2020-08-07}{}
   {L3 Experimental system shell functions}
 \scan_new:N \s__sys_stop
 \quark_new:N \q__sys_nil

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty	2020-08-07 21:37:39 UTC (rev 56067)
@@ -20,7 +20,7 @@
 %% 
 %% File: xcoffins.dtx
 \RequirePackage{xparse}
-\ProvidesExplPackage{xcoffins}{2020-07-17}{}
+\ProvidesExplPackage{xcoffins}{2020-08-07}{}
   {L3 Experimental design level coffins}
 \keys_define:nn { coffin }
   {

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty	2020-08-07 21:37:39 UTC (rev 56067)
@@ -32,7 +32,7 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{l3galley}{2020-07-17}{}
+\ProvidesExplPackage{l3galley}{2020-08-07}{}
   {L3 Experimental galley code}
 \int_new:N \l__galley_tmp_int
 \seq_new:N \g__galley_tmpa_seq
@@ -356,7 +356,9 @@
   }
 \cs_undefine:N \everypar
 \newtoks \everypar
-\AtBeginDocument
+\cs_if_exist:NTF \AtBeginDocument
+  { \AtBeginDocument }
+  { \use:n }
   {
     \tex_everypar:D
       {

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty	2020-08-07 21:37:39 UTC (rev 56067)
@@ -20,7 +20,7 @@
 %% 
 %% File: xgalley.dtx
 \RequirePackage{xparse}
-\ProvidesExplPackage{xgalley}{2020-07-17}{}
+\ProvidesExplPackage{xgalley}{2020-08-07}{}
   {L3 Experimental galley}
 \RequirePackage{xparse,xtemplate,l3galley}
 \clist_new:N \l__galley_tmpa_clist

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2020-08-07 21:37:39 UTC (rev 56067)
@@ -69,7 +69,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2020-07-17}%
+\def\ExplFileDate{2020-08-07}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -241,10 +241,9 @@
   \fi
 \expandafter\endgroup
 \next
-\protected\def\ExplSyntaxOff{}%
 \protected\edef\ExplSyntaxOff
   {%
-    \protected\def\ExplSyntaxOff{}%
+    \protected\def\noexpand\ExplSyntaxOff{}%
     \catcode   9 = \the\catcode   9\relax
     \catcode  32 = \the\catcode  32\relax
     \catcode  34 = \the\catcode  34\relax
@@ -306,9 +305,7 @@
 \let \tex_let:D    \let
 \begingroup
   \long \def \__kernel_primitive:NN #1#2
-    {
-      \tex_global:D \tex_let:D #2 #1
-    }
+    { \tex_global:D \tex_let:D #2 #1 }
   \__kernel_primitive:NN \                      \tex_space:D
   \__kernel_primitive:NN \/                     \tex_italiccorrection:D
   \__kernel_primitive:NN \-                     \tex_hyphen:D
@@ -9509,6 +9506,7 @@
           }
       }
   }
+\int_gset:Nn \tex_errorcontextlines:D { -1 }
 \cs_new:Npn \msg_fatal_text:n #1
   {
     Fatal ~
@@ -9897,6 +9895,7 @@
         { \exp_not:c { #1 :nnxxxx } {##1} {##2} {##3} { } { } { } }
     }
   \__msg_kernel_class_new:nN { fatal } \__msg_fatal_code:nnnnnn
+  \__msg_kernel_class_new:nN { critical } \__msg_critical_code:nnnnnn
   \cs_undefine:N \__kernel_msg_error:nnxx
   \cs_undefine:N \__kernel_msg_error:nnx
   \cs_undefine:N \__kernel_msg_error:nn
@@ -10135,13 +10134,13 @@
       } { . }
   }
 \__kernel_msg_new:nnnn { kernel } { enable-debug }
-  { To~use~'#1'~load~expl3~with~the~'enable-debug'~option. }
+  { To~use~'#1'~set~the~'enable-debug'~option. }
   {
-     The~function~'#1'~will~be~ignored~because~it~can~only~work~if~
+    The~function~'#1'~will~be~ignored~because~it~can~only~work~if~
     some~internal~functions~in~expl3~have~been~appropriately~
     defined.~This~only~happens~if~one~of~the~options~
-     'enable-debug',~'check-declarations'~or~'log-functions'~was~
-    given~when~loading~expl3.
+    'enable-debug',~'check-declarations'~or~'log-functions'~was~
+    given~as~an~option:~see~the~main~expl3~documentation.
   }
 \__kernel_msg_new:nnn { kernel } { bad-exp-end-f }
   { Misused~\exp_end_continue_f:w or~:nw }
@@ -11737,20 +11736,6 @@
     #1 \\
     .............
   }
-\__kernel_msg_new:nnnn { kernel } { input-streams-exhausted }
-  { Input~streams~exhausted }
-  {
-    TeX~can~only~open~up~to~16~input~streams~at~one~time.\\
-    All~16~are~currently~in~use,~and~something~wanted~to~open~
-    another~one.
-  }
-\__kernel_msg_new:nnnn { kernel } { output-streams-exhausted }
-  { Output~streams~exhausted }
-  {
-    TeX~can~only~open~up~to~16~output~streams~at~one~time.\\
-    All~16~are~currently~in~use,~and~something~wanted~to~open~
-    another~one.
-  }
 \__kernel_msg_new:nnnn { kernel } { unbalanced-quote-in-filename }
   { Unbalanced~quotes~in~file~name~'#1'. }
   {
@@ -12513,14 +12498,11 @@
 \bool_new:N \l__keys_tmp_bool
 \tl_new:N \l__keys_tmpa_tl
 \tl_new:N \l__keys_tmpb_tl
+\scan_new:N \s__keys_nil
+\scan_new:N \s__keys_mark
 \scan_new:N \s__keys_stop
-\quark_new:N \q__keys_nil
 \quark_new:N \q__keys_no_value
-\__kernel_quark_new_conditional:Nn \__keys_quark_if_nil:n { TF }
 \__kernel_quark_new_conditional:Nn \__keys_quark_if_no_value:N { TF }
-\quark_new:N \q__keys_recursion_tail
-\quark_new:N \q__keys_recursion_stop
-\__kernel_quark_new_test:N \__keys_if_recursion_tail_stop:n
 \cs_new_protected:Npn \keys_define:nn
   { \__keys_define:onn \l__keys_module_str }
 \cs_new_protected:Npn \__keys_define:nnn #1#2#3
@@ -12549,53 +12531,50 @@
         \str_if_empty:NF \l__keys_property_str
           {
             \__kernel_msg_error:nnxx { kernel } { key-property-unknown }
-              { \l__keys_property_str } { \l_keys_path_str }
+              \l__keys_property_str \l_keys_path_str
           }
       }
   }
 \cs_new_protected:Npn \__keys_property_find:n #1
   {
-    \str_set:Nx \l__keys_property_str { \__keys_trim_spaces:n {#1} }
-    \exp_after:wN \__keys_property_find:w \l__keys_property_str . .
-      \s__keys_stop {#1}
+    \cs_set_nopar:Npx \l__keys_property_str { \__keys_trim_spaces:n { #1 } }
+    \exp_after:wN \__keys_property_find_auxi:w \l__keys_property_str
+      \s__keys_nil \__keys_property_find_auxii:w
+      . \s__keys_nil \__keys_property_find_err:w
   }
-\cs_new_protected:Npn \__keys_property_find:w #1 . #2 . #3 \s__keys_stop #4
+\cs_new_protected:Npn \__keys_property_find_auxi:w #1 . #2 \s__keys_nil #3
   {
-    \tl_if_blank:nTF {#3}
-      {
-        \str_clear:N \l__keys_property_str
-        \__kernel_msg_error:nnn { kernel } { key-no-property } {#4}
-      }
-      {
-        \str_if_eq:nnTF {#3} { . }
-          {
-            \str_set:Nx \l_keys_path_str
-              {
-                \str_if_empty:NF \l__keys_module_str
-                  { \l__keys_module_str  / }
-                \tl_trim_spaces:n {#1}
-              }
-            \str_set:Nn \l__keys_property_str { . #2 }
-          }
-          {
-            \str_set:Nx \l_keys_path_str { \l__keys_module_str / #1 . #2 }
-            \__keys_property_search:w #3 \s__keys_stop
-          }
-        \tl_set_eq:NN \l_keys_path_tl \l_keys_path_str
-      }
+    #3 #1 \s__keys_mark #2 \s__keys_nil #3
   }
-\cs_new_protected:Npn \__keys_property_search:w #1 . #2 \s__keys_stop
+\cs_new_protected:Npn \__keys_property_find_auxii:w
+    #1 \s__keys_mark #2 \s__keys_nil \__keys_property_find_auxii:w . \s__keys_nil
+    \__keys_property_find_err:w
   {
-    \str_if_eq:nnTF {#2} { . }
-      {
-        \str_set:Nx \l_keys_path_str { \l_keys_path_str }
-        \str_set:Nn \l__keys_property_str { . #1 }
-      }
-      {
-        \str_set:Nx \l_keys_path_str { \l_keys_path_str . #1 }
-        \__keys_property_search:w #2 \s__keys_stop
-      }
+    \cs_set_nopar:Npx \l_keys_path_str
+      { \str_if_empty:NF \l__keys_module_str { \l__keys_module_str / } #1 }
+    \__keys_property_find_auxi:w #2 \s__keys_nil \__keys_property_find_auxiii:w . \s__keys_nil
+      \__keys_property_find_auxiv:w
   }
+\cs_new_protected:Npn \__keys_property_find_auxiii:w #1 \s__keys_mark
+  {
+    \cs_set_nopar:Npx \l_keys_path_str { \l_keys_path_str . #1 }
+    \__keys_property_find_auxi:w
+  }
+\cs_new_protected:Npn \__keys_property_find_auxiv:w
+    #1 \s__keys_nil \__keys_property_find_auxiii:w
+    \s__keys_mark \s__keys_nil \__keys_property_find_auxiv:w
+  {
+    \cs_set_nopar:Npx \l__keys_property_str { . #1 }
+    \cs_set_nopar:Npx \l_keys_path_str
+      { \exp_after:wN \__keys_trim_spaces:n \exp_after:wN { \l_keys_path_str } }
+    \tl_set_eq:NN \l_keys_path_tl \l_keys_path_str
+  }
+\cs_new_protected:Npn \__keys_property_find_err:w
+    #1 \s__keys_nil #2 \__keys_property_find_err:w
+  {
+    \str_clear:N \l__keys_property_str
+    \__kernel_msg_error:nnn { kernel } { key-no-property } {#1}
+  }
 \cs_new_protected:Npn \__keys_define_code:n #1
   {
     \bool_if:NTF \l__keys_no_value_bool
@@ -12604,9 +12583,8 @@
           \l__keys_property_str \s__keys_stop
           { \use:c { \c__keys_props_root_str \l__keys_property_str } }
           {
-            \__kernel_msg_error:nnxx { kernel }
-              { key-property-requires-value } { \l__keys_property_str }
-              { \l_keys_path_str }
+            \__kernel_msg_error:nnxx { kernel } { key-property-requires-value }
+              \l__keys_property_str \l_keys_path_str
           }
       }
       { \use:c { \c__keys_props_root_str \l__keys_property_str } {#1} }
@@ -12625,7 +12603,7 @@
     \__keys_cmd_set:nn { \l_keys_path_str / unknown }
       {
         \__kernel_msg_error:nnx { kernel } { boolean-values-only }
-          { \l_keys_key_str }
+          \l_keys_key_str
       }
     \__keys_default_set:n { true }
   }
@@ -12641,7 +12619,7 @@
     \__keys_cmd_set:nn { \l_keys_path_str / unknown }
       {
         \__kernel_msg_error:nnx { kernel } { boolean-values-only }
-          { \l_keys_key_str }
+          \l_keys_key_str
       }
     \__keys_default_set:n { true }
   }
@@ -12660,7 +12638,7 @@
           { choice }
           {
             \__kernel_msg_error:nnxx { kernel } { nested-choice-key }
-              { \l_keys_path_tl } { \__keys_parent:o \l_keys_path_str }
+              \l_keys_path_tl { \__keys_parent:o \l_keys_path_str }
           }
           { \__keys_choice_make_aux:N #1 }
       }
@@ -12670,11 +12648,11 @@
   {
     \cs_set_nopar:cpn { \c__keys_type_root_str \l_keys_path_str }
       { choice }
-    \__keys_cmd_set:nn { \l_keys_path_str } { #1 {##1} }
+    \__keys_cmd_set:nn \l_keys_path_str { #1 {##1} }
     \__keys_cmd_set:nn { \l_keys_path_str / unknown }
       {
         \__kernel_msg_error:nnxx { kernel } { key-choice-unknown }
-          { \l_keys_path_str } {##1}
+          \l_keys_path_str {##1}
       }
   }
 \cs_new_protected:Npn \__keys_choices_make:nn
@@ -12748,7 +12726,8 @@
       { \__keys_execute_inherit: }
       {
         \str_clear:N \l__keys_inherit_str
-        \cs_if_exist_use:cT { \c__keys_code_root_str \l_keys_path_str } { {#1} }
+        \cs_if_exist:cT { \c__keys_code_root_str \l_keys_path_str }
+          { \__keys_execute:nn \l_keys_path_str {#1} }
       }
   }
 \cs_new_protected:Npn \__keys_meta_make:n #1
@@ -12755,8 +12734,7 @@
   {
     \__keys_cmd_set:Vo \l_keys_path_str
       {
-        \exp_after:wN \keys_set:nn
-        \exp_after:wN { \l__keys_module_str } {#1}
+        \exp_after:wN \keys_set:nn \exp_after:wN { \l__keys_module_str } {#1}
       }
   }
 \cs_new_protected:Npn \__keys_meta_make:nn #1#2
@@ -12764,11 +12742,9 @@
 \cs_new_protected:Npn \__keys_prop_put:Nn #1#2
   {
     \prop_if_exist:NF #1 { \prop_new:N #1 }
-    \exp_after:wN \__keys_find_key_module:NNw
-      \exp_after:wN \l__keys_tmpa_tl
-      \exp_after:wN \l__keys_tmpb_tl
-      \l_keys_path_str / \s__keys_stop
-    \__keys_cmd_set:nx { \l_keys_path_str }
+    \exp_after:wN \__keys_find_key_module:wNN \l_keys_path_str \s__keys_stop
+      \l__keys_tmpa_tl \l__keys_tmpb_tl
+    \__keys_cmd_set:nx \l_keys_path_str
       {
         \exp_not:c { prop_ #2 put:Nnn }
         \exp_not:N #1
@@ -12820,8 +12796,8 @@
     \bool_if:NF \l__keys_no_value_bool
       {
         \__kernel_msg_error:nnxx { kernel } { value-forbidden }
-          { \l_keys_path_str } { \l_keys_value_tl }
-        \__keys_validate_cleanup:w
+          \l_keys_path_str \l_keys_value_tl
+        \use_none:nnn
       }
   }
 \cs_new_protected:Npn \__keys_validate_required:
@@ -12829,15 +12805,14 @@
     \bool_if:NT \l__keys_no_value_bool
       {
         \__kernel_msg_error:nnx { kernel } { value-required }
-          { \l_keys_path_str }
-        \__keys_validate_cleanup:w
+          \l_keys_path_str
+        \use_none:nnn
       }
   }
-\cs_new_protected:Npn \__keys_validate_cleanup:w #1 \cs_end: #2#3 { }
 \cs_new_protected:Npn \__keys_variable_set:NnnN #1#2#3#4
   {
     \use:c { #2_if_exist:NF } #1 { \use:c { #2 _new:N } #1 }
-    \__keys_cmd_set:nx { \l_keys_path_str }
+    \__keys_cmd_set:nx \l_keys_path_str
       {
         \exp_not:c { #2 _ #3 set:N #4 }
         \exp_not:N #1
@@ -12878,7 +12853,7 @@
 \cs_new_protected:cpn { \c__keys_props_root_str .choices:xn } #1
   { \exp_args:Nx \__keys_choices_make:nn #1 }
 \cs_new_protected:cpn { \c__keys_props_root_str .code:n } #1
-  { \__keys_cmd_set:nn { \l_keys_path_str } {#1} }
+  { \__keys_cmd_set:nn \l_keys_path_str {#1} }
 \cs_new_protected:cpn { \c__keys_props_root_str .clist_set:N } #1
   { \__keys_variable_set:NnnN #1 { clist } { } n }
 \cs_new_protected:cpn { \c__keys_props_root_str .clist_set:c } #1
@@ -13039,7 +13014,7 @@
 \cs_new_protected:Npn \keys_set_known:nnN #1#2#3
   {
     \exp_args:No \__keys_set_known:nnnnN
-      \l__keys_unused_clist { \q__keys_no_value } {#1} {#2} #3
+      \l__keys_unused_clist \q__keys_no_value {#1} {#2} #3
   }
 \cs_generate_variant:Nn \keys_set_known:nnN { nV , nv , no }
 \cs_new_protected:Npn \keys_set_known:nnnN #1#2#3#4
@@ -13052,11 +13027,11 @@
   {
     \clist_clear:N \l__keys_unused_clist
     \__keys_set_known:nnn {#2} {#3} {#4}
-    \tl_set:Nx #5 { \exp_not:o { \l__keys_unused_clist } }
+    \tl_set:Nx #5 { \exp_not:o \l__keys_unused_clist }
     \tl_set:Nn \l__keys_unused_clist {#1}
   }
 \cs_new_protected:Npn \keys_set_known:nn #1#2
-  { \__keys_set_known:nnn { \q__keys_no_value } {#1} {#2} }
+  { \__keys_set_known:nnn \q__keys_no_value {#1} {#2} }
 \cs_generate_variant:Nn \keys_set_known:nn { nV , nv , no }
 \cs_new_protected:Npn \__keys_set_known:nnn #1#2#3
   {
@@ -13081,7 +13056,7 @@
   {
     \exp_args:No \__keys_set_filter:nnnnnN
       \l__keys_unused_clist
-        { \q__keys_no_value } {#1} {#2} {#3} #4
+        \q__keys_no_value {#1} {#2} {#3} #4
   }
 \cs_generate_variant:Nn \keys_set_filter:nnnN { nnV , nnv , nno }
 \cs_new_protected:Npn \keys_set_filter:nnnnN #1#2#3#4#5
@@ -13094,11 +13069,11 @@
   {
     \clist_clear:N \l__keys_unused_clist
     \__keys_set_filter:nnnn {#2} {#3} {#4} {#5}
-    \tl_set:Nx #6 { \exp_not:o { \l__keys_unused_clist } }
+    \tl_set:Nx #6 { \exp_not:o \l__keys_unused_clist }
     \tl_set:Nn \l__keys_unused_clist {#1}
   }
 \cs_new_protected:Npn \keys_set_filter:nnn #1#2#3
-  {\__keys_set_filter:nnnn { \q__keys_no_value } {#1} {#2} {#3} }
+  {\__keys_set_filter:nnnn \q__keys_no_value {#1} {#2} {#3} }
 \cs_generate_variant:Nn \keys_set_filter:nnn { nnV , nnv , nno }
 \cs_new_protected:Npn \__keys_set_filter:nnnn #1#2#3#4
   {
@@ -13168,31 +13143,42 @@
       }
     \str_clear:N \l__keys_module_str
     \str_clear:N \l__keys_inherit_str
-    \exp_after:wN \__keys_find_key_module:NNw
-      \exp_after:wN \l__keys_module_str
-      \exp_after:wN \l_keys_key_str
-      \l_keys_path_str / \s__keys_stop
+    \exp_after:wN \__keys_find_key_module:wNN \l_keys_path_str \s__keys_stop
+      \l__keys_module_str \l_keys_key_str
     \tl_set_eq:NN \l_keys_key_tl \l_keys_key_str
     \__keys_value_or_default:n {#3}
     \bool_if:NTF \l__keys_selective_bool
-      { \__keys_set_selective: }
-      { \__keys_execute: }
+      \__keys_set_selective:
+      \__keys_execute:
     \str_set:Nn \l__keys_module_str {#1}
   }
 \cs_generate_variant:Nn \__keys_set_keyval:nnn { o }
-\cs_new_protected:Npn \__keys_find_key_module:NNw #1#2#3 / #4 \s__keys_stop
+\cs_new_protected:Npn \__keys_find_key_module:wNN #1 \s__keys_stop #2 #3
   {
-    \tl_if_blank:nTF {#4}
-      { \str_set:Nn #2 {#3} }
-      {
-        \str_put_right:Nx #1
-          {
-            \str_if_empty:NF #1 { / }
-            #3
-          }
-        \__keys_find_key_module:NNw #1#2 #4 \s__keys_stop
-      }
+    \__keys_find_key_module_auxi:Nw #2 #1 \s__keys_nil \__keys_find_key_module_auxii:Nw
+      / \s__keys_nil \__keys_find_key_module_auxiv:Nw #3
   }
+\cs_new_protected:Npn \__keys_find_key_module_auxi:Nw #1 #2 / #3 \s__keys_nil #4
+  {
+    #4 #1 #2 \s__keys_mark #3 \s__keys_nil #4
+  }
+\cs_new_protected:Npn \__keys_find_key_module_auxii:Nw
+    #1 #2 \s__keys_mark #3 \s__keys_nil \__keys_find_key_module_auxii:Nw
+  {
+    \cs_set_nopar:Npx #1 { \tl_if_empty:NF #1 { #1 / } #2 }
+    \__keys_find_key_module_auxi:Nw #1 #3 \s__keys_nil \__keys_find_key_module_auxiii:Nw
+  }
+\cs_new_protected:Npn \__keys_find_key_module_auxiii:Nw #1 #2 \s__keys_mark
+  {
+    \cs_set_nopar:Npx #1 { \tl_if_empty:NF #1 { #1 / } #2 }
+    \__keys_find_key_module_auxi:Nw #1
+  }
+\cs_new_protected:Npn \__keys_find_key_module_auxiv:Nw
+    #1 #2 \s__keys_nil #3 \s__keys_mark
+    \s__keys_nil \__keys_find_key_module_auxiv:Nw #4
+  {
+    \cs_set_nopar:Npn #4 { #2 }
+  }
 \cs_new_protected:Npn \__keys_set_selective:
   {
     \cs_if_exist:cTF { \c__keys_groups_root_str \l_keys_path_str }
@@ -13203,8 +13189,8 @@
       }
       {
         \bool_if:NTF \l__keys_filtered_bool
-          { \__keys_execute: }
-          { \__keys_store_unused: }
+          \__keys_execute:
+          \__keys_store_unused:
       }
   }
 \cs_new_protected:Npn \__keys_check_groups:
@@ -13217,7 +13203,7 @@
             \str_if_eq:nnT {##1} {####1}
               {
                 \bool_set_true:N \l__keys_tmp_bool
-                \clist_map_break:n { \seq_map_break: }
+                \clist_map_break:n \seq_map_break:
               }
           }
       }
@@ -13224,13 +13210,13 @@
     \bool_if:NTF \l__keys_tmp_bool
       {
         \bool_if:NTF \l__keys_filtered_bool
-          { \__keys_store_unused: }
-          { \__keys_execute: }
+          \__keys_store_unused:
+          \__keys_execute:
       }
       {
         \bool_if:NTF \l__keys_filtered_bool
-          { \__keys_execute: }
-          { \__keys_store_unused: }
+          \__keys_execute:
+          \__keys_store_unused:
       }
   }
 \cs_new_protected:Npn \__keys_value_or_default:n #1
@@ -13272,8 +13258,7 @@
     \cs_if_exist:cTF { \c__keys_code_root_str \l_keys_path_str }
       {
         \cs_if_exist_use:c { \c__keys_validate_root_str \l_keys_path_str }
-        \cs:w \c__keys_code_root_str \l_keys_path_str \exp_after:wN \cs_end:
-          \exp_after:wN { \l_keys_value_tl }
+        \__keys_execute:no \l_keys_path_str \l_keys_value_tl
       }
       {
         \cs_if_exist:cTF
@@ -13292,10 +13277,8 @@
           {
             \str_set:Nn \l__keys_inherit_str {##1}
             \cs_if_exist_use:c { \c__keys_validate_root_str ##1 / \l_keys_key_str }
-            \cs:w \c__keys_code_root_str ##1 / \l_keys_key_str
-              \exp_after:wN \cs_end: \exp_after:wN
-              { \l_keys_value_tl }
-            \clist_map_break:n { \use_none:n }
+            \__keys_execute:no { ##1 / \l_keys_key_str } \l_keys_value_tl
+            \clist_map_break:n \use_none:n
           }
       }
     \__keys_execute_unknown:
@@ -13307,24 +13290,22 @@
       {
         \cs_if_exist:cTF
           { \c__keys_code_root_str \l__keys_module_str / unknown }
+          { \__keys_execute:no { \l__keys_module_str / unknown } \l_keys_value_tl }
           {
-            \cs:w \c__keys_code_root_str \l__keys_module_str / unknown
-              \exp_after:wN \cs_end: \exp_after:wN { \l_keys_value_tl }
-          }
-          {
             \__kernel_msg_error:nnxx { kernel } { key-unknown }
-              { \l_keys_path_str } { \l__keys_module_str }
+              \l_keys_path_str \l__keys_module_str
           }
       }
   }
 \cs_new:Npn \__keys_execute:nn #1#2
+  { \__keys_execute:no {#1} { \prg_do_nothing: #2 } }
+\cs_new:Npn \__keys_execute:no #1#2
   {
-    \cs_if_exist:cTF { \c__keys_code_root_str #1 }
+    \exp_args:NNo \exp_args:No \use:n
       {
         \cs:w \c__keys_code_root_str #1 \exp_after:wN \cs_end:
-          \exp_after:wN { \l_keys_value_tl }
+        \exp_after:wN {#2}
       }
-      {#2}
   }
 \cs_new_protected:Npn \__keys_store_unused:
   {
@@ -13332,7 +13313,7 @@
       {
         \clist_put_right:Nx \l__keys_unused_clist
           {
-            \exp_not:o \l_keys_key_str
+            \l_keys_key_str
             \bool_if:NF \l__keys_no_value_bool
               { = { \exp_not:o \l_keys_value_tl } }
           }
@@ -13342,7 +13323,7 @@
           {
             \clist_put_right:Nx \l__keys_unused_clist
               {
-                \exp_not:o \l_keys_path_str
+                \l_keys_path_str
                 \bool_if:NF \l__keys_no_value_bool
                   { = { \exp_not:o \l_keys_value_tl } }
               }
@@ -13386,7 +13367,7 @@
 \cs_new:Npn \__keys_choice_find:n #1
   {
     \str_if_empty:NTF \l__keys_inherit_str
-      { \__keys_choice_find:nn { \l_keys_path_str } {#1} }
+      { \__keys_choice_find:nn \l_keys_path_str {#1} }
       {
         \__keys_choice_find:nn
           { \l__keys_inherit_str / \l_keys_key_str } {#1}
@@ -13395,47 +13376,64 @@
 \cs_new:Npn \__keys_choice_find:nn #1#2
   {
     \cs_if_exist:cTF { \c__keys_code_root_str #1 / \__keys_trim_spaces:n {#2} }
-      { \use:c { \c__keys_code_root_str #1 / \__keys_trim_spaces:n {#2} } {#2} }
-      { \use:c { \c__keys_code_root_str #1 / unknown } {#2} }
+      { \__keys_execute:nn { #1 / \__keys_trim_spaces:n {#2} } {#2} }
+      { \__keys_execute:nn { #1 / unknown } {#2} }
   }
 \cs_new:Npn \__keys_multichoice_find:n #1
   { \clist_map_function:nN {#1} \__keys_choice_find:n }
-\cs_new:Npn \__keys_parent:n #1
-  { \__keys_parent:w #1 / / \s__keys_stop { } }
-\cs_generate_variant:Nn \__keys_parent:n { o }
-\cs_new:Npn \__keys_parent:w #1 / #2 / #3 \s__keys_stop #4
+\cs_new:Npn \__keys_parent:o #1
   {
-    \tl_if_blank:nTF {#2}
-      {
-        \tl_if_blank:nF {#4}
-          { \use_none:n #4 }
-      }
-      {
-        \__keys_parent:w #2 / #3 \s__keys_stop { #4 / #1 }
-      }
+    \exp_after:wN \__keys_parent_auxi:w #1 \q_nil \__keys_parent_auxii:w
+      / \q_nil \__keys_parent_auxiv:w
   }
-\cs_new:Npn \__keys_trim_spaces:n #1
+\cs_new:Npn \__keys_parent_auxi:w #1 / #2 \q_nil #3
   {
-    \exp_after:wN \__keys_trim_spaces_auxi:w \tl_to_str:n {#1}
-      / \q__keys_nil \s__keys_stop
+    #3 { #1 } #2 \q_nil #3
   }
-\cs_new:Npn \__keys_trim_spaces_auxi:w #1 / #2 \s__keys_stop
+\cs_new:Npn \__keys_parent_auxii:w #1 #2 \q_nil \__keys_parent_auxii:w
   {
-    \__keys_quark_if_nil:nTF {#2}
-      { \tl_trim_spaces:n {#1} }
-      { \__keys_trim_spaces_auxii:w #1 / #2 }
+    #1 \__keys_parent_auxi:w #2 \q_nil \__keys_parent_auxiii:n
   }
-\cs_new:Npn \__keys_trim_spaces_auxii:w #1 / #2 / \q__keys_nil
+\cs_new:Npn \__keys_parent_auxiii:n #1
   {
-    \tl_trim_spaces:n {#1}
-    \__keys_trim_spaces_auxiii:w #2 / \q__keys_recursion_tail / \q__keys_recursion_stop
+    / #1 \__keys_parent_auxi:w
   }
-\cs_set:Npn \__keys_trim_spaces_auxiii:w #1 /
+\cs_new:Npn \__keys_parent_auxiv:w #1 \q_nil \__keys_parent_auxiv:w
   {
-    \__keys_if_recursion_tail_stop:n {#1}
-    / \tl_trim_spaces:n { #1 }
-    \__keys_trim_spaces_auxiii:w
   }
+\group_begin:
+  \cs_set:Npn \__keys_tmp:n #1
+    {
+      \cs_new:Npn \__keys_trim_spaces:n ##1
+        {
+          \exp_after:wN \__keys_trim_spaces_auxi:w \tl_to_str:n { / ##1 } /
+            \s__keys_nil  \__keys_trim_spaces_auxi:w
+            \s__keys_mark \__keys_trim_spaces_auxii:w
+            #1 / #1
+            \s__keys_nil  \__keys_trim_spaces_auxii:w
+            \s__keys_mark \__keys_trim_spaces_auxiii:w
+        }
+    }
+  \__keys_tmp:n { ~ }
+\group_end:
+\cs_new:Npn \__keys_trim_spaces_auxi:w #1 ~ / #2 \s__keys_nil #3
+  {
+    #3 #1 / #2 \s__keys_nil #3
+  }
+\cs_new:Npn \__keys_trim_spaces_auxii:w #1 / ~ #2 \s__keys_mark #3
+  {
+    #3 #1 / #2 \s__keys_mark #3
+  }
+\cs_new:Npn \__keys_trim_spaces_auxiii:w
+    / #1 /
+    \s__keys_nil  \__keys_trim_spaces_auxi:w
+    \s__keys_mark \__keys_trim_spaces_auxii:w
+    /
+    \s__keys_nil  \__keys_trim_spaces_auxii:w
+    \s__keys_mark \__keys_trim_spaces_auxiii:w
+  {
+    #1
+  }
 \prg_new_conditional:Npnn \keys_if_exist:nn #1#2 { p , T , F , TF }
   {
     \cs_if_exist:cTF
@@ -20124,7 +20122,11 @@
         \__kernel_chk_if_free_cs:N #1
         \__cctab_new:N #1
       }
-    \cs_new_eq:NN \__cctab_new:N \newcatcodetable
+    \cs_new_protected:Npn \__cctab_new:N #1
+      {
+        \newcatcodetable #1
+        \tex_initcatcodetable:D #1
+      }
   }
   {
     \cs_new_protected:Npn \__cctab_new:N #1
@@ -20348,6 +20350,13 @@
       {
         \int_compare:nNnTF {#1-1} < { \e at alloc@ccodetable at count }
       }
+    \cs_if_exist:NT \c_syst_catcodes_n
+      {
+        \cs_gset_protected:Npn \__cctab_chk_if_valid_aux:NTF #1
+          {
+            \int_compare:nTF { #1 <= \c_syst_catcodes_n }
+          }
+      }
   }
   {
     \cs_new_protected:Npn \__cctab_chk_if_valid_aux:NTF #1
@@ -26538,7 +26547,7 @@
 \cs_new_protected:Npn \__color_select:N #1
   { \exp_after:wN \__color_select:nn #1 }
 \cs_new_protected:Npn \__color_select:nn #1#2
-  { \use:c { __color_backend_ #1 :n } {#2} }
+  { \use:c { __color_backend_select_ #1 :n } {#2} }
 \tl_new:N \l__color_current_tl
 \tl_set:Nn \l__color_current_tl { { gray } { 0 } }
 %% File: l3coffins.dtx
@@ -26673,8 +26682,7 @@
         #4 #1
           {
             \dim_set:Nn \tex_hsize:D {#2}
-            \dim_set_eq:NN \linewidth   \tex_hsize:D
-            \dim_set_eq:NN \columnwidth \tex_hsize:D
+            \__coffin_set_vertical_aux:
             #3
           }
         #5 #1
@@ -26692,6 +26700,13 @@
         \box_clear:N \l__coffin_internal_box
       }
   }
+\cs_new_protected:Npx \__coffin_set_vertical_aux:
+  {
+    \cs_if_exist:NT \linewidth
+      { \dim_set_eq:NN \linewidth \tex_hsize:D }
+    \cs_if_exist:NT \columnwidth
+      { \dim_set_eq:NN \columnwidth \tex_hsize:D }
+  }
 \cs_new_protected:Npn \hcoffin_set:Nw #1
   {
     \__coffin_if_exist:NT #1
@@ -26740,8 +26755,7 @@
       {
         #3 #1
           \dim_set:Nn \tex_hsize:D {#2}
-            \dim_set_eq:NN \linewidth   \tex_hsize:D
-            \dim_set_eq:NN \columnwidth \tex_hsize:D
+          \__coffin_set_vertical_aux:
           \cs_set_protected:Npn #4
             {
               #5
@@ -27571,15 +27585,42 @@
 \dim_new:N \l__coffin_display_y_dim
 \prop_new:N \l__coffin_display_poles_prop
 \tl_new:N  \l__coffin_display_font_tl
-\tl_set:Nn \l__coffin_display_font_tl { \sffamily \tiny }
-\cs_new_protected:Npn \__coffin_color:n #1
-  { \cs_if_exist:NT \color { \color {#1} } }
+\cs_if_exist:NTF \AtBeginDocument
+  { \AtBeginDocument }
+  { \use:n }
+  {
+    \tl_set:Nx \l__coffin_display_font_tl
+      {
+        \cs_if_exist:NT \sffamily { \exp_not:N \sffamily }
+        \cs_if_exist:NT \tiny { \exp_not:N \tiny }
+      }
+  }
+\cs_if_exist:NTF \AtBeginDocument
+  { \AtBeginDocument }
+  { \use:n }
+  {
+    \cs_new_protected:Npx \__coffin_color:n #1
+      {
+        \cs_if_exist:NTF \color_select:n
+          { \color_select:n {#1} }
+          {
+            \cs_if_exist:NT \color
+              { \exp_not:N \color {#1} }
+          }
+      }
+  }
+\cs_new_protected:Npx \__coffin_rule:nn #1#2
+  {
+    \cs_if_exist:NTF \rule
+      { \exp_not:N \rule {#1} {#2} }
+      { \hbox:n { \tex_vrule:D width #1 height #2 \scan_stop: } }
+  }
 \cs_new_protected:Npn \coffin_mark_handle:Nnnn #1#2#3#4
   {
     \hcoffin_set:Nn \l__coffin_display_pole_coffin
       {
         \__coffin_color:n {#4}
-        \rule { 1pt } { 1pt }
+        \__coffin_rule:nn { 1pt } { 1pt }
       }
     \__coffin_attach_mark:NnnNnnnn #1 {#2} {#3}
       \l__coffin_display_pole_coffin { hc } { vc } { 0pt } { 0pt }
@@ -27624,7 +27665,7 @@
     \hcoffin_set:Nn \l__coffin_display_pole_coffin
       {
         \__coffin_color:n {#2}
-        \rule { 1pt } { 1pt }
+        \__coffin_rule:nn { 1pt } { 1pt }
       }
     \prop_set_eq:Nc \l__coffin_display_poles_prop
       { coffin ~ \__coffin_to_value:N #1 ~ poles }

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2020-08-07 21:37:39 UTC (rev 56067)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2020-07-17}%
+\def\ExplFileDate{2020-08-07}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \def\tempa{LaTeX2e}%

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx	2020-08-07 21:37:39 UTC (rev 56067)
@@ -19,8 +19,10 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2020-07-17}%
+\def\ExplFileDate{2020-08-07}%
 \let\ExplLoaderFileDate\ExplFileDate
+\global\expandafter\let\csname\detokenize
+  {c__kernel_expl_date_tl}\endcsname\ExplFileDate
 \everyjob\expandafter{\the\everyjob
   \message{L3 programming layer <\ExplFileDate>}%
 }
@@ -58,6 +60,36 @@
 \expandafter\ifx\csname tex\string _let:D\endcsname\relax
   \expandafter\endinput
 \fi
+\ifcsname\detokenize{c__kernel_expl_date_tl}\endcsname
+  \expandafter\ifx\csname\detokenize
+      {c__kernel_expl_date_tl}\endcsname\ExplLoaderFileDate
+  \else
+    \ExplSyntaxOn
+    \__kernel_msg_set:nnn { kernel } { mismatched-expl3 }
+      {
+        Mismatched~expl3~detected!~Loading~expl3~will~abort.
+        \\ \\
+        The~version~of~expl3~preloaded~in~LaTeX~is~
+        \c__kernel_expl_date_tl,~but~the~version~of~expl3~you~are~
+        trying~to~load~is~dated~\ExplLoaderFileDate.~This~is~most~
+        likely~due~to~a~stray~format~file~in~the~user~tree.~Please~
+        make~sure~that~your~LaTeX~format~is~updated.
+      }
+    \exp_after:wN \ExplSyntaxOff \use:n
+      {
+        \__kernel_msg_critical:nn { kernel } { mismatched-expl3 }
+        \use:c { fi: } \use:c { fi: }
+      }
+  \fi
+\else
+  \ifodd\csname\detokenize{l__kernel_expl_bool}\endcsname
+  \else
+    \ExplSyntaxOn
+    \bool_if_exist:NF \g__expl_reload_bool
+      { \bool_new:N \g__expl_reload_bool }
+    \ExplSyntaxOff
+  \fi
+\fi
 \ifcsname\detokenize{g__expl_reload_bool}\endcsname
   \ExplSyntaxOn
   \bool_gset_true:N \g__expl_reload_bool

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2020-08-07 21:32:26 UTC (rev 56066)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2020-08-07 21:37:39 UTC (rev 56067)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2020-07-17}%
+\def\ExplFileDate{2020-08-07}%
 \let\ExplLoaderFileDate\ExplFileDate
 \ProvidesPackage{expl3}
   [%
@@ -60,6 +60,36 @@
 \expandafter\ifx\csname tex\string _let:D\endcsname\relax
   \expandafter\endinput
 \fi
+\ifcsname\detokenize{c__kernel_expl_date_tl}\endcsname
+  \expandafter\ifx\csname\detokenize
+      {c__kernel_expl_date_tl}\endcsname\ExplLoaderFileDate
+  \else
+    \ExplSyntaxOn
+    \__kernel_msg_set:nnn { kernel } { mismatched-expl3 }
+      {
+        Mismatched~expl3~detected!~Loading~expl3~will~abort.
+        \\ \\
+        The~version~of~expl3~preloaded~in~LaTeX~is~
+        \c__kernel_expl_date_tl,~but~the~version~of~expl3~you~are~
+        trying~to~load~is~dated~\ExplLoaderFileDate.~This~is~most~
+        likely~due~to~a~stray~format~file~in~the~user~tree.~Please~
+        make~sure~that~your~LaTeX~format~is~updated.
+      }
+    \exp_after:wN \ExplSyntaxOff \use:n
+      {
+        \__kernel_msg_critical:nn { kernel } { mismatched-expl3 }
+        \use:c { fi: } \use:c { fi: }
+      }
+  \fi
+\else
+  \ifodd\csname\detokenize{l__kernel_expl_bool}\endcsname
+  \else
+    \ExplSyntaxOn
+    \bool_if_exist:NF \g__expl_reload_bool
+      { \bool_new:N \g__expl_reload_bool }
+    \ExplSyntaxOff
+  \fi
+\fi
 \ifcsname\detokenize{g__expl_reload_bool}\endcsname
   \ExplSyntaxOn
   \bool_gset_true:N \g__expl_reload_bool



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