texlive[46013] Master/texmf-dist: l3experimental+l3build (7dec17)

commits+karl at tug.org commits+karl at tug.org
Fri Dec 8 00:16:27 CET 2017


Revision: 46013
          http://tug.org/svn/texlive?view=revision&revision=46013
Author:   karl
Date:     2017-12-08 00:16:26 +0100 (Fri, 08 Dec 2017)
Log Message:
-----------
l3experimental+l3build (7dec17)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/l3build/README.md
    trunk/Master/texmf-dist/doc/latex/l3build/l3build.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/README.md
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.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/source/latex/l3build/l3build.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins
    trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins
    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/l3experimental/xgalley/xgalley.ins
    trunk/Master/texmf-dist/tex/latex/l3build/l3build.lua
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.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

Modified: trunk/Master/texmf-dist/doc/latex/l3build/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3build/README.md	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/doc/latex/l3build/README.md	2017-12-07 23:16:26 UTC (rev 46013)
@@ -1,7 +1,7 @@
 l3build: a testing and building system for LaTeX3
 =================================================
 
-Release 2017/11/25
+Release 2017/12/06
 
 Overview
 --------

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

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3experimental/README.md	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/doc/latex/l3experimental/README.md	2017-12-07 23:16:26 UTC (rev 46013)
@@ -1,7 +1,7 @@
 Experimental LaTeX3 Concepts
 ============================
 
-Release 2017/11/14
+Release 2017/12/05
 
 Overview
 --------

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.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/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/source/latex/l3build/l3build.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3build/l3build.dtx	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/source/latex/l3build/l3build.dtx	2017-12-07 23:16:26 UTC (rev 46013)
@@ -50,71 +50,71 @@
 \newcommand\luavarseparator{}
 \makeatother
 \def\allluavars{
-\luavarset{module}{""}{The name of the module.}
-\luavarset{bundle}{""}{The name of the bundle in which the module belongs.}
-\luavarset{ctanpkg}{bundle}{Name of the bundle on CTAN}
+\luavarset{module}{""}{The name of the module}
+\luavarset{bundle}{""}{The name of the bundle in which the module belongs (where relevant)}
+\luavarset{ctanpkg}{module/bundle}{Name of the CTAN package matching this module}
 \luavarseparator
-\luavarset{modules}{\{~\}}{The list of all modules in a bundle (when not auto-detecting)}
-\luavarset{exclmodules}{\{~\}}{Directories to be excluded from automatic module detection}
+\luavarset{modules}{\{\}}{The list of all modules in a bundle (when not auto-detecting)}
+\luavarset{exclmodules}{\{\}}{Directories to be excluded from automatic module detection}
 \luavarseparator
-\luavarset{maindir}     {"."}{The top level directory for this module or bundle.}
-\luavarset{supportdir}  {maindir .. "/support"}     {Where copies of files to support check/doc compilation are stored.}
-\luavarset{testfiledir} {maindir .. "/testfiles"}   {Where the tests are.}
-\luavarset{testsuppdir} {testfiledir .. "/support"} {Where support files for the tests are.}
+\luavarset{maindir}    {"."}                      {Top level directory for the module/bundle}
+\luavarset{docfiledir} {maindir}                  {Directory containing documentation files}
+\luavarset{supportdir} {maindir .. "/support"}    {Directory containing general support files}
+\luavarset{testfiledir}{maindir .. "/testfiles"}  {Directory containing test files}
+\luavarset{testsuppdir}{testfiledir .. "/support"}{Directory containing test-specific support files}
 \luavarseparator
-\luavarset{localdir}   {maindir .. "/build/local"}  {Generated folder where support files are placed to allow \enquote{sandboxed} \TeX{} runs.}
-\luavarset{testdir}    {maindir .. "/build/test"}   {Generated folder where tests are run.}
-\luavarset{typesetdir} {maindir .. "/build/doc"}    {Generated folder where typesetting is run.}
-\luavarset{unpackdir}  {maindir .. "/build/unpack"} {Generated folder where unpacking occurs.}
-\luavarset{distribdir} {maindir .. "/build/distrib"}{Generated folder where the archive is created.}
-\luavarset{ctandir}    {distribdir .. "/ctan"}      {Generated folder where files are organised for CTAN.}
-\luavarset{tdsdir}     {distribdir .. "/tds"}       {Generated folder where files are organised for a TDS.}
-\luavarset{tdsroot}    {"latex"}{Root directory of the TDS structure for the bundle/module to be installed into.}
+\luavarset{distribdir}{maindir .. "/build/distrib"}{Directory for generating distribution structure}
+\luavarset{localdir}  {maindir .. "/build/local"}  {Directory for extracted files in \enquote{sandboxed} \TeX{} runs}
+\luavarset{testdir}   {maindir .. "/build/test"}   {Directory for running tests}
+\luavarset{typesetdir}{maindir .. "/build/doc"}    {Directory for building documentation}
+\luavarset{unpackdir} {maindir .. "/build/unpack"} {Directory for unpacking sources}
 \luavarseparator
-\luavarset{bibfiles}          {\{"*.bib"\}}{\BibTeX{} database files.}
-\luavarset{binaryfiles}       {\{"*.pdf", "*.zip"\}}
-                              {Files to be added in binary mode to zip files.}
-\luavarset{bstfiles}          {\{"*.bst"\}}{\BibTeX{} style files.}
+\luavarset{ctandir}{distribdir .. "/ctan"}{Directory for organising files for CTAN}
+\luavarset{tdsdir} {distribdir .. "/tds"} {Directory for organised files into TDS structure}
+\luavarset{tdsroot}{"latex"}{Root directory of the TDS structure for the bundle/module to be installed into}
+\luavarseparator
+\luavarset{bibfiles}          {\{"*.bib"\}}{\BibTeX{} database files}
+\luavarset{binaryfiles}       {\{"*.pdf", "*.zip"\}}{Files to be added in binary mode to zip files}
+\luavarset{bstfiles}          {\{"*.bst"\}}{\BibTeX{} style files}
 \luavarset{checkfiles}        {\{~\}}{Extra files unpacked purely for tests}
-\luavarset{checksuppfiles}    { }{Files needed for performing regression tests.}
-\luavarset{cmdchkfiles}       {\{~\}}{Files need to perform command checking (\cls{l3doc}-based documentation only).}
-\luavarset{cleanfiles}        {\{"*.log", "*.pdf", "*.zip"\}}{Files to delete when cleaning.}
-\luavarset{demofiles}         {\{~\}}{Files which show how to use a module.}
-\luavarset{docfiles}          {\{~\}}{Files which are part of the documentation but should not be typeset.}
-\luavarset{excludefiles}      {\{"*\string~"\}}            {Files to ignore entirely (default for Emacs backup files).}
-\luavarset{installfiles}      {\{"*.sty","*.cls"\}}         {Files to install to the \TeX{} tree and similar tasks.}
+\luavarset{checksuppfiles}    { }{Files needed for performing regression tests}
+\luavarset{cmdchkfiles}       {\{\}}{Files need to perform command checking (\cls{l3doc}-based documentation only)}
+\luavarset{cleanfiles}        {\{"*.log", "*.pdf", "*.zip"\}}{Files to delete when cleaning}
+\luavarset{demofiles}         {\{\}}{Files which show how to use a module}
+\luavarset{docfiles}          {\{\}}{Files which are part of the documentation but should not be typeset}
+\luavarset{excludefiles}      {\{"*\string~"\}}{Files to ignore entirely (default for Emacs backup files)}
+\luavarset{installfiles}      {\{"*.sty","*.cls"\}}{Files to install to the \TeX{} tree and similar task}
 \luavarset{makeindexfiles}    {\{"*.ist"\}}{MakeIndex files to be included in a TDS-style zip}
-\luavarset{sourcefiles}       {\{"*.dtx", "*.ins"\}}{Files to copy for unpacking.}
-\luavarset{textfiles}         {\{"*.md", "*.txt"\}}{Plain text files to send to CTAN as-is.}
-\luavarset{typesetdemofiles}  {\{~\}}       {Files to typeset before the documentation (as demos), but where the PDF results are not included in the release.}
-\luavarset{typesetfiles}      {\{"*.dtx"\}} {Files to typeset for documentation.}
-\luavarset{docfiledir}        {maindir}{Where to look for the |typesetfiles| and |typesetsourcefiles|.}
-\luavarset{typesetsuppfiles}  {\{~\}}       {Files needed to support typesetting when \enquote{sandboxed}.}
-\luavarset{typesetsourcefiles}{\{~\}}       {Files to copy to unpacking when typesetting.}
-\luavarset{unpackfiles}       {\{"*.ins"\}} {Files to run to perform unpacking.}
-\luavarset{unpacksuppfiles}   {\{~\}}       {Files needed to support unpacking when \enquote{sandboxed}.}
-\luavarset{versionfiles}      {\{"*.dtx"\}} {Files for automatic version editing.}
+\luavarset{sourcefiles}       {\{"*.dtx", "*.ins"\}}{Files to copy for unpacking}
+\luavarset{textfiles}         {\{"*.md", "*.txt"\}}{Plain text files to send to CTAN as-is}
+\luavarset{typesetdemofiles}  {\{\}}{Files to typeset before the documentation for inclusion in main documentation files}
+\luavarset{typesetfiles}      {\{"*.dtx"\}}{Files to typeset for documentation}
+\luavarset{typesetsuppfiles}  {\{\}}{Files needed to support typesetting when \enquote{sandboxed}}
+\luavarset{typesetsourcefiles}{\{\}}{Files to copy to unpacking when typesetting.}
+\luavarset{unpackfiles}       {\{"*.ins"\}}{Files to run to perform unpacking.}
+\luavarset{unpacksuppfiles}   {\{\}}{Files needed to support unpacking when \enquote{sandboxed}}
+\luavarset{versionfiles}      {\{"*.dtx"\}}{Files for automatic version editing}
 \luavarseparator
-\luavarset{bakext} {".bak"} {Extension of backup files.}
-\luavarset{dviext} {".dvi"} {Extension of DVI files.}
-\luavarset{lvtext} {".lvt"} {Extension of test files.}
-\luavarset{tlgext} {".tlg"} {Extension of test file output.}
-\luavarset{lveext} {".lve"} {Extension of auto-generating test file output.}
-\luavarset{logext} {".log"} {Extension of checking output, before processing it into a \texttt{.tlg}.}
-\luavarset{pdfext} {".pdf"} {Extension of PDF file for checking and saving.}
-\luavarset{psext}  {".ps"}  {Extension of PostScript files.}
+\luavarset{bakext}{".bak"}{Extension of backup files}
+\luavarset{dviext}{".dvi"}{Extension of DVI files}
+\luavarset{lvtext}{".lvt"}{Extension of test files}
+\luavarset{tlgext}{".tlg"}{Extension of test file output}
+\luavarset{lveext}{".lve"}{Extension of auto-generating test file output}
+\luavarset{logext}{".log"}{Extension of checking output, before processing it into a \texttt{.tlg}}
+\luavarset{pdfext}{".pdf"}{Extension of PDF file for checking and saving}
+\luavarset{psext} {".ps"} {Extension of PostScript files}
 \luavarseparator
-\luavarset{checkdeps}   {\{~\}} {List of build unpack dependencies for checking.}
-\luavarset{typesetdeps} {\{~\}} {\dots for typesetting docs.}
-\luavarset{unpackdeps}  {\{~\}} {\dots for unpacking.}
+\luavarset{checkdeps}  {\{\}}{List of dependencies for running checks}
+\luavarset{typesetdeps}{\{\}}{List of dependencies for typesetting docs}
+\luavarset{unpackdeps} {\{\}}{List of dependencies for unpacking}
 \luavarseparator
-\luavarset{checkengines}{\{"pdftex", "xetex", "luatex"\}} {Engines to check with \texttt{check} by default.}
-\luavarset{stdengine}    {"pdftex"} {Engine to generate \texttt{.tlg} file from.}
-\luavarset{checkformat}  {"latex"} {Format to use for tests.}
+\luavarset{checkengines}{\{"pdftex", "xetex", "luatex"\}}{Engines to check with \texttt{check} by default}
+\luavarset{stdengine}    {"pdftex"}{Engine to generate \texttt{.tlg} file from}
+\luavarset{checkformat}  {"latex"} {Format to use for tests}
 \luavarseparator
-\luavarset{typesetexe} {"pdflatex"} {Executable for compiling \texttt{doc(s)}.}
-\luavarset{unpackexe}  {"tex"}      {Executable for running \texttt{unpack}.}
-\luavarset{zipexe}     {"zip"}      {Executable for creating archive with \texttt{ctan}.}
+\luavarset{typesetexe}{"pdflatex"}{Executable for compiling \texttt{doc(s)}}
+\luavarset{unpackexe} {"tex"}     {Executable for running \texttt{unpack}}
+\luavarset{zipexe}    {"zip"}     {Executable for creating archive with \texttt{ctan}}
 \luavarseparator
 \luavarset{checkopts}  {"-interaction=nonstopmode"}{Options based to engine when running checks.}
 \luavarset{cmdchkopts} {"-interaction=batchmode"}  {Options based to engine when running command checks.}
@@ -122,9 +122,9 @@
 \luavarset{unpackopts} {""}                        {Options based to engine when unpacking.}
 \luavarset{zipopts}    {"-v -r -X"}                {Options based to zip program.}
 \luavarseparator
-\luavarset{checksearch}  {true}  {Look in \texttt{tds} dirs for checking?}
-\luavarset{typesetsearch}{true}  {Look in \texttt{tds} dirs for typesetting docs?}
-\luavarset{unpacksearch} {true}  {Look in \texttt{tds} dirs for unpacking?}
+\luavarset{checksearch}  {true}{Switch to search the system \texttt{texmf} for during checking}
+\luavarset{typesetsearch}{true}{Switch to search the system \texttt{texmf} for during typesetting}
+\luavarset{unpacksearch} {true}{Switch to search the system \texttt{texmf} for during unpacking}
 \luavarseparator
 \luavarset{glossarystyle}{"gglo.ist"}{MakeIndex style file for glossary/changes creation}
 \luavarset{indexstyle}   {"gind.ist"}{MakeIndex style for index creation}
@@ -141,14 +141,15 @@
 \luavarset{forcedocepoch}  {"false"}   {Force epoch when typesetting}
 \luavarseparator
 \luavarset{asciiengines}{\{"pdftex"\}}{Engines which should log as sure ASCII}
-\luavarset{checkruns}   {1}           {How many times to run a check file before comparing the log.}
-\luavarset{epoch}       {1463734800}  {Epoch (Unix date) to set for test runs.}
-\luavarset{maxprintline}{79}          {Length of line to use in log files.}
-\luavarset{packtdszip}  {false}       {Build a TDS-style zip file for CTAN?}
-\luavarset{scriptname}  {"build.lua"} {Name of script used in dependencies.}
+\luavarset{checkruns}   {1}           {Number of runs to complete for a test before comparing the log}
+\luavarset{epoch}       {1463734800}  {Epoch (Unix date) to set for test runs}
+\luavarset{maxprintline}{79}          {Length of line to use in log files}
+\luavarset{packtdszip}  {false}       {Switch to build a TDS-style zip file for CTAN}
+\luavarset{scriptname}  {"build.lua"} {Name of script used in dependencies}
 \luavarset{typesetcmds} {""}          {Instructions to be passed to \TeX{} when doing typesetting.}
+\luavarset{typsetcycles}{3}           {Number of cycles of typesetting to carry out.}
 \luavarset{versionform} {""}          {Nature of version strings for auto-replacement.}
-\luavarset{recordstatus} {false}      {Include error level(s) from test run(s) in TLG files?}
+\luavarset{recordstatus}{false}       {Switch to include error level from test runs in \texttt{.tlg} files}
 }
 \allluavars
 \newcommand\luavartypeset{%
@@ -208,7 +209,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2017/11/25}
+% \date{Released 2017/12/06}
 %
 % \maketitle
 % \tableofcontents
