summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-06-15 21:10:33 +0000
committerKarl Berry <karl@freefriends.org>2018-06-15 21:10:33 +0000
commit59957bdeedffe4b1c7e2727afd9dcd4b60851a90 (patch)
tree6271bbef4d4656a157bb4b4b7363f0402ad2fcb0
parentdf818138a81e60aa4f59b5558202aa5217062165 (diff)
l3kernel (15jun18)
git-svn-id: svn://tug.org/texlive/trunk@48022 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md10
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/README.md2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/expl3.pdfbin585759 -> 585864 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.pdfbin1529620 -> 1533530 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.tex2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdfbin263648 -> 263786 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdfbin280395 -> 280479 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdfbin228124 -> 228223 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3.pdfbin5522618 -> 5560570 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3.tex2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/expl3.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3basics.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3box.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3clist.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3doc.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx12
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3expan.dtx636
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3file.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3final.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3flag.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3int.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3keys.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3msg.dtx7
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3names.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3oldmodules.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prg.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prop.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3quark.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3regex.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3seq.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3skip.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3sort.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3str.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3sys.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3tl.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3token.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex307
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvips.def2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def2
72 files changed, 961 insertions, 135 deletions
diff --git a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
index 4a6f5c6ef75..002fbfee61b 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
+++ b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
@@ -7,6 +7,11 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2018-06-14]
+
+### Added
+- Support for `e`-type argument using `\expanded` or macro emulation
+
## [2018-06-01]
### Added
@@ -105,8 +110,9 @@ this project uses date-based 'snapshot' version identifiers.
- Step func­tions have been added for dim vari­ables,
e.g. `\dim_step_in­line:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2018-05-13...HEAD
-[2018-06-0`]: https://github.com/latex3/latex3/compare/2018-05-13...2018-06-01
+[Unreleased]: https://github.com/latex3/latex3/compare/2018-06-14...HEAD
+[2018-06-01]: https://github.com/latex3/latex3/compare/2018-06-01...2018-06-14
+[2018-06-01]: https://github.com/latex3/latex3/compare/2018-05-13...2018-06-01
[2018-05-13]: https://github.com/latex3/latex3/compare/2018-05-12...2018-05-13
[2018-05-12]: https://github.com/latex3/latex3/compare/2018-04-30...2018-05-12
[2018-04-30]: https://github.com/latex3/latex3/compare/2018-03-05...2018-04-30
diff --git a/Master/texmf-dist/doc/latex/l3kernel/README.md b/Master/texmf-dist/doc/latex/l3kernel/README.md
index 2db5b249aa1..91f8125d4cd 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/README.md
+++ b/Master/texmf-dist/doc/latex/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2018-06-01
+Release 2018-06-14
Overview
--------
diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
index 2b8588bde6a..17c5518c8be 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
index 220190c68c4..3fc0de93a37 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
index 0ef20c22ee0..448805aabe7 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
+++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
@@ -52,7 +52,7 @@
{latex-team@latex-project.org}%
}%
}
-\date{Released 2018-06-01}
+\date{Released 2018-06-14}
\pagenumbering{roman}
\maketitle
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
index 7c56645dd09..7758775d500 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
index 53dac567422..bdf47e1f3af 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
index 131e5a623c7..0e0d8ff54fa 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
@@ -30,7 +30,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2018-06-01}
+\date{Released 2018-06-14}
\begin{document}
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
index f4c275db02f..819c02fe482 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
index 1eacdec0dc7..281575ff7b0 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
@@ -30,7 +30,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2018-06-01}
+\date{Released 2018-06-14}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
index cf4abfbafe4..21661ecef0b 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.tex b/Master/texmf-dist/doc/latex/l3kernel/source3.tex
index db07c579b7e..308681f810d 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/source3.tex
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3.tex
@@ -51,7 +51,7 @@
{latex-team@latex-project.org}%
}%
}
-\date{Released 2018-06-01}
+\date{Released 2018-06-14}
\pagenumbering{roman}
\maketitle
diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
index be64b2ab58b..72f276c7c6c 100644
--- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
@@ -21,7 +21,7 @@
% for those people who are interested.
%
%<*driver|generic|package>
-\def\ExplFileDate{2018-06-01}%
+\def\ExplFileDate{2018-06-14}%
%</driver|generic|package>
%<*driver>
\documentclass[full]{l3doc}
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx
index c1d284d51c0..a92680e7e71 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
index ad726c8786d..c5581d46850 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
index 5692468b9d2..0d69acb9600 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
@@ -138,7 +138,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
index fcb5ea22eff..d9e6e44abe6 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
index 0ab572e458c..58c53afecc0 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
index 779fcb52cb6..85f9dcc0f5a 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
index 1229eba8ec2..b43b944ae69 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx b/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
index 1ff0f5d4624..0dea8a8f8ee 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
index 6c7e7cab31d..bdfc64fb87d 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
index 6880b082a90..d8346b81541 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
@@ -77,7 +77,7 @@ and all files in that bundle must be distributed together.
%
% \title{The \cls{l3doc} class}
% \author{\Team}
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
% \maketitle
% \tableofcontents
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
index c313c5177a6..632d72902ea 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
@@ -61,7 +61,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
index b454235cb98..52987355f9f 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
@@ -481,23 +481,23 @@
%<*package>
\ProvidesExplFile
%<*dvipdfmx>
- {l3dvidpfmx.def}{2018-06-01}{}
+ {l3dvidpfmx.def}{2018-06-14}{}
{L3 Experimental driver: dvipdfmx}
%</dvipdfmx>
%<*dvips>
- {l3dvips.def}{2018-06-01}{}
+ {l3dvips.def}{2018-06-14}{}
{L3 Experimental driver: dvips}
%</dvips>
%<*dvisvgm>
- {l3dvisvgm.def}{2018-06-01}{}
+ {l3dvisvgm.def}{2018-06-14}{}
{L3 Experimental driver: dvisvgm}
%</dvisvgm>
%<*pdfmode>
- {l3pdfmode.def}{2018-06-01}{}
+ {l3pdfmode.def}{2018-06-14}{}
{L3 Experimental driver: PDF mode}
%</pdfmode>
%<*xdvipdfmx>
- {l3xdvidpfmx.def}{2018-06-01}{}
+ {l3xdvidpfmx.def}{2018-06-14}{}
{L3 Experimental driver: xdvipdfmx}
%</xdvipdfmx>
%</package>
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
index d671fed7af8..0352ce35604 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
@@ -64,8 +64,8 @@
% when writing new functions or when applying a kernel function in a
% situation that we haven't thought of before.
%
-% Internally preprocessing of arguments is done with functions from the
-% |\exp_| module. They all look alike, an example would be
+% Internally preprocessing of arguments is done with functions of the form
+% \cs[no-index]{exp_\ldots{}}. They all look alike, an example would be
% \cs{exp_args:NNo}. This function has three arguments, the first and the
% second are a single tokens, while the third argument should be given
% in braces. Applying \cs{exp_args:NNo} expands the content of third
@@ -111,8 +111,8 @@
% as an |n|-type argument, namely a braced multiple-token argument:
% |V|~extracts the value of a variable, |v|~extracts the value from
% the name of a variable, |n|~uses the argument as it is, |o|~expands
-% once, |f|~expands fully the front of the token list, |x|~expands fully all
-% tokens at the price of being non-expandable.
+% once, |f|~expands fully the front of the token list, |e| and
+% |x|~expand fully all tokens (differences are explained later).
% \item A few odd argument types remain: |T|~and |F|~for conditional
% processing, otherwise identical to |n|-type arguments,
% |p|~for the parameter text
@@ -148,8 +148,8 @@
% generates the functions |\foo:NV| and |\foo:cV| in the same
% way. The \cs{cs_generate_variant:Nn} function can only be applied if
% the \meta{parent control sequence} is already defined. If the \meta{parent
-% control sequence} is protected or if the \meta{variant} involves
-% |x|~arguments, then the \meta{variant control sequence} is also
+% control sequence} is protected or if the \meta{variant} involves any
+% |x|~argument, then the \meta{variant control sequence} is also
% protected. The \meta{variant} is created globally, as is any
% \cs[no-index]{exp_args:N\meta{variant}} function needed to carry out the
% expansion.
@@ -158,7 +158,7 @@
% allowed changes are
% \begin{itemize}
% \item |c|~variant of an |N|~parent;
-% \item |o|, |V|, |v|, |f|, or~|x| variant of an |n|~parent;
+% \item |o|, |V|, |v|, |f|, |e|, or~|x| variant of an |n|~parent;
% \item |N|, |n|, |T|, |F|, or |p| argument unchanged.
% \end{itemize}
% This means the \meta{parent} of a \meta{variant} form is always
@@ -167,7 +167,7 @@
% \cs{tl_count:N}.
%
% For backward compatibility it is currently possible to make |n|,
-% |o|, |V|, |v|, |f|, or |x|-type variants of an |N|-type argument or
+% |o|, |V|, |v|, |f|, |e|, or |x|-type variants of an |N|-type argument or
% |N| or |c|-type variants of an |n|-type argument. Both are
% deprecated. The first because passing more than one token to an
% |N|-type argument will typically break the parent function's code.
@@ -180,36 +180,6 @@
%
% \section{Introducing the variants}
%
-% It is usually best to follow the following guidelines when defining
-% new functions that are supposed to come with variant forms.
-% \begin{itemize}
-% \item
-% Arguments that need full expansion (\emph{i.e.}, are denoted
-% with |x|) should be avoided if possible as they can not be
-% processed expandably, \emph{i.e.}, functions of this type
-% cannot work correctly in arguments that are themselves subject to |x|
-% expansion.
-% \end{itemize}
-% When speed is essential (for functions that do very little work and
-% are used numerous times in a document) the following applies because
-% internal functions for argument expansion come in two flavours, some
-% faster than others.
-% \begin{itemize}
-% \item
-% Arguments that might need expansion should come first in the list of
-% arguments.
-% \item
-% Arguments that should consist of single tokens |N|, |c|, |V|, or
-% |v| should come first among these.
-% \item
-% Arguments that appear after the first multi-token argument |n|, |f|
-% or |o| require slightly slower special processing to be expanded.
-% Therefore it is best to use the optimized functions,
-% namely those that contain only |N|, |c|, |V|, and |v|, and, in the
-% last position, |o|, |f|, with possible trailing |N| or |n| or |T|
-% or |F|, which are not expanded.
-% \end{itemize}
-%
% The |V| type returns the value of a register, which can be one of
% |tl|, |clist|, |int|, |skip|, |dim|, |muskip|, or built-in \TeX{}
% registers. The |v| type is the same except it first creates a
@@ -223,6 +193,22 @@
% specific expansion steps are needed, such as when using delimited
% arguments, should the lower-level functions with |o| specifiers be employed.
%
+% The |e| type expands all tokens fully, starting from the first. More
+% precisely the expansion is identical to that of \TeX{}'s \tn{message}
+% (in particular |#| needs not be doubled). It was added in May 2018.
+% In recent enough engines (starting around 2019) it relies on the
+% primitive \tn{expanded} hence is fast. In older engines it is very
+% much slower. As a result it should only be used in performance
+% critical code if typical users will have a recent installation of the
+% \TeX{} ecosystem.
+%
+% The |x| type expands all tokens fully, starting from the first. In
+% contrast to |e|, all macro parameter characters |#| must be doubled,
+% and omitting this leads to low-level errors. In addition this type of
+% expansion is not expandable, namely functions that have |x| in their
+% signature do not themselves expand when appearing inside |x| or |e|
+% expansion.
+%
% The |f| type is so special that it deserves an example. It is
% typically used in contexts where only expandable commands are allowed.
% Then |x|-expansion cannot be used, and |f|-expansion provides an
@@ -251,12 +237,13 @@
% \begin{quote}
% |\example:n { 3 , \int_eval:n { 3 + 4 } }|
% \end{quote}
-% while using |\example:x| instead results in
+% while using |\example:x| or |\example:e| instead results in
% \begin{quote}
% |\example:n { 3 , 7 }|
% \end{quote}
-% at the cost of being protected.
-% If you use this type of expansion in conditional processing then
+% at the cost of being protected (for |x| type) or very much slower in
+% old engines (for |e| type).
+% If you use |f| type expansion in conditional processing then
% you should stick to using |TF| type functions only as the expansion
% does not finish any |\if... \fi:| itself!
%
@@ -280,6 +267,50 @@
% leave |\g_tmpb_tl| unchanged: |{| is the first token in the
% argument and is non-expandable.
%
+% It is usually best to keep the following in mind when using variant
+% forms.
+% \begin{itemize}
+% \item
+% Variants with |x|-type arguments (that are fully expanded before
+% being passed to the |n|-type base function) are never expandable
+% even when the base function is. Such variants cannot work
+% correctly in arguments that are themselves subject to expansion.
+% Consider using |f| or |e| expansion.
+% \item
+% In contrast, |e|~expansion (full expansion, almost like~|x| except
+% for the treatment of~|#|) does not prevent variants from being
+% expandable (if the base function is). The drawback is that
+% |e|~expansion is very much slower in old engines (before 2019).
+% Consider using |f|~expansion if that type of expansion is
+% sufficient to perform the required expansion, or |x|~expansion if
+% the variant will not itself need to be expandable.
+% \item
+% Finally |f|~expansion only expands the front of the token list,
+% stopping at the first non-expandable token. This may fail to
+% fully expand the argument.
+% \end{itemize}
+%
+% When speed is essential (for functions that do very little work and
+% whose variants are used numerous times in a document) the following
+% considerations apply because internal functions for argument expansion
+% come in two flavours, some faster than others.
+% \begin{itemize}
+% \item
+% Arguments that might need expansion should come first in the list
+% of arguments.
+% \item
+% Arguments that should consist of single tokens |N|, |c|, |V|, or
+% |v| should come first among these.
+% \item
+% Arguments that appear after the first multi-token argument |n|,
+% |f|, |e|, or |o| require slightly slower special processing to be
+% expanded. Therefore it is best to use the optimized functions,
+% namely those that contain only |N|, |c|, |V|, and |v|, and, in the
+% last position, |o|, |f|, |e|, with possible trailing |N| or |n| or
+% |T| or |F|, which are not expanded. Any |x|-type argument causes
+% slightly slower processing.
+% \end{itemize}
+%
% \section{Manipulating the first argument}
%
% These functions are described in detail: expansion of multiple tokens follows
@@ -350,6 +381,25 @@
% \end{texnote}
% \end{function}
%
+% \begin{function}[EXP, added = 2018-05-15]{\exp_args:Ne}
+% \begin{syntax}
+% \cs{exp_args:Ne} \meta{function} \Arg{tokens}
+% \end{syntax}
+% This function absorbs two arguments (the \meta{function} name and
+% the \meta{tokens}) and exhaustively expands the \meta{tokens}.
+% The result is inserted in braces into the input stream
+% \emph{after} reinsertion of the \meta{function}.
+% Thus the \meta{function} may take more
+% than one argument: all others are left unchanged.
+% \begin{texnote}
+% This relies on the \tn{expanded} primitive when available (in
+% \LuaTeX{} and starting around 2019 in other engines). Otherwise
+% it uses some fall-back code that is very much slower. As a result
+% it should only be used in performance-critical code if typical
+% users have a recent installation of the \TeX{} ecosystem.
+% \end{texnote}
+% \end{function}
+%
% \begin{function}[EXP]{\exp_args:Nf}
% \begin{syntax}
% \cs{exp_args:Nf} \meta{function} \Arg{tokens}
@@ -377,12 +427,13 @@
%
% \section{Manipulating two arguments}
%
-% \begin{function}[EXP]
+% \begin{function}[EXP, updated = 2018-05-15]
% {
% \exp_args:NNc,
% \exp_args:NNo,
% \exp_args:NNV,
% \exp_args:NNv,
+% \exp_args:NNe,
% \exp_args:NNf,
% \exp_args:Ncc,
% \exp_args:Nco,
@@ -400,12 +451,13 @@
% by the expansion of the second and third arguments.
% \end{function}
%
-% \begin{function}[EXP, updated = 2012-01-14]
+% \begin{function}[EXP, updated = 2018-05-15]
% {
% \exp_args:Nnc,
% \exp_args:Nno,
% \exp_args:NnV,
% \exp_args:Nnv,
+% \exp_args:Nne,
% \exp_args:Nnf,
% \exp_args:Noc,
% \exp_args:Noo,
@@ -514,11 +566,12 @@
%
% \section{Unbraced expansion}
%
-% \begin{function}[EXP, updated = 2012-02-12]
+% \begin{function}[EXP, updated = 2018-05-15]
% {
% \exp_last_unbraced:No,
% \exp_last_unbraced:NV,
% \exp_last_unbraced:Nv,
+% \exp_last_unbraced:Ne,
% \exp_last_unbraced:Nf,
% \exp_last_unbraced:NNo,
% \exp_last_unbraced:NNV,
@@ -605,7 +658,7 @@
% \end{syntax}
% Prevents expansion of the \meta{token} in a context where it would
% otherwise be expanded, for example an |x|-type argument or the first
-% token in an |o| or |f| argument.
+% token in an |o| or |e| or |f| argument.
% \begin{texnote}
% This is the \TeX{} \tn{noexpand} primitive. It only prevents
% expansion. At the beginning of an |f|-type argument, a space
@@ -638,7 +691,7 @@
% \begin{syntax}
% \cs{exp_not:n} \Arg{tokens}
% \end{syntax}
-% Prevents expansion of the \meta{tokens} in an |x|-type argument. In
+% Prevents expansion of the \meta{tokens} in an |e| or |x|-type argument. In
% all other cases the \meta{tokens} continue to be expanded, for
% example in the input stream or in other types of arguments such as
% \texttt{c}, \texttt{f}, \texttt{v}. The argument of \cs{exp_not:n}
@@ -647,7 +700,9 @@
% This is the \eTeX{} \tn{unexpanded} primitive. In an
% |x|-expanding definition (\cs{cs_new:Npx}), \cs{exp_not:n}~|{#1}|
% is equivalent to |##1| rather than to~|#1|, namely it inserts the
-% two characters |#| and~|1|.
+% two characters |#| and~|1|. In an |e|-type argument
+% \cs{exp_not:n}~|{#}| is equivalent to |#|, namely it inserts the
+% character~|#|.
% \end{texnote}
% \end{function}
%
@@ -685,6 +740,16 @@
% \end{texnote}
% \end{function}
%
+% \begin{function}[EXP]{\exp_not:e}
+% \begin{syntax}
+% \cs{exp_not:e} \Arg{tokens}
+% \end{syntax}
+% Expands \meta{tokens} exhaustively, then protects the result of the
+% expansion (including any tokens which were not expanded) from
+% further expansion in |e| or |x|-type arguments using \cs{exp_not:n}.
+% This is very rarely useful but is provided for consistency.
+% \end{function}
+%
% \begin{function}[EXP]{\exp_not:f}
% \begin{syntax}
% \cs{exp_not:f} \Arg{tokens}
@@ -841,7 +906,7 @@
%
% \section{Internal functions}
%
-% \begin{function}{\::n, \::N, \::p, \::c, \::o, \::f, \::x, \::v, \::V, \:::}
+% \begin{function}{\::n, \::N, \::p, \::c, \::o, \::e, \::f, \::x, \::v, \::V, \:::}
% \begin{syntax}
% |\cs_new:Npn \exp_args:Ncof { \::c \::o \::f \::: }|
% \end{syntax}
@@ -851,7 +916,7 @@
% \end{function}
%
% \begin{function}
-% {\::o_unbraced, \::f_unbraced, \::x_unbraced, \::v_unbraced, \::V_unbraced}
+% {\::o_unbraced, \::e_unbraced, \::f_unbraced, \::x_unbraced, \::v_unbraced, \::V_unbraced}
% \begin{syntax}
% |\cs_new:Npn \exp_last_unbraced:Nno { \::n \::o_unbraced \::: }|
% \end{syntax}
@@ -986,6 +1051,22 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}[EXP]{\::e}
+% With the \tn{expanded} primitive available, just expand. Otherwise
+% defer to \cs{exp_args:Ne} implemented later.
+% \begin{macrocode}
+\cs_if_exist:NTF \tex_expanded:D
+ {
+ \cs_new:Npn \::e #1 \::: #2#3
+ { \tex_expanded:D { \exp_not:n { #1 \::: } { \exp_not:n {#2} {#3} } } }
+ }
+ {
+ \cs_new:Npn \::e #1 \::: #2#3
+ { \exp_args:Ne \@@_arg_next:nnn {#3} {#1} {#2} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[EXP]{\::f}
% \begin{macro}{\exp_stop_f:}
% This function is used to expand a token list until the first
@@ -1169,6 +1250,25 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}[EXP]{\exp_args:Ne}
+% When the \tn{expanded} primitive is available, use it. Otherwise
+% use \cs{@@_e:nn}, defined later, to fully expand tokens.
+% \begin{macrocode}
+\cs_if_exist:NTF \tex_expanded:D
+ {
+ \cs_new:Npn \exp_args:Ne #1#2
+ { \exp_after:wN #1 \tex_expanded:D { {#2} } }
+ }
+ {
+ \cs_new:Npn \exp_args:Ne #1#2
+ {
+ \exp_after:wN #1 \exp_after:wN
+ { \exp:w \@@_e:nn {#2} { } }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[EXP]{\exp_args:Nf, \exp_args:NV, \exp_args:Nv}
% \begin{macrocode}
\cs_new:Npn \exp_args:Nf #1#2
@@ -1188,7 +1288,7 @@
%
% \begin{macro}[EXP]
% {
-% \exp_args:NNV, \exp_args:NNv, \exp_args:NNf,
+% \exp_args:NNV, \exp_args:NNv, \exp_args:NNe, \exp_args:NNf,
% \exp_args:Nco, \exp_args:NcV, \exp_args:Ncv, \exp_args:Ncf,
% \exp_args:NVV,
% }
@@ -1209,6 +1309,16 @@
\exp_after:wN #2
\exp_after:wN { \exp:w \@@_eval_register:c {#3} }
}
+\cs_if_exist:NTF \tex_expanded:D
+ {
+ \cs_new:Npn \exp_args:NNe #1#2#3
+ {
+ \exp_after:wN #1
+ \exp_after:wN #2
+ \tex_expanded:D { {#3} }
+ }
+ }
+ { \cs_new:Npn \exp_args:NNe { \::N \::e \::: } }
\cs_new:Npn \exp_args:NNf #1#2#3
{
\exp_after:wN #1
@@ -1302,7 +1412,7 @@
%
% \begin{macro}[EXP]
% {
-% \exp_args:Nnc, \exp_args:Nno, \exp_args:NnV, \exp_args:Nnv, \exp_args:Nnf,
+% \exp_args:Nnc, \exp_args:Nno, \exp_args:NnV, \exp_args:Nnv, \exp_args:Nne, \exp_args:Nnf,
% \exp_args:Noc, \exp_args:Noo, \exp_args:Nof,
% \exp_args:NVo, \exp_args:Nfo, \exp_args:Nff,
% }
@@ -1318,6 +1428,7 @@
\cs_new:Npn \exp_args:Nno { \::n \::o \::: }
\cs_new:Npn \exp_args:NnV { \::n \::V \::: }
\cs_new:Npn \exp_args:Nnv { \::n \::v \::: }
+\cs_new:Npn \exp_args:Nne { \::n \::e \::: }
\cs_new:Npn \exp_args:Nnf { \::n \::f \::: }
\cs_new:Npn \exp_args:Noc { \::o \::c \::: }
\cs_new:Npn \exp_args:Noo { \::o \::o \::: }
@@ -1384,6 +1495,7 @@
% \begin{macro}[EXP]{\::o_unbraced}
% \begin{macro}[EXP]{\::V_unbraced}
% \begin{macro}[EXP]{\::v_unbraced}
+% \begin{macro}[EXP]{\::e_unbraced}
% \begin{macro}[EXP]{\::f_unbraced}
% \begin{macro}[EXP]{\::x_unbraced}
% There are a few places where the last argument needs to be available
@@ -1402,6 +1514,15 @@
\exp_after:wN \@@_arg_last_unbraced:nn
\exp_after:wN { \exp:w \@@_eval_register:c {#2} } {#1}
}
+\cs_if_exist:NTF \tex_expanded:D
+ {
+ \cs_new:Npn \::e_unbraced \::: #1#2
+ { \tex_expanded:D { \exp_not:n {#1} #2 } }
+ }
+ {
+ \cs_new:Npn \::e_unbraced \::: #1#2
+ { \exp:w \@@_e:nn {#2} {#1} }
+ }
\cs_new:Npn \::f_unbraced \::: #1#2
{
\exp_after:wN \@@_arg_last_unbraced:nn
@@ -1419,6 +1540,7 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}[EXP]
% {
@@ -1450,6 +1572,12 @@
{ \exp_after:wN #1 \exp:w \@@_eval_register:N #2 }
\cs_new:Npn \exp_last_unbraced:Nv #1#2
{ \exp_after:wN #1 \exp:w \@@_eval_register:c {#2} }
+\cs_if_exist:NTF \tex_expanded:D
+ {
+ \cs_new:Npn \exp_last_unbraced:Ne #1#2
+ { \exp_after:wN #1 \tex_expanded:D {#2} }
+ }
+ { \cs_new:Npn \exp_last_unbraced:Ne { \::e_unbraced \::: } }
\cs_new:Npn \exp_last_unbraced:Nf #1#2
{ \exp_after:wN #1 \exp:w \exp_end_continue_f:w #2 }
\cs_new:Npn \exp_last_unbraced:NNo #1#2#3
@@ -1539,16 +1667,26 @@
%
% \begin{macro}[EXP]{\exp_not:c}
% \begin{macro}[EXP]{\exp_not:o}
+% \begin{macro}[EXP]{\exp_not:e}
% \begin{macro}[EXP]{\exp_not:f}
% \begin{macro}[EXP]{\exp_not:V}
% \begin{macro}[EXP]{\exp_not:v}
% All these except \cs{exp_not:c} call the kernel-internal
-% \cs{__kernel_exp_not:w} namely \tn{etex_unexpanded:D}.
+% \cs{__kernel_exp_not:w} namely \tn{tex_unexpanded:D}.
% \begin{macrocode}
\cs_new:Npn \exp_not:c #1 { \exp_after:wN \exp_not:N \cs:w #1 \cs_end: }
\cs_new:Npn \exp_not:o #1 { \__kernel_exp_not:w \exp_after:wN {#1} }
+\cs_if_exist:NTF \tex_expanded:D
+ {
+ \cs_new:Npn \exp_not:e #1
+ { \__kernel_exp_not:w \tex_expanded:D { {#1} } }
+ }
+ {
+ \cs_new:Npn \exp_not:e
+ { \__kernel_exp_not:w \exp_args:Ne \prg_do_nothing: }
+ }
\cs_new:Npn \exp_not:f #1
- { \tex_unexpanded:D \exp_after:wN { \exp:w \exp_end_continue_f:w #1 } }
+ { \__kernel_exp_not:w \exp_after:wN { \exp:w \exp_end_continue_f:w #1 } }
\cs_new:Npn \exp_not:V #1
{
\__kernel_exp_not:w \exp_after:wN
@@ -1565,6 +1703,7 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \subsection{Controlled expansion}
%
@@ -1632,6 +1771,385 @@
% \end{macro}
%
%
+% \subsection{Emulating \texttt{e}-type expansion}
+%
+% When the \tn{expanded} primitive is available it is used to implement
+% \texttt{e}-type expansion; otherwise we emulate it.
+%
+% \begin{macrocode}
+\cs_if_exist:NF \tex_expanded:D
+ {
+% \end{macrocode}
+%
+% \begin{macro}[EXP]{\@@_e:nn}
+% Repeatedly expand tokens, keeping track of fully-expanded tokens in
+% the second argument to \cs{@@_e:nn}; this function eventually
+% calls \cs{@@_e_end:nn} to leave \cs{exp_end:} in the input
+% stream, followed by the result of the expansion. There are many
+% special cases: spaces, brace groups, \tn{noexpand}, \tn{unexpanded},
+% \tn{the}, \tn{primitive}.
+% \begin{macrocode}
+ \cs_new:Npn \@@_e:nn #1
+ {
+ \if_false: { \fi:
+ \tl_if_head_is_N_type:nTF {#1}
+ { \@@_e:N }
+ {
+ \tl_if_head_is_group:nTF {#1}
+ { \@@_e_group:n }
+ {
+ \tl_if_empty:nTF {#1}
+ { \exp_after:wN \@@_e_end:nn }
+ { \exp_after:wN \@@_e_space:nn }
+ \exp_after:wN { \if_false: } \fi:
+ }
+ }
+ #1
+ }
+ }
+ \cs_new:Npn \@@_e_end:nn #1#2 { \exp_end: #2 }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e_space:nn}
+% For an explicit space character, remove it by \texttt{f}-expansion
+% and put it in the (future) output.
+% \begin{macrocode}
+ \cs_new:Npn \@@_e_space:nn #1#2
+ { \exp_args:Nf \@@_e:nn {#1} { #2 ~ } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e_group:n, \@@_e_put:nn, \@@_e_put:nnn}
+% For a group, expand its contents, wrap it in two pairs of braces,
+% and call \cs{@@_e_put:nn}. This function places the first item (the
+% double-brace wrapped result) into the output. Importantly,
+% \cs{tl_head:n} works even if the input contains quarks.
+% \begin{macrocode}
+ \cs_new:Npn \@@_e_group:n #1
+ {
+ \exp_after:wN \@@_e_put:nn
+ \exp_after:wN { \exp_after:wN { \exp_after:wN {
+ \exp:w \if_false: } \fi: \@@_e:nn {#1} { } } }
+ }
+ \cs_new:Npn \@@_e_put:nn #1
+ {
+ \exp_args:NNo \exp_args:No \@@_e_put:nnn
+ { \tl_head:n {#1} } {#1}
+ }
+ \cs_new:Npn \@@_e_put:nnn #1#2#3
+ { \exp_args:No \@@_e:nn { \use_none:n #2 } { #3 #1 } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e:N}
+% For an \texttt{N}-type token, call \cs{@@_e:Nnn} with arguments the
+% \meta{first token}, the remaining tokens to expand and what's
+% already been expanded. If the \meta{first token} is non-expandable,
+% including \tn{protected} (\tn{long} or not) macros, it is put in the
+% result by \cs{@@_e_protected:Nnn}. The four special primitives
+% \tn{unexpanded}, \tn{noexpand}, \tn{the}, \tn{primitive} are
+% detected; otherwise the token is expanded by
+% \cs{@@_e_expandable:Nnn}.
+% \begin{macrocode}
+ \cs_new:Npn \@@_e:N #1
+ {
+ \exp_after:wN \@@_e:Nnn
+ \exp_after:wN #1
+ \exp_after:wN { \if_false: } \fi:
+ }
+ \cs_new:Npn \@@_e:Nnn #1
+ {
+ \if_case:w
+ \exp_after:wN \if_meaning:w \exp_not:N #1 #1 1 ~ \fi:
+ \token_if_protected_macro:NT #1 { 1 ~ }
+ \token_if_protected_long_macro:NT #1 { 1 ~ }
+ \if_meaning:w \exp_not:n #1 2 ~ \fi:
+ \if_meaning:w \exp_not:N #1 3 ~ \fi:
+ \if_meaning:w \tex_the:D #1 4 ~ \fi:
+ \if_meaning:w \tex_primitive:D #1 5 ~ \fi:
+ 0 ~
+ \exp_after:wN \@@_e_expandable:Nnn
+ \or: \exp_after:wN \@@_e_protected:Nnn
+ \or: \exp_after:wN \@@_e_unexpanded:Nnn
+ \or: \exp_after:wN \@@_e_noexpand:Nnn
+ \or: \exp_after:wN \@@_e_the:Nnn
+ \or: \exp_after:wN \@@_e_primitive:Nnn
+ \fi:
+ #1
+ }
+ \cs_new:Npn \@@_e_protected:Nnn #1#2#3
+ { \@@_e:nn {#2} { #3 #1 } }
+ \cs_new:Npn \@@_e_expandable:Nnn #1#2
+ { \exp_args:No \@@_e:nn { #1 #2 } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e_primitive:Nnn}
+% Quite rare. Will be implemented later.
+% \begin{macrocode}
+ \cs_new:Npn \@@_e_primitive:Nnn #1
+ {
+ \__kernel_msg_expandable_error:nnn { kernel } { e-type }
+ { \primitive not~implemented }
+ \@@_e:nn
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e_noexpand:Nnn}
+% The \tn{noexpand} primitive has no effect when followed by a token
+% that is not \texttt{N}-type; otherwise \cs{@@_e_put:nn} can grab the
+% next token and put it in the result unchanged.
+% \begin{macrocode}
+ \cs_new:Npn \@@_e_noexpand:Nnn #1#2
+ {
+ \tl_if_head_is_N_type:nTF {#2}
+ { \@@_e_put:nn } { \@@_e:nn } {#2}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]
+% {
+% \@@_e_unexpanded:Nnn, \@@_e_unexpanded:nn,
+% \@@_e_unexpanded:nN, \@@_e_unexpanded:N
+% }
+% The \tn{unexpanded} primitive expands and ignores any space,
+% \cs{scan_stop:}, or token affected by \cs{exp_not:N}, then expects a
+% brace group. Since we only support brace-balanced token lists it is
+% impossible to support the case where the argument of \tn{unexpanded}
+% starts with an implicit brace. Even though we want to expand and
+% ignore spaces we cannot blindly \texttt{f}-expand because tokens
+% affected by \cs{exp_not:N} should discarded without being expanded
+% further.
+%
+% As usual distinguish four cases: brace group (the normal case, where
+% we just put the item in the result), space (just \texttt{f}-expand
+% to remove the space), empty (an error), or \texttt{N}-type
+% \meta{token}. In the last case call \cs{@@_e_unexpanded:nN}
+% triggered by an \texttt{f}-expansion. Having a non-expandable
+% \meta{token} after \tn{unexpanded} is an error (we recover by
+% passing |{}| to \tn{unexpanded}; this is different from \TeX{}
+% because the error recovery of \tn{unexpanded} changes the balance of
+% braces), unless that \meta{token} is \cs{scan_stop:} or a space
+% (recall that we don't implement the case of an implicit begin-group
+% token). An expandable \meta{token} is instead expanded, unless it
+% is \tn{noexpand}. That primitive can be followed by an expandable
+% \texttt{N}-type token, to be removed, by a non-expandable one, kept
+% (and later causing an error), by a space, removed by
+% \texttt{f}-expansion, or by a brace group or nothing (later causing
+% an error).
+% \begin{macrocode}
+ \cs_new:Npn \@@_e_unexpanded:Nnn #1 { \@@_e_unexpanded:nn }
+ \cs_new:Npn \@@_e_unexpanded:nn #1
+ {
+ \tl_if_head_is_N_type:nTF {#1}
+ {
+ \exp_args:Nf \@@_e_unexpanded:nn
+ { \@@_e_unexpanded:nN {#1} #1 }
+ }
+ {
+ \tl_if_head_is_group:nTF {#1}
+ { \@@_e_put:nn }
+ {
+ \tl_if_empty:nTF {#1}
+ {
+ \__kernel_msg_expandable_error:nnn
+ { kernel } { e-type }
+ { \unexpanded missing~brace }
+ \@@_e_end:nn
+ }
+ { \exp_args:Nf \@@_e_unexpanded:nn }
+ }
+ {#1}
+ }
+ }
+ \cs_new:Npn \@@_e_unexpanded:nN #1#2
+ {
+ \exp_after:wN \if_meaning:w \exp_not:N #2 #2
+ \exp_after:wN \use_i:nn
+ \else:
+ \exp_after:wN \use_ii:nn
+ \fi:
+ {
+ \token_if_eq_catcode:NNTF #2 \c_space_token
+ { \exp_stop_f: }
+ {
+ \token_if_eq_meaning:NNTF #2 \scan_stop:
+ { \exp_stop_f: }
+ {
+ \__kernel_msg_expandable_error:nnn
+ { kernel } { e-type }
+ { \unexpanded missing~brace }
+ { }
+ }
+ }
+ }
+ {
+ \token_if_eq_meaning:NNTF #2 \exp_not:N
+ {
+ \exp_args:No \tl_if_head_is_N_type:nT { \use_none:n #1 }
+ { \@@_e_unexpanded:N }
+ }
+ { \exp_after:wN \exp_stop_f: #2 }
+ }
+ }
+ \cs_new:Npn \@@_e_unexpanded:N #1
+ {
+ \exp_after:wN \if_meaning:w \exp_not:N #1 #1 \else:
+ \exp_after:wN \use_i:nn
+ \fi:
+ \exp_stop_f: #1
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e_the:Nnn, \@@_e_the:N, \@@_e_the_toks_reg:N}
+% Finally implement \tn{the}. Followed by anything other than an
+% \texttt{N}-type \meta{token} this causes an error (we just let
+% \TeX{} make one), otherwise we test the \meta{token}. If the
+% \meta{token} is expandable, expand it. Otherwise it could be any
+% kind of register, or things like \tn{numexpr}, so there is no way to
+% deal with all cases. Thankfully, only \tn{toks} data needs to be
+% protected from expansion since everything else gives a string of
+% characters. If the \meta{token} is \tn{toks} we find a number and
+% unpack using the |the_toks| functions. If it is a token register we
+% unpack it in a brace group and call \cs{@@_e_put:nn} to move it to
+% the result. Otherwise we unpack and continue expanding (useless but
+% safe) since it is basically impossible to have a handle on where the
+% result of \tn{the} ends.
+% \begin{macrocode}
+ \cs_new:Npn \@@_e_the:Nnn #1#2
+ {
+ \tl_if_head_is_N_type:nTF {#2}
+ { \if_false: { \fi: \@@_e_the:N #2 } }
+ { \exp_args:No \@@_e:nn { \tex_the:D #2 } }
+ }
+ \cs_new:Npn \@@_e_the:N #1
+ {
+ \exp_after:wN \if_meaning:w \exp_not:N #1 #1
+ \exp_after:wN \use_i:nn
+ \else:
+ \exp_after:wN \use_ii:nn
+ \fi:
+ {
+ \if_meaning:w \tex_toks:D #1
+ \exp_after:wN \@@_e_the_toks:wnn \int_value:w
+ \exp_after:wN \@@_e_the_toks:n
+ \exp_after:wN { \int_value:w \if_false: } \fi:
+ \else:
+ \@@_e_if_toks_register:NTF #1
+ { \exp_after:wN \@@_e_the_toks_reg:N }
+ {
+ \exp_after:wN \@@_e:nn \exp_after:wN {
+ \tex_the:D \if_false: } \fi:
+ }
+ \exp_after:wN #1
+ \fi:
+ }
+ {
+ \exp_after:wN \@@_e_the:Nnn \exp_after:wN ?
+ \exp_after:wN { \exp:w \if_false: } \fi:
+ \exp_after:wN \exp_end: #1
+ }
+ }
+ \cs_new:Npn \@@_e_the_toks_reg:N #1
+ {
+ \exp_after:wN \@@_e_put:nn \exp_after:wN {
+ \exp_after:wN {
+ \tex_the:D \if_false: } \fi: #1 }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e_the_toks:wnn, \@@_e_the_toks:n, \@@_e_the_toks:N}
+% The calling function has applied \cs{int_value:w} so we collect
+% digits with \cs{@@_e_the_toks:n} (which gets the token list as an
+% argument) and \cs{@@_e_the_toks:N} (which gets the first token in
+% case it is \texttt{N}-type). The digits are themselves collected
+% into an \cs{int_value:w} argument to \cs{@@_e_the_toks:wnn}. Then
+% that function unpacks the \tn{toks}\meta{number} into the result.
+% We include |?| because \cs{@@_e_put:nnn} removes one item from its
+% second argument. Note that our approach is rather crude: in cases
+% like |\the\toks12~34| the first \cs{int_value:w} removes the space
+% and we will incorrectly unpack the |\the\toks1234|.
+% \begin{macrocode}
+ \cs_new:Npn \@@_e_the_toks:wnn #1; #2
+ {
+ \exp_args:No \@@_e_put:nnn
+ { \tex_the:D \tex_toks:D #1 } { ? #2 }
+ }
+ \cs_new:Npn \@@_e_the_toks:n #1
+ {
+ \tl_if_head_is_N_type:nTF {#1}
+ { \exp_after:wN \@@_e_the_toks:N \if_false: { \fi: #1 } }
+ { ; {#1} }
+ }
+ \cs_new:Npn \@@_e_the_toks:N #1
+ {
+ \if_int_compare:w 10 < 9 \token_to_str:N #1 \exp_stop_f:
+ \exp_after:wN \use_i:nn
+ \else:
+ \exp_after:wN \use_ii:nn
+ \fi:
+ {
+ #1
+ \exp_after:wN \@@_e_the_toks:n
+ }
+ { \exp_after:wN ; }
+ \exp_after:wN { \if_false: } \fi:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e_if_toks_register:NTF}
+% We need to detect both \tn{toks} registers like \tn{toks@} (in
+% \LaTeXe{}) and parameters such as \tn{everypar}, as the result of
+% unpacking the register should not expand further. The list of
+% parameters is finite so we just use a \cs{cs_if_exist:cTF} test to
+% look up in a table. Registers are found by
+% \cs{token_if_toks_register:NTF} by inspecting the meaning. We abuse
+% \cs{cs_to_str:N}'s ability to remove a leading escape character
+% whatever it is.
+% \begin{macrocode}
+ \prg_new_conditional:Npnn \@@_e_if_toks_register:N #1 { TF }
+ {
+ \token_if_toks_register:NTF #1 { \prg_return_true: }
+ {
+ \cs_if_exist:cTF
+ {
+ @@_e_the_
+ \exp_after:wN \cs_to_str:N
+ \token_to_meaning:N #1
+ :
+ } { \prg_return_true: } { \prg_return_false: }
+ }
+ }
+ \cs_new_eq:NN \@@_e_the_XeTeXinterchartoks: ?
+ \cs_new_eq:NN \@@_e_the_errhelp: ?
+ \cs_new_eq:NN \@@_e_the_everycr: ?
+ \cs_new_eq:NN \@@_e_the_everydisplay: ?
+ \cs_new_eq:NN \@@_e_the_everyeof: ?
+ \cs_new_eq:NN \@@_e_the_everyhbox: ?
+ \cs_new_eq:NN \@@_e_the_everyjob: ?
+ \cs_new_eq:NN \@@_e_the_everymath: ?
+ \cs_new_eq:NN \@@_e_the_everypar: ?
+ \cs_new_eq:NN \@@_e_the_everyvbox: ?
+ \cs_new_eq:NN \@@_e_the_output: ?
+ \cs_new_eq:NN \@@_e_the_pdfpageattr: ?
+ \cs_new_eq:NN \@@_e_the_pdfpageresources: ?
+ \cs_new_eq:NN \@@_e_the_pdfpagesattr: ?
+ \cs_new_eq:NN \@@_e_the_pdfpkmode: ?
+% \end{macrocode}
+% \end{macro}
+%
+% We are done emulating \texttt{e}-type argument expansion when
+% \tn{expanded} is unavailable.
+% \begin{macrocode}
+ }
+% \end{macrocode}
+%
%
% \subsection{Defining function variants}
%
@@ -1915,10 +2433,12 @@
\if:w V #1 n \else:
\if:w v #1 n \else:
\if:w f #1 n \else:
- \if:w x #1 n \else:
- \if:w n #1 n \else:
- \if:w N #1 N \else:
- \scan_stop:
+ \if:w e #1 n \else:
+ \if:w x #1 n \else:
+ \if:w n #1 n \else:
+ \if:w N #1 N \else:
+ \scan_stop:
+ \fi:
\fi:
\fi:
\fi:
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
index 701b635e6db..724bdfeb3d0 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3final.dtx b/Master/texmf-dist/source/latex/l3kernel/l3final.dtx
index cdeecd07dc7..b8dd58c15cc 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3final.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3final.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
index 3b7d5a780f8..0f41b396bba 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
index ab541156bbb..84debbf16d5 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
@@ -38,7 +38,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
% \maketitle
%
% \begin{documentation}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
index 1f114b7f9a7..639e1261738 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
index 5311215b551..c57242901d4 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
@@ -38,7 +38,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
index e9dbb7040f2..2e4af3817a8 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
index e354136cfff..b07da9d6fd5 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
@@ -38,7 +38,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
index cbcabca22a8..c6bb0534d92 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
@@ -38,7 +38,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
index 386c0d6122e..bd7bbf096c6 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
@@ -38,7 +38,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
index c508bed6c4d..aca31d7b51b 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
@@ -38,7 +38,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
index 78650efab3d..76472fd51bf 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
@@ -38,7 +38,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
index e505701fe10..7b49f5b1f88 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
index 9adcbbd4701..ecf482fd402 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
@@ -38,7 +38,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
% \maketitle
%
% \begin{documentation}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
index 9b7cdf8104a..df678477317 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
@@ -38,7 +38,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
index 89b267c364a..b4e2bfa1c00 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
index d88c7681cd3..345cdbe8df0 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
index 05369608f1d..80bf9afd7f7 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
index e7ae1fa9046..75f4bb46740 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
index 50a2bfbec7d..f1e28968315 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
index 23e2131d8cd..f711bf5cbdb 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
index 6bf84cbac57..87a535ce163 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
index 6f33a637c14..1bfa2be1700 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
@@ -1902,6 +1902,11 @@
{ Relation~'#1'~unknown:~use~=,~<,~>,~==,~!=,~<=,~>=. }
\__kernel_msg_new:nnn { kernel } { zero-step }
{ Zero~step~size~for~step~function~#1. }
+\cs_if_exist:NF \tex_expanded:D
+ {
+ \__kernel_msg_new:nnn { kernel } { e-type }
+ { #1 ~ in~e-type~argument }
+ }
% \end{macrocode}
%
% Messages used by the \enquote{\texttt{show}} functions.
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
index cf0e2ba8685..39ecba1694f 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3oldmodules.dtx b/Master/texmf-dist/source/latex/l3kernel/l3oldmodules.dtx
index 00f50d83814..43815ad5e19 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3oldmodules.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3oldmodules.dtx
@@ -42,7 +42,7 @@
% }
%
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
index 7e786a3b4a6..ed55b5052be 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
index 78c0ddb1a06..f31874d7fe4 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
index 626a83ea7f7..727c0e9974c 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
index 7dfe735d06e..02ffddf2116 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
index 33aab822992..1c9eac77cba 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
index d4a3d41c5e9..8069b0dc57b 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
index 117d1515d81..5cce081b462 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
index 566e626069e..56e01c67d4e 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
index 229edfd7bf6..35e352edb99 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
index 8f69f9741c1..c365620f54b 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
index 51b612e03e9..863cc92a668 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
index e3ed9a7080b..7fe05c7f502 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
index 354d0b6ab60..e45aaec2a1f 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
@@ -41,7 +41,7 @@
% }^^A
% }
%
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
%
% \maketitle
%
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
index 6cf7cdc6578..b07a1cf252b 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
@@ -63,7 +63,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx Copyright (C) 1990-2018 The LaTeX3 Project
-\def\ExplFileDate{2018-06-01}%
+\def\ExplFileDate{2018-06-14}%
\begingroup
\def\next{\endgroup}%
\expandafter\ifx\csname PackageError\endcsname\relax
@@ -3175,6 +3175,15 @@
{ \exp_after:wN \__exp_arg_next:Nnn \cs:w #3 \cs_end: {#1} {#2} }
\cs_new:Npn \::o #1 \::: #2#3
{ \exp_after:wN \__exp_arg_next:nnn \exp_after:wN {#3} {#1} {#2} }
+\cs_if_exist:NTF \tex_expanded:D
+ {
+ \cs_new:Npn \::e #1 \::: #2#3
+ { \tex_expanded:D { \exp_not:n { #1 \::: } { \exp_not:n {#2} {#3} } } }
+ }
+ {
+ \cs_new:Npn \::e #1 \::: #2#3
+ { \exp_args:Ne \__exp_arg_next:nnn {#3} {#1} {#2} }
+ }
\cs_new:Npn \::f #1 \::: #2#3
{
\exp_after:wN \__exp_arg_next:nnn
@@ -3236,6 +3245,18 @@
{ \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN {#3} }
\cs_new:Npn \exp_args:NNNo #1#2#3#4
{ \exp_after:wN #1 \exp_after:wN#2 \exp_after:wN #3 \exp_after:wN {#4} }
+\cs_if_exist:NTF \tex_expanded:D
+ {
+ \cs_new:Npn \exp_args:Ne #1#2
+ { \exp_after:wN #1 \tex_expanded:D { {#2} } }
+ }
+ {
+ \cs_new:Npn \exp_args:Ne #1#2
+ {
+ \exp_after:wN #1 \exp_after:wN
+ { \exp:w \__exp_e:nn {#2} { } }
+ }
+ }
\cs_new:Npn \exp_args:Nf #1#2
{ \exp_after:wN #1 \exp_after:wN { \exp:w \exp_end_continue_f:w #2 } }
\cs_new:Npn \exp_args:Nv #1#2
@@ -3260,6 +3281,16 @@
\exp_after:wN #2
\exp_after:wN { \exp:w \__exp_eval_register:c {#3} }
}
+\cs_if_exist:NTF \tex_expanded:D
+ {
+ \cs_new:Npn \exp_args:NNe #1#2#3
+ {
+ \exp_after:wN #1
+ \exp_after:wN #2
+ \tex_expanded:D { {#3} }
+ }
+ }
+ { \cs_new:Npn \exp_args:NNe { \::N \::e \::: } }
\cs_new:Npn \exp_args:NNf #1#2#3
{
\exp_after:wN #1
@@ -3330,6 +3361,7 @@
\cs_new:Npn \exp_args:Nno { \::n \::o \::: }
\cs_new:Npn \exp_args:NnV { \::n \::V \::: }
\cs_new:Npn \exp_args:Nnv { \::n \::v \::: }
+\cs_new:Npn \exp_args:Nne { \::n \::e \::: }
\cs_new:Npn \exp_args:Nnf { \::n \::f \::: }
\cs_new:Npn \exp_args:Noc { \::o \::c \::: }
\cs_new:Npn \exp_args:Noo { \::o \::o \::: }
@@ -3380,6 +3412,15 @@
\exp_after:wN \__exp_arg_last_unbraced:nn
\exp_after:wN { \exp:w \__exp_eval_register:c {#2} } {#1}
}
+\cs_if_exist:NTF \tex_expanded:D
+ {
+ \cs_new:Npn \::e_unbraced \::: #1#2
+ { \tex_expanded:D { \exp_not:n {#1} #2 } }
+ }
+ {
+ \cs_new:Npn \::e_unbraced \::: #1#2
+ { \exp:w \__exp_e:nn {#2} {#1} }
+ }
\cs_new:Npn \::f_unbraced \::: #1#2
{
\exp_after:wN \__exp_arg_last_unbraced:nn
@@ -3395,6 +3436,12 @@
{ \exp_after:wN #1 \exp:w \__exp_eval_register:N #2 }
\cs_new:Npn \exp_last_unbraced:Nv #1#2
{ \exp_after:wN #1 \exp:w \__exp_eval_register:c {#2} }
+\cs_if_exist:NTF \tex_expanded:D
+ {
+ \cs_new:Npn \exp_last_unbraced:Ne #1#2
+ { \exp_after:wN #1 \tex_expanded:D {#2} }
+ }
+ { \cs_new:Npn \exp_last_unbraced:Ne { \::e_unbraced \::: } }
\cs_new:Npn \exp_last_unbraced:Nf #1#2
{ \exp_after:wN #1 \exp:w \exp_end_continue_f:w #2 }
\cs_new:Npn \exp_last_unbraced:NNo #1#2#3
@@ -3457,8 +3504,17 @@
\cs_new_eq:NN \__kernel_exp_not:w \tex_unexpanded:D
\cs_new:Npn \exp_not:c #1 { \exp_after:wN \exp_not:N \cs:w #1 \cs_end: }
\cs_new:Npn \exp_not:o #1 { \__kernel_exp_not:w \exp_after:wN {#1} }
+\cs_if_exist:NTF \tex_expanded:D
+ {
+ \cs_new:Npn \exp_not:e #1
+ { \__kernel_exp_not:w \tex_expanded:D { {#1} } }
+ }
+ {
+ \cs_new:Npn \exp_not:e
+ { \__kernel_exp_not:w \exp_args:Ne \prg_do_nothing: }
+ }
\cs_new:Npn \exp_not:f #1
- { \tex_unexpanded:D \exp_after:wN { \exp:w \exp_end_continue_f:w #1 } }
+ { \__kernel_exp_not:w \exp_after:wN { \exp:w \exp_end_continue_f:w #1 } }
\cs_new:Npn \exp_not:V #1
{
\__kernel_exp_not:w \exp_after:wN
@@ -3479,6 +3535,238 @@
\fi:
\cs_new:Npn \exp_end_continue_f:nw #1 { `^^@ #1 }
\group_end:
+\cs_if_exist:NF \tex_expanded:D
+ {
+ \cs_new:Npn \__exp_e:nn #1
+ {
+ \if_false: { \fi:
+ \tl_if_head_is_N_type:nTF {#1}
+ { \__exp_e:N }
+ {
+ \tl_if_head_is_group:nTF {#1}
+ { \__exp_e_group:n }
+ {
+ \tl_if_empty:nTF {#1}
+ { \exp_after:wN \__exp_e_end:nn }
+ { \exp_after:wN \__exp_e_space:nn }
+ \exp_after:wN { \if_false: } \fi:
+ }
+ }
+ #1
+ }
+ }
+ \cs_new:Npn \__exp_e_end:nn #1#2 { \exp_end: #2 }
+ \cs_new:Npn \__exp_e_space:nn #1#2
+ { \exp_args:Nf \__exp_e:nn {#1} { #2 ~ } }
+ \cs_new:Npn \__exp_e_group:n #1
+ {
+ \exp_after:wN \__exp_e_put:nn
+ \exp_after:wN { \exp_after:wN { \exp_after:wN {
+ \exp:w \if_false: } \fi: \__exp_e:nn {#1} { } } }
+ }
+ \cs_new:Npn \__exp_e_put:nn #1
+ {
+ \exp_args:NNo \exp_args:No \__exp_e_put:nnn
+ { \tl_head:n {#1} } {#1}
+ }
+ \cs_new:Npn \__exp_e_put:nnn #1#2#3
+ { \exp_args:No \__exp_e:nn { \use_none:n #2 } { #3 #1 } }
+ \cs_new:Npn \__exp_e:N #1
+ {
+ \exp_after:wN \__exp_e:Nnn
+ \exp_after:wN #1
+ \exp_after:wN { \if_false: } \fi:
+ }
+ \cs_new:Npn \__exp_e:Nnn #1
+ {
+ \if_case:w
+ \exp_after:wN \if_meaning:w \exp_not:N #1 #1 1 ~ \fi:
+ \token_if_protected_macro:NT #1 { 1 ~ }
+ \token_if_protected_long_macro:NT #1 { 1 ~ }
+ \if_meaning:w \exp_not:n #1 2 ~ \fi:
+ \if_meaning:w \exp_not:N #1 3 ~ \fi:
+ \if_meaning:w \tex_the:D #1 4 ~ \fi:
+ \if_meaning:w \tex_primitive:D #1 5 ~ \fi:
+ 0 ~
+ \exp_after:wN \__exp_e_expandable:Nnn
+ \or: \exp_after:wN \__exp_e_protected:Nnn
+ \or: \exp_after:wN \__exp_e_unexpanded:Nnn
+ \or: \exp_after:wN \__exp_e_noexpand:Nnn
+ \or: \exp_after:wN \__exp_e_the:Nnn
+ \or: \exp_after:wN \__exp_e_primitive:Nnn
+ \fi:
+ #1
+ }
+ \cs_new:Npn \__exp_e_protected:Nnn #1#2#3
+ { \__exp_e:nn {#2} { #3 #1 } }
+ \cs_new:Npn \__exp_e_expandable:Nnn #1#2
+ { \exp_args:No \__exp_e:nn { #1 #2 } }
+ \cs_new:Npn \__exp_e_primitive:Nnn #1
+ {
+ \__kernel_msg_expandable_error:nnn { kernel } { e-type }
+ { \primitive not~implemented }
+ \__exp_e:nn
+ }
+ \cs_new:Npn \__exp_e_noexpand:Nnn #1#2
+ {
+ \tl_if_head_is_N_type:nTF {#2}
+ { \__exp_e_put:nn } { \__exp_e:nn } {#2}
+ }
+ \cs_new:Npn \__exp_e_unexpanded:Nnn #1 { \__exp_e_unexpanded:nn }
+ \cs_new:Npn \__exp_e_unexpanded:nn #1
+ {
+ \tl_if_head_is_N_type:nTF {#1}
+ {
+ \exp_args:Nf \__exp_e_unexpanded:nn
+ { \__exp_e_unexpanded:nN {#1} #1 }
+ }
+ {
+ \tl_if_head_is_group:nTF {#1}
+ { \__exp_e_put:nn }
+ {
+ \tl_if_empty:nTF {#1}
+ {
+ \__kernel_msg_expandable_error:nnn
+ { kernel } { e-type }
+ { \unexpanded missing~brace }
+ \__exp_e_end:nn
+ }
+ { \exp_args:Nf \__exp_e_unexpanded:nn }
+ }
+ {#1}
+ }
+ }
+ \cs_new:Npn \__exp_e_unexpanded:nN #1#2
+ {
+ \exp_after:wN \if_meaning:w \exp_not:N #2 #2
+ \exp_after:wN \use_i:nn
+ \else:
+ \exp_after:wN \use_ii:nn
+ \fi:
+ {
+ \token_if_eq_catcode:NNTF #2 \c_space_token
+ { \exp_stop_f: }
+ {
+ \token_if_eq_meaning:NNTF #2 \scan_stop:
+ { \exp_stop_f: }
+ {
+ \__kernel_msg_expandable_error:nnn
+ { kernel } { e-type }
+ { \unexpanded missing~brace }
+ { }
+ }
+ }
+ }
+ {
+ \token_if_eq_meaning:NNTF #2 \exp_not:N
+ {
+ \exp_args:No \tl_if_head_is_N_type:nT { \use_none:n #1 }
+ { \__exp_e_unexpanded:N }
+ }
+ { \exp_after:wN \exp_stop_f: #2 }
+ }
+ }
+ \cs_new:Npn \__exp_e_unexpanded:N #1
+ {
+ \exp_after:wN \if_meaning:w \exp_not:N #1 #1 \else:
+ \exp_after:wN \use_i:nn
+ \fi:
+ \exp_stop_f: #1
+ }
+ \cs_new:Npn \__exp_e_the:Nnn #1#2
+ {
+ \tl_if_head_is_N_type:nTF {#2}
+ { \if_false: { \fi: \__exp_e_the:N #2 } }
+ { \exp_args:No \__exp_e:nn { \tex_the:D #2 } }
+ }
+ \cs_new:Npn \__exp_e_the:N #1
+ {
+ \exp_after:wN \if_meaning:w \exp_not:N #1 #1
+ \exp_after:wN \use_i:nn
+ \else:
+ \exp_after:wN \use_ii:nn
+ \fi:
+ {
+ \if_meaning:w \tex_toks:D #1
+ \exp_after:wN \__exp_e_the_toks:wnn \int_value:w
+ \exp_after:wN \__exp_e_the_toks:n
+ \exp_after:wN { \int_value:w \if_false: } \fi:
+ \else:
+ \__exp_e_if_toks_register:NTF #1
+ { \exp_after:wN \__exp_e_the_toks_reg:N }
+ {
+ \exp_after:wN \__exp_e:nn \exp_after:wN {
+ \tex_the:D \if_false: } \fi:
+ }
+ \exp_after:wN #1
+ \fi:
+ }
+ {
+ \exp_after:wN \__exp_e_the:Nnn \exp_after:wN ?
+ \exp_after:wN { \exp:w \if_false: } \fi:
+ \exp_after:wN \exp_end: #1
+ }
+ }
+ \cs_new:Npn \__exp_e_the_toks_reg:N #1
+ {
+ \exp_after:wN \__exp_e_put:nn \exp_after:wN {
+ \exp_after:wN {
+ \tex_the:D \if_false: } \fi: #1 }
+ }
+ \cs_new:Npn \__exp_e_the_toks:wnn #1; #2
+ {
+ \exp_args:No \__exp_e_put:nnn
+ { \tex_the:D \tex_toks:D #1 } { ? #2 }
+ }
+ \cs_new:Npn \__exp_e_the_toks:n #1
+ {
+ \tl_if_head_is_N_type:nTF {#1}
+ { \exp_after:wN \__exp_e_the_toks:N \if_false: { \fi: #1 } }
+ { ; {#1} }
+ }
+ \cs_new:Npn \__exp_e_the_toks:N #1
+ {
+ \if_int_compare:w 10 < 9 \token_to_str:N #1 \exp_stop_f:
+ \exp_after:wN \use_i:nn
+ \else:
+ \exp_after:wN \use_ii:nn
+ \fi:
+ {
+ #1
+ \exp_after:wN \__exp_e_the_toks:n
+ }
+ { \exp_after:wN ; }
+ \exp_after:wN { \if_false: } \fi:
+ }
+ \prg_new_conditional:Npnn \__exp_e_if_toks_register:N #1 { TF }
+ {
+ \token_if_toks_register:NTF #1 { \prg_return_true: }
+ {
+ \cs_if_exist:cTF
+ {
+ __exp_e_the_
+ \exp_after:wN \cs_to_str:N
+ \token_to_meaning:N #1
+ :
+ } { \prg_return_true: } { \prg_return_false: }
+ }
+ }
+ \cs_new_eq:NN \__exp_e_the_XeTeXinterchartoks: ?
+ \cs_new_eq:NN \__exp_e_the_errhelp: ?
+ \cs_new_eq:NN \__exp_e_the_everycr: ?
+ \cs_new_eq:NN \__exp_e_the_everydisplay: ?
+ \cs_new_eq:NN \__exp_e_the_everyeof: ?
+ \cs_new_eq:NN \__exp_e_the_everyhbox: ?
+ \cs_new_eq:NN \__exp_e_the_everyjob: ?
+ \cs_new_eq:NN \__exp_e_the_everymath: ?
+ \cs_new_eq:NN \__exp_e_the_everypar: ?
+ \cs_new_eq:NN \__exp_e_the_everyvbox: ?
+ \cs_new_eq:NN \__exp_e_the_output: ?
+ \cs_new_eq:NN \__exp_e_the_pdfpageattr: ?
+ \cs_new_eq:NN \__exp_e_the_pdfpageresources: ?
+ \cs_new_eq:NN \__exp_e_the_pdfpagesattr: ?
+ \cs_new_eq:NN \__exp_e_the_pdfpkmode: ?
+ }
\__kernel_patch:nnNNpn { \__kernel_chk_cs_exist:N #1 } { }
\cs_new_protected:Npn \cs_generate_variant:Nn #1#2
{
@@ -3575,10 +3863,12 @@
\if:w V #1 n \else:
\if:w v #1 n \else:
\if:w f #1 n \else:
- \if:w x #1 n \else:
- \if:w n #1 n \else:
- \if:w N #1 N \else:
- \scan_stop:
+ \if:w e #1 n \else:
+ \if:w x #1 n \else:
+ \if:w n #1 n \else:
+ \if:w N #1 N \else:
+ \scan_stop:
+ \fi:
\fi:
\fi:
\fi:
@@ -9731,6 +10021,11 @@
{ Relation~'#1'~unknown:~use~=,~<,~>,~==,~!=,~<=,~>=. }
\__kernel_msg_new:nnn { kernel } { zero-step }
{ Zero~step~size~for~step~function~#1. }
+\cs_if_exist:NF \tex_expanded:D
+ {
+ \__kernel_msg_new:nnn { kernel } { e-type }
+ { #1 ~ in~e-type~argument }
+ }
\__kernel_msg_new:nnn { kernel } { show-clist }
{
The~comma~list~ \tl_if_empty:nF {#1} { #1 ~ }
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
index 251bd130847..0a797cade44 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx Copyright (C) 1990-2018 The LaTeX3 Project
-\def\ExplFileDate{2018-06-01}%
+\def\ExplFileDate{2018-06-14}%
\let\ExplLoaderFileDate\ExplFileDate
\begingroup
\def\tempa{LaTeX2e}%
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
index 31091110395..8c35b008653 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx Copyright (C) 1990-2018 The LaTeX3 Project
-\def\ExplFileDate{2018-06-01}%
+\def\ExplFileDate{2018-06-14}%
\let\ExplLoaderFileDate\ExplFileDate
\ProvidesPackage{expl3}
[%
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
index b37fd053f39..dfb4dec6f0d 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
@@ -20,7 +20,7 @@
%%
%% File: l3drivers.dtx Copyright(C) 2011-2018 The LaTeX3 Project
\ProvidesExplFile
- {l3dvidpfmx.def}{2018-06-01}{}
+ {l3dvidpfmx.def}{2018-06-14}{}
{L3 Experimental driver: dvipdfmx}
\cs_new_eq:NN \__driver_literal_x:n \tex_special:D
\cs_new_protected:Npn \__driver_literal:n #1
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
index 73a8992041b..7a13c44ddee 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
@@ -20,7 +20,7 @@
%%
%% File: l3drivers.dtx Copyright(C) 2011-2018 The LaTeX3 Project
\ProvidesExplFile
- {l3dvips.def}{2018-06-01}{}
+ {l3dvips.def}{2018-06-14}{}
{L3 Experimental driver: dvips}
\cs_new_eq:NN \__driver_literal_x:n \tex_special:D
\cs_new_protected:Npn \__driver_literal:n #1
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def
index bcb954e19e0..d11ba6a2554 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def
@@ -20,7 +20,7 @@
%%
%% File: l3drivers.dtx Copyright(C) 2011-2018 The LaTeX3 Project
\ProvidesExplFile
- {l3dvisvgm.def}{2018-06-01}{}
+ {l3dvisvgm.def}{2018-06-14}{}
{L3 Experimental driver: dvisvgm}
\cs_new_eq:NN \__driver_literal_x:n \tex_special:D
\cs_new_protected:Npn \__driver_literal:n #1
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
index 6ae1a5b72ef..f1ed2af34f8 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
@@ -20,7 +20,7 @@
%%
%% File: l3drivers.dtx Copyright(C) 2011-2018 The LaTeX3 Project
\ProvidesExplFile
- {l3pdfmode.def}{2018-06-01}{}
+ {l3pdfmode.def}{2018-06-14}{}
{L3 Experimental driver: PDF mode}
\cs_new_eq:NN \__driver_literal_x:n \tex_special:D
\cs_new_protected:Npn \__driver_literal:n #1
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
index ed60301fdd7..f73a321a40f 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
@@ -20,7 +20,7 @@
%%
%% File: l3drivers.dtx Copyright(C) 2011-2018 The LaTeX3 Project
\ProvidesExplFile
- {l3xdvidpfmx.def}{2018-06-01}{}
+ {l3xdvidpfmx.def}{2018-06-14}{}
{L3 Experimental driver: xdvipdfmx}
\cs_new_eq:NN \__driver_literal_x:n \tex_special:D
\cs_new_protected:Npn \__driver_literal:n #1