@@ -708,6 +709,11 @@
 %     years due to a \TeX{} bug).
 %   \item Conversion of \texttt{on line \meta{number}} to \texttt{on line ...}
 %     to allow flexibility in changes to test files.
+%   \item Conversion of register numbers in assignment lines
+%     \texttt{\cs{\meta{register}}=\cs{\meta{type}}\meta{number}} to
+%     \texttt{\cs{\meta{type}}\meta{...}}
+%   \item Conversion of box numbers in |\show| lines
+%     \texttt{>~\cs{box}\meta{number}=} to \texttt{>~\cs{box}...=}
 % \end{itemize}
 %
 % \LuaTeX{} makes several additional changes to the log file. As normalising

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx	2017-12-07 23:16:26 UTC (rev 46013)
@@ -7,7 +7,7 @@
 % license or (at your option) any later version.  The latest version
 % of this license is in the file
 %
-%    http://www.latex-project.org/lppl.txt
+%    https://www.latex-project.org/lppl.txt
 %
 % This file is part of the "l3experimental bundle" (The Work in LPPL)
 % and all files in that bundle must be distributed together.
@@ -47,7 +47,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2017/11/14}
+% \date{Released 2017/12/05}
 %
 % \maketitle
 %
@@ -252,7 +252,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{l3str-convert}{2017/11/14}{}
+\ProvidesExplPackage{l3str-convert}{2017/12/05}{}
   {L3 Experimental string encoding conversions}
 %    \end{macrocode}
 %
@@ -260,7 +260,7 @@
 %
 % \subsubsection{A function unrelated to strings}
 %
-% \begin{macro}[EXP,aux]{\use_ii_i:nn}
+% \begin{macro}[EXP]{\use_ii_i:nn}
 %   A function used to swap its arguments.
 %    \begin{macrocode}
 \cs_if_exist:NF \use_ii_i:nn
@@ -356,8 +356,8 @@
 %
 % \begin{macro}[EXP]{\@@_if_contains_char:NNT, \@@_if_contains_char:NNTF}
 % \begin{macro}[EXP]{\@@_if_contains_char:nNTF}
-% \begin{macro}[EXP,aux]{\@@_if_contains_char_aux:NN}
-% \begin{macro}[EXP,aux]{\@@_if_contains_char_true:}
+% \begin{macro}[EXP]{\@@_if_contains_char_aux:NN}
+% \begin{macro}[EXP]{\@@_if_contains_char_true:}
 %   \begin{syntax}
 %     \cs{@@_if_contains_char:nNTF} \Arg{token list} \meta{char}
 %   \end{syntax}
@@ -396,7 +396,7 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[aux, rEXP]{\@@_octal_use:NTF}
+% \begin{macro}[rEXP]{\@@_octal_use:NTF}
 %   \begin{syntax}
 %     \cs{@@_octal_use:NTF} \meta{token} \Arg{true code} \Arg{false code}
 %   \end{syntax}
@@ -424,7 +424,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, rEXP]{\@@_hexadecimal_use:NTF}
+% \begin{macro}[rEXP]{\@@_hexadecimal_use:NTF}
 %   \TeX{} detects uppercase hexadecimal digits for us (see
 %   \cs{@@_octal_use:NTF}), but not the lowercase letters, which we
 %   need to detect and replace by their uppercase counterpart.
@@ -482,11 +482,11 @@
 % \end{variable}
 % \end{variable}
 %
-% \begin{macro}[int, EXP]{\@@_output_byte:n}
-% \begin{macro}[int, EXP]{\@@_output_byte:w}
-% \begin{macro}[int, EXP]{\@@_output_hexadecimal:n}
-% \begin{macro}[int, EXP]{\@@_output_hexadecimal:w}
-% \begin{macro}[int, EXP]{\@@_output_end:}
+% \begin{macro}[EXP]{\@@_output_byte:n}
+% \begin{macro}[EXP]{\@@_output_byte:w}
+% \begin{macro}[EXP]{\@@_output_hexadecimal:n}
+% \begin{macro}[EXP]{\@@_output_hexadecimal:w}
+% \begin{macro}[EXP]{\@@_output_end:}
 %   Those functions must be used carefully: feeding them a value outside
 %   the range $[-1,255]$ will attempt to use the undefined token list
 %   variable \cs{c_@@_byte_\meta{number}_tl}. Assuming that the
@@ -520,9 +520,9 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int, rEXP]{\@@_output_byte_pair_be:n}
-% \begin{macro}[int, rEXP]{\@@_output_byte_pair_le:n}
-% \begin{macro}[aux, rEXP]{\@@_output_byte_pair:nnN}
+% \begin{macro}[rEXP]{\@@_output_byte_pair_be:n}
+% \begin{macro}[rEXP]{\@@_output_byte_pair_le:n}
+% \begin{macro}[rEXP]{\@@_output_byte_pair:nnN}
 %   Convert a number in the range $[0,65535]$ to a pair of bytes, either
 %   big-endian or little-endian.
 %    \begin{macrocode}
@@ -550,7 +550,7 @@
 % \subsubsection{Mapping functions for conversions}
 %
 % \begin{macro}{\@@_convert_gmap:N}
-% \begin{macro}[aux, rEXP]{\@@_convert_gmap_loop:NN}
+% \begin{macro}[rEXP]{\@@_convert_gmap_loop:NN}
 %   This maps the function |#1| over all characters in
 %   \cs{g_@@_result_tl}, which should be a byte string in most cases,
 %   sometimes a native string.
@@ -576,7 +576,7 @@
 % \end{macro}
 %
 % \begin{macro}{\@@_convert_gmap_internal:N}
-% \begin{macro}[aux, rEXP]{\@@_convert_gmap_internal_loop:Nw}
+% \begin{macro}[rEXP]{\@@_convert_gmap_internal_loop:Nw}
 %   This maps the function |#1| over all character codes in
 %   \cs{g_@@_result_tl}, which must be in the internal representation.
 %    \begin{macrocode}
@@ -602,8 +602,8 @@
 %
 % \subsubsection{Error-reporting during conversion}
 %
-% \begin{macro}[int]{\@@_if_flag_error:nnx}
-% \begin{macro}[aux]{\@@_if_flag_no_error:nnx}
+% \begin{macro}{\@@_if_flag_error:nnx}
+% \begin{macro}{\@@_if_flag_no_error:nnx}
 %   When converting using the function \cs{str_set_convert:Nnnn}, errors
 %   should be reported to the user after each step in the
 %   conversion. Errors are signalled by raising some flag (typically
@@ -626,7 +626,7 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int, rEXP]{\@@_if_flag_times:nT}
+% \begin{macro}[rEXP]{\@@_if_flag_times:nT}
 %   At the end of each conversion step, we raise all relevant errors as
 %   one error message, built on the fly. The height of each flag
 %   indicates how many times a given error was encountered. This
@@ -673,7 +673,7 @@
 %
 % \begin{macro}{\str_set_convert:Nnnn, \str_gset_convert:Nnnn}
 % \begin{macro}[TF]{\str_set_convert:Nnnn, \str_gset_convert:Nnnn}
-% \begin{macro}[aux]{\@@_convert:nNNnnn}
+% \begin{macro}{\@@_convert:nNNnnn}
 %   The input string is stored in \cs{g_@@_result_tl}, then we:
 %   unescape and decode; encode and escape; exit the group and store the
 %   result in the user's variable. The various conversion functions all
@@ -725,8 +725,8 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[aux]{\@@_convert:wwwnn}
-% \begin{macro}[aux]{\@@_convert:NNnNN}
+% \begin{macro}{\@@_convert:wwwnn}
+% \begin{macro}{\@@_convert:NNnNN}
 %   The task of \cs{@@_convert:wwwnn} is to split
 %   \meta{encoding}/\meta{escaping} pairs into their components, |#1|
 %   and |#2|. Calls to \cs{@@_convert:nnn} ensure that the
@@ -771,8 +771,8 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[aux]{\@@_convert:nnn}
-% \begin{macro}[aux]{\@@_convert:nnnn}
+% \begin{macro}{\@@_convert:nnn}
+% \begin{macro}{\@@_convert:nnnn}
 %   The arguments of \cs{@@_convert:nnn} are: \texttt{enc} or
 %   \texttt{esc}, used to build filenames, the type of the conversion
 %   (unescape, decode, encode, escape), and the encoding or escaping
@@ -848,8 +848,8 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int, rEXP]{\@@_convert_lowercase_alphanum:n}
-% \begin{macro}[aux, rEXP]{\@@_convert_lowercase_alphanum_loop:N}
+% \begin{macro}[rEXP]{\@@_convert_lowercase_alphanum:n}
+% \begin{macro}[rEXP]{\@@_convert_lowercase_alphanum_loop:N}
 %   This function keeps only letters and digits, with upper case letters
 %   converted to lower case.
 %    \begin{macrocode}
@@ -883,7 +883,7 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_load_catcodes:}
+% \begin{macro}{\@@_load_catcodes:}
 %   Since encoding files may be loaded at arbitrary places in a \TeX{}
 %   document, including within verbatim mode, we set the catcodes of all
 %   characters appearing in any encoding definition file.
@@ -916,8 +916,8 @@
 % needed. By default, on input any non-byte is filtered out, while the
 % output simply consists in letting bytes through.
 %
-% \begin{macro}[int, rEXP]{\@@_filter_bytes:n}
-% \begin{macro}[aux, rEXP]{\@@_filter_bytes_aux:N}
+% \begin{macro}[rEXP]{\@@_filter_bytes:n}
+% \begin{macro}[rEXP]{\@@_filter_bytes_aux:N}
 %   In the case of 8-bit engines, every character is a byte.  For
 %   Unicode-aware engines, test the character code; non-bytes cause us
 %   to raise the flag \texttt{str_byte}.  Spaces have already been given
@@ -951,8 +951,8 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_convert_unescape_:}
-% \begin{macro}[int]{\@@_convert_unescape_bytes:}
+% \begin{macro}{\@@_convert_unescape_:}
+% \begin{macro}{\@@_convert_unescape_bytes:}
 %   The simplest unescaping method removes non-bytes from
 %   \cs{g_@@_result_tl}.
 %    \begin{macrocode}
@@ -976,8 +976,8 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_convert_escape_:}
-% \begin{macro}[int]{\@@_convert_escape_bytes:}
+% \begin{macro}{\@@_convert_escape_:}
+% \begin{macro}{\@@_convert_escape_bytes:}
 %   The simplest form of escape leaves the bytes from the previous step
 %   of the conversion unchanged.
 %    \begin{macrocode}
@@ -989,8 +989,8 @@
 %
 % \subsubsection{Native strings}
 %
-% \begin{macro}[int]{\@@_convert_decode_:}
-% \begin{macro}[aux, rEXP]{\@@_decode_native_char:N}
+% \begin{macro}{\@@_convert_decode_:}
+% \begin{macro}[rEXP]{\@@_decode_native_char:N}
 %   Convert each character to its character code, one at a time.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_convert_decode_:
@@ -1001,7 +1001,7 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_convert_encode_:}
+% \begin{macro}{\@@_convert_encode_:}
 %   The conversion from an internal string to native character tokens is
 %   very different in pdf\TeX{} and in other engines. For Unicode-aware
 %   engines, we need the definitions to be read when the null byte has
@@ -1015,9 +1015,9 @@
       \sys_if_engine_xetex_p:
     }
 %    \end{macrocode}
-% \begin{macro}[aux]{\@@_encode_native_loop:w}
-% \begin{macro}[aux]{\@@_encode_native_flush:}
-% \begin{macro}[aux, rEXP]{\@@_encode_native_filter:N}
+% \begin{macro}{\@@_encode_native_loop:w}
+% \begin{macro}{\@@_encode_native_flush:}
+% \begin{macro}[rEXP]{\@@_encode_native_filter:N}
 %   In Unicode-aware engines, since building particular characters
 %   cannot be done expandably in \TeX{}, we cannot hope to get a
 %   linear-time function. However, we get quite close using the
@@ -1049,7 +1049,7 @@
         }
     }
 %    \end{macrocode}
-% \begin{macro}[aux, EXP]{\@@_encode_native_char:n}
+% \begin{macro}[EXP]{\@@_encode_native_char:n}
 %   Since pdf\TeX{} only supports 8-bit characters, and we have a table
 %   of all bytes, the conversion can be done in linear time within an
 %   \texttt{x}-expanding assignment. Look out for character codes larger
@@ -1094,8 +1094,8 @@
 %
 % \subsubsection{\texttt{clist}}
 %
-% \begin{macro}[int]{\@@_convert_decode_clist:}
-% \begin{macro}[aux, rEXP]{\@@_decode_clist_char:n}
+% \begin{macro}{\@@_convert_decode_clist:}
+% \begin{macro}[rEXP]{\@@_decode_clist_char:n}
 %   Convert each integer to the internal form.  We first turn
 %   \cs{g_@@_result_tl} into a clist variable, as this avoids problems
 %   with leading or trailing commas.
@@ -1102,7 +1102,7 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_convert_decode_clist:
   {
-    \clist_set:No \g_@@_result_tl \g_@@_result_tl
+    \clist_gset:No \g_@@_result_tl \g_@@_result_tl
     \tl_gset:Nx \g_@@_result_tl
       {
         \exp_args:No \clist_map_function:nN
@@ -1115,8 +1115,8 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_convert_encode_clist:}
-% \begin{macro}[aux, rEXP]{\@@_encode_clist_char:n}
+% \begin{macro}{\@@_convert_encode_clist:}
+% \begin{macro}[rEXP]{\@@_encode_clist_char:n}
 %   Convert the internal list of character codes to a comma-list of
 %   character codes.  The first line produces a comma-list with a
 %   leading comma, removed in the next step (this also works in the
@@ -1151,7 +1151,7 @@
 % All the 8-bit encodings which \pkg{l3str} supports rely on the same
 % internal functions.
 %
-% \begin{macro}[int]{\@@_declare_eight_bit_encoding:nnn}
+% \begin{macro}{\@@_declare_eight_bit_encoding:nnn}
 %   \begin{syntax}
 %     \cs{@@_declare_eight_bit_encoding:nnn} \Arg{name} \Arg{mapping} \Arg{missing}
 %   \end{syntax}
@@ -1183,10 +1183,10 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_convert_decode_eight_bit:n}
-% \begin{macro}[aux]{\@@_decode_eight_bit_load:nn}
-% \begin{macro}[aux]{\@@_decode_eight_bit_load_missing:n}
-% \begin{macro}[aux, EXP]{\@@_decode_eight_bit_char:N}
+% \begin{macro}{\@@_convert_decode_eight_bit:n}
+% \begin{macro}{\@@_decode_eight_bit_load:nn}
+% \begin{macro}{\@@_decode_eight_bit_load_missing:n}
+% \begin{macro}[EXP]{\@@_decode_eight_bit_char:N}
 %^^A todo: document
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_convert_decode_eight_bit:n #1
@@ -1241,10 +1241,10 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_convert_encode_eight_bit:n}
-% \begin{macro}[aux]{\@@_encode_eight_bit_load:nn}
-% \begin{macro}[aux, rEXP]{\@@_encode_eight_bit_char:n}
-% \begin{macro}[aux, rEXP]{\@@_encode_eight_bit_char_aux:n}
+% \begin{macro}{\@@_convert_encode_eight_bit:n}
+% \begin{macro}{\@@_encode_eight_bit_load:nn}
+% \begin{macro}[rEXP]{\@@_encode_eight_bit_char:n}
+% \begin{macro}[rEXP]{\@@_encode_eight_bit_char_aux:n}
 %^^A todo: document
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_convert_encode_eight_bit:n #1
@@ -1385,9 +1385,9 @@
 %
 % \subsubsection{Unescape methods}
 %
-% \begin{macro}[int]{\@@_convert_unescape_hex:}
-% \begin{macro}[aux, rEXP]{\@@_unescape_hex_auxi:N}
-% \begin{macro}[aux, rEXP]{\@@_unescape_hex_auxii:N}
+% \begin{macro}{\@@_convert_unescape_hex:}
+% \begin{macro}[rEXP]{\@@_unescape_hex_auxi:N}
+% \begin{macro}[rEXP]{\@@_unescape_hex_auxii:N}
 %   Take chars two by two, and interpret each pair as the hexadecimal
 %   code for a byte. Anything else than hexadecimal digits is ignored,
 %   raising the flag.  A string which contains an odd number of
@@ -1447,10 +1447,10 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_convert_unescape_name:}
-% \begin{macro}[aux, rEXP]{\@@_unescape_name_loop:wNN}
-% \begin{macro}[int]{\@@_convert_unescape_url:}
-% \begin{macro}[aux, rEXP]{\@@_unescape_url_loop:wNN}
+% \begin{macro}{\@@_convert_unescape_name:}
+% \begin{macro}[rEXP]{\@@_unescape_name_loop:wNN}
+% \begin{macro}{\@@_convert_unescape_url:}
+% \begin{macro}[rEXP]{\@@_unescape_url_loop:wNN}
 %   The \cs{@@_convert_unescape_name:} function replaces each
 %   occurrence of |#| followed by two hexadecimal digits in
 %   \cs{g_@@_result_tl} by the corresponding byte.  The \texttt{url}
@@ -1534,10 +1534,10 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_convert_unescape_string:}
-% \begin{macro}[aux, rEXP]{\@@_unescape_string_newlines:wN}
-% \begin{macro}[aux, rEXP]{\@@_unescape_string_loop:wNNN}
-% \begin{macro}[aux, rEXP]{\@@_unescape_string_repeat:NNNNNN}
+% \begin{macro}{\@@_convert_unescape_string:}
+% \begin{macro}[rEXP]{\@@_unescape_string_newlines:wN}
+% \begin{macro}[rEXP]{\@@_unescape_string_loop:wNNN}
+% \begin{macro}[rEXP]{\@@_unescape_string_repeat:NNNNNN}
 %   The \texttt{string} escaping is somewhat similar to the
 %   \texttt{name} and \texttt{url} escapings, with escape character |\|.
 %   The first step is to convert all three line endings, |^^J|, |^^M|,
@@ -1560,14 +1560,12 @@
 %   If followed by an end-of-line character, the backslash and the
 %   end-of-line are ignored. If followed by anything else, the backslash
 %   is ignored, raising the error flag.
-%^^A Be paranoid: \tex_lowercase:D is unsafe.
 %    \begin{macrocode}
 %<*string>
 \group_begin:
-  \char_set_lccode:nn {`\*} {`\\}
   \char_set_catcode_other:N \^^J
   \char_set_catcode_other:N \^^M
-  \tex_lowercase:D
+  \cs_set_protected:Npn \@@_tmp:w #1
     {
       \cs_new_protected:Npn \@@_convert_unescape_string:
         {
@@ -1584,7 +1582,7 @@
             \tl_gset:Nx \g_@@_result_tl
               {
                 \exp_after:wN \@@_unescape_string_loop:wNNN
-                  \g_@@_result_tl * ?? { ? \__prg_break: }
+                  \g_@@_result_tl #1 ?? { ? \__prg_break: }
                 \__prg_break_point:
               }
             \@@_if_flag_error:nnx { str_byte } { non-byte } { string }
@@ -1591,8 +1589,10 @@
             \@@_if_flag_error:nnx { str_error } { unescape-string } { }
           \group_end:
         }
-      \cs_new:Npn \@@_unescape_string_loop:wNNN #1 *#2#3#4
     }
+  \exp_args:No \@@_tmp:w { \c_backslash_str }
+  \exp_last_unbraced:NNNNo
+    \cs_new:Npn \@@_unescape_string_loop:wNNN #1 \c_backslash_str #2#3#4
         {
           \@@_filter_bytes:n {#1}
           \use_none:n #4
@@ -1662,8 +1662,8 @@
 % Currently, none of the escape methods can lead to errors, assuming
 % that their input is made out of bytes.
 %
-% \begin{macro}[int]{\@@_convert_escape_hex:}
-% \begin{macro}[aux, rEXP]{\@@_escape_hex_char:N}
+% \begin{macro}{\@@_convert_escape_hex:}
+% \begin{macro}[rEXP]{\@@_escape_hex_char:N}
 %   Loop and convert each byte to hexadecimal.
 %    \begin{macrocode}
 %<*hex>
@@ -1676,9 +1676,9 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_convert_escape_name:}
-% \begin{macro}[aux, rEXP]{\@@_escape_name_char:N}
-% \begin{macro}[aux, rEXP]{\@@_if_escape_name:NTF}
+% \begin{macro}{\@@_convert_escape_name:}
+% \begin{macro}[rEXP]{\@@_escape_name_char:N}
+% \begin{macro}[rEXP]{\@@_if_escape_name:NTF}
 % \begin{variable}{\c_@@_escape_name_str}
 % \begin{variable}{\c_@@_escape_name_not_str}
 %   For each byte, test whether it should be output as is, or be
@@ -1720,9 +1720,9 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_convert_escape_string:}
-% \begin{macro}[aux, rEXP]{\@@_escape_string_char:N}
-% \begin{macro}[aux, rEXP]{\@@_if_escape_string:NTF}
+% \begin{macro}{\@@_convert_escape_string:}
+% \begin{macro}[rEXP]{\@@_escape_string_char:N}
+% \begin{macro}[rEXP]{\@@_if_escape_string:NTF}
 % \begin{variable}{\c_@@_escape_string_str}
 %   Any character below (and including) space, and any character above
 %   (and including) \texttt{del}, are converted to octal.  One backslash
@@ -1768,9 +1768,9 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_convert_escape_url:}
-% \begin{macro}[aux, rEXP]{\@@_escape_url_char:N}
-% \begin{macro}[aux, rEXP]{\@@_if_escape_url:NTF}
+% \begin{macro}{\@@_convert_escape_url:}
+% \begin{macro}[rEXP]{\@@_escape_url_char:N}
+% \begin{macro}[rEXP]{\@@_if_escape_url:NTF}
 %   This function is similar to \cs{@@_convert_escape_name:}, escaping
 %   different characters.
 %    \begin{macrocode}
@@ -1820,9 +1820,9 @@
 %<*utf8>
 %    \end{macrocode}
 %
-% \begin{macro}[int]{\@@_convert_encode_utf8:}
-% \begin{macro}[aux, rEXP]{\@@_encode_utf_viii_char:n}
-% \begin{macro}[aux, rEXP]{\@@_encode_utf_viii_loop:wwnnw}
+% \begin{macro}{\@@_convert_encode_utf8:}
+% \begin{macro}[rEXP]{\@@_encode_utf_viii_char:n}
+% \begin{macro}[rEXP]{\@@_encode_utf_viii_loop:wwnnw}
 %   Loop through the internal string, and convert each character to its
 %   \textsc{utf-8} representation. The representation is built from the
 %   right-most (least significant) byte to the left-most (most
@@ -1967,14 +1967,14 @@
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{macro}[int]{\@@_convert_decode_utf8:}
-% \begin{macro}[aux, rEXP]
+% \begin{macro}{\@@_convert_decode_utf8:}
+% \begin{macro}[rEXP]
 %   {
 %     \@@_decode_utf_viii_start:N,
 %     \@@_decode_utf_viii_continuation:wwN,
 %     \@@_decode_utf_viii_aux:wNnnwN
 %   }
-% \begin{macro}[aux, rEXP]
+% \begin{macro}[rEXP]
 %   {\@@_decode_utf_viii_overflow:w, \@@_decode_utf_viii_end:}
 %   Decoding is significantly harder than encoding. As before, lower
 %   some flags, which are tested at the end (in bulk, to trigger at most
@@ -2148,13 +2148,13 @@
   \char_set_catcode_other:N \^^ff
 %    \end{macrocode}
 %
-% \begin{macro}[int]
+% \begin{macro}
 %   {
 %     \@@_convert_encode_utf16:   ,
 %     \@@_convert_encode_utf16be: ,
 %     \@@_convert_encode_utf16le: ,
 %   }
-% \begin{macro}[aux, rEXP]
+% \begin{macro}[rEXP]
 %   {
 %     \@@_encode_utf_xvi_aux:N  ,
 %     \@@_encode_utf_xvi_char:n ,
@@ -2285,13 +2285,13 @@
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{macro}[int]
+% \begin{macro}
 %   {
 %     \@@_convert_decode_utf16:   ,
 %     \@@_convert_decode_utf16be: ,
 %     \@@_convert_decode_utf16le: ,
 %   }
-% \begin{macro}[aux]{\@@_decode_utf_xvi_bom:NN, \@@_decode_utf_xvi:Nw}
+% \begin{macro}{\@@_decode_utf_xvi_bom:NN, \@@_decode_utf_xvi:Nw}
 %   As for \textsc{utf-8}, decoding \textsc{utf-16} is harder than
 %   encoding it. If the endianness is unknown, check the first two
 %   bytes: if those are \hexnum{FE} and \hexnum{FF} in either order,
@@ -2346,13 +2346,13 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[aux, rEXP]
+% \begin{macro}[rEXP]
 %   {
 %     \@@_decode_utf_xvi_pair:NN     ,
 %     \@@_decode_utf_xvi_quad:NNwNN  ,
 %     \@@_decode_utf_xvi_pair_end:Nw ,
 %   }
-% \begin{macro}[aux, rEXP]
+% \begin{macro}[rEXP]
 %   {
 %     \@@_decode_utf_xvi_error:nNN ,
 %     \@@_decode_utf_xvi_extra:NNw ,
@@ -2474,13 +2474,13 @@
   \char_set_catcode_other:N \^^ff
 %    \end{macrocode}
 %
-% \begin{macro}[int]
+% \begin{macro}
 %   {
 %     \@@_convert_encode_utf32:   ,
 %     \@@_convert_encode_utf32be: ,
 %     \@@_convert_encode_utf32le: ,
 %   }
-% \begin{macro}[aux, rEXP]
+% \begin{macro}[rEXP]
 %   {
 %     \@@_encode_utf_xxxii_be:n      ,
 %     \@@_encode_utf_xxxii_be_aux:nn ,
@@ -2563,15 +2563,15 @@
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{macro}[int]
+% \begin{macro}
 %   {
 %     \@@_convert_decode_utf32:   ,
 %     \@@_convert_decode_utf32be: ,
 %     \@@_convert_decode_utf32le: ,
 %   }
-% \begin{macro}[aux]
+% \begin{macro}
 %   {\@@_decode_utf_xxxii_bom:NNNN, \@@_decode_utf_xxxii:Nw}
-% \begin{macro}[aux, rEXP]
+% \begin{macro}[rEXP]
 %   {\@@_decode_utf_xxxii_loop:NNNN, \@@_decode_utf_xxxii_end:w}
 %
 %   The structure is similar to \textsc{utf-16} decoding functions. If

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx	2017-12-07 23:16:26 UTC (rev 46013)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-%% File: l3str-format.dtx Copyright (C) 2012-2013,2015-2017 The LaTeX3 Project
+%% File: l3str-format.dtx Copyright (C) 2012-2017 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
@@ -7,7 +7,7 @@
 % license or (at your option) any later version.  The latest version
 % of this license is in the file
 %
-%    http://www.latex-project.org/lppl.txt
+%    https://www.latex-project.org/lppl.txt
 %
 % This file is part of the "l3experimental bundle" (The Work in LPPL)
 % and all files in that bundle must be distributed together.
@@ -47,7 +47,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2017/11/14}
+% \date{Released 2017/12/05}
 %
 % \maketitle
 %
@@ -163,15 +163,14 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3str-format}{2017/11/14}{}
+\ProvidesExplPackage{l3str-format}{2017/12/05}{}
   {L3 Experimental string formatting}
-\RequirePackage{l3str}
 %</package>
 %    \end{macrocode}
 %
 % \subsection{Helpers}
 %
-% \begin{macro}[aux, EXP]{\use:nf, \use:fnf}
+% \begin{macro}[EXP]{\use:nf, \use:fnf}
 %   A simple variant.
 %    \begin{macrocode}
 \cs_generate_variant:Nn \use:nn { nf }
@@ -179,7 +178,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\tl_to_str:f}
+% \begin{macro}[EXP]{\tl_to_str:f}
 %   A simple variant.
 %    \begin{macrocode}
 \cs_generate_variant:Nn \tl_to_str:n { f }
@@ -186,7 +185,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_if_digit:NTF}
+% \begin{macro}[EXP]{\@@_if_digit:NTF}
 %   Here we expect |#1| to be a character with category other, or
 %   \cs{s__stop}.
 %    \begin{macrocode}
@@ -198,7 +197,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]
+% \begin{macro}[EXP]
 %   {\@@_put:nw, \@@_put:ow, \@@_put:fw}
 %   Put |#1| after an \cs{s__stop} delimiter.
 %    \begin{macrocode}
@@ -207,8 +206,8 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP, TF]{\@@_if_in:nN}
-% \begin{macro}[aux, EXP]{\@@_if_in_aux:NN}
+% \begin{macro}[EXP, TF]{\@@_if_in:nN}
+% \begin{macro}[EXP]{\@@_if_in_aux:NN}
 %   A copy of \cs{__str_if_contains_char:nNTF} to avoid relying on
 %   this weird internal string function.
 %    \begin{macrocode}
@@ -232,8 +231,8 @@
 %
 % \subsection{Parsing a format specification}
 %
-% \begin{macro}[aux, EXP]{\@@_parse:n}
-% \begin{macro}[aux, EXP]
+% \begin{macro}[EXP]{\@@_parse:n}
+% \begin{macro}[EXP]
 %   {
 %     \@@_parse_auxi:NN,
 %     \@@_parse_auxii:nN,
@@ -324,7 +323,7 @@
 % padding between the \meta{sign} and the \meta{body}, hence the need to
 % keep those separate.
 %
-% \begin{macro}[aux, EXP]{\@@_align_<:nnnN}
+% \begin{macro}[EXP]{\@@_align_<:nnnN}
 %   \begin{quote}
 %     \cs{@@_align_<:nnnN} \Arg{body} \Arg{sign} \Arg{width}
 %     \meta{fill}
@@ -345,7 +344,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_align_>:nnnN}
+% \begin{macro}[EXP]{\@@_align_>:nnnN}
 %   \begin{quote}
 %     \cs{@@_align_>:nnnN} \Arg{body} \Arg{sign} \Arg{width}
 %     \meta{fill}
@@ -365,7 +364,7 @@
 % \end{macro}
 %
 % \begingroup\catcode`\^=12
-% \begin{macro}[aux, EXP]{\@@_align_^:nnnN}
+% \begin{macro}[EXP]{\@@_align_^:nnnN}
 %   \begin{quote}
 %     \cs{@@_align_^:nnnN} \Arg{body} \Arg{sign} \Arg{width}
 %     \meta{fill}
@@ -402,7 +401,7 @@
 % \end{macro}
 % \endgroup
 %
-% \begin{macro}[aux, EXP]{\@@_align_=:nnnN}
+% \begin{macro}[EXP]{\@@_align_=:nnnN}
 %   \begin{quote}
 %     \cs{@@_align_=:nnnN} \Arg{body} \Arg{sign} \Arg{width}
 %     \meta{fill}
@@ -445,7 +444,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_tl:NNNnnNn}
+% \begin{macro}[EXP]{\@@_tl:NNNnnNn}
 %   \begin{quote}
 %     \cs{@@_tl:NNNnnNn} \meta{fill} \meta{alignment} \meta{sign}
 %     \Arg{width} \Arg{precision} \meta{style} \Arg{token list}
@@ -497,7 +496,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_tl_s:NNnnNNn}
+% \begin{macro}[EXP]{\@@_tl_s:NNnnNNn}
 %   \begin{quote}
 %     \cs{@@_tl_s:NNnnNNn} \cs{s__stop} \meta{function}
 %     \Arg{arguments} \Arg{width} \meta{fill} \meta{alignment}
@@ -540,7 +539,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_seq:nn, \@@_seq:ff}
+% \begin{macro}[EXP]{\@@_seq:nn, \@@_seq:ff}
 %   The first argument is the contents of a \texttt{seq} variable.  The
 %   second is a parsed \meta{format specification}.  Set up the loop.
 %    \begin{macrocode}
@@ -554,7 +553,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_seq_loop:nnNn}
+% \begin{macro}[EXP]{\@@_seq_loop:nnNn}
 %   \begin{quote}
 %     \cs{@@_seq_loop:nnNn} \Arg{done} \Arg{parsed format}
 %     \cs{__seq_item:n} \Arg{item}
@@ -574,7 +573,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_seq_end:w}
+% \begin{macro}[EXP]{\@@_seq_end:w}
 %   Pick the right piece in the loop above.
 %    \begin{macrocode}
 \cs_new:Npn \@@_seq_end:w #1#2#3#4 { \use_ii:nnn #3 }
@@ -591,7 +590,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_int:nn}
+% \begin{macro}[EXP]{\@@_int:nn}
 %   Parse the \meta{format specification} and feed it to
 %   \cs{@@_int:NNNnnNn}.  Then convert the result to a string
 %    \begin{macrocode}
@@ -607,7 +606,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_int:NNNnnNn}
+% \begin{macro}[EXP]{\@@_int:NNNnnNn}
 %   \begin{quote}
 %     \cs{@@_int:NNNnnNn} \meta{fill} \meta{alignment}
 %     \meta{sign} \Arg{width} \Arg{precision} \meta{style} \Arg{integer}
@@ -662,7 +661,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_int:NwnnNNn}
+% \begin{macro}[EXP]{\@@_int:NwnnNNn}
 %   \begin{quote}
 %     \cs{@@_int:NwnnNNn} \meta{function} \cs{s__stop}
 %     \Arg{width} \Arg{sign} \meta{fill} \meta{alignment} \Arg{integer}
@@ -700,7 +699,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_fp:nn}
+% \begin{macro}[EXP]{\@@_fp:nn}
 %   Parse the \meta{format specification} and feed it to
 %   \cs{@@_fp:NNNnnNn}.  Then convert the result to a string
 %    \begin{macrocode}
@@ -716,7 +715,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_fp:NNNnnNw}
+% \begin{macro}[EXP]{\@@_fp:NNNnnNw}
 %   \begin{quote}
 %     \cs{@@_fp:NNNnnNw} \meta{fill} \meta{alignment}
 %     \meta{format sign} \Arg{width} \Arg{precision} \meta{style}
@@ -773,7 +772,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_fp:wnnnNNw}
+% \begin{macro}[EXP]{\@@_fp:wnnnNNw}
 %   \begin{quote}
 %     \cs{@@_fp:wnnnNNw} \meta{formatting function} \cs{s__stop}
 %     \Arg{precision} \Arg{width} \Arg{sign} \meta{fill}
@@ -793,7 +792,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_fp_round:wn}
+% \begin{macro}[EXP]{\@@_fp_round:wn}
 %   Round the given floating point (not its absolute value, to play
 %   nicely with unusual rounding modes).
 %    \begin{macrocode}
@@ -802,8 +801,8 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_fp_e:wn}
-% \begin{macro}[aux, EXP]{\@@_fp_e_aux:wn}
+% \begin{macro}[EXP]{\@@_fp_e:wn}
+% \begin{macro}[EXP]{\@@_fp_e_aux:wn}
 %   With the |e| type, first filter out special cases.  In the normal
 %   case, round to |#4+1| significant figures (one before the decimal
 %   separator, |#4| after).
@@ -839,13 +838,12 @@
     \@@_put:fw { \use_i:nnnn #4 . }
     \use_none:n \s__stop
   }
-  }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_fp_f:wn}
-% \begin{macro}[aux, EXP]{\@@_fp_f_aux:wwwn}
+% \begin{macro}[EXP]{\@@_fp_f:wn}
+% \begin{macro}[EXP]{\@@_fp_f_aux:wwwn}
 %   With the |f| type, first filter out special cases.  In the normal
 %   case, round to |#4| (absolute) decimal places.
 %    \begin{macrocode}
@@ -875,9 +873,9 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[aux, EXP]{\@@_fp_g:wn}
-% \begin{macro}[aux, EXP]{\@@_fp_g_aux:wn}
-% \begin{macro}[aux, EXP]{\@@_fp_to_scientific:n, \@@_fp_trim:w}
+% \begin{macro}[EXP]{\@@_fp_g:wn}
+% \begin{macro}[EXP]{\@@_fp_g_aux:wn}
+% \begin{macro}[EXP]{\@@_fp_to_scientific:n, \@@_fp_trim:w}
 %   With the |g| type, first filter out special cases.  In the normal
 %   case, round to |#4| significant figures, then test the exponent: if
 %   $-4\leq \meta{exponent} < \meta{precision}$, use the presentation

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins	2017-12-07 23:16:26 UTC (rev 46013)
@@ -1,6 +1,6 @@
 \iffalse meta-comment
 
-File l3str.ins Copyright (C) 2011,2013,2015-2017 The LaTeX3 Project
+File l3str.ins Copyright (C) 2011-2017 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

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx	2017-12-07 23:16:26 UTC (rev 46013)
@@ -7,7 +7,7 @@
 % license or (at your option) any later version.  The latest version
 % of this license is in the file
 %
-%    http://www.latex-project.org/lppl.txt
+%    https://www.latex-project.org/lppl.txt
 %
 % This file is part of the "l3experimental bundle" (The Work in LPPL)
 % and all files in that bundle must be distributed together.
@@ -54,7 +54,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2017/11/14}
+% \date{Released 2017/12/05}
 %
 % \maketitle
 %
@@ -673,7 +673,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xcoffins}{2017/11/14}{}
+\ProvidesExplPackage{xcoffins}{2017/12/05}{}
   {L3 Experimental design level coffins}
 %    \end{macrocode}
 %
@@ -723,7 +723,7 @@
 %
 % \begin{macro}{\@@_design_names:N}
 % \begin{variable}{\Height, \Depth, \Width, \TotalHeight}
-% \begin{variable}[int]
+% \begin{variable}
 %   {\l_@@_height_dim, \l_@@_depth_dim, \l_@@_width_dim, \l_@@_totalheight_dim}
 %   Sets up design-level names for the various coffin dimensions. These are
 %   not defined outside of this scope, and are dimensions so that they work
@@ -894,7 +894,7 @@
 \NewDocumentCommand \CoffinHeight { m }
   { \coffin_ht:N #1 }
 \NewDocumentCommand \CoffinTotalHeight { m }
-  { \__dim_eval:w \coffin_ht:N #1 + \coffin_dp:N #1 \__dim_eval_end: }
+  { \__dim_eval:n { \coffin_ht:N #1 + \coffin_dp:N #1 } }
 \NewDocumentCommand \CoffinWidth { m }
   { \coffin_wd:N #1 }
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins	2017-12-07 23:16:26 UTC (rev 46013)
@@ -1,6 +1,6 @@
 \iffalse meta-comment
 
-File xcoffins.ins Copyright (C) 2010,2011,2016 The LaTeX3 Project
+File xcoffins.ins Copyright (C) 2010,2011,2012,2016,2017 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
@@ -32,7 +32,7 @@
 
 \preamble
 
-Copyright (C) 2010-2016 The LaTeX3 Project
+Copyright (C) 2010-2017 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

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx	2017-12-07 23:16:26 UTC (rev 46013)
@@ -8,7 +8,7 @@
 % license or (at your option) any later version.  The latest version
 % of this license is in the file
 %
-%    http://www.latex-project.org/lppl.txt
+%    https://www.latex-project.org/lppl.txt
 %
 % This file is part of the "l3experimental bundle" (The Work in LPPL)
 % and all files in that bundle must be distributed together.
@@ -24,8 +24,8 @@
 %<*driver|package>
 % The version of expl3 required is tested as early as possible, as
 % some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2017/11/14]
-%<package>\@ifpackagelater{expl3}{2017/11/14}
+\RequirePackage{expl3}[2017/12/05]
+%<package>\@ifpackagelater{expl3}{2017/12/05}
 %<package>  {}
 %<package>  {%
 %<package>    \PackageError{l3galley}{Support package l3kernel too old}
@@ -59,7 +59,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2017/11/14}
+% \date{Released 2017/12/05}
 %
 % \maketitle
 %
@@ -685,7 +685,7 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3galley}{2017/11/14}{}
+\ProvidesExplPackage{l3galley}{2017/12/05}{}
   {L3 Experimental galley code}
 %</package>
 %    \end{macrocode}
@@ -1111,7 +1111,7 @@
 % \end{macro}
 %
 % \begin{macro}{\galley_level:}
-% \begin{macro}[aux]{\@@_level_end:}
+% \begin{macro}{\@@_level_end:}
 %   Galley levels are created by saving all of the current global
 %   settings, starting a group then initialising both the local and global
 %   variables.
@@ -1152,9 +1152,9 @@
 % \end{variable}
 %
 % \begin{macro}{\galley_par:}
-% \begin{macro}[aux]{\@@_par_auxi:, \@@_par_auxii:, \@@_par_auxiii:}
-% \begin{macro}[aux]{\@@_par_aux:N}
-% \begin{macro}[int]{\@@_par_update_cutout:}
+% \begin{macro}{\@@_par_auxi:, \@@_par_auxii:, \@@_par_auxiii:}
+% \begin{macro}{\@@_par_aux:N}
+% \begin{macro}{\@@_par_update_cutout:}
 %   The idea here is to expand the next token in exactly the same way as \TeX{}
 %   would do anyway. The \texttt{f}-type expansion will ignore any protection,
 %   but will stop at a scan marker. Thus the code can test for an
@@ -1315,8 +1315,8 @@
 % \subsection{Display levels}
 %
 % \begin{macro}{\galley_display_begin:, \galley_display_end:}
-% \begin{macro}[aux]{\@@_display_penalty:N, \@@_display_vspace:N}
-% \begin{macro}[aux]{\@@_display_par_setup:, \@@_display_par:}
+% \begin{macro}{\@@_display_penalty:N, \@@_display_vspace:N}
+% \begin{macro}{\@@_display_par_setup:, \@@_display_par:}
 %   Display items within the galley are a bit like galley levels: they
 %   may have different paragraph settings to the main part of the galley.
 %   On the other hand, unlike independent galleys they should inherit the
@@ -1497,7 +1497,7 @@
 % \end{verbatim}
 % and so anything applied here must be done globally.
 %
-% \begin{macro}[int]{\@@_start_paragraph_common:N}
+% \begin{macro}{\@@_start_paragraph_common:N}
 %   Share some code between all types of paragraph start.
 %   The routine at the start of a paragraph starts by removing any
 %   (empty) indent box from the vertical list. As there may be vertical
@@ -1520,7 +1520,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_start_paragraph_std:}
+% \begin{macro}{\@@_start_paragraph_std:}
 %   After dealign with the common items, the horizontal mode items can be
 %   tidied up before sorting out any items which have been set on a
 %   single-paragraph basis.
@@ -1534,8 +1534,8 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_start_paragraph_first:}
-% \begin{macro}[aux]{\@@_insert_vspace_first:}
+% \begin{macro}{\@@_start_paragraph_first:}
+% \begin{macro}{\@@_insert_vspace_first:}
 %   For the very first paragraph in a galley, the code needs to avoid
 %   adding any unnecessary vertical items at the top as it will interfere with
 %   vertical positioning in \cs{tex_vtop:D}. That requirement also means we
@@ -1560,7 +1560,7 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_insert_vertical_items}
+% \begin{macro}{\@@_insert_vertical_items}
 %   The aim here is to insert the vertical items such that they attach to
 %   the correct place. This function is used as part of the \cs{tex_everypar:D}
 %   mechanism, meaning that the immediately-preceding item on the vertical
@@ -1584,7 +1584,7 @@
       }
       {
         \tex_penalty:D
-          \__int_eval:w \g_@@_interpar_penalty_user_tl \__int_eval_end:
+          \__int_eval:n { \g_@@_interpar_penalty_user_tl }
         \tl_gclear:N \g_@@_interpar_penalty_user_tl
       }
     \bool_gset_false:N \g_galley_no_break_next_bool
@@ -1598,7 +1598,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_insert_horizontal_items:}
+% \begin{macro}{\@@_insert_horizontal_items:}
 %   Horizontal mode objects start with the whatsits for the next paragraph. An
 %   indent is then included if the removed box was not void.
 %    \begin{macrocode}
@@ -1618,7 +1618,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_restore_running_parameters:}
+% \begin{macro}{\@@_restore_running_parameters:}
 %   Restoring the ongoing parameters just means using the token list
 %   variable in which the appropriate assignments are stored. The
 %   list can then be cleared.
@@ -1703,7 +1703,7 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_parshape_set:nnnN}
+% \begin{macro}{\@@_parshape_set:nnnN}
 %   Setting the paragraph shape starts by converting the two input lists into
 %   sequences. The shape is then set using a mapping with allowance for the
 %   unaltered lines and the possibility of resuming the measure. The unaltered
@@ -1738,8 +1738,8 @@
 % handling from the measure and shape.
 %
 % \begin{macro}{\galley_cutout_left:nn, \galley_cutout_right:nn}
-% \begin{macro}[aux]{\@@_cutout:nnn}
-% \begin{macro}[int]{\@@_cutout:NN, \@@_cutout:cN, \@@_cutout:Nc}
+% \begin{macro}{\@@_cutout:nnn}
+% \begin{macro}{\@@_cutout:NN, \@@_cutout:cN, \@@_cutout:Nc}
 %   Setting up cutouts on the two sides of the paragraph is more or less
 %   the same idea with one or two very specific points of difference. As such,
 %   the two interface functions both use the same implementation.
@@ -1798,17 +1798,17 @@
 %
 % \subsection{Setting the primitive paragraph shape}
 %
-% \begin{macro}[int]{\@@_parshape_set:}
-% \begin{macro}[aux]
+% \begin{macro}{\@@_parshape_set:}
+% \begin{macro}
 %   {
 %     \@@_parshape_set_margins:,
 %     \@@_parshape_set_indents:,
 %     \@@_parshape_set_cutouts:
 %   }
-% \begin{macro}[aux]{\@@_parshape_set_indents:NN}
-% \begin{macro}[aux, rEXP]{\@@_parshape_set_indents:nn}
-% \begin{macro}[aux]{\@@_parshape_set_cutouts:n}
-% \begin{macro}[aux]{\@@_parshape_set_cutouts:N}
+% \begin{macro}{\@@_parshape_set_indents:NN}
+% \begin{macro}[rEXP]{\@@_parshape_set_indents:nn}
+% \begin{macro}{\@@_parshape_set_cutouts:n}
+% \begin{macro}{\@@_parshape_set_cutouts:N}
 %   The real paragraph shape (\cs{tex_parshape:D}) is set whenever any
 %   of the conceptual elements (margins, measure, cutouts) are set and
 %   potentially at the end of a paragraph in the cases where a single-paragraph
@@ -1863,18 +1863,15 @@
 \cs_new_protected:Npn \@@_parshape_set_indents:NN #1#2
   {
     \tex_parshape:D
-      \__int_eval:w
-        \int_min:nn { \seq_count:N #1 } { \seq_count:N #2 }
-      \__int_eval_end:
+      \__int_eval:n
+        { \int_min:nn { \seq_count:N #1 } { \seq_count:N #2 } }
       \seq_mapthread_function:NNN #1 #2
         \@@_parshape_set_indents:nn
   }
 \cs_new:Npn \@@_parshape_set_indents:nn #1#2
   {
-    \__dim_eval:w \l_galley_total_left_margin_dim + ( #1 ) \__dim_eval_end:
-    \__dim_eval:w
-      \l_galley_text_width_dim - ( ( #1 ) + ( #2 ) )
-    \__dim_eval_end:
+    \__dim_eval:n { \l_galley_total_left_margin_dim + #1 }
+    \__dim_eval:n { \l_galley_text_width_dim - ( #1 + #2 ) }
   }
 %    \end{macrocode}
 %   Calculating cutouts is by far the most complex operation here. The
@@ -2217,7 +2214,7 @@
 %     \galley_widow_penalties_set:V,
 %     \galley_widow_penalties_set:v
 %   }
-% \begin{macro}[aux]{\@@_set_aux:n}
+% \begin{macro}{\@@_set_aux:n}
 %   By far the easiest penalties to deal with are those for widows. These
 %   work exactly as the names imply, with the display version only used
 %   immediately before display math, and the standard penalty used at the end
@@ -2228,7 +2225,7 @@
 \cs_new_protected:Npn \galley_display_widow_penalties_set:n #1
   {
     \etex_displaywidowpenalties:D
-      \__int_eval:w \clist_count:n {#1} + 1 \__int_eval_end:
+      \__int_eval:n { \clist_count:n {#1} + 1 }
       \clist_map_function:nN {#1} \@@_set_aux:n
       0 \exp_stop_f:
   }
@@ -2236,7 +2233,7 @@
 \cs_new_protected:Npn \galley_widow_penalties_set:n #1
   {
     \etex_widowpenalties:D
-      \__int_eval:w \clist_count:n {#1} + 1 \__int_eval_end:
+      \__int_eval:n { \clist_count:n {#1} + 1 }
       \clist_map_function:nN {#1} \@@_set_aux:n
       0 \exp_stop_f:
   }
@@ -2287,7 +2284,7 @@
 \cs_new_protected:Npn \galley_display_club_penalties_set:n #1
   {
     \etex_clubpenalties:D
-      \__int_eval:w \clist_count:n {#1} + 1 \__int_eval_end:
+      \__int_eval:n { \clist_count:n {#1} + 1 }
       \clist_map_function:nN {#1} \@@_set_aux:n
       0 \exp_stop_f:
     \@@_calc_interline_penalties:
@@ -2297,8 +2294,8 @@
 % \end{macro}
 %
 % \begin{macro}{\galley_interline_penalty_set:n}
-% \begin{macro}[aux]{\@@_set_interline_penalty:nn}
-% \begin{macro}[aux]
+% \begin{macro}{\@@_set_interline_penalty:nn}
+% \begin{macro}
 %   {
 %     \@@_set_interline_penalty_auxi:n,
 %     \@@_set_interline_penalty_auxii:n
@@ -2310,22 +2307,22 @@
 %   generic build system is invoked (in case the
 %   \cs{etex_interlinepenalties:D} has accidentally been cleared).
 %    \begin{macrocode}
-\__debug_patch_args:nNNpn { { (#1) } }
 \cs_new_protected:Npn \galley_interline_penalty_set:n #1
   {
     \int_compare:nNnTF { \etex_interlinepenalties:D 0 } = 0
       {
-        \etex_interlinepenalties:D 1 = \__int_eval:w #1 \__int_eval_end:
+        \etex_interlinepenalties:D 1 = \__int_eval:n {#1}
         \@@_calc_interline_penalties:
       }
       {
         \cs_set:Npn \@@_set_interline_penalty_auxii:n ##1
           {
-            \__int_eval:w
-              \etex_interlinepenalties:D ##1
-               - \etex_interlinepenalties:D \etex_interlinepenalties:D 0
-               + #1
-            \__int_eval_end:
+            \__int_eval:n
+              {
+                \etex_interlinepenalties:D ##1
+                - \etex_interlinepenalties:D \etex_interlinepenalties:D 0
+                + #1
+              }
           }
         \exp_args:Nf \@@_set_interline_penalty:nn
           { \clist_count:N \l_galley_line_penalties_clist } {#1}
@@ -2340,10 +2337,10 @@
       \int_step_function:nnnN { #1 + 1 } { 1 }
         { \etex_interlinepenalties:D 0 - 1 }
         \@@_set_interline_penalty_auxii:n
-      \__int_eval:w #2 \__int_eval_end:
+      \__int_eval:n {#2}
   }
 \cs_new:Npn \@@_set_interline_penalty_auxi:n #1
-  { \etex_interlinepenalties:D \__int_eval:w #1 \__int_eval_end: }
+  { \etex_interlinepenalties:D \__int_eval:n {#1} }
 \cs_new:Npn \@@_set_interline_penalty_auxii:n #1 { }
 %    \end{macrocode}
 % \end{macro}
@@ -2350,9 +2347,9 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[int]{\@@_calc_interline_penalties:}
-% \begin{macro}[aux]{\@@_calc_interline_penalties:nn}
-% \begin{macro}[aux]
+% \begin{macro}{\@@_calc_interline_penalties:}
+% \begin{macro}{\@@_calc_interline_penalties:nn}
+% \begin{macro}
 %   {
 %     \@@_calc_interline_penalties_auxi:n,
 %     \@@_calc_interline_penalties_auxii:n
@@ -2395,19 +2392,21 @@
   }
 \cs_new:Npn \@@_calc_interline_penalties_auxi:n #1
   {
-    \__int_eval:w
+    \__int_eval:n
+      {
         \clist_item:Nn \l_galley_line_penalties_clist {#1}
-      + 0 \clist_item:Nn \l_galley_club_penalties_clist {#1}
-      - \etex_clubpenalties:D #1 ~
-    \__int_eval_end:
+        + 0 \clist_item:Nn \l_galley_club_penalties_clist {#1}
+        - \etex_clubpenalties:D #1 ~
+      }
   }
 \cs_new:Npn \@@_calc_interline_penalties_auxii:n #1
   {
-    \__int_eval:w
+    \__int_eval:n
+      {
         \etex_interlinepenalties:D \etex_interlinepenalties:D 0 \exp_stop_f:
-      + 0 \clist_item:Nn \l_galley_club_penalties_clist {#1}
-      - \etex_clubpenalties:D #1 ~
-    \__int_eval_end:
+        + 0 \clist_item:Nn \l_galley_club_penalties_clist {#1}
+        - \etex_clubpenalties:D #1 ~
+      }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2422,7 +2421,7 @@
 %     \galley_save_display_widow_penalties:N,
 %     \galley_save_widow_penalties:N
 %   }
-% \begin{macro}[aux]
+% \begin{macro}
 %   {
 %     \@@_save_display_club_penalties:n,
 %     \@@_save_display_widow_penalties:n,
@@ -2450,7 +2449,7 @@
       }
   }
 \cs_new:Npn \@@_save_display_club_penalties:n #1
-  { \__int_value:w \etex_clubpenalties:D \__int_eval:w #1 \__int_eval_end: , }
+  { \__int_value:w \etex_clubpenalties:D \__int_eval:n {#1} , }
 \cs_new_protected:Npn \galley_save_display_widow_penalties:N #1
   {
     \clist_set:Nx #1
@@ -2463,7 +2462,7 @@
 \cs_new:Npn \@@_save_display_widow_penalties:n #1
   {
     \__int_value:w \etex_displaywidowpenalties:D
-      \__int_eval:w #1 \__int_eval_end: ,
+      \__int_eval:n {#1} ,
   }
 \cs_new_protected:Npn \galley_save_widow_penalties:N #1
   {
@@ -2475,7 +2474,7 @@
       }
   }
 \cs_new:Npn \@@_save_widow_penalties:n #1
-  { \__int_value:w \etex_widowpenalties:D \__int_eval:w #1 \__int_eval_end: , }
+  { \__int_value:w \etex_widowpenalties:D \__int_eval:n {#1} , }
 %    \end{macrocode}
 %   This one is not an array, but is stored in a primitive, so there is
 %   a simple conversion. The general interline penalty is always the

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx	2017-12-07 23:16:26 UTC (rev 46013)
@@ -8,7 +8,7 @@
 % license or (at your option) any later version.  The latest version
 % of this license is in the file
 %
-%    http://www.latex-project.org/lppl.txt
+%    https://www.latex-project.org/lppl.txt
 %
 % This file is part of the "l3experimental bundle" (The Work in LPPL)
 % and all files in that bundle must be distributed together.
@@ -45,7 +45,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2017/11/14}
+% \date{Released 2017/12/05}
 %
 % \maketitle
 %
@@ -732,7 +732,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xgalley}{2017/11/14}{}
+\ProvidesExplPackage{xgalley}{2017/12/05}{}
   {L3 Experimental galley}
 \RequirePackage{xparse,xtemplate,l3galley}
 %    \end{macrocode}
@@ -1402,6 +1402,7 @@
 %    \end{macrocode}
 %   A bit more complex for the array penalties. Although the interface here
 %   does not expose the arrays, it is necessary to correctly save them.
+%   We suspend debugging to allow an assignment to a constant.
 %    \begin{macrocode}
     \seq_map_inline:Nn \c_@@_parbreak_multi_seq
       {
@@ -1417,16 +1418,20 @@
           }
       }
   }
-\seq_new:N \c_@@_parbreak_multi_seq
-\seq_gput_right:Nn \c_@@_parbreak_multi_seq { club_penalties }
-\seq_gput_right:Nn \c_@@_parbreak_multi_seq { display_club_penalties }
-\seq_gput_right:Nn \c_@@_parbreak_multi_seq { display_widow_penalties }
-\seq_gput_right:Nn \c_@@_parbreak_multi_seq { widow_penalties }
-\seq_new:N \c_@@_parbreak_single_seq
-\seq_gput_right:Nn \c_@@_parbreak_single_seq { parbreak_badness }
-\seq_gput_right:Nn \c_@@_parbreak_single_seq { broken_penalty }
-\seq_gput_right:Nn \c_@@_parbreak_single_seq { post_display_penalty }
-\seq_gput_right:Nn \c_@@_parbreak_single_seq { pre_display_penalty }
+\seq_const_from_clist:Nn \c_@@_parbreak_multi_seq
+  {
+    club_penalties ,
+    display_club_penalties ,
+    display_widow_penalties ,
+    widow_penalties ,
+  }
+\seq_const_from_clist:Nn \c_@@_parbreak_single_seq
+  {
+    parbreak_badness ,
+    broken_penalty ,
+    post_display_penalty ,
+    pre_display_penalty ,
+  }
 %    \end{macrocode}
 % \end{variable}
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins	2017-12-07 23:16:26 UTC (rev 46013)
@@ -1,6 +1,6 @@
 \iffalse meta-comment
 
-File xgalley.ins Copyright (C) 2010-2012,2016 The LaTeX3 Project
+File xgalley.ins Copyright (C) 2010-2012,2016,2017 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
@@ -32,7 +32,7 @@
 
 \preamble
 
-Copyright (C) 2010-2016 The LaTeX3 Project
+Copyright (C) 2010-2017 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

Modified: trunk/Master/texmf-dist/tex/latex/l3build/l3build.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3build/l3build.lua	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/tex/latex/l3build/l3build.lua	2017-12-07 23:16:26 UTC (rev 46013)
@@ -23,7 +23,7 @@
 --]]
 
 -- Version information
-release_date = "2017/11/25"
+release_date = "2017/12/06"
 
 -- "module" is a deprecated function in Lua 5.2: as we want the name
 -- for other purposes, and it should eventually be 'free', simply
@@ -61,24 +61,25 @@
 
 -- Directory structure for the build system
 -- Use Unix-style path separators
-maindir     = maindir or "."
+maindir = maindir or "."
 
--- Substructure for tests and support files
+-- Substructure for file locations
+docfiledir  = docfiledir  or maindir
+supportdir  = supportdir  or maindir .. "/support"
 testfiledir = testfiledir or "testfiles"
 testsuppdir = testsuppdir or testfiledir .. "/support"
-supportdir  = supportdir  or maindir .. "/support"
 
 -- Structure within a development area
-distribdir  = distribdir or maindir .. "/build/distrib"
-localdir    = localdir   or maindir .. "/build/local"
-testdir     = testdir    or maindir .. "/build/test"
-typesetdir  = typesetdir or maindir .. "/build/doc"
-unpackdir   = unpackdir  or maindir .. "/build/unpacked"
+distribdir = distribdir or maindir .. "/build/distrib"
+localdir   = localdir   or maindir .. "/build/local"
+testdir    = testdir    or maindir .. "/build/test"
+typesetdir = typesetdir or maindir .. "/build/doc"
+unpackdir  = unpackdir  or maindir .. "/build/unpacked"
 
 -- Substructure for CTAN release material
-ctandir     = ctandir or distribdir .. "/ctan"
-tdsdir      = tdsdir  or distribdir .. "/tds"
-tdsroot     = tdsroot or "latex"
+ctandir = ctandir or distribdir .. "/ctan"
+tdsdir  = tdsdir  or distribdir .. "/tds"
+tdsroot = tdsroot or "latex"
 
 -- Location for installation on CTAN or in TEXMFHOME
 if bundle == "" then
@@ -108,7 +109,6 @@
 textfiles          = textfiles          or {"*.md", "*.txt"}
 typesetdemofiles   = typesetdemofiles   or { }
 typesetfiles       = typesetfiles       or {"*.dtx"}
-docfiledir         = docfiledir         or maindir
 typesetsuppfiles   = typesetsuppfiles   or { }
 typesetsourcefiles = typesetsourcefiles or { }
 unpackfiles        = unpackfiles        or {"*.ins"}
@@ -176,6 +176,7 @@
 packtdszip   = packtdszip   or false
 scriptname   = scriptname   or "build.lua"
 typesetcmds  = typesetcmds  or ""
+typesetruns  = typesetruns  or 2
 versionform  = versionform  or ""
 recordstatus = recordstatus or false
 
@@ -681,9 +682,9 @@
     return true
   end
   function is_dir(file)
-    return lfs.attributes(file)["mode"] == "directory"
+    return lfs_attributes(file)["mode"] == "directory"
   end
-  local dirs = {["."]=cropdots(path)}
+  local dirs = {["."] = cropdots(path)}
   for pattern, critereon in gmatch(cropdots(glob), "([^/]+)(/?)") do
     local critereon = critereon == "/" and is_dir or always_true
     function fill(path, dir, table)
@@ -691,8 +692,8 @@
         local fullpath = path .. "/" .. file
         if file ~= "." and file ~= ".." and
           fullpath ~= maindir .. "/build" and
-          (string.sub(pattern, 1, 1) == "."
-            or string.sub(file, 1, 1) ~= ".")
+          (sub(pattern, 1, 1) == "."
+            or sub(file, 1, 1) ~= ".")
         then
           local fulldir = dir .. "/" .. file
           if critereon(fulldir) then
@@ -1011,6 +1012,36 @@
     for i = 0, 31 do
       line = gsub(line, char(i), "^^" .. char(64 + i))
     end
+    -- Normalise register allocation to hard-coded numbers
+    -- No regex, so use a pattern plus lookup approach
+    local register_types = {
+        attribute      = true,
+        box            = true,
+        bytecode       = true,
+        catcodetable   = true,
+        count          = true,
+        dimen          = true,
+        insert         = true,
+        language       = true,
+        luabytecode    = true,
+        luachunk       = true,
+        luafunction    = true,
+        marks          = true,
+        muskip         = true,
+        read           = true,
+        skip           = true,
+        toks           = true,
+        whatsit        = true,
+        write          = true,
+        XeTeXcharclass = true
+      } 
+    if register_types[match(line, "^\\[^%]]+=\\([a-z]+)%d+$")] then
+      line = gsub(line, "%d+$", "...")
+    end
+    -- Also deal with showing boxes
+    if match(line, "^> \\box%d+=$") or match(line, "^> \\box%d+=(void)$") then
+      line = gsub(line, "%d+=", "...=")
+    end
     -- Remove 'normal' direction information on boxes with (u)pTeX
     line = gsub(line, ",? yoko direction,?", "")
     line = gsub(line, ",? yoko%(math%) direction,?", "")
@@ -1738,9 +1769,9 @@
           tex(file, dir)
         )
       end
-      errorlevel = cycle(name, dir)
-      if errorlevel == 0 then
+      for i = 1, typesetruns do
         errorlevel = cycle(name, dir)
+        if errorlevel ~= 0 then break end
       end
     end
     return errorlevel

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty	2017-12-07 23:16:26 UTC (rev 46013)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3str-convert.dtx Copyright (C) 2013-2017 The LaTeX3 Project
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3str-convert}{2017/11/14}{}
+\ProvidesExplPackage{l3str-convert}{2017/12/05}{}
   {L3 Experimental string encoding conversions}
 \cs_if_exist:NF \use_ii_i:nn
   { \cs_new:Npn \use_ii_i:nn #1#2 { #2 #1 } }
@@ -425,7 +425,7 @@
 \group_end:
 \cs_new_protected:Npn \__str_convert_decode_clist:
   {
-    \clist_set:No \g__str_result_tl \g__str_result_tl
+    \clist_gset:No \g__str_result_tl \g__str_result_tl
     \tl_gset:Nx \g__str_result_tl
       {
         \exp_args:No \clist_map_function:nN

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def	2017-12-07 23:16:26 UTC (rev 46013)
@@ -20,10 +20,9 @@
 %% 
 %% File: l3str-convert.dtx Copyright (C) 2013-2017 The LaTeX3 Project
 \group_begin:
-  \char_set_lccode:nn {`\*} {`\\}
   \char_set_catcode_other:N \^^J
   \char_set_catcode_other:N \^^M
-  \tex_lowercase:D
+  \cs_set_protected:Npn \__str_tmp:w #1
     {
       \cs_new_protected:Npn \__str_convert_unescape_string:
         {
@@ -40,7 +39,7 @@
             \tl_gset:Nx \g__str_result_tl
               {
                 \exp_after:wN \__str_unescape_string_loop:wNNN
-                  \g__str_result_tl * ?? { ? \__prg_break: }
+                  \g__str_result_tl #1 ?? { ? \__prg_break: }
                 \__prg_break_point:
               }
             \__str_if_flag_error:nnx { str_byte } { non-byte } { string }
@@ -47,8 +46,10 @@
             \__str_if_flag_error:nnx { str_error } { unescape-string } { }
           \group_end:
         }
-      \cs_new:Npn \__str_unescape_string_loop:wNNN #1 *#2#3#4
     }
+  \exp_args:No \__str_tmp:w { \c_backslash_str }
+  \exp_last_unbraced:NNNNo
+    \cs_new:Npn \__str_unescape_string_loop:wNNN #1 \c_backslash_str #2#3#4
         {
           \__str_filter_bytes:n {#1}
           \use_none:n #4

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty	2017-12-07 23:16:26 UTC (rev 46013)
@@ -18,11 +18,10 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-format.dtx Copyright (C) 2012-2013,2015-2017 The LaTeX3 Project
+%% File: l3str-format.dtx Copyright (C) 2012-2017 The LaTeX3 Project
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3str-format}{2017/11/14}{}
+\ProvidesExplPackage{l3str-format}{2017/12/05}{}
   {L3 Experimental string formatting}
-\RequirePackage{l3str}
 \cs_generate_variant:Nn \use:nn { nf }
 \cs_generate_variant:Nn \use:nnn { fnf }
 \cs_generate_variant:Nn \tl_to_str:n { f }
@@ -374,7 +373,6 @@
     \__str_format_put:fw { \use_i:nnnn #4 . }
     \use_none:n \s__stop
   }
-  }
 \cs_new:Npn \__str_format_fp_f:wn \s__fp \__fp_chk:w #1#2#3 ; #4
   {
     \int_case:nnF {#1}

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty	2017-12-07 23:16:26 UTC (rev 46013)
@@ -6,7 +6,7 @@
 %%
 %% xcoffins.dtx  (with options: `package')
 %% 
-%% Copyright (C) 2010-2016 The LaTeX3 Project
+%% Copyright (C) 2010-2017 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
@@ -20,7 +20,7 @@
 %% 
 %% File: xcoffins.dtx Copyright(C) 2010-2012,2014,2016,2017 The LaTeX3 Project
 \RequirePackage{xparse}
-\ProvidesExplPackage{xcoffins}{2017/11/14}{}
+\ProvidesExplPackage{xcoffins}{2017/12/05}{}
   {L3 Experimental design level coffins}
 \keys_define:nn { coffin }
   {
@@ -149,7 +149,7 @@
 \NewDocumentCommand \CoffinHeight { m }
   { \coffin_ht:N #1 }
 \NewDocumentCommand \CoffinTotalHeight { m }
-  { \__dim_eval:w \coffin_ht:N #1 + \coffin_dp:N #1 \__dim_eval_end: }
+  { \__dim_eval:n { \coffin_ht:N #1 + \coffin_dp:N #1 } }
 \NewDocumentCommand \CoffinWidth { m }
   { \coffin_wd:N #1 }
 \NewDocumentCommand \DisplayCoffinHandles { m m }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty	2017-12-07 23:16:26 UTC (rev 46013)
@@ -6,7 +6,7 @@
 %%
 %% l3galley.dtx  (with options: `package')
 %% 
-%% Copyright (C) 2010-2016 The LaTeX3 Project
+%% Copyright (C) 2010-2017 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
@@ -20,8 +20,8 @@
 %% 
 %% File: l3galley.dtx Copyright (C) 1999-2001, 2004-2009 Frank Mittelbach
 %%                              (C) 2010-2017 The LaTeX3 Project
-\RequirePackage{expl3}[2017/11/14]
-\@ifpackagelater{expl3}{2017/11/14}
+\RequirePackage{expl3}[2017/12/05]
+\@ifpackagelater{expl3}{2017/12/05}
   {}
   {%
     \PackageError{l3galley}{Support package l3kernel too old}
@@ -33,7 +33,7 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{l3galley}{2017/11/14}{}
+\ProvidesExplPackage{l3galley}{2017/12/05}{}
   {L3 Experimental galley code}
 \int_new:N \l__galley_tmp_int
 \seq_new:N \g__galley_tmpa_seq
@@ -410,7 +410,7 @@
       }
       {
         \tex_penalty:D
-          \__int_eval:w \g__galley_interpar_penalty_user_tl \__int_eval_end:
+          \__int_eval:n { \g__galley_interpar_penalty_user_tl }
         \tl_gclear:N \g__galley_interpar_penalty_user_tl
       }
     \bool_gset_false:N \g_galley_no_break_next_bool
@@ -560,18 +560,15 @@
 \cs_new_protected:Npn \__galley_parshape_set_indents:NN #1#2
   {
     \tex_parshape:D
-      \__int_eval:w
-        \int_min:nn { \seq_count:N #1 } { \seq_count:N #2 }
-      \__int_eval_end:
+      \__int_eval:n
+        { \int_min:nn { \seq_count:N #1 } { \seq_count:N #2 } }
       \seq_mapthread_function:NNN #1 #2
         \__galley_parshape_set_indents:nn
   }
 \cs_new:Npn \__galley_parshape_set_indents:nn #1#2
   {
-    \__dim_eval:w \l_galley_total_left_margin_dim + ( #1 ) \__dim_eval_end:
-    \__dim_eval:w
-      \l_galley_text_width_dim - ( ( #1 ) + ( #2 ) )
-    \__dim_eval_end:
+    \__dim_eval:n { \l_galley_total_left_margin_dim + #1 }
+    \__dim_eval:n { \l_galley_text_width_dim - ( #1 + #2 ) }
   }
 \cs_new_protected:Npn \__galley_parshape_set_cutouts:
   {
@@ -731,7 +728,7 @@
 \cs_new_protected:Npn \galley_display_widow_penalties_set:n #1
   {
     \etex_displaywidowpenalties:D
-      \__int_eval:w \clist_count:n {#1} + 1 \__int_eval_end:
+      \__int_eval:n { \clist_count:n {#1} + 1 }
       \clist_map_function:nN {#1} \__galley_set_aux:n
       0 \exp_stop_f:
   }
@@ -739,7 +736,7 @@
 \cs_new_protected:Npn \galley_widow_penalties_set:n #1
   {
     \etex_widowpenalties:D
-      \__int_eval:w \clist_count:n {#1} + 1 \__int_eval_end:
+      \__int_eval:n { \clist_count:n {#1} + 1 }
       \clist_map_function:nN {#1} \__galley_set_aux:n
       0 \exp_stop_f:
   }
@@ -760,28 +757,28 @@
 \cs_new_protected:Npn \galley_display_club_penalties_set:n #1
   {
     \etex_clubpenalties:D
-      \__int_eval:w \clist_count:n {#1} + 1 \__int_eval_end:
+      \__int_eval:n { \clist_count:n {#1} + 1 }
       \clist_map_function:nN {#1} \__galley_set_aux:n
       0 \exp_stop_f:
     \__galley_calc_interline_penalties:
   }
 \cs_generate_variant:Nn \galley_display_club_penalties_set:n { V , v }
-\__debug_patch_args:nNNpn { { (#1) } }
 \cs_new_protected:Npn \galley_interline_penalty_set:n #1
   {
     \int_compare:nNnTF { \etex_interlinepenalties:D 0 } = 0
       {
-        \etex_interlinepenalties:D 1 = \__int_eval:w #1 \__int_eval_end:
+        \etex_interlinepenalties:D 1 = \__int_eval:n {#1}
         \__galley_calc_interline_penalties:
       }
       {
         \cs_set:Npn \__galley_set_interline_penalty_auxii:n ##1
           {
-            \__int_eval:w
-              \etex_interlinepenalties:D ##1
-               - \etex_interlinepenalties:D \etex_interlinepenalties:D 0
-               + #1
-            \__int_eval_end:
+            \__int_eval:n
+              {
+                \etex_interlinepenalties:D ##1
+                - \etex_interlinepenalties:D \etex_interlinepenalties:D 0
+                + #1
+              }
           }
         \exp_args:Nf \__galley_set_interline_penalty:nn
           { \clist_count:N \l_galley_line_penalties_clist } {#1}
@@ -796,10 +793,10 @@
       \int_step_function:nnnN { #1 + 1 } { 1 }
         { \etex_interlinepenalties:D 0 - 1 }
         \__galley_set_interline_penalty_auxii:n
-      \__int_eval:w #2 \__int_eval_end:
+      \__int_eval:n {#2}
   }
 \cs_new:Npn \__galley_set_interline_penalty_auxi:n #1
-  { \etex_interlinepenalties:D \__int_eval:w #1 \__int_eval_end: }
+  { \etex_interlinepenalties:D \__int_eval:n {#1} }
 \cs_new:Npn \__galley_set_interline_penalty_auxii:n #1 { }
 \cs_new_protected:Npn \__galley_calc_interline_penalties:
   {
@@ -826,19 +823,21 @@
   }
 \cs_new:Npn \__galley_calc_interline_penalties_auxi:n #1
   {
-    \__int_eval:w
+    \__int_eval:n
+      {
         \clist_item:Nn \l_galley_line_penalties_clist {#1}
-      + 0 \clist_item:Nn \l_galley_club_penalties_clist {#1}
-      - \etex_clubpenalties:D #1 ~
-    \__int_eval_end:
+        + 0 \clist_item:Nn \l_galley_club_penalties_clist {#1}
+        - \etex_clubpenalties:D #1 ~
+      }
   }
 \cs_new:Npn \__galley_calc_interline_penalties_auxii:n #1
   {
-    \__int_eval:w
+    \__int_eval:n
+      {
         \etex_interlinepenalties:D \etex_interlinepenalties:D 0 \exp_stop_f:
-      + 0 \clist_item:Nn \l_galley_club_penalties_clist {#1}
-      - \etex_clubpenalties:D #1 ~
-    \__int_eval_end:
+        + 0 \clist_item:Nn \l_galley_club_penalties_clist {#1}
+        - \etex_clubpenalties:D #1 ~
+      }
   }
 \cs_new_protected:Npn \galley_save_club_penalties:N #1
   { \clist_set_eq:NN #1 \l_galley_club_penalties_clist }
@@ -854,7 +853,7 @@
       }
   }
 \cs_new:Npn \__galley_save_display_club_penalties:n #1
-  { \__int_value:w \etex_clubpenalties:D \__int_eval:w #1 \__int_eval_end: , }
+  { \__int_value:w \etex_clubpenalties:D \__int_eval:n {#1} , }
 \cs_new_protected:Npn \galley_save_display_widow_penalties:N #1
   {
     \clist_set:Nx #1
@@ -867,7 +866,7 @@
 \cs_new:Npn \__galley_save_display_widow_penalties:n #1
   {
     \__int_value:w \etex_displaywidowpenalties:D
-      \__int_eval:w #1 \__int_eval_end: ,
+      \__int_eval:n {#1} ,
   }
 \cs_new_protected:Npn \galley_save_widow_penalties:N #1
   {
@@ -879,7 +878,7 @@
       }
   }
 \cs_new:Npn \__galley_save_widow_penalties:n #1
-  { \__int_value:w \etex_widowpenalties:D \__int_eval:w #1 \__int_eval_end: , }
+  { \__int_value:w \etex_widowpenalties:D \__int_eval:n {#1} , }
 \cs_new_protected:Npn \galley_interline_penalty:
   { \__int_value:w \etex_interlinepenalties:D \etex_interlinepenalties:D 0 \exp_stop_f: }
 \__msg_kernel_new:nnn { galley } { no-line-to-end }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty	2017-12-07 23:14:48 UTC (rev 46012)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty	2017-12-07 23:16:26 UTC (rev 46013)
@@ -6,7 +6,7 @@
 %%
 %% xgalley.dtx  (with options: `package')
 %% 
-%% Copyright (C) 2010-2016 The LaTeX3 Project
+%% Copyright (C) 2010-2017 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
@@ -21,7 +21,7 @@
 %% File: xgalley.dtx Copyright (C) 1999-2001, 2004-2009 Frank Mittelbach
 %%                             (C) 2010-2012,2014,2016-2017 The LaTeX3 Project
 \RequirePackage{xparse}
-\ProvidesExplPackage{xgalley}{2017/11/14}{}
+\ProvidesExplPackage{xgalley}{2017/12/05}{}
   {L3 Experimental galley}
 \RequirePackage{xparse,xtemplate,l3galley}
 \clist_new:N \l__galley_tmpa_clist
@@ -466,16 +466,20 @@
           }
       }
   }
-\seq_new:N \c__galley_parbreak_multi_seq
-\seq_gput_right:Nn \c__galley_parbreak_multi_seq { club_penalties }
-\seq_gput_right:Nn \c__galley_parbreak_multi_seq { display_club_penalties }
-\seq_gput_right:Nn \c__galley_parbreak_multi_seq { display_widow_penalties }
-\seq_gput_right:Nn \c__galley_parbreak_multi_seq { widow_penalties }
-\seq_new:N \c__galley_parbreak_single_seq
-\seq_gput_right:Nn \c__galley_parbreak_single_seq { parbreak_badness }
-\seq_gput_right:Nn \c__galley_parbreak_single_seq { broken_penalty }
-\seq_gput_right:Nn \c__galley_parbreak_single_seq { post_display_penalty }
-\seq_gput_right:Nn \c__galley_parbreak_single_seq { pre_display_penalty }
+\seq_const_from_clist:Nn \c__galley_parbreak_multi_seq
+  {
+    club_penalties ,
+    display_club_penalties ,
+    display_widow_penalties ,
+    widow_penalties ,
+  }
+\seq_const_from_clist:Nn \c__galley_parbreak_single_seq
+  {
+    parbreak_badness ,
+    broken_penalty ,
+    post_display_penalty ,
+    pre_display_penalty ,
+  }
 \DeclareInstance { paragraph-breaking } { single-std } { single } { }
 \DeclareInstance { paragraph-breaking } { single-nobreak } { single }
   {



More information about the tex-live-commits mailing